7段显示管上滚动显示自己的电话号码
- 格式:doc
- 大小:3.20 MB
- 文档页数:8
FPGA实训报告
课程名称:7段显示管上滚动显示自己的电话号码
目录
一、前言 (2)
二、实验选题 (2)
三、实验设计要求 (2)
四、程序设计说明 (2)
五、实验原理图 (6)
六、引脚分配 (6)
七、部分效果图 (7)
八、实训小结 (8)
九、参考文献 (8)
前言
电子设计自动化(Electronics Design Automation—EDA)技术是现代电子工程领域的一门新技术。
它提供了基于计算机和信息技术的电路系统设计方法。
EDA技术就是依赖功能强大的计算机,对用电路描述语言描述的设计文件,自动地完成编译、化简、分割、综合、布线、优化、仿真等,直至实现既定的电子电路系统的功能。
EDA技术打破了软件设计和硬件设计间的壁垒,是一门综合性学科,一种新的技能技术。
它将设计效率和产品性能合二为一,代表了电子设计技术和电子应用技术的发展方向。
VHDL的全名是Very High Speed Integrated Circuit Hardware Description Language,于83年由美国国防部发起创建,由IEEE(The Institute of Electrical and Electronics Engineers 电气与电子工程师学会)进一步发展,在87年作为“IEEE标准1076”发布,93年被升级为“IEEE1164”。
硬件描述语言是EDA技术的重要组成部分,VHDL作为电子设计的主流硬件描述语言,被多个EDA公司所引用。
VHDL语言具有很强的电路描述和建模能力,能从多个层次对数字系统进行建模和描述,具有良好的移植性和适应性,从而大大简化了硬件设计任务,提高了电子系统设计的效率和可靠性。
用VHDL进行电子系统设计的一个很大的优点是设计者可以专心致力于其功能的实现,而不需要对不影响功能的与工艺有关的因素花费过多的时间和精力。
此次课程设计我们组的项目是“出租车计价器”。
我们小组通过老师一个星期的知识讲解并自学了《FPGA设计基础》,应用Quartus Ⅱ软件进行了设计和编辑。
二、实验选题:7段显示管上滚动显示自己的电话号码
三、实验要求:编写程序模块,用仿真器检测模块设计得正确与否,并给出
仿真波形。
配置下载后观察所设计电路的功能。
四、程序设计:分为三个模块
模块1时钟分频:
module clkdiv(
input wire mclk,
input wire clr,
output wire clk190,
output wire clk48
);
reg[24:0]q;
always@(posedge mclk or posedge clr)
begin
if(clr==1)
q<=0;
else
q<=q+1;
end
assign clk190 =q[17];
assign clk48 =q[24] ;
endmodule
模块2:电话号码滚动显示,说明:在时钟的上升沿,msg_array中的内容循环左移动4位,这个移动数组的输出x【15:0】就是msg_array[0:15]的值;module shift_array(
input wire clk,
input wire clr,
output wire [15:0]x
);
reg[0:43]msg_array;
parameter PHONE_NO=44'h182********;
always@(posedge clk or posedge clr)
begin
if(clr==1)
begin
msg_array<=PHONE_NO;
end
else
begin
msg_array[0:39]<=msg_array[4:43];
msg_array[40:43]<=msg_array[0:3];
end
end
assign x=msg_array[0:15];
endmodule
模块3:七段数码管显示滚动信息:
module x7seg (
input wire [15:0] x,
input wire clk,
input wire clr,
output reg [6:0] a_to_g,
output reg [3:0] an,
output wire dp
);
wire [1:0] s;
reg [3:0] digit;
wire [3:0] aen;
reg [19:0] clkdiv;
assign dp = 1;
assign s = clkdiv[19:18]; // count every 5.2 ms assign aen = 4'b1111; // enable all digits always @ ( * )
case (s)
0: digit = x[3:0];
1: digit = x[7:4];
2: digit = x[11:8];
3: digit = x[15:12];
default: digit = x[3:0];
endcase
always @ ( * )
case (digit)
0: a_to_g = 7'b1111110;
1: a_to_g = 7'b0110000;
2: a_to_g = 7'b1101101;
3: a_to_g = 7'b1111001;
4: a_to_g = 7'b0110011;
5: a_to_g = 7'b1011011;
6: a_to_g = 7'b1011111;
7: a_to_g = 7'b1110000;
8: a_to_g = 7'b1111111;
9: a_to_g = 7'b1111011;
'hA: a_to_g = 7'b1110111;
'hB: a_to_g = 7'b0011111;
'hC: a_to_g = 7'b1001110;
'hD: a_to_g = 7'b0111101;
'hE: a_to_g = 7'b1001111;
'hF: a_to_g = 7'b1000111;
default: a_to_g = 7'b1111110; // 0 endcase
always @ ( * )
begin
an = 4'b1111;
if (aen[s] == 1)
an[s] = 0;
end
// 时钟分频器
always @ (posedge clk or posedge clr) begin
if (clr == 1)
clkdiv <= 0;
else
clkdiv <= clkdiv + 1;
end
endmodule
五、实验原理图
在7段显示管上滚动显示号码
六、引脚分配
程序下载后,截图如下:加载进去Hardware Setup
七、效果图(滚动显示:1826233….)
八、实训小结
本次实训,我的项目是7段显示管上滚动显示自己的电话号码。
因为书上
讲过,所以做起来也比较容易。
该项目在编程上,主要用了三个模块,一是时钟分频,二是实现移位寄存器msg_array[0:43]。
在时钟的上升沿,msg_array中的内容循环左移动4位,这个移动数组的输出x【15:0】就是msg_array[0:15]的值,三是x7seg_msg显示滚动信息。
引脚分配时,注意引脚的选择,知道各引脚的功能作用。
总之,通过本次实训,我加深了QuartusII软件的使用并且掌握了排错调试、相关仪器设备的使用技能等。
为以后更深的学习奠定了夯实的基础。
八、参考文献
1、《EDA技术与应用》陈新华主编机械工业出版社出版
2、《FPGA数字逻辑设计教程——Verilog》电子工业出版社出版
[美]Richard E. Haskell Darrin M. Hanna 著
郑利浩王荃陈华锋译。