Skip to content

paolo-chiappini/mips

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 

Repository files navigation

Prova finale Reti Logiche 2023 - MIPS

Valutazione finale: 30 e Lode

Obiettivo

Implementazione di un'architettura MIPS in VHDL con le seguenti semplificazioni:

  • instruction set ridotto (per maggiori informazioni fari riferimento al documento "Relazione" nella cartella "resources");
  • no pipeline (architettura a singolo ciclo);
  • memoria di 1 KB (invece di 4 GB).

Documentazione

Nella cartella resources sono disponibili alcune forme di documentazione quali diagrammi utilizzati durante la progettazione, output di simulazioni e la relazione finale che descrive il comportamento del sistema e la sua struttura. Altre informazioni sono disponibili nella repository all'interno della Wiki e delle Issue contrassegnate con il tag documentation.

Per ulteriori necessità è possibile aprire una issue.


Simulazione programmi

Al fine di utilizzare il dispositivo, è necessaria la presenza di un file denominato come initial_mem_state.txt nella stessa cartella dei test bench che permetta l'inizializzazione del modello della memoria con il programma da eseguire ed eventuali dati.

Compilazione automatica con script

Nota Bene: gli script sono stati pensati per essere usati con Node.js

Al fine di compilare il file di inizializzazione della memoria è consigliata la scrittura di un programma in un editor testuale come Mars, prestando attenzione alle istruzioni risultanti dall'assemblaggio (l'architettura ignora istruzioni non implementate e/o non riconosciute). Una volta assemblato il programma occorre fare un dump del codice in formato binario come nell'esempio che segue:

00100000100001000000000000000010
00001100000100000000000000001000
00100000010100000000000000000000
10101111101100000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00100011101111011111111111101100
10101111101111100000000000001000
00100011101111100000000000001000
10101111110001000000000000001000
10101111110111110000000000000100
00010100100000000000000000000101
00100001000010000000000000000001
10101111110010001111111111111000
00100001001010010000000000000000
00100000000000010000000000000000
00010000001010010000000000000111
00100000100001001111111111111111
10101111110001001111111111111100
10001111110001001111111111111100
00001100000100000000000000001000
10001111110010000000000000001000
00000001000000100100000000100000
10101111110010001111111111111000
10001111110000101111111111111000
10001111110111110000000000000100
10001111110111100000000000000000
00100011101111010000000000010100
00000011111000000000000000001000

Una volta eseguito il dump, aggiungere gli header ELF per il riconoscimento delle sezioni della memoria, ad esempio:

.text
00100000100001000000000000000010
00001100000100000000000000001000
00100000010100000000000000000000
10101111101100000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00100011101111011111111111101100
10101111101111100000000000001000
00100011101111100000000000001000
10101111110001000000000000001000
10101111110111110000000000000100
00010100100000000000000000000101
00100001000010000000000000000001
10101111110010001111111111111000
00100001001010010000000000000000
00100000000000010000000000000000
00010000001010010000000000000111
00100000100001001111111111111111
10101111110001001111111111111100
10001111110001001111111111111100
00001100000100000000000000001000
10001111110010000000000000001000
00000001000000100100000000100000
10101111110010001111111111111000
10001111110000101111111111111000
10001111110111110000000000000100
10001111110111100000000000000000
00100011101111010000000000010100
00000011111000000000000000001000
.data
00001100000100000000010000010011
00001100000100000000001000010011
00001100000100000000000100010011
00001100000100000000000010010011
00001100000100000000000001010011

Una volta aggiunti gli header è possibile eseguire lo script elf_reader.js nell'opportuna cartella /test/scripts per interpretare il file nello stato iniziale della memoria.


image


Membri del gruppo