APP下载

基于VerilogHDL语言的有限状态机设计

2014-04-29王塞博毛先柏

中国电子商情 2014年5期
关键词:状态机触发器时序

王塞博 毛先柏

引言:有限状态机及其设计技术是实用数字系统设计中的重要组成部分,也是实现高效率、高可靠和高速控制逻辑系统的重要途径。VerilogHDL 是一种硬件描述语言,可以在门级和寄存器传输级描述硬件,在算法级对硬件加以描述。状态机是数字系统的控制单元, 包括时序逻辑和组合逻辑, 语言描述较为抽象, 如果句柄编写不规范, 综合工具就很难把抽象思维变为门级电路。本文介绍了VerilogHDL语言的综合实质, 研究了编写可综合的状态机的方法、步骤以及综合原则, 具有一定的参考价值。

引言

有限状态机FSM是一种基本的、简单的、重要的形式化技术,在软件设计中常常采用。FSM就是描述一个由有限个独立状态组成的过程,这些状态可以互相迁移,直到最终离开这个过程。采用有限状态机可以使设计过程直观简单易于理解,大大加快设计流程。随着硬件设计软件化趋势的加剧,在运用VerilogHDL硬件描述语言设计数字系统时,利用有限状态机成为了可靠方便的途径,有许多电路功能可以利用有限状态机的设计方案来描述和实现。控制器作为电子系统设计的核心部分,在EDA软件平台上,借助有限状态机表示方法符合人的思维逻辑的特性,将控制功能用有限状态机来建模实现,有许多优越之处,已使FSM成为大型控制电路设计的有力工具。

一、状态机的设计

所谓状态机,就是用来控制数字系统,根据它的输出逐步地进行相应操作和运算的机器(这里应理解为电路)。有限状态机设计的关键是:如何把一个实际的时序逻辑关系抽象成一个时序逻辑函数,传统的电路图输入法通过直接设计寄存器组来实现各个状态之间的转换,而用硬件描述语言来描述有限状态机,往往是通过充分发挥硬件描述语言的抽象建模能力,通过系统级或寄存器传输级进行描述来建立有限状态机。

一个完备的状态机应该具有初始状态和默认状态。当芯片加电或者复位后,状态机能够自动将所有的判断条件复位, 并进入初始状态;当转移条件不满足, 或者状态发生突变时,状态机进入一个默认(default)状态,能保证逻辑不会陷入“死循环”,这是对状态机健壮性的一个重要要求,即自动恢复功能。Verilog中,使用“case”语句的时候要用“def ault”建立默认状态。使用完备的“ifelse”的好处是:可以避免生成非目的性的“锁存器”。一般采用case,casex或casez语句来建立状态机的模型,可方便地从当前状态分支转向下一个状态,并设置输出。case语句的最后一个分支default等于告诉综合器:case语句已经指定了所有的状态。这样综合器就可以删掉不需要的译码电路,使生成的电路简洁,并与设计要求一致。

二、一般有限状态机的结构

最一般和最常用的状态机结构中通常都包含了说明部分,主控时序过程,主控组合过程,辅助过程等几个部分。

将以下面例子,对一个简单的状态机(moore型)进行分析,说明一般有限状态机的结构。

该状态机状态转换图如下:

Reset

Module moore(clk,din,op);//定义输入、输出以及中间变量

Input clk,din;

Output op;

Reg op;

(1)说明部分

说明部分包含状态转换变量的定义和所有可能状态的说明,必要时还要确定每一状态的编码形式。

reg[1:0]current_state,next_state;

Parameter S0=2'b00,S1=2'b01,S2=2'b10,S3=2'b11;

(2)主控时序过程

所谓主控时序过程是指负责状态机运行和在时钟驱动下负责状态转换的过程。状态机是随外部时钟信号,以同步时序工作方式工作的,因此必须有一个时钟信号进行驱动。

always@(posedge clk)

begin

current_state<=next_state;

end

(3)主控组合过程

如果将状态机比喻成一台机床,那么主控时序过程即为此机床的驱动电机,而主控组合过程则为机床的机械加工部分,它来表明此机床的具体作用。因此,主控组合过程也可称为状态译码过程,其任务是根据外部输入的控制信号(包括来自状态机外部的信号和来自状态机内部其他非主控的组合或时序过程的信号)以及当前状态机的状态值确定下一状态的取向,以及确定对外输出或对内部其他组合或时序过程输出控制信号的内容。

always@(current_state or din)begin

case(current_state)

S0:begin

op=0;

if(din==0)

next_state=S0;

else

next_state=S1;

end

S1:begin

op=0;

if(din==0)

next_state=S0;

else

next_state=S2;

end

S2:begin

op=0;

if(din==0)

next_state=S0;

else

next_state=S3;

end

S3:begin

op=1;

if(din==0)

next_state=S0;

else

next_state=S3;

end

default:begin op=0;

next_state=S0;

end

endcase

end

endmodule

(4)else辅助过程

主要是用于配合状态机工作的组合过程或时序过程,如根据状态机的输出继续完成某个计算算法,或为了稳定输出的数据锁存等。

辅助过程可以不作为状态机的组成部分,而作为单独的电路存在。

状态机的一般结构示意图

cs

clk

resetns output

input

三、状态机设计的一般步骤

(1)逻辑抽象得出状态转移图。即把给出的一个实际逻辑关系表示为时序逻辑关系,进而表示为时序逻辑函数。可以用状态转换表来描述, 也可以用状态转移图来描述。

1.分析给定的逻辑问题, 确定输入变量、输出变量以及电路的状态数。通常取原因(或条件)为输入变量,取结果为输出变量。

2.定义输入、输出逻辑状态关系的含义,并将电路状态顺序编号。按要求列出电路的状态转移表或画出状态转移图。

(2)状态简化。如果在状态转移图中出现这样两个状态:他们在相同的输入下转换到同一个状态去,并得到相同的输出,则称他们为等价态。等价态是重复的,可以合并为一个状态,电路的状态数越少,存储电路就越简单。

(3)状态分配,也称状态编码。编码的方案选择得当,设计的电路就可以简单,反之就复杂。在实际设计中主要考虑电路的复杂度和电路的性能这两个因素。在触发器资源丰富的FPGA或ASIC设计中,采用独热编码(one hotcoding)即可以保障电路性能,又可以充分发挥触发器数量多的优点,提高状态机的运行速度。

(4)选定触发器的类型并求出状态方程,驱动方程和输出方程。

(5)按照方框图得出逻辑图。

四、状态机综合的一般原则

(1)综合之前一定要进行仿真,因为仿真会暴露逻辑错误,如果不做仿真,没有发现的逻辑错误会进入综合器,使综合的结果产生同样的逻辑错误。

(2)每一次布线之后都要进行仿真,在器件编程或流片之前一定要进行仿真。

(3)用VerilogHDL语言描述的异步状态机是不能综合的,因此应该避免用综合器来设计,如果一定要设计异步状态机,则可以用电路图输入的方法来设计。

(4)如果要为电平敏感的锁存器建模,使用连续赋值语句是最简单的方法。目前大多数综合器往往不支持在一个always块中有多个事件触发的状态机(隐含状态机)。如果设计要求必须有不同时钟触发器的状态机,可以采用以下方法:编写另一个模块,在那个模块中使用另外一个时钟;然后使用实例引用的方法在另一个模块中把他们连接起来。为了使设计简单,容易调试,尽量使这两个状态机的时钟有一定的关系。例如甲模块的时钟是乙模块时钟同步计数器的输出。目前大多数的综合器不能综合采用VerilogHDL描述的异步状态机。异步状态机是没有确定时钟的状态机,他的状态转移不是由惟一的时钟跳变沿所触发。之所以不能用异步状态机来综合的原因是:异步状态机不容易规范触发器的瞬间, 不容易判别是正常的触发脉冲还是冒险竞争的毛刺。

同步状态机的时钟是由同一个时钟产生的,通过特殊设计的全局的时钟网络连接到每一个触发器的时钟端, 这样时钟沿到达每一个触发器的时钟端的时刻几乎完全相同。

小结

VerilogHDL语言不是为了综合而专门设计的语言,设计出的模型与综合出的网表可能会出现功能上的不一致,那就要进行功能验证。一般有2种方法:

(1)将在设计模型的仿真过程中使用的那组激励拿来对网表进行仿真, 将仿真结果保存在结果文件中,然后比较两者的仿真结果是否相同。

(2)编写测试平台。用VerilogHDL编写的模型, 并施加各种激励、比较输出响应、报告任何功能不一致处。在利用VerilogHDL语言进行电路设计时,必须考虑到其可综合性。目前,VerilogHDL语言可综合性没有统一的标准,不同厂家提供的综合工具将电路的RT L级语言描述转换成门级网表的能力也不相同,所以必须掌握其技巧才能写出可综合风格的VerilogHDL 的RT L级语言描述程序。

参考文献

[1]T homas, Mo or by.硬件描述语言Verilo g[M].第4版.刘明业,蒋敬旗译.北京:清华大学出版社,2002.

[2]潘松、黄继业、陈龙 eda技术与verilog hdl北京:清华大学出版社2010.

[3]方洪浩、雷蕾 基于Verilog HDL的有限状态机设计科学技术与工程2007.

[4]李玲、王祖强 Verilog HDL代码描述对状态机综合的研究信息技术与信息化2009.

猜你喜欢

状态机触发器时序
基于时序Sentinel-2数据的马铃薯遥感识别研究
基于Sentinel-2时序NDVI的麦冬识别研究
基于有限状态机的交会对接飞行任务规划方法
主从JK触发器逻辑功能分析
使用触发器,强化安全性
一种毫米波放大器时序直流电源的设计
DPBUS时序及其设定方法
对触发器逻辑功能转换的分析
触发器逻辑功能转换的两种方法
FPGA设计中状态机安全性研究