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

Верилог Задания

Размещение значений в сетях и переменных называется присвоением. Существует три основных формы:

Допустимые значения LHS

Присваивание состоит из двух частей:правой (правой) и левой (левой) частей с символом равенства (=) или символом меньшего равенства (<=) между ними.

Тип назначения Левая сторона
Процедурный
  • Переменные (векторные/скалярные)
  • Побитовый или частичный выбор векторной регулярной, целочисленной или временной переменной
  • Слово памяти
  • Объединение любого из вышеперечисленных
Непрерывный
  • Чистая (векторная/скалярная)
  • Битовый или частичный выбор векторной сети
  • Конкатенация выборки битов и выборок частей
Процедурный Непрерывный
  • Чистая или переменная (векторная/скалярная)
  • Битовый или частичный выбор векторной сети

Правая часть может содержать любое выражение, результатом которого является окончательное значение, в то время как левая часть указывает цепь или переменную, которой присваивается значение в правой части.

  
  
module tb;
	reg clk;
	wire a, b, c, d, e, f;
	reg  z, y;
	
	// clk is on the LHS and the not of clk forms RHS
	always #10 clk = ~clk;
	
	// y is the LHS and the constant 1 is RHS
	assign y = 1; 
	
	// f is the LHS, and the expression of a,b,d,e forms the RHS
	assign f = (a | b) ^ (d & e);

	always @ (posedge clk) begin
		// z is the LHS, and the expression of a,b,c,d forms the RHS
		z <= a + b + c + d;
	end
	
	initial begin
		// Variable names on the left form LHS while 0 is RHS
		a <= 0; b <= 0; c <= 0; d <= 0; e <= 0;
		clk <= 0;
	end
endmodule

  

Процедурное назначение

Процедурные присваивания происходят внутри таких процедур, как всегда, начальные, задачи и функции, и используются для помещения значений в переменные. Переменная будет хранить значение до следующего присвоения той же переменной.

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

  
  
	reg [7:0]  data;
	integer    count;
	real       period;
	
	initial begin
		data = 8'h3e;
		period = 4.23;
		count = 0;
	end
	
	always @ (posedge clk) 
		count++;

  

Назначение объявления переменной

Начальное значение может быть помещено в переменную во время ее объявления, как показано далее. Присваивание не имеет длительности и сохраняет значение до тех пор, пока не произойдет следующее присвоение той же переменной. Обратите внимание, что присвоение объявлений переменных массиву не разрешено.

  
  
	module my_block;
		reg [31:0] data = 32'hdead_cafe;
	
		initial begin
			#20  data = 32'h1234_5678;    // data will have dead_cafe from time 0 to time 20
			                              // At time 20, data will get 12345678
		end
	endmodule

  
  
  
	reg [3:0] a = 4'b4;
	
	// is equivalent to 
	
	reg [3:0] a;
	initial a = 4'b4;

  

Если переменная инициализируется во время объявления и в момент времени 0 в начальном блоке, как показано ниже, порядок вычисления не гарантируется и, следовательно, может иметь либо 8'h05, либо 8'hee.

  
  
	module my_block;
		reg [7:0]  addr = 8'h05;
		
		initial 
			addr = 8'hee;
	endmodule

  
  
  
	reg [3:0] array [3:0] = 0;           // illegal
	integer i = 0, j;                    // declares two integers i,j and i is assigned 0
	real r2 = 4.5, r3 = 8;               // declares two real numbers r2,r3 and are assigned 4.5, 8 resp.
	time startTime = 40;                 // declares time variable with initial value 40

  

Процедурные блоки и назначения будут более подробно описаны в следующем разделе.

Непрерывное назначение

Щелкните здесь, чтобы просмотреть пример пошагового моделирования!

Это используется для присвоения значений скалярным и векторным сетям и происходит всякий раз, когда происходит изменение RHS. Он дает возможность моделировать комбинационную логику без указания взаимосвязи вентилей и упрощает управление сетью с помощью логических выражений.

  
  
    // Example model of an AND gate
	wire  a, b, c;
	
	assign a = b & c;

  

Всякий раз, когда b или c меняют свое значение, будет оцениваться все выражение в RHS и a будет обновлено с новым значением.

Назначение сетевого объявления

Это позволяет нам поместить непрерывное присваивание в тот же оператор, который объявляет сеть. Обратите внимание, что, поскольку цепь может быть объявлена ​​только один раз, для цепи возможно только одно назначение объявления.

  
  
	wire  penable = 1;

  

Процедурное непрерывное назначение

Это процедурные операторы, которые позволяют непрерывно назначать выражения цепям или переменным и бывают двух типов.

назначить отменить

Это переопределит все процедурные назначения переменной и деактивируется с помощью того же сигнала с deassign . Значение переменной останется прежним, пока переменная не получит новое значение посредством процедурного или процедурного непрерывного присвоения. Левая сторона assign оператор не может быть битовым выбором, частичным выбором или ссылкой на массив, но может быть переменной или конкатенацией переменных.

  
  
	reg q;
	
	initial begin
		assign q = 0;
		#10 deassign q;
	end

  

принудительно удалить

Они аналогичны assign - deassign операторов, но также может применяться к сетям и переменным. LHS может быть выбором бита цепи, выбором части цепи, переменной или цепью, но не может быть ссылкой на массив и выбором бита/части переменной. force statment переопределит все другие назначения, сделанные для переменной, пока она не будет освобождена с помощью release ключевое слово.

  
  
	reg o, a, b;
	
	initial begin
		force o = a & b;
		...
		release o;
	end

  

Verilog

  1. Учебник Verilog
  2. Конкатенация Verilog
  3. Верилог-функции
  4. Верилог Задача
  5. Генератор часов Verilog
  6. Математические функции Verilog
  7. Формат времени Verilog
  8. Охват шкалы времени Verilog
  9. Операции ввода-вывода файлов Verilog
  10. Верилог привет мир