FPGA——顺序状态机的设计

实验内容要求:

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

波形图如下:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值