0
点赞
收藏
分享

微信扫一扫

led跑马灯

凉夜lrs 2022-03-23 阅读 71

文章目录


前言

  跑马灯又叫走马灯、串马灯。由毛竹编织成马头,马尾,属于灯笼的一种。是传统特色手工艺品,亦是传统节日玩具之一,如下图1所示。百闻不如一见,那就使用FPGA实现一个跑马灯。

在这里插入图片描述

图1. 跑马灯示意图

一、设计规范(需求)

  使用开发板上的4个led灯实现20ms的跑马灯。

二、设计输入

  编写horse_led.v代码

module horse_led(
	input wire clk,
	input wire rst_n,
	
	output wire [3:0] led
);


parameter MAX_NUM = 26'd9_999_999;//20ms
reg [25:0] cnt;
reg [7:0] led_r;

//计数功能
always@(posedge clk or negedge rst_n)begin
	if(!rst_n)begin
		cnt <= 26'd0;
	end 
	else if(cnt == MAX_NUM)begin
		cnt <= 26'd0;
	end 
	else begin
		cnt <= cnt + 1'd1;
	end 
end 

//led_r移位操作
always@(posedge clk or negedge rst_n)begin
	if(!rst_n)begin
		led_r <= 8'b11110000;//初始化
	end 
	else if(cnt == MAX_NUM)begin//20ms
		led_r <= {led_r[0],led_r[7:1]};//移位
	end 
	else begin
		led_r <= led_r;
	end 

end 

//取led_r的后四位给led
assign led = led_r[3:0];

endmodule 

三、功能仿真

  1. 编写horse_led_tb.v
`timescale 1ns/1ns//单位/精度
module horse_led_tb();

parameter MAX_NUM = 4'd10;//记最大数,10x20=200ns
parameter CYCLE = 5'd20;//时钟周期,20ns
reg clk;
reg rst_n;
wire [3:0] led;

always#(CYCLE/2) clk = ~clk;//模拟时钟
initial begin
	clk = 1'b0;
	rst_n = 1'b0;
	#(CYCLE)    ;
	rst_n = 1'b1;
	#(MAX_NUM * CYCLE * 4);//观察4个led的状态
	$stop;
end 

//实例化待测模块
horse_led#(.MAX_NUM (MAX_NUM))	horse_led_inst(
.clk	(clk),
.rst_n(rst_n),
		
.led	(led)
);


endmodule 
  1. 仿真结果

在这里插入图片描述

四,引脚分配

在这里插入图片描述

元件管脚
LED0G15
LED1F16
LED2F15
LED3D16
KEY0E15
KEY1E16
KEY2M16
KEY3M15
CLOCK(时钟)E1

总结

  以上就是跑马灯的代码及仿真,跑马灯是流水灯的作业部分。条条大路通罗马,实现的方式有多种,赶紧行动起来,使用不同的方法实现跑马灯吧!

举报

相关推荐

0 条评论