informatica:ae:reti_combinatorie
Differenze
Queste sono le differenze tra la revisione selezionata e la versione attuale della pagina.
| Entrambe le parti precedenti la revisioneRevisione precedenteProssima revisione | Revisione precedente | ||
| informatica:ae:reti_combinatorie [18/10/2013 alle 06:16 (12 anni fa)] – [Espressione dell'algebra booleana] Marco Danelutto | informatica:ae:reti_combinatorie [18/10/2013 alle 08:26 (12 anni fa)] (versione attuale) – [Test di una rete combinatoria] Marco Danelutto | ||
|---|---|---|---|
| Linea 12: | Linea 12: | ||
| < | < | ||
| | | ||
| - | end primitive | + | endprimitive |
| </ | </ | ||
| Il nome del modulo è una stringa qualunque. La lista dei parametri dichiara un parametro come | Il nome del modulo è una stringa qualunque. La lista dei parametri dichiara un parametro come | ||
| Linea 25: | Linea 25: | ||
| primitive commutatoreADueVie32(output z, input x, input y, input alpha); | primitive commutatoreADueVie32(output z, input x, input y, input alpha); | ||
| ... | ... | ||
| - | end primitive | + | endprimitive |
| </ | </ | ||
| + | |||
| + | |||
| + | Per prassi, i parametri di output si indicano prima di quelli di input. | ||
| === Corpo del modulo === | === 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 " | + | 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 | table | ||
| Linea 37: | Linea 40: | ||
| 1 0 : 1 ; | 1 0 : 1 ; | ||
| 1 1 : 1 ; | 1 1 : 1 ; | ||
| - | end table | + | endtable |
| </ | </ | ||
| definisce l'OR di due variabili da un bit. | definisce l'OR di due variabili da un bit. | ||
| + | Valori " | ||
| + | |||
| + | Ad esempio: | ||
| + | < | ||
| + | primitive k(output z, input alpha, input x, input y); | ||
| + | table | ||
| + | 0 1 ? : 1; | ||
| + | 0 0 ? : 0; | ||
| + | 1 ? 1 : 1; | ||
| + | 1 ? 0 : 0; | ||
| + | endtable | ||
| + | endprimitive | ||
| + | </ | ||
| + | definisce il commutatore a due vie da un bit. | ||
| | | ||
| Linea 47: | Linea 64: | ||
| === Intestazione del modulo === | === Intestazione del modulo === | ||
| - | Si definisce un modulo di tipo "primitive", ovvero un modulo racchiuso fra le due righe | + | Si definisce un modulo di tipo "module", ovvero un modulo racchiuso fra le due righe |
| < | < | ||
| - | primitive | + | module |
| - | end primitive | + | endmodule |
| </ | </ | ||
| Il nome del modulo è una stringa qualunque. La lista dei parametri dichiara un parametro come | Il nome del modulo è una stringa qualunque. La lista dei parametri dichiara un parametro come | ||
| < | < | ||
| - | | + | |
| </ | </ | ||
| dove le dimensioni in bit vengono date con un' | dove le dimensioni in bit vengono date con un' | ||
| < | < | ||
| - | | + | input [1:0]alpha |
| </ | </ | ||
| indica una variabile in ingresso da due bit, il cui bit più significativo è | indica una variabile in ingresso da due bit, il cui bit più significativo è | ||
| Linea 69: | Linea 86: | ||
| </ | </ | ||
| - | 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' | + | Esempio di definizione di un modulo commutatore a due vie con ingressi da 2 bit: |
| - | + | ||
| - | Esempio di definizione di un modulo commutatore a due vie con ingressi da 32 bit: | + | |
| < | < | ||
| - | primitive commutatoreADueVie32(output | + | module commutatoreADueVie2bit(output [1:0]z, input [1:0]x, input [1:0]y, input alpha); |
| ... | ... | ||
| - | end primitive | + | endmodule |
| </ | </ | ||
| + | Il corpo del modulo può contenere una o più istruzioni di " | ||
| + | < | ||
| + | assign nomeVar = espressioneBooleana; | ||
| + | </ | ||
| + | dove il nome della variabile da assegnare denota un valore di un bit e l' | ||
| + | |||
| + | Dunque il commutatore di cui abbiamo dato l' | ||
| + | < | ||
| + | module commutatoreADueVie2bit(output [1:0]z, input [1:0]x, input [1:0]y, input alpha); | ||
| - | Esempio | + | |
| + | | ||
| + | |||
| + | endmodule | ||
| + | </ | ||
| + | |||
| + | Lo statement " | ||
| + | |||
| + | ==== Utilizzo | ||
| + | |||
| + | Un modulo, definito come " | ||
| < | < | ||
| - | primitive commutatoreADueVie32(output z[31:0], input x[31:0], input y[31:0], input alpha); | + | |
| - | ... | + | |
| - | end primitive | + | |
| </ | </ | ||
| + | definisce un' | ||
| + | |||
| + | ==== Test di una rete combinatoria ==== | ||
| + | |||
| + | === Definizione del programma di test === | ||
| + | Definiamo un modulo senza parametri, che costituirà il " | ||
| + | All' | ||
| + | * dichiariamo tante variabili di tipo " | ||
| + | * dichiariamo tanti variabili di tipo " | ||
| + | * dichiariamo un' | ||
| + | * dichiariamo il corpo del programma che testerà il nostro modulo, indicandolo fre le parole chiave " | ||
| + | * diamo delle direttive che indicano dove deve essere salvato il risultato della simulazione del nostro modulo (cioè l' | ||
| + | * assegnamo valori alle variabili di ingresso (reg) utilizzando statement tipo < | ||
| + | * eventualmente assegnamo altri valori alle varibili con uno statement < | ||
| + | * dichiariamo la fine della simulazione con la direttiva < | ||
| + | |||
| + | === Listato del programma di prova === | ||
| + | |||
| + | < | ||
| + | module prova_commutatoreDueVie2bit(); | ||
| + | |||
| + | |||
| + | wire [1: | ||
| + | | ||
| + | reg a; // Parte II | ||
| + | reg [1:0]x1; | ||
| + | reg [1:0]x2; | ||
| + | | ||
| + | commutatoreADueVie2bit K1(zz, | ||
| + | | ||
| + | initial | ||
| + | begin | ||
| + | |||
| + | | ||
| + | | ||
| + | |||
| + | |||
| + | x1 = 2' | ||
| + | x2 = 2' | ||
| + | // per via del 2' con valore xx | ||
| + | // 2'hff denoterebbe 255 in decimale (due cifre esadecimali (h)) | ||
| + | | ||
| + | a = 0; // 0 è inteso come decimale | ||
| + | |||
| + | #5 a = 1; // PArte VII | ||
| + | |||
| + | #10 x2 = 2' | ||
| + | |||
| + | #10 $finish; | ||
| + | end | ||
| + | | ||
| + | endmodule | ||
| + | </ | ||
| + | |||
| + | === Compilazione === | ||
| + | |||
| + | Si compila il programma di test insieme a tutti i file che contengono i moduli instanziati nel test con il comando < | ||
| + | |||
| + | |||
| + | === Run del test === | ||
| + | Si fa girare la simulazione del test eseguendo il programma compilato al passo precedente | ||
| + | < | ||
| + | |||
| + | === Visualizzazione dei risultati === | ||
| + | Si visualizzano i risultati invocando gtkwave sul file indicato nella dumpfile | ||
| + | < | ||
| + | |||
| + | In particolare, | ||
| + | |||
| + | {{: | ||
| + | |||
informatica/ae/reti_combinatorie.1382076981.txt.gz · Ultima modifica: 18/10/2013 alle 06:16 (12 anni fa) da Marco Danelutto
