首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

FPGA中状态机实现需要注意的地方

FPGA中状态机实现需要注意的地方

写状态机时需要注意的地方:
1、状态机的状态编码大概有三种:二进制编码,格雷码,独热码。
     其中二进制编码就是000、001、010、011、100这类的逐渐加一
     格雷码就是相邻两个状态只有一位数不一样,000、001、011、010之类的
     独热码的意思是有多少个状态那么状态码就有多少位,比如说状态机有六个状态,那么状态向量就有6位,其状态分别为000001、000010、000100、001000、010000、100000,这六种状态,也就是说只有一位为1。


2、二进制编码使用较少的触发器,消耗较多的逻辑资源,而独热码相反。独热码最大的优势在于状态比较时仅仅需要比较一个位,一定程度上化简了译码逻辑,减少了毛刺产生的概率。在需要表示相同的状态数时,独热码所占的位宽较大,也就是消耗较多的触发器,但是这些额外的触发器所占用的面积可与译码电路省下来的面积相抵消。


3、CPLD中有较多的逻辑资源,而触发器资源较少;FPGA中提供的触发器资源较多,所以在以后写状态机的时候要注意这一点。大型状态机使用one-hot更高效




4、写状态机时最好使用三段式的状态机,第一个状态机只写当前状态以及下一个状态;第二个状态机写下一个状态的跳转条件以及跳转状态;第三个状态机写输出。一般来说,状态转移部分(第一个状态机)是同步时序电路而状态的转移条件的判断(第二个状态机)是组合逻辑。


5、三段式描述方法与两段式描述相比,虽然代码结构复杂了一些,但是换来的优势是使FSM 做到了同步寄存器输出,消除了组合逻辑输出的不稳定与毛刺的隐患,而且更利于时序路径分组,一般来说在FPGA/CPLD 等可编程逻辑器件上的综合与布局布线效果更佳。
返回列表