资源预览内容
第1页 / 共24页
第2页 / 共24页
第3页 / 共24页
第4页 / 共24页
第5页 / 共24页
第6页 / 共24页
第7页 / 共24页
第8页 / 共24页
第9页 / 共24页
第10页 / 共24页
亲,该文档总共24页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
通达学院2017/2018学年 第一学期课程设计 实验报告模 块 名 称 VHDL课程设计 专 业 学 生 班 级 学 生 学 号 学 生 姓 名 指 导 教 师 设计题目数字秒表设计任务要求(1)计时精度10ms,计时围04分59.99秒;(2)设置启动、停止和复位键控制秒表的工作(3)用数码管实时显示计时结果。设备及软件Quaster 目 录一、课程设计目的与要求11.1 课程设计目的11.2 基本要求1二、设计方案-数字秒表的设计12.1 设计功能12.2 秒表基本原理及设计方法22.3 数字秒表设计原理2三、开发环境3四、模块结构44.1 数字秒表RTL级电路44.2 计时器模块54.3 取数模块74.4 编码模块84.5 数码管显示控制模块124.6 数码管地址选择模块13五、 设计仿真和实验155.1 计时器模块仿真155.2 秒表仿真155.3 pin引脚接口图165.4 实验结果图17六、总结与体会196.1 错误分析196.2 心得体会19七、参考文献20 / 一、课程设计目的与要求1.1 课程设计目的EDA 技术综合设计与实践(注:EDA 即电子设计自动化,Electronics Design Automation)是继模拟电子技术基础、数字电子技术基础、电子技术基础实验、EDA等课程后,电子类等专业学生在电子技术实验技能方面综合性质的实验训练课程,是电子技术基础的一个部分,其目的和任务是通过一周的时间,让学生掌握 EDA 的基本方法,熟悉一种 EDA 软件(Quartus II),并能利用 EDA 软件设计一个电子技术综合问题,并在实验板上成功下载,为以后进行工程实际问题的研究打下设计基础。1.2 基本要求(1)通过课程设计使学生能熟练掌握一种 EDA 软件(Quartus II)的使用方法,能熟练进行设计输入、编译、管脚分配、下载等过程。(2)通过课程设计使学生能利用 EDA 软件(Quartus II)进行至少一个电子技术综合问题的设计(容可由老师指定或自由选择),设计输入采用 VerilogHDL 硬件描述语言输入法。(3)通过课程设计使学生初步具有分析、寻找和排除电子电路中常见故障的能力。(4)通过课程设计使学生能独立写出严谨的、有理论根据的、实事的、文理通顺的课程设计报告。二、设计方案-数字秒表的设计2.1 设计功能(1)计时功能:设计一个秒表,该秒表计时围为 0-59 分 59 秒 990 毫秒,分辨率为 10 毫秒(0.01秒)。(2)显示功能:分、秒、毫秒各用 2 位数码管(共 6 位数码管)显示。(3)清零,启动计时,暂停及继续计时功能:2.2 秒表基本原理及设计方法(1)秒表的基本结构:该秒表有 3 个输入端,分别为时钟输入(输入时钟为 1 毫秒)、复位输入和启动/暂停。(2)复位信号高电平有效,可以对整个系统异步清 0;当启动/暂停为低电平时秒表开始计时,为高电平时暂停,变低后在原来的数值基础上再计数。(3)百分秒、秒和分钟信号用七段 LED 显示。(4)“毫秒计数器”采用 100 进制计数器,每累计 1000 毫秒(1 秒)产生一个“秒脉冲”信号,该信号将作为“秒计数器”的时钟脉冲。“秒计数器”采用60 进制计数器,每累计 60 秒,发出一个“分脉冲”信号,该信号将被送到“分计数器”。“分计数器”采用 60 进制计时器,可实现对 60 分钟的累计。2.3 数字秒表设计原理数字秒表采用模块化设计:(1)输入信号:基准时钟 clk(20MHz),清零端 clr(高电平有效),启动/暂停信号 en_count(低电平时启动,高电平时暂停)(2)计时器:以 10ms 为计时分辨率,每 10ms 产生一个“10 毫秒脉冲”信号,每 990ms 产生一个“秒脉冲”信号,每 60 秒产生一个“分脉冲”信号;(3)取数模块:对计时器输出的分、秒、十毫秒信号进行逐位取数,变成将在数码管上显示的十进制数;(4)编码模块:将分、秒、十毫秒的十进制数转换成数码管显示的编码;(5)数码管显示控制模块:每隔 3ms 使能更新不同数码管的数据,6 位数码管更新一次共用时 18ms,刷新频率大于 50HZ,利用人的视觉暂留,好像 6 位 LED 是同时点亮的,并不察觉有闪烁现象;(6)数码管地址选择模块:每隔 3ms 使能点亮不同的数码管,6 位数码管一共用时 18ms。三、开发环境开发环境:1、PC 机一台2、Windows XP 32 位操作系统3、Altera 公司的 Quartus II 9.0 软件4、基于 Cyclone II 型 EP2C8Q208C8 的开发板四、模块结构4.1 数字秒表RTL级电路module counter_top(clk,en_count,clr,row_scan_sig,column_scan_sig);input clk;/input clock 20MHzinput en_count;/start and pauseinput clr;/clearoutput 7:0 row_scan_sig; output 5:0 column_scan_sig;wire 7:0 ms,sec,min;wire 3:0 ms_hun,ms_ten,sec_ten,sec_one,min_ten,min_one;wire 7:0 ms_ten_dis,ms_hun_dis,sec_ten_dis,sec_one_dis,min_ten_dis,min_one_dis;count U0(.clk(clk),.clr(clr),.en_count(en_count),.ms(ms),.sec(sec),.min(min)/ output - to U1);number_mod U1(.clk(clk),.clr(clr),.en_count(en_count),.ms(ms),.sec(sec),.min(min),/ input - from U0.ms_ten(ms_ten),.ms_hun(ms_hun),/ output - to U2.sec_one(sec_one),.sec_ten(sec_ten),/ output - to U2.min_one(min_one),.min_ten(min_ten) / output - to U2);encoder U2(.clk(clk),.clr(clr),.en_count(en_count),.ms_ten(ms_ten),.ms_hun(ms_hun),/ input - from U1.sec_one(sec_one),.sec_ten(sec_ten),/ input - from U1.min_one(min_one),.min_ten(min_ten),/ input - from U1.ms_ten_dis(ms_ten_dis),.ms_hun_dis(ms_hun_dis),/ output - to U3.sec_one_dis(sec_one_dis),.sec_ten_dis(sec_ten_dis),/ output - to U3.min_one_dis(min_one_dis),.min_ten_dis(min_ten_dis) / output - to U3);row_scan U3(.clk(clk),.clr(clr),.en_count(en_count),.ms_ten_dis(ms_ten_dis),.ms_hun_dis(ms_hun_dis),.sec_one_dis(sec_one_dis),.sec_ten_dis(sec_ten_dis),.min_one_dis(min_one_dis),.min_ten_dis(min_ten_dis),.row_scan_sig(row_scan_sig)/ output of top/ input - from U2/ input - from U2/ input - from U2);column_scan U4(.clk(clk),.clr(clr),.column_scan_sig( column_scan_sig ) / output of top); endmodule4.2 计时器模块输入信号:基准时钟 clk,清零端 clr,启动/暂停信号 en_count输出信号:分 min、秒 sec、毫秒 msmodule count(clk,clr,en_count,ms,sec,min);input clk,clr,en_count; output 7:0 ms,sec,min;reg 17:0count1;reg 7:0 r_min,r_sec,r_ms;parameter T10MS = 18d199_999;/ parameter T10MS = 18d1;/*set T10MS = 18d1 for simulation */always ( posedge clk or posedge clr ) if( clr )count1 = 18d0;else if( count1 = T10MS ) count1 = 18d0;elsecount1 = count1 + 1b1;always ( posedge clk or posedge clr ) if( clr )beginr_min = 8d0; r_sec = 8d0; r_ms = 8d0;endelse if(en_count) beginr_min = r_min; r_sec = r_sec; r_ms = r_ms;end elsebeginif(count1 = T10MS) beginif(r_ms = 8d99) beginr_ms = 8d0; if(r_sec = 8d59
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号