Операторы блоков Verilog
Существуют способы сгруппировать набор операторов вместе, которые синтаксически эквивалентны одному оператору и известны как блочные операторы. . Есть два типа блочных операторов:последовательные и параллельные.
Последовательно
Операторы обертываются с использованием begin
и end
ключевые слова и будут выполняться последовательно в заданном порядке, один за другим. Значения задержки обрабатываются относительно времени выполнения предыдущего оператора. После того, как все операторы внутри блока выполнены, управление может быть передано в другое место.
module design0;
bit [31:0] data;
// "initial" block starts at time 0
initial begin
// After 10 time units, data becomes 0xfe
#10 data = 8'hfe;
$display ("[Time=%0t] data=0x%0h", $time, data);
// After 20 time units, data becomes 0x11
#20 data = 8'h11;
$display ("[Time=%0t] data=0x%0h", $time, data);
end
endmodule
В приведенном выше примере первый оператор в begin-end
блок будет выполняться за 10 единиц времени, а второй оператор за 30 единиц времени из-за относительного характера. Это 20 единиц времени после выполнения предыдущего оператора.
ncsim> run [Time=10] data=0xfe [Time=30] data=0x11 ncsim: *W,RNQUIE: Simulation is complete.
Параллельно
параллель блок может выполнять операторы одновременно, а управление задержкой может использоваться для обеспечения упорядочения назначений по времени. Операторы запускаются параллельно, заключая их в fork
и join
ключевые слова.
initial begin
#10 data = 8'hfe;
fork
#20 data = 8'h11;
#10 data = 8'h00;
join
end
В приведенном выше примере fork-join
блок будет запущен после выполнения оператора в 10 единиц времени. Операторы в этом блоке будут выполняться параллельно, и первым будет запущен оператор, в котором данным присваивается значение 8'h00, поскольку задержка для этого составляет 10 единиц времени после запуска fork-join. Еще через 10 единиц времени будет запущен первый оператор, и данные получат значение 8'h11.
initial begin
#10 data = 8'hfe;
fork
#10 data = 8'h11;
begin
#20 data = 8'h00;
#30 data = 8'haa;
end
join
end
Есть begin-end
блок в приведенном выше примере, и все операторы в пределах блока begin-end будут выполняться последовательно, но сам блок будет запущен параллельно с другими операторами. Таким образом, данные получат 8:11 в 20 единицах времени, 8:00 в 30 единицах времени и 8'haa в 60 единицах времени.
Именование блоков
Как последовательные, так и параллельные блоки могут быть названы путем добавления : name_of_block
после ключевых слов begin
и fork
. Таким образом, на блок можно ссылаться в disable
заявление.
begin : name_seq
[statements]
end
fork : name_fork
[statements]
join
Verilog
- Как автоматизация подготовки данных ускоряет получение аналитических сведений?
- Учебник Verilog
- Конкатенация Verilog
- Verilog - в ореховой скорлупе
- Верилог Задания
- Блокировка и неблокировка Verilog
- Блоки управления Verilog
- Верилог-функции
- Семантика планирования Verilog
- Пора улучшать ваши S&OP, системы данных и планирования