文档介绍:实验七有限状态机
实验原理:
本实验“移动速度可控的HELLO的自动循环显示”通过状态机的不同状态来确定显示的速度可控。实验中用到的有限状态机含有一组具有“记忆”功能的寄存器,这些寄存器的功能功能是记忆有限状态机的内部状态。此实验的调速是根据外部的控制来影响显示的速度,故此状态机为mealy型有限状态机。通过外部的按键key来控制不同的工作状态,再通过不同状态来判断现实的速度。
S0/00
S3/11
S2/10
S1/01
start
key/00
key/01
key/11
key/00
key/01
key/10
key/11
key/11
状态转移图
实验功能:
当按下键盘key1时,移动速度增加一倍;当按下key2时,移动速度减小一半。实验中通过两位的存储空间来定义两个按键。
实验源代码:
module Hello(clk,clr,key,HEX0,HEX1,HEX2,HEX3,HEX4,HEX5,HEX6,HEX7);
input clk,clr;
input[1:0]key;
output[6:0] HEX0,HEX1,HEX2,HEX3,HEX4,HEX5,HEX6,HEX7;
reg[6:0] HEX0,HEX1,HEX2,HEX3,HEX4,HEX5,HEX6,HEX7;
reg[2:0] counter;
parameter H=7'b0001001,E=7'b0000110,L=7'b1000111,O=7'b1000000,k=7'b1111111;
parameter s0=2'b00,s1=2'b01,
s2=2'b10,s3=2'b11;
always @(posedge clk or posedge clr)
if(clr)
counter=0;
else
begin
case(key)
s0:
counter<=counter;
s1:
counter<=(counter+1)%8;
s2:
counter<=(counter+2)%8;
s3:
counter<=(counter-1+8)%8;
default: counter<=counter;
endcase
end
always@(posedge clk or posedge clr)
if(clr)
begin
HEX0=O;HEX1=L;HEX2=L;HEX3=E;HEX4=H;HEX5=k;HEX6=k;HEX7=k;
end
else
begin
case(counter)//
3'b000: begin
HEX0=O;HEX1=L;HEX2=L;HEX3=E;HEX4=H;HEX5=k;HEX6=k;HEX7=k;end
3'b001: begin
HEX0=k;HEX1=O;HEX2=L;HEX3=L;HEX4=E;HEX5=H;HEX6=k;HEX7=k;end
3'b010:begin
HEX0=k;HEX1=k;HEX2=O;HEX3=L;HEX4=L;HEX5=E;HEX6=H;HEX7=k;end
3'b011:begin
HEX0=k;HEX1=k;HEX2=k;HEX3=O;HEX4=L;HEX5=L;HEX6=E;HEX7=H;end
3'b100:begin
HEX0=H;HEX1=k;HEX2=k;HEX3=k;HEX4=O;HEX5=L;HEX6=L;HEX7=E;end
3'b101:begin
HEX0=E;HEX1=H;HEX2=k;HEX3=k;HEX4=k;HEX5=O;HEX6=L;HEX7=L;end
3'b110:begin
HEX0=L;HEX1=E;HEX2=H;HEX3=k;HEX4=k;HEX5=k;HEX6=O;HEX7=L;end
3'b111:begin
HEX0=L;HEX1=L;HEX2=E;HEX3=H;HEX4=k;HEX5=k;HEX6=k;HEX7=O;end
default: begin
HEX0=k;HEX1=k;HEX2=k;HEX3=k;HEX4=k;HEX5=k;HEX6=k;HEX7=k;end
endcase
end
endmodule
测试代码:
`timescale 1ns/1ns
module hellotest;
reg clk;
reg clr;
reg[1:0]key;
wire[6:0] HEX0,HEX1,HEX2,HEX3,HEX4,HEX5,HEX6