VHDL中的不兼容切片

时间:2017-11-19 15:21:12

标签: vhdl cpu brainfuck

我正在学习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;

1 个答案:

答案 0 :(得分:0)

你在begin语句下面和进程外面写的内容总是正确的,所以这不是任何形式的顺序。想象一下像FPGA引脚,它被焊接到地。

您尝试在进程内操作指针信号,但您不能,因为指针固定为“0”。 如果您希望指针初始化为'0',就像它看起来一样,您必须将此行放在该过程中。但是,我看到你尝试用指针信号调用算术运算,但是你将信号定义为std_logic。 std_logic可以表示'0','1'和其他几个状态,如High-Z,但不是数字。您应该使用整数或自然进行计算。