- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
关于有限状态机(FSM)编码的技巧和注意事项困惑于如何编好有限状态机(FSM)的朋友注意了,我给新论坛添料了,嘻嘻。3 |! e0 _8 j. B P贴1? ?状态机的编码( v5 @) t: w9 y; O8 z( B8 L$ T? ???a.状态机的编码。Biary、gray-code编码使用最少的触发器,较多的组合逻辑。而one-hot编码反之。由于CPLD更多的提供组合逻辑资源,而FPGA更多的提供触发器资源,所以CPLD多使用gray-code,而FPGA多使用one-hot编码。另一方面,对于小型设计使用gray-code和binary编码更有效,而大型状态机使用one-hot更高效。6 R. g5 i3 O( ~% _6 c4 ~* b? ? b.在代码中添加综合器的综合约束属性或者在图形界面下设置综合约束属性可以比较方便的改变状态的编码。/ x2 U8 e5 }+ ]( T8 |4 @6 K) T如VHDL的示例:+ m% d* \, A: k贴2:状态机的编码风格4 g2 n B/ j2 w7 g @??a.关于FSM的编码方法。FSM分两大类:米勒型和摩尔型。组成要素有输入(包括复位),状态(包括当前状态的操作),状态转移条件,状态的输出条件。! u# ~/ w0 o; i? ???设计FSM的方法和技巧多种多样,但是总结起来有两大类:第一种,将状态转移和状态的操作和判断等写到一个模块(process、block)中。另一种是将状态转移单独写成一个模块,将状态的操作和判断等写到另一个模块中(在Verilog代码中,相当于使用两个“always” block)。其中较好的方式是后者。其原因如下。/ o; M9 P, _0 S??r? ???首先FSM和其他设计一样,最好使用同步时序方式设计,好处不再累述。而状态机实现后,状态转移是用寄存器实现的,是同步时序部分。状态的转移条件的判断是通过组合逻辑判断实现的,之所以第二种比第一种编码方式合理,就在于第二种编码将同步时序和组合逻辑分别放到不同的程序块(process,block)中实现。这样做的好处不仅仅是便于阅读、理解、维护,更重要的是利于综合器优化代码,利于用户添加合适的时序约束条件,利于布局布线器实现设计。5 xb.初始化状态和默认状态。* m V8 I+ ]# n3 p, q, R9 w! O? ???一个完备的状态机(健壮性强)应该具备初始化状态和默认状态。当芯片加电或者复位后,状态机应该能够自动将所有判断条件复位,并进入初始化状态。需要注明的一点是,大多数FPGA有GSR(Global Set/Reset)信号,当FPGA加电后,GSR信号拉高,对所有的寄存器,RAM等单元复位/置位,这是配置于FPGA的逻辑并未生效,所以不能保证正确的进入初始化状态。所以使用GSR企图进入FPGA的初始化状态,常常会产生种种不必一定的麻烦。一般的方法是采用异步复位信号,当然也可以使用同步复位,但是要注意同步复位的逻辑设计。解决这个问题的另一种方法是将默认的初始状态的编码设为全零,这样GSR复位后,状态机自动进入初始状态。 v+ C# b4 l9 X r? ???令一方面状态机也应该有一个默认(default)状态,当转移条件不满足,或者状态发生了突变时,要能保证逻辑不会陷入“死循环”。这是对状态机健壮性的一个重要要求,也就是常说的要具备“自恢复”功能。对应于编码就是对case,if-else语句要特别注意,要写完备的条件判断语句。VHDL中,当使用CASE语句的时候,要使用“When Others”建立默认状态。使用“IF...THEN...ELSE”语句的时候,要用在“ELSE”指定默认状态。Verilog中,使用“case”语句的时候要用“default”建立默认状态,使用“if...else”语句的注意事项相似。 i2 U??w??t w6 _7 z+ |? ???另外提一个技巧:大多数综合器都支持Verilog编码状态机的完备状态属性--“full case”。这个属性用于指定将状态机综合成完备的状态,如Synplicity的综合工具(Synplify/Synplify Pro,Amplify,etc)支持的命令格式如下:?case (current_state) // synthesis full_case( f7 h3 {: M6 m$ M* x0 v? ???2’b00 : next_state = 2’b01;* r j, q q$ I* \1 N( K9 Y$ _? ???2’b01 : next_state = 2’b11;+ X7 c: ?5 k W! D? ???2’b11 : next_state = 2’b00;
您可能关注的文档
最近下载
- 矿山用地审批及土地使用权证的办理.docx VIP
- 高中生职业生涯规划课件(共33张课件).pptx VIP
- TB 10106-2023铁路工程地基处理技术规程.pdf
- 《核磁共振波谱学》第5讲二维核磁共振谱介绍.ppt
- 降低住院患者2期及以上院内压力性损伤发生率.pptx VIP
- 部编人教版九年级上册语文课外古诗词诵读1左迁至蓝关示侄孙湘.ppt VIP
- 大数据试题及答案.docx
- 老年人头晕/眩晕诊疗多学科专家共识(2021).pdf VIP
- 2024秋人教PEP版三年级英语上册Unit 1 Making friends 单元分层作业设计.docx
- DL5T 5342-2006 750kV架空送电线路铁塔组立施工工艺导则.pdf VIP
文档评论(0)