Strumenti Utente

Strumenti Sito


informatica:ae:verilogpag

Verilog per AE

Materiale disponibile online

Autore Titolo Year Link
M. Danelutto Note Verilog 2015 Pdf
Peter M. Nyasulu and J. Knight Introduction to Verilog 2005 Pdf
Deepak Kumar Tala Verilog tutorial 2003 Pdf
Rajeev Madhavan Verilog quick reference 1995 Pdf
Stephen A. Edwards Slides of a Verilog course 2002 Pdf
Stuart Sutherland Verilog HDL Quick Reference Guide 2001 PDF

Una buona trattazione della modellazione di reti combinatorie e sequenziali si trova anche nel Capitolo 4 del libro “Digital Design and Computer Architecture” di D. M. Harris e S. L. Harris, edito da Morgan Kaupfman.

La quarta edizione (italiana, corrisponde alla 5a edizione inglese) dell'Hennessy Patterson (Struttura e progetto dei calcolatori) ha un'appendice (Appendix B: The Basics of Logic Design) che può essere considerata come introduzione all'utilizzo di Verilog per la modellazione dei componenti che vediamo nel corso di AE

Progetti Verilog A.A. 2018-19 (Corso A)

Questo documento PDF contiene i progetti validi per l'anno accademico 2018-19.

Software utilizzato per il corso

Utilizziamo iverilog (Icarus Verilog) in quanto è una piattaforma Verilog open source, con port per Linux, Windows e Mac OS X.

Utilizzo di iverilog

Segui questo link per le istruzioni per l'utilizzo dei tool Verilog.

Reti combinatorie in Verilog

Segui questo link per le istruzioni su come implementare reti combinatorie in Verilog.

reti combinatorie realizzate con primitive

Reti sequenziali in Verilog

Segui questo link per le istruzioni su come implementare reti sequenziali in Verilog.

Versione corretta del sincronizzatore a transizione di livelli in ingresso.

AE Verilog blog

Riporto alcune note a integrazione di quanto detto a lezione relativamente al progetto Verilog.

Reti sequenziali

Potete realizzare reti sequenziali, secondo il modello di Moore o di Mealy, in due modi distinti:

  1. realizzando un modulo Sigma e un modulo Omega, utilizzando un modulo Registro (come quello sulla dispensa) e collegandoli come nello schema classico presentato a lezione. Uscita di Omega uguale al wire di uscita del modulo, ingressi di Sigma presi dall'uscita del registro di stato e dagli ingressi del modulo, etc. *Attenzione*: gli ingressi del modulo devono includere il segnale di clock che serve unicamente per passarlo come ingresso al modulo Registro. Se avete avuto cura di realizzare il modulo Omega e il modulo Sigma in modo che generino le uscite con i ritardi opprtuni, potrete verificare come clock più o meno lunghi del ciclo calcolato generino comportamenti diversi (errati se il clock ha un tempo di ciclo minore di quello calcolato), corretti (ma magari un po' lenti) se il ciclo di clock è maggiore di quello calcolato con il procedimento canonico. (vedi esempio)
  2. utilizzando il modo behavioural. Gli ingressi e le uscite del modulo sono sempre quelli del caso precedente. Vi definite una variabile di nuovo stato che assegnate in uno switch i cui casi dipendono da stato corrente (altro registro) e ingressi all'interno di una blocco
    always @(lista delle variabili lette per il calcolo del nuovo stato)  begin ... end 

    . Assegnate il nuovo stato allo stato corrente in un

    always @(negedge clock) begin ... end

    . Infine, calcolate le uscite come funzione di stato corrente e (solo nel caso Mealy) degli ingressi e le assegnate alla variabile che rappresenta l'uscita del modulo con un assegnamento continuo

     assign uscitamodulo = ... 

    . In questo caso, i ritardi per la generazione del valore dello stato successivo e delle uscite devono essere gestiti mediante ritardi

     #numero_t_p

    piazzati opportunamente nella assign e nella generazione del nuovo stato all'interno dello switch.

Timescale

Utilizzate il timescale di default, considerando che l'unità corrisponde ad un tp. Questo vuol dire *non* mettere come istruzione del programma test bench alcuna istruzione tipo

`timescale  1ns / 1ps

Procedimento di realizzazione del progetto

Il metodo corretto per svolgere il progetto è il seguente:

  1. studiare il problema e progettare l'unità come se fosse un esercizio di esame:
    1. operazioni esterne
    2. microcodice
    3. derivazione parte operativa e parte controllo
    4. tempo di servizio
  2. realizzare parte operativa e parte controllo in Verilog:
    1. per la parte controllo, realizzare una rete sequenziale standard (di Mealy)
    2. per la parte operativa, realizzare una rete come assemblaggio di componenti standard
  3. per ognuno dei moduli utilizzati (e.g. omegaPC, ALU, RegistroK, …) preparate un test bench (modulo di test, senza parametri, che general una traccia visualizzabile con GTKwave) e controllarne la funzionalità
  4. realizzare un programma di prova per l'intera unità
  5. preparare la relazione

Potete anche provare a realizzare un'unità direttamente nel suo complesso utilizzando il modo behavioural di Verilog, ma in questo modo il successo dell'operazione non dipende da una serie di passi formali, ciascuno singolarmente verificabile, e di conseguenza debugging e tuning della soluzione sono più complicati.

Indietro

Torna alla pagina principale Verilog

informatica/ae/verilogpag.txt · Ultima modifica: 03/01/2019 alle 15:47 (8 mesi fa) da Marco Danelutto