L’ultima volta ho guardato un semplice processore RISC a 16 bit rivolto agli studenti. Aveva bisogno di un po ‘di assistenza sulla documentazione e ha avuto un file mancante, tuttavia sono riuscito a farlo simulare utilizzando uno strumento gratuito su Internet Challed EDA Playground. Questa volta ti porterò con i dettagli del codice e esattamente come eseguire la simulazione.

Dovrai riferirti alla pubblicazione precedente se non l’hai già controllato. I diagrammi e le tabelle forniscono una panoramica di alto livello che ti aiuterà a comprendere i file discussi in questo post.

Se volessi davvero programmarlo su un vero FPGA, avresti un piccolo lavoro da fare. La memoria e l’inizializzazione del registro vengono eseguite in un metodo che funziona bene per la simulazione, tuttavia non funzionerebbe su un FPGA genuino. Ad ogni modo, iniziamo!

File per file

Se prendi ciascun dato singolarmente, nessuno di loro è estremamente difficile da capire. Ecco un rapido rundown (sto utilizzando i nomi dei dati che utilizzerò nella mia simulazione su Internet):

Parameter.v – Questo è come un dato includere dati che impostano alcune definizioni fondamentali per ogni altro file.

PROG.V – Questa è la memoria di direzione. Un modulo semplice, prende un indirizzo e presenta i dati per quell’indirizzo. La direttiva $ ReadMemb legge i dati da un dato (Test.Prog).

Register.V – Il file di registro. Questa è quasi come la memoria di direzione, tuttavia ha due porte controllate e puoi comporterla.

data.v – la memoria RAM. Questo è quasi come i registri, per quanto più grande e con una singola porta controllata. Esiste un codice di simulazione che apre un dato e stampando i commenti della memoria, tuttavia l’ho cancellato come è stato solo per il debug. Il contenuto preliminare proviene dal file Test.Data.

alu.v – crederesti che questo sarebbe complicato, tuttavia non lo è. Ci vogliono solo due input e fa qualcosa per produrre l’output. Qualcosa di semplice come aggiunge o sottrae. Il sempre @ (*) dice a Verilog a non produrre logica clocking per questo. Si trasforma solo in alcuni semplici cancelli e muxes.

Datapath_unit.v – Questo è uno dei file più complessi, anche se se lo scavi, vedrai che è principalmente blocco. Questi dati producono tutte le risorse (come i registri e le memorie) e li filano insieme.

Control_Unit.v – Un modulo più lungo, questo implementa la tabella di direzione, impostando le linee di controllo in base all’istruzione attuale.

AluControl.v: questi dati decodifica le istruzioni per l’ALU. Mancava il post originale. Stranamente, c’è una CPU più simile nello stesso identico sito che ha un file AluControl, tuttavia è chiaramente per un set di direzione diverso. Tuttavia, iniziando a mantenere i dati così come l’utilizzo del tavolo di stile, sono stato in grado di ricrearlo. Se [FPGA4Students] corregge questo, i file potrebbero sembrare estremamente diversi.

Design.SV – Questi dati sono obbligatori per il simulatore di edaplayground che sto usando. Contiene gli elementi di alto livello (il percorso dei dati e l’unità di controllo). Poiché Edaplayground elabora solo questo file, è necessario per esso includere gli altri file sopra menzionati. Ciò provoca alcuni avvertimenti poiché ognuno di loro ha una direttiva di temporale, tuttavia questo è innocuo.

Testbench.sv – Il testbench non fa parte del design genuino, tuttavia imposta semplicemente la simulazione e raccoglie risultati. Dovevo modificarlo un po ‘per lavorare con EdAplayground, tuttavia l’operazione è la stessa. Produce solo una CPU, alimenta l’orologio, così come consente di gestire per un po ‘. Il programma di test e il contenuto della memoria sono in Test.Prog e test.Data.

Simulazione

Puoi fare una delle due cose. Puoi aprire la mia copia dello stile Ready-To-Go, tuttavia potrebbe non essere la tua opzione migliore. Ti suggerisco di andare su EdAplayground e produrre un nuovo progetto di Verilog. Quindi inizia a spostare i file dal post originale. Avrai eseguito errori e file mancanti. Vedi esattamente quanti puoi aggiustare. Se sei scatenato, puoi utilizzare la mia copia per assisterti se sei scatenato. Scoprirai di più in questo modo.

Se scegli di provarlo, proprio qui ci sono alcuni suggerimenti su Edaplayground. Non è necessario selezionare UVM / OVM, né requisito alcun tipo di altre librerie. Ho utilizzato Icarus Verilog 0.9.7, tuttavia potrebbe molto probabilmente utilizzare qualsiasi tipo di strumenti di Verilog disponibili. Vuoi ispezionare la casella di controllo Epwave e il bisogno di aggiungere questo alla parte citante di Testbench:

iniziale
inizio
$ dumpfile (“dump.vcd”);
$ dumpvars;
Utilizzare l’indicazione + accanto alle schede Nome dati per creare nuovi file. Edaplayground ha un limite di dieci file per riquadro. Ricorda, dovrai includere qualsiasi tipo di file .v Produci in TestBench.SV o Design.SV. Non è necessario includere i file di dati poiché gli altri file utilizzano indirettamente.

Correre!

Una volta elaborati tutti gli errori, è possibile premere Esegui e riceverai il visualizzatore della forma d’onda, Epwave. TuE Per aggiungere segnali di tasso di interesse in modo da poter guardare la CPU al lavoro. Sarebbe divertente aggiungere alcuni dispositivi I / O in memoria o alcune porte di debug in modo da poter guardare le cose un po ‘meglio. Di solito guarderò il contatore del programma e il registro compose il porto per ottenere un concetto di cosa sta succedendo dentro.

Il codice originale ha avuto un programma che ha esercitato una grande quantità di istruzioni. L’ho commentato e lo ha sostituito con questo:

0000_0100_0000_0000 // 0000: tonnellate R0 <- Mem (R2 + 0) da R2 = 0 Mette 1 in R0 0000_0100_0100_0000 // 0002: tonnellate lo stesso identico in r1 (R1 conterrà sempre 1) // Posiziona 8 (Byte), 4 (Word): 0010_0000_0101_0000 // 0004: r2 = r0 + r1 0001_0010_1000_0000 // 0006: MEM [R1] = R2 (che è MEM [1] = R2 0000_0010_0000_0000 // 0008: r0 = mem [r1] 1101_0000_0000_0011 // 000A: Vai a Place # 4 (la CPU si moltiplicherà per 2 e aggiungi 2) // Nessuna direzione a 000 °C, tuttavia PC si appenderà lì mentre processi Dovresti essere in grado di conformarsi al valore di incrementazione che comporre alla memoria e guardare il ciclo del contatore del programma per posizionare 4 con ciascun loop. Ecco una sessione tipica: Ho lasciato fuori una grande quantità di segnali interni, tuttavia è possibile vedere che l'indirizzo di memoria 1 è impostato su 2 così come a 3 le prime due iterazioni del ciclo. Fine del gioco È una grande CPU accademica? Non sono sicuro. Esistono alcune CPU più semplici, tuttavia sono frequentemente poco poiché sono difficili o sono estremamente poco pratiche. Qualunque cosa più impegnativa di questo è molto probabilmente molto da mordere per un principiante. Mentre credo che dovresti avere qualche comprensione del Verilog fondamentale prima di affrontare qualcosa del genere, la documentazione era un po 'sparsi (e confuso) in alcune aree. Ovviamente, è stato un grande sufficiente da quando ho capito, tuttavia se stai appena iniziando, molto probabilmente apprezzerei un po 'più di aiuto e spiegazioni. Hai una CPU di Verilog accademica preferita? Sto ancora cercando una persona che è "giusto".

Leave a Reply

Your email address will not be published. Required fields are marked *