2016-04-01 16 views
-1

Ich bin neu in VHDL, aber ich habe es geschafft, einen Prozessor in VHDL mit etwas Hilfe zu erstellen (es hat ALU, Multiplikator und eine Busarchitektur für den Zugriff auf SRAM-Speicher). Der Prozessor dekodiert 32-Bit-Befehle (die den Typ der Operationen und die Speicheradressen enthalten).Schreibe C-Anweisung in VHDL

Wie schreibe ich den folgenden C-Code in den Prozessor?

int i = 0; 
int c = 0; 

int a[10] = "0,1,2,3,4,5,6,7,8,9"; 
int b[10] = "1,0,-1,0,1,0,2,1,-1,1"; 

for (i = 0; i < 9; i++) c += (a[i]*b[i]); 

Ich vermute, ich eine Liste von Anweisungen für diesen C-Code in dem Prüfstand schreiben würde:

1st instruction: multiply a[0] with b[0] 
2nd instruction: add the result to c 

und wiederholen Sie für 9mal.

Ist das der richtige Weg? Gibt es eine bessere Möglichkeit, die For-Schleife zu implementieren? Gibt es eine Möglichkeit, C-Code direkt in meine tb_top.vhd schreiben?

Antwort

0

Natürlich können Sie den C-Code manuell in Assembler-Code übersetzen und dann zu Binärcode zusammenstellen. Besser ist es jedoch, einen C-Compiler und/oder Assembler für Ihren Prozessor zu verwenden. Wenn niemand verfügbar ist und Sie Ihren Prozessor für längere/viele Programme verwenden möchten, können Sie einen neuen Compiler oben auf gcc und einen neuen Assembler zum Beispiel auf binutils erstellen.

Dann platzieren Sie den binären Ausgang in das Befehls-ROM. Wenn Sie den Prozessor selbst ohne Speicher und E/A-Geräte simulieren, emulieren Sie das Befehls-ROM in Ihrer Testbench.

type rom_t is array(natural range <>) of std_logic_vector(7 downto 0) ; 
constant rom : rom_t(0 to 63) := (
    0 => x"00", -- insert binary code of instruction at address 0 here 
    1 => x"00", -- instruction at address 1 
    -- and so on 
    others => x"00" -- fill remaining ROM with zero 
); 

Das Beispiel definiert ein ROM mit 64 Adressen, die jeweils ein Byte zu speichern: eine Anordnung von std_logic_vector sollte Ihre Bedürfnisse anzupassen. Sie müssen die Bereiche und den Speicherinhalt an Ihre Bedürfnisse anpassen.

+0

Danke für Ihre Antwort! –