Скачиваний:
31
Добавлен:
29.12.2022
Размер:
8.96 Mб
Скачать

Другие типы данных Variable

 

Типы данных

 

Для чего используется

 

Поддержка синтеза

 

 

Variable

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

reg

 

Без знаковая переменная.

 

Y

 

 

 

Для знакового представления используйте reg

 

 

 

 

 

signed.

 

 

 

 

 

 

 

 

 

 

 

integer

 

Знаковая переменная (обычно 32 бита)

 

Y

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Беззнаковое целое (обычно 64 бита)

 

 

 

 

time

 

используется для хранения времени при

 

N

 

 

 

 

моделировании

 

 

 

 

 

 

 

 

 

 

 

real

 

Переменная с плавающей запятой, двойной

 

N

 

 

 

точности

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

realtime

 

Переменная с плавающей запятой, двойной

 

N

 

 

 

точности, используемая с time

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Тип данных Variable

n reg(1) - без знаковая переменная заданной разрядности

l Для знаковых используется - reg signed (2)

n integer – знаковая переменная (обычно 32 бита)

nОбъявление шины:

-<data_type> [MSB : LSB ] <signal name> ;

-<data_type> [LSB : MSB] <signal name> ;

nПример:

-reg clrn;

-reg [7 : 0] out ;

Примечания:

1)Тип reg не соответствует физическому триггеру

2)Для типа NET также можно использовать signed знаковое представление

Два типа процедурных блоков

ninitial

-Используется для инициализации начальных значений

nalways

-Используется для задания алгоритма работы устройства

рКаждый always и initial блоки представляют отдельный процесс

рПроцессы работают параллельно и начинаются в момент времени 0

рОператоры внутри процесса выполняются последовательно

рalways и initial не могут использоваться рекурсивно

Процедурные блоки

always and initial blocks

Behavioral Statements

Assignments: blocking nonblocking

Timing Specifications

Процедурный блок initial

n Содержит поведенческое описание

nКаждый initial выполняется параллельно начиная с момента времени 0, причем выполняется только один раз и больше не выполняется

nНеобходимо использовать ключевые слова begin и end для того, чтобы сгруппировать операторы внутри блока initial (в том случае, когда блок содержит более одного оператора)

nПримеры использования

-Инициализация; Монитор; Любая функциональность, которая должна быть активирована один раз

ЮОбратите внимание: хотя блок initial выполняется только один раз, но продолжительность выполнения блока initial может быть бесконечной (т.е. функциональность внутри блока может продолжать работать все время моделирования)

Процедурный блок always

n Содержит поведенческое описание

nКаждый блок always выполняется параллельно начиная с момента времени 0 и выполняется постоянно (циклически)

nНеобходимо использовать ключевые слова begin и end для того, чтобы сгруппировать операторы внутри блока always (в том случае, когда блок содержит более одного оператора)

nПримеры использования

-Описание цифровых устройств

-Любой процесс или функциональность, выполнение которых должно повторяться циклически

Поведение процедурных блоков

A

R

C

H

I

T variables

E

C

T

U

R

E

 

 

 

§

Каждый процедурный блок

Proc Block 1

 

 

 

выполняется параллельно с

Sequential

 

 

 

другими процедурными

Statements

 

 

 

 

 

 

 

блоками

 

 

variables

 

§ Порядок always/initial

 

 

 

блоков НЕ ИМЕЕТ

 

 

 

 

 

 

 

значения

Proc Block n

 

 

§

Внутри процедурных блоков

Sequential

 

 

 

все операторы выполняются

Statements

 

 

 

последовательно

 

 

 

 

 

 

 

 

§ Порядок операторов

 

 

 

 

внутри always/initial

 

 

 

 

блоков ИМЕЕТ значение

Особенности блоков always/initial

always/initial

blocks

 

 

 

 

 

 

 

 

 

 

 

Procedural

 

Procedural

 

Behavioral

 

Block

Assignments

 

Timing Control

 

Statements

 

Execution

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Blocking (=)

 

 

 

delay

 

 

 

if-else

 

 

Sequential

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

(begin-end)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

event

 

 

 

case

 

 

 

 

 

Nonblocking (<=)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Concurrent

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

wait

 

 

for loop

 

 

(fork-join)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Пример использование блока initial

module system;

reg a, b, c, d;

// single statement initial a = 1’b0;

/* multiple statements:

needs to be grouped */ initial begin

b = 1’b1; #5 c = 1’b0;

#10 d = 1’b0; end

initial #20 $finish;

endmodule

 

Time

 

Statement(s) Executed

 

 

 

 

 

 

 

 

 

 

 

 

0

 

a = 1’b0; b = 1’b1

 

 

 

 

 

 

 

 

 

 

 

 

5

 

c = 1’b0;

 

 

 

 

 

 

 

 

 

 

 

 

15

 

d = 1’b0;

 

 

 

 

 

 

 

 

 

 

 

 

20

 

$finish

 

 

 

 

 

 

 

 

 

 

 

Пример использования блока

always

module clk_gen #(parameter period = 50)

(

output reg clk

);

initial clk = 1’b0;

always

#(period/2) clk = ~clk;

initial #100 $finish;

endmodule

 

Time

 

Statement(s) Executed

 

 

 

 

 

 

 

 

 

 

 

 

0

 

clk = 1’b0;

 

 

 

 

 

 

 

 

 

 

 

 

25

 

clk = 1’b1;

 

 

 

 

 

 

 

 

 

 

 

 

50

 

clk = 1’b0;

 

 

 

 

 

 

 

 

 

 

 

 

75

 

clk = 1’b1;

 

 

 

 

 

 

 

 

 

 

 

 

100

 

$finish;