网站公告列表

  没有公告

加入收藏
设为首页
联系站长
您现在的位置: 61IC中国电子在线 >> EDA >> HDL >> 文章正文
  FPGA设计要点之二:FSM           ★★★ 【字体:
FPGA设计要点之二:FSM
作者:Free    文章来源:Free    点击数:    更新时间:2008-1-3    

关于上期的时钟树,可能说的不是很确切。这里的时钟树实际上泛指时钟方案,主要是时钟域和PLL等的规划,一般情况下不牵扯到走线时延的详细计算(一般都走全局时钟网络和局部时钟网络,时延固定),和ASIC中的时钟树不一样。对于ASIC,就必须对时钟网络的设计、布线、时延计算进行仔细的分析计算才行。

            FSM:有限状态机。这个可以说时逻辑设计的基础。几乎稍微大一点的逻辑设计,几乎都能看得到FSM

            FSM分为moore型和merly型,moore型的状态迁移和变量无关,merly型则有关。实际使用中大部分都采用merly型。

            FSM通常有2种写法:单进程、双进程。

            初学者往往喜欢单进程写法,格式如下:

            always  @( posedge clk or posedge rst )

                begin

                     if  ( rst == 1'b1 )

                         FSM_status <= ......;

                     else

                           case  ( FSM_status )

                                ......;

                           endcase

                 end

            简单的说,单进程FSM就是把所有的同步、异步处理都放入一个always中。

            优点:

            1)看起来比较简单明了,写起来也不用在每个case分支或者if分支中写全对各个信号和状态信号的处理。也可以简单在其中加入一些计数器进行计数处理。

            2)所有的输出信号都已经是经过D触发器锁存了。

            缺点:

            1)优化效果不佳。由于同步、异步放在一起,编译器一般对异步逻辑的优化效果最好。单进程FSM把同步、异步混杂在一起的结果就是导致编译器优化效果差,往往导致逻辑速度慢、资源消耗多。

            2)某些时候需要更快的信号输出,不必经过D触发器锁存,这时单进程FSM的处理就比较麻烦了。

            双进程FSM,格式如下:

            always  @( posedge clk or posedge rst )

                begin

                    if ( rst == 1'b1 )

                        FSM_status_current <= ...;

                    else

                        FSM_status_current <= FSM_status_next;

            always  @(*)

                begin

                    case  ( FSM_status_current )

                        FSM_status_next = ......;

                    endcase

                end

            从上面可以看到,同步处理和异步处理分别放到2always中。其中FSM状态变量也采用2个来进行控制。双进程FSM的原理我这里就不多说了,在很多逻辑设计书中都有介绍。这里描述起来太费劲。

            优点:

            1)编译器优化效果明显,可以得到很理想的速度和资源占用率。

            2)所有的输出信号(除了FSM_status_current)都是组合输出的,比单进程FSM快。

            缺点:

            1)所有的输出信号(除了FSM_status_current)都是组合输出的,在某些场合需要额外写代码来进行锁存。

            2)在异步处理的always中,所有的ifcase分支必须把所有的输出信号都赋值,而且不能出现在FSM中的输出信号回送赋值给本FSM中的其他信号的情况,否则会出现

            latch

            latch会导致如下问题:

            1)功能仿真结果和后仿不符;

            2)出现无法测试的逻辑;

            3)逻辑工作不稳定,特别是latch部分对毛刺异常敏感;

            4)某些及其特殊的情况下,如果出现正反馈,可能会导致灾难性的后果。

            这不是恐吓也不是开玩笑,我就亲眼见过一个小伙把他做的逻辑加载上去后,整个FPGA给炸飞了。后来怀疑可能是出现正反馈导致高频振荡,最后导致芯片过热炸掉(这个FPGA芯片没有安装散热片)。

               欢迎点击进入:TI德州中文网   (国内唯一针对TI应用的中文技术网站)    文章录入:admin    责任编辑:admin 
  • 上一篇文章:

  • 下一篇文章:
  • 发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
    最新热点 最新推荐 相关文章
    没有相关文章
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
    站长:61IC 湘ICP备05002478号