在下面的问题中,
ASM图表显示$.getScript('script.js', function()
{
// non cached script.js
});
的值与0进行比较以进入下一个状态,但在比较q_next
之前,q的值已经用q_next
更新,因此,如果我们将q的值与0进行比较,结果在时序和其他参数方面是否相同?
q_next
的类型应该是什么?它们应该是reg还是wire?
我附上了ASM图表和Verilog代码的屏幕截图。我也不明白条件框的时序含义(一般来说,我们不能把条件框的输出放在一个不依赖于条件框输出的独立状态)?,
当处于wait1状态时,我们检查sw的值,如果为true,我们递减计数器,然后检查计数器是否已达到零,然后是asser db_tick。我想了解从wait1和递增计数器并断言db_tick时的时间流。这些阶段之间是否有任何时钟周期,即从状态转移到条件框?
同样在verilog代码中,我们使用q_next and q
和q_load
来控制计数器。当我们可以简单地控制状态中的计数器时,为什么要使用这些信号?
是否确保FSM(控制路径)控制计数器(数据路径)?请解释。提前致谢。
答案 0 :(得分:0)
在下面的问题中,ASM图表显示q_next的值为 比较0进入下一个状态但在比较q_next之前, q的值已经用q_next更新了,所以如果我们比较一下 q的值为0,结果在时序和方面相同 其他参数?
没有。当q_next
的值为0时,q
仍然包含值1,直到在下一个正时钟边沿更新为止。如果检查q==0
,则每个等待状态将花费额外的时钟周期。
q_next和q的类型应该是什么?他们应该是reg还是 线?
要么。 reg
类型(例如q_reg
)表示他们在always
块中分配了值,而wire
类型(如q_next
)则使用{ {1}}语句或作为子模块的输出。
我也不明白条件框的时间含义(in 一般来说,我们不能把条件框的输出放在一个单独的 状态,它不依赖于条件框的输出)? 比如在wait1状态时,我们检查sw的值,如果为true,我们 递减计数器,然后检查计数器是否已达到零 然后是asser db_tick。我想了解我们的时间流程 从wait1移动并递增计数器并断言db_tick。
以下是assign
状态下单个时钟周期的操作流程:
wait1
?如果没有,则不做任何其他事情,并转到州SW==1
。这些操作将在下一个周期完成。zero
,请计算SW==1
,并将该值分配给q_next
以进行下一个周期。q
?如果没有,请留在q_next==0
进行下一个周期并重复。wait1
,然后转到州db_tick=1
。如果将两个条件分成两个独立的状态,倒数到0将需要两倍的时间。
这些阶段之间是否有任何时钟周期,即 从州转移到条件框?
基于该图,在给定状态内的所有操作(比较one
,从sw
减去等) - 即一个虚线框 - 在单个时钟中执行周期。
同样在verilog代码中,我们使用q_load和q_tick来控制 计数器。当我们可以简单地控制时,为什么要使用这些信号 在州的柜台?这样做是为了确保FSM(控制 path)控制计数器(数据路径)?
你也可以这样做。请务必在q
案例中为q_next
指定一个值,以防止锁定。将数据路径和控制路径拆分为单独的default
块/ always
语句确实提高了可读性,IMO。