目录

银杏科技有限公司旗下技术文档发布平台
技术支持电话0379-69926675-801
技术支持邮件Gingko@vip.163.com
版本 日期 作者 修改内容
V1.0 2020-07-01 gingko 初次建立

实验七:状态机实验——两段状态机描述

一、 实验目的与意义

  1. 掌握两段式状态机的描述方法。
  2. 掌握宏定义、参数变量的使用方法。
  3. 掌握QuartusII的使用方法。

二、 实验设备及平台

  1. iCore4 双核心板。
  2. Blaster(或相同功能)仿真器。
  3. Micro USB线缆。
  4. QuartusII开发平台。
  5. 电脑一台。

三、 实验原理

四、 代码讲解

//控制led亮灭的状态机
//状态机流程,上电复位后进入空闲状态,并点亮红色led,然后等待按键按下
//当检测到按键的下降沿时,led_cnt加1,加至2时,清零,并依此循环
//依此来实现按键控制三色led状态切换的功能
reg [1:0]led_cnt;//led_cnt三个状态,0、1、2,代表三色led的红、绿、蓝
reg ledr,ledg,ledb;    
 
//状态跳转逻辑设计always块,检测到按键下降沿,切换led_cnt值 
always@(negedge key_state or negedge rst_n)	 
	if (!rst_n)
	    begin
		led_cnt <= 2'd0;
	    end
	else if (led_cnt == 2'd2)
	    begin
		led_cnt <= 2'd0;
	    end
	else led_cnt <= led_cnt + 1'd1;
 
//逻辑输出,根据led_cnt来切换led状态
 always@(posedge clk_25m or negedge rst_n)		
	if (!rst_n)
	    begin
		ledr <= 1'd1;
		ledg <= 1'd1;
		ledb <= 1'd1;
	    end
	else case(led_cnt)
		2'd0:	        //红灯亮				
			begin
				ledr <= 1'd0;
				ledg <= 1'd1;
				ledb <= 1'd1;
			end
		2'd1:		//绿灯亮				
			begin
				ledr <= 1'd1;
				ledg <= 1'd0;
				ledb <= 1'd1;
			end
		2'd2:		//蓝灯亮		
			begin
				ledr <= 1'd1;
				ledg <= 1'd1;
				ledb <= 1'd0;
			end
		default:	//都不亮
			begin
				ledr <= 1'd1;
				ledg <= 1'd1;
				ledb <= 1'd1;
			end
		endcase	

五、 实验步骤及实验结果

图7-1

  1. 将硬件正确连接,如图7-1所示。
  2. 将编写好的代码进行编译,并下载到开发板中;
  3. 观察实验现象——依次按下按键,三色led灯状态按红、绿、蓝、红……切换。

六、 拓展实验

  1. 通过Signaltap II采样led_cnt信号和led输出信号,观察信号变化。