gpt4 book ai didi

case - VHDL 中 CASE 语句中的多项赋值

转载 作者:行者123 更新时间:2023-12-05 08:58:08 27 4
gpt4 key购买 nike

我对 VHDL 还是个新手。我需要在 CASE 语句中为多个信号赋值,如下所示:

CASE input24 IS
WHEN "00" THEN
output0 <= '1' ;
output1 <= '0' ;
output2 <= '0' ;
output3 <= '0' ;

WHEN "01" THEN
output0 <= '0' ;
output1 <= '1' ;
output2 <= '0' ;
output3 <= '0' ;

WHEN "10" THEN
output0 <= '0' ;
output1 <= '0' ;
output2 <= '1' ;
output3 <= '0' ;

WHEN "11" THEN
output0 <= '0' ;
output1 <= '0' ;
output2 <= '0' ;
output3 <= '1' ;

在尝试这个之前,我尝试像这样在一行中分配值

WHEN "00" => output0 <= '1', output1 <= '0', output2 <= '0', output3 <= '0' ;

第二个报错

found '0' definitions of operator "<=", cannot determine exact 
overloaded matching definition for "<="

而第一个是语法错误。

我哪里错了?

有没有办法为单个案例的多个信号赋值?

谢谢

最佳答案

当使用 CASE 时,语法是 WHEN "00"=>,因此不使用 THEN。这因此代码是:

CASE input24 IS
WHEN "00" =>
output0 <= '1' ;
output1 <= '0' ;
output2 <= '0' ;
output3 <= '0' ;
...

如果 input24std_logic_vector 你必须使用 WHEN OTHERS
=>
来处理 input24 的剩余编码。代码是:

WHEN OTHERS =>
output0 <= 'X' ;
output1 <= 'X' ;
output2 <= 'X' ;
output3 <= 'X' ;

要在单个like中写赋值,还是用; as语句分隔符,因此不是问题代码中所示的 ,,然后只需删除空格。代码是:

WHEN "01" => output0 <= '0'; output1 <= '1'; ...

对于在一个语句中分配给多个信号,VHDL-2008 支持聚合赋值,所以如果你使用的是 VHDL-2008,你可以这样写:

WHEN "10" =>
(output3, output2, output1, output0) <= std_logic_vector'("0100");

对于 VHDL-2003,一个解决方案可能是创建一个中间 output 信号作为std_logic_vector,然后赋值给这个。代码可以是:

  ...
signal output : std_logic_vector(3 downto 0);
begin
...
WHEN "11" =>
output <= "1000";
...
output0 <= output(0);
output1 <= output(1);
output2 <= output(2);
output3 <= output(3);

如果使用了output,那么case的确切实现就是用于设置 input24 中给定数字的位可以使用:

LIBRARY IEEE;
USE IEEE.NUMERIC_STD.ALL;

ARCHITECTURE syn OF mdl IS

SIGNAL output : STD_LOGIC_VECTOR(3 DOWNTO 0);

BEGIN

PROCESS (input24) IS
BEGIN
output <= (OTHERS => '0');
output(TO_INTEGER(UNSIGNED(input24))) <= '1';
END PROCESS;

output0 <= output(0);
output1 <= output(1);
output2 <= output(2);
output3 <= output(3);

END ARCHITECTURE;

否则,如果不使用output信号,那么case仍然可以通过将默认分配为“0”来简化输出,因此使用代码:

ARCHITECTURE syn OF mdl IS
BEGIN

PROCESS (input24) IS
BEGIN
output0 <= '1' ;
output1 <= '0' ;
output2 <= '0' ;
output3 <= '0' ;
CASE input24 IS
WHEN "00" => output0 <= '1' ;
WHEN "01" => output1 <= '1';
WHEN "10" => output2 <= '1' ;
WHEN "11" => output3 <= '1' ;
WHEN OTHERS => output0 <= 'X'; output1 <= 'X'; output2 <= 'X'; output3 <= 'X';
END CASE;
END PROCESS;

END ARCHITECTURE;

关于case - VHDL 中 CASE 语句中的多项赋值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25961126/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com