文章目录
前言
跑马灯又叫走马灯、串马灯。由毛竹编织成马头,马尾,属于灯笼的一种。是传统特色手工艺品,亦是传统节日玩具之一,如下图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 |
总结
以上就是跑马灯的代码及仿真,跑马灯是流水灯的作业部分。条条大路通罗马,实现的方式有多种,赶紧行动起来,使用不同的方法实现跑马灯吧!