为什么这个 VHDL 代码可以工作? 4:2 使用 Case 语句的优先级编码器

Why does this VHDL code work? 4:2 Priority encoder using Case statement

代码如下:

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 是否智能地为高阶位赋予更高的优先级? 'know' 我们要在这里实现优先级编码器吗?

"others" 下的所有情况都应产生 "ZZ",除非另一个信号驱动 dout。我们确实需要您的测试台和波形来阐明这一点。

至于你的其他问题:在案例中没有优先级这样的东西,没有选项的顺序,当然也没有 higher/lower 位的意义。

而且它肯定不是 "know" 你想做的。一如既往,你所得到的就是你所写的......有时可能需要一些时间才能理解你到底写了什么。