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

Types de données Verilog

L'intention principale des types de données dans le langage Verilog est de représenter des éléments de stockage de données comme des bits dans une bascule et des éléments de transmission comme des fils qui se connectent entre des portes logiques et des structures séquentielles.

Quelles sont les valeurs des variables ?

Presque tous les types de données ne peuvent avoir qu'une des quatre valeurs différentes indiquées ci-dessous, à l'exception de real et event types de données.

0 représente un zéro logique ou une condition fausse
1 représente un un logique ou une condition vraie
x représente une valeur logique inconnue (peut être zéro ou un)
z représente un état à haute impédance

L'image suivante montre comment ces valeurs sont représentées dans les chronogrammes et les signaux de simulation. La plupart des simulateurs utilisent cette convention où rouge signifie X et orange au milieu signifie haute impédance ou Z .

Qu'implique l'ensemble de valeurs verilog ?

Puisque Verilog est essentiellement utilisé pour décrire des éléments matériels comme les bascules et la logique combinatoire comme NAND et NOR, il doit modéliser le système de valeur trouvé dans le matériel. Un un logique représenterait la tension d'alimentation Vdd qui peut varier entre 0,8 V et plus de 3 V en fonction du nœud de technologie de fabrication. Un zéro logique représenterait la masse et donc une valeur de 0V.

X ou x signifie que la valeur est simplement inconnue à ce moment-là et peut être 0 ou 1. C'est assez différent de la façon dont X est traité en logique booléenne, où il signifie "ne s'en soucie pas".

Comme pour tout circuit électrique incomplet, le fil qui n'est connecté à rien aura une haute impédance à ce nœud et est représenté par Z ou z . Même dans verilog, tout fil non connecté entraînera une haute impédance.

Réseaux et variables

Filets et variables sont les deux principaux groupes de types de données qui représentent différentes structures matérielles et diffèrent dans la manière dont ils sont attribués et conservent des valeurs.

Filets

Filets sont utilisés pour se connecter entre des entités matérielles telles que des portes logiques et ne stockent donc aucune valeur par eux-mêmes. Dans l'image ci-dessous, un réseau appelé net_11 est utilisé pour se connecter entre la sortie de la porte ET et la première entrée de la bascule appelée data_0. De la même manière, les deux entrées de la porte ET sont connectées aux réseaux net_45 et net_67.

Il existe différents types de filets, chacun avec des caractéristiques différentes, mais le filet le plus populaire et le plus largement utilisé dans les conceptions numériques est de type wire . Un wire est un type de données Verilog utilisé pour connecter des éléments et pour connecter des réseaux pilotés par une seule porte ou une affectation continue. Le wire est similaire au fil électrique utilisé pour connecter deux composants sur une planche à pain.

Lorsqu'il y a un besoin pour plusieurs filets, ils peuvent être regroupés pour former un seul wire . Dans l'image ci-dessous, nous avons un fil 4 bits qui peut envoyer 4 valeurs distinctes sur chacun des fils. De telles entités avec une largeur supérieure à 1 sont appelées vecteurs comme nous le verrons dans le prochain article.

  
  
wire [3:0] 	n0; 		// 4-bit wire -> this is a vector

  

Il est illégal de redéclarer un nom déjà déclaré par un net, un paramètre ou une variable comme indiqué dans le code ci-dessous.

  
  
module design;
	wire    abc;
	wire 	a;
	wire 	b;
	wire 	c;
	
	wire    abc;   // Error: Identifier "abc" previously declared
	
	assign abc = a & b | c;
endmodule

  

Variables

Une variable, quant à elle, est une abstraction d'un élément de stockage de données et peut contenir des valeurs. Une bascule est un bon exemple d'élément de stockage.

Type de données Verilog reg peut être utilisé pour modéliser des registres matériels car il peut contenir des valeurs entre les affectations. Notez qu'un reg n'a pas toujours besoin de représenter une bascule car elle peut également être utilisée pour représenter la logique combinatoire.

Dans l'image de gauche, nous avons une bascule qui peut stocker 1 bit et la bascule de droite peut stocker 4 bits.

Autres types de données

entier

Un integer est une variable à usage général de 32 bits de large qui peut être utilisée à d'autres fins lors de la modélisation du matériel et stocke des valeurs entières.

  
  
    integer     count;              // Count is an integer value > 0

  

heure

Un time La variable est non signée, large de 64 bits et peut être utilisée pour stocker des quantités de temps de simulation à des fins de débogage. Un realtime variable stocke simplement le temps sous forme de quantité à virgule flottante.

  
  
    time        end_time;           // end_time can be stored a time value like 50ns
    realtime    rtime;              // rtime = 40.25ps 

  

réel

Un real variable peut stocker des valeurs à virgule flottante et peut être affectée de la même manière que integer et reg .

  
  
    real        float;              // float = 12.344  - can store floating numbers

  

Exemple

  
  
module testbench;
  integer  	int_a; 				// Integer variable
  real 		real_b; 			// Real variable
  time 		time_c; 			// Time variable
  
  initial begin
    int_a 	= 32'hcafe_1234; 	// Assign an integer value
    real_b 	= 0.1234567; 		// Assign a floating point value

    #20; 						// Advance simulation time by 20 units
    time_c 	= $time; 			// Assign current simulation time
    
    // Now print all variables using $display system task
    $display ("int_a 	= 0x%0h", int_a);
    $display ("real_b 	= %0.5f", real_b);
    $display ("time_c 	= %0t", time_c);
  end
endmodule

  
Journal de simulation
ncsim> run
int_a 	= 0xcafe1234
real_b 	= 0.12346
time_c 	= 20
ncsim: *W,RNQUIE: Simulation is complete.

Chaînes Verilog

Les chaînes sont stockées dans reg , et la largeur du reg La variable doit être suffisamment grande pour contenir la chaîne. Chaque caractère d'une chaîne représente une valeur ASCII et nécessite 1 octet. Si la taille de la variable est inférieure à la chaîne, Verilog tronque les bits les plus à gauche de la chaîne. Si la taille de la variable est supérieure à la chaîne, Verilog ajoute des zéros à gauche de la chaîne.

  
  
// "Hello World" requires 11 bytes

reg [8*11:1] str = "Hello World";         // Variable can store 11 bytes, str = "Hello World"
reg [8*5:1]  str = "Hello World";         // Variable stores only 5 bytes (rest is truncated), str = "World"
reg [8*20:1] str = "Hello World";         // Variable can store 20 bytes (rest is padded with zeros), str = "         Hello World"

  

Voici un exemple complet montrant comment les trois variables indiquées ci-dessus peuvent être simulées.

  
  
module testbench;
  reg [8*11:1] str1;
  reg [8*5:1]  str2;
  reg [8*20:1] str3;
  
  initial begin
    str1 = "Hello World";
    str2 = "Hello World";
    str3 = "Hello World";
    
    $display ("str1 = %s", str1);
    $display ("str2 = %s", str2);
    $display ("str3 = %s", str3);
  end
endmodule

  

Notez que str1 a la bonne taille pour stocker les 11 octets de la chaîne "Hello World" et donc toute la chaîne est imprimée. Cependant, str2 ne peut stocker que 5 octets et, par conséquent, les 6 octets supérieurs sont tronqués et finissent par ne stocker que "World". La troisième variable str3 est supérieure à 11 octets et remplit les espaces vides à gauche et donc la valeur qui y est stockée devient " Hello World".

Journal de simulation
ncsim> run
str1 = Hello World
str2 = World
str3 =          Hello World
ncsim: *W,RNQUIE: Simulation is complete.


Verilog

  1. Variables C# et types de données (primitifs)
  2. Types de données C++
  3. Types de données C
  4. Types de données Python
  5. Types de données Java (primitifs)
  6. 5 types de centres de données différents [avec exemples]
  7. 8 types de cloud computing différents en 2021
  8. 8 types de violations de données différents avec exemples
  9. Tutoriel Verilog