所有关于电路
技术文章

在Verilog中创建有限状态机

2011年1月1日,2021年经过Eduardocorpeño.

本文描述了有限状态机的基础知识,并展示了在Verilog硬件描述语言中实现它们的实用方法。

有限的状态机或FSMS for Short,是硬件和软件系统中最无处不在的操作模型之一。实际上,每个有用的数字系统都可以定义为有限状态机,因此这是一个很好的想法,可以尽可能多地学习这种有用的系统模式。

数字电路中的有限状态机

有限状态机以多种方式描述,但最受欢迎的两个是状态图和状态表。两个表示的示例如图1所示。

图1。FSM显示为状态图,作为状态表。左上角的图例显示了状态变量A和B,以及输入x并输出y。

请注意,此FSM具有输入信号X和输出信号Y,其使其成为一个粉状的状态机。该FSM可以通过数字设计课程中教授的传统方法来实现,这些方法在产生实现状态变量的触发器的刺激逻辑周围。这个逻辑设计为所选类型触发器的励磁表,即SR,D,JK或T.

当我们将此技术应用于图1中的FSM时,我们会得到以下一个版本的以下实现。

图2。使用JK触发器的示例FSM的实现。

有关州机的更多信息,您可能想要阅读文章在VHDL中实现有限状态机由大卫·威廉姆斯。

Verilog如何提供帮助

那么,如果你想在Verilog中那样实现像图1中的一个州机的国家机器,就是这样的方式?在设计过程中的哪一点应该接管?

虽然它可以手工设计整个系统,直至图2中的原理图,然后在Verilog中编写代码,这不是解决问题的最常用方法。更糟糕的方法是描述示意图中的每个门,包括组成人字拖的门!如果你在门级描述一切,你的系统可能某种程度上可以工作,但是编译器没有空间来优化您的设计以符合您的真正的这可能更关注时机和功率,而不是正确性。

请记住:使用硬件描述语言的原因是利用您使用的综合编译器,就像任何编译器一样,您提供的自由越多,您就可以获得最佳实现的越大。

所以聪明的起点是状态表。您只需指示Verilog在每个状态下都应该在每个状态下执行机器,而不是用于使用的闸门或触发器。

在Verilog中为状态机的一个优秀的构造是案子声明。每个case的主体应该检查状态变量及其期望的行为。下面的代码段显示了这种结构。

例(状态)

状态_0://状态0的代码

State_1://状态1的代码

// ......

State_n://状态n的代码

终结

因此,通过我们的示例,这是图1所示的状态机的实现。注意,输出y是组合函数。

模块myfsm(

输入CLK,

输入x,

产出y);

reg [1:0]状态;

分配y = state [1]和状态[0]&x;

总是@ (negedge clk)

例(状态)

2'b00:状态<= x?

2'b01:状态<= x?2'b10:2'b00;

2'b10:state <= x?2'b11:2'b00;

2'b11:州<= 2'b00;

终结

终点

下一篇:软处理器中的FSMS

在下一篇文章中,我们将讨论如何在设计(如软处理器)中实现FSMs,以及初始状态(这可能比较棘手)。