vhdl case ... is and with ... select

时间:2017-11-02 03:17:27

标签: select case vhdl

我正在尝试在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...iswith...select混合在一起是不对的?

1 个答案:

答案 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;