Indice

Unità Firmware Divisore di interi

Descrizione unità

L'unità riceve una coppia di interi X e Y e restituisce in Q ed R il risultato ed il resto della divisione intera. Le richieste avvengono da una unità esterna tramite un protocollo a domanda-risposta che utilizza indicatori a transizione di livello.

Microprogramma di controllo

// RDY è l'indicatore a transiz. di livello in ingresso, ACK è quello in uscita
// la comunicazione avviene a domanda/risposta
// INX    registro del dividendo
// INY    registro del divisore
// Q	  registro per il risultato/quoziente
// OUTR	  registro per comunicare il resto
// OUTQ   registro per comunicare il risultato
 
// prima microistruzione: attesa di arrivo di una richiesta di divisione
 
0. (RDY=0) nop, 0,
   (=1) INX -> X, INY -> Y, 0 -> Q, 1.
 
// continuo a sottrarre il divisore dal dividendo e ad incrementare il risultato
// fino a che il divisore è maggiore o uguale a ciò che resta del dividendo
// quando ho finito, mando il segnale di fine, resetto il segnale di richiesta
// e trasferisco risultato e resto nei registri di interfaccia in uscita
 
1. (segno(X-Y)=0) X - Y -> X, Q + 1 -> Q, 1
   (=1) X -> OUTR, Q -> OUTQ, reset RDY, set ACK, 0.

Schema della PO

schemaPO Schema logico PO

Codice Verilog

I ritardi nel codice sono forzati. La compilazione del codice su una FPGA vera avrebbe determinato automaticamente la lunghezza del ciclo di clock ottenibile.

Esempio di output

Esempio del risultato quando X=9 e Y=5. Le prime righe sono relative ai registri e wire del modulo di test. L'ultima riga rappresenta lo stato della PC.

output GtkWave (9/5)