Manufaturação industrial
Internet das coisas industrial | Materiais industriais | Manutenção e reparo de equipamentos | Programação industrial |
home  MfgRobots >> Manufaturação industrial >  >> Industrial programming >> Verilog

Atribuições Verilog


Colocar valores em redes e variáveis ​​é chamado de atribuições. Existem três formas básicas:

Valores legais do LHS


Uma atribuição tem duas partes - lado direito (RHS) e lado esquerdo (LHS) com um símbolo igual (=) ou um símbolo menor que igual (<=) entre eles.
Tipo de atribuição Lado esquerdo
Procedimento
  • Variáveis ​​(vetor/escalar)
  • Seleção de bits ou seleção parcial de um registro vetorial, inteiro ou variável de tempo
  • Palavra de memória
  • Concatenação de qualquer um dos itens acima
Contínuo
  • Rede (vetor/escalar)
  • Seleção de bits ou seleção parcial de uma rede vetorial
  • Concatenação de seleções de bits e seleções de partes
Procedimento Contínuo
  • Rede ou variável (vetor/escalar)
  • Seleção de bits ou seleção parcial de uma rede vetorial

O RHS pode conter qualquer expressão que avalie um valor final, enquanto o LHS indica uma rede ou uma variável à qual o valor em RHS está sendo atribuído.
  
  
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

  

Atribuição Processual


Atribuições procedurais ocorrem dentro de procedimentos como sempre, inicial, tarefa e funções e são usadas para colocar valores em variáveis. A variável manterá o valor até a próxima atribuição à mesma variável.

O valor será colocado na variável quando a simulação executar esta instrução em algum ponto durante o tempo de simulação. Isso pode ser controlado e modificado da maneira que queremos pelo uso de instruções de fluxo de controle, como if-else-if, instrução case e mecanismos de loop.
  
  
	reg [7:0]  data;
	integer    count;
	real       period;
	
	initial begin
		data = 8'h3e;
		period = 4.23;
		count = 0;
	end
	
	always @ (posedge clk) 
		count++;

  

Atribuição de declaração de variável


Um valor inicial pode ser colocado em uma variável no momento de sua declaração, conforme mostrado a seguir. A atribuição não tem duração e mantém o valor até que a próxima atribuição à mesma variável aconteça. Observe que as atribuições de declaração de variável para uma matriz não são permitidas.
  
  
	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;

  

Se a variável for inicializada durante a declaração e no tempo 0 em um bloco inicial como mostrado abaixo, a ordem de avaliação não é garantida e, portanto, pode ter 8'h05 ou 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

  

Blocos de procedimentos e atribuições serão abordados com mais detalhes em uma seção posterior.

Atribuição Contínua


Clique aqui para um exemplo de simulação passo a passo!

Isso é usado para atribuir valores a redes escalares e vetoriais e acontece sempre que há uma mudança no RHS. Ele fornece uma maneira de modelar a lógica combinacional sem especificar uma interconexão de portas e torna mais fácil conduzir a rede com expressões lógicas.
  
  
    // Example model of an AND gate
	wire  a, b, c;
	
	assign a = b & c;

  

Sempre que b ou c muda seu valor, então toda a expressão em RHS será avaliada e a será atualizado com o novo valor.

Atribuição de declaração líquida


Isso nos permite colocar uma atribuição contínua na mesma instrução que declara a rede. Observe que, como uma rede pode ser declarada apenas uma vez, apenas uma atribuição de declaração é possível para uma rede.
  
  
	wire  penable = 1;

  

Atribuição Contínua Processual


Estas são declarações procedurais que permitem que expressões sejam continuamente atribuídas a redes ou variáveis ​​e são de dois tipos.

atribuir desatribuir


Isso substituirá todas as atribuições processuais a uma variável e será desativado usando o mesmo sinal com deassign . O valor da variável permanecerá o mesmo até que a variável obtenha um novo valor por meio de uma atribuição procedural ou procedural contínua. O LHS de um assign A instrução não pode ser uma seleção de bits, seleção de partes ou uma referência de matriz, mas pode ser uma variável ou uma concatenação de variáveis.
  
  
	reg q;
	
	initial begin
		assign q = 0;
		#10 deassign q;
	end

  

forçar a liberação


Eles são semelhantes aos assign - deassign instruções, mas também pode ser aplicado a redes e variáveis. O LHS pode ser uma seleção de bits de uma rede, seleção de parte de uma rede, variável ou uma rede, mas não pode ser a referência a uma matriz e seleção de bits/parte de uma variável. O force statment substituirá todas as outras atribuições feitas à variável até que ela seja liberada usando o release palavra-chave.
  
  
	reg o, a, b;
	
	initial begin
		force o = a & b;
		...
		release o;
	end

  

Verilog

  1. Tutorial Verilog
  2. Concatenação Verilog
  3. Funções Verilog
  4. Tarefa Verilog
  5. Gerador de Relógio Verilog
  6. Funções matemáticas Verilog
  7. Formato de hora Verilog
  8. Escopo da escala de tempo da Verilog
  9. Operações de E/S de arquivo Verilog
  10. Verilog Olá Mundo