7段显示管上滚动显示自己的电话号码
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
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;