用户工具

站点工具


icore4tx_fpga_9

差别

这里会显示出您选择的修订版和当前版本之间的差别。

到此差别页面的链接

两侧同时换到之前的修订记录 前一修订版
后一修订版
前一修订版
icore4tx_fpga_9 [2020/05/22 15:06]
zgf 移除
icore4tx_fpga_9 [2022/04/01 11:37] (当前版本)
sean
行 2: 行 2:
 |技术支持电话|**0379-69926675-801**||| |技术支持电话|**0379-69926675-801**|||
 |技术支持邮件|Gingko@vip.163.com||| |技术支持邮件|Gingko@vip.163.com|||
-|技术论坛|http://​www.eeschool.org||| 
 ^  版本 ​ ^  日期 ​ ^  作者 ​ ^  修改内容 ​ ^ ^  版本 ​ ^  日期 ​ ^  作者 ​ ^  修改内容 ​ ^
-|  V1.0  |  2020-05-21  ​| ​ gingko ​ |  初次建立 ​ | +|  V1.0  |  2020-05-20  ​| ​ gingko ​ |  初次建立 ​ | 
  
-===== 实验PWM输出实验——不同PWM输出 ​=====+===== 实验软件复位控制实验——全局复位信号 ​=====
  
 ==== 一、实验目的与意义 ==== ==== 一、实验目的与意义 ====
  
-  - 掌握输出不同占空比PWM原理及方法。 +  - 掌握Verilog HDL语言使用方法。 
-  - 掌握宏定义、参数变量的使用方法。 +  - 掌握QuartusII的使用方法。 
-  - 掌握ISE的使用方法。+  - 掌握软件复位信号工作原理及使用方法。
  
 ==== 二、实验设备及平台 ==== ==== 二、实验设备及平台 ====
行 23: 行 22:
 ==== 三、实验原理 ==== ==== 三、实验原理 ====
  
-  * PWM全称Pulse Width Modulation,是脉冲宽度调缩写。它是通过对脉冲宽度进调制等效输出所需要的波形。PWM波形属性频率和占空比是两非常重要参数。本实验的主要目的就是通过FPGA的硬件语言描述实现不同频率、占空比的PWM信号输出。 +  * 复位指的在可编程器件、可编程控器等电子设备中,为防止程序跑飞或者保证多个子程序同时运行,在程序手动或者自动的方法使软硬件恢复到一特定工作节点的过程,这个手动或自动控制信号就是复位信号。手动复位可以通过按键复位实现,自动复位则是上电后产生一个脉冲信号,工程根据这脉冲信号做复位操作。 
-  * FPGA产生不同频率不同占空比的的原理是基于计数器实现的,通过对参考钟进计数控制某个信号高低电平输出实现频率和占空比的变化。其实现原理如图10.1所示,通过改变puty的值改变pwm的占空比,通过改变cycle的值改变pwm的频率。 +  * FPGA程序中,一个复杂功能由多个子模块共同完成为了保证各个子模块同行,在程序内部设定一全局复位信号。其工作原理时序如图9.1所示: 
-{{ :icore4tx:icore4tx_fpga_10_1.png?direct |图10.1}}+ 
 +{{ :icore4tx:icore4tx_fpga_9_1.png?direct |图9.1}} 
 +  * 如图所示,是低电平复位,既rst_n信号为低电平的时候,程序进行复位操作。其复位原理是:将复位信号作为程序控制的触发信号,在复位信号(rst_n)下降沿处对控制总线进行复位,将其赋值为复位值,有效复位信号(低电平)结束后,可根据需要对控制总线重新进行赋值。 
 +  * 复位信号的作用是复位操作之后,程序中的变量或者信号处于一个稳定已知的状态,使程序按照设计功能运行。
  
 ==== 四、代码讲解 ==== ==== 四、代码讲解 ====
-  * 原理是通过参考时钟进行计数,并在时钟计数器特定时刻进行高低电平的变换,来改变输出波形的频率和占空比。本实验中参考时钟为clk_25m,频率控制参为cycle,占空比参数为puty_50和puty_20频率为500KHz的波形计算方公式为:**clk_25m/​(cycle-1);​** +  * 在iCore4TX核心板上并没有设计专用的按键复位电路。因此iCore4TX的复位操作均通软件复位现。通过对原理图的理解,可以理解为复位信号就一个在上电后不久就拉低 一段时间然后又拉高的信号;为了方便理解和观察,本例程通过复位信号控制LED灯的状态变化,直观的显示复位过程,并且将整个持续过程进行了拉长。复位信号的高低电平的以及持续时间通过对系统时钟实现。 
-  * 占空比为20%的参数计算公式为:**puty_20/​cycle;​** +  * ** 其代码如下:**
-  * 占空比为50%的参数计算公式为:**puty_50/​cycle。** +
-**  ​其代码如下:**+
 <code verilog> <code verilog>
-always@(posedge clk_25m ​or negedge rst_n+//​生成复位信号的计数器,采用时序逻辑语言描述 
-        begin + reg [31:​0]rst_cnt = 32'​d0;​ 
-            if(!rst_n+  
-                begin + always@(posedge clk_25m) 
-                    ​cycle_cnt ​<= 8'd0+ begin 
-                    ​pwm20_sig_r <= 1'd0; + if(rst_cnt==32'​d250000000
-                    ​pwm50_sig_r ​<= 1'd0+ begin 
-                end + rst_cnt<=32'd250000000
-            else + end 
-                begin + else 
-                    ​if(cycle_cnt==cycle-1'​d1)/​/计数器清零,步两个信号位 + begin 
-                        ​begin + rst_cnt ​<= rst_cnt + 32'd1
-                            cycle_cnt ​<= 8'd0; + end 
-                            ​pwm20_sig_r <= 1'd1; +end  
-                            ​pwm50_sig_r <= 1'​d1;​ + 
-                        end +</code> 
-                    ​else ​if(cycle_cnt==puty_50-1'd1)//​变换占空比为50% +  * 然后根据计数器的值控制复位信号拉低复并持续约4秒(便于观察)。 
-                        begin +<code verilog> 
-                            ​pwm50_sig_r ​<= 1'​d0;​ +//​生成复位信号,​有效复位时间大约为4秒钟,实际应用中不需要持续这么久。 
-                            ​cycle_cnt ​<= cycle_cnt + 8'd1; + reg rst_n = 1'​d1;​ 
-                        end + always@(posedge clk_25m) 
-                    else if(cycle_cnt==puty_20-1'​d1)//变占空比20% + begin 
-                        ​begin + if((rst_cnt>​32'd125000000) && (rst_cnt<​32'​d225000010)
-                            pwm20_sig_r ​<= 1'd0+ begin 
-                            ​cycle_cnt ​<= cycle_cnt + 8'd1; + rst_n ​<= 1'​d0;​ 
-                        end + end 
-                    else//​计数器自加 + else 
-                        begin + begin 
-                            ​cycle_cnt ​<= cycle_cnt + 8'd1+ rst_n ​<= 1'd1; 
-                        end + end 
-                end +end  
-        end+</code> 
 + 
 +  * FPGA_LED根据复位信号,进行状态切。上电之后,复位之前,LED置为低电平,状态为“亮”;复位时,置高电平,LED处于复位状态,为“灭”,复位结束后,LED再次置为低电平,状态“亮”。代码如下: 
 +<code verilog>​ 
 +/​*************************************************/​ 
 +//​通过复位信号对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;​ 
 + 
 </​code>​ </​code>​
-  
 ==== 五、实验步骤及实验结果 ==== ==== 五、实验步骤及实验结果 ====
-{{ :icore4tx:icore4tx_fpga_10_2.png?​direct&​400 |图10.2}} +{{ :icore4tx:icore4tx_fpga_9_2.png?​direct&​400 |图9.2}} 
-1、将硬件正确连接,如图10.2所示。\\ ​+1、将硬件正确连接,如图9.2所示。\\ ​
 2、将编写好的代码进行编译,并下载到开发板中;\\ ​ 2、将编写好的代码进行编译,并下载到开发板中;\\ ​
-3、观察实验现象——如图10-3所示。\\  +3、观察实验结果——程序下载后,首先开发板上FPGA_LED为亮状态,经过大约5秒钟,复位信号有效,对FPGA_LED进行复位置为灭状态,复位大约4秒钟,再次点亮FPGA_LED。\\  
-{{ :​icore4tx:​icore4tx_fpga_10_3.png?​direct |图10.3}}+
 ==== 六、拓展实验 ==== ==== 六、拓展实验 ====
-  - 改变cycleputy参数,观察信号变化+  - 通过Signaltap工具采集复位信号led控制信号,看是否与其工作原理一致 
 + 
icore4tx_fpga_9.1590131192.txt.gz · 最后更改: 2020/05/22 15:06 由 zgf · 目前已被下列人员锁定: 223.72.29.103