EDA 技术及应用课程设计报告
课设题目:流水灯设计
学 院:
专业班级:
姓 名:
学 号:
指导教师:
2021 年 11 月 26 日
目 录
1.课程设计任务与要求.....................................................................................................................................1
1.1 设计任务...............................................................................................................................................1
1.2 设计要求...............................................................................................................................................1
2.设计原理及方案..............................................................................................................................................1
3.设计步骤和结果..............................................................................................................................................2
3.1 设计思路...............................................................................................................................................2
3.2 设计模块...............................................................................................................................................2
3.2.1 分频模块 ..................................................................................................................................2
3.2.2 普通按键和触摸按键实现模块 .........................................................................................3
3.2.3 数码管显示模块.....................................................................................................................7
3.2.4 顶层模块 ..................................................................................................................................8
3.3 引脚分配...............................................................................................................................................9
3.4RTL ...........................................................................................................................................................9
3.5 仿真模拟.............................................................................................................................................10
3.6 运行效果展示 ...................................................................................................................................11
4.设计总结及体会............................................................................................................................................13
5.参考文献 .........................................................................................................................................................13
1.课程设计任务与要求
1.1 设计任务
设计一个可以按键显示和自动显示的流水灯
1.2 设计要求
1.显示花样四种。
2.两种显示模式:按键显示和自动显示。
3.按键显示模式:每按下一个按键,显示一个花样,且用数码管显示对应的序号,
如花样 1 显示 01,花样 2 显示 02。
4.自动显示模式:当触摸按键按下时,进入自动显示模式,数码管倒计时控制花
样切换。
5.可自加扩展功能。
2.设计原理及方案
基于 FPGA 实现的流水灯设计中,主要包括 4 部分:顶层文件、分频电路、
数码管显示电路、普通按键和触摸按键实现模块,都用 Verilog HDL 语言写入
FPGA 中代替了传统复杂的电路设计,也省去了很多繁琐的调试步骤。只要这些
模块可以通过了仿真,就可以实现传统电路模块的功能。
我们设计了以下几个功能:
0 键作为复位键,起到清除效果,按下时数码管显示 0;
按下 1 键,数码管显示 1,四个 LED 灯从左至右依次闪烁;
按下 2 键,数码管显示 2,四个 LED 灯两个、两个交替闪烁;
按下 3 键,数码管显示 3,四个 LED 灯从右至左依次闪烁;
按下 4 键,数码管显示 4,四个 LED 灯同时亮起;
按下触摸按键,进入自动显示模式,数码管和 LED 灯依次循环实现以上四种
功能;
3.设计步骤和结果
3.1 设计思路
(1)根据实现功能进行模块划分:顶层文件、分频电路、数码管显示电路、普
通按键和触摸按键实现模块。
(2)对各个模块进行代码编写
(3)运行、修改报错代码
(4)进行仿真模拟
(5)在板子上进行实际运行
(6)撰写课程设计报告
3.2 设计模块
3.2.1 分频模块
分频电路的设计,主要是考虑每个 LED 灯闪烁的间隔时间,因此用分频的方
式。
代码:
module fenpin_2hz (
input clk ,
input rst ,
output reg clk_2hz
);
parameter CNT_2HZ = 30'd24999999 ;
reg [29:0] cnt_2hz ;
always @(posedge clk or negedge rst) begin
if ( rst == 1'b0 ) begin
cnt_2hz <= 30'd0 ;
end
else begin
if ( cnt_2hz == CNT_2HZ ) begin
cnt_2hz <= 30'd0 ;
end
else begin
cnt_2hz <= cnt_2hz + 1'b1 ;
end
end
end
always @(posedge clk or negedge rst) begin
if ( rst == 1'b0 ) begin
clk_2hz <= 20'd0 ;
end
else begin
if ( cnt_2hz == CNT_2HZ ) begin
clk_2hz <= 1'b1 ;
end
else begin
clk_2hz <= 1'b0 ;
end
end
end
endmodule
3.2.2 普通按键和触摸按键实现模块
该模块主要是实现复位键、四个普通按键和触摸识别按键对于电子数码管和
四个 LED 灯操作的设置,以及时间计数模块。
代码:
module led_ctrl (
input clk ,
input rst ,
input clk_2hz ,
input [3:0] key ,
input touch_key ,
output reg [3:0] led ,
output reg [3:0] display_cnt
);