2015-08-31 113 views
0

在下面的问题,Verilog和ASM实施

的ASM图表显示的q_next值与0进行到下一个状态,但q_next比较之前,q的值已经与q_next更新,因此如果我们将q的值与0进行比较,那么结果在时序和其他参数方面是否相同?

另外应该是什么类型的q_next and q?他们应该是reg还是wire?

我附上了ASM图表和Verilog代码的屏幕截图。我也不明白条件框的时间影响(一般来说,我们不能将条件框的输出置于不依赖于条件框的输出的单独状态)吗?,

就像处于wait1状态时一样,我们检查sw的值,如果为true,我们递减计数器,然后检查计数器是否已达到零,然后检查asser db_tick。我想了解从wait1和increment计数器并断言db_tick时的时间流程。这些阶段之间是否存在任何时钟周期,即从一个状态转移到一个条件框?

同样在Verilog代码中,我们使用q_loadq_tick来控制计数器。当我们可以简单地控制状态中的计数器时,为什么使用这些信号?

这样做是为了确保FSM(控制路径)控制计数器(数据路径)?请解释。提前致谢。

enter image description here

enter image description here

回答

0

在下面的问题,ASM图表显示q_next的值 相比0进行到下一个状态,但之前q_next相比, 第q的值已经用q_next更新了,所以如果我们将q值的 与0进行比较,那么结果在时间和 其他参数方面是否相同?

No.当q_next具有0的值,q仍然包含的值为1,直到它的更新的下一个正时钟边沿。如果您检查q==0,您将在每个等待状态中花费额外的时钟周期。

也应该是什么类型的q_next和q?他们应该是reg还是 电线?

要么。 reg类型(如q_reg)表示它们在always块中分配值,而wire类型(如q_next)使用assign语句或作为子模块的输出进行分配。

我也不懂条件框的时间影响(在 一般情况下,我们不能把有条件盒的输出在不依赖于条件的输出单独 状态框)?, 就像在wait1状态时一样,我们检查sw的值,如果为真,我们 递减计数器,然后检查计数器是否已达到零 ,然后是asser db_tick。我想了解当我们从等待1和增量计数器移动 并断言db_tick时的时间流程。

下面是操作的单个时钟周期的流动,同时在wait1状态:

  • SW==1?如果没有,请不要做其他事情,然后转到状态zero。这些行动将在下一个周期完成。
  • 如果SW==1,计算q_next,并将该值分配给q为下一个周期。
  • q_next==0?如果不是,则保留在wait1下一个周期并重复。
  • 否则,在此时钟周期中断言db_tick=1,并转至状态one

如果将两个条件拆分为两个单独的状态,倒计时到0将需要两倍的时间。

这些阶段之间是否有任何时钟周期,即 从状态转移到条件框?

基于在图上,所有的操作给定的状态中(比较sw,从q减去,等) - 也就是说,的虚线框之一 - 在单个时钟周期中执行。

同样在verilog代码中,我们使用q_load和q_tick来控制 计数器。当我们可以简单地控制状态中的 计数器时,为什么使用这些信号?这样做是为了确保FSM(控制 路径)控制计数器(数据路径)?

你也可以这样做。请确保在default的情况下为q_next分配一个值以防止锁定。尽管如此,将数据路径和控制路径拆分为单独的always块/ assign语句会提高可读性。