FPGA学习笔记(2)——按键控制LED
熟悉FPGA开发设计的流程
1.点灯Verilog HDL程序
根据开发板的原理图,按键按下,对应引脚低电平,不按下保持高电平;对于LED来说,引脚低电平点亮,高电平熄灭。因此只需要描述一个模块,将按键控制的引脚端口直接传给LED引脚端口就可以实现,保持按下按键就点亮LED,抬起就熄灭LED。因此,做出功能时序图如下:

Verilog代码如下:
module led
(
input wire key_in,
output wire led_out
);
assign led_out = key_in;
endmodule
2.仿真验证结果
首先,在quarts||中创建工程,导入写好的led.v文件,先进行编译,查看是否有编译错误。
之后编写测试文档test beach,对于这个实验,我们能只需要给固定时钟周期的随机高低电平作为激励源。这里直接参考了课程的现成代码,使用了周期为1ns,分辨率为1ns的周期信号产生的随机电平,代码如下:
`timescale 1ns/1ns
///
// Author : EmbedFire
// Create Date : 2019/03/12
// Module Name : tb_led
// Project Name : led
// Target Devices: Altera EP4CE10F17C8N
// Tool Versions : Quartus 13.0
// Description : 按键控制LED灯仿真文件
//
// Revision : V1.0
// Additional Comments:
//
// 实验平台: 野火_征途Pro_FPGA开发板
// 公司 : http://www.embedfire.com
// 论坛 : http://www.firebbs.cn
// 淘宝 : https://fire-stm32.taobao.com
//
module tb_led();
//********************************************************************//
//****************** Parameter and Internal Signal *******************//
//********************************************************************//
//wire define
wire led_out ;
//reg define
reg key_in ;
//********************************************************************//
//***************************** Main Code ****************************//
//********************************************************************//
//初始化输入信号
initial key_in <= 1'b0;
//key_in:产生输入随机数,模拟按键的输入情况
always #10 key_in <= {$random} % 2; /*取模求余数,产生非负随机数0、1
每隔10ns产生一次随机数*/
//********************************************************************//
//**************************** Instantiate ***************************//
//********************************************************************//
//------------- led_inst -------------
led led_inst
(
.key_in (key_in ), //input key_in
.led_out(led_out) //output led_out
);
endmodule
在设置好quarts和modelsim的联动后,设置好编译启动“RTL simulation”,选择tb_led.v文件,设置仿真时间,仿真文件存放位置,自动打开modelsim,modelsim编译后,进行仿真,得到时序图,确认时序图是否符合设计逻辑。

根据得到的波形图,认为模块实现了预设功能。
引脚约束

找到node nme(端口名字)设置key_in和led_out的direction和location,location就是实际FPGA的引脚,这里就是M2和L7,设置好了可以进行依次全编译检查一下。
JTAG(Joint Test Action Group)烧录程序
开发板上可以使用JTAG(Joint Test Action Group)烧录程序,在“type”选项中选择转换成为**.jic文件**,另外,硬件选择为USB-Blaster,选择“JTAG”下载模式,选择led.sof文件(若没有可以在output文件夹下可找到添加),"start"完成下载。
程序的固化
FPGA是通过SRAM存储网表的,为实现掉电重启时可以重新烧录,我们将程序先传输给16Mb的FLASH中,首先进行在“file”选项中,选择“converting programming files”,因此,在“configuration device”中选择,FLASH型号:EPCS16,最后选择输出的jic文件的位置,在输入文件框中“add device”的“flash loader”,在“Device family”框中将“Cyclone IV E”前的括号勾选上,在“Device name”框中将“EP4CE10”前的括号勾选,点击“generate”产生jic文件,关闭后。回到主界面programmer选项,选择生成jic文件,进行烧录,这种烧录方式会比直接将sof文件烧录进SRAM要慢得多。
注意:博主发现这里需要将板子重新上电才可以更新程序。
630

被折叠的 条评论
为什么被折叠?



