Altifigence Academy

3 / 37 · Concetto

Moduli, porte e istanze: collegamenti come contratti

Componi moduli combinatori con porte nominate e verifica driver unico e gerarchia.

Un confine di modulo non è un confine di clock

Un modulo raggruppa porte e logica. Istanziarlo non crea automaticamente registro o ciclo. Moduli combinatori in serie restano un percorso combinatorio con ritardi fisici sommati. Un registro esplicito introduce memoria. Documenta direzione, larghezza, segno, driver e validità; le connessioni nominate evitano dipendenza dall'ordine posizionale.

SystemVerilog
module select_word #(parameter integer W = 8) (
  input  logic [W-1:0] a, b,
  input  logic         select_b,
  output logic [W-1:0] y
);
  assign y = select_b ? b : a;
endmodule

module choose_and_increment (
  input  logic [7:0] a, b,
  input  logic       select_b,
  output logic [8:0] result
);
  logic [7:0] chosen;
  select_word #(.W(8)) select_u (
    .a(a), .b(b), .select_b(select_b), .y(chosen)
  );
  assign result = {1'b0, chosen} + 9'd1;
endmodule

select_word è il tipo di modulo, select_u il nome d'istanza. .a(a) collega la porta a del figlio al segnale a del padre. .W(8) configura l'elaborazione, non è ingresso dinamico.

Controllare entrambe le estremità

chosen è guidato solo da y del figlio ed è letto dal padre. Non assegnarlo anche in un altro processo; logic non autorizza conflitti di driver. result ha nove bit per 255+1=256 e allarga chosen prima della somma. a=255, b=9, select_b=0 dà 256; select_b=1 dà 10. Otto bit perderebbero la carry nel primo caso.

Gerarchia, file e top

Le definizioni possono stare insieme o separate, ma servono entrambe al compilatore. Il top è choose_and_increment; usare select_word cambia il confine verificato. Un file figlio assente riguarda l'elenco delle sorgenti, non dimostra errore logico. Collegamenti posizionali possono cambiare quando si modificano le porte. Un ingresso scollegato non è uno zero intenzionale: collega costanti o documenta uscite inutilizzate e rivedi le diagnosi. Segui dipendenze per evitare feedback combinatorio senza memoria; i moduli non interrompono il ciclo.

Esercizio: verificare indipendentemente la composizione

Per (a, b, select_b)=(0,255,0),(0,255,1),(255,0,0),(255,0,1), attendi 1,256,256,1. Percorri 256 valori selezionati con entrambi i select, lasciando diverso l'altro ingresso per rilevare inversioni. Il modello di riferimento sceglie a o b intero e aggiunge 1; confronta dopo stabilizzazione. Leggere chosen interno potrebbe condividere un errore di selezione. Aggiungi poi un registro d'uscita e definisci reset, validità e fronte d'ingresso corrispondente: il contratto temporale cambia anche con aritmetica identica.

La scelta vale per questo browser. Puoi modificarla in qualsiasi momento dal piè di pagina.