5 / 37 · Concept
logic, wire, X/Z et largeurs explicites
Séparez type, pilotage et stockage et vérifiez littéraux, comparaisons, extensions et valeurs inconnues.
Les leçons sont gratuites. Inscrivez-vous pour enregistrer vos progrès.
Type, pilotage et stockage sont trois questions
logic est un type à quatre états; wire décrit une connexion de réseau pouvant également porter quatre états. Une variable logic peut être un résultat combinatoire ou un état cadencé selon les règles de pilotage. Aucun nom ne garantit une bascule: repérez affectation continue, processus combinatoire ou processus de front. Utilisez un pilote prévu par signal ordinaire. Réseaux à plusieurs pilotes résolus et interfaces bidirectionnelles demandent un autre contrat électrique et d'outil et sortent de ces exemples.
Fixer largeur et interprétation
logic [7:0] u contient huit bits non signés; logic signed [7:0] s interprète ces mêmes bits en complément à deux. 8'hFF vaut 255 pour u et −1 pour s. Un vecteur packed regroupe les bits, il ne représente pas huit valeurs successives dans le temps.
module typed_examples (
input logic [3:0] a, b,
input logic signed [7:0] s,
output logic [4:0] full_sum,
output logic signed [8:0] extended_s,
output logic negative,
output logic any_bit, all_bits, parity
);
assign full_sum = {1'b0, a} + {1'b0, b};
assign extended_s = {s[7], s};
assign negative = s < 8'sd0;
assign any_bit = |a;
assign all_bits = &a;
assign parity = ^a;
endmoduleextended_s répète le bit de signe; ajouter zéro transforme −1 en +255. Une concaténation est non signée: l'arithmétique signée nécessite une interprétation explicite ou un intermédiaire adapté. Ici le motif souhaité est affecté à une destination signée. Employez 4'd15,8'hFF,8'sd0 lorsque la largeur compte. Un entier sans taille peut élargir l'expression: examinez les deux opérandes et le contexte d'affectation, pas seulement la gauche.
Trois familles d'opérateurs
a & b agit bit à bit; a && b teste la vérité des deux vecteurs et produit un bit;&a réduit en exigeant tous les bits à 1. a=0011, b=0101 donnent 0001,1,0. ^a donne la parité,0 pour 0011. Décomposez les expressions ambiguës en intermédiaires pour documenter les intervalles.
Inconnu n'est pas une troisième tension
X signifie inconnu, Z haute impédance, pas des tensions exactes. Un modèle à deux états ne prouve pas les quatre états. Réinitialisez explicitement sans cacher X comme zéro. == peut produire X si la décision est impossible; actual !== expected dans le banc détecte X/Z face à une attente connue. Case equality n'est pas une détection physique de X dans du matériel ordinaire.
Exercice : étendre, additionner, comparer
a=15, b=1 donne full_sum=10000. s=8'h80 donne extended_s=110000000, negative=1; s=8'h7F donne 001111111, negative=0. Testez zéro, maximum positif, minimum négatif et −1. Remplacez par {1'b0, s} et constatez les erreurs négatives. Remplacez !== par != et injectez X dans actual: une condition inconnue peut empêcher le signalement voulu.