verilog 三段式状态机 求助

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了verilog 三段式状态机 求助相关的知识,希望对你有一定的参考价值。

在用verilog写三段式代码时,其中一个组合逻辑短路用来控制状态机的输出。每个状态都要对输出信号赋值,是为了防止生成锁存器。如果我已经在每个状态中,都把输出信号赋值了,那这些信号是不是对应的生成寄存器了?还是什么?在always块内赋值的变量是reg型的,不一定都是寄存器吗?
always @(*)
begin
。。。
end

你要知道,寄存器是时序逻辑,需要时钟控制的,锁存器是组合逻辑。状态机属于时序逻辑,你只是把它分开了,也就是说有限状态机又可以认为是组合逻辑和寄存器逻辑的一种组合。所以分开的那个还是有时钟去控制为寄存器。 而单独always @ (*) 的话,就只能是组合逻辑对应锁存器了。
所以呢!区分是要看是否收到时钟控制。 当然时序逻辑中 if……else ,case 不完整时会产生锁存器。总之组合逻辑不会产生寄存器, 时序逻辑中可以包含组合逻辑和寄存器(即可包含锁存器和寄存器) 说的还不是很具体,但基本应该能了解一些,希望对LZ有所帮助!!追问

锁存器是组合逻辑?

追答

不好意思,是我理解有误,锁存器为电平控制,组合逻辑由于输入即反应到输出,故应避免锁存器,寄存器由锁存器或触发器构成!

参考技术A Verilog三段式状态机中,只有时序逻辑部分的信号会生成寄存器。

“在always块内赋值的变量是reg型的,不一定都是寄存器吗?”
是的,有的会被综合器综合掉,有的会被综合成所存器,具体情况具体分析。
楼主可以通过RTL Viewer工具(ISE)查看状态机被综合后的逻辑框图。
参考技术B 这个语句里面赋值应该是提示你产生锁存器的。因为这个是组合逻辑了,容易产生锁存器。你的alwasy块描述的是时序的话,会产生寄存器,描述的是组合逻辑的话就很容易产生所存了,都是存贮单元。

以上是关于verilog 三段式状态机 求助的主要内容,如果未能解决你的问题,请参考以下文章

Verilog 三段式状态机中第三个always块的问题

如何用verilog设计有限状态机

在用verilog编写三段式状态机的时候,我看网上很多地方都是提到格式如下:always @ (posedge clk or negedg

三段式有限状态机Verilog代码

verilog状态机中的一个状态执行时间问题

Verilog三段式状态机描述