Verilog_radar1
.pdfИменование процедурных блоков
nПроцедурному блоку может быть присвоено имя: после begin добаляется <name>
nПреимущества
-Позволяет ссылаться на процедурные блоки по именам
-Позволяет декларировать локальные объекты для процедурного блока
-Позволяет в системе моделирования осуществлять мониторинг процедурного блока по имени
initial
begin : clock_init clk = 1’b0;
end
always
begin : clock_proc #(period/2) clk = ~clk;
end
Типы процедурных назначений
В языке Verilog определено два типа
процедурных назначений
n Blocking
n Nonblocking
Процедурные назначения
nВыполняются внутри процедурных блоков
(initial/always)
n LHS должно иметь тип Variable: (reg, integer, real, time)
nRHS может иметь тип Net или Variable или быть вызовом функции.
nЗадают значение переменной, которое остается неизменным до следующего обновления значения переменной с помощью процедурного назначения
Типы процедурных назначений (прод.)
nBlocking (=) : Обновляет LHS назначение процедурного назначения блокируя другие выполнение других назначений процедурного блока
-Значение RHS (inputs) защелкивается в момент выполнения оператора
-Значение LHS (outputs) обновляется немедленно или после явно заданной задержки
-Выполнение следующих операторов задерживается до полного выполнения blocking statement (до обновления значения LHS (включая задержку) )
nNonblocking (<=) : Обновляет LHS назначение процедурного назначения не блокируя другие выполнение других назначений процедурного блока
-Значение RHS (inputs) защелкивается в момент выполнения оператора
-Обновление значения LHS (outputs) планируется в конце временного шага или после явно заданной задержки
-Выполнение следующих операторов не задерживается до полного выполнения nonblocking statement (до обновления значения LHS (включая задержку))
Blocking и Nonblocking Assignments
Blocking (=) |
Nonblocking (<=) |
initial begin a = #5 b; c = #10 a;
end
initial begin a <= #5 b; c <= #10 a;
end
a=b |
c=a |
a=b c=a |
5 |
10 |
15 |
5 |
10 |
15 |
Выполнение Blocking & Nonblocking
initial begin
a = 1’b0; //Assgnmnt0 b = 1’b1; //Assgnmnt1 a <= #5 b; //Assgnmnt2 b <= #5 a; //Assgnmnt3
end
Это иллюстрация поведения
blocking and nonblocking
назначений
1.Назначение 0 выполняется и a присваивается значение 0 (остальные назначения блокируются)
2.Назначение 1 выполняется и b присваивается значение 1 (остальные назначения блокируются)
3.Назначение 2 выполняется и планируется присвоить a текущее значение b (1) через 5 временных шагов
4.Назначение 3 выполняется и планируется b присвоить текущее значение a (0) через 5 временных шагов
5.Процесс заканчивается через 5 временных шагов и значение a обновляется до 1, а значение b обновляется до 0
Выполнение Blocking & Nonblocking
initial begin
a = 1’b0; //Assgnmnt0 b = 1’b1; //Assgnmnt1 a = #5 b; //Assgnmnt2 b = #5 a; //Assgnmnt3
end
Это иллюстрация поведения
blocking and nonblocking
назначений
1.Назначение 0 выполняется и a присваивается значение 0 (остальные назначения блокируются)
2.Назначение 1 выполняется и b присваивается значение 1 (остальные назначения блокируются)
3.Назначение 2 выполняется и a присваивается текущее значение b
(1) через 5 временных шагов
(остальные назначения на это время блокируются)
4.Назначение 3 выполняется и b присваивается текущее значение a
(1) через 5 временных шагов (остальные назначения на это время блокируются)
5. Процесс закончен
Управление событиями
Event Control
n @ @(expression)
nПриостанавливает выполнение процедурных операторов до наступления события (т.е. до момента изменения значения выражения)
nОбеспечивает управление чувствительное к изменениям сигнала ( edge-sensitive)
nДля проверки нескольких событий используют логическое OR:
- Comma (,)
l Verilog ‘2001 и более поздние
- or
*Note: This usage not supported by synthesis.
Управление событиями и список чувствительности
nИспользуйте управление событиями в начале блока always для задания момента начала его выполнения
-Для каждого выполнения блока always требуется наступление события
-Блок always становится “чувствительным” к переменным в управлении событием
n Часто называют Sensitivity List n Поддержан средствами синтеза
Формат |
|
Пример |
|
|
|
always @(sensitivity_list) begin |
|
// Process executes whenever |
-- Statement_1 |
|
// a, b, c or d changes in value |
-- ………….. |
|
always @(a, b, c, d) begin |
-- Statement_N |
|
#15 y = (a ^ b) & (c ~| d); |
end |
|
end |
Описание комбинационных и триггерных схем
nRTL описания используют процедурные блоки для описания комбинационных и триггерных схем
-Комбинационный - Combinatorial Process
-Тактовый (регистровый) - Clocked Process
nДля описания комбинационных схем используются блокирующие назначения
nДля описания триггерных схем используются не блокирующие назначения