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

一、设计规范(需求)
使用开发板上的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 
三、功能仿真
- 编写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 
- 仿真结果

四,引脚分配

| 元件 | 管脚 | 
|---|---|
| LED0 | G15 | 
| LED1 | F16 | 
| LED2 | F15 | 
| LED3 | D16 | 
| KEY0 | E15 | 
| KEY1 | E16 | 
| KEY2 | M16 | 
| KEY3 | M15 | 
| CLOCK(时钟) | E1 | 
总结
以上就是跑马灯的代码及仿真,跑马灯是流水灯的作业部分。条条大路通罗马,实现的方式有多种,赶紧行动起来,使用不同的方法实现跑马灯吧!










