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要慢得多。
注意:博主发现这里需要将板子重新上电才可以更新程序。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值