Operatori logici
Fa parte della sezione Fondamenti del percorso Verilog di Coddy. Lezione 24 di 90.
Gli operatori logici operano su valori interi e restituiscono un singolo risultato: 1 (vero) o 0 (falso). A differenza degli operatori bitwise, che operano bit per bit, gli operatori logici considerano l'intero valore come vero (diverso da zero) o falso (zero).
| Tipo | Esempio | Risultato |
|---|---|---|
| AND bit a bit | 4'b1010 & 4'b1100 | 4'b1000 (più bit) |
| AND logico | (4'b1010 && 4'b1100) | 1 (un singolo bit) |
Operatori logici disponibili
| Operatore | Significato | Descrizione |
|---|---|---|
&& | AND logico | Vero se entrambi gli operandi sono veri (diversi da zero) |
|| | OR logico | Vero se almeno uno degli operandi è vero |
! | NOT logico | Vero se l'operando è falso (zero) |
Come funzionano
AND logico (<strong>&&</strong>):
(5 && 3) // 1 (entrambi diversi da zero)
(5 && 0) // 0 (il secondo è zero)
(0 && 0) // 0 (entrambi zero)OR logico (<strong>||</strong>):
(5 || 3) // 1 (almeno uno diverso da zero)
(5 || 0) // 1 (il primo diverso da zero)
(0 || 0) // 0 (entrambi uguali a zero)NOT logico (<strong>!</strong>):
!5 // 0 (un valore diverso da zero diventa false)
!0 // 1 (zero diventa true)Esempio di codice
module logical_demo;
reg [3:0] a, b;
reg and_res, or_res, not_res;
initial begin
a = 5;
b = 0;
and_res = (a && b); // 5 && 0 = 0
or_res = (a || b); // 5 || 0 = 1
not_res = !a; // !5 = 0
$display("5 && 0 = %d", and_res);
$display("5 || 0 = %d", or_res);
$display("!5 = %d", not_res);
$finish;
end
endmoduleOutput:
5 && 0 = 0
5 || 0 = 1
!5 = 0Uso comune
Gli operatori logici vengono usati nelle istruzioni if e nelle condizioni:
if (a && b) // Vero se sia a che b sono diversi da zero
$display("Both true");
if (a || b) // Vero se almeno uno dei due è diverso da zero
$display("At least one true");
if (!reset) // Vero quando reset è 0
$display("Reset is inactive");Sfida
Scrivi le espressioni logiche corrette per ogni attività.
Cosa fare:
- Verifica se
value1evalue2sono entrambe true e memorizza il risultato inand_out - Verifica se
value1ovalue2è true e memorizza il risultato inor_out - Verifica se
value1è false e memorizza il risultato innot_out
Provalo tu
module logical_challenge;
reg [3:0] value1, value2;
reg and_out, or_out, not_out;
initial begin
value1 = 4'd12;
value2 = 4'd5;
and_out = ______; // value1 && value2
or_out = ______; // value1 || value2
not_out = ______; // !value1
$display("%d && %d = %d", value1, value2, and_out);
$display("%d || %d = %d", value1, value2, or_out);
$display("!%d = %d", value1, not_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