这篇文章可以说是入门FPGA的第一步吧,无论是学习51单片机、stm32,相信点灯是每个电子学生的基操。
1、点亮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;
always #10 key_in<={$random}%2;
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
|