您的位置 首页 国产IC

FPGA/CPLD状态机稳定性研讨

在FPGA/CPLD设计中,状态机是最典型、应用最广泛的时序电路模块,如何设计一个稳定可靠的状态机是我们必须面对的问题.

FPGA/CPLD规划中频频运用的状况机,常呈现一些安稳性问题,本文提出了一些解决办法,试验标明该办法有用地进步了归纳功率.

跟着大规模和超大规模FPGA/CPLD器材的诞生和开展,以HDL(硬件描绘言语)为东西、FPGA/CPLD器材为载体的EDA技能的运用越来越广泛.从小型电子体系到大规模SOC(Systemonachip)规划,现已无处不在.在FPGA/CPLD规划中,状况机是最典型、运用最广泛的时序电路模块,怎么规划一个安稳牢靠的状况机是咱们有必要面临的问题.

1、状况机的特色和常见问题

规范状况机分为摩尔(Moore)状况机和米立(Mealy)状况机两类.Moore状况机的输出仅与当时状况值有关,且只在时钟边缘到来时才会有状况改动.Mealy状况机的输出不只与当时状况值有关,并且与当时输入值有关,这一特色使其操控和输出愈加灵敏,但一起也添加了规划杂乱程度.其原理如图1所示.


依据图1所示,很简略了解状况机的结构.可是为什么要运用状况机而不运用一般时序电路呢?这是由于它具有一些一般时序电路无法比拟的长处.

用VHDL描绘的状况机结构清楚,易读,易懂,易排错;

相对其它时序电路而言,状况机愈加安稳,运转形式类似于CPU,易于完成次第操控等.
用VHDL言语描绘状况机归于一种高层次建模,成果经常呈现一些出乎规划者意外的状况:

1.在两个状况转化时,呈现过渡状况.
2.在运转进程中,进入不合法状况.
3.在一种器材上归纳出抱负成果,移植到另一器材上时,不能得到与之相符的成果.
4.状况机能够安稳作业,但占用逻辑资源过多.

在针对FPGA器材归纳时,这种状况呈现的或许性更大.咱们有必要稳重规划状况机,剖析状况机内涵结构,在Moore状况机中输出信号是当时状况值的译码,当状况存放器的状况值安稳时,输出也随之安稳了.经归纳器归纳后一般生成以触发器为中心的状况存放电路,其安稳性由此决议.假如CLOCK信号的上升沿抵达各触发器的时刻严厉共同的话,状况值也会严厉依照规划要求在规则的状况值之间转化.可是这仅仅一种抱负状况,实践CPLD/FPGA器材一般无法满意这种严苛的时序要求,特别是在布线后这些触发器相距较远时,CLOCK抵达各触发器的延时往往有一些差异.这种差异将直接导致状况机在状况转化时发生过渡状况,当这种延时进一步加大时,将有或许导致状况机进入不合法状况.这便是Moore状况机的失效机理.关于Mealy状况机而言,由于其任何时刻的输出与输入有关,这种状况就更常见了.

2 状况机规划方案比较

2.1 选用枚举数据类型界说状况值

在规划中界说状况机的状况值为枚举数据类型,归纳器一般把它表明为二进制数的序列,归纳后生成以触发器为中心的状况存放电路,存放器用量会削减,其归纳功率和电路速度将会在必定程度上得到进步.

例1 界说状况值为枚举类型的状况机VHDL程序.

library ieee;
use ieee.std_logic_1164 all;
entity example is
port(clk:in std_logic;
mach_input:in std_logic;
mach_outputs:out std_logic_vector(0 to 1));
end example;
architecture behave of example is
type states is(st0,st1,st2,st3); –界说states为枚举类型
signal current_state,next_state:states;
begin

state_change:process(clk) –状况改动进程
begin
wait until clk’event and clk=’1′;
current_state=next_state;
end process state_change;
combination:process(current_state,mach_input)
…… –输出状况值译码,给next_state赋新值.省掉
end behave;


图2 枚举类型的状况机归纳后的波形

例1是一个四状况全编码状况机,归纳后的仿真波形如图2所示.从扩大后的部分能够看出输出状况值从“01”到“10”转化进程中呈现了过渡状况“11”.从微观上剖析中心信号“Current_state”状况转化进程,状况存放器的高位翻转和低位翻转时刻是不共同的,当高位翻转速度快时,会发生过渡状况“11”,当低位翻转速度快时会发生过渡状况“00”.若状况机的状况值更多的话,则发生过渡状况的概率更大.假如在非全编码状况机中,由于这种过渡状况的反馈效果,将直接导致电路进入不合法状况,若此刻电路不具备自启动功用,那么电路将无法回来正常作业状况.

由于状况机的输出信号常用作重要的操控,如:三态使能,存放器清零等.所以这种成果是不答应的,怎么消除此类过渡状况呢?办法之一是选用格雷码表明状况值.

2.2 用格雷码表明状况值

格雷码的特色是恣意相邻两个数据之间只要一位不同,这一特色使得选用格雷码表明状况值的状况机,能够在很大程度上消除由延时引起的过渡状况.将例1改善之后的程序如例2.

例2 选用格雷码表明状况值的状况机.

library ieee;
use ieee.std_logic_1164 all;

entity example is
port(clk:in std_logic;
mach_input:in std_logic;
mach_outputs:out std_logic_vector(0 to 1));
end example;
architecture behave of example is
constant st0:std_logic_vector(0 to 1):=00;
constant st1 :std_logic_vector(0 to 1):=01;
constant st2:std_logic_vector(0 to 1):=11;
constant st3:std_logic_vector(0 to 1):=10;
signal current_state,next_state:std_logic
vector(0to1);
begin

……
endbebave;

选用该办法,存放器的状况在相邻状况之间跳转时,只要一位改动,发生过渡状况的概率大大下降.可是当一个状况到下一个状况有多种转化途径时,就不能保证状况跳转时只要一位改动,这样将无法发挥格雷码的特色.

2.3 界说“ONEHOT”风格的状况值编码

尽管VHDL言语的方针之一是远离硬件,可是到目前为止并没有彻底完成,所以VHDL程序在针对不同的器材归纳时,依然会有很大差异.特别是FPGA器材,当咱们选用格雷表明状况值,描绘一个简略的状况机时,就或许呈现不安稳成果.在针对FPGA器材写程序时,咱们能够将状况值界说为“ONEHOT”风格的状况码,将上例稍作修正,见例3.

例3 选用“ONEHOT”编码的状况机

library ieee;
use ieee std_logic_1164.all;
entity example is
port(clk:in std_logic;
mach_input:in std_logic;
mach_outputs:out std_logic_vector(0 to 1));
endexample;
architecture behave of example is

constant st0:std_logic_vector(0 to 3):=0001;
constant st1:std_logic_vector(0 to 3):=0010;
constant st2:std_logic_vector(0 to 3):=0100;
constant st3:std_logic_vector(0 to 3):=1000;
signal current_state,next_state:std_logic vector(0 to 3);
begin
……
对FLEX10K系列器材归纳后的仿真成果如图3所示.


图3 选用“ONEHOT”编码的状况机归纳后的波形

如图3所示,在输入信号安稳今后,状况机的输出信号也安稳下来,界说这种风格的状况码来规划依据FPGA的状况机是一种不错的挑选.

可是在输入信号跳变时,电路仍是会呈现不安稳现象.此刻咱们已不能只从状况值编码办法寻觅解决办法.回头看看状况机的原理框图不难发现:状况存放器的输出值是有必要契合树立坚持时刻束缚联系的.在上述状况机中尽管选用了各种不同的编码办法但都不能彻底消除这种过渡状况,咱们将电路结构稍作改善,一种更好的结构如图4所示.这种结构的状况机可有用按捺过渡状况的呈现.这是由于输出存放器只要求状况值在时钟的边缘安稳.将上述程序改善之后的程序如图4.
……
architecture behave of example1is
type states is(st0,st1,st2,st3); 界说states为枚举类型
signal current_state,next_state:states;
signal temp:std_logic_vector(0 to 1); 界说一个信号用于引进输出存放器
begin
state_change:process(clk) –状况改动进程
begin
wait until clk’eventandclk=’1′;
current_state=next_state;
mach_outputs=temp;
end process state_change;
……


图5 改善后的状况机归纳后的波形

明显这种结构的状况机安稳性优于一般结构的状况机,可是它占用的逻辑资源更多,电路的速度或许下降,在规划时应归纳考虑.

别的,为避免电路进入不合法状况,能够规划成自启动结构,在VHDL描绘的状况机中添加一个“when others”句子是行之有用的.

3 挑选不同编码办法、不同结构的状况机的技巧

3.1 针对不同结构器材挑选不同编码风格

依据乘积项结构的CPLD器材适合于规划全编码状况机,在全编码状况机中选用格雷码表明状况值.这关于逻辑资源较少的器材是一种不错的优化办法.

依据查找表结构的FPGA器材适合于规划成“ONEHOT”办法编码的状况机,这种结构状况机只用一位二进制数表明一个状况,可进步安稳性,但要占用更多的逻辑资源.

3.2 依据逻辑资源巨细挑选状况机结构

当规划的状况机状况转化次第呈现多途径时,选用格雷码表明状况值不会有任何效果,由于此刻有些相邻状况不仅仅一位不同.在逻辑资源答应的状况下,能够考虑在状况机后级添加一级输出存放器,可保证输出不发生毛刺,使状况机输出安稳牢靠的信号.

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/bandaoti/ic/196872.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部