我是VHDL新手并使用case语句,我有类似以下内容:
process(state)
begin
case state is
when stop =>
a <= input;
b <= output;
when move =>
a <= input_1;
b <= output_1;
end case;
end process;
其中a,b,输入,输出,input_1和输出1是信号 .
我的问题是我想在一个选项中只有一个嵌套的情况:
例如:
process(state)
begin
case state is
when stop =>
a <= input;
b <= output;
when move =>
a <= if c='0' then input_1 else input_2;
b <= if c='0' then output_1 else output_2;
end case;
end process;
我的问题是,我可以做上面的事情,其中并非所有案例选项都嵌套但只有其中一些是或在这种情况下有任何其他方式,我尝试使用when else但得到一个错误,说这种语法不支持 .
任何帮助表示赞赏
3 回答
我不太清楚你在这里问的是什么:
但这是你想要做的吗? (注意我已将
c
添加到灵敏度列表中):你的问题充满了危险 . 将输出分配给内部信号可能需要inout或buffer或VHDL 2008支持的输出端口模式,这对于合成来说并不通用 . 通常也不支持模式缓冲区 .
为了解决问题的核心顺序信号分配支持VHDL 2008中支持的时间,但通常不在综合中 .
案例陈述选择包含顺序陈述 .
您可以使用if语句:
请注意,您对
c
的两个评估已合并为一个 .除了在VHDL 2008中作为顺序语句支持的条件信号分配状态之外,还选择了信号赋值语句(同样通常不作为顺序语句由综合支持) .
2008年之前的VHDL没有用于顺序语句的三元运算符(C-like
? :
),所以你不能写if c='0' then input_1 else input_2
,但在VHDL-2008中你可以写input_1 when c='0' else input_2
.但是,通过实现一个小功能可以实现紧凑的编码风格:
因此代码的移动部分可以写成:
你也可以做一个嵌套的情况,如:
或者像大卫所展示的那样用_2584947做 .