目录

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


实验十五:有限状态机实验——三段式状态机描述

一、 实验目的与意义

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

二、 实验设备及平台

  1. iCore4TX 双核心板。点击购买
  2. USB-CABLE(或相同功能)的仿真器。
  3. Micro USB线缆。
  4. ISE开发平台。
  5. 电脑一台。

三、 实验原理

四、 代码讲解

//控制led亮灭的状态机
//状态机流程,复位后进入空闲状态,等待约3s时间闸门打开,点亮led;当检测到时间
//闸门信号的高电平时,熄灭led,再次检测到时间闸门时切换至亮状态,如此循环。
    reg led_r;
    reg [2:0]led_current_state;//当前状态
    reg [2:0]led_next_state;//下一个状态
//状态跳转逻辑设计always块
    always@(posedge clk_25m or negedge rst_n)
        begin
            if(!rst_n)
                begin
                    led_current_state <= `state_idle;
                end
            else
                begin
                    led_current_state <= led_next_state;
                end
        end
//状态输出
    always@(led_current_state or state_sig or rst_n)
        begin
            if(!rst_n)
                begin
                    led_next_state <= `state_idle;
                end
            else
                begin
                    case(led_current_state)
                        `state_idle:begin
                            if(state_sig)
                                begin
                                    led_next_state <= `state_led_on;
                                end
                            else
                                begin
                                    led_next_state <= `state_idle;
                                end
                        end
                        `state_led_on:begin
                            if(state_sig)
                                begin
                                    led_next_state <= `state_led_off;
                                end
                            else
                                begin
                                    led_next_state <= `state_led_on;
                                end
                        end
                        `state_led_off:begin
                            if(state_sig)
                                begin
                                    led_next_state <= `state_led_on;
                                end
                            else
                                begin
                                    led_next_state <= `state_led_off;
                                end
                        end
                        default:begin
                            led_next_state <= `state_idle;
                        end
                    endcase
                end
        end
    always@(posedge clk_25m or negedge rst_n) //逻辑输出
        begin
            if(!rst_n)
                begin
                    led_r <= led_off;
                end
            else
                begin
                    case(led_next_state)
                        `state_idle:begin
                            led_r <= led_off;
                        end
                        `state_led_on:begin
                            led_r <= led_on;
                        end
                        `state_led_off:begin
                            led_r <= led_off;
                        end
                        default:begin
                            led_r <= led_off;
                        end
                    endcase
                end
        end

五、 实验步骤

图15.1

  1. 将硬件正确连接,如图15-1所示。
  2. 将编写好的代码进行编译,并下载到开发板中;
  3. 观察实验现象——FPGA_LED闪烁,间隔大约为3s;

六、 拓展实验

  1. 通过ChipScope Pro采样状态机跳转信号及状态切换,观察信号变化。
  2. 观察ChipScope Pro采样信号,对比一段式状态机、二段式状态机和三段式状态机状态跳转时序有何不同。