首页 > 代码库 > 点亮一个LED灯

点亮一个LED灯

设计定义:

二选一多路器

两个输入IO,a、b。可以是高电平,

输入按键按下时,LED灯与a端口状态保持一致,

按键释放时,LED灯与b端口状态保持一致

设计输入:创建一个project

技术分享

编写功能代码

技术分享

module LED(a,b,key_in,led_out);
input a;//输入端口a,b;
input b;

input key_in;//按键输入,实现输入通道的选择

output led_out;//led控制端口

assign led_out=(key_in==0)?a:b;//当key_in==0,led_out=a;



endmodule

 

编写testbench 

`timescale 1ns/1ps

module LED_tb;

reg signal_a;
reg signal_b;
reg signal_c;
//激励信号定义,对应连接到待测试模块的输入输出
wire led;
//待检测信号定义,对应连接到待测试模块的输出端口
LED u0(
.a(signal_a),
.b(signal_b),
.key_in(signal_c),
.led_out(led));
//例化待测试模块

initial
begin
signal_a=0;signal_b=0;signal_c=0;
#100//延时100ms
signal_a=0;signal_b=0;signal_c=1;
#100
signal_a=0;signal_b=1;signal_c=0;
#100
signal_a=0;signal_b=1;signal_c=1;
#100
signal_a=1;signal_b=0;signal_c=0;
#100
signal_a=1;signal_b=0;signal_c=1;
#100
signal_a=1;signal_b=1;signal_c=0;
#100
signal_a=1;signal_b=1;signal_c=1;
$stop;
//产生激励
end
endmodule

 

 

设置脚本

技术分享

前仿

技术分享

前仿结果

技术分享

后仿结果

技术分享

 

 会发现在后仿的波形中会产生脉冲波形

技术分享

 

 还存在逻辑的延迟

技术分享

这些问题在后面的学习中,现在重点学习流程。

 

假设这些问题都是可以接受的,现在回到quartus II中对IO进行分配,将设计对应到具体的电路板。

这里查阅DE1-SOC开发板的相关技术文档,可以查到键盘和LED灯的接口,我下篇随笔会专门讲解下DE1-SOC的软硬件核,现在先贴着,之后再贴链接

技术分享

 技术分享

从图中可以看出可以选择LED为V16等四个灯,KEY为AA14等案件,a,b信号输入选择AC12,AD12等SW拨码开关

 

下面选择引脚分配

技术分享

 

 设置好后的引脚分配图,设置好后点击关闭即可。

 技术分享

 

 全编译后,点点击programer技术分享键即可打开下载界面。点击Hardware Setup

技术分享

 选择DE-soc后close(第一次用开发板的可能没有这个选项,这个在最后的附录中将进行补充)

技术分享

然后点击autodetect,选择FPGA设置,FPGA和HPS装置会出现在JTAG chain里面

技术分享

 

 选定器件后右键,选择Change file

 技术分享

 

 选定软件程序生成的output file 下的.sof文件,最后点击start即可成功烧写到开发板中。

 技术分享

 实物测试方法

把SW1拨到靠灯一端,SW5在另一端,按下KEY0后LED灯会亮,不按下会熄灭,效果如下图所示。

技术分享

技术分享

 

到这里,整个项目的基本开发流程就基本能够理解了。

附录:

第一次插上DE1-soc系统因为没有驱动,会检测不到开发板,打开系统的设备管理器会发现有个无法检测的设备。

技术分享

双击它后选择驱动导入-----》然后自己从quartus-----》安装路径\quartus\drivers\\usb-blaster-ii中导入即可添加设备驱动。

 

点亮一个LED灯