实验内容要求:
1、设计一个三状态转换的顺序状态机;
2、具有低电平异步复位功能;
3、状态机的功能实现需在上升沿触发的条件下执行(即cIk上升沿控制);
4、可通过设定功能按钮模拟顺序状态机状态转换过程;
5、观察仿真波形;
代码:
module qwe(clk,reset,in,out,clk1);
input clk,reset,in;
output[3:0] out;
output clk1;
reg[3:0] out;
reg[1:0] state;
reg[28:0] cnt;
reg clk1;
parameter s0=2'h0,s1=2'h1,s2=2'h2,s3=2'h3;
always @(posedge clk1 or negedge reset)
begin
if(!reset) begin out<=2'b00;state<= s0; end
else begin
case(state)
s0:begin if(in) begin out<=4'b0001;state<= s1; end
else begin out<=4'b0000;state<= s0;end end
s1:begin if(in) begin out<=4'b0010;state<= s2;end
else begin out<=4'b0000;state<= s0;end end
s2:begin if(in)begin out<= 4'b0100;state<= s3;end
else begin out<=4'b0000;state<= s0;end end
s3:begin out<=4'b1000;state<= s0;end
default:state=s0;
endcase
end
end
always @(posedge clk or negedge reset)
begin
if(!reset) begin clk1=0;cnt=0; end
else if(cnt <= 28'd1000)
cnt = cnt + 1;
else
begin clk1 = ~clk1;
cnt = 0;end
end
endmodule
测试文件:
`timescale 1 ps/ 1 ps
module qwe_v();
reg clk;
reg in;
reg reset;
wire clk1;
wire [3:0] out;
qwe i1 (
.clk(clk),
.clk1(clk1),
.in(in),
.out(out),
.reset(reset)
);
always #10 clk=~clk;
initial
begin
clk=1;
in=0;
reset=0;
#100;
in=1;
reset=1;
end
endmodule
波形图如下: