Verilog_radar1
.pdfДругие типы данных 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; |
|
|
|
|
|
|
|
|
|
|
|