Riporto alcune note a integrazione di quanto detto a lezione relativamente al progetto Verilog.
Potete realizzare reti sequenziali, secondo il modello di Moore o di Mealy, in due modi distinti:
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.
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
Il metodo corretto per svolgere il progetto è il seguente:
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.