Fabrication industrielle
Internet des objets industriel | Matériaux industriels | Entretien et réparation d'équipement | Programmation industrielle |
home  MfgRobots >> Fabrication industrielle >  >> Industrial programming >> Verilog

Affectations Verilog

Placer des valeurs sur des réseaux et des variables s'appelle des affectations. Il existe trois formes de base :

Valeurs LHS légales

Une affectation comporte deux parties :le côté droit (RHS) et le côté gauche (LHS) avec un symbole égal (=) ou un symbole inférieur à égal (<=) entre les deux.

Type d'affectation Côté gauche
Procédural
  • Variables (vecteur/scalaire)
  • Bit-select ou partie-select d'un vecteur reg, entier ou variable de temps
  • Mot de mémoire
  • Concaténation de l'un des éléments ci-dessus
Continu
  • Net (vecteur/scalaire)
  • Bit-select ou partie-select d'un réseau vectoriel
  • Concaténation de sélections de bits et de sélections de parties
Procédural continu
  • Net ou variable (vecteur/scalaire)
  • Bit-select ou partie-select d'un réseau vectoriel

Le RHS peut contenir n'importe quelle expression qui donne une valeur finale tandis que le LHS indique un réseau ou une variable à laquelle la valeur dans RHS est assignée.

  
  
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

  

Affectation procédurale

Les affectations procédurales se produisent dans des procédures telles que toujours, initiale, tâche et fonctions et sont utilisées pour placer des valeurs sur des variables. La variable conservera la valeur jusqu'à la prochaine affectation à la même variable.

La valeur sera placée sur la variable lorsque la simulation exécute cette instruction à un moment donné pendant la durée de la simulation. Cela peut être contrôlé et modifié comme nous le souhaitons par l'utilisation d'instructions de flux de contrôle telles que if-else-if, l'instruction case et les mécanismes de boucle.

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

  

Affectation de déclaration de variable

Une valeur initiale peut être placée sur une variable au moment de sa déclaration, comme illustré ci-dessous. L'affectation n'a pas de durée et conserve la valeur jusqu'à la prochaine affectation à la même variable. Notez que les affectations de déclaration de variable à un tableau ne sont pas autorisées.

  
  
	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;

  

Si la variable est initialisée lors de la déclaration et à l'instant 0 dans un bloc initial comme indiqué ci-dessous, l'ordre d'évaluation n'est pas garanti et peut donc avoir soit 8'h05 soit 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

  

Les blocs procéduraux et les devoirs seront traités plus en détail dans une section ultérieure.

Affectation continue

Cliquez ici pour un exemple de simulation étape par étape !

Ceci est utilisé pour attribuer des valeurs aux réseaux scalaires et vectoriels et se produit chaque fois qu'il y a un changement dans le RHS. Il fournit un moyen de modéliser la logique combinatoire sans spécifier une interconnexion de portes et facilite la conduite du réseau avec des expressions logiques.

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

  

Chaque fois que b ou c change sa valeur, alors l'expression entière dans RHS sera évaluée et a sera mis à jour avec la nouvelle valeur.

Affectation de la déclaration nette

Cela nous permet de placer une affectation continue sur la même instruction qui déclare le net. Notez qu'étant donné qu'un réseau ne peut être déclaré qu'une seule fois, une seule affectation de déclaration est possible pour un réseau.

  
  
	wire  penable = 1;

  

Affectation continue procédurale

Ce sont des instructions procédurales qui permettent d'affecter en continu des expressions à des réseaux ou à des variables et sont de deux types.

attribuer désattribuer

Cela remplacera toutes les affectations procédurales à une variable et est désactivé en utilisant le même signal avec deassign . La valeur de la variable restera la même jusqu'à ce que la variable obtienne une nouvelle valeur via une affectation continue procédurale ou procédurale. Le LHS d'un assign L'instruction ne peut pas être une sélection de bits, une sélection de partie ou une référence de tableau, mais peut être une variable ou une concaténation de variables.

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

  

libération forcée

Ceux-ci sont similaires au assign - deassign déclarations mais peuvent également être appliquées aux réseaux et aux variables. Le LHS peut être une sélection de bits d'un réseau, une sélection de partie d'un réseau, une variable ou un réseau, mais ne peut pas être la référence à un tableau et une sélection de bits/parties d'une variable. Le force l'instruction remplacera toutes les autres affectations faites à la variable jusqu'à ce qu'elle soit publiée à l'aide du release mot-clé.

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

  

Verilog

  1. Tutoriel Verilog
  2. Concaténation Verilog
  3. Fonctions Verilog
  4. Tâche Verilog
  5. Générateur d'horloge Verilog
  6. Fonctions mathématiques Verilog
  7. Format d'heure Verilog
  8. Portée de l'échelle de temps Verilog
  9. Opérations Verilog File IO