Porte di input e output
Fa parte della sezione Fondamenti del percorso Verilog di Coddy. Lezione 31 di 90.
Le porte di input e output sono le connessioni che permettono a un modulo di comunicare con il mondo esterno. Sono come i pin di un chip. Le porte sono l'interfaccia tra un modulo e il resto del progetto.
Ogni modulo ha:
- Porte di ingresso: segnali che arrivano al modulo
- Porte di uscita: segnali che escono dal modulo
Porte di ingresso
Le porte di ingresso ricevono dati dall'esterno. Non possono essere modificate all'interno del modulo: possono solo essere lette.
input clk; // Ingresso a bit singolo
input [7:0] data; // Vettore di ingresso a 8 bit
input a, b; // Più ingressi su una sola rigaRegole per gli input:
- Non è possibile assegnare un valore all'interno del modulo
- Non è possibile dichiararli come
reg - Sempre
wire(per impostazione predefinita)
Porte di uscita
Le porte di uscita inviano dati all'esterno. Possono essere pilotate da blocchi assign o always.
output out; // Uscita a bit singolo
output [3:0] result; // Uscita a 4 bit
output reg busy; // L'uscita può essere reg
output wire ready; // L'uscita può essere wireRegole per gli output:
- Può essere
wire(conassign) oppurereg(conalways) - Deve essere pilotato da qualcosa all’interno del modulo
Sintassi della dichiarazione delle porte
La sintassi della dichiarazione delle porte è il modo specifico in cui si scrivono le porte di input e di output in un modulo. Indica a Verilog tre cose su ciascuna porta:
- Direzione: è input, output o inout?
- Dimensione: quanti bit è largo?
- Nome: come si chiama?
module example (
input [7:0] data_in, // Vettore di ingresso
input clk, // Ingresso singolo
input enable, // Ingresso singolo
output reg [7:0] out, // Registro di uscita
output busy // Filo di uscita
);Perché la direzione delle porte è importante
La direzione indica a Verilog:
- Quali segnali il modulo può leggere (ingressi)
- Quali segnali il modulo può scrivere (uscite)
- Quali tipi di connessioni sono consentiti
Usare la direzione sbagliata causa errori di compilazione.
Esempio di codice
module port_demo (
input [3:0] a, // Si può solo leggere
input [3:0] b, // Si può solo leggere
output reg [3:0] sum, // Si può scrivere (reg)
output [3:0] diff // Si può scrivere (wire)
);
always @(*) begin
sum = a + b; // Scrittura nell'output reg
end
assign diff = a - b; // Scrittura nell'output wire
endmoduleSfida
Completa le dichiarazioni delle porte
Cosa fare:
- Aggiungi un ingresso a 8 bit chiamato
data_in - Aggiungi un ingresso a 1 bit chiamato
clk - Aggiungi un'uscita a 4 bit chiamata
result(usa reg: verrà assegnata nel blocco always) - Aggiungi un'uscita a 1 bit chiamata
valid(usa wire: verrà assegnata con assign)
Provalo tu
module port_challenge (
// Tarea 1: Añade una entrada de 8 bits llamada data_in
// Tarea 2: Añade una entrada de un solo bit llamada clk
// Tarea 3: Añade una salida de 4 bits llamada result (usa reg)
// Tarea 4: Añade una salida de un solo bit llamada valid (usa wire)
);
reg [3:0] counter;
always @(posedge clk) begin
counter <= counter + 1;
result <= counter;
end
assign valid = (counter > 8);
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