为什么这个VHDL代码有效? 4:2使用Case语句的优先级编码器

时间:2016-09-01 04:45:00

标签: vhdl modelsim digital-logic

代码如下:

entity encoder_case is
 port(
     din : in STD_LOGIC_VECTOR(3 downto 0);
     dout : out STD_LOGIC_VECTOR(1 downto 0)
     );
end encoder_case;

architecture encoder_case_arc of encoder_case is
begin
encoder : process (din) is
begin
    case din is
        when "1000" => dout <= "00";
        when "0100" => dout <= "01";
        when "0010" => dout <= "10";
        when "0001" => dout <= "11";
        when others => dout <= "ZZ";
    end case;
end process encoder;
end encoder_case_arc;

现在你希望这段代码不包括例如din为“0101”,“1010”等的情况。但是对于那些输入,dout分别产生“10”和“11”。为什么这样做? VHDL是否智能地为更高阶位提供更高的优先级?是否“知道”我们正在尝试在此处完成优先级编码器?

1 个答案:

答案 0 :(得分:2)

“其他”下的所有情况都应该产生“ZZ”,除非另一个信号会驱动dout。我们确实需要您的测试平台和波形来澄清这一点。

至于你的其他问题:在一个案例中没有优先权,不是在选项顺序方面,当然也不是在高位/低位的意义上。

它肯定不会“知道”你想做什么。你得到的就是你一如既往地写的......可能只需要一些时间来理解你有时写的是什么。