名称:流水灯测试试验设计Verilog代码VIVADO ARTIX-7开发板
软件:VIVADO
语言:Verilog
代码功能:
流水灯测试试验
显示16个LED流水灯,使用计数器产生一定频率的计数,通过计数选择led灯亮或者灭。
FPGA代码Verilog/VHDL代码资源下载:www.hdlcode.com
本代码已在ARTIX-7开发板验证,ARTIX-7开发板如下,其他开发板可以修改管脚适配:
设计文档:
1简介
本教程介绍使用计数器产生一定频率的计数,通过计数选择led灯亮或者灭。
2实验原理
流水灯顾名思义就是多个led灯依次被点亮一次,如此循环便成就了流水灯的效果。
3程序设计
//时钟计数
always @(posedge sys_clk_i)
begin
if(clk_cnt > 32'd20000000)
begin
clk_cnt <= 32'b0;
end
else
begin
clk_cnt <= clk_cnt + 1'b1;
end
end
//led灯选择计数,用来选择哪个led灯亮
always @(posedge sys_clk_i)
begin
if(clk_cnt == 32'd20000000)
begin
led_cnt <= led_cnt + 1'b1;
end
end
//led流水输出
always @(posedge sys_clk_i)
begin
case(led_cnt)
4'b0000: led_out <= 16'h0001;
4'b0001: led_out <= 16'h0002;
4'b0010: led_out <= 16'h0004;
4'b0011: led_out <= 16'h0008;
4'b0100: led_out <= 16'h0010;
4'b0101: led_out <= 16'h0020;
4'b0110: led_out <= 16'h0040;
4'b0111: led_out <= 16'h0080;
4'b1000: led_out <= 16'h0100;
4'b1001: led_out <= 16'h0200;
4'b1010: led_out <= 16'h0400;
4'b1011: led_out <= 16'h0800;
4'b1100: led_out <= 16'h1000;
4'b1101: led_out <= 16'h2000;
4'b1110: led_out <= 16'h4000;
4'b1111: led_out <= 16'h8000;
endcase
end
end
4.实验现象
将目录“... at7_prj_04at7_prjat7_prj.runsimpl_1”文件夹下的 at7_prj.bit 文件下载到开发板上,则在开发板上的 16 个led 会依次向右被点亮,当最右侧的 led 点亮并熄灭后,最左侧的led灯又开始亮起来,实现 LED 流水切换的效果。
部分代码展示:
`timescale 1ns / 1ps ////////////////////////////////////////////////////////////////////////////////// // Company: // Engineer: // // Create Date: 2019/04/13 17:54:08 // Design Name: // Module Name: at7_prj // Project Name: // Target Devices: // Tool Versions: // Description: // // Dependencies: // // Revision: // Revision 0.01 - File Created // Additional Comments: // ////////////////////////////////////////////////////////////////////////////////// module at7_prj( input sys_clk_i,//外部输入100MHz时钟信号 output reg [15:0] led_out ); reg [31:0] clk_cnt; reg [3:0] led_cnt; //------------------------------------- //时钟计数 always @(posedge sys_clk_i) begin if(clk_cnt > 32'd20000000) begin clk_cnt <= 32'b0; end else begin clk_cnt <= clk_cnt + 1'b1; end end //led灯选择计数 always @(posedge sys_clk_i) begin if(clk_cnt == 32'd20000000) begin led_cnt <= led_cnt + 1'b1; end end //led流水输出 always @(posedge sys_clk_i) begin case(led_cnt) 4'b0000: led_out <= 16'h0001; 4'b0001: led_out <= 16'h0002; 4'b0010: led_out <= 16'h0004; 4'b0011: led_out <= 16'h0008; 4'b0100: led_out <= 16'h0010;
点击链接获取代码文件:http://www.hdlcode.com/index.php?m=home&c=View&a=index&aid=1330
1109