logo

Déclaration de cas Verilog

L'instruction case vérifie si l'expression donnée correspond à l'une des autres expressions de la liste et des branches. Il est généralement utilisé pour mettre en œuvre un appareil.

La construction if-else peut ne pas être applicable s'il existe une unité de mesure de nombreuses conditions à vérifier et serait synthétisée dans un encodeur prioritaire au lieu d'un périphérique.

Dans Verilog , une instruction case inclut tout le code entre les mots-clés Verilog, case (« casez », « casex ») et endcase. Une déclaration de cas peut être une construction parmi tant d'autres qui ressemble à peu près à la déclaration if-else-if d'associé en soins infirmiers.

Syntaxe

Une instruction case Verilog commence par le mot-clé case et se termine par le mot-clé endcase.

L'expression entre parenthèses est une unité de zone qui vise à être évaluée spécifiquement une fois et est comparée à la liste des alternatives dans l'ordre dans lequel elles sont écrites.

Et les déclarations selon lesquelles la sélection correspond à l'unité d'expression donnée sont mortes. Un bloc de plusieurs instructions doit être trié et se trouver entre le début et la fin.

 case () case_item1 : case_item2, case_item3 : case_item4 : begin end default: endcase 

Si aucun des éléments du cas ne correspond à l'expression donnée, les déclarations dans l'unité de mesure de l'élément par défaut sont mortes. L'instruction par défaut n'est pas obligatoire et il n'y a qu'une seule instruction par défaut dans une instruction case. Les instructions de cas sont imbriquées.

tri par insertion java

L'exécution quittera le bloc case sans rien faire si aucun des éléments ne correspond à l'expression et qu'aucune instruction par défaut n'est donnée.

Exemple

Le module vogue suivant comprend un signal d'option de 2 bits pour acheminer l'une des trois entrées différentes de 3 bits vers le signe indiqué comme étant sorti.

Une instruction case est utilisée pour attribuer l’entrée correcte à la sortie prenant en charge la valeur de sel. Puisque sel peut être un signal de 2 bits, il aura vingt-deux combinaisons, de zéro à 3. L'instruction par défaut permet d'aligner la sortie à zéro si sel est 3.

tutoriel de swing java
 module my_mux (input [2:0] a, b, c, // three 3-bit inputs [1:0]sel, // 2-bit opt for signal to choose on from a, b, c output reg [2:0] out); // Output 3-bit signal // invariably block is dead whenever a, b, c or sel changes in value invariably @ (a, b, c, sel) begin case(sel) 2'b00 : out = a; // If sel=0, output can be 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 something, out is commonly zero endcase end endmodule 

En-tête de la déclaration de cas

Un en-tête d'instruction case se compose du mot-clé case (« casez », « casex ») suivi de l'expression case, généralement le tout sur une seule ligne de code.

Lors de l'ajout des directives full_case ou parallel_case à une instruction case, l'unité de mesure de la directive est ajoutée sous forme de commentaire en temps réel après l'expression case à la pointe de l'en-tête de l'instruction case et avant tout élément case sur les lignes de code suivantes.

Article du cas

L'élément de cas est que l'expression binaire, vectorielle ou Verilog utilisée est comparée à l'expression de cas.

Contrairement à différents langages de programmation de haut niveau comme ' C ', l'instruction case Verilog inclut des instructions break implicites.

Le premier élément de cas qui correspond à cette expression de cas entraîne la mort de l'instruction d'élément de cas correspondante, donc toutes les autres unités de mesure des éléments de cas ignorées pour cela sont soumises à l'instruction de cas.

Déclaration d'élément de cas

Une instruction d'élément de cas est une ou plusieurs instructions Verilog mortes si l'élément de cas correspond à cette expression de cas. Contrairement au VHDL, les choses du cas Verilog peuvent elles-mêmes être des expressions.

Pour modifier l'analyse du document de code Verilog, les instructions d'élément de cas Verilog doivent être placées entre les mots-clés 'commencer' et 'fin' si plus d'une instruction doit être morte pour un élément de cas spécifique.

Casez

Dans Verilog, il existe une instruction casez, une variante de l'instruction case qui active « z » et « ? les valeurs doivent être traitées tout au long de la comparaison de cas comme des valeurs « indifférentes ».

'Z' et '?' l'unité de mesure traitée comme une unité de mesure ne se soucie pas de savoir si elle se trouve à l'intérieur de l'expression de cas ou si elle se trouve à l'intérieur de l'élément de cas.

Lorsque vous écrivez secrètement une déclaration case avec « ne vous souciez pas », utilisez une déclaration casez et utilisez « ? » caractères au lieu des caractères « z » à l'intérieur de la casse, pour utiliser des bits « ne s'en soucie pas ».

carte SIM insérée mais pas de service Android

Casex

Dans Verilog, il existe une instruction casex, une variante de l'instruction case qui permet de traiter les valeurs « z », « ? » et « x » tout au long de la comparaison comme des valeurs « ne s'en soucie ».

'x', 'z' et '?' l'unité de mesure traitée comme une unité de mesure ne se soucie pas de savoir si elle se trouve à l'intérieur de l'expression de cas ou si elle se trouve à l'intérieur de l'élément de cas.

Exposé complet du cas

Une instruction de cas complète peut être une instruction de cas dans laquelle tous les modèles binaires d'expression de cas pouvant être obtenus correspondent à un élément de cas ou à une valeur par défaut de cas.

Si une instruction case n'inclut pas une case par défaut et qu'il est possible de rechercher une expression case binaire qui ne correspond à aucun des éléments case imprimés, l'instruction case n'est pas complète.

Une instruction case complète peut être une instruction case à l'intérieur de laquelle chaque modèle binaire, non binaire et mélange de modèles binaires et non binaires pouvant être obtenu est encadré en tant qu'élément case à l'intérieur de l'instruction case.

Verilog ne souhaite pas que les instructions de cas soient complètes, soit par synthèse, soit par simulation de lipoprotéines de haute densité, mais les instructions de cas Verilog sont rendues complètes en ajoutant une valeur par défaut. VHDL souhaite que les déclarations de cas soient complètes en simulation de lipoprotéines de haute densité, ce qui nécessite généralement la clause « Autres » d'associé en soins infirmiers.

Déclaration de cas parallèle

Une instruction case parallèle peut être une instruction case à l'intérieur de laquelle elle ne peut être obtenue que pour faire correspondre une expression case à un seul élément case.

S'il est possible de rechercher une expression de cas qui peut correspondre à un élément de cas, l'unité de mesure des éléments de cas correspondant est indiquée comme des éléments de cas qui se chevauchent, et donc l'instruction de cas n'est pas parallèle.

Schéma du matériel

Le code RTL est élaboré pour obtenir un schéma matériel qui représente un multiplexeur 4 vers 1.

Déclaration de cas Verilog

Après avoir exécuté la conception ci-dessus, la sortie est nulle lorsque sel est 3 et correspond aux entrées affectées pour d'autres valeurs.

imprimer depuis Java
 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. 

Dans une instruction case, la comparaison ne réussit que lorsque chaque bit de l'expression correspond à l'une des alternatives, notamment 0, 1, x et z. Dans l'exemple ci-dessus, si l'un des bits de sel est x ou z, le défaut L'instruction sera exécutée car aucune des autres alternatives ne correspond. Dans un tel cas, la sortie sera entièrement composée de zéros.

 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. 

Si l'instruction case dans la conception comporte x et z dans les alternatives d'élément de cas, les résultats seront différents.

 module mux (input [2:0] a, b, c, 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 

Différenciation entre le cas et if-else

L'instruction case est différente de if-else-if de deux manières, telles que :

  • Expressions données dans un sinon block sont plus généraux, tandis que dans un bloc de cas, une seule expression correspond à plusieurs éléments.
  • L'affaire fournira un résultat définitif lorsqu'il y a des valeurs X et Z dans une expression.