未在每个 case 语句中分配 VHDL 信号

问题描述 投票:0回答:1

如果我的 VHDL 代码中有以下 case 语句

case state is
    when ST_STATE1 =>
        a <= '1';
    when ST_STATE2 => 
        b <= '1';
    when ST_STATE3 =>
        a <= '0';
        b <= '0';
end case;

假设

a
b
在重置时已正确初始化和定义。我知道
b
中会有一个
ST_STATE1
的锁存器,并且
a
中会有一个
ST_STATE2
的锁存器,但这有什么不好吗?预期的行为将是以下之一

case state is
    when ST_STATE1 =>
        a <= '1';
        b <= b;
    when ST_STATE2 => 
        a <= a;
        b <= '1';
    when ST_STATE3 =>
        a <= '0';
        b <= '0';
end case;

但是如果有更多的信号,以及更多可能的状态,我更愿意只列出实际上必须改变的信号。合成器总是会生成与第二个片段相同的代码吗?

case vhdl
1个回答
0
投票

总结评论并回答您的 2 个问题:

  1. “我知道 ST_STATE1 中将有一个 b 锁存器,ST_STATE2 中将有一个 a 锁存器,但这有什么不好吗?”

没有“ST_STATE1 中 b 的锁存器(或触发器)”的结构,但由于您的代码位于时钟进程内,因此信号 b 会有一个触发器,该触发器将被设置为状态 ST_STATE2 和 ST_STATE3 中的指定值,并且将将其值保持在状态 ST_STATE1。信号a也是如此。

这两个代码片段都没有什么“不好”的地方。我更喜欢第一个,但有时为了更好的可读性,我也使用第二个。

  1. “合成器总是会生成与第二个片段相同的代码吗?”

是的,会的。

© www.soinside.com 2019 - 2024. All rights reserved.