-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