有关有限状态机FSM)编码技巧和注意事项

有关有限状态机FSM)编码技巧和注意事项

ID:47413755

大小:230.50 KB

页数:12页

时间:2019-06-27

有关有限状态机FSM)编码技巧和注意事项_第1页
有关有限状态机FSM)编码技巧和注意事项_第2页
有关有限状态机FSM)编码技巧和注意事项_第3页
有关有限状态机FSM)编码技巧和注意事项_第4页
有关有限状态机FSM)编码技巧和注意事项_第5页
资源描述:

《有关有限状态机FSM)编码技巧和注意事项》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、关于有限状态机(FSM)编码的技巧和注意事项困惑于如何编好有限状态机(FSM)的朋友注意了,我给新论坛添料了,嘻嘻。3

2、!e0_8j.B&P贴1  状态机的编码(v5@)t:w9y;O8z(B8L$T    a.状态机的编码。Biary、gray-code编码使用最少的触发器,较多的组合逻辑。而one-hot编码反之。由于CPLD更多的提供组合逻辑资源,而FPGA更多的提供触发器资源,所以CPLD多使用gray-code,而FPGA多使用one-hot编码。另一方面,对于小型设计使用gray-code和binary编码更有效,而大型状态机使用one-hot更高效。6

3、R.g5i3O(~%_6c4~*b  b.在代码中添加综合器的综合约束属性或者在图形界面下设置综合约束属性可以比较方便的改变状态的编码。/x2U8e5}+](T8

4、4@6K)T如VHDL的示例:+m%d*,A:k贴2:状态机的编码风格4g2n'B/j2w7g"@  a.关于FSM的编码方法。FSM分两大类:米勒型和摩尔型。组成要素有输入(包括复位),状态(包括当前状态的操作),状态转移条件,状态的输出条件。!u#~/w0o;i    设计FSM的方法和技巧多种多样,但是总结起来有两大类:第一种,将状态转移和状态的操作和判断等写到一个模块(process、block

5、)中。另一种是将状态转移单独写成一个模块,将状态的操作和判断等写到另一个模块中(在Verilog代码中,相当于使用两个“always”block)。其中较好的方式是后者。其原因如下。/o;M9P,_0S  r    首先FSM和其他设计一样,最好使用同步时序方式设计,好处不再累述。而状态机实现后,状态转移是用寄存器实现的,是同步时序部分。状态的转移条件的判断是通过组合逻辑判断实现的,之所以第二种比第一种编码方式合理,就在于第二种编码将同步时序和组合逻辑分别放到不同的程序块(process,block)中实现。这样做的好处不仅仅是便于阅读、理解、维护,更重要的是利于综

6、合器优化代码,利于用户添加合适的时序约束条件,利于布局布线器实现设计。5x&b.初始化状态和默认状态。*m&V8I+]#n3p,q,R9w!O    一个完备的状态机(健壮性强)应该具备初始化状态和默认状态。当芯片加电或者复位后,状态机应该能够自动将所有判断条件复位,并进入初始化状态。需要注明的一点是,大多数FPGA有GSR(GlobalSet/Reset)信号,当FPGA加电后,GSR信号拉高,对所有的寄存器,RAM等单元复位/置位,这是配置于FPGA的逻辑并未生效,所以不能保证正确的进入初始化状态。所以使用GSR企图进入FPGA的初始化状态,常常会产生种种不必一

7、定的麻烦。一般的方法是采用异步复位信号,当然也可以使用同步复位,但是要注意同步复位的逻辑设计。解决这个问题的另一种方法是将默认的初始状态的编码设为全零,这样GSR复位后,状态机自动进入初始状态。"v+C#b4l9X"r    令一方面状态机也应该有一个默认(default)状态,当转移条件不满足,或者状态发生了突变时,要能保证逻辑不会陷入“死循环”。这是对状态机健壮性的一个重要要求,也就是常说的要具备“自恢复”功能。对应于编码就是对case,if-else语句要特别注意,要写完备的条件判断语句。VHDL中,当使用CASE语句的时候,要使用“WhenOthers”建立

8、默认状态。使用“IF...THEN...ELSE”语句的时候,要用在“ELSE”指定默认状态。Verilog中,使用“case”语句的时候要用“default”建立默认状态,使用“if...else”语句的注意事项相似。"i2U  w  t'w6_7z+

9、    另外提一个技巧:大多数综合器都支持Verilog编码状态机的完备状态属性--“fullcase”。这个属性用于指定将状态机综合成完备的状态,如Synplicity的综合工具(Synplify/SynplifyPro,Amplify,etc)支持的命令格式如下: case(current_state)//sy

10、nthesisfull_case(f7h3{:M6m$M*x0v    2’b00:next_state<=2’b01;*r'j,q'q$I*1N(K9Y$_    2’b01:next_state<=2’b11;+X7c:?5k&W!D    2’b11:next_state<=2’b00;"u!h2{8k!n-t3u#A    //这两段代码等效8O!P%

11、'u*_+t8V  j:Q'J    case(current_state)*X9t4A)~4`0e$D!_"Y    2’b00:next_state<=2’b01;&u1~7N;'N-D#T4V&

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。