状态机和组合逻辑的冒险竞争浅析.docx

上传人:lao****ou 文档编号:881528 上传时间:2024-07-11 格式:DOCX 页数:10 大小:82.08KB
下载 相关 举报
状态机和组合逻辑的冒险竞争浅析.docx_第1页
第1页 / 共10页
状态机和组合逻辑的冒险竞争浅析.docx_第2页
第2页 / 共10页
状态机和组合逻辑的冒险竞争浅析.docx_第3页
第3页 / 共10页
状态机和组合逻辑的冒险竞争浅析.docx_第4页
第4页 / 共10页
状态机和组合逻辑的冒险竞争浅析.docx_第5页
第5页 / 共10页
亲,该文档总共10页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《状态机和组合逻辑的冒险竞争浅析.docx》由会员分享,可在线阅读,更多相关《状态机和组合逻辑的冒险竞争浅析.docx(10页珍藏版)》请在第一文库网上搜索。

1、状态机和组合逻辑的冒险竞争浅析NingHeChuan(宁河川)前言:状态机大法好,状态机几乎可以实现一切时序逻辑电路。有限状态机(Fini拄StateMachine,FSM),根据状态机的输出是否与输入有关,可分为Mo2ie型状态机和MeaIy型状态机。MOOre型状态机输出仅仅与现态有关和Mea1y型状态机不仅与现态有关,也与输入有关,所以会受到输入的干扰,可能会产生毛刺(GIith)的现象,所以我们通常使用的是MOore型状态机。状态机的编码,二进制编码(Binary),格雷码编码(Gray-code),独热码(One-hot)。不同的编码方式是防止在状态转移中发生突变,使得状态转移更为稳

2、定,系统更加可靠,但是通常情况下我们直接采用的是二进制进行编码,除非系统对稳定性和状态编码有特殊要求。状态机的描述,一段式、二段式、三段式。一段式状态机,将组合逻辑和时序逻辑混合在一起,这样的写法对于逻辑简单的状态机来说还是可以使用的,但是对于复杂的逻辑就不也荐了,如果状态复杂也会容易出错,而且一个a1ways块中信号太多也不利于维护和修改。状态参数声明parameterSO-4b0000,S1=4,b0001,s2=4b0010;/FSMonesegmentreg3:0state;a1ways(posedgee1kornegedgerstn)beginif(!rst_n)state=SO;e

3、1sebegincase(state)SO:SI:S2:defau1t:endcaseendend两段式状态机也是一种常用的写法,它把组合逻辑和时序逻辑区分出来,第一段负责状态的转移,第二段是组合逻辑赋值,但是这种写法的缺点是,组合逻辑较容易产生毛刺等常见问题,关于组合逻辑较容易产生毛刺原因,下文会提到。状态参数声明parameterSO=4,b0000,S1=4ib0001,s2=4,b0010;/FSMtwosegmentreg3:0pre_state;reg3:0next_state;/FSMonea1ways(posedgee1kornegedgerst_n)beginif(!rst_

4、n)pre_state=SO;e1sepre_state二next_state;end/FSMtwoa1ways(*)begincase(pre_state)SO:SI:S2:defau1t:;enc1caseend三段式状态机就可以较好的解决一段二段的不足,我也是比较推荐的写法,第一段采用时序逻辑负责状态转移,第二段组合逻辑负责数据赋值,第三段时序逻辑负责输出,代码层次清晰,容易维护,时序逻辑的输出解决了两段式写法中组合逻辑的毛刺问题。但是资源消耗会多一些,此外,三段式从输入到输出会比一段式和二段式延迟一个时鲤周期。在书写状态机的时候,一定要事先设计好状态转移图,将所有的状态都考虑到,避免状

5、态进入死循环,或者跳到偏离态。状态参数声明parameterSO=4ib0000,S1=4b0001,s2=4b0010;/FSMthreesegment/FSMonea1ways(posedgee1kornegedgerstif(!rst_n)pre_state=SO;e1sepre_state二next_state;end/FSMtwoa1ways(*)begincase(pre_state)SO:SI:S2:defau1t:;endcaseend/FSMthree_n)begin_n)begina1ways(posedgee1kornegedgerstif(!rstn)dout二b;e1

6、sebegincase(pre_state)SO:SI:S2:defau1t:;endcaseendend如下图,我通过一个实例来说明一下状态机的使用。下面是一个序列检测状态转移图,检测是的使I1O1这个序列,我们给这个序列的检测序列是II1O11101这一串数据。在这个序列检测器中,我们允许使用重复位。也就是说,前一个“1101”最后一位的1可以作为后一个“1101”序列的起始位。如果不允许重复为位,只需要将S4到S2的转移替换成S4到S1即可。首先,从输出状态SO开始检测,当SO检测到1时跳到Sb否则跳回so,S1检测到1状态跳到S2,否则跳回SO,S2检测到0状态跳到S3,否则还停留在S

7、2状态,因为这里我们的检测序列允许重复位,所以S1检测到的1与S2检测到的1保留,不舍弃作为一下组1101的前两位,所以只需要继续检测下一位数据即可。S3、S4的状态一次类推。这里举着个例子是为了说明状态机的状态跳转,在我们实际的设计中这种情况也是会遇到的。在使用状态机来描述时序电路的时候,首先应该做的是画出状态转移图,然后根据状态跳转来描述代码,最后便会事半功倍。这段序列检测的代码我也贴出来。当然这只是序列检测的一个应用了,我前面也说了状态机机会可以实现一切的时序电路。如果你遇到实在不好解决的设计,那么这个时候,你就可以考虑一下使用状态机了。modu1estate(inputmc1k,inp

8、utrst_n,inputdin,outputregdout;);parameters=3b000,si=3,b001,s2=3b010,s3=3,b11,s4=3b100;状态此为三段式状态机,还有一段式状态机,二段式状态机reg2:0present_state,next_state;用摩尔状态机设计1011序列检测器/状态寄存器a1ways(posedgemc1kornegedgerst_n)beginif(!rstn)present_state二s;e1sepresentstate=next_state;end状态转换模块a1ways(*)begincase(present_state)

9、sO:if(din=1)next_state=si;e1senext_state=s;si:if(din=O)next_state=s2;e1senext_state=si;s2:if(din=1)next_state=s3;e1senext_state=s;s3:if(din=1)next_state=s4;e1senext_state=s2;s4:if(din=O)next_state=s2;e1senext_state=si;defau1t:next_state=s;endcaseenda1ways(posedgee1kornegedgerst_n)beginif(!rst_n)dout

10、=1,b;e1seif(present_state=s4)dout二1b1;e1sedout=1,b;end63endmodu1e在状态机的设计中,一段式状态机用时序逻辑,二段式状态机第一段用时序逻辑,第二段用组合逻辑,三段式状态机第一段用时序逻辑,第二段用组合逻辑,第三段用时序逻辑。我在设计的时候,尝试把第二段写成时序逻辑,最终结果并没有影响,时序逻辑随时钟变化,组合逻辑是直接赋值,所以在第三段状态机进行输出时,输出结果肯定是稳定的,但是这样会限制fmax。如果用时序逻辑的主频率过高的话,可能不如第二段组合逻辑赋值来的稳定,这里就还需要考虑到时序分析了,暂且不谈。这里还需要提的是使用三段式状

11、态机相较于一段二段式,会延迟一个时钟周期输出,就是因为第三段使用了时序逻辑的缘故。既然谈状态机的时候,说到了组合逻辑会产生毛刺的现象,那么这里就顺便整理一下,为什么组合逻辑会产生毛刺,组合逻辑的冒险与竞争分析。竞争(Competition)在组合逻辑电路中,某个输入变量通过两条或两条以上的途径传到输出端,由于每条途径延迟时间不同,到达输出门的时间就有先有后,这种现象称为竞争。把不会产生错误输出的竞争的现象称为非临界竞争。把产生暂时性的或永久性错误输出的竞争现象称为临界竞争。冒险(risk)信号在器件内部通过连线和逻辑单元时,都有一定的延时。延时的大小与连线的长短和逻辑单元的数目有关,同时还受器

12、件的制造工艺、工作电压、温度等条件的影响。信号的高低电平转换也需要一定的过渡时间。由于存在这两方面因素,多路信号的电平值发生变化时,在信号变化的瞬间,组合逻辑的输出有先后顺序,并不是同时变化,往往会出现一些不正确的尖峰信号,这些尖峰信号称为“毛刺”。如果一个组合逻辑电路中有“毛刺”出现,就说明该电路存在冒险竞争冒险(Competitionrisk)产生原因:由于延迟时间的存在,当一个输入信号经过多条路径传送后又重新会合到某个门上,由于不同路径上门的级数不同,或者门电路延迟时间的差异,导致到达会合点的时间有先有后,从而产生瞬间的错误输出。首先看下面这个电路,使用了两个逻辑门,一个非门和一个与门,本来在理想情况下F的输出应该是一直稳定的0输出,但是实际上每个门电路从输入到输出是一定会有时间延迟的,这个时间通常叫做电路的开关延迟。而且制作工艺、门的种类甚至制造时微小的工艺偏差,都会引起这个开关延迟时间的变化。Gate1Gate2实际上如果算上非门的延迟的话,那么F最后就会产生毛刺。信号由于经由不同路径传输达到某一汇合点的时间有先有后的现象,就称之为竞争,由于竞争现象所引起的电路输出发生瞬间错误的现象,就称之为冒险,所以在设计中我们要注意避免这个现象,最简单的避免方法是尽量使用时序逻辑同步输出。这篇状态机和组合逻辑的冒险竞争就聊到这里,下次我们接着说时序逻辑的冒险竞争。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 应用文档 > 工作总结

copyright@ 2008-2022 001doc.com网站版权所有   

经营许可证编号:宁ICP备2022001085号

本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有,必要时第一文库网拥有上传用户文档的转载和下载权。第一文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知第一文库网,我们立即给予删除!



客服