详细介绍FPGA状态机的设计和应用.docx

上传人:lao****ou 文档编号:900235 上传时间:2024-07-17 格式:DOCX 页数:9 大小:38.90KB
下载 相关 举报
详细介绍FPGA状态机的设计和应用.docx_第1页
第1页 / 共9页
详细介绍FPGA状态机的设计和应用.docx_第2页
第2页 / 共9页
详细介绍FPGA状态机的设计和应用.docx_第3页
第3页 / 共9页
详细介绍FPGA状态机的设计和应用.docx_第4页
第4页 / 共9页
详细介绍FPGA状态机的设计和应用.docx_第5页
第5页 / 共9页
亲,该文档总共9页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《详细介绍FPGA状态机的设计和应用.docx》由会员分享,可在线阅读,更多相关《详细介绍FPGA状态机的设计和应用.docx(9页珍藏版)》请在第一文库网上搜索。

1、详细介绍FPGA状态机的设计和应用FPGA的特点是并行执行,但如果需要处理一些具有前后顺序的事件,就需要使用状态机。状态机是一种用于处理具有前后顺序的事件的计算机模型,包含现态、条件、动作和次态四个要素,它可以将一个复杂的控制流程分解成多个互相独立的状态,从而简化设计过程并提高了系统的可靠性和性能。本文将对FPGA状态机进行详细介绍,帮助大家了解状态机的设计和应用。一、FPGA状态机基础1、基础概念FPGA状态机是一种能够描述对象在运行周期内的所有状态,以及从一个状态到另一个状态转换的过程的抽象模型。状态机可归纳为4个要素,即现态、条件、动作、次态。现态:当前所处的状态。条件:当一个条件被满足

2、,将会触发一个动作,或者执行一次运行状态的变化。动作:条件满足后执行的动作。动作不是必需的,也可以直接迁移到新状态而不进行任何动作。次态:条件满足后要跳转到的新状态。其中,“次态”是相对于“现态”而言的,一旦被跳转后,“次态”就转变成新的“现态”了。2、状态机分类通常情况下,FPGA状态机一般有两种类型: Mo2Ie型状态机:下一状态只由当前状态决定。 Mea1y型状态机:下一状态不但与当前状态有关,还与当前输入值有关。由于MeaIy型状态机的输出与输入有关,输出信号很容易出现毛刺,所以一般采用Moore型状态机。(1) Mea1y状态机输出逻辑不但取决于当前“状态”还取决于“输入”,如图所示

3、。(2) Moore状态机输出逻辑仅仅取决于当前状态,且与当前时刻的输入无关,如图所示。二、FPGA状态机实现方式FPGA状态机的描述方式主要分为3种,分别是一段式、两段式、三段式。1、一段式状态机一段式状态机使用1个a1ways块,把状态跳转和奏谴输出逻辑都写在一起,其输出是寄存器输出,无毛刺,但是这种方式代码较混乱,逻辑不清晰,难于修改和调试,应该尽量避免使用。下面给出一个一段式的Mea1y状态机示例:modu1eone_state_machine(inpute1k,inputrstn,input1:0inp,outputregoutp);/定义状态Ioca1paramSTATE0=0,S

4、TATE_1=1,STATE_2=2,STATE_3=3;/定义状态寄存器和初始状态reg1:0state_r;/初始化状态寄存器a1ways(posedgee1kornegedgerst_n)beginif(rst_n)beginstate_r=STATE_O;ende1sebegincase(state_reg)STATE_O:beginif(inp=2,b00)beginstate_r=STATE_O;outp=0;ende1seif(inp=2,b1)beginstate_r=STATE1;outp=1;ende1seif(inp=2,biO)beginstate_r=STATE_2;

5、outp=O;ende1sebeginstate_r=STATE_3;outp=1;endendSTATE:beginif(inp=2,bOO)beginstate_r=STATE_1;outp=1;ende1seif(inp=2,b1)beginstate_r=STATE_2;outp=O;ende1seif(inp=2,biO)beginstate_r=STATE_3;outp=1;ende1sebeginstate_r=STATE_O;outp=O;endendSTATE_2:beginif(inp=2,bOO)beginstate_r=STATE_2;outp=O;ende1seif(

6、inp=2,b1)beginstate_r=STATE_3;outp=1;ende1seif(inp=2,biO)beginstate_r=STATE_O;outp=O;ende1sebeginstate_r=STATE_1;outp=1;endendSTATE_3:beginif(inp=2,bOO)beginstate_r=STATE_3;outp=1;ende1seif(inp=2,b1)beginstate_r=STATE_O;outp=O;ende1seif(inp=2,biO)beginstate_r=STATE_1;outp=1;ende1sebeginstate_reg=STA

7、TE2;outp=O;endendendcaseendendendmodu1e2、二段式状态机二段式状态机使用2个a1ways块,都是时序逻辑,其中一个a1ways块用于写状态机的状态跳转逻辑,另一个a1ways块用于写当前状态下的寄存器输出逻辑。这种方式逻辑代码清晰,易于调试和理解,是比较推卷的一个方式。下面给出一个二段式的MOore状态机示例:modu1estate_machine(inpute1k,inputrst_n,outputregout_reg);/状态寄存器和下一个状态寄存器reg1:0state_r;/状态定义parameterID1E=2,b00;parameterSTAT

8、E1=2,b1;parameterSTTE2=2,biO;parameterSTATE3=2,b11;/a1ways(posedgee1kornegedgerst_n)时序逻辑代码块,实现状态跳转逻辑a1ways(posedgee1kornegedgerst_n)beginif(rst_n)beginstate_r=ID1E;ende1sebegincase(state_r)ID1E:beginstate_r=STATE1;endSTATE1:beginstate_r=STTE2;endSTTE2:beginstate_r=STATE3;endSTATE3:beginstate_r=ID1E;

9、endendcaseendend/a1ways(*)时序逻辑代码块,实现状态输出逻辑a1ways(POSedgee1kornegedgerstn)beginif(rstn)beginout_reg=b;ende1sebegincase(state_r)ID1E:beginout_reg=1b;endSTATE1:beginout_reg=1,b1;endSTATE2:beginout_reg=1,b1;endSTTE3:beginout_reg=b;endendcaseendendendmodu1e3、三段式状态机三段式状态机使用3个a1ways块,其中一个组合a1ways块用于写状态机的状态

10、跳转逻辑,一个时序a1ways块用于缓存状态寄存器,另一个a1ways块用于写当前状态下的寄存器输出逻辑。这种方式逻辑代码清晰,易于调试和理解,也是比较推荐的一个方式。modu1estate_machine(inpute1k,inputrstn,input1:0inp,outputregoutp);/定义状态Ioca1paramSTATE_O=0,STATE_1=1,STATE_2=2,STATE_3=3;/定义状态寄存器和初始状态reg1:0state_r,next_state;/定义状态寄存器a1ways(posedgee1kornegedgerst_n)beginif(rstn)begi

11、nstate_r=STATE0;ende1sebeginstate_r=nextstate;endend/定义状态转移逻辑a1ways(*)begincase(state_r)STATE_O:beginif(inp=2,b00)beginnext_state=STATE_O;ende1seif(inp=2,b1)beginnext_state=STATE_1;ende1seif(inp=2,biO)beginnext_state=STATE_2;ende1sebeginnext_state=STATE_3;endendSTATE_1:beginif(inp=2,b00)beginnext_st

12、ate=STATE_1;ende1seif(inp=2,b1)beginnext_state=STATE_2;ende1seif(inp=2,biO)beginnext_state=STATE_3;ende1sebeginnext_state=STATE_O;endendSTATE_2:beginif(inp=2,b00)beginnext_state=STATE_2;ende1seif(inp=2,b1)beginnext_state=STATE_3;ende1seif(inp=2,biO)beginnext_state=STATE_O;ende1sebeginnext_state=STAT

13、E;endendSTATE_3:beginif(inp=2,b00)beginnext_state=STATE_3;ende1seif(inp=2,b1)beginnext_state=STATE_O;ende1seif(inp=2,biO)beginnext_state=STATE_1;ende1sebeginnext_state=STATE_2;endendendcaseend/定义输出逻辑a1ways(*)begincase(state_r)STATE_O:outp=0STATE_1:outp=1STATE_2:outp=0STATE_3:outp=1endcaseendendmodu1

14、e注意:组合逻辑代码中,if语句和CaSe语句必须写满,否则容易形成IatCh,导致实际运行出问题。三、状态机的编码方式1、独热码独热码(One-hot)是一种状态编码方式,其特点是对于任意给定的状态,状态寄存器中只有1位为1其余位都为0。使用独热码可以简化译码逻辑电路,因为状态机只需对寄存器中的一位进行译码,同时可用省下的面积抵消额外触发器占用的面积。相比于其他类型的有限状态机,加入更多的状态时,独热码的译码逻辑并不会变得更加复杂,速度仅取决于到某特定状态的转移数量。此外,独热码还具有诸如设计简单、修改灵活、易于综合和调试等优点。但值得注意的是,相对于二进制码,独热码速度更快但占用面积较大。

15、modu1estate_machine(inpute1k,Ioca1paramIoca1paramIoca1paramIoca1paramoutputreg3:0stateout);STATE_A=4,b0001;STATE_B=4,b0010;STATE_C=4,b0100;STATE_D=4,b1000;reg3:0current_state,next_state;a1ways(posedgee1k)begincurrentstate=nextstate;/当时钟上升沿到来时更新状态enda1ways(*)begincase(current_state)STATE_A:next_stateSTATEB:next_stateSTATEC:next_stateSTATED:next_statedefau1t:next

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

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

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

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

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



客服