【发布时间】:2019-10-11 11:24:36
【问题描述】:
我想知道逻辑合成器如何解释条件复位值。 例如,FSM 的初始状态取决于异步复位信号和其他一些信号,如下所示。
state_reg : process(clk, reset)
begin
if reset = '0' then
if cond = '1' then
state <= init_state_0;
else
state <= init_state_1;
end if;
elsif rising_edge(clk) then
state <= next_state;
end if;
end process;
我知道当复位值是某个常数时,合成器会执行某些寄存器优化,但是在上面的示例中也是如此吗?
这种设计的一个原因可能是状态机的优化,因为不需要中间状态来在两个初始状态之间进行选择。
【问题讨论】:
-
复位的基本功能是使系统进入一个已知状态。添加
if会阻止这一点。同样在重置时cond的值是多少?为了让你计划工作,它也必须是可变的。您所做的只是将问题移到上游。避免这种情况的唯一方法是,如果cond来自外部信号。 -
cond信号可以假定为外部信号,一旦reset变低就稳定。 -
我不确定你为什么想要两个初始状态。如果
cond是一个常量/泛型,并且初始状态可能会根据其值而有所不同,那么这是有道理的。否则,如果cond在运行时发生变化,那么应该只有一个初始状态,而您在运行时切换到另一种状态。 -
cond保持不变,直到下一次重置触发。这是一个优化问题,因为我们不会花费在时钟周期上选择先前状态的初始状态。 -
"cond 在下一次重置触发之前保持不变。" 因此
cond在第一次和第二次重置之间变化?如果是这样,你如何选择你想要的第一次重置?
标签: vhdl hardware reset synthesis circuit