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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
一款基于cpld的一种容错状态机的设计
& C/ p4 X5 V  Z, ?  M

; i0 G! D* t) x4 C; {状态机是一种十分重要的时序电路,常用于描述数字系统的控制单元,在数字系统有着广泛的应用,如步进电机、数据存储器的读写、总线控制器等。本文结合具体课题;采用ALTERA的CPLD器件EPM7032实现了一种容错的状态机;采用VHDL语言编程,实际使用效果良好,不仅调试方便,而且增加了系统配置的灵活性,大大缩短了系统开发周期。 : z0 I% h. c, p' K
1 状态机的真值表及状态转移
4 B5 n' z( f; R% g4 |&nBSP;   该状态机是一种Moore型的,其真值表如表1。
3 q3 {6 n* D- {3 Q, K8 d* R/ M4 X
5 F! ^$ {( n: N! F9 t' A! B3 z    该状态机编码方式采用顺序方式,共采用4位编码。这样就存在两个非法的状态(即在状态机中,未定义的状态);采用该编码方式与一位有效编码方式相比,大大减少了非法状态的存在。
' v! ]# z) E9 ^    状态转移图如图1所示。
; F+ v: H' T. X: D7 Z
6 `4 t- \) _$ R. x, H' O- Z6 Z. l, @9 U
; V" }+ v  b, @: F6 u2 VHDL的描述
/ p4 F$ R/ d8 ]/ F    采用VHDL语言描述时、主要应包括:状态变量、时钟、状态转移指定、输出指定、复位信号等几个方面。
; N7 T5 U1 ^$ y(1)状态机的状态变量定义如下:7 r/ \1 i4 ~- h. m
TYPE StateTYPE is (idle, deci, reci1, reci2, reci3,reci4 ,out1,out2,out3,out4,out5,out6,out7,out8);. h, w* {2 [3 n6 C
signal present_state,next_state:statetype;7 b; {2 v0 j" ^/ T
signal codin:std_logic_vector(3 downto 0);
, _3 e8 a+ R4 w5 A(2)状态机的部分状态转移指定:
& P" j5 E+ x2 {8 r1 L: ?9 o5 a) Istatedesc: process (reset, data, present_state, burst,ou_rec,ready)8 v2 _/ y" _5 `% o# r+ u% f
begin
+ v, d! }4 Z* w) k; O  _.........................
! d! d$ G1 v4 ]5 }* {; r  Case  present_state is1 R4 e0 W2 e) @9 K
When idle=>codin<="0000";- e! z. u9 w) D3 M& H- s
If(data="11111111")then next_state<=deci;  }7 v+ M: C) |4 y9 N+ ?
Else
& \. l6 Y  S% uNext_state<=idle;
0 `1 ?; _7 |0 W: e( T! Eend if;6 i( k2 ?& e$ I3 @" P
..............
2 d' x) ]% T4 O# e* HWhen out1=>codin<="0110";
1 O2 C& @, c, V8 W    If(ready=' 0' )then
) d4 Y! I$ M% _$ e9 xNext_state<=out1;8 Z/ M7 q# Q/ ?0 S
Elsif (burst=' 0' )then  next_state<=idle;2 s) U& U! s* \5 c; Y) i
Else next_state<=out2;        
: ^7 ^) M/ Q, U4 u/ [) uend if;5 j/ Z* E  F3 @1 B0 Q/ {  n4 h) n
...............
4 F" k2 o0 l" V1 N" X3 C(3)状态机的输出指定  P/ ]) o* G. Z) J
    状态机的输出需要对codin进行译码才能输出,输出指定放在另一个进程(在该进程中同时还实现次态到现态的转化)中, VHDL的描述为:8 A5 T5 M5 a: x1 v& g6 d7 ^
state-change:process(clk)
6 V7 F( ?+ y  n( Tbegin
" E, _6 ?* w# w" Tcase codin is
! b7 |! q! {6 k, H      when "0000"=> get<=' 0' ;we<=' 0' ;addr<="000";     $ o8 [, K6 L' Y/ c7 P0 Q
...............................................* S$ u3 k$ E& b
when"1101"=>get<=' 1' ;we<=' 0' ;addr< ="111";' [8 k% H5 J/ f, M4 Y, e
when others= >get< = ' 0' ;we< = ' 0' ;addr< ="000";) d. M7 ~7 ?( w9 n) B8 L
end case;
6 W" c( V8 J5 t, _- ]' s1 u4 ^end process state-change;
- b' a0 s/ @" S# T' t
7 w0 ]; n7 T- U1 \3 纠错功能的实现
6 v* H/ J9 _) h( z  S" x0 Z! I    在实际的工作当中,由于硬件电路中,干扰、钟摆、噪声、电源的变化等都可能使触发器翻转,从而使状态机误入非法状态。一旦出现这种情况将无法预见系统的反应,可能会出现状态锁死、系统非法输出;信号冲突,过大的拉电流和灌电流,毁坏系统。# t3 I5 O  J/ |8 J( X3 U6 o
    在进行容错设计时,首先在枚举类型的状态定义中定义所有的非法状态。因此状态定义改为:
8 |. W! R% D2 M' y( @: x6 k9 xTYPE StateTYPE is (idle, deci, reci1, reci2, reci3,reci4, out1,out2,out3, out4,out5,out6,out7,out8,undefine1,undefine2);8 o( ^. s/ V; O8 h1 \
    最后,需要定义转移出非法状态的代码。程序片段如下:8 e+ `! w) s8 E) ?
..................
; v7 a' Q5 x" ucase present_state is
% V( L! k  j" E1 A................." \( v7 t! w( G, A/ k  d3 m% U
when others =>next_state <=idle,err<=' 1' ;
8 {& |3 e3 m3 W. [0 Q% v7 a, Z- dend case;; u8 [$ t* A2 ?4 ]( ]
    另外在进程的设计时,还需要充分注意信号的同步问题,这样才能避免竞争冒险的问题。进行容错设计,虽然牺牲了资源,但却可获得了高可靠的系统。* Q! W5 T3 A+ e. H- i
0 l. t% k6 [1 c
4 结束语
4 S: z8 o' b6 N    实践证明使用可编程逻辑器件可以非常方便地实现状态机。而采用VHDL语言设计,不仅描述方便,而且具有良好的可移植性,可以非常方便地应用于其它公司的CPLD,FPGA芯片中。实际使用中该芯片运行良好,同时可以随时对芯片内部逻辑进行在线更改,体现了可编程逻辑器件的优越性。9 K# y) T& B( h. j: B/ [' N3 y
游客,如果您要查看本帖隐藏内容请回复
, C' N9 \! T5 y/ j6 b5 n2 o0 s

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-7-23 12:01 , Processed in 0.125000 second(s), 26 queries , Gzip On.

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

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

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