VHDL 数字秒表设计.docx
- 文档编号:10164750
- 上传时间:2023-02-09
- 格式:DOCX
- 页数:28
- 大小:448.73KB
VHDL 数字秒表设计.docx
《VHDL 数字秒表设计.docx》由会员分享,可在线阅读,更多相关《VHDL 数字秒表设计.docx(28页珍藏版)》请在冰豆网上搜索。
VHDL数字秒表设计
挣乂上井
通达学院
2017/2018学年第一学期
课程设计
实验报告
名称VHDL课程设计
设计题目
数字秒表设计
任务要求
(1)计时精度10ms,计时范围0~4分秒;
(2)设置启动、停止和复位键控制秒表的工作
(3)用数码管实时显示计时结果。
设备及软件
Quastern
.000.0011.2.33457..10..1213..13...14..15..1517...17...1718
一、课程设计目的与要求
课程设计目的
基本要求
二、设计方案--数字秒表的设计设计功能
秒表基本原理及设计方法
数字秒表设计原理
三、开发环境
四、模块结构
数字秒表RTL级电路
计时器模块
取数模块
编码模块
数码管显示控制模块
数码管地址选择模块
五、设计仿真和实验
计时器模块仿真
秒表仿真
pin引脚接口图
实验结果图
六、总结与体会
错误分析
心得体会
七、参考文献
、课程设计目的与要求
课程设计目的
《EDA技术综合设计与实践》(注:
EDA即电子设计自动化,ElectronicsDesignAutomation)是
继《模拟电子技术基础》、《数字电子技术基础》、《电子技术基础实验》、《EDA》等课程后,电子类等专业学生在电子技术实验技能方面综合性质的实验训练课程,是电子技术基础的一个部分,其目的和任务是通过一周的时间,让学生掌握EDA的基本方法,熟悉一种EDA软件
(QuartusII),并能利用EDA软件设计一个电子技术综合问题,并在实验板上成功下载,为以后进行工程实际问题的研究打下设计基础。
基本要求
(1)通过课程设计使学生能熟练掌握一种EDA软件(QuartusII)的使用方法,能熟练进行设
计输入、编译、管脚分配、下载等过程。
(2)通过课程设计使学生能利用EDA软件(QuartusII)进行至少一个电子技术综合问题的设
计(内容可由老师指定或自由选择),设计输入采用VerilogHDL硬件描述语言输入法。
3)通过课程设计使学生初步具有分析、寻找和排除电子电路中常见故障的能力。
(4)通过课程设计使学生能独立写出严谨的、有理论根据的、计报告。
实事求是的、文理通顺的课程设
二、设计方案--数字秒表的设计
设计功能
1)计时功能:
设计一个秒表,该秒表计时范围为0--59分
59秒990毫秒,分辨率为10毫秒(
秒)。
2)显示功能:
分、秒、毫秒各用2位数码管(共6
位数码管)显示。
3)清零,启动计时,暂停及继续计时功能:
秒表基本原理及设计方法
(1)秒表的基本结构:
该秒表有3个输入端,分别为时钟输入(输入时钟为1毫秒)、复位
输入和启动/暂停。
(2)复位信号高电平有效,可以对整个系统异步清
为高电平时暂停,变低后在原来的数值基础上再计数。
0;当启动/暂停为低电平时秒表开始计时,
(3)百分秒、秒和分钟信号用七段LED显示。
(4)毫秒计数器”采用100进制计数器,每累计该信号将作为秒计数器”的时钟脉冲。
秒计数器一个分脉冲”信号,该信号将被送到分计数器”。
分钟的累计。
1000毫秒(1秒)产生一个”采用60进制计数器,每累计分计数器”采用60进制计时器,
秒脉冲”信号,
60秒,发出可实现对60
数字秒表设计原理
数字秒表采用模块化设计:
(1)输入信号:
基准时钟elk(20MHz),清零端clr(高电平有效),启动/暂停信号en_count
(低电平时启动,高电平时暂停)
(2)一个
计时器:
以10ms为计时分辨率,每10ms产生一个“10毫秒脉冲"信号,每990ms产生秒脉冲”信号,每60秒产生一个分脉冲”信号;
(3)
十进制数;
取数模块:
对计时器输出的分、秒、十毫秒信号进行逐位取数,变成将在数码管上显示的
(4)编码模块:
将分、秒、十毫秒的十进制数转换成数码管显示的编码;
(5)数码管显示控制模块:
每隔3ms使能更新不同数码管的数据,6位数码管更新一次共用时18ms,刷新频率大于50HZ,利用人的视觉暂留,好像6位LED是同时点亮的,并不察觉有闪烁现
象;
18ms。
(6)数码管地址选择模块:
每隔3ms使能点亮不同的数码管,6位数码管一共用时
三、开发环境
开发环境:
1、PC机一台
2、WindowsXP32位操作系统
3、Altera公司的QuartusII软件
4、基于CycloneII型EP2C8Q208C8的开发板
四、模块结构
数字秒表RTL级电路
modulecounter_top(clk,en_count,clr,row_scan_sig,column_scan_sig);
ch
gixuni
inputclk;lk(clk),.clr(clr),.en_count(en_count),
.ms(ms),.sec(sec),.min(min)lk(clk),.clr(clr),.en_count(en_count),
.ms(ms),.sec(sec),.min(min),s_ten(ms_ten),.ms_hun(ms_hun),ec_one(sec_one),.sec_ten(sec_ten),in_one(min_one),.min_ten(min_ten)lk(clk),.clr(clr),.en_count(en_count),
.ms_ten(ms_ten),.ms_hun(ms_hun),
ec_one(sec_one),.sec_ten(sec_ten),
in_one(min_one),.min_ten(min_ten),
s_ten_dis(ms_ten_dis),.ms_hun_dis(ms_hun_dis),
ec_one_dis(sec_one_dis),.sec_ten_dis(sec_ten_dis),
in_one_dis(min_one_dis),.min_ten_dis(min_ten_dis)lk(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)
lk(clk),.clr(clr),
.column_scan_sig(column_scan_sig)//outputoftop
);endmodule
计时器模块
输入信号:
基准时钟elk,清零端cir启动/暂停信号en_count
输出信号:
分min、秒sec、毫秒ms
counfUO
clk
mif?
OJ
clr
en
modulecount(clk,clr,en_count,ms,sec,min);
inputclk,clr,en_count;output[7:
0]ms,sec,min;
reg[17:
0]count1;
reg[7:
0]r_min,r_sec,r_ms;
parameterT10MS=18'd199_999;
//parameterT10MS=18'd1;/*setT10MS=18'd1forsimulation*/
always@(posedgeclkorposedgeclr)if(clr)counti<=18'd0;
elseif(count1==T10MS)count1<=18'dO;else
counti<=count1+1'b1;
always@(posedgeclkorposedgeclr)if(clr)begin
r_min<=8'd0;r_sec<=8'd0;r_ms<=8'd0;end
elseif(en_count)begin
r_min<=r_min;r_sec<=r_sec;r_ms<=r_ms;
endelsebegin
if(count1==T10MS)beginif(r_ms==8'd99)begin
r_ms<=8'd0;if(r_sec==8'd59)begin
r_sec<=8'd0;if(r_min==8'd59)
r_min<=8'd0;else
end
r_min<=r_min+1'b1;
end
assignms=r_ms;
assignsec=r_sec;
assignmin=r_min;
endmodule
取数模块
);
clk,clr,en_count,ms,sec,min,
ms_ten,ms_hun,sec_one,sec_ten,min_one,min_ten
inputclk,clr,en_count;input
[7:
0]ms,sec,min;
output[3:
0]ms_hun,ms_ten,sec_ten,sec_one,min_ten,min_one;
/*********************************/
/*在
reg[31:
0]r_ms_hun,r_ms_ten,r_sec_ten,r_sec_one,r_min_ten,r_min_one;quartusII版本中,“除法器”可以自己定义。
在更高级的版本中,默认下“除法器”和“求余器”是32位输出。
但是经过“编译”过后,编译器会“自动优化”最适合的位宽*/
always@(posedgeclkorposedgeclr)if(clr)begin
r_ms_ten<=32'd0;
r_ms_hun<=32'd0;
end
elseif(en_count)beginr_ms_ten<=r_ms_ten;r_ms_hun<=r_ms_hun;
endelsebegin
r_ms_ten<=ms%10;r_ms_hun<=ms/10;
end
always@(posedgeclkorposedgeclr)if(clr)begin
r_sec_one<=32'd0;r_sec_ten<=32'd0;end
elseif(en_count)begin
r_sec_one<=r_sec_one;r_sec_ten<=r_sec_ten;
endelsebegin
r_sec_one<=sec%10;r_sec_ten<=sec/10;
end
always@(posedgeclkorposedgeclr)if(clr)begin
r_min_one<=32'd0;r_min_ten<=32'd0;
end
elseif(en_count)begin
r_min_one<=r_min_one;r_min_ten<=r_min_ten;
endelsebegin
r_min_one<=min%10;r_min_ten<=min/10;
end/***********************************/
/***********************************/
endmodule
编码模块
输入信号:
基准时钟elk,清零端clr,启动/暂停信号en_count,毫秒的十位ms_ten、毫秒的百
位ms_hun、秒的个位sec_one、秒的十位sec_ten、分的个位min_one、分的十位min_ten
秒的十位编码sec_ten_dis、分的个位编码min_one_dis、分的十位编码min_ten_dismoduleencoder
);
8'b1001_0000;
带小数点的数码管显示
0_=8'b0100_0000,_1_=8'b0111_
_3_=8'b0011_0000,_4_=8'b0001_1001,_5_=8'b0001_0010,_6_=8'b0000_0010,_7_=8'b0111_1000,_8_=8'b0000_0000,_9_=8'b0001_0000;
/*************************************/reg[7:
0]r_ms_ten_dis;
always@(posedgeclkorposedgeclr)if(clr)
r_ms_ten_dis<=_0;elseif(en_count)r_ms_ten_dis<=r_ms_ten_dis;
else
case(ms_ten)
/***************************************/reg[7:
0]r_ms_hun_dis;
always@(posedgeclkorposedgeclr)if(clr)
r_ms_hun_dis<=_0;elseif(en_count)r_ms_hun_dis<=r_ms_hun_dis;
else
case(ms_hun)
4'd0
r_ms_hun_dis
<=_0;
4'd1
4'd2
4'd3
4'd4
4'd5
4'd6
4'd7
4'd8
r_ms_hun_dis
r_ms_hun_dis
r_ms_hun_dis
r_ms_hun_dis
r_ms_hun_disr_ms_hun_dis
r_ms_hun_dis
r_ms_hun_dis
4'd9:
r_ms_hun_dis
/***************************************/
reg[7:
0]r_sec_one_dis;
<=_1;
<=_2;
<=_3;
<=_4;
<=_5;
<=_6;
<=_7;
<=_8;
<=_9;endcase
always@(posedgeclkorposedgeclr)if(clr)
r_sec_one_dis<=_0_;elseif(en_count)
r_sec_one_dis<=r_sec_one_dis;else
case(sec_one)
r_sec_one_dis
4'd0
<=_0_;
4'd1
4'd2
r_sec_one_dis
<=_1_;
r_sec_one_dis
<=_2_;
4'd3
r_sec_one_dis
<=_3_;
4'd4
4'd5
4'd6
4'd7
4'd8
4'd9
r_sec_one_dis
r_sec_one_dis
r_sec_one_dis
r_sec_one_dis
r_sec_one_dis
r_sec_one_dis
<=_4_;
<=_5_;
<=_6_;
<=_7_;
<=_8_;
<=_9_;endcase
/***************************************/reg[7:
0]r_sec_ten_dis;
always@(posedgeclkorposedgeclr)if(clr)
r_sec_ten_dis<=_0;elseif(en_count)r_sec_ten_dis<=r_sec_ten_dis;
else
case(sec_ten)
/***************************************/reg[7:
0]r_min_one_dis;
always@(posedgeclkorposedgeclr)if(clr)
r_min_one_dis<=_0_;elseif(en_count)r_min_one_dis<=r_min_one_dis;
else
case(min_one)
4'd0
r_min_one_dis
<=_0_;
4'd1
4'd2
4'd3
4'd4
4'd5
4'd6
4'd7
4'd8
4'd9
r_min_one_dis
r_min_one_dis
r_min_one_dis
r_min_one_dis
r_min_one_dis
r_min_one_dis
r_min_one_dis
r_min_one_dis
r_min_one_dis
<=_1_;
<=_2_;
<=_3_;
<=_4_;
<=_5_;
<=_6_;
<=_7_;
<=_8_;
<=_9_;endcase
/***************************************/
reg[7:
0]r_min_ten_dis;
always@(posedgeelkorposedgeclr)if(clr)
r_min_ten_dis<=_0;elseif(en_count)r_min_ten_dis<=r_min_ten_dis;
else
case(min_ten)
/***************************************/assignms_ten_dis=r_ms_ten_dis;assignms_hun_dis=r_ms_hun_dis;assignsec_one_dis=r_sec_one_dis;assignsec_ten_dis=r_sec_ten_dis;assignmin_one_dis=r_min_one_dis;assignmin_ten_dis=r_min_ten_dis;
endmodule
数码管显示控制模块
clk,清零端clr,启动/暂停信号en_count,毫秒的十位编码ms_hun_dis、秒的个位编码sec_one_dis、秒的十位编码
min_ten_dis
输出信号:
数码管显示控制信号
row_scan_sig[7:
0]
「cw5can;U3
clk
eJr
nt
nis_ten_ ms_hun_d\s[7.,□]n_fi时”期 丸ne^dts: [7..Q| rTiin_OfH_dii[7..O] mift_ten_dis[7..0J modulerow_scan clk,clr,en_count,row_scan_sig,ms_ten_dis,ms_hun_dis, sec_one_dis,sec_ten_dis,min_one_dis,min_ten_dis); inputclk;inputclr;inputen_count; input[7: 0]ms_ten_dis; input [7: 0]ms_hun dis;input [7: 0] sec_one_dis; input [7: 0] sec_ten_dis; input [7: 0] min_one_dis; input [7: 0] min_ten_dis; output [7: 0] row_scan_sig; parameterT3MS=16'd59_999; // parameterT3MS=16'd1;/*setT3MS=16'd1forsimulation*/ reg[15: 0]count3;reg[2: 0]t; reg[7: 0]rdata; always@(posedgeclkorposedgeclr)/*3mscounter*/if(clr) count3<=16'd0;elseif(count3==T3MS) count3<=16'd0;elsecount3<=count3+16'b1; /*控制扫描的次序,寄存器t表示了当前扫描的是第几个数码管*/always@(posedgeclkorposedgeclr) if(clr)t<=3'd0; elseif(t==3'd6)t<=3'd0; elseif(count3==T3MS)t<=t+1'b1; always@(posedgeclkorposedgeclr)if(clr) rdata<=8'b1100_0000;elseif(en_count)rdata<=rdata; elseif(count3==T3MS)case(t) 3'd0: rdata<=ms_ten_dis; 3'd1: rdata<=ms_hun_dis; 3'd2: rdata<=sec_one_dis; 3'd3: rdata<=sec_ten_dis; 3'd4: rdata<=min_one_dis; 3'd5: rdata<=min_ten_dis;endcase assignrow_scan_sig=rdata; endmodule 数码管地址选择模块 输入信号: 基准时钟clk,清零端clr 输出信号: 数码管地址选择信号column_scan_sig[5: 0] colummscaryU4 elk modulecolumn_scan(clk,clr,column_scan_sig); inputclk;inputclr; output[5: 0]column_scan_sig; parameterT3MS=16'd59_999; //pa
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- VHDL 数字秒表设计 数字 秒表 设计