Strumenti Utente

Strumenti Sito


informatica:ae:reti_combinatorie

Differenze

Queste sono le differenze tra la revisione selezionata e la versione attuale della pagina.

Link a questa pagina di confronto

Entrambe le parti precedenti la revisioneRevisione precedente
Prossima revisione
Revisione precedente
informatica:ae:reti_combinatorie [18/10/2013 alle 07:05 (12 anni fa)] – [Test di una rete combinatoria] Marco Daneluttoinformatica: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:
 <code> <code>
    primitive nomedelmodulodadefinire(listadeiparametriinuscitaeiningresso);    primitive nomedelmodulodadefinire(listadeiparametriinuscitaeiningresso);
-   end primitive+   endprimitive
 </code>  </code> 
 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
 </code> </code>
  
-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 
-<code> 
-primitive commutatoreADueVie32(output z, input x,  y,  alpha);  
-   ... 
-end primitive 
-</code> 
  
 Per prassi, i parametri di output si indicano prima di quelli di input.  Per prassi, i parametri di output si indicano prima di quelli di input. 
Linea 39: Linea 33:
 === 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 "table" e "end table". Ad esempio: +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 "endtable". Ad esempio: 
 <code> <code>
 table table
Linea 46: Linea 40:
   1 0 : 1 ;    1 0 : 1 ; 
   1 1 : 1 ;   1 1 : 1 ;
-end table+endtable
 </code> </code>
 definisce l'OR di due variabili da un bit.  definisce l'OR di due variabili da un bit. 
Linea 54: Linea 48:
 Ad esempio:  Ad esempio: 
 <code> <code>
-primitive k(output z, input alpha, x, y); +primitive k(output z, input alpha, input x, input y); 
   table   table
     0 1 ? : 1;     0 1 ? : 1;
Linea 60: Linea 54:
     1 ? 1 : 1;      1 ? 1 : 1; 
     1 ? 0 : 0;      1 ? 0 : 0; 
-  end table +  endtable 
-end primitive+endprimitive
 </code> </code>
 definisce il commutatore a due vie da un bit.  definisce il commutatore a due vie da un bit. 
Linea 73: Linea 67:
 <code> <code>
    module nomedelmodulodadefinire(listadeiparametriinuscitaeiningresso);    module nomedelmodulodadefinire(listadeiparametriinuscitaeiningresso);
-   end module+   endmodule
 </code>  </code> 
 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
 <code> <code>
-   [input|output] nomeparametro["["dimensioniInBit"]"]+   [input|output] ["["dimensioniInBit"]"]nomeparametro
 </code>    </code>   
 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 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
 <code> <code>
-   input alpha[1:0]+   input [1:0]alpha
 </code>    </code>   
 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 94: Linea 88:
 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 2 bit: 
 <code> <code>
-module commutatoreADueVie2bit(output z[1:0], input x[1:0], input y[1:0], input alpha); +module commutatoreADueVie2bit(output [1:0]z, input [1:0]x, input [1:0]y, input alpha); 
    ...    ...
-end module+endmodule
 </code> </code>
  
Linea 107: Linea 101:
 Dunque il commutatore di cui abbiamo dato l'intestazione può essere completato come segue:  Dunque il commutatore di cui abbiamo dato l'intestazione può essere completato come segue: 
 <code> <code>
-module commutatoreADueVie2bit(output z[1:0], input x[1:0], input y[1:0], input alpha); +module commutatoreADueVie2bit(output [1:0]z, input [1:0]x, input [1:0]y, input alpha); 
        
    assign z[1] = ((~alpha) & x[1]) + (alpha & y[1]);    assign z[1] = ((~alpha) & x[1]) + (alpha & y[1]);
    assign z[0] = ((~alpha) & x[0]) + (alpha & y[0]);    assign z[0] = ((~alpha) & x[0]) + (alpha & y[0]);
        
-end module+endmodule
 </code> </code>
        
Linea 138: Linea 132:
     * eventualmente assegnamo altri valori alle varibili con uno statement <code> #10 in=0</code> il cui significato è //attendi 10 unità del tempo di simulazione e poi assegna a in il valore 0// (Parte VII nel listato che segue)     * eventualmente assegnamo altri valori alle varibili con uno statement <code> #10 in=0</code> il cui significato è //attendi 10 unità del tempo di simulazione e poi assegna a in il valore 0// (Parte VII nel listato che segue)
     * dichiariamo la fine della simulazione con la direttiva <code>$finish</code> (Parte VIII nel listato che segue)     * dichiariamo la fine della simulazione con la direttiva <code>$finish</code> (Parte VIII nel listato che segue)
 +
 +=== Listato del programma di prova ===
  
 <code> <code>
-module prova_commutatore(); +module prova_commutatoreDueVie2bit(); 
  
  
-  wire zz[1:0];                             // Parte I+  wire [1:0]zz;                             // Parte I
      
-  reg a, x1[1:0], x2[1:0];                  // Parte II+  reg a;             // Parte II 
 +  reg [1:0]x1; 
 +  reg [1:0]x2;
      
   commutatoreADueVie2bit K1(zz,x1,x2,a);    // Parte III   commutatoreADueVie2bit K1(zz,x1,x2,a);    // Parte III
Linea 156: Linea 154:
            
            
-       2b00                           // Parte VI +       x1 2'b00                         // Parte VI 
-       2b11+       x2 2'b11                         // 2'bxx indica un numero binario (per via del b) di due cifre  
-       a = 0; +                                            // 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        #5 a = 1;                            // PArte VII
                
-       #10 2b10+       #10 x2 2'b10
                
-       $finish:                             // Parte VIII+       #10 $finish;                         // Parte VIII
      end      end
          
-end module+endmodule
 </code> </code>
  
Linea 182: Linea 183:
 Si visualizzano i risultati invocando gtkwave sul file indicato nella dumpfile Si visualizzano i risultati invocando gtkwave sul file indicato nella dumpfile
 <code>gtkwave prova_comm.vcd</code> <code>gtkwave prova_comm.vcd</code>
 +
 +In particolare, dopo l'apertura dell'iterfaccia grafica di gtkwave occorre cliccare sul nome del modulo nel box in alto a sinistra (//prova_commutatoreDueVie2bit// nel nostro caso) dopo di che nel box sotto a sinistra appariranno i nomi delle variabili che possiamo selezionare e con il bottone "append" inserire nel box di destra dove ne verrà visualizzato il valore col passare del tempo di simulazione.
 +
 +{{:informatica:ae:gtk_k.png?800|}}
  
informatica/ae/reti_combinatorie.1382079958.txt.gz · Ultima modifica: 18/10/2013 alle 07:05 (12 anni fa) da Marco Danelutto

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki