这里会显示出您选择的修订版和当前版本之间的差别。
两侧同时换到之前的修订记录 前一修订版 后一修订版 | 前一修订版 上一修订版 两侧同时换到之后的修订记录 | ||
icore3lfpga_2 [2020/10/13 08:57] zgf |
icore3lfpga_2 [2020/10/13 09:45] zgf |
||
---|---|---|---|
行 7: | 行 7: | ||
===== 实验二:新建FPGA工程——驱动LED ===== | ===== 实验二:新建FPGA工程——驱动LED ===== | ||
+ | \\ | ||
+ | \\ | ||
+ | |||
==== 一、 实验目的与意义 ==== | ==== 一、 实验目的与意义 ==== | ||
行 16: | 行 19: | ||
* LED的驱动原理是通过程序控制FPGA数字IO的电平变化,实现LED两端电压的压差变化,从而控制LED的亮灭状态切换。其硬件原理图如图2-1所示。 | * LED的驱动原理是通过程序控制FPGA数字IO的电平变化,实现LED两端电压的压差变化,从而控制LED的亮灭状态切换。其硬件原理图如图2-1所示。 | ||
- | 图 2-1 三色LED的硬件原理图 | + | {{ :icore3l:icore3l_fpga_2_1.png?direct |图 2-1 三色LED的硬件原理图}} |
* 从原理图中可以看出,三色LED正极接3.3V,负极分别连接到FPGA的三个引脚。当与三色LED相连的FPGA某一个引脚为低电平,对应颜色的发光二极管两端正负极压降为3.3V,则LED就会点亮。根据此原理,只需控制和发光二极管相连的FPGA引脚的电平变化,即可实现三色LED色彩和亮灭控制。 | * 从原理图中可以看出,三色LED正极接3.3V,负极分别连接到FPGA的三个引脚。当与三色LED相连的FPGA某一个引脚为低电平,对应颜色的发光二极管两端正负极压降为3.3V,则LED就会点亮。根据此原理,只需控制和发光二极管相连的FPGA引脚的电平变化,即可实现三色LED色彩和亮灭控制。 | ||
==== 三、 建立工程 ==== | ==== 三、 建立工程 ==== | ||
* 1、通过双击安装目录/hqui/子目录下的可执行文件hqui.exe启动HqFpga GUI,可以看到HqFpga界面包含三个主操作按钮:RTL综合、设计实现、DRC\Bitgen,如图2-2所示。 | * 1、通过双击安装目录/hqui/子目录下的可执行文件hqui.exe启动HqFpga GUI,可以看到HqFpga界面包含三个主操作按钮:RTL综合、设计实现、DRC\Bitgen,如图2-2所示。 | ||
- | 图 2-2 HqFpga软件主界面 | + | {{ :icore3l:icore3l_fpga_2_2.png?direct&800 |图 2-2 HqFpga软件主界面}} |
* 2、点击左侧栏中的“新建工程”按钮,建立新工程。 | * 2、点击左侧栏中的“新建工程”按钮,建立新工程。 | ||
- | + | {{ :icore3l:icore3l_fpga_2_3.png?direct&800 |图 2-3 新建工程}} | |
- | 图 2-3 新建工程 | + | |
* 3、弹出新建工程向导对话框,在“工程目录”栏设置工程存放路径;在“工程名称”栏填写工程名称,这里以“led”为例; iCore3L双核心板的FPGA采用国产器件,西安智目标器件选择SL2S-25E,设计输入选择RTL描述;然后点击“下一步”。 | * 3、弹出新建工程向导对话框,在“工程目录”栏设置工程存放路径;在“工程名称”栏填写工程名称,这里以“led”为例; iCore3L双核心板的FPGA采用国产器件,西安智目标器件选择SL2S-25E,设计输入选择RTL描述;然后点击“下一步”。 | ||
* **注意:** | * **注意:** | ||
* 不能把工作目录放在Windows的系统目录及其子目录下,包括(但不限于):桌面目录:C:\user\...\desktop, windows目录C:\Windows,程序安装目录C:\Program Files 或 Program Files(X86),等等。另外,工作目录名称中不能包含特殊字符,例如空格、括号等,也不建议包含中文字符。 | * 不能把工作目录放在Windows的系统目录及其子目录下,包括(但不限于):桌面目录:C:\user\...\desktop, windows目录C:\Windows,程序安装目录C:\Program Files 或 Program Files(X86),等等。另外,工作目录名称中不能包含特殊字符,例如空格、括号等,也不建议包含中文字符。 | ||
- | + | {{ :icore3l:icore3l_fpga_2_4.png?direct |图 2-4 新建工程参数设置}} | |
- | 图 2-4 新建工程参数设置 | + | |
* 4、弹出的新建工程窗口中,可以通过点击“+”号添加源文件;也可以直接点击完成按钮跳过添加源文件。这里点击“完成”按钮,后面编写源文件。 | * 4、弹出的新建工程窗口中,可以通过点击“+”号添加源文件;也可以直接点击完成按钮跳过添加源文件。这里点击“完成”按钮,后面编写源文件。 | ||
- | + | {{ :icore3l:icore3l_fpga_2_5.png?direct |图 2-5 RTL输入可以通过添加源文件完成}} | |
- | 图 2-5 RTL输入可以通过添加源文件完成 | + | |
* 5、至此已经建立了工程,然后点击左侧栏的“设计管理”按钮,弹出“设计管理”界面;点击“新建文件”图标,建立源文件,如图2-6所示。 | * 5、至此已经建立了工程,然后点击左侧栏的“设计管理”按钮,弹出“设计管理”界面;点击“新建文件”图标,建立源文件,如图2-6所示。 | ||
- | + | {{ :icore3l:icore3l_fpga_2_6.png?direct&800 |图 2-6 设计管理界面建立新文件}} | |
- | 图 2-6 设计管理界面建立新文件 | + | |
* 6、在设计管理界面的编辑区输入工程代码,点击“语法检查”按钮,检查语法错误;语法检查通过后,点击“保存”按钮图标,并命名为led.v;然后点击3标号处的“+”号,将保存的led.v添加到工程中。 | * 6、在设计管理界面的编辑区输入工程代码,点击“语法检查”按钮,检查语法错误;语法检查通过后,点击“保存”按钮图标,并命名为led.v;然后点击3标号处的“+”号,将保存的led.v添加到工程中。 | ||
- | + | {{ :icore3l:icore3l_fpga_2_7.png?direct&800 |图 2-7 设计管理界面编辑源代码并检查语法}} | |
- | 图 2-7 设计管理界面编辑源代码并检查语法 | + | |
* 7、或者在保存完led.v文件后,关闭“设计管理”界面,再点击左侧边栏的“工程属性”按钮,弹出窗口中点击“+”号,添加刚刚建立的led.v文件,并点击“确定”,如图2-8所示。 | * 7、或者在保存完led.v文件后,关闭“设计管理”界面,再点击左侧边栏的“工程属性”按钮,弹出窗口中点击“+”号,添加刚刚建立的led.v文件,并点击“确定”,如图2-8所示。 | ||
- | + | {{ :icore3l:icore3l_fpga_2_8.png?direct |图 2-8 向工程中添加建立的源文件}} | |
- | 图 2-8 向工程中添加建立的源文件 | + | |
* 8、至此,工程建立完成,点击“RTL综合”按钮,运行指定的RTL综合工具。 | * 8、至此,工程建立完成,点击“RTL综合”按钮,运行指定的RTL综合工具。 | ||
- | + | {{ :icore3l:icore3l_fpga_2_9.png?direct&800 |图 2-9 主界面RTL综合按钮}} | |
- | 图 2-9 主界面RTL综合按钮 | + | |
* 9、综合完成后,可以看到界面上产生一个大的活页标签,如图2-10中所示;标签上半部分显示综合后的FPGA资源利用概要信息。下半页显示有时序分析和网表文件两个标签。 | * 9、综合完成后,可以看到界面上产生一个大的活页标签,如图2-10中所示;标签上半部分显示综合后的FPGA资源利用概要信息。下半页显示有时序分析和网表文件两个标签。 | ||
- | + | {{ :icore3l:icore3l_fpga_2_10.png?direct&800 |图 2-10 主界面可查看RTL综合后的资源利用情况}} | |
- | 图 2-10 主界面可查看RTL综合后的资源利用情况 | + | |
* 10、点击左侧栏“物理约束”按钮,添加约束;弹出窗口点击选中“约束编辑器”,然后点击“确定”。 | * 10、点击左侧栏“物理约束”按钮,添加约束;弹出窗口点击选中“约束编辑器”,然后点击“确定”。 | ||
- | + | {{ :icore3l:icore3l_fpga_2_11.png?direct&800 |图 2-11 添加物理约束}} | |
- | 图 2-11 添加物理约束 | + | |
* 11、弹出物理约束窗口,首先点击“全选”,然后点击“启用”,可以看到下方信号列表的状态一栏都变成了启用,如图2-12中所示。 | * 11、弹出物理约束窗口,首先点击“全选”,然后点击“启用”,可以看到下方信号列表的状态一栏都变成了启用,如图2-12中所示。 | ||
- | + | {{ :icore3l:icore3l_fpga_2_12.png?direct&800 |图 2-12 添加引脚约束}} | |
- | 图 2-12 添加引脚约束 | + | |
* 12、然后在信号行的“位置”栏下单击,会出现一个带“...”的方框,点击方框,弹出“选择端口位置”窗口,通过单击相应位置,为信号添加引脚约束;之后点击确定,即实现信号对应引脚的绑定。图2-14中以clk_25m为例,绑定到B9引脚,绑定之后,其对应“位置”列出现“B9 bank7”字样。 | * 12、然后在信号行的“位置”栏下单击,会出现一个带“...”的方框,点击方框,弹出“选择端口位置”窗口,通过单击相应位置,为信号添加引脚约束;之后点击确定,即实现信号对应引脚的绑定。图2-14中以clk_25m为例,绑定到B9引脚,绑定之后,其对应“位置”列出现“B9 bank7”字样。 | ||
* 引脚绑定全部完成之后,点击“保存”按钮,然后点击“退出”。 | * 引脚绑定全部完成之后,点击“保存”按钮,然后点击“退出”。 | ||
- | + | {{ :icore3l:icore3l_fpga_2_13.png?direct |图 2-13 FPGA三色LED的硬件原理图}} | |
- | 图 2-13 FPGA三色LED的硬件原理图 | + | |
- | + | {{ :icore3l:icore3l_fpga_2_14.png?direct&800 |图 2-14 绑定引脚信息}} | |
- | 图 2-14 绑定引脚信息 | + | |
* 13、完成了RTL综合、添加了约束之后,可以在“设计实现”之前对各个步骤设置不同的优化选项;点击界面左侧栏的“设置”按钮,弹出“设置优化选项窗口”,可以进行综合、布局布线等步骤的优化设置。 | * 13、完成了RTL综合、添加了约束之后,可以在“设计实现”之前对各个步骤设置不同的优化选项;点击界面左侧栏的“设置”按钮,弹出“设置优化选项窗口”,可以进行综合、布局布线等步骤的优化设置。 | ||
* 这里选择默认设置,点击“确定”按钮即可。 | * 这里选择默认设置,点击“确定”按钮即可。 | ||
- | + | {{ :icore3l:icore3l_fpga_2_15.png?direct |图 2-15 设置优化选项}} | |
- | 图 2-15 设置优化选项 | + | |
* 14、点击主界面的“设计实现”按钮;设计实现运行完毕生成一个大的活页标签;标签上半部分是显示FPGA资源使用情况,下半部分是生成的是一些报告和网表文件,可用于分析检查设计实现结果。 | * 14、点击主界面的“设计实现”按钮;设计实现运行完毕生成一个大的活页标签;标签上半部分是显示FPGA资源使用情况,下半部分是生成的是一些报告和网表文件,可用于分析检查设计实现结果。 | ||
- | + | {{ :icore3l:icore3l_fpga_2_16.png?direct&800 |图 2-16 点击“设计实现”按钮进行布局布线}} | |
- | 图 2-16 点击“设计实现”按钮进行布局布线 | + | |
* 15、点击“DRC/Bitgen”按钮,进行设计规则检查(DRC)并生成位流(Bitstream)文件,检查运行结果。 | * 15、点击“DRC/Bitgen”按钮,进行设计规则检查(DRC)并生成位流(Bitstream)文件,检查运行结果。 | ||
* DRC通过后,在产生活页的下半页有“位流文件”和“下载编程”两个图标。 | * DRC通过后,在产生活页的下半页有“位流文件”和“下载编程”两个图标。 | ||
- | + | {{ :icore3l:icore3l_fpga_2_17.png?direct&800 |图 2-17 全编译后生成bit文件,活页出现“下载/编程”按钮}} | |
- | 图 2-17 全编译后生成bit文件,活页出现“下载/编程”按钮 | + | |
* 16、将下载器和核心板与电脑连接,并给核心版供电。点击DRC活页中的“下载/编程”图标,弹出“HqFpga下载器”界面;此界面下文件类型选择 .bit,点击“检测器件”按钮,查看检测到的器件型号和工程设计中选择的器件型号是否一致;然后点击“打开”按钮,找到生成的led.bit文件并选中,点击“下载”按钮。 | * 16、将下载器和核心板与电脑连接,并给核心版供电。点击DRC活页中的“下载/编程”图标,弹出“HqFpga下载器”界面;此界面下文件类型选择 .bit,点击“检测器件”按钮,查看检测到的器件型号和工程设计中选择的器件型号是否一致;然后点击“打开”按钮,找到生成的led.bit文件并选中,点击“下载”按钮。 | ||
- | + | {{ :icore3l:icore3l_fpga_2_18.png?direct&800 |图 2-18 弹出的HqFpga下载界面}} | |
- | 图 2-18 弹出的HqFpga下载界面 | + | |
* 17、下载成功将会看到“输出信息”栏有如图2-18所示提示,且开发板上三色LED显示绿色。 | * 17、下载成功将会看到“输出信息”栏有如图2-18所示提示,且开发板上三色LED显示绿色。 | ||
- | + | {{ :icore3l:icore3l_fpga_2_19.png?direct |图 2-19 下载过程中的信息提示}} | |
- | 图 2-19 下载过程中的信息提示 | + | |
* 18、HqFpga软件默认生成 .bit文件,可用于JTAG模式下载。也可生成 .bin文件,用于mspi模式下载;生成 .bin文件的操作如下: | * 18、HqFpga软件默认生成 .bit文件,可用于JTAG模式下载。也可生成 .bin文件,用于mspi模式下载;生成 .bin文件的操作如下: | ||
* 点击左侧栏“设置”按钮,弹出的“设置优化选项”窗口中点击“位流生成”页,勾选“生成二进制文件格式”选项和“压缩比特流”选项,点击“确定”,如图2-19所示。 | * 点击左侧栏“设置”按钮,弹出的“设置优化选项”窗口中点击“位流生成”页,勾选“生成二进制文件格式”选项和“压缩比特流”选项,点击“确定”,如图2-19所示。 | ||
* 设置好之后重新编译即可生成 .bin文件。 | * 设置好之后重新编译即可生成 .bin文件。 | ||
- | + | {{ :icore3l:icore3l_fpga_2_20.png?direct&800 |图2-20 HqFpga生成.bin文件的设置。}} | |
- | 图2-20 HqFpga生成.bin文件的设置。 | + | |
==== 四、 代码分析 ==== | ==== 四、 代码分析 ==== | ||
行 104: | 行 107: | ||
//--------------------led module end---------------------// | //--------------------led module end---------------------// | ||
endmodule | endmodule | ||
- | <endmodule> | + | </code> |
* 在模块的内部,定义了三个寄存器变量fpga_ledr、fpga_ledg、fpga_ledb;always块以输入时钟的上升沿作为触发条件,控制三个寄存器变量的值分别为1、0、1。assign语句用于将这三个寄存器变量的值传递到控制三色LED的fpga_led变量,使fpga_led[2]=1,fpga_led[1]=0,fpga_led[0]=1, | * 在模块的内部,定义了三个寄存器变量fpga_ledr、fpga_ledg、fpga_ledb;always块以输入时钟的上升沿作为触发条件,控制三个寄存器变量的值分别为1、0、1。assign语句用于将这三个寄存器变量的值传递到控制三色LED的fpga_led变量,使fpga_led[2]=1,fpga_led[1]=0,fpga_led[0]=1, | ||
* 至此实现了输出变量fpga_led的三位二进制值为101,而fpga_led变量对应的三位寄存器是连接到FPGA引脚,进而连接到三色LED的,那么,fpga_led的对应寄存器的值的变换,将直接影响fpga对应引脚的电平变化。即当fpga_led的值为二进制的101时,和fpga_led[1]寄存器对应引脚输出低电平,那么和此引脚相连的led两端的电压将变成3.3V,从而使LED发亮。 | * 至此实现了输出变量fpga_led的三位二进制值为101,而fpga_led变量对应的三位寄存器是连接到FPGA引脚,进而连接到三色LED的,那么,fpga_led的对应寄存器的值的变换,将直接影响fpga对应引脚的电平变化。即当fpga_led的值为二进制的101时,和fpga_led[1]寄存器对应引脚输出低电平,那么和此引脚相连的led两端的电压将变成3.3V,从而使LED发亮。 |