找回密码
 注册
关于网站域名变更的通知
查看: 251|回复: 2
打印 上一主题 下一主题

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

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2019-11-23 07:00 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

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

x
一款基于cpld的一种容错状态机的设计

6 ?( x6 @* z/ A1 ?$ q; r) ^: n1 r% b( Y
状态机是一种十分重要的时序电路,常用于描述数字系统的控制单元,在数字系统有着广泛的应用,如步进电机、数据存储器的读写、总线控制器等。本文结合具体课题;采用ALTERA的CPLD器件EPM7032实现了一种容错的状态机;采用VHDL语言编程,实际使用效果良好,不仅调试方便,而且增加了系统配置的灵活性,大大缩短了系统开发周期。 * P6 u3 _/ S# [6 S) m
1 状态机的真值表及状态转移$ n, d5 ~7 A* |( D/ U  `; W
&nBSP;   该状态机是一种Moore型的,其真值表如表1。
5 t! y* D- p, S; W: B; }* R+ d" }1 }" t
    该状态机编码方式采用顺序方式,共采用4位编码。这样就存在两个非法的状态(即在状态机中,未定义的状态);采用该编码方式与一位有效编码方式相比,大大减少了非法状态的存在。
9 e$ }  I) L. P5 ?, D! k    状态转移图如图1所示。
# O- b, y1 h; d+ T% E/ J' G9 K
  s6 C4 H  L# X
- G" V+ B2 r7 d7 n6 J/ @+ ^2 VHDL的描述
6 S% H9 S) y/ W2 F% F$ S    采用VHDL语言描述时、主要应包括:状态变量、时钟、状态转移指定、输出指定、复位信号等几个方面。4 L8 F1 ~+ l. \3 m9 v7 Q
(1)状态机的状态变量定义如下:) L- W6 S) L3 b2 p/ Z  n
TYPE StateTYPE is (idle, deci, reci1, reci2, reci3,reci4 ,out1,out2,out3,out4,out5,out6,out7,out8);
1 E. O$ J! o6 Z  s+ [  ]signal present_state,next_state:statetype;
3 l- X' Z! n. v. esignal codin:std_logic_vector(3 downto 0);7 B0 u1 A$ ~1 L
(2)状态机的部分状态转移指定:
; p  K. M7 ]" P/ U: Gstatedesc: process (reset, data, present_state, burst,ou_rec,ready)% o  v& u) _& ~# k
begin
3 y0 |3 \) s9 H3 W- b5 N.........................
) o- e5 A( c) l  W+ B, {  Case  present_state is
8 E6 q8 m1 L% a( k. q4 {When idle=>codin<="0000";
: K# ~' k, M7 `8 Q! B( H- }5 qIf(data="11111111")then next_state<=deci;
- H2 q5 X8 }( `Else4 H5 h7 H& S5 J* o# T5 E0 d
Next_state<=idle;& u4 B# H- X/ Q& T( d6 j
end if;
. f% |( b% |  H& `% J..............7 ^8 R; r/ I, E' S9 S- v$ T" a' x3 N
When out1=>codin<="0110";1 d$ d8 R' V/ C( ]# B3 Z  A' Y
    If(ready=' 0' )then
2 E! i1 d6 ^- C$ h* v* ^1 ?2 lNext_state<=out1;! \7 y* f; {6 {& j* S" W4 [
Elsif (burst=' 0' )then  next_state<=idle;, V9 K- n7 {+ B
Else next_state<=out2;        " |$ v8 E/ L: q. z* n
end if;
1 \8 N7 r, `0 l! \- J: m% O...............
- E1 m" Y$ A4 i$ C, {  s) S/ `; @0 Q(3)状态机的输出指定
8 K1 l' N$ A5 h/ p9 a3 g    状态机的输出需要对codin进行译码才能输出,输出指定放在另一个进程(在该进程中同时还实现次态到现态的转化)中, VHDL的描述为:+ H% N+ [( X3 H/ ?" J; a7 u4 T4 |' y
state-change:process(clk)
& k6 v+ m5 D. o) p" ubegin
( _/ ~- T. s9 M+ T0 u. lcase codin is- y: c, C. B* \2 o% J
      when "0000"=> get<=' 0' ;we<=' 0' ;addr<="000";     4 Z% Q3 N% N1 e& r8 C& g& E% n" w  T
...............................................% [" R1 L+ l4 A$ M" w$ _% o+ y) X
when"1101"=>get<=' 1' ;we<=' 0' ;addr< ="111";3 q+ V2 p( O# D- m1 S
when others= >get< = ' 0' ;we< = ' 0' ;addr< ="000";
6 ?9 z, o8 u0 ^5 V" H- pend case;
2 ?3 J2 |) q) f3 K/ Qend process state-change;
! I! z4 D% F1 F( ^) @: Y
- K' m+ J7 k* f8 `% H  }! i3 纠错功能的实现! e* O! Y  C$ o2 l! s4 o
    在实际的工作当中,由于硬件电路中,干扰、钟摆、噪声、电源的变化等都可能使触发器翻转,从而使状态机误入非法状态。一旦出现这种情况将无法预见系统的反应,可能会出现状态锁死、系统非法输出;信号冲突,过大的拉电流和灌电流,毁坏系统。
3 [" |+ B( d; h- q/ U    在进行容错设计时,首先在枚举类型的状态定义中定义所有的非法状态。因此状态定义改为:
/ Z3 \* A; Y) a; j) u7 eTYPE StateTYPE is (idle, deci, reci1, reci2, reci3,reci4, out1,out2,out3, out4,out5,out6,out7,out8,undefine1,undefine2);
7 N  E8 u2 A5 d" q$ O7 \9 a* F/ G7 }# P    最后,需要定义转移出非法状态的代码。程序片段如下:9 x% B9 c& h3 ?0 v; Q
..................% p0 N+ |& _% H
case present_state is
- F& \2 ?7 T/ s  R, [.................
- m* I; _, B: O& N# twhen others =>next_state <=idle,err<=' 1' ;& |: N2 L, P9 N  x
end case;( Q0 Q; u; R' a  W  B# w: \6 l
    另外在进程的设计时,还需要充分注意信号的同步问题,这样才能避免竞争冒险的问题。进行容错设计,虽然牺牲了资源,但却可获得了高可靠的系统。& H2 ^+ j) i, _. N, ]7 {

0 r+ |+ \# {; G5 N4 结束语+ o% \& @1 J/ n4 F' t! E
    实践证明使用可编程逻辑器件可以非常方便地实现状态机。而采用VHDL语言设计,不仅描述方便,而且具有良好的可移植性,可以非常方便地应用于其它公司的CPLD,FPGA芯片中。实际使用中该芯片运行良好,同时可以随时对芯片内部逻辑进行在线更改,体现了可编程逻辑器件的优越性。
/ G4 `) }1 h4 N
游客,如果您要查看本帖隐藏内容请回复
6 h: t. R# W7 l- v/ G0 I* k7 ~1 N

该用户从未签到

3#
发表于 2022-8-10 15:32 | 只看该作者
一款基于CPLD的一种容错状态机的设计
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-11-2 06:51 , Processed in 0.156250 second(s), 27 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

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