用户工具

站点工具


icore4tx_fpga_12

差别

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

到此差别页面的链接

后一修订版
前一修订版
icore4tx_fpga_12 [2020/05/22 12:02]
zgf 创建
icore4tx_fpga_12 [2022/04/01 11:37] (当前版本)
sean
行 3: 行 3:
 |技术支持电话|**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-22  ​| ​ gingko ​ |  初次建立 ​ | 
  
-===== 实验十GPIO输入实验——识别按键输入 ​=====+===== 实验十Modelsim 仿真实验 =====
  
 ==== 一、实验目的与意义 ==== ==== 一、实验目的与意义 ====
  
-  - 了解按键特征和应用。 +  - 安装Modelsim软件。 
-  - 掌握 FPGA 引脚的配置方法。 +  - 学习建立Modelsim工程并对Xilinx FPGA工程进行仿真
-  - 学习按键消抖的实现方法+
  
-==== 二、实验设备及平台 ==== 
  
-  - iCore4TX 双核心板。[[https://​item.taobao.com/​item.htm?​spm=a1z10.1-c-s.w4004-22598974120.3.5923532fAsAtPz&​id=614919247574|点击购买]] +==== 、实验设备 ​====
-  - USB-CABLE(或相同功能)的仿真器。 +
-  - Micro USB线缆。 +
-  - ISE开发平台。 +
-  - 电脑一台。 +
-==== 三、实验原理 ​====+
  
-**按键动作检测和消抖** +  - ISE开发软件。 
-  ​* FPGA 所有 I/O 控制块允许每个 I/O 引脚单独配置为输入口,不过这种配置是系统自动完成的。当该 I/O 口被设置输入口使用时,该 I/O 控制模块将直接使三态缓冲区的控制端接地,使得该 I/O 对外呈高阻态,这样该 I/O 引脚即可用输入引脚使用。 +  ​- 64位WIN10系统PC(本例程以64位系统为例)。 
-  ​* iCore4TX超迷你核心板上是没有按键的,其扩展板上有个按键,可以通过扩展接口和FPGA相连。原理图如下: +  ​- Modelsim 10.1版本安装包
-{{ :​icore4tx:​icore4tx_fpga_11_1.png?​direct |图11.1}} +
-  * 从原理图中可以看到,按键未按下时,FPGA引脚是悬空的,此时该引脚对外呈高阻态。当按键按下时,FPGA电平为高。正确分配并锁定引脚后,一旦检测到按键有变化,即可切换 LED 的状态。 +
-  * 也就是通过检测FPGA·KEY引脚的电平变化,判断按键状态,进而控制LED的亮灭。在按键按下和松开的过程,电平并不是理想的立即从高到低或者从低到高变化的。在跳变的过程中,是有抖动的,持续大概10ms左右。抖动会影响FPGA判断按键稳定状态的电平,因此在设计中要对按键动作做消抖处理。原理很简单,检测到跳变沿后做延时处理,跳过抖动阶段,再读取按键状态,从而实现按键消抖操作+
  
-==== 代码讲解 ==== +==== Modelsim 安装及破解 ==== 
-  * 本实验代码较为简单首先使输入信号进行延迟1便于进行沿跳变检测检测到下降沿后开始计数。然后在对时钟计数持续约40ms后采集按键输入引脚电平状态进而控制LED亮灭切换代码理现较简单,不需要注意对延时计数器的控制,使其在按键按下期间持续计数按键未按进行清零。 +  * Modelsim 仿真工具是Model公司开发的支持Verilog、VHDL 以及他们的混合仿真。通过Modelsim软件,可以Xilinx FPGA工程文件进行仿真,观察工程内变量的值和信号逻辑的变化,从而直观的分析设计中存在的逻辑错误和设计上的缺陷。 
-**  其代码如下:** +**1、安装步骤:** 
-<code verilog> +  * 1. 双击 modelsim-win64-10.1a-se.exe 文件开始安装。 
-//​---------------------按键作检---------------------------//​ +{{ :​icore4tx:​icore4tx_fpga_12_1.png?​direct |图12.1}} 
- reg key_r; +  * 2. 双击.exe 文件后入如下界面,点击 Next。 
- always@(posedge ​clk_25M ​or negedge rst_n) +{{ :​icore4tx:​icore4tx_fpga_12_2.png?​direct |图12.2}} 
- if(!rst_n) +  * 3. 红框1处选择安装路径然后点击 Next。弹出窗口询问是否建立文件夹,选择Yes. 
- key_r<​=1'b0+{{ :​icore4tx:​icore4tx_fpga_12_3.png?​direct |图12.3}} 
- else +  * 4. 此界面点击 Agree 即可入下一步的安装 
- key_r<=key;//输入信号延迟1拍 +{{ :​icore4tx:​icore4tx_fpga_12_4.png?​direct |图12.4}} 
- reg [19:0]cnt; +  * 5. 接下来进入进度条界面,此过程中弹出的界面全部点击 Yes。 
- reg flag; +{{ :​icore4tx:​icore4tx_fpga_12_5.png?​direct |图12.5}} 
- always@(posedge clk_25M or negedge rst_n) +  * 6. 此界面点击 Cancel, 进入下一个安装步骤。 
- if(!rst_n) +{{ :​icore4tx:​icore4tx_fpga_12_6.png?​direct |图12.6}} 
- flag<​=1'​d0;​ +  * 7. 点击Yes,电脑立即重启;点击 No,空闲时手动重启,​大家自选择至此安装结束。 
- else if((key==1'​d0)&&​(key_r==1'​d1))//​降沿检测 +{{ :​icore4tx:​icore4tx_fpga_12_7.png?​direct |图12.7}} 
- flag<​=1'​d1;​ +**2、破解步骤:**  
- else if((key==1'​d1)&&​(key_r==1'​d0))//​上升沿检测 +  * 1.接下来进行破解。 
- flag<​=1'​d0;​ +    * 1) 首先将MentorKG.exe和patch_dll.bat文件复制安装目录的win64 文件夹下。 
- always@(posedge clk_25M or negedge rst_n) +    * 2) 然后将Win64文件夹中的mgls64.dll和mgls.dll文件的只读属性去掉运行patch_dll.bat,等待生成TXT格式license文件,另存为到安装目录下,命名为LICENSE.TXT。 
- if(!rst_n) +    * 3) 恢复,mgls.dll和mgls64.dll两个文件的只读属性。 
- cnt<​=20'​d0;​ +  * 2.接下来添加系统环境变量,控制面板->​系统和安全->​系统->​高级系统设置->​环境变量->​新建。变量名MGLS_LICENSE_FILE,​变量值为 License.txt ​路径(点击浏览文件,找到License.txt文件,选中即可),然后点击“确定”结束 
- else if((cnt<20'​d1000000)&&​(flag))//​约40ms +{{ :​icore4tx:​icore4tx_fpga_12_8.png?​direct |图12.8}}  
- cnt<​=cnt+1'd1; + 
- else if((cnt==20'​d1000000)&&​(flag)) +==== 四、Modelsim 仿真工具调用 ==== 
- cnt<​=cnt;​ +  * 作为modelsim讲示例,本验以实验八的呼吸灯实验基础进行。实验目的是通Modelsim软件仿真,在Modelsim上直观查看计数器变量值变化和控制LED亮灭的信号电平变化。下面讲解如何在Modelsim工程以及如何对呼吸灯实验进行仿真。 
- else +  1.在正式建立Modelsim仿真工程之前,将实验八呼吸灯的工程复制过来,然后建立一个文件夹,用于存放Modelsim工程,本实验建立的文件夹名为counter_sim。 
- cnt<​=20'd0; +  ​2.打开FPGA工程,右击,点击New Source。 
- reg led_r; +{{ :​icore4tx:​icore4tx_fpga_12_9.png?​direct |图12.9}} 
- always@(posedge clk_25M or negedge rst_n)//LED 状态切换 +  * 3. 选择新建文件类型为Verilog Test Fixture,File name命名为counter_tb,然后点击Next。注意测试文件的存放路径,本实验将和FPGA工程的源文件放到一起。 
- if(!rst_n) +{{ :​icore4tx:​icore4tx_fpga_12_10.png?​direct |图12.10}} 
- led_r<​=1'​d1;​ +  ​4. 点击Next。 
- else if(cnt==20'​d900000) +{{ :​icore4tx:​icore4tx_fpga_12_11.png?​direct |图12.11}} 
-led_r<=~led_r;+  ​5. 点击Finish 
 +{{ :​icore4tx:​icore4tx_fpga_12_12.png?​direct |图12.12}} 
 +  * 6. 在工程代码编辑区可以看到下图所示内容,为ISE自生成的试文件代码。可以看到,测试文件例化了工程文件的顶层模块,并设置了仿真的时间单位和精度。并对时钟状态进行了初始化。如下图所示: 
 +{{ :​icore4tx:​icore4tx_fpga_12_13.png?​direct |图12.13}} 
 +  * 7.向测试文件中添加代码:always ​#5 clk_25M = ~clk_25M;生成时钟信号。产生模拟的时钟信号,测试文件主要包含内容如下图所示。可以看到,测试工程是将FPGA工程的顶层模块作为Modelsim工程的一个子模块,例化到测试工程中,并给予时钟等外部激励信号,并通过initial语句对激励信号赋初值。 
 +    * a) Initial语句是顺序执行的,且仿真开始阶段只执行一次。Initial块内可以通过“# ​ 数字”的方式实现延时控制。如“#​ 100”即等待100个时间单位后再执行下一条语句。因此可以通过延时控制模拟外部激励信号或者复位信号等。 
 +    * b) Always 块内的语句是循环执行的,如添加的“always #5 clk_25M = ~clk_25M;”语句,即等待5个时间单位后clk_25M信号进行翻转,并循环执行,以此产生周期10个时间单位的模拟时钟信号。 
 +{{ :icore4tx:​icore4tx_fpga_12_14.png?​direct |图12.14}} 
 +  * 8.双击打开Modelsim软件,点击File  New Project…,新建modelsim工程。 
 +{{ :​icore4tx:​icore4tx_fpga_12_15.png?​direct |图12.15}} 
 +  * 9.弹出窗中填写工程名字,最好和顶层文件名字一致。Project Location 是工作目录,通过点击Brose按钮,将目录选择为前面建立的文件夹cnt_sim。Default Library Name采用工具默认的work,然后点击OK。 
 +{{ :​icore4tx:​icore4tx_fpga_12_16.png?​direct |图12.16}} 
 +  * 10.弹出如窗口,询问是建立新文件还是添加新文件;本实验是在实验八的基础上进行的,由已经编写完成的工程文件,因此这里点击Add Existing File,即添加文件。 
 +{{ :​icore4tx:​icore4tx_fpga_12_17.png?​direct |图12.17}} 
 +  * 11.弹出窗口点击Browse,找到FPGA工程的源文件,选中后点击打开。 
 +{{ :​icore4tx:​icore4tx_fpga_12_18.png?​direct |图12.18}} 
 +  * 12.点击下图中OK。 
 +{{ :​icore4tx:​icore4tx_fpga_12_19.png?​direct |图12.19}} 
 +  * 13.Project界面里可以看到源文件已经添加进去,点击Close关闭Add items to the Project界面。 
 +{{ :​icore4tx:​icore4tx_fpga_12_20.png?​direct |图12.20}} 
 +  * 14.点击工具栏的编译按钮进行编译,编译完成无报错之后,如下图所示。 
 +{{ :​icore4tx:​icore4tx_fpga_12_21.png?​direct |图12.21}} 
 +  * 15.在Library中work目录下,选中测试文件counter_tb.v,双击或者右键点击Simulate。 
 +{{ :​icore4tx:​icore4tx_fpga_12_22.png?​direct |图12.22}} 
 +  * 16.然后点击工具栏的SimulateStart Simulation…。 
 +{{ :​icore4tx:​icore4tx_fpga_12_23.png?​direct |图12.23}} 
 +  * 17.点击work前面的“+”,选中测试文件counter_tb,取消Enable optimization前面的“√”,然后点击OK。 
 +{{ :​icore4tx:​icore4tx_fpga_12_24.png?​direct |图12.24}} 
 +  * 18. Sim页面选中counter_tb下的uut模块,可以看到Objects窗口出现counter模块的信号列表,选中该列表中需要观察的信号,右键点击Add Wave 
 +{{ :​icore4tx:​icore4tx_fpga_12_25.png?​direct |图12.25}} 
 +  * 19. 可以看到Wave界面已经添加了需要观察的信号,选中cnt1信号,右键点击,选择RadixUnsigned,将cnt1变量的值调整成无符号十进制显示。同样的操作将cnt2也调整成无符号十进制数显示。 
 +{{ :​icore4tx:​icore4tx_fpga_12_26.png?​direct |图12.26}} 
 +  * 20. 点击Run-all,运行仿真。 
 +{{ :​icore4tx:​icore4tx_fpga_12_27.png?​direct |图12.27}} 
 +  * 21. 可以直观的看到,led的控制信号的周期性变化,如下图所示(为了直观展示信号的周期变化,将counter文件中cnt1和cnt2的值累加到50后进行清零)。 
 +{{ :​icore4tx:​icore4tx_fpga_12_28.png?​direct |图12.28}} 
 + 
 +==== 五、实验现象 ==== 
 +  * 通过仿真波形,可以清晰的看到所添加信号波形的变化与程序所写的一致。
  
-</​code>​ 
-  * 编译完代码,在将程序烧录到FPGA之前,要对FPGA的引脚进行设置。将时钟、按键、LED信号绑定到对应引脚,绑定信息参考下图中所示,为.ucf文件中引脚绑定内容: ​ 
-{{ :​icore4tx:​icore4tx_fpga_11_2.png?​direct |图11.2}} 
-  * 引脚绑定之后,保存并编译工程,下载至iCore4tx双核心板,按下FPGA·KEY,观察FPGA·LED的状态变化。 
  
-==== 五、实验步骤 ==== 
-  - 将iCore4TX双核心版插入底板的金手指插座,轻轻下压,使双核心板和底板联通并固定在底板上。 
-  - 把 USB-CABLE 仿真器与 iCore4TX 的 JTAG 调试口相连; 
-  - 把iCore4TX通过 Micro USB 线与计算机相连,为 iCore4TX 供电; 
-  - 打开本实验工程; ​ 
-  - 烧写程序到 iCore4TX 上; ​ 
-  - 按下按键,观察LED状态的切换。 
  
-==== 六、实验结果 ==== 
-  * 按动iCore4TX 底板的FPGA按键,iCore4TX 双核心板上的 FPGA·LED在每次按键按下后切换亮灭状态。 
  
  
icore4tx_fpga_12.1590120149.txt.gz · 最后更改: 2020/05/22 12:02 由 zgf