Блоки управления Verilog
Поведение оборудования невозможно реализовать без условных операторов и других способов управления потоком логики. В Verilog есть набор блоков управления потоком и механизмов для достижения того же.
если-иначе-если
Этот условный оператор используется для принятия решения о том, следует ли выполнять определенные операторы или нет. Это очень похоже на if-else-if
операторы в C. Если выражение оценивается как истинное, то будет выполнен первый оператор. Если выражение оценивается как false и если else
часть существует, else
часть будет выполнена.
// if statement without else part
if (expression)
[statement]
// if statment with an else part
if (expression)
[statement]
else
[statement]
// if else for multiple statements should be
// enclosed within "begin" and "end"
if (expression) begin
[multiple statements]
end else begin
[multiple statements]
end
// if-else-if statement
if (expression)
[statement]
else if (expression)
[statement]
else
[statement]
else
часть if-else является необязательной и может вызвать путаницу, если else
опущен во вложенной последовательности if. Чтобы избежать этой путаницы, проще всегда связывать else с предыдущим, если в нем отсутствует else. Другой способ заключается в том, чтобы заключить операторы в тег begin-end
. блокировать. Последний else
часть обрабатывает ни один из вышеперечисленных случаев или случай по умолчанию, когда ни одно из других условий не было выполнено.
Нажмите здесь, чтобы узнать больше о if-else-if
Циклы обеспечивают способ выполнения одного или нескольких операторов в блоке одно или несколько раз. В Verilog существует четыре различных типа операторов цикла.
бесконечный цикл
Это будет непрерывно выполнять операторы внутри блока.
forever
[statement]
forever begin
[multiple statements]
end
Пример
module my_design;
initial begin
forever begin
$display ("This will be printed forever, simulation can hang ...");
end
end
endmodule
Журнал моделирования ncsim> run This will be printed forever, simulation can hang ... This will be printed forever, simulation can hang ... ... ... This will be printed forever, simulation can hang ... This will be printed forever, simulation can hang ... This will be printed forever, simulation can hang ... This will be printed forever, simulation can hang ... Result reached the maximum of 5000 lines. Killing process.
повторить цикл
Это будет выполнять операторы фиксированное количество раз. Если выражение оценивается как X или Z, оно будет считаться нулем и вообще не будет выполнено.
repeat ([num_of_times]) begin
[statements]
end
repeat ([num_of_times]) @ ([some_event]) begin
[statements]
end
Пример
module my_design;
initial begin
repeat(4) begin
$display("This is a new iteration ...");
end
end
endmodule
Журнал моделирования ncsim> run This is a new iteration ... This is a new iteration ... This is a new iteration ... This is a new iteration ... ncsim: *W,RNQUIE: Simulation is complete.
пока цикл
Это будет выполнять операторы, пока выражение истинно, и завершится, когда условие станет ложным. Если условие ложно с самого начала, операторы вообще не будут выполняться.
while (expression) begin
[statements]
end
Пример
module my_design;
integer i = 5;
initial begin
while (i > 0) begin
$display ("Iteration#%0d", i);
i = i - 1;
end
end
endmodule
Журнал моделирования ncsim> run Iteration#5 Iteration#4 Iteration#3 Iteration#2 Iteration#1 ncsim: *W,RNQUIE: Simulation is complete.
для цикла
for ( initial_assignment; condition; increment_variable) begin
[statements]
end
Это будет контролировать операторы, используя трехэтапный процесс:
- Инициализировать переменную счетчика циклов
- Вычислите выражение, обычно включающее переменную счетчика цикла.
- Увеличить переменную счетчика цикла, чтобы позже выражение стало ложным и цикл завершился.
Пример
module my_design;
integer i = 5;
initial begin
for (i = 0; i < 5; i = i + 1) begin
$display ("Loop #%0d", i);
end
end
endmodule
Журнал моделирования ncsim> run Loop #0 Loop #1 Loop #2 Loop #3 Loop #4 ncsim: *W,RNQUIE: Simulation is complete.
Щелкните здесь, чтобы узнать больше о циклах for.
Verilog