- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
* * 状态机设计的一般原则 状态机的编码 one-hot消耗触发器多,组合逻辑少:FPGA gray消耗触发器少,组合逻辑多:CPLD 三段式状态机 * * 三段式状态机 三段式建模描述FSM的状态机输出时,只需指定case敏感表为次态寄存器,然后直接在每个次态的case分支中描述该状态的输出即可,不用考虑状态转移条件。 ???三段式描述方法虽然代码结构复杂了一些,但是换来的优势是使FSM做到了同步寄存器输出,消除了组合逻辑输出的不稳定与毛刺的隐患,而且更利于时序路径分组,一般来说在FPGA/CPLD等可编程逻辑器件上的综合与布局布线效果更佳。 * * 三段式状态机 示列如下: //第一个进程,同步时序always模块,格式化描述次态寄存器迁移到现态寄存器 always @ (posedge clk or negedge rst_n)? //异步复位 if(!rst_n) current_state = IDLE; else current_state = next_state;//注意,使用的是非阻塞赋值 * * 三段式状态机 //第二个进程,组合逻辑always模块,描述状态转移条件判断 always @ (current_state)?? //电平触发 begin ???? case(current_state) S1: if(...) next_state = S2;? //阻塞赋值 ... endcase end? * * 三段式状态机 //第三个进程,同步时序always模块,格式化描述次态寄存器输出 always @ (posedge clk or negedge rst_n) ...//初始化 case(next_state) S1: out1 = 1‘b1;? //注意是非阻塞逻辑 S2: out2 = 1b1; default:...?? //default的作用是免除综合工具综合出锁存器。 endcase end * * 用Verilog HDL语言设计可综合的状态机的指导原则 因为大多数FPGA内部的触发器数目相当多,又加上独热码状态机(one hot state machine)的译码逻辑最为简单,所以在设计采用FPGA实现的状态机时往往采用独热码状态机(即每个状态只有一个寄存器置位的状态机)。 * * 用Verilog HDL语言设计可综合的状态机的指导原则 建议采用case,casex,或casez语句来建立状态机的模型,因为这些语句表达清晰明了,可以方便地从当前状态分支转向下一个状态并设置输出。不要忘记写上case语句的最后一个分支default,并将状态变量设为bx,这就等于告知综合器:case语句已经指定了所有的状态,这样综合器就可以删除不需要的译码电路,使生成的电路简洁,并与设计要求一致。 * * 用Verilog HDL语言设计可综合的状态机的指导原则 状态机应该有一个异步或同步复位端,以便在通电时将硬件电路复位到有效状态,也可以在操作中将硬件电路复位(大多数FPGA结构都允许使用异步复位端)。 同步设计(一个时钟沿触发) * * 状态机的置位与复位 状态机的异步置位与复位 状态机的同步置位与复位 * * 状态机的异步置位与复位 异步置位与复位是与时钟无关的. 列入always块的事件控制括号内就能触发always块的执行 事件控制语法 @( 沿关键词 时钟信号 or 沿关键词 复位信号 or 沿关键词 置位信号 ) * * 状态机的异步置位与复位 事件控制实例 1)异步、高电平有效的置位(时钟的上升沿) @(posedge clk or posedge set) 2)异步低电平有效的复位(时钟的上升沿) @(posedge clk or negedge reset) 3)异步低电平有效的置位和高电平有效的复位(时钟的上升沿) @( posedge clk or negedge set or posedge reset ) * * 状态机的异步置位与复位 4)带异步高电平有效的置位与复位的always块样板 always @(posedge clk or posedge set or posedge reset)
文档评论(0)