我还没有看到任何地方展示这样的例子,直到现在我还没需要它。
我有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***********";
答案 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