这里会显示出您选择的修订版和当前版本之间的差别。
两侧同时换到之前的修订记录 前一修订版 后一修订版 | 前一修订版 后一修订版 两侧同时换到之后的修订记录 | ||
icore4tfpga_6 [2020/02/20 15:23] zgf [五、 实验步骤及实验结果] |
icore4tfpga_6 [2024/04/10 10:59] zhaowenzhe [二、 实验设备及平台] |
||
---|---|---|---|
行 1: | 行 1: | ||
- | ===== 实验六:软件复位信号实验——全局复位信号 ===== | + | | **银杏科技有限公司旗下技术文档发布平台** |||| |
+ | |技术支持电话|**0379-69926675-801**||| | ||
+ | |技术支持邮件|Gingko@vip.163.com||| | ||
+ | ^ 版本 ^ 日期 ^ 作者 ^ 修改内容 ^ | ||
+ | | V1.0 | 2019-02-25 | gingko | 初次建立 | | ||
+ | |||
+ | |||
+ | ===== 实验六:乘法器实验——乘法器的使用 ===== | ||
==== 一、 实验目的与意义 ==== | ==== 一、 实验目的与意义 ==== | ||
- | + | - 了解乘法器。 | |
- | - 掌握Verilog HDL语言的使用方法。 | + | - 掌握乘法器的使用方法。 |
- | - 掌握QuartusII的使用方法。 | + | - 掌握 QuartusII 集成开发环境使用方法。 |
- | - 掌握软件复位信号的工作原理及使用方法。 | + | |
==== 二、 实验设备及平台 ==== | ==== 二、 实验设备及平台 ==== | ||
- | + | - iCore4t 双核心板。 | |
- | - iCore4T 双核心板。[[https://item.taobao.com/item.htm?spm=a1z10.1-c.w137644-251734891.3.5923532fDrMDOe&id=610595120319|点击购买]] | + | - iTool A(或相同功能)仿真器。 |
- | - Blaster(或相同功能)仿真器。[[https://item.taobao.com/item.htm?id=554869837940|点击购买]] | + | - USB Type C 线缆。 |
- | - Micro USB线缆。 | + | - QuartusII 开发平台。 |
- | - Keil MDK 开发平台。 | + | - 装有 WINXP(及更高版本)系统的计算机。 |
- | - Quartus开发平台。 | + | |
- | - 电脑一台。 | + | |
==== 三、 实验原理 ==== | ==== 三、 实验原理 ==== | ||
- | * 复位指的是在可编程器件、可编程控制器等电子设备中,为防止程序跑飞或者保证多个子程序同时运行,在程序中手动或者自动的方法使软硬件恢复到一个特定的工作节点的过程,而这个手动或自动控制的信号就是复位信号。 | + | * 通过 FPGA 的一个 I/O 口连接 LED;设定 I/O 为输出模式。内部乘法器完成乘法计算后 改变输出 LED 的状态(红色 LED 闪烁)。 |
- | * 在FPGA程序中,一个复杂的功能由多个子模块共同完成,为了保证各个子模块同时运行,在程序内部设定一个全局复位信号,属于异步复位信号。其工作原理时序如图6.1所示: | + | ==== 四、 实验步骤 ==== |
- | {{ :icore4t:icore4t_fpga_6_1.png?direct |图6.1}} | + | |
- | + | ||
- | * 如图所示,其复位原理是:将复位信号作为程序控制的触发信号,在复位信号(rst_n)下降沿处对控制总线进行复位,将其赋值为复位值,有效复位信号(低电平)结束后,可根据需要对控制总线重新进行赋值。 | + | |
- | ==== 四、 代码讲解 ==== | + | |
- | + | ||
- | * 复位信号的产生原理是:首先做一个产生复位信号的计数器always块,然后利用条件运算符和关系运算符产生一个短时间内具有低电平的的信号,将该信号作为复位信号。其代码如下: | + | |
- | <code verilog> | + | |
- | //生成复位信号的计数器,采用时许逻辑语言描述 | + | |
- | reg [31:0]rst_cnt; | + | |
- | + | ||
- | always@(posedge clk_25m) | + | |
- | begin | + | |
- | if(rst_cnt==32'd250000000) | + | |
- | begin | + | |
- | rst_cnt<=32'd250000000; | + | |
- | end | + | |
- | else | + | |
- | begin | + | |
- | rst_cnt <= rst_cnt + 1'd1; | + | |
- | end | + | |
- | end | + | |
- | wire rst_n = ((rst_cnt>32'd125000000) && (rst_cnt<32'd225000010)) ? 1'd0 : 1'd1; | + | |
- | </code> | + | |
- | ==== 五、 实验步骤及实验结果 ==== | + | |
- | 1、将硬件正确连接,如图6.2所示。 | + | 1、建立工程,并新建 MULT.v 文件。打开 Tool->MegawizardPlug-In Manager。 |
+ | {{ :icore3:icore3_fpga_11_1.png?direct |图1}} | ||
+ | 2、直接点第一个新建 MULT,点击 Next。 | ||
+ | {{ :icore3:icore3_fpga_11_2.png?direct |图2}} | ||
+ | 3、在左侧的栏里 Arithmetic 文件夹下找到并选中 LPM_MULT,在框 1 处选择 Verilog HDL,再点击框 2 中按钮选择文件存放目录,然后点击图中 Next。 | ||
+ | {{ :icore3:icore3_fpga_11_3.png?direct |图3}} | ||
+ | 4、框 1 处选择乘法器输入数据的宽度,此处以 8 位宽度为例,然后点击 Next。 | ||
+ | {{ :icore3:icore3_fpga_11_4.png?direct |图4}} | ||
+ | 5、接下来几页保持默认设置直接点击 Next,最后点击 Finish 即可。 | ||
+ | {{ :icore3:icore3_fpga_11_5.png?direct |图5}} | ||
+ | {{ :icore3:icore3_fpga_11_6.png?direct |图6}} | ||
+ | 6、接着把代码写进工程,分配引脚(使用接到排针的引脚,避免跟其他芯片引脚信号 冲突烧坏芯片),编译即可。\\ | ||
+ | 7、 打开逻辑分析仪将输出信号加入波形列表观察波形信号是否正确。 | ||
- | {{ :icore4t:icore4t_fpga_6_2.jpg?direct |图6.2}} | + | ==== 五、 实验现象 ==== |
- | 2、将编写好的代码进行编译,并下载到开发板中; | + | |
- | 3、观察其实验结果——程序下载后,首先开发板上FPGA_LED为亮状态,经过大约5秒钟,复位信号有效,对FPGA_LED进行复位置为灭状态,复位大约4秒钟,再次点亮FPGA_LED。 | + | |
- | ==== 六、 拓展实验 ==== | + | |
- | 1、通过Signaltap工具采集复位信号和led控制信号,看是否与其工作原理一致; | + | * 打开逻辑分析仪,添加乘法器输入输出波形信号查看波形,可以看到输出波形数据等于 输入波形数据的乘积(因为采样时钟比较小,逻辑分析仪采样时间稍微有点长,耐心等待一会儿),此外,外部现象表现为红色 LED 闪烁。 |