Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Industrial programming >> Verilog

Блоки управления 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

  1. Выражения, операторы и блоки C# (с примерами)
  2. Java-выражения, операторы и блоки
  3. Учебник Verilog
  4. Конкатенация Verilog
  5. Верилог Задания
  6. Блокировка и неблокировка Verilog
  7. Блоки управления Verilog
  8. Верилог-функции
  9. Верилог Задача
  10. Контроль задержки Verilog