type dmemSpace is array(0 to 1023) of std_logic_vector(31 downto 0);
signal dataMem : dmemSpace := (
400 => X"00000000",
404 => X"00001000",
408 => X"FFFFEFFF",
others => X"00000000"
);
signal dAddr : std_logic_vector(31 downto 0);
signal check : integer;
dAddr(31 downto 0) <= Addr(31 downto 2) & "00";
check <= to_integer(unsigned(dAddr));
DataOut <= dataMem(to_integer(unsigned(dAddr))) when (check > 0);
它再次....我工作在一个单一的循环CPU和其他一切工作正常,但在内存中的这一特定行。Vhdl矢量边界检查
DataOut <= dataMem(to_integer(unsigned(dAddr))) when (check > 0);
我想防止DataOut的索引超出范围的错误,但这是行不通的。有任何想法吗?
Check > 0
防止所有的数据出来。Check >= 0
让错误通过...当导致异常的索引是-4时。
这是否在一个钟控过程?如果是这样,这是一个计划问题。如果不是,您已经使用DataOut创建了一个锁存器。你为什么不使用'dAddr'的9 downto 0来限制到1023? (我知道,可能是一个学习练习。) –
! YOURE RIGHT我将它添加到时钟进程中,现在一切都很好。谢谢你的一切。其实这一直困扰着我说现在....我是这样一个擦洗<。< –
那么你为什么“接受”下面的答案是没有意义的?我添加了一个答案,其中包括一些此类警告和其他一些警告。 –