fpga设计思想(二):有限状态机

来源:互联网 发布:数据库应用系统实例 编辑:程序博客网 时间:2024/09/21 08:42

今天聊一聊有限状态机的知识,也许你会觉得这个很枯燥,直接拿来用就好了,但是我要说的是:只有有了扎实的理论基础才会有fpga设计思想,想想自己能够编写一个大型的代码吗?如果不能,那就是我们还没有学会fpga真正的设计思想。fpga编程确实很难,只有扎实的基础,再加多的训练才会拥有fpga设计思想这个技能。好了,废话不多说了,现在开始:


1、有限状态机FSM:简单的说,就是通过不同的状态迁移来完成一些特定的顺序逻辑。硬件的并行性决定了用verilog描述的硬件实现都是并行执行的,那么如果希望分多个时间完成一个任务,因此就提出了有限状态机的思想。用于描述各种复杂的时序行为。

它的基础为有限自动机FA,有它延伸出来的理论模型有:序列机SM,线性序列机LSM,以及算法机ASM还有ASMD。实际工程中这几种或单独或组合应用,所以又是广义的将上述所有的状态统称为FSM。用于FSM的规划工具以状态转移图STG和算法流程图ASMc应用最多,在LSM情况下,也可以用SMF表规划。

2、摩尔机(Moor)、米利机(Mealy)

(1)当电路的输出仅仅与状态S有关时,所描述的模型R=F(s)成为摩尔型状态机


ST表示左侧状态转移组合逻辑的逻辑函数,REG则表示中间时钟沿采样的状态寄存器的逻辑函数,Moor表示右侧输出组合逻辑的逻辑函数。

Moor机状态的输出根据输入和当前状态决定,它的输出被存储在状态寄存器中,而其右侧的输出组合逻辑,仅根据当前的状态决定输出。

 

(2)当电路的输出不仅与时间有关,也与当前的输入信号有关时,成为米利型状态机


由上图知米利机(mealy)和摩尔(Moor)不同之处在与,Mealy不仅与当前状态有关,也取决于当前输入信号。许多具有复杂状态的状态机都是米利机。

有限状态机的三种编码方式:一段式(FSM-1s),两段式(FSM-2s),三段式(FSM-3s)。无论选哪一种都可以描述摩尔机也可以用以描述米利机。

3、闭节点(CN)、开节点(ON)

(1)下图最左侧的组合逻辑和中间的寄存器的结合,为一种典型的同步结构,成为时钟节点,如下图所示:


时钟节点的输出output是基于时钟clock翻转的,因此说output是时钟clock的同步信号。

(2)一个模型可能是由若干个具有相同时钟的节点组成(单时钟域),或是由多个不同的时钟域组成。单独的行为代码通常描述的是一个单独的节点。这种节点描述代码,可以是一个完整的时钟节点,即包括组合逻辑和寄存器,也可以是一个不完整的时钟节点,即前级节点描述仅包含组合逻辑而寄存器部分放在后级的单节点描述中。为了加以区分,我们将前者称为闭节点(CN)描述,后者称为开节点(ON)描述。

模块1和模块2均为闭节点,即其单节点描述代码中,已包含组合逻辑和寄存器,而这些寄存器使用同一个时钟。


由上图结构可知,模块1是组合逻辑输出,由后级的模块2提供寄存器,以形成完整的时钟节点,因此模块A为开节点,模块B不仅描述了本级完整的一个时钟节点,同时提供了对前级信号的同步捕获。

(3)在verilog中若信号敏感表中有时钟沿,则为CN描述,综合后的电路必有寄存器参与输出,反之则为ON描述,综合后结果为组合逻辑。

(4)FSM三段式描述中就分别使用了开节点描述和闭节点描述。

4、FSM三段式:

(1)一段式中包含了状态转移逻辑,状态寄存器逻辑和输出逻辑,由于是闭节点CN描述,所以增加了输出端寄存器。

(2)两段式描述将理论模型中的状态寄存器用一个单独的行为与描述,而将转移组合逻辑和输出组合逻辑写入另一个行为语句,输出组合逻辑直接将output输出。因而在两段式描述中,第一段为状态寄存器的捕获,为一个闭节点CN描述,而第二段为开节点ON描述,当在高速或同步系统中使用两段式输出信号时,需要在下游插入寄存器,以构成同步。

(3)三段式中第一段仍然为闭节点CN输出,第二段为开节点ON,第三段输出为闭节点CN输出。这样输出秦昊outputs就成为了一个同步信号。

(4)从同步系统的角度来看,一段式和三段式都为闭节点输出,两段式为开节点输出。三种描述(S1,S2,S3)都有存在的必要,在小规模低速的FSM设计中,可以考虑使用一段式,在大规模低速系统中,建议使用三段式,在大规模高速系统中,最好使用两段式。






















0 0