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

标签 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***********";

最佳答案

尝试一下,看看是否有效!该语言没有理由禁止这种行为。你实际上是错误的,VHDL 不支持 Don't Cares 的 case 语句。从 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 ;

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

关于vhdl - 我可以在 VHDL 中创建嵌套的 with-select-when 语句吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22785909/

相关文章:

VHDL:连接 2 个向量 - 结果向量的方向是什么?

vhdl - 函数参数取反时出现意外的函数输出

vhdl - 综合结果中的 "gate count"是什么以及如何计算

testing - VHDL testbench 在仿真波形中获取 U

python - Cocotb 在门级仿真中使用泛型/参数

vhdl - vivado 生成的函数 clogb2() 无法合成,出现循环限制错误

VHDL 分配文字

VHDL:Mealy FSM 不在时钟边沿产生状态变化?

vhdl - vhdl 中逻辑与 (&&) 的等效项是什么?

vhdl - 是否有必要在 VHDL 中编码时将组合逻辑与顺序逻辑分开,同时针对综合?