2014北航_Verilog_06_有限状态机.ppt_第1页
2014北航_Verilog_06_有限状态机.ppt_第2页
2014北航_Verilog_06_有限状态机.ppt_第3页
2014北航_Verilog_06_有限状态机.ppt_第4页
2014北航_Verilog_06_有限状态机.ppt_第5页
已阅读5页,还剩47页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、1,第六讲、FSM有限状态机,电子电路设计训练数字部分(Verilog),提纲,6.1 基本概念 6.2 简单的有限状态机设计 状态转移图表示 RTL级可综合的Verilog模块表示,3,6.1基本概念,数据流动控制,生成与时钟精 确配合的开关 时序是计算逻 辑的核心。,问题:如何准确实现数据在各个寄存器、逻辑电路中的流动控制?比如:如何实现寄存器C的值准确存入到寄存器A中?,4,6.1基本概念,如果能严格以时钟跳变沿为前提,按排好时序,来操作逻辑系统中每一个开关si,则系统中数据的流动和处理会按同一时钟节拍有序地进行,避免了冒险和竞争现象,时延问题就能有效地加以解决。,5,6.1基本概念,如

2、果我们能设计这样一个电路:,1)能记住自己目前所处的状态 ; 2)状态的变化只可能在同一个时钟的跳变沿时刻发生,而不可能发生在任意时刻; 3)在时钟跳变沿时刻,如输入条件满足,则进入下一状态,并记住自己目前所处的状态,否则仍保留原来的状态; 4)在进入不同的状态时刻,对系统的开关阵列做开启或关闭的操作。,6,6.1基本概念,如果我们能设计这样一个电路:,有了以上电路,我们就不难设计出复杂的控制序列来操纵数字系统的控制开关阵列。能达到以上要求的电路就是时序和组合电路互相结合的产物:同步有限状态机和由状态和时钟共同控制的开关逻辑阵列。 只要掌握有限状态机的基本设计方法,加上对基本电路的掌握,再加上

3、对数据处理的过程的细致了解,就可以规避由于逻辑器件和布线延迟产生的“竞争冒险”现象所造成的破坏,设计出符合要求的复杂数字逻辑系统。,7,6.1基本概念,是由寄存器组和组合逻辑构成的时序电路,公共时钟信号。 状态的改变只可能发生在时钟的跳变沿上。 状态是否改变以及如何改变取决于当前状态与输入信号。 状态机可用于产生在时钟跳变沿开关的复杂的控制逻辑,是同步数字逻辑的控制核心。,有限状态机(Finite State Machine,FSM),8,6.1基本概念,Mealy状态机,下一状态=F(当前状态,输入信号); 输出信号=G(当前状态,输入信号);,9,6.1基本概念,Moore状态机,下一状态

4、=F(当前状态,输入信号); 输出信号=G(当前状态);,激励信号,当前状态,时钟信号clk,输出,10,6.1基本概念,带流水线输出的Mealy状态机,输出,时钟信号clk,输入,下一状态=F(当前状态,输入信号); 输出信号=G(当前状态,输入信号);,11,6.2 简单的有限状态机设计,状态转移图表示 RTL级可综合的Verilog模块表示,12,6.2 简单的有限状态机设计,状态转移图表示,状态 转移 条件 开关(操作),图形表示:,13,6.2 简单的有限状态机设计,有限状态机的Verilog描述,1.定义模块名和输入输出端口 2.定义输入、输出变量或寄存器 3.定义时钟和复位信号

5、4.定义状态变量和状态寄存器 5.用时钟沿触发的always块表示状态转移过程 6.在复位信号有效时给状态寄存器赋初始值 7.描述状态的转换过程 8.验证状态转移的正确性,必须完整和全面,14,6.2 简单的有限状态机设计,状态转移图 模块定义,module fsm (Clock, Reset, A, K2, K1); input Clock, Reset, A; /定义时钟、复位和输入信号 output K2, K1; /定义输出控制信号的端口 reg K2, K1; /定义输出控制信号的寄存器 reg 1:0 state ; /定义状态寄存器,15,6.2 简单的有限状态机设计,有限状态机

6、的Verilog描述:方法一,module fsm (Clock, Reset, A, K2, K1); input Clock, Reset, A; /定义时钟、复位和输入信号 output K2, K1; /定义输出控制信号的端口 reg K2, K1; /定义输出控制信号的寄存器 reg 1:0 state ; /定义状态寄存器 parameter Idle = 2b00, Start = 2b01, Stop = 2b11, Clear = 2b10; /定义状态变量参数值 always (posedge Clock) if (!Reset) begin /定义复位后的初始状态和输出值

7、 state = Idle; K2=0; K1=0; end,采用Gray 编码,16,6.2 简单的有限状态机设计,有限状态机的Verilog描述:方法一(续),else case (state) Idle: begin if (A) begin state = Start; K1=0; end else state = Idle; end Start: begin if (!A) state = Stop; else state = Start; end,17,6.2 简单的有限状态机设计,有限状态机的Verilog描述:方法一(续),Stop: begin /符合条件进入新状态,否则留在

8、原状态 if(A) begin state= Clear; K2= 1; end else state = Stop; end Clear: begin if(!A | !Reset) begin state= Idle; K2=0; K1=1; end else state = Clear; end endcase endmodule,18,6.2 简单的有限状态机设计,有限状态机的Verilog描述:方法二,采用独热(one-hot) 编码,module fsm (Clock, Reset, A, K2, K1); input Clock, Reset, A; /定义时钟、复位和输入信号

9、output K2, K1; /定义输出控制信号的端口 reg K2, K1; /定义输出控制信号的寄存器 reg 3:0 state ; /定义状态寄存器 NOTE! parameter Idle= 4b1000, Start= 4b0100, Stop= 4b0010, Clear= 4b0001;,19,6.2 简单的有限状态机设计,有限状态机的Verilog描述:方法二(续),always (posedge clock) if (!Reset) begin state = Idle; K2=0; K1=0; end else case (state) Idle: if (A) begi

10、n state = Start; K1=0; end else state = Idle;,20,6.2 简单的有限状态机设计,有限状态机的Verilog描述:方法二(续),Start: if (!A) state = Stop; else state = Start; Stop: if (A) begin state = Clear; K2= 1; end else state = Stop; Clear: if (!A | !Reset) begin state =Idle; K2=0; K1=1; end else state = Clear; default: state = Idle

11、; /采用独热编码后产生了多余状态,有些状态不可达,增加 default项,确保最后回到Idle状态。 endcase endmodule,注:采用独热码可以使case电路控制更加简洁,从而提高电路的速度和可靠性。,21,6.2 简单的有限状态机设计,有限状态机的Verilog描述:方法三,对于较复杂 的状态机设计,思路:把状态的变化与输出开关的控制分成两部分来考虑;为调试方便,常把每个开关写成独立的always组合块。 优点:在调试多输出状态机时,这样做比较容易发现问题和改正模块编写中出现的问题。,22,6.2 简单的有限状态机设计,有限状态机的Verilog描述:方法三,module fs

12、m (Clock, Reset, A, K2, K1); input Clock, Reset, A; output K2, K1; reg K2, K1; reg 1:0 state, nextstate ; parameter Idle = 2b00, Start = 2b01, Stop = 2b10, Clear = 2b11;,23,6.2 简单的有限状态机设计,有限状态机的Verilog描述:方法三(续),/- 每一个时钟沿产生一次可能的状态变化- always (posedge Clock) begin if (!Reset) state = Idle; else state =

13、 nextstate; end /-,24,有限状态机的Verilog描述:方法三(续),/- 产生下一状态的组合逻辑 always (state or A) case (state) Idle: if (A) nextstate = Start; else nextstate = Idle; Start: if (!A) nextstate = Stop; else nextstate = Start; Stop: if (A) nextstate = Clear; else nextstate = Stop; Clear: if (!A !reset) nextstate = Idle;

14、else nextstate = Clear; default: nextstate =Idle; endcase,注意:这是组合逻辑,阻塞赋值,25,有限状态机的Verilog描述:方法三(续),/- 产生输出K1的组合逻辑 always (state or Reset or A) if (!Reset) K1=0; else if (state = Clear endmodule,26,6.2 简单的有限状态机设计,有限状态机的Verilog描述:方法四,用输出指定的 码表示状态,思路:直接把状态码定义为输出。即把状态码的指定与状态机控制的输出联系起来,把状态的变化直接用作输出。 优点:可

15、提高输出信号的开关速度并节省电路器件,常用在高速状态机中(不得已而为之)。 缺点:开关的维持时间必须与状态维持时间一致,往往需要增加中间状态。,27,6.2 简单的有限状态机设计,有限状态机的Verilog描述:方法四,module fsm (Clock, Reset, A, K2, K1, state); input Clock, Reset, A; output K2, K1; output 4:0 state; reg 4:0 state ; assign K2= state4; / 把状态变量的最高位用作输出K2 assign K1= state0; / 把状态变量的最低位用作输出K1

16、,28,6.2 简单的有限状态机设计,有限状态机的Verilog描述:方法四(续),parameter /-output coded state assignment /- K2_i_j_n_K1 Idle = 5b0_0_0_0_0, Start = 5b0_0_0_1_0, Stop = 5b0_0_1_0_0, StopToClear = 5b1_1_0_0_0, Clear = 5b0_1_0_1_0, ClearToIdle = 5b0_0_1_1_1;,29,6.2 简单的有限状态机设计,有限状态机的Verilog描述:方法四(续),always (posedge Clock) i

17、f (!Reset) begin state = Idle; end else case (state) Idle : if (A) state = Start; else state = Idle; Start: if (!A) state = Stop; else state = Start;,30,6.2 简单的有限状态机设计,有限状态机的Verilog描述:方法四(续),Stop: if (A) state = StopToClear; else state = Stop; StopToClear: state = Clear; Clear: if (!A | !Reset) stat

18、e = ClearToIdle; else state = Clear; ClearToIdle: state = Idle; default: state = Idle; endcase endmodule,31,6.2 简单的有限状态机设计,有限状态机的Verilog描述:方法四+(另一种方法),各状态的K2和K1取值,01,00,00,00,10,32,6.2 简单的有限状态机设计,有限状态机的Verilog描述:方法四(另一种方法),parameter /-output coded state assignment /- K2_i_j_K1 Idle = 5b0_0_0_0, Star

19、t = 5b0_0_1_0, Stop = 5b0_1_1_0, Clear = 5b1_1_0_0, ClearToIdle = 5b0_0_0_1;,33,always (posedge Clock) if (!Reset) begin state = Idle; end else case (state) Idle : if (A) state = Start; else state = Idle; Start: if (!A) state = Stop; else state = Start;,34,Stop: if (A) state = Clear; else state = St

20、op; Clear: if (!A | !Reset) state = Zero; else state = Clear; Zero: if (A) state = Start; else state = Idle; default: state = Idle; endcase endmodule,35,6.2 简单的有限状态机设计,小结: 上面四个例子是同一个状态机的四种不同的Verilog HDL模型,它们都是可综合的,在设计复杂程度不同的状态机时有它们各自的优势。如用不同的综合器对这四个例子进行综合,综合出的逻辑电路可能会有些不同,但逻辑功能是相同的。,36,6.3 状态机的测试,状态机

21、的测试模块,timescale 1ns/1ns module t; reg a; reg clock,rst; wire k2,k1; initial / initial常用于仿真时信号的给出。 begin a=0; rst = 1; /给复位信号变量赋初始值 clock = 0; /给时钟变量赋初始值 #20 rst = 0; /使复位信号有效 #120 rst = 1; /经过一个多周期后使复位信号无效 end,37,6.3 状态机的测试,状态机的测试模块(续),always #50 clock = clock; /产生周期性的时钟 always (posedge clock) /在每次时

22、钟正跳变沿时刻产生不同的a begin #30 a = $random%2; / 每次a是 0还是1是随机的。 #(3*50+12); / a 的值维持一段时间 end initial begin #100000 $stop; end /系统任务,暂停仿真以便观察仿真波形。 /- 调用被测试模块t.m - fsm m(.Clock(clock), .Reset(rst),.A(a),.K2(k2),.K1(k1); endmodule,38,6.4 状态机设计总结,有限状态机设计的一般步骤:,1.逻辑抽象,得出状态转换图 2.状态化简 3.状态分配 在触发器资源丰富的FPGA或ASIC设计中采

23、用独热编码(one-hot-coding)既可以使电路性能得到保证又可充分利用其触发器数量多的优势,也可以采取输出编码的状态指定来简化电路结构,并提高状态机的运行速度。 4.选定触发器的类型并求出状态方程、驱动方程和输出方程。 5.按照方程得出逻辑图,采用Verilog HDL来描述有限状态机,可以 充分发挥硬件描述语言的抽象建模能力,可由计算机自动完成,简化了电路设计,39,6.5 交通灯例子,40,6.5 交通灯例子,正常情况主干道绿灯,汽车通行,人行横道红灯,禁止通行; 有行人要过马路,进行人行请求,10秒后,主干道绿灯转黄灯; 主干道黄灯亮3秒后转红灯,同时人行横道红灯转绿灯,行人通行

24、; 行人通行30秒后,人行横道绿灯转黄灯; 人行横道黄灯亮3秒后转红灯,同时主干道红灯转绿灯,并在60秒内不再响应人行请求; 60秒后,行人可以继续进行人行请求过马路。,41,6.5 交通灯例子,如何设计状态转移图?,state0 :汽车通行状态,汽车绿灯亮; state1 :接受行人请求后延时10秒汽车绿灯亮; state2 :汽车黄灯亮; state3 :汽车红灯亮,行人绿灯亮; state4 :汽车红灯亮, 行人黄灯亮; state5 :行人红灯亮,汽车绿灯亮,但是不响应行人请求,42,6.5 交通灯例子,如何设计行为模型?,/行人过街交通灯控制器 module traffic3(rst

25、,clk,press,lights); inputrst;/异步复位信号输入,高电平复位 inputclk;/状态机时钟输入,设1 tick = 1s inputpress;/过街按键信号输入,高电平有效 output5:0lights;/交通灯控制输出 /内部信号 reg5:0count;/秒计数,最大60秒 reg2:0states;/状态值 reg5:0lights;/交通灯控制输出 parameterstate0=3d0, state1=3d1, state2=3d2,state3=3d3,state4=3d4, state5=3d5; parameterlights1=6b001_1

26、00, lights2=6b010_100, lights3=6b100_001, lights4=6b100_010;,43,6.5 交通灯例子,如何设计行为模型?,always(posedge rst or posedge clk) begin if(rst) begin count=6d0; states=state0; end else begin case(states) state0:/汽车通行状态,等待按键 begin if ( press ) begin states = state1;/如果请求键按下,转到状态1 count = 6d10; /同时将count初值给定为10,

27、灯光控制不变 end end,44,6.5 交通灯例子,如何设计行为模型?,state1:/ 汽车通行状态, / 但是请求键已经按下,延时10秒后起作用 begin if (count6d0) begin count=count-1; end else begin states=state2;/ 计数结束,转换状态, / 同时为下一个状态计数器赋初值3 count=6d3; end end,45,6.5 交通灯例子,如何设计行为模型?,state2:/ 汽车通道黄灯 begin if ( count6d0 ) begin count=count-1; end else/ 计数结束,转移到下一个

28、状态, / 同时为计数器赋初值 begin states=state3; count=6d27; / 行人绿灯27秒 / 黄灯3秒 end end,46,6.5 交通灯例子,如何设计行为模型?,state3:/汽车等待,行人通行,时间30秒 begin if(count6d0) begin count=count-1; end else begin states=state4; count=6d3; end end,47,6.5 交通灯例子,如何设计行为模型?,state4:/行人通行黄灯,时间3秒 begin if(count6d0) begin count=count-1; end else begin states=state

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论