Questa è una vecchia versione del documento!
Indice
Reti Combinatorie in Verilog
Per realizzare una rete combinatoria in Verilog abbiamo due modi:
- utilizzare una tabella di verità
- utilizzare un'espressione dell'algebra booleana
Definizione mediante tabella di verità
Intestazione del modulo
Si definisce un modulo di tipo “primitive”, ovvero un modulo racchiuso fra le due righe
primitive nomedelmodulodadefinire(listadeiparametriinuscitaeiningresso); end primitive
Il nome del modulo è una stringa qualunque. La lista dei parametri dichiara un parametro come
[input|output] nomeparametro
Un modulo primitive può definire un tabella di verità che produce un solo bit in uscita. Per ogni bit di una funzione che produce un'uscita a più bit va definito un modulo primitive diverso. Il modulo deve avere tante variabili in ingresso quanti sono gli ingressi del modulo.
Esempio di definizione di un modulo commutatore a due vie con ingressi da 1 bit:
primitive commutatoreADueVie32(output z, input x, input y, input alpha); ... end primitive
La parola chiave che definisce il tipo del parametro, in input o in output, può essere indicata una sola volta prima della lista dei parametri formali che hanno quel tipo. Ad esempio, l'intestazione precedente può essere data come
primitive commutatoreADueVie32(output z, input x, y, alpha); ... end primitive
Corpo del modulo
Si definisce una tabella di verità di n variabili di ingresso e una variabile di uscita elencando righe di n valori delle variabili separate da spazi seguite dai due punti, dal valore corrispondente della variabile di uscita e dal punto e virgola fra le parole chiave “table” e “end table”. Ad esempio:
table 0 0 : 0 ; 0 1 : 1 ; 1 0 : 1 ; 1 1 : 1 ; end table
definisce l'OR di due variabili da un bit.
Valori “don't care” nella tabella di verità possono essere indicati con il punto interrogativo.
Ad esempio:
primitive k(
Definizione mediante espressione dell'algebra booleana
Intestazione del modulo
Si definisce un modulo di tipo “primitive”, ovvero un modulo racchiuso fra le due righe
primitive nomedelmodulodadefinire(listadeiparametriinuscitaeiningresso); end primitive
Il nome del modulo è una stringa qualunque. La lista dei parametri dichiara un parametro come
[input|output] nomeparametro["["dimensioniInBit"]"]
dove le dimensioni in bit vengono date con un'espressione che comprende l'indice del bit più significativo, seguito dai due punti, seguito dall'indice del bit meno significativo. Ad esempio
input alpha[1:0]
indica una variabile in ingresso da due bit, il cui bit più significativo è
alpha[1]
e quello meno significativo è
alpha[0]
Un modulo primitive può definire un tabella di verità che produce un solo bit in uscita. Per ogni bit di una funzione che produce un'uscita a più bit va definito un modulo primitive diverso.
Esempio di definizione di un modulo commutatore a due vie con ingressi da 32 bit:
primitive commutatoreADueVie32(output z[31:0], input x[31:0], input y[31:0], input alpha); ... end primitive
Esempio di definizione di un modulo commutatore a due vie con ingressi da 32 bit:
primitive commutatoreADueVie32(output z[31:0], input x[31:0], input y[31:0], input alpha); ... end primitive