集成电路技术分享

 找回密码
 我要注册

QQ登录

只需一步,快速开始

搜索
查看: 7162|回复: 16

如何猜分状态机

[复制链接]
UFO 发表于 2010-6-26 01:42:50 | 显示全部楼层 |阅读模式
本帖最后由 fpgaw 于 2010-11-18 16:01 编辑

写状态机的时候,典型的写法是 case ( state ) ... next_state = .. . always @ ( clk )state = next_state ; 那么在什么情况下,可以使得状态机的速度更快呢,有人提出猜分状态机,用流水链式处理代替。那样可以能够分解状态机,提供时钟频率。谁能提供一个例子说明一下问题。希望能通过这个问题,把状态机的一些相关问题理解清楚。
HDL 发表于 2010-6-26 02:56:07 | 显示全部楼层
<br>
我写过的状态机在系统中一直都是逻辑相对简单,延迟比较短的部分了,<br>
还从来没有成为关键路径。<br>
如果觉得状态机太复杂了,我倒是常常采用一个中心状态机控制几个<br>
从控状态机的办法,这样开发速度快,电路也更简单。流水线状态机<br>
没有听说过。<br>
ngtim 发表于 2010-6-26 04:05:50 | 显示全部楼层
与liuth同感。
inter 发表于 2010-6-26 05:02:30 | 显示全部楼层
"一个中心状态机控制几个从状态机"该怎样理解呢?<br>
可以解释一下吗,谢谢!
interige 发表于 2010-6-26 06:41:19 | 显示全部楼层
是啊,愿闻其详
CHA 发表于 2010-6-26 08:23:04 | 显示全部楼层
举个例子,假如设计一个使用FFT计算的IMDCT。<br>
IMDCT包括几个步骤:<br>
1.cross<br>
2.rotate<br>
3.fft<br>
4.bit reverse<br>
4.除以N<br>
5.rotate<br>
电路公用一个buffer_ram。<br>
以上步骤有一定的顺序,需要对公用的buffer_ram进行读写,<br>
还有乘法器、加法器进行控制,不同的步骤不一样。<br>
如果设计一个大的状态机控制整个流程,哇!那这个状态机<br>
有好多状态,每个状态要负责的任务很多很复杂。<br>
于是,我们可以为以上每个功能设计一个状态机,它们负责<br>
产生自己的读写信号和其他控制信号。然后再设计一个中心<br>
控制器,这个控制器规划了整个流程,它负责启动其中一个<br>
子状态机,并且从各个状态机产生的控制信号中挑选出激活<br>
的子状态机产生的信号,让这些信号去控制buffer_ram和<br>
运算单元,而且负责data path的正确连接,这样设计就简<br>
单多了。<br>
比如轮到fft这个步骤的时候,由fft控制单元产生的读写信号<br>
和加法、乘法单元的控制信号就被连接到buffer_ram和运算单元<br>
上,其他控制单元的类似信号就不起作用,相当于只有fft控制<br>
单元在工作,其他控制单元被闲置了。等fft单元工作完毕后,<br>
中央控制单元再把数据总线和控制总线的权利交给bit reverse<br>
控制单元。如此循环。<br>
AAT 发表于 2010-6-26 09:30:48 | 显示全部楼层
画个示意图。
CCIE 发表于 2010-6-26 10:34:35 | 显示全部楼层
thanks liuth . 按照我的理解,子状态机主要是为了两个目的:简化单一状态机,逻辑结构清晰,易理解和维护。猜分状态机可以避免状态机成为关键路径。<br>
那么既然状态机容易描述逻辑功能,那么我们是否在RTL级设计的时候尽量使用状态机呢。这里怎么取舍呢。
VVC 发表于 2010-6-26 11:47:46 | 显示全部楼层
我想,是否尽量使用状态机,这个跟各人的风格有关吧,<br>
不过状态机的确是非常重要,而且经常用到的。
FFT 发表于 2010-6-26 12:22:25 | 显示全部楼层
当系统时钟太快时,会使状态机出现非法状态,这也是一个问题啊.
您需要登录后才可以回帖 登录 | 我要注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

QQ|小黑屋|手机版|Archiver|fpga论坛|fpga设计论坛 ( 京ICP备20003123号-1 )

GMT+8, 2024-12-25 13:51 , Processed in 0.066792 second(s), 23 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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