状态机测试[verilog语言]

一、实验任务一

实现一个测试过程,该过程包括启动准备状态、启动测试、停止测试、查询测试结果、显示测试结果、测试结束返回初始化6个状态;用时间来控制该过程,90秒内完成该过程.

1.创建项目

(1).点击File->New Project Wizard
在这里插入图片描述
(2).填写项目名称
在这里插入图片描述
(3).一直next到Family, Device & Board Settings
在这里插入图片描述
(4).选择ModelSim-Altera
在这里插入图片描述
(5).点击finish
在这里插入图片描述

2.代码部分

(1).

module state(
   input wire clk,
	input wire rst_n,
	
	output reg [3:0] led



);
parameter TIME_NUM=89;//90s
parameter MAX_NUM = 26'd49_999_999;//1s
reg [25:0] cnt;//1s计数器

reg [6:0] time_cnt;//90s计数器
reg [2:0] state;//当前状态

parameter ready = 0;			// 准备状态,经过20s,led不亮
parameter start_s = 1;		// 启动测试状态, 再经过20s,led0亮
parameter stop_s = 2;		// 停止测试状态, 再经过10s,led1亮
parameter find_s = 3;		// 查询测试结果状态, 再经过20s,led2亮
parameter dis_s = 4;		   // 显示测试结果状态, 再经过10s,led3亮
parameter fin_s = 5;			// 测试结束状态, 再经过10s,led全亮


always@(posedge clk or negedge rst_n)begin
   if(!rst_n)begin
	   cnt <= 26'd0;
	   time_cnt <= 7'd0;	
	end
	else if(cnt == MAX_NUM)begin
	     cnt <= 26'd0;
		if(time_cnt == TIME_NUM)begin
		  time_cnt <= 7'd0;
		 end
		 else begin
		  time_cnt <= time_cnt + 1'b1;
		 end
	end
	else begin
	   cnt <= cnt + 1'd1;
   end	
end

always@(posedge clk or negedge rst_n)begin
	if(!rst_n)
		state <= ready;
	else
		case(state)
			ready:begin//inital	
					if(time_cnt == 19)begin
						state <= start_s;
						end
					else begin
						state <= ready;
						end
				end
			start_s:begin//ready
					if(time_cnt == 39)begin
						state = stop_s;
						end
					else begin
						state <= state;
						end
				end
			stop_s:begin//start
					if(time_cnt == 
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值