|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
在设计状态机时有几种状态编码方法:二进制,格雷码(灰色)和独热码(一个热门代码)。他们各有各的优点。
: j/ ~8 h! y+ o& x& e' ~& n
' z' |5 m/ N6 v0 T
( M9 r1 X- v8 i& Y: v0 N独热码,在编码中使用位数较多,其中只有一位位高电平,减少编码复杂度,可减少实现状态机的组合逻辑数目,减少复杂度,一定程度提高系统的速度,在逻辑资源充裕,FPGA逻辑速度有要求的情况下可考虑该编码方式,相对于格雷码,在时序问题较差的情况下,一定程度上增加了亚稳态的概率。使用独热码编码时,会出现很多未使用的状态,例如:0001 0010 0100 1000$ c5 ?+ `* ?3 z2 C" m
, q* ]- G& R+ n: ^) K7 i
" v8 E9 T2 c* F9 Z- W
二进制编码,减少编码时触发器的数量,编码方式较为容易理解,但是在状态机运转过程中,触发器反转次数较多,相对FPGA内部速率有稍微的影响,同时在时序要求严格的情况下,也会稍微增加亚稳态出现的概率。使用二进制编码时,如果状态机的状态数不是2的指数次方时,也会出现未使用状态。例如:00 01 10 11
+ }5 D- [9 j! q; N" T3 p! u
- F: F9 |) P% P5 O% {* [- v, D$ ^4 F4 w# o0 F; S5 O
格雷码,在减少编码时触发器的数量的同时,降低了亚稳态的出现的概率,但是编码方式较为复杂,实现状态机时触发器反转次数最少,相对功率有所降低,是最为适合工程实现的编码方式。使格雷码时,如果状态机的状态数不是2的指数次方时,也会出现未使用状态。格雷码每个相邻的状态切换只有一个位的信号跳变,适用于异步握手的情况,比如异步FIFO的指针计数。例如:00 01 11 1
; W3 X9 T6 r( f
, i7 F8 {* `2 o& r7 t
+ G( P# ?: N7 K" C$ H i( j" V% ^
2 _/ e3 X' n3 q8 F: Q1 H: ?8 I' m* {3 p, c% z( `( {4 h
0 p6 A% l: ~$ s% D1 H, d% i9 W# c0 n8 W1 y9 x* W2 F: B2 H& L4 ?9 ~
) V I5 d3 S3 q2 a- Z+ m( D
! R: p* ]7 P* }( b
|
|