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

Заявление о деле Verilog

case Оператор проверяет, соответствует ли данное выражение одному из других выражений в списке, и соответственно переходит. Обычно он используется для реализации мультиплексора. Конструкция if-else может оказаться непригодной, если необходимо проверить множество условий, и будет синтезирована в кодировщик с приоритетом вместо мультиплексора.

Синтаксис

Дело Verilog оператор начинается с case ключевое слово и заканчивается endcase ключевое слово. Выражение в скобках оценивается ровно один раз и сравнивается со списком альтернатив в том порядке, в котором они написаны, и выполняются операторы, для которых альтернатива соответствует данному выражению. Блок из нескольких операторов должен быть сгруппирован и находиться в пределах begin и end .

  
  
	// Here 'expression' should match one of the items (item 1,2,3 or 4)
	case (<expression>) 
		case_item1 : 	<single statement>
		case_item2,
		case_item3 : 	<single statement>
		case_item4 : 	begin
		          			<multiple statements>
		        			end
		default 	 : <statement>
	endcase

  

Если ни один из элементов case не соответствует заданному выражению, операторы в пределах default пункт выполнен. default оператор является необязательным, и может быть только один default заявление в заявлении по делу. Операторы case могут быть вложенными.

Выполнение выйдет из блока case без каких-либо действий, если ни один из элементов не соответствует выражению и default выписка не дается.

Пример

Модуль проектирования, показанный ниже, имеет 2-битный сигнал выбора для маршрутизации одного из трех других 3-битных входов к вызываемому выходному сигналу. case оператор используется для назначения правильного ввода для вывода на основе значения sel. Так как sel — это 2-битный сигнал, он может иметь 2 2 комбинации, от 0 до 3. Оператор по умолчанию помогает установить вывод равным 0, если sel равно 3.

  
  
module my_mux (input       [2:0] 	a, b, c, 		// Three 3-bit inputs
                           [1:0]	sel, 			  // 2-bit select signal to choose from a, b, c
               output reg  [2:0] 	out); 			// Output 3-bit signal 
  
  // This always block is executed whenever a, b, c or sel changes in value
  always @ (a, b, c, sel) begin 		
    case(sel)
      2'b00    : out = a; 		// If sel=0, output is a
      2'b01    : out = b; 		// If sel=1, output is b
      2'b10    : out = c; 		// If sel=2, output is c
      default  : out = 0; 		// If sel is anything else, out is always 0
    endcase
  end
endmodule

  

Схема оборудования

Код rtl разработан для получения аппаратной схемы, представляющей мультиплексор 4:1.

Посмотрите, что выход равен нулю, когда sel равен 3, и соответствует назначенным входам для других значений.

Журнал моделирования
ncsim> run
[0]  a=0x4 b=0x1 c=0x1 sel=0b11 out=0x0
[10] a=0x5 b=0x5 c=0x5 sel=0b10 out=0x5
[20] a=0x1 b=0x5 c=0x6 sel=0b01 out=0x5
[30] a=0x5 b=0x4 c=0x1 sel=0b10 out=0x1
[40] a=0x5 b=0x2 c=0x5 sel=0b11 out=0x0
ncsim: *W,RNQUIE: Simulation is complete.

В операторе case сравнение завершается успешно только тогда, когда каждый бит выражения соответствует одной из альтернатив, включая 0, 1, x и z. В показанном выше примере, если любой из битов в sel равен x или z, default оператор будет выполнен, потому что ни одна из других альтернатив не совпала. В таком случае на выходе будут все нули.

Журнал моделирования
ncsim> run
[0] a=0x4 b=0x1 c=0x1 sel=0bxx out=0x0
[10] a=0x3 b=0x5 c=0x5 sel=0bzx out=0x0
[20] a=0x5 b=0x2 c=0x1 sel=0bxx out=0x0
[30] a=0x5 b=0x6 c=0x5 sel=0bzx out=0x0
[40] a=0x5 b=0x4 c=0x1 sel=0bxz out=0x0
[50] a=0x6 b=0x5 c=0x2 sel=0bxz out=0x0
[60] a=0x5 b=0x7 c=0x2 sel=0bzx out=0x0
[70] a=0x7 b=0x2 c=0x6 sel=0bzz out=0x0
[80] a=0x0 b=0x5 c=0x4 sel=0bxx out=0x0
[90] a=0x5 b=0x5 c=0x5 sel=0bxz out=0x0
ncsim: *W,RNQUIE: Simulation is complete.

Если оператор case в дизайне имеет x и z в альтернативах элемента case, результаты будут совсем другими.

  
  
module my_mux (input  		[2:0] 	a, b, c,
													[1:0]		sel,
							output reg	[2:0] 	out);
  
  // Case items have x and z and sel has to match the exact value for
  // output to be assigned with the corresponding input
  always @ (a, b, c, sel) begin
    case(sel)
      2'bxz			:	out = a;
      2'bzx			:	out = b;
      2'bxx			:	out = c;
      default 	:	out = 0;
    endcase
  end
endmodule

  
Журнал моделирования
ncsim> run
[0] a=0x4 b=0x1 c=0x1 sel=0bxx out=0x1
[10] a=0x3 b=0x5 c=0x5 sel=0bzx out=0x5
[20] a=0x5 b=0x2 c=0x1 sel=0bxx out=0x1
[30] a=0x5 b=0x6 c=0x5 sel=0bzx out=0x6
[40] a=0x5 b=0x4 c=0x1 sel=0bxz out=0x5
[50] a=0x6 b=0x5 c=0x2 sel=0bxz out=0x6
[60] a=0x5 b=0x7 c=0x2 sel=0bzx out=0x7
[70] a=0x7 b=0x2 c=0x6 sel=0bzz out=0x0
[80] a=0x0 b=0x5 c=0x4 sel=0bxx out=0x4
[90] a=0x5 b=0x5 c=0x5 sel=0bxz out=0x5
ncsim: *W,RNQUIE: Simulation is complete.

Чем case отличается от if-else ?

case оператор отличается от if-else-if двумя способами:


Verilog

  1. Оператор переключения C#
  2. Оператор C# break
  3. C# оператор продолжения
  4. Оператор C++ Switch Case с ПРИМЕРОМ
  5. Учебник Verilog
  6. Конкатенация Verilog
  7. Верилог Задания
  8. Блокировка и неблокировка Verilog
  9. Верилог-функции
  10. Верилог Задача