《有限状态机的设计》PPT课件.ppt_第1页
《有限状态机的设计》PPT课件.ppt_第2页
《有限状态机的设计》PPT课件.ppt_第3页
《有限状态机的设计》PPT课件.ppt_第4页
《有限状态机的设计》PPT课件.ppt_第5页
已阅读5页,还剩52页未读 继续免费阅读

下载本文档

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

文档简介

第8章 有限状态机的设计 Verilog HDL数字系统设计及仿真 Verilog HDL数字系统设计及仿真 本章内容 有限状态机的类型 一段式、两段式和三段式状态机写法 状态编码 2 Verilog HDL数字系统设计及仿真 有限状态机的类型 moore型,也称为摩尔型 mealy型,也称为米利型 3 Verilog HDL数字系统设计及仿真 moore型红绿灯 状态转换图 4 Verilog HDL数字系统设计及仿真 模型代码 module trafficlight1(clock,reset,red,yellow,green); input clock,reset; /输入时钟和复位信号 output red,yellow,green; /输出红黄绿的驱动信号 reg red,yellow,green; reg 1:0 current_state,next_state; /保存当前状态和下一状态 parameter red_state=2b00, yellow_state=2b01, green_state=2b10, delay_r2y=4d8, delay_y2g=4d3, delay_g2r=4d11; /参数声明 5 Verilog HDL数字系统设计及仿真 /第一段always,用于把下一状态赋值给当前状态 always (posedge clock or posedge reset) begin if(reset) current_state=red_state; else current_state=next_state; end 6 Verilog HDL数字系统设计及仿真 /第二段always,用于根据当前状态判断下一状态, 并产生输出always (current_state) begin case(current_state) red_state:begin red=1; yellow=0; green=0; repeat (delay_r2y) (posedge clock); next_state=yellow_state; end 7 Verilog HDL数字系统设计及仿真 完成状态描述 yellow_state:begin red=0; yellow=1; green=0; repeat (delay_y2g) (posedge clock); next_state=green_state; end green_state:begin red=0; yellow=0; green=1; repeat (delay_g2r) (posedge clock); next_state=red_state; end default:begin red=1; yellow=0; green=0; next_state=red_state; end endcase end endmodule 8 Verilog HDL数字系统设计及仿真 测试信号 initial clock=0; always #10 clock=clock; initial begin reset=1; #1 reset=0; /产生一个复位信号沿 #10000 reset=1; /主要工作时间 #20 $stop; end 9 Verilog HDL数字系统设计及仿真 功能仿真 时序仿真 10 Verilog HDL数字系统设计及仿真 增加一个可变计数器 always (posedge clock or posedge reset) begin if(reset) light_count=0; else if (light_count=light_delay) /达到规定的计数值light_delay时置1 light_count=1; else light_count=light_count+1; end 11 Verilog HDL数字系统设计及仿真 case(current_state) red_state:begin red=1; yellow=0; green=0; light_delay=red_delay; if(light_count=light_delay) next_state=yellow_state; end yellow_state:begin red=0; yellow=1; green=0; light_delay=yellow_delay; if(light_count=light_delay) next_state=green_state; end 12 Verilog HDL数字系统设计及仿真 green_state:begin red=0; yellow=0; green=1; light_delay=green_delay; /延迟时间被赋值为green时的延迟 if(light_count=light_delay) /达到延迟时间变为下一状态 next_state=red_state; end 13 Verilog HDL数字系统设计及仿真 mealy型红绿灯 状态转换图 14 Verilog HDL数字系统设计及仿真 设计模块 module trafficlight3(clock,reset,x,red,yellow,green); input clock,reset; input x; /多添加了一个输入端x output red,yellow,green; reg red,yellow,green; reg 1:0 current_state,next_state; parameter red_state=2b00, yellow_state=2b01, green_state=2b10, delay_r2y=4d8, delay_y2g=4d3, delay_g2r=4d11; 15 Verilog HDL数字系统设计及仿真 always (posedge clock or posedge reset) /原态和新态的转换 begin if(reset) current_state=red_state; else current_state=next_state; end 16 Verilog HDL数字系统设计及仿真 always (current_state or x) begin case(current_state) red_state:begin red=1; yellow=0; green=0; if(x=1) /红灯时若x为1,则把下一状态指向黄灯 begin repeat (delay_r2y) (posedge clock); next_state=yellow_state; end end 17 Verilog HDL数字系统设计及仿真 yellow_state:begin red=0; yellow=1; green=0; repeat (delay_y2g) (posedge clock); next_state=green_state; end green_state:begin red=0; yellow=0; green=1; repeat (delay_g2r) (posedge clock); next_state=red_state; end 18 Verilog HDL数字系统设计及仿真 default:begin red=1; yellow=0; green=0; next_state=red_state; end endcase end endmodule 19 Verilog HDL数字系统设计及仿真 仿真波形 20 Verilog HDL数字系统设计及仿真 一段式状态机 检测输入信号0110 状态转换图 21 Verilog HDL数字系统设计及仿真 状态转换表 22 Verilog HDL数字系统设计及仿真 声明部分 module fsm_seq1(x,z,clk,reset); input x,clk,reset; output z; reg z; reg2:0state; parameter s0=d0,s1=d1,s2=d2,s3=d3,s4=d4; 23 Verilog HDL数字系统设计及仿真 一段always always(posedge clk or posedge reset) /仅有一段always begin if(reset) /复位信号有效 begin state=s0; /回到初始状态 z=0; /z输出0 end 24 Verilog HDL数字系统设计及仿真 S0状态S1状态 else casex(state) s0: begin if(x=1) begin state=s0; z=0; end else begin state=s1; z=0; end end s1: begin if(x=0) begin state=s1; z=0; end else begin state=s2; z=0; end end 25 Verilog HDL数字系统设计及仿真 S2状态S3状态 s2: begin if(x=0) begin state=s1; z=0; end else begin state=s3; z=0; end end s3: begin if(x=0) begin state=s4; z=1; end else begin state=s0; z=0; end end 26 Verilog HDL数字系统设计及仿真 S4状态结束 s4: begin if(x=0) begin state=s1; z=0; end else begin state=s2; z=0; end end default: state=s0; endcase end endmodule 27 Verilog HDL数字系统设计及仿真 功能仿真波形 时序仿真波形 28 Verilog HDL数字系统设计及仿真 一段式特点 仅有一段always结构,里面包含了 状态转换、复位和输出; always结构的敏感列表是时钟沿, 所以最后的输出结构是以寄存器形式 输出,即时序逻辑输出的 29 Verilog HDL数字系统设计及仿真 两段式状态机 声明部分 module fsm_seq2(x,z,clk,reset); input x,clk,reset; output z; reg z; reg2:0state,nstate; /state表示原态,nstate表示新态 parameter s0=d0,s1=d1,s2=d2,s3=d3,s4=d4; 30 Verilog HDL数字系统设计及仿真 第一段always第二段always always (posedge clk or posedge reset) begin if(reset) state=s0; else state=nstate; end always(state or x) begin casex(state) s0: begin if(x=1) begin nstate=s0; z=0; end else begin nstate=s1; z=0; end end 31 Verilog HDL数字系统设计及仿真 s1s2 s1: begin if(x=0) begin nstate=s1; z=0; end else begin nstate=s2; z=0; end end s2: begin if(x=0) begin nstate=s1; z=0; end else begin nstate=s3; z=0; end end 32 Verilog HDL数字系统设计及仿真 s3s4 s3: begin if(x=0) begin nstate=s4; z=1; end else begin nstate=s0; z=0; end end s4: begin if(x=0) begin nstate=s1; z=0; end else begin nstate=s2; z=0; end end default: nstate=s0; endcase end 33 Verilog HDL数字系统设计及仿真 仿真波形 fsm_seq1的输出z发生在每个clk上升沿的位置 ,fsm_seq2的输出z发生在x变化的位置 fsm_seq1的输出维持一个周期,fsm_seq2的 输出维持半个周期。 最后的输出采用组合逻辑电路 34 Verilog HDL数字系统设计及仿真 三段式状态机 除always外无区别 /第一段always,完成原态到新态的转换 always (posedge clk or posedge reset) begin if(reset) state=s0; else state=nstate; end 35 Verilog HDL数字系统设计及仿真 /第二段always,指定新态的变化 always(state or x) begin casex(state) s0: begin if(x=1) nstate=s0; else nstate=s1; end s1: begin if(x=0) nstate=s1; else nstate=s2; end s2: begin if(x=0) nstate=s1; else nstate=s3; end s3: begin if(x=0) nstate=s4; else nstate=s0; end s4: begin if(x=0) nstate=s1; else nstate=s2; end default: nstate=s0; endcase end 36 Verilog HDL数字系统设计及仿真 always(state or x) /第三段always,指定不同状态下的输出 begin casex(state) s0: z=0; s1: z=0; s2: z=0; s3: begin if(x=0) z=1; else z=0; end s4: z=0; default: z=0; endcase end 37 Verilog HDL数字系统设计及仿真 Mealy型的五种输出敏感列表 always(state or x) if(state=xxx and x=yyy) always(state) always(nstate) always(posedge clk) case(state) always(posedge clk) case(nstate) 38 Verilog HDL数字系统设计及仿真 时序图 39 Verilog HDL数字系统设计及仿真 Moore型的四种输出敏感列表 always(state) always(nstate) always(posedge clk) case(state) always(posedge clk) case(nstate) 40 Verilog HDL数字系统设计及仿真 时序图 41 Verilog HDL数字系统设计及仿真 状态编码的选择 二进制码 parameter s0=3b000,s1=3b001,s2=3b010, s3=3b011,s4=3b100; 格雷码 parameter s0=3b000,s1=3b001,s2=3b011, s3=3b010,s4=3b110; 独热码 parameter s0=5b00001,s1=5b00010,s2=5b00100, s3=5b01000,s4=5b10000; 42 Verilog HDL数字系统设计及仿真 独热码状态机 状态转换图 43 Verilog HDL数字系统设计及仿真 设计代码 声明部分 module ex8_1(clock,reset,x,y1,y2); input clock,reset; input x; output y1,y2; reg y1,y2; reg3:0 cstate,nstate; /本例中采用独热码,当然使用二进制码也可 parameter s0=4b0001,s1=4b0010, s2=4b0100,s3=4b1000; 44 Verilog HDL数字系统设计及仿真 /第一段always,原态变新态 always (posedge clock or posedge reset) begin if(reset) cstate=s0; else cstate=nstate; end 45 Verilog HDL数字系统设计及仿真 /第二段always,状态转换 always (cstate or x) begin case(cstate) s0:begin if(x=0) nstate=s1; else nstate=s3; end s1:begin if(x=0) nstate=s2; else nstate=s0; end s2:begin if(x=0) nstate=s3; else nstate=s1; end s3:begin if(x=0) nstate=s0; else nstate=s2; end default:nstate=s0; endcase end 46 Verilog HDL数字系统设计及仿真 s2:begin if(x=0) y1=0; else y1=0; end s3:begin if(x=0) y1=0; else y1=1; end default:y1=0; endcase end /第三段always,产生输出 always (cstate or x) begin case(cstate) s0:begin if(x=0) y1=1; else y1=0; end s1:begin if(x=0) y1=0; else y1=0; end 懒! 47 Verilog HDL数字系统设计及仿真 简化输出 always (cstate or x) /在输出比较简单时,也可以使用if来确定输出值 begin if(cstate=s0 else if(cstate=s3 else y2=0; end 48 Verilog HDL数字系统设计及仿真 进一步精简 always (cstate or x) begin if(cstate=s0 else y2=0; end 49 Verilog HDL数字系统设计及仿真 功能仿真波形 时序仿真波形 50 Verilog HDL数字系统设计及仿真 格雷码状态机 状态转换图 51 Verilog HDL数字系统设计及仿真 声明部分 module

温馨提示

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

评论

0/150

提交评论