2016-04-01 2 views
-1

Я новичок в VHDL, но мне удалось с некоторой помощью создать процессор в VHDL (у него есть ALU, множитель и архитектура шины для доступа к памяти SRAM). Процессор декодирует 32-разрядные инструкции (которые содержат тип операций и адреса памяти).Записать запись С в VHDL

Как написать следующий код C в процессоре?

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

Я предполагаю, что я хотел бы написать список инструкций для этого кода С в тестбенче:

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

и повторить 9 раз.

Правильно ли это? Есть ли лучший способ реализовать for-loop? Есть ли способ написать C-код прямо в моем tb_top.vhd?

ответ

0

Конечно, вы можете вручную перевести код C на ассемблерный код, а затем собрать его в двоичный код. Но лучше использовать компилятор C и/или ассемблер для вашего процессора. Если нет никого, и вы планируете использовать свой процессор для более длинных/многих программ, вы можете построить новый компилятор поверх gcc и новый ассемблер поверх binutils, например.

Затем поместите двоичный выход в ПЗУ инструкции. Если вы имитируете сам процессор без памяти и устройств ввода/вывода, тогда эмулируйте ПЗУ инструкций в своем тестовом банке. Массив std_logic_vector должен соответствовать вашим потребностям:

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

Пример определяет диск с 64 адресов, каждый из которых хранит один байт. Вам необходимо будет обновить диапазоны и содержимое памяти в соответствии с вашими потребностями.

+0

Спасибо за ваш ответ! –

Смежные вопросы