集成电路技术分享

 找回密码
 我要注册

QQ登录

只需一步,快速开始

搜索
查看: 2934|回复: 4

基于CPLD的一种容错状态机的设计

[复制链接]
weibode01 发表于 2010-11-18 15:18:13 | 显示全部楼层 |阅读模式
本帖最后由 fpgaw 于 2010-11-18 15:58 编辑

基于CPLD的一种容错状态机的设计


状态机是一种十分重要的时序电路,常用于描述数字系统的控制单元,在数字系统有着广泛的应用,如步进电机、数据存储器的读写、总线控制器等。本文结合具体课题;采用ALTERA的CPLD器件EPM7032实现了一种容错的状态机;采用VHDL语言编程,实际使用效果良好,不仅调试方便,而且增加了系统配置的灵活性,大大缩短了系统开发周期。
1 状态机的真值表及状态转移
    该状态机是一种Moore型的,其真值表如表1。

    该状态机编码方式采用顺序方式,共采用4位编码。这样就存在两个非法的状态(即在状态机中,未定义的状态);采用该编码方式与一位有效编码方式相比,大大减少了非法状态的存在。
    状态转移图如图1所示。


2 VHDL的描述
    采用VHDL语言描述时、主要应包括:状态变量、时钟、状态转移指定、输出指定、复位信号等几个方面。
(1)状态机的状态变量定义如下:
TYPE StateTYPE is (idle, deci, reci1, reci2, reci3,reci4 ,out1,out2,out3,out4,out5,out6,out7,out8);
signal present_state,next_state:statetype;
signal codin:std_logic_vector(3 downto 0);
(2)状态机的部分状态转移指定:
statedesc: process (reset, data, present_state, burst,ou_rec,ready)
begin
.........................
  Case  present_state is
When idle=>codin<="0000";
If(data="11111111")then next_state<=deci;
Else
Next_state<=idle;
end if;
..............
When out1=>codin<="0110";
    If(ready=' 0' )then
Next_state<=out1;
Elsif (burst=' 0' )then  next_state<=idle;
Else next_state<=out2;        
end if;
...............
(3)状态机的输出指定
    状态机的输出需要对codin进行译码才能输出,输出指定放在另一个进程(在该进程中同时还实现次态到现态的转化)中, VHDL的描述为:
state-change:process(clk)
begin
case codin is
      when "0000"=> get<=' 0' ;we<=' 0' ;addr<="000";     
...............................................
when"1101"=>get<=' 1' ;we<=' 0' ;addr< ="111";
when others= >get< = ' 0' ;we< = ' 0' ;addr< ="000";
end case;
end process state-change;

3 纠错功能的实现
    在实际的工作当中,由于硬件电路中,干扰、钟摆、噪声、电源的变化等都可能使触发器翻转,从而使状态机误入非法状态。一旦出现这种情况将无法预见系统的反应,可能会出现状态锁死、系统非法输出;信号冲突,过大的拉电流和灌电流,毁坏系统。
    在进行容错设计时,首先在枚举类型的状态定义中定义所有的非法状态。因此状态定义改为:
TYPE StateTYPE is (idle, deci, reci1, reci2, reci3,reci4, out1,out2,out3, out4,out5,out6,out7,out8,undefine1,undefine2);
    最后,需要定义转移出非法状态的代码。程序片段如下:
..................
case present_state is
.................
when others =>next_state <=idle,err<=' 1' ;
end case;
    另外在进程的设计时,还需要充分注意信号的同步问题,这样才能避免竞争冒险的问题。进行容错设计,虽然牺牲了资源,但却可获得了高可靠的系统。

4 结束语
    实践证明使用可编程逻辑器件可以非常方便地实现状态机。而采用VHDL语言设计,不仅描述方便,而且具有良好的可移植性,可以非常方便地应用于其它公司的CPLD,FPGA芯片中。实际使用中该芯片运行良好,同时可以随时对芯片内部逻辑进行在线更改,体现了可编程逻辑器件的优越性。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?我要注册

x
247891933hao 发表于 2010-11-18 19:57:06 | 显示全部楼层
纠错功能真的很重要啊1
247891933hao 发表于 2010-11-18 20:02:26 | 显示全部楼层
1, 充分注意信号的同步问题 2, 在枚举类型的状态定义中定义所有的非法状态。
 楼主| weibode01 发表于 2010-11-20 00:38:48 | 显示全部楼层
枚举类型,好
yangjian365 发表于 2011-3-6 19:46:01 | 显示全部楼层
不错不错。。。。
您需要登录后才可以回帖 登录 | 我要注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

QQ|小黑屋|手机版|Archiver|fpga论坛|fpga设计论坛 ( 京ICP备20003123号-1 )

GMT+8, 2024-12-24 01:47 , Processed in 0.063343 second(s), 24 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表