我可以在VHDL中创建嵌套的with-select-when语句吗?

时间:2014-04-01 12:28:23

标签: vhdl

我还没有看到任何地方展示这样的例子,直到现在我还没需要它。

我有2个控制信号,我需要为它们制作一个嵌套的with-select-when语句。我可以轻松地使用case语句嵌套,但我最近意识到我需要在进程之外使用这段代码,因为它会影响时间。这是我目前的代码:

case OpcodeIn is =>
    when "000000" =>
        case FunctIn is =>
            when "00000" =>
             ...
            when "00001" ==>
             ...
        end case;
    when "000001" =>
        ...
end case;

另外,我不能像以下那样连接:

controlSig <= OpcodeIn & FunctIn;

然后使用:

with controlSig select output <=
    ...

因为FunctIn仅在OpcodeIn的某些值下有效。因此,只有在存在通配符时才会起作用:

"0010" when "000001***********";

2 个答案:

答案 0 :(得分:2)

试一试,看看它是否有效!语言没有理由禁止这种行为。你实际上是错误的,VHDL不支持带有Do not Cares的案例陈述。从VHDL-2008开始,支持此功能。请参阅下面的示例:

process (Request)
begin
  case? Request is
    when "1---" => Grant <= "1000" ;
    when "01--" => Grant <= "0100" ;
    when "001-" => Grant <= "0010" ;
    when "0001" => Grant <= "0001" ;
    when others => Grant <= "0000" ;
    end case? ;
end process ;

需要注意的一点是,您在此过程中添加的解码逻辑越多,就越难以满足时序要求。

答案 1 :(得分:2)

并发表格是:

with Request select?
  Grant <= "1000" when "1---",
           "0100" when "01--",
           "0010" when "001-",
           "0001" when "0001",
           "0000" when others ;

如上所述,Xilinx工具不太可行。请务必提交针对Xilinx工具的错误报告。每个错误报告都有助于他们了解实现新功能的重要性。他们如何错过了清楚地表明VHDL是主要的FPGA设计和验证语言的市场统计数据。

上面的代码示例来自:http://www.synthworks.com/papers/vhdl_2008_2012_2up.pdf