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我將它添加到時鐘進程中,現在一切都很好。謝謝你的一切。其實這一直困擾着我說現在....我是這樣一個擦洗<。< –
那麼你爲什麼「接受」下面的答案是沒有意義的?我添加了一個答案,其中包括一些此類警告和其他一些警告。 –