Istruzione if
Fa parte della sezione Fondamenti del percorso Verilog di Coddy. Lezione 52 di 90.
L'istruzione if è un blocco decisionale che esegue il codice solo quando una condizione è vera. L'istruzione if verifica una condizione.
Se la condizione è vera (1), viene eseguito il codice al suo interno. Se la condizione è falsa (0), il codice viene saltato.
Sintassi:
if (condition) begin
// Il codice viene eseguito quando condition è true
endEsempio semplice
if (reset) begin
count = 0;
endIn questo esempio:
begineendvengono usati per indicare l'inizio e la fine del blocco di codice
- Se
resetè 1 (vero), viene eseguito il codice trabegineend→countdiventa 0 - Se
resetè 0 (falso), il codice al suo interno viene saltato → non succede nulla
begin e end funzionano come le parentesi graffe { } in altri linguaggi di programmazione. Raggruppano le istruzioni in modo che Verilog sappia quale codice appartiene alla condizione if. Anche se qui c’è una sola istruzione, usare begin e end è comunque una buona pratica per mantenere la coerenza.
Istruzione if in un blocco always
always @(posedge clk) begin
if (reset)
count <= 0;
endNota: per una singola istruzione, begin e end sono facoltativi. Ad esempio, nel blocco always qui sopra non è necessario begin/end dopo if, perché contiene una sola istruzione.
La condizione può essere qualsiasi espressione
if (a > b) begin
max = a;
end
if (a && b) begin
out = 1;
end
if (data == 8'hFF) begin
match = 1;
endRegole importanti
| Regola | Spiegazione |
|---|---|
| La condizione può essere qualsiasi espressione | I valori diversi da zero (e noti) sono considerati veri, lo zero è considerato falso |
begin / end necessari per più istruzioni | Come { } in altri linguaggi |
Senza begin/end, segue una sola istruzione | Solo la riga successiva |
Sfida
Cosa fare:
- Aggiungi l'istruzione
ifmancante per farlo funzionare.
- Quando
enableè1,outdovrebbe essere uguale aa & b - Quando
enableè0,outdovrebbe rimanere0(senza cambiare)
Il codice iniziale inizializza out = 0 e verifica entrambi i casi.
Provalo tu
module if_challenge;
reg a, b, enable;
reg out = 0;
initial begin
a = 1;
b = 1;
// Caso di test 1: enable = 1
enable = 1;
// TODO: aggiungi un'istruzione if (out = a & b)
$display("enable=1: out = %d (should be 1)", out);
// Caso di test 2: enable = 0
enable = 0;
out = 0;
// TODO: out deve rimanere 0
$display("enable=0: out = %d (should be 0)", out);
$finish;
end
endmoduleQuesta lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Fondamenti
1Introduzione
Cos'è VerilogHardware e software a confrontoIl tuo primo moduloCommentiLivelli di astrazione della progettazione4Operatori - Parte 1
Operatori aritmeticiOperatore moduloOperatori di confrontoRiepilogo - Matematica sempliceOperatori bitwise7Assegnazioni e porte
Assegnazione continuaAssegnazioni con operatoriPrimitive di porte integratePorte AND, OR e NOTPorte XOR e XNORRiepilogo: circuito con porte logiche10Decisioni
Istruzione ifIf-ElseRiepilogo - Comparatore sempliceIstruzione caseCasex e casezRiepilogo - Progettazione di una ALU5Operatori Parte 2
Operatori logiciOperatori di riduzioneOperatori di scorrimentoOperatore di concatenazioneOperatore condizionaleRiepilogo - Sfida sugli operatori3Sistema numerico
Rappresentazione binariaNumeri con dimensione specificataNumeri senza dimensione specificataNumeri negativiValori speciali X e ZRiepilogo - Formati numerici6Moduli
Struttura di un moduloPorte di input e outputPorte InoutIstanziazione di un moduloMappatura delle porte per nomeMappatura delle porte per ordineRiepilogo - Costruire un modulo9Blocchi procedurali
Blocco alwaysBlocco initialLista di sensibilitàAssegnazione bloccanteAssegnazione non bloccanteRiepilogo: always vs initial12Progetto Multiplexer
Progettazione di un mux da 2 a 1Progettazione di un mux da 4 a 1Esercitati da solo: Compilatore Verilog online