《Verilog HDL数字系统设计与应用》 课件 FPGA-第7章-基本时序逻辑电路的设计.pptx

《Verilog HDL数字系统设计与应用》 课件 FPGA-第7章-基本时序逻辑电路的设计.pptx

  1. 1、本文档共62页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多

第7章有限状态机的设计;有限状态机(Finite-StateMachine,FSM)简称状态机,是表示有限个状态以及在这些状态之间的转移和动作等行为的数学模型。状态机是一种实现高可靠控制模块的经典方法,具有速度快、可靠性高、结构简单等优点,是数字系统设计的重要组成部分。在VerilogHDL设计中,常用always和case来描述状态机。;有限状态机是由组合逻辑和寄存器逻辑构成的时序电路,组合逻辑主要用于状态的判断、译码和信号的产生输出,寄存器逻辑主要负责状态的存储和转移。有限状态机可分为两类:摩尔型(Moore)和米里型(Mealy)。;如图7.1所示,摩尔型状态机的输出仅由当前状态决定。状态机的输出会在一个完整的时钟周期后保持稳定,即当输入变化时,还需等下一个时钟的到来,输出才会发生变化(异步输出)。;如图7.2所示,米里型状态机的输出由当前状态和输入信号决定。状态机的输出在一个完整的时钟周期内就保持稳定,即当输入变化时,输出也立即发生变化(同步输出)。;有限状态机有三种表示方法:流程图(ASM图)、状态图(状态转移图)、状态表。三种表示方法是可以相互转换的,但状态图是最常用的表示方式(延用数字逻辑电路时序电路的表示方式)。在VerilogHDL设计中,常用一段式、两段式和三段式来描述状态机。;状态图的每个圆圈表示一个状态,每个箭头表示一次跳转。摩尔型状态机的输出写在圆圈内,如图7.3所示。米里型状态机的输入和输出写在箭头上,如图7.4所示。;有限状态机属于时序电路,设计的对象包括:状态寄存器(现态:CurrentState)、状态逻辑(次态:NextState)和输出逻辑(输出:OutputLogic)。次态的描述应该按照状态图、状态表或者流程图进行跳转,在描述风格上主要分为以下三种:

(1)一段式:在一个always中将现态、次态和输出逻辑写在一起。这种方法不容易维护,特别是状态复杂时容易出错。

(2)两段式:将现态和次态放在一个always中,将输出逻辑写在另一个always中;或者将现态放在一个always中,将次态和输出逻辑写在另一个always中。这种方法便于阅读、维护,有利于综合器优化代码。但是,在描述当前状态的输出采用组合逻辑实现,容易产生毛刺。

(3)三段式:将现态、次态和输出逻辑分别写在三个always中描述。与两段式相比,三段式是根据上一状态的输入条件决定当前的状态输出,在不插入时钟的前提下实现寄存器输出的,从而消除了组合逻辑输出带来的亚稳态和毛刺的隐患,而且更有利于综合和布局布线。;采用一段式、两段式和三段式分别设计模6计数器:系统带有同步复位端(低电平复位);计数器从0开始计数到5(101),输出端z等于1;计数器状态编码采用顺序编码。;模6计数器的状态跳转需6次,这里采用localparam对6种状态进行顺序编码。在同一个always语句中对现态、次态和输出逻辑统一描述。

【例7.1】采用一段式状态机描述模6计数器(方法一)。

`timescale1ns/1ps

modulefsm_counter6_1(Q,z,clk,Res);

outputreg[2:0]Q;

outputregz;

inputclk;

inputRes;

reg[2:0]state;

localparam[2:0]s0=3b000,s1=3b001,s2=3b010,//状态编码

s3=3b011,s4=3b100,s5=3b101;

always@(posedgeclk);begin

if(Res==0)

beginstate=s0;Q=0;z=0;end//同步复位

else

begin

case(state)

s0:beginstate=s1;Q=3b000;z=0;end

s1:beginstate=s2;Q=3b001;z=0;end

s2:beginstate=s3;Q=3b010;z=0;end

s3:beginstate=s4;Q=3b011;z=0;end

s4:beginstate=s5;Q=3b100;z=0;end

s5:beginstate=s0;Q=3b101;z=1;end

default:beginstate=s0;Q=3b000;z=0;end

//多余的状态处理

endcase

end

end

endmodule;例7.1设计了一个带同步复位端的模6计数器。在时钟上升沿的瞬间检测Res为低电平时复位,为高电平时机器正常工作;采用case语

您可能关注的文档

文档评论(0)

balala11 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档