VHDL数字秒表设计.docx

上传人:b****6 文档编号:4563582 上传时间:2022-12-06 格式:DOCX 页数:21 大小:351.18KB
下载 相关 举报
VHDL数字秒表设计.docx_第1页
第1页 / 共21页
VHDL数字秒表设计.docx_第2页
第2页 / 共21页
VHDL数字秒表设计.docx_第3页
第3页 / 共21页
VHDL数字秒表设计.docx_第4页
第4页 / 共21页
VHDL数字秒表设计.docx_第5页
第5页 / 共21页
点击查看更多>>
下载资源
资源描述

VHDL数字秒表设计.docx

《VHDL数字秒表设计.docx》由会员分享,可在线阅读,更多相关《VHDL数字秒表设计.docx(21页珍藏版)》请在冰豆网上搜索。

VHDL数字秒表设计.docx

VHDL数字秒表设计

VHDL-数字秒表设计

LT

 

一、课程设计目的与要求

1.1课程设计目的

《EDA技术综合设计与实践》(注:

EDA即电子设计自动化,ElectronicsDesignAutomation)是继《模拟电子技术基础》、《数字电子技术基础》、《电子技术基础实验》、《EDA》等课程后,电子类等专业学生在电子技术实验技能方面综合性质的实验训练课程,是电子技术基础的一个部分,其目的和任务是通过一周的时间,让学生掌握EDA的基本方法,熟悉一种EDA软件(QuartusII),并能利用EDA软件设计一个电子技术综合问题,并在实验板上成功下载,为以后进行工程实际问题的研究打下设计基础。

1.2基本要求

(1)通过课程设计使学生能熟练掌握一种EDA软件(QuartusII)的使用方法,能熟练进行设计输入、编译、管脚分配、下载等过程。

(2)通过课程设计使学生能利用EDA软件(QuartusII)进行至少一个电子技术综合问题的设计(内容可由老师指定或自由选择),设计输入采用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、WindowsXP32位操作系统

3、Altera公司的QuartusII9.0软件

4、基于CycloneII型EP2C8Q208C8的开发板

 

四、模块结构

4.1数字秒表RTL级电路

 

modulecounter_top(clk,en_count,clr,row_scan_sig,column_scan_sig);

inputclk;//inputclock20MHz

inputen_count;//startandpause

inputclr;//clear

output[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;

countU0

.clk(clk),.clr(clr),.en_count(en_count),

.ms(ms),.sec(sec),.min(min)//output-toU1

);

number_modU1

.clk(clk),.clr(clr),.en_count(en_count),

.ms(ms),.sec(sec),.min(min),//input-fromU0

.ms_ten(ms_ten),.ms_hun(ms_hun),//output-toU2

.sec_one(sec_one),.sec_ten(sec_ten),//output-toU2

.min_one(min_one),.min_ten(min_ten)//output-toU2

);

encoderU2

.clk(clk),.clr(clr),.en_count(en_count),

.ms_ten(ms_ten),.ms_hun(ms_hun),

//input-fromU1

.sec_one(sec_one),.sec_ten(sec_ten),

//input-fromU1

.min_one(min_one),.min_ten(min_ten),

//input-fromU1

.ms_ten_dis(ms_ten_dis),.ms_hun_dis(ms_hun_dis),

//output-toU3

.sec_one_dis(sec_one_dis),.sec_ten_dis(sec_ten_dis),

//output-toU3

.min_one_dis(min_one_dis),.min_ten_dis(min_ten_dis)//output-toU3

);

row_scanU3

.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)

//outputoftop

//input-fromU2

//input-fromU2

//input-fromU2

);

column_scanU4

.clk(clk),.clr(clr),

.column_scan_sig(column_scan_sig)//outputoftop

);endmodule

4.2计时器模块

输入信号:

基准时钟clk,清零端clr,启动/暂停信号en_count

输出信号:

分min、秒sec、毫秒ms

 

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)

count1<=18'd0;

elseif(count1==T10MS)count1<=18'd0;

else

count1<=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;

endelse

begin

if(count1==T10MS)begin

if(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

r_min<=r_min+1'b1;

endelse

r_sec<=r_sec+1'b1;

endelse

r_ms<=r_ms+1'b1;

end

end

assignms=r_ms;

assignsec=r_sec;

assignmin=r_min;

endmodule

4.3取数模块

输入信号:

基准时钟clk,清零端clr,启动/暂停信号en_count,分min、秒sec、毫秒ms

输出信号:

毫秒的十位ms_ten、毫秒的百位ms_hun、秒的个位sec_one、秒的十位sec_ten、分的个位min_one、分的十位min_tenmodulenumber_mod

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;/*在quartusII9.0版本中,“除法器”可以自己定义。

在更高级的版本中,默认下“除法器”和“求余器”是32位输出。

但是经过“编译”过后,编译器会“自动优化”最适合的位宽*/

always@(posedgeclkorposedgeclr)if(clr)

begin

r_ms_ten<=32'd0;r_ms_hun<=32'd0;

end

elseif(en_count)begin

r_ms_ten<=r_ms_ten;

r_ms_hun<=r_ms_hun;

endelse

begin

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;

endelse

begin

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;

endelse

begin

r_min_one<=min%10;r_min_ten<=min/10;

end/***********************************/

assignms_ten=r_ms_ten[3:

0];

assignms_hun=r_ms_hun[3:

0];

assignsec_one=r_sec_one[3:

0];

assignsec_ten=r_sec_ten[3:

0];

assignmin_one=r_min_one[3:

0];

assignmin_ten=r_min_ten[3:

0];

/***********************************/

endmodule

4.4编码模块

输入信号:

基准时钟clk,清零端clr,启动/暂停信号en_count,毫秒的十位ms_ten、毫秒的百位ms_hun、秒的个位sec_one、秒的十位sec_ten、分的个位min_one、分的十位min_ten

输出信号:

毫秒的十位编码ms_ten_dis、毫秒的百位编码ms_hun_dis、秒的个位编码sec_one_dis、

秒的十位编码sec_ten_dis、分的个位编码min_one_dis、分的十位编码min_ten_dismoduleencoder

clk,clr,en_count,ms_ten,ms_hun,ms_ten_dis,ms_hun_dis,sec_one,sec_ten,sec_one_dis,sec_ten_dis,min_one,min_ten,min_one_dis,min_ten_dis

);

inputclk,clr,en_count;

input[3:

0]ms_ten,ms_hun,sec_ten,sec_one,min_ten,min_one;

output[7:

0]ms_ten_dis,ms_hun_dis,sec_ten_dis,sec_one_dis,min_ten_dis,min_one_dis;

/*******************不带小数点的数码管显示*********************/

parameter_0=8'b1100_0000,_1=8'b1111_1001,_2=8'b1010_0100,_3=8'b1011_0000,_4=8'b1001_1001,_5=8'b1001_0010,_6=8'b1000_0010,_7=8'b1111_1000,_8=8'b1000_0000,_9=8'b1001_0000;

/*******************带小数点的数码管显示*********************/

parameter_0_=8'b0100_0000,_1_=8'b0111_1001,_2_=8'b0010_0100,

_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)

4'd0:

r_ms_ten_dis<=_0;

4'd1:

r_ms_ten_dis<=_1;

4'd2:

r_ms_ten_dis<=_2;

4'd3:

r_ms_ten_dis<=_3;

4'd4:

r_ms_ten_dis<=_4;

4'd5:

r_ms_ten_dis<=_5;

4'd6:

r_ms_ten_dis<=_6;

4'd7:

r_ms_ten_dis<=_7;

4'd8:

r_ms_ten_dis<=_8;

4'd9:

r_ms_ten_dis<=_9;endcase

/***************************************/

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:

r_ms_hun_dis<=_1;

4'd2:

r_ms_hun_dis<=_2;

4'd3:

r_ms_hun_dis<=_3;

4'd4:

r_ms_hun_dis<=_4;

4'd5:

r_ms_hun_dis<=_5;

4'd6:

r_ms_hun_dis<=_6;

4'd7:

r_ms_hun_dis<=_7;

4'd8:

r_ms_hun_dis<=_8;

4'd9:

r_ms_hun_dis<=_9;endcase

/***************************************/

reg[7:

0]r_sec_one_dis;

 

always@(posedgeclkorposedgeclr)if(clr)

r_sec_one_dis<=_0_;elseif(en_count)

r_sec_one_dis<=r_sec_one_dis;else

case(sec_one)

4'd0:

r_sec_one_dis<=_0_;

4'd1:

r_sec_one_dis<=_1_;

4'd2:

r_sec_one_dis<=_2_;

4'd3:

r_sec_one_dis<=_3_;

4'd4:

r_sec_one_dis<=_4_;

4'd5:

r_sec_one_dis<=_5_;

4'd6:

r_sec_one_dis<=_6_;

4'd7:

r_sec_one_dis<=_7_;

4'd8:

r_sec_one_dis<=_8_;

4'd9:

r_sec_one_dis<=_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)

4'd0:

r_sec_ten_dis<=_0;

4'd1:

r_sec_ten_dis<=_1;

4'd2:

r_sec_ten_dis<=_2;

4'd3:

r_sec_ten_dis<=_3;

4'd4:

r_sec_ten_dis<=_4;

4'd5:

r_sec_ten_dis<=_5;

4'd6:

r_sec_ten_dis<=_6;

4'd7:

r_sec_ten_dis<=_7;

4'd8:

r_sec_ten_dis<=_8;

4'd9:

r_sec_ten_dis<=_9;endcase

/***************************************/

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:

r_min_one_dis<=_1_;

4'd2:

r_min_one_dis<=_2_;

4'd3:

r_min_one_dis<=_3_;

4'd4:

r_min_one_dis<=_4_;

4'd5:

r_min_one_dis<=_5_;

4'd6:

r_min_one_dis<=_6_;

4'd7:

r_min_one_dis<=_7_;

4'd8:

r_min_one_dis<=_8_;

4'd9:

r_min_one_dis<=_9_;endcase

/***************************************/

reg[7:

0]r_min_ten_dis;

 

always@(posedgeclkorposedgeclr)if(clr)

r_min_ten_dis<=_0;elseif(en_count)

r_min_ten_dis<=r_min_ten_dis;

else

case(min_ten)

4'd0:

r_min_ten_dis<=_0;

4'd1:

r_min_ten_dis<=_1;

4'd2:

r_min_ten_dis<=_2;

4'd3:

r_min_ten_dis<=_3;

4'd4:

r_min_ten_dis<=_4;

4'd5:

r_min_ten_dis<=_5;

4'd6:

r_min_ten_dis<=_6;

4'd7:

r_min_ten_

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高中教育 > 高中教育

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1