-1
我已經在下面的VHDL代碼注意到一個奇怪閂行爲:奇怪行爲閂
process (rd,addr) is
begin
if (rd)
case (addr) is
when '00' => dout(15 downto 0) <= in0(15 downto 0);
when '01' => dout(7 downto 0) <= in1(7 downto 0);
when others => dout <= (others => '0');
end case
else
dout <= (others => '0');
end if
end process;
模擬如下:
RD = '1' 和ADDR = '00 ' - > DOUT [15:0] = IN0 [15:0]
RD = '0' - > DOUT [15:0] = '0000'
RD = '1' 和ADDR =' 01'→dout [7:0] = in1 [7:0]和dout [15:8] = in0 [15:8]
因此,通過保持之前的值爲0 [15:8],似乎dout [15:8]產生一個鎖存器,儘管當rd = 0時我認爲dout [15:8]爲0。
任何想法爲什麼模擬行爲的方式? 謝謝,
吉爾
你的代碼段是無效的VHDL。你還沒有顯示聲明,注意'rd'必須是布爾類型。表達式「00」和「01」作爲選項不是有效的字符串或字符文字。您的if語句缺少一個then語句和case語句都缺少關閉(分隔)分號。 – user1155120
那麼在這種情況下,你不會將任何東西分配給d0的那些位。因此他們必須保持以前的價值。 (馬修泰勒是正確的敏感列表,但這與你問的問題沒有關係) –
我無法複製[奇怪的閂鎖](http://i.stack.imgur.com/2fcw8.png )在你創建一個[最小完整和可驗證的例子](http://stackoverflow.com/help/mcve)後,你的行爲不正確的代碼和敘述。請提供一個MCVE。提供有關VHDL工具及其版本的信息可能也很有用。 – user1155120