我正在学习VHDL,对于第一个项目,我选择了简单的Brainfuck处理器。当我尝试编译它时,我得到关于不兼容切片的错误。我正在使用EdWinXP。如何修复代码?我的代码中有很多错误吗?对于C程序员来说,是否有更简单的VHDL替代方案?
use ieee.std_logic_1164.all;
entity BFCPU is
port (
I0 : in std_logic; --INPUT
I1 : in std_logic; --PROGRAM
I2 : in std_logic; --PROGRAM READY
O1 : out std_logic; --PROGRAM NEEDED
O2 : out std_logic; --OUTPUT
O3 : out std_logic; --OUTPUT WRITTEN
O4 : out std_logic); --INPUT NEEDED
--O5 : out std_logic); --INPUT POOLING CLOCK
end BFCPU;
architecture work of BFCPU is
type t_Memory is array (0 to 127) of std_logic_vector(7 downto 0);
signal rammem : t_Memory;
signal pointer : std_logic;
begin
pointer <= 0;
workflow: process (I2) is
begin
if I1=1 then
rammem(pointer) <= std_logic_vector(unsigned(rammem(pointer)) + 1);
elsif I1=2 then
rammem(pointer) <= std_logic_vector(unsigned(rammem(pointer)) - 1);
elsif I1=3 then
pointer <= pointer - 1;
elsif I1=4 then
pointer <= pointer + 1;
elsif I1=5 then
O2 <= rammem(pointer);
elsif I1=6 then
O4 <= not O4;
inwait: while( I0 = 0 ) loop
if not (I0 = 0) then
rammem(pointer) <= I0;
end if;
end loop inwait;
O4 <= not O4;
end if;
end process workflow;
end work;
答案 0 :(得分:0)
你在begin语句下面和进程外面写的内容总是正确的,所以这不是任何形式的顺序。想象一下像FPGA引脚,它被焊接到地。
您尝试在进程内操作指针信号,但您不能,因为指针固定为“0”。 如果您希望指针初始化为'0',就像它看起来一样,您必须将此行放在该过程中。但是,我看到你尝试用指针信号调用算术运算,但是你将信号定义为std_logic。 std_logic可以表示'0','1'和其他几个状态,如High-Z,但不是数字。您应该使用整数或自然进行计算。