银杏科技有限公司旗下技术文档发布平台 |
技术支持电话 | 0379-69926675-801 |
技术支持邮件 | Gingko@vip.163.com |
技术论坛 | http://www.eeschool.org |
版本 | 日期 | 作者 | 修改内容 |
V1.0 | 2020-10-13 | zgf | 初次建立 |
实验二:新建FPGA工程——驱动LED
一、 实验目的与意义
学习HqFpga软件新建工程的方法和步骤。
学习Verilog语言描述功能模块的基本语法。
二、 实验原理
三、 建立工程
3、弹出新建工程向导对话框,在“工程目录”栏设置工程存放路径;在“工程名称”栏填写工程名称,这里以“led”为例; iCore3L双核心板的FPGA采用国产器件,西安智目标器件选择SL2S-25E,设计输入选择RTL描述;然后点击“下一步”。
注意:
不能把工作目录放在Windows的系统目录及其子目录下,包括(但不限于):桌面目录:C:\user\…\desktop, windows目录C:\Windows,程序安装目录C:\Program Files 或 Program Files(X86),等等。另外,工作目录名称中不能包含特殊字符,例如空格、括号等,也不建议包含中文字符。
四、 代码分析
前面通过对各个步骤的详细介绍,讲述了从建立工程到编译下载实现的整个过程,下面对工程代码做个讲解。
本工程较为简单,代码也很简短。首先是关键字module,它和endmodule关键字定义一个模块,关键字module后面的字符就是模块的名字,本工程中模块的名字为led。
接着是模块的端口,即位于模块名后面小括号里的变量。本工程led模块有输入时钟和用于控制三色LED的输出,如下面代码中所示。
module led(
input clk_fpga,//25MHz
output [2:0] fpga_led
);
reg fpga_ledr;
reg fpga_ledg;
reg fpga_ledb;
always@(posedge clk_fpga)
begin
fpga_ledr<=1'b1;
fpga_ledg<=1'b0;//引脚输出低电平,对应颜色的发光二极管点亮
fpga_ledb<=1'b1;
end
assign fpga_led={fpga_ledr,fpga_ledg,fpga_ledb};
//--------------------led module end---------------------//
endmodule
在模块的内部,定义了三个寄存器变量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变量对应的另外两个寄存器的变量为1时,对应引脚输出为高电平,则与这两根引脚相连的led两端电压为0,led不亮。