| **银杏科技有限公司旗下技术文档发布平台** |||| |技术支持电话|**0379-69926675-801**||| |技术支持邮件|Gingko@vip.163.com||| ^ 版本 ^ 日期 ^ 作者 ^ 修改内容 ^ | V1.0 | 2020-05-20 | gingko | 初次建立 | ===== 实验九:软件复位控制实验——全局复位信号 ===== ==== 一、实验目的与意义 ==== - 掌握Verilog HDL语言的使用方法。 - 掌握QuartusII的使用方法。 - 掌握软件复位信号的工作原理及使用方法。 ==== 二、实验设备及平台 ==== - iCore4TX 双核心板。[[https://item.taobao.com/item.htm?spm=a1z10.1-c-s.w4004-22598974120.3.5923532fAsAtPz&id=614919247574|点击购买]] - USB-CABLE(或相同功能)的仿真器。 - Micro USB线缆。 - ISE开发平台。 - 电脑一台。 ==== 三、实验原理 ==== * 复位指的是在可编程器件、可编程控制器等电子设备中,为防止程序跑飞或者保证多个子程序同时运行,在程序中手动或者自动的方法使软硬件恢复到一个特定的工作节点的过程,而这个手动或自动控制的信号就是复位信号。手动复位可以通过按键复位实现,自动复位则是上电后产生一个脉冲信号,工程根据这脉冲信号做复位操作。 * 在FPGA程序中,一个复杂的功能由多个子模块共同完成,为了保证各个子模块同时运行,在程序内部设定一个全局复位信号。其工作原理时序如图9.1所示: {{ :icore4tx:icore4tx_fpga_9_1.png?direct |图9.1}} * 如图所示,是低电平复位,既rst_n信号为低电平的时候,程序进行复位操作。其复位原理是:将复位信号作为程序控制的触发信号,在复位信号(rst_n)下降沿处对控制总线进行复位,将其赋值为复位值,有效复位信号(低电平)结束后,可根据需要对控制总线重新进行赋值。 * 复位信号的作用是复位操作之后,程序中的变量或者信号处于一个稳定已知的状态,使程序按照设计功能运行。 ==== 四、代码讲解 ==== * 在iCore4TX核心板上并没有设计专用的按键复位电路。因此iCore4TX的复位操作均通软件复位实现。通过对原理图的理解,可以理解为复位信号就是一个在上电后不久就拉低 一段时间然后又拉高的信号;为了方便理解和观察,本例程通过复位信号控制LED灯的状态变化,直观的显示复位过程,并且将整个持续过程进行了拉长。复位信号的高低电平的跳变以及持续时间通过对系统时钟计数实现。 * ** 其代码如下:** //生成复位信号的计数器,采用时序逻辑语言描述 reg [31:0]rst_cnt = 32'd0; always@(posedge clk_25m) begin if(rst_cnt==32'd250000000) begin rst_cnt<=32'd250000000; end else begin rst_cnt <= rst_cnt + 32'd1; end end * 然后根据计数器的值控制复位信号拉低复位并持续约4秒(便于观察)。 //生成复位信号,有效复位时间大约为4秒钟,实际应用中不需要持续这么久。 reg rst_n = 1'd1; always@(posedge clk_25m) begin if((rst_cnt>32'd125000000) && (rst_cnt<32'd225000010)) begin rst_n <= 1'd0; end else begin rst_n <= 1'd1; end end * FPGA_LED根据复位信号,进行状态切换。上电之后,复位之前,LED置为低电平,状态为“亮”;复位时,置高电平,LED处于复位状态,为“灭”,复位结束后,LED再次置为低电平,状态为“亮”。代码如下: /*************************************************/ //通过复位信号对led的输出状态进行复位 //复位信号有效前将led置为低电平低电平(亮); //复位后大约4秒钟led处于复位状态,置为高电平(灭); //复位操作结束后,再次将led置为低电平(亮)。 reg fpga_led_r = 1'd1; always@(posedge clk_25m or negedge rst_n) begin if(!rst_n) begin fpga_led_r <= 1'd1; end else begin fpga_led_r <= 1'd0; end end assign fpga_led = fpga_led_r; ==== 五、实验步骤及实验结果 ==== {{ :icore4tx:icore4tx_fpga_9_2.png?direct&400 |图9.2}} 1、将硬件正确连接,如图9.2所示。\\ 2、将编写好的代码进行编译,并下载到开发板中;\\ 3、观察其实验结果——程序下载后,首先开发板上FPGA_LED为亮状态,经过大约5秒钟,复位信号有效,对FPGA_LED进行复位置为灭状态,复位大约4秒钟,再次点亮FPGA_LED。\\ ==== 六、拓展实验 ==== - 通过Signaltap工具采集复位信号和led控制信号,看是否与其工作原理一致。