为什么这个 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" 你想做的。一如既往,你所得到的就是你所写的......有时可能需要一些时间才能理解你到底写了什么。
代码如下:
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" 你想做的。一如既往,你所得到的就是你所写的......有时可能需要一些时间才能理解你到底写了什么。