FPGA点亮LED和数据选择器

这篇文章可以说是入门FPGA的第一步吧,无论是学习51单片机、stm32,相信点灯是每个电子学生的基操。

1、点亮LED灯简介

  • 1、需求分析
    “点亮LED灯”实验是使用开发板上的按键KEY来控制LED的亮灭。当按键没有被按下时,LED灯保持常灭;当按下按键时,LED灯被点亮。

  • 2、LED的按键原理图:

  • 3、LED的原理图:

2、绘制点亮LED的波形

我们要实现的逻辑就是:按键按下的时候,LED端口输出低电平。
因此实现的逻辑就是:按键低电平,LED端口低电平。按键高电平,LED高电平。

因此波形图可以绘制成下面的图片:

3、LED的RTL代码

1
2
3
4
5
6
module led
( input wire key_in,
output wire led_out
);
assign led_out=key_in;
endmodule

4、LED的Testbench激励代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
`timescale 1ns/1ns

module tb_led();

reg key_in;
wire led_out;

initial key_in<=1'b0;
//key_in:产生输入随机数,模拟按键的输入情况
always #10 key_in<={$random}%2;/*取模求余数,产生非负随机数0、1
每隔10ns产生一次随机数*/
//LED模块实例化
led led_init(
.key_in(key_in),
.led_out(led_out)
);

endmodule

我们来解释一下timescale 1ns/1ns代码的作用

5、LED的波形仿真图解

6、数据选择器RTL代码

​MUX = Multiplexer = 数据选择器

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
module mux2_1(
input wire in1,
input wire in2,
input wire sel,
output reg out
);

always@(*)
begin
if(sel==1'b1)
out=in1;
else
out=in2;
end

endmodule

7、数据选择器Testbench

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
`timescale 1ns/1ns

module tb_mux2_1();

reg in1;
reg in2;
reg sel;
wire out;

initial
begin
in1<=1'b0;
in2<=1'b0;
sel<=1'b0;
end

always #10 in1 <= {$random} % 2;

always #10 in2 <= {$random} % 2;

always #10 sel <= {$random} % 2;

mux2_1 mux2_1_inst(
.in1(in1),
.in2(in2),
.sel(sel),
.out(out)
);

endmodule

FPGA点亮LED和数据选择器
http://example.com/2025/05/09/FPGA点亮LED/
Author
John Doe
Posted on
May 9, 2025
Licensed under