verilog实现状态机

一、使用工具

Quartus 18.1

二、要求

1、根据以下描述功能用verilog编写一段代码, 并用状态机来实现该功能。
(1)状态机:实现一个测试过程,该过程包括启动准备状态、启动测试、停止测试、查询测试结果、显示测试结果、测试结束返回初始化6个状态;用时间来控制该过程,90秒内完成该过程;
(2)描述状态跳转时间;
(3)编码实现。
2. 画出可以检测10010串的状态图, 并用verilog编程实现之。

三、需求分析

对于第一个要求,是实现六个状态,并且用时间来控制这个过程,说简单一点,就是根据时间切换六个状态

对于第二个要求,需要检测10010的数据串,只有当10010依次输入时,才能通过检测,而实现这个功能,可以通过按键来模拟0和1的值,并且使用6个状态,只有当输入的值正确之后,才能进入下一个状态,不然就会回到出事状态

在这里插入图片描述

四、时序切换

  • 状态切换代码
module six_state (//90s内六个状态切换
    input wire clk,	//时钟,50M
	input wire rst_n,	//复位信号
	
	output wire [3:0] led //1s脉冲信号
);
//6个切换状态
parameter s1= 1;
parameter s2= 2;
parameter s3= 3;
parameter s4= 4;
parameter s5= 5;
parameter s6= 6;
//切换时间状态为1s
parameter MAX_NUM=26'd50_000_000;

reg [3:0] led_r;
reg [2:0] cstate;//现在的状态
reg [25:0] cnt;

//计数模块
always @(posedge clk or negedge rst_n) begin
    if(!rst_n)
		cnt <= 26'd0;
	else if (cnt == MAX_NUM)
		cnt <= 26'd0;
	else 	
		cnt <= cnt + 1'd1;
end

//状态切换模块
always @(posedge clk or negedge rst_n) begin
    if(!rst_n)
		cstate <= 3'b0;
	else if (cnt == MAX_NUM) begin
        if (cstate == 3'd6) begin
            cstate <= 3'b0;
        end else begin
            cstate <= cstate + 1'b1;
        end    
    end	
	else 	
		cstate <= cstate ;
end

//状态输出模块
always @(posedge clk or negedge rst_n) begin
    if(!rst_n)
		led_r <= 4'b0
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值