【问题标题】:VHDL signal affectation simplificationVHDL 信号影响简化
【发布时间】:2016-10-28 08:59:04
【问题描述】:

我对 VHDL 很陌生,我有一个愚蠢的问题。

我的代码中有一个巨大的 case 语句,以及一个仅在 1 种情况下为值(例如“1”)和在所有其他情况下为“0”的信号。 我想避免在所有情况下都写 th my_signal

为了可读性,我想在这个过程中保留这个信号。

我想做的事情是这样的

my_signal <='0';  
case  
case0  
....  
case1  
....  
case2  
my_signal <='1';  
....  
case3  
....  
case4  
....  

为了避免

case  
case0  
my_signal <='0';  
....  
case1  
my_signal <='0';  
....  
case2  
my_signal <='1';  
....  
case3  
my_signal <='0';  
....  
case4  
my_signal <='0';  
....  

但这对我来说似乎是一个多驱动信号。 实现这一目标的干净方法是什么?

非常感谢!

【问题讨论】:

  • 只要两个赋值语句在同一个进程中,就只有一个驱动。你的第一个例子很好。
  • 谢谢布赖恩!然后我想我可以使用这个“默认”来让我的代码更轻。

标签: signals vhdl


【解决方案1】:

你有两个选择:

i) 默认分配

....
my_signal <='0';
case ...
  when case2 =>
    my_signal <='1';
    ....
end case;

ii) others 分支:

case ...
  when case2 =>
    my_signal <='1';
    ....
  when others =>
    my_signal <='0';
end case;
....

选择 (ii) 可能更有用,因为 VHDL 中的 case 语句要求包含所有可能性,因此对于选择 (i),您可能需要一个 when others =&gt; 分支以满足该条件,即 (i) 必须是:

....
my_signal <='0';
case ...
  when case2 =>
    my_signal <='1';
    ....
  when others =>
    null;         -- do nothing
end case;

您最初的建议和我的建议都没有“多驱动”信号。您可以根据需要从一个进程驱动(分配给)一个信号,它绝不是一个“多驱动”信号。在进程中对信号的任何分配都会导致对该信号的驱动程序。如果您将信号分配给来自多个进程的信号,您只会得到一个“多驱动”信号,而您并没有这样做。当执行带有信号分配 (&lt;=) 的代码行时,实际发生的是 event 被放置在 event queue 中(模拟器“To Do List ”)。该事件将在下一个 delta 周期(或 模拟周期)发生,这是模拟的下一次迭代。如果在同一模拟循环中执行多行分配给一个信号的信号,则事件队列中的任何事件都将被删除并由最后一个信号分配生成的事件替换(稍微过度简化,但现在就可以了)。

【讨论】:

  • 在代码示例中,case2 应该是when case2 =&gt;
  • @scary_jeff 我采用了原始问题中使用的 argot。
  • argot;必须查一下,好词!我猜到了,但认为使用真正的语法对未来的读者会更有用。只是一个建议。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多