|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
在设计状态机时有几种状态编码方法:二进制,格雷码(灰色)和独热码(一个热门代码)。他们各有各的优点。
+ g9 O+ \1 M2 p, x9 w; g
: d( O% c5 A7 ~) R0 a5 _/ I" w
独热码,在编码中使用位数较多,其中只有一位位高电平,减少编码复杂度,可减少实现状态机的组合逻辑数目,减少复杂度,一定程度提高系统的速度,在逻辑资源充裕,FPGA逻辑速度有要求的情况下可考虑该编码方式,相对于格雷码,在时序问题较差的情况下,一定程度上增加了亚稳态的概率。使用独热码编码时,会出现很多未使用的状态,例如:0001 0010 0100 1000
6 m8 v) V& y; Y" Q) ^( w% R
3 `+ s# ?( [9 n& u L( g
( s ^5 z3 j# k$ X" ~4 v- O二进制编码,减少编码时触发器的数量,编码方式较为容易理解,但是在状态机运转过程中,触发器反转次数较多,相对FPGA内部速率有稍微的影响,同时在时序要求严格的情况下,也会稍微增加亚稳态出现的概率。使用二进制编码时,如果状态机的状态数不是2的指数次方时,也会出现未使用状态。例如:00 01 10 115 {2 D' U/ F N$ L1 D
% u4 P: s( o* c8 v9 D
' }. f, C, A; G' J) Q7 k8 l+ x格雷码,在减少编码时触发器的数量的同时,降低了亚稳态的出现的概率,但是编码方式较为复杂,实现状态机时触发器反转次数最少,相对功率有所降低,是最为适合工程实现的编码方式。使格雷码时,如果状态机的状态数不是2的指数次方时,也会出现未使用状态。格雷码每个相邻的状态切换只有一个位的信号跳变,适用于异步握手的情况,比如异步FIFO的指针计数。例如:00 01 11 1$ W% T& d( c2 u1 {& c
3 U9 m' P' ]" j, \8 |
* f# t9 t+ m4 U1 ?% e# v' P2 ? q( Z
3 Q( X, R' q/ `& s3 {, x, V, X1 A1 v0 Q2 i
5 Z" h) P: E7 [% S
/ X3 M& [' `0 o' ^ ^/ |7 C W1 Z) l
m" M% W9 ^" ^ |
|