2016-04-01 2 views
-1

Je suis novice en VHDL, mais j'ai réussi à créer un processeur en VHDL avec de l'aide (il dispose d'une ALU, d'un multiplicateur et d'une architecture de bus pour accéder à la mémoire SRAM). Le processeur décode les instructions de 32 bits (qui contient le type d'opérations et les adresses de mémoire). Comment écrire le code C suivant dans le processeur?Ecriture d'une instruction C en VHDL

Comment écrire le code C suivant dans le processeur?

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]); 

Je devine que j'écrirais une liste d'instructions pour ce code C dans le banc d'essai:

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

et répétez l'opération pour 9 fois.

Est-ce la bonne façon? Y a-t-il une meilleure façon d'implémenter la boucle for? Y at-il un moyen d'écrire le code C directement dans mon tb_top.vhd?

Répondre

0

Bien sûr, vous pouvez traduire manuellement le code C en code assembleur, puis l'assembler en code binaire. Mais, une meilleure option est d'utiliser un compilateur C et/ou un assembleur pour votre processeur. S'il n'y a personne disponible et que vous envisagez d'utiliser votre processeur pour plus de programmes, vous pouvez créer un nouveau compilateur en plus de gcc et un nouvel assembleur en plus de binutils, par exemple. Puis placez la sortie binaire dans la ROM d'instructions. Si vous simulez le processeur lui-même sans mémoire ni périphériques d'E/S, émulez la ROM d'instructions dans votre testbench. Un tableau de std_logic_vector doit répondre à vos besoins:

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 
); 

L'exemple définit une ROM avec 64 adresses, chacune stockant un octet. Vous devrez mettre à jour les plages et le contenu de la mémoire pour répondre à vos besoins.

+0

Merci pour votre réponse! –