5 / 37 · Concetto
logic, wire, X/Z e larghezze esplicite
Separa tipo, driver e memoria e verifica letterali, confronti, estensioni e valori ignoti.
Le lezioni sono gratuite. Iscriviti per salvare i progressi.
Tipo, driver e memoria sono domande distinte
logic è un tipo a quattro stati; wire descrive un collegamento di rete anch'esso a quattro stati. Una variabile logic può essere risultato combinatorio o stato su clock secondo le regole di pilotaggio. Nessun nome garantisce un flip-flop: cerca assegnazione continua, processo combinatorio o di fronte. Usa una sorgente prevista per ogni segnale ordinario. Reti risolte con più driver e interfacce bidirezionali richiedono contratti elettrici e strumenti differenti e non appartengono a questi esempi.
Definire larghezza e interpretazione
logic [7:0] u contiene otto bit senza segno; logic signed [7:0] s interpreta gli stessi bit in complemento a due. 8'hFF vale 255 per u e −1 per s. Un vettore packed raggruppa bit, non otto valori in sequenza temporale.
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 ripete il bit di segno; aggiungere zero trasforma −1 in +255. La concatenazione è un'espressione senza segno: l'aritmetica signed richiede interpretazione esplicita o intermediario appropriato. Qui il pattern voluto viene assegnato alla destinazione signed. Usa 4'd15,8'hFF,8'sd0 quando conta la larghezza. Un intero senza dimensione può allargare l'espressione: esamina entrambi gli operandi e il contesto dell'assegnazione, non solo il lato sinistro.
Tre famiglie di operatori
a & b opera bit per bit; a && b verifica se entrambi i vettori sono veri e restituisce un bit;&a riduce richiedendo tutti 1. a=0011, b=0101 producono 0001,1,0. ^a calcola parità,0 per 0011. Dividi espressioni ambigue in intermediari per documentarne l'intervallo.
Ignoto non è una terza tensione
X indica sconosciuto, Z alta impedenza, non tensioni esatte. Un modello a due stati non prova quattro stati. Applica reset esplicito invece di nascondere X come zero. == può restituire X se non può decidere; actual !== expected nel banco segnala X/Z contro un'aspettativa nota. Case equality non rileva un X fisico nell'hardware ordinario.
Esercizio: estendere, sommare, confrontare
a=15, b=1 produce full_sum=10000. s=8'h80 dà extended_s=110000000, negative=1; s=8'h7F dà 001111111, negative=0. Prova zero, massimo positivo, minimo negativo e −1. Sostituisci con {1'b0, s} e rileva i difetti negativi. Cambia !== in != e inietta X in actual: una condizione ignota può non segnalare il difetto desiderato.