我是VHDL的新手,但我已经设法用VHDL创建了一个处理器(有ALU,乘法器和总线架构来访问SRAM内存)。处理器解码32位指令(包含操作类型和存储器地址)。
如何在处理器中编写以下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]);
我猜我会在测试平台上写下这个C代码的指令列表:
1st instruction: multiply a[0] with b[0]
2nd instruction: add the result to c
并重复9次。
这是正确的方法吗?有没有更好的方法来实现for循环?有没有办法直接在 tb_top.vhd 中编写C代码?
答案 0 :(得分:0)
当然,您可以手动将C代码转换为汇编代码,然后将其汇编为二进制代码。但是,更好的选择是为处理器使用C编译器和/或汇编程序。如果没有可用的并且您计划将处理器用于更长/更多的程序,则可以在 gcc 之上构建新的编译器,并在 binutils ,例如。
然后将二进制输出放入指令ROM。如果在没有内存和I / O设备的情况下模拟处理器本身,则模拟测试平台中的指令ROM。一系列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个地址的ROM,每个地址存储一个字节。您必须更新范围和内存内容以满足您的需求。