前言
本章将讲解流水灯的制作,在Cyclone IV开发板上依次点亮四个led灯,并以一定间隔亮灭,达到流水灯的效果。
一、什么是led灯?
LED灯就是发光二极管,二极管功能很多,在本实验中我们暂且将其看作是一个开关。二极管在正向电压作用下电阻很小,处于导通状态,相当于一只接通的开关;在反向电压作用下,电阻很大,处于截止状态,如同一只断开的开关。发光二极管在导通的时候发光,在没有导通的时候不发光。发光二极管有点像我们初中做的物理实验。单向开关串联一个灯泡,开关闭合的时候,电流流过灯泡,灯泡发光。开关断开的时候,灯泡也就不亮了。
二、Cyclone IV开发板
在六位数码管右下方对应的就是四个led灯,在板卡上标注为LED0、LED1、LED2、LED3。
四个led灯共阴极接地,所以需要高电平导通led灯。
三,流水灯模块设计
模块描述:输入信号分别为时钟信号和复位信号,设计一个计时器。每0.2s改变四个led的状态,同一时刻下只能有一只led亮,其余的led灭。最后通过移位寄存器输出信号给四个led灯。
注意:在基于FPGA的点亮led灯的实验中,已经讲解了项目的建立。所以本章中跳过建立项目的环节,直接上代码。Don't talk too much, show you the code!
四,工程代码
module led_test(
input wire clk ,//50MHz
input wire rst_n,//reset negetive复位信号下降沿有效
output reg [3:0] led //4个led灯
);
reg [25:0] cnt;//计数器,计数0.2sx4=0.8s,10_000_000x4=40_000_000
//计数器模块
always@(posedge clk or negedge rst_n)begin
if(!rst_n)begin
cnt <= 26'd0;//复位的时候,计数器从0开始计数
end
else if(cnt == 40_000_000 - 1)begin//从0开始计数,所以只记到39_999_999
cnt <= 26'd0;
end
else begin
cnt = cnt + 1'd1;
end
end
always@(posedge clk or negedge rst_n)begin
if(!rst_n)begin
led <= 4'b0000;//led灯高电平有效,低电平无效,1亮0不亮
end
else if(cnt == 10_000_000 -1 )begin//0.2s时亮右边第一个led灯
led <= 4'b0001;
end
else if(cnt == 20_000_000 -1 )begin//0.4s时亮右边第二个led灯
led <= 4'b0010;
end
else if(cnt == 30_000_000 -1 )begin//0.6s时亮右边第三个led灯
led <= 4'b0100;
end
else if(cnt == 40_000_000 -1 )begin//0.8s时亮右边第四个led灯
led <= 4'b1000;
end
else begin
led <= led;//否则让led为当前状态,可以不写
end
end
endmodule
在fpga中,除了编写程序,还有很重要的环节—仿真,不管是功能仿真或者是时序仿真,都是必不可少的。有做软件的同学,来到fpga就要转换之前show me the code的观念,还有simulation。
五、功能仿真
`timescale 1ns/1ns//单位/精度
module led_test_tb();
reg clk ;//时钟信号
reg rst_n;//复位信号
wire [3:0] led ;//4个led灯
always #10 clk = ~clk;//每10ns翻转一次时钟信号
initial begin
clk = 0;//初始化时钟信号为0
rst_n = 0;//初始化复位信号为0
#10 rst_n = 1;//10ns后将复位信号置1
#1000 $stop;//1000ns后停止,可以观看4个led灯的信号
end
led_test u_led_test(//实例化
.clk (clk) ,//50MHz
.rst_n (rst_n),//reset negetive复位信号下降沿有效
.led (led)//4个led灯
);
endmodule
注意:仿真的时候,将间隔0.2s改小,这样我们才能在1000ns内看到四个led灯的变化。
六、modelsim
七,引脚分配
文章来源:https://www.toymoban.com/news/detail-537699.html
元件 | 管脚 |
---|---|
LED0 | G15 |
LED1 | F16 |
LED2 | F15 |
LED3 | D16 |
KEY0 | E15 |
KEY1 | E16 |
KEY2 | M16 |
KEY3 | M15 |
CLOCK(时钟) | E1 |
八,运行效果
流水灯文章来源地址https://www.toymoban.com/news/detail-537699.html
总结
以上就是今天要讲的内容,本文介绍了流水灯的设计,在下一期课程中,将会增加按键信号,制作更为复杂的按键控制led灯。由于仿真不是本章节的重点,所以只演示仿真的过程,没有细讲,这并不代表仿真不重要。后期的作品会出一期单独讲解仿真的课程(功能仿真和时序仿真)。提醒:后期作品以实验名称命名。敬请期待,谢谢观看。到了这里,关于led流水灯的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!