基于Verilog的顺序状态逻辑FSM设计与仿真
时间:12-06
来源:互联网
点击:
硬件描述语言Verilog为数字系统设计人员提供了一种在广泛抽象层次上描述数字系统的方式,同时,为计算机辅助设计工具在工程设计中的应用提供了方法。该语言支持早期的行为结构设计的概念,以及其后层次化结构设计的实现。这在设计过程中,进行逻辑结构部分设计时可以将行为结构和层次化结构混合起来;为确认正确性还可以将描述进行模拟,并提供一些用于自动设计的综合工具。因而Verilog语言为设计者进行大型复杂数字系统的设计提供了途径。超大规模集成电路设计的典型流程如图1所示。
本文将以顺序状态逻辑有限状态机的设计为例介绍用Verilog语言设计数字电路的一般过程。
1 设计规范与设计构思
电子设计工程师在设计过程中不可避免地会遇到设计可执行特殊操作序列电路的工作,如用来控制其他电路进行操作的控制器,而有限状态机(Finite Status Machine,FSM)是设计这种能执行特殊操作序列电路的一种非常有效的模型。FSM的结构通常由当前状态寄存器、下一状态逻辑和输出逻辑三部分构成。FSM也有很多种模型,本文仅以顺序状态逻辑FSM的设计为例来说明用Verilog进行集成电路设计的一般设计过程。为简单起见,本设计只设计了包含有8个状态的顺序状态逻辑FSM。8个状态分别为One、Two、ThreeA、ThreeB、ThTeeC、Dummy、Four、Five。开始状态为One,各状态之间的转换关系如图2所示。
该顺序状态逻辑FSM的功能及要求如下。
(1)同步复位信号Reset至少要维持4个时钟周期的高电平信号,以保证状态机进入状态One。
(2)当状态机在5个状态中循环时,A、B、C 3个输入按优先级使状态机从状态Two进入相应的状态ThreeA、ThreeB、ThreeC、Dummy。
(3)复位后,如果A持续为高电平,则输出信号Y1的周期为时钟周期的5倍,且高电平维持的时间为1个时钟周期。
(4)如果A、B维持为低电平,而C维持为高电平,则输出信号Y3的周期为时钟周期的5倍,且高电平维持的时间为1个时钟周期。
(5)如果A维持低电子,而B维持高电平,则输出信号Y2与Y1和Y3不同,只维持1个时钟周期的高电平。因为当状态机进入状态ThreeB时,信号BeenInState3B被设置为1,而该信号就会禁止状态机再次进入状态ThreeB,直到另一个复位信号出现为止。
以上是一个时序电路的设计,如何保证正确的时序是设计的关键。根据设计要求,该状态机至少应该有8个端口:5个输入端口(A、B、C、Reset、Clock),3个输出端口(Y1、Y2、Y3)。其中输入端A、B、C和Reset信号均由时钟边缘进行触发,Reset具有最高的优先权,而输入信号A、B、C的优先权则依次递减。
该顺序状态逻辑有限状态机的端口示意图和设计构思图分别如图3和图4所示。
通常EDA(Electronic Design Automation)工具都为设计人员提供了测试平台,以验证数字电子系统设计在功能和时序二方面的正确性。不同的EDA工具提供的平台会有差别,但是它们都可以实现对被测试对象加载测试信号,并且能够通过波形输出或文件记录输出等方式来方便地进行观察及比较仿真结果。而测试用的激励代码通常是由设计人员自己编写。为了便于清楚地观察、比较仿真结果,本设计对一个340ns时间段进行了模拟,且测试代码考虑了各种可能出现的激励情况,具体的测试代码如下:
4 逻辑综合
逻辑综合的目标是将寄存器时间逻辑(RTL)的HDL(HardwareDescriptionLanguage)代码映射到具体的工艺上加以实现,因而从这一步开始,设计过程与实现工艺相关联。实现自动综合的前提是要有逻辑综合库的支持。综合库内部包含了相应的工艺参数,最典型的有:门级延时、单元面积、扇入扇出系数等。设计一个电子系统,总有相应的设计目标,如时钟频率、芯片面积、端口驱动能力等。自动综合工具将这些设计指标作为综合过程的约束条件,在给定的包含工艺参数的综合库中选取最佳单元,实现综合过程。 与模拟工具一样,目前有许多优秀的综合工具借助现有的综合库能将Verilog语言源代码进行综合,转化成门级电路图,并且可以根据设计者施加的约束条件对电路进行优化,生成相应的门级网表。Synopsys公司的DC(DesignCompiler)就是一个比较好的逻辑综合工具。DC逻辑综合与优化后得到的电路图如图6所示。
5 门级仿真
综合之后所得到的电路是否仍能满足设计要求,同样需要通过仿真来确定,逻辑综合之后的仿真称为门级仿真。门级网表是使用门电路以及电路之间的连接来描述电路的方式。门级仿真与RTL仿真不同的是,门级仿真包含了门单元的延时信息,因而门级仿真需要相应工艺的仿真库支持。把综合后得到的网表中门级延时参数提取出来后,对被测试对象进行反标,然后再进行仿真,得到的结果如图7所示。
从门级仿真所得到的波形图输出结果来看,本设计在功能与时序上是符合设计要求的。
本文将以顺序状态逻辑有限状态机的设计为例介绍用Verilog语言设计数字电路的一般过程。
1 设计规范与设计构思
电子设计工程师在设计过程中不可避免地会遇到设计可执行特殊操作序列电路的工作,如用来控制其他电路进行操作的控制器,而有限状态机(Finite Status Machine,FSM)是设计这种能执行特殊操作序列电路的一种非常有效的模型。FSM的结构通常由当前状态寄存器、下一状态逻辑和输出逻辑三部分构成。FSM也有很多种模型,本文仅以顺序状态逻辑FSM的设计为例来说明用Verilog进行集成电路设计的一般设计过程。为简单起见,本设计只设计了包含有8个状态的顺序状态逻辑FSM。8个状态分别为One、Two、ThreeA、ThreeB、ThTeeC、Dummy、Four、Five。开始状态为One,各状态之间的转换关系如图2所示。
该顺序状态逻辑FSM的功能及要求如下。
(1)同步复位信号Reset至少要维持4个时钟周期的高电平信号,以保证状态机进入状态One。
(2)当状态机在5个状态中循环时,A、B、C 3个输入按优先级使状态机从状态Two进入相应的状态ThreeA、ThreeB、ThreeC、Dummy。
(3)复位后,如果A持续为高电平,则输出信号Y1的周期为时钟周期的5倍,且高电平维持的时间为1个时钟周期。
(4)如果A、B维持为低电平,而C维持为高电平,则输出信号Y3的周期为时钟周期的5倍,且高电平维持的时间为1个时钟周期。
(5)如果A维持低电子,而B维持高电平,则输出信号Y2与Y1和Y3不同,只维持1个时钟周期的高电平。因为当状态机进入状态ThreeB时,信号BeenInState3B被设置为1,而该信号就会禁止状态机再次进入状态ThreeB,直到另一个复位信号出现为止。
以上是一个时序电路的设计,如何保证正确的时序是设计的关键。根据设计要求,该状态机至少应该有8个端口:5个输入端口(A、B、C、Reset、Clock),3个输出端口(Y1、Y2、Y3)。其中输入端A、B、C和Reset信号均由时钟边缘进行触发,Reset具有最高的优先权,而输入信号A、B、C的优先权则依次递减。
该顺序状态逻辑有限状态机的端口示意图和设计构思图分别如图3和图4所示。
通常EDA(Electronic Design Automation)工具都为设计人员提供了测试平台,以验证数字电子系统设计在功能和时序二方面的正确性。不同的EDA工具提供的平台会有差别,但是它们都可以实现对被测试对象加载测试信号,并且能够通过波形输出或文件记录输出等方式来方便地进行观察及比较仿真结果。而测试用的激励代码通常是由设计人员自己编写。为了便于清楚地观察、比较仿真结果,本设计对一个340ns时间段进行了模拟,且测试代码考虑了各种可能出现的激励情况,具体的测试代码如下:
4 逻辑综合
逻辑综合的目标是将寄存器时间逻辑(RTL)的HDL(HardwareDescriptionLanguage)代码映射到具体的工艺上加以实现,因而从这一步开始,设计过程与实现工艺相关联。实现自动综合的前提是要有逻辑综合库的支持。综合库内部包含了相应的工艺参数,最典型的有:门级延时、单元面积、扇入扇出系数等。设计一个电子系统,总有相应的设计目标,如时钟频率、芯片面积、端口驱动能力等。自动综合工具将这些设计指标作为综合过程的约束条件,在给定的包含工艺参数的综合库中选取最佳单元,实现综合过程。 与模拟工具一样,目前有许多优秀的综合工具借助现有的综合库能将Verilog语言源代码进行综合,转化成门级电路图,并且可以根据设计者施加的约束条件对电路进行优化,生成相应的门级网表。Synopsys公司的DC(DesignCompiler)就是一个比较好的逻辑综合工具。DC逻辑综合与优化后得到的电路图如图6所示。
5 门级仿真
综合之后所得到的电路是否仍能满足设计要求,同样需要通过仿真来确定,逻辑综合之后的仿真称为门级仿真。门级网表是使用门电路以及电路之间的连接来描述电路的方式。门级仿真与RTL仿真不同的是,门级仿真包含了门单元的延时信息,因而门级仿真需要相应工艺的仿真库支持。把综合后得到的网表中门级延时参数提取出来后,对被测试对象进行反标,然后再进行仿真,得到的结果如图7所示。
从门级仿真所得到的波形图输出结果来看,本设计在功能与时序上是符合设计要求的。
Verilog 集成电路 电路 电子 EDA 仿真 电路图 电阻 电容 C语言 SoC 相关文章:
- 基于ARM的嵌入式系统中从串配置FPGA的实现(06-09)
- FPGA按键模式的研究与设计(03-24)
- 周立功:如何兼顾学习ARM与FPGA(05-23)
- 验证FPGA设计:模拟,仿真,还是碰运气?(08-04)
- 初学者如何学习FPGA(08-06)
- 为何、如何学习FPGA(05-23)