我正在尝试在VHDL上写一些东西,但它不起作用。这是我的代码的一部分:
case currentState is
when ST000 =>
with A select nextState <=
ST025 when "01",
ST050 when "10",
ST000 when "11",
currentState when others;
when ST001 => ...
when others => ...
end case;
它说这些行存在问题,例如:Line 62. parse error, unexpected WITH
。为什么这with
出乎意料?将这两种语法case...is
和with...select
混合在一起是不对的?
答案 0 :(得分:1)
除非另有说明,否则参考IEEE Std 1076-2008,IEEE VHDL语言参考手册。
<强> 10。顺序陈述
10.1一般
本节描述了各种形式的顺序语句。顺序语句用于定义执行子程序或过程的算法;它们按照它们出现的顺序执行。
10.9案例陈述
case语句选择执行许多替代语句序列之一;所选择的替代方案由表达式的值定义。
一系列陈述表示顺序陈述。
10.5.4选定的信号分配
所选择的信号分配表示一个等效的案例陈述,它将值分配给信号或强制或释放信号。
...然而
附件E
(资料)
IEEE Std 1076-2002的更改...
第10条- 10.5:增加武力和释放任务;添加简单,条件和选定的信号分配。
在早于-2008的VHDL标准的修订版中,所选择的信号分配仅作为并发信号分配语句提供(见11.6并发信号分配语句,或见于条款/第9章并发声明,第9.5.2节中的选定信号分配)早期修订的VHDL标准)。
请注意,当不方便或缺乏对此-2008功能的支持时,您可以替换案例陈述:
case currentState is
when ST000 =>
case A is
when "01" =>
nextState <= ST025;
when "10" =>
nextState <= ST050;
when "11" =>
nextState <= ST000;
when others =>
nextState <= CurrentState;
end case;
when ST001 => ...
when others => ...
end case;