数字秒表韦强.docx
《数字秒表韦强.docx》由会员分享,可在线阅读,更多相关《数字秒表韦强.docx(17页珍藏版)》请在冰豆网上搜索。
数字秒表韦强
郑州科技学院
EDA(电子设计自动化)
设计报告
题目数字秒表
学生姓名韦强
专业班级10级电科4班
学号201031090
所在系电气工程学院
任课教师赵明冬
完成时间2013年12月23日
1.系统设计方案1
2.底层模块设计2
2.1计时电路2
2.2计时控制电路6
2.3显示电路6
3.顶层原理图9
4.系统仿真9
4.1计时电路的仿真9
4.2计时控制电路的仿真11
4.3显示电路的仿真11
5.心得体会13
参考文献14
绪论
随着科技的发展,现如今集成电路和计算机应用得到了发展,尤其是计算机应用的发展,它在人们日常生活已逐渐崭露头角。
大多数电子产品多是由计算机电路组成,如:
手机、Mp3等。
而在将来的不就他们的身影将会更频繁的出现在我们身边呢。
各种家用电器多会实现微电脑技术。
电脑各部分在工作时多是以时间为基准的。
本文就是基于计算机电路的时钟脉冲信号、状态控制等原理设计出的数字秒表。
秒表在很多领域充当中一个重要的角色。
在各类比赛中对秒表的精度要求很高,尤其是一些科学实验,他们对时间的精度达到几纳米级别。
VHDL是一种全方位的硬件描述语言,包括系统行为级、寄存器传输级和逻辑门级多个设计层次,支持结构、数据流和行为3种描述形式的混合描述,因此VHDL几乎覆盖了以往各种硬件描述语言的功能,整个自顶向下或自底向上的电路设计过程都可以用VHDL来完成。
另外,VHDL还有以下优点:
VHDL的宽范围描述能力使它成为高层次设计的核心,将设计人员的工作重心转移到了系统功能的实现和调试上,只需要花较少的精力用于物理实现;VHDL可以用简洁明确的代码描述来进行复杂控制逻辑的设计,灵活且方便,而且也便于设计结果的交流、保存和重用;VHDL的设计不依赖于特定的器件,方便了工艺的转换。
本次设计的目的就是在掌握EDA实验开发系统的初步使用基础上,了解EDA技术,对计算机系统中时钟控制系统进一步了解,掌握状态机工作原理,同时了解计算机时钟卖场是怎么产生和工作的。
在掌握所学的计算机组成与结构课程理论知识时,通过对数字秒表的设计,进行理论与实际的结合,提供与计算机有关的设计能力,提高分析、解决计算机技术实际问题的能力。
通过课程设计深入了解计算机结构与控制实现的技术,达到课程设计的目标。
1.系统设计方案
根据系统设计要求,系统的组成框图如图1所示。
图1系统组成框图
系统设计采用自顶向下的设计方法,它主要是由控制模块、时基分频模块、计时模块和显示模块四部分组成。
(1)控制模块
计时控制模块的作用是对计时过程进行控制。
计时控制模块可用两个按钮开关来完成秒表的启动、停止和复位。
(2)计时模块
计时模块执行计时功能,计时的方法是对标准时钟脉冲计数。
由于计时范围是0秒~59分59.59秒,所以计时器可以由两个60进制计数器和一个100进制计数器构成,其中分和秒采用60进制计数器,毫秒采用100进制计数器。
(3)显示模块
计时显示电路的作用是将计时值在LED七段译码数码管上显示出来。
计时电路产生的计时值经过BCD七段译码后,驱动LED数码管。
计时显示电路的实现方案采用扫描显示,即每次只驱动一位数码管,各位数码管轮流驱动对应的数码管进行显示。
2.底层模块设计
底层单元模块共有七个,全部用VHDL语言描述。
它主要是由计时电路、计时控制电路及显示电路组成。
2.1计时电路
计时电路执行计时功能,主要是由时基分频器、计数器组成。
计时方法是对标准时钟脉冲计数,计数器是由一个100进制计数器和两个60进制计数器构成,其中毫秒位采用100进制计数器,秒位和分位采用60进制计数器。
2.1.1时基分频器
时基分频器的作用是把输入的时钟信号变为分频输出信号,课设要求提供给计时器内部定时的时钟频率应大于100Hz,这里选用1KHz,即需将试验箱上20MHz时钟信号变频为1KHz,产生0.001秒时钟信号,使该秒表的计时精度达到要求。
分频器实际上就是计数器,假若输入端的时钟频率是f,每当输入N个时钟脉冲时,令输出端反向一次,则输出端对应的时钟频率就是f/(2N),任意改变数值N,就可以得到对应频率的输出脉冲。
生成元件如图2.1.1所示:
图2.1.1时基分频器
1KHZ分频程序:
libraryieee;
useieee.std_logic_1164.all;
entitycounter10000is
port(clk:
instd_logic;
q:
outstd_logic);
endcounter10000;
architecturebehaveofcounter10000is
signalq0:
std_logic;
begin
process(clk)
variablecount:
integerrange0to10000;
begin
ifclk'eventandclk='1'then
ifcount<10000thencount:
=count+1;
elseq0<=notq0;count:
=0;
endif;
endif;
endprocess;
q<=q0;
endbehave;
2.1.2100进制计数器
时基分频器的输出端输出频率为1KHz的时钟信号,输入到100进制计数器毫秒模块的时钟端CLK,产生的进位信号CO输入到下一级60进制计数器秒模块中。
100进制毫秒模块程序:
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entitycntm100is
port(cs,clk:
instd_logic;
co:
bufferstd_logic;
s_10ms,s_100ms:
bufferstd_logic_vector(3downto0);
clear:
instd_logic);
end;
architecturebehaveofcntm100is
signalclock:
std_logic;
begin
process(clk)
variablecount1:
integerrange0to5;
begin
ifclk'eventandclk='1'then
ifcount1<5thencount1:
=count1+1;
elseclock<=notclock;count1:
=0;
endif;
endif;
endprocess;
process(clock,cs,clear)
begin
ifclear='0'then
ifcs='1'then
ifclock'eventandclock='1'thenco<='0';
ifs_10ms=9thens_10ms<=(others=>'0');
ifs_100ms=9thens_100ms<=(others=>'0');co<=notco;
elses_100ms<=s_100ms+1;
endif;
elses_10ms<=s_10ms+1;
endif;
endif;
elses_10ms<=s_10ms;s_100ms<=s_100ms;
endif;
elses_10ms<=(others=>'0');s_100ms<=(others=>'0');
endif;
endprocess;
endbehave;
2.1.360进制计数器
100进制计数器的输出端CO输出频率为1Hz的时钟信号,输入到60进制秒模块的时钟端CLK,产生的进位信号CO(1/60Hz)输入到60进制分模块的时钟输入端。
同时,将毫秒、秒、分产生的计数值通过启动/暂停开关、清零开关控制,再通过显示模块实时显示,若清零开关Clear=‘1’,则各位输出均为0,反之正常显示;同时,若启动/暂停开关CS=‘1’,则正常按脉冲计数显示,反之,输出各位输出显示值暂停。
生成元件连接图如图2.1.2所示:
图2.1.2计数器模块
60进制秒模块程序:
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entitycntm60miaois
port(clk:
instd_logic;
co:
bufferstd_logic;
s_1s,s_10s:
bufferstd_logic_vector(3downto0);
clear:
instd_logic);
end;
architecturebehaveofcntm60miaois
begin
process(clk)
begin
ifclear='0'then
ifclk'eventandclk='1'thenco<='0';
ifs_1s=9thens_1s<=(others=>'0');
ifs_10s=5thens_10s<=(others=>'0');co<=notco;
elses_10s<=s_10s+1;
endif;
elses_1s<=s_1s+1;
endif;
endif;
elses_1s<=(others=>'0');s_10s<=(others=>'0');
endif;
endprocess;
endbehave;
60进制分模块程序:
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entitycntm60fenis
port(clk:
instd_logic;
s_1min,s_10min:
bufferstd_logic_vector(3downto0);
clear:
instd_logic);
end;
architecturebehaveofcntm60fenis
begin
process(clk)
begin
ifclear='0'then
ifclk'eventandclk='1'then
ifs_1min=9thens_1min<=(others=>'0');
ifs_10min=5thens_10min<=(others=>'0');
elses_10min<=s_10min+1;
endif;
elses_1min<=s_1min+1;
endif;
endif;
elses_1min<=(others=>'0');s_10min<=(others=>'0');
endif;
endprocess;
endbehave;
2.2计时控制电路
此模块实现的功能是:
在数码管位选信号Choose的控制下,将毫秒、秒、分位对应输出到译码电路输入端。
其元件如图2.2所示:
图2.2计时控制模块
2.3显示电路
2.3.1七段译码器
该模块实现将四位二进制码转换成十进制数字输出,使之在数码管上显示出0、1、2、3、4、5、6、7、8、9十种数字。
生成元件如图2.3.1所示:
图2.3.1七段译码器
译码器模块程序:
libraryieee;
useieee.std_logic_1164.all;
entityseg7decis
port(bcdin:
instd_logic_vector(3downto0);
choose:
instd_logic_vector(2downto0);
segout:
outstd_logic_vector(0to7));
end;
architecturebevofseg7decis
begin
process(bcdin,choose)
begin
ifchoose="010"orchoose="100"then
casebcdinis
when"0000"=>segout<="11111101";
when"0001"=>segout<="01100001";
when"0010"=>segout<="11011011";
when"0011"=>segout<="11110011";
when"0100"=>segout<="01100111";
when"0101"=>segout<="10110111";
when"0110"=>segout<="10111111";
when"0111"=>segout<="11100001";
when"1000"=>segout<="11111111";
when"1001"=>segout<="11110111";
whenothers=>null;
endcase;
else
casebcdinis
when"0000"=>segout<="11111100";
when"0001"=>segout<="01100000";
when"0010"=>segout<="11011010";
when"0011"=>segout<="11110010";
when"0100"=>segout<="01100110";
when"0101"=>segout<="10110110";
when"0110"=>segout<="10111110";
when"0111"=>segout<="11100000";
when"1000"=>segout<="11111110";
when"1001"=>segout<="11110110";
whenothers=>null;
endcase;
endif;
endprocess;
end;
2.3.2扫描模块
此模块实现6位数码管的位选操作功能,其实质就是计数器,输出端接实验箱上的3/8译码器。
当扫描频率大于24Hz时,由于发光管的余辉和人眼视觉暂留的作用,使人感觉好像各位数码管同时都在显示,二实际上多位数码管是一位一位轮流显示的,只是轮流的速度非常快,人眼已经无法分辨。
其元件如图2.3.2所示:
图2.3.2扫描模块
扫描模块程序:
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entitycntm8is
port(clk:
instd_logic;
count:
outstd_logic_vector(2downto0));
end;
architectureoneofcntm8is
signalq0:
std_logic;
begin
process(clk)
variablecount1:
integerrange0to30000;
begin
ifclk'eventandclk='1'then
ifcount1<30000thencount1:
=count1+1;
elseq0<=notq0;count1:
=0;
endif;
endif;
endprocess;
process(q0)
variableCQI:
std_logic_vector(2downto0);
begin
ifq0'eventandq0='1'then
ifCQI<5thenCQI:
=CQI+1;
elseCQI:
=(others=>'0');
endif;
endif;
count<=CQI;
endprocess;
endone;
3.顶层原理图
以上所描述的模块的程序编写均在同一工程下,由程序生成的元件也在该工程下,所以可以在该工程下再建一原理图作为顶层,将所需要的元件按照要求进行连线,加入输入输出处端口并改名。
包层原理图,并将原理图置为顶层文件。
本设计的整体原理图如图3所示:
图3整体原理图
4.系统仿真
4.1计时电路的仿真
4.1.1100进制计数器的仿真
图4.1.1100进制计数器的仿真
分析:
clk为时钟脉冲信号,clear是清零信号,cs是启/停信号,s-10ms是十毫秒输出信号,s-100ms是百毫秒输出信号,co是进位信号。
当clear=‘0’,cs=‘1’时,每经过十次时钟脉冲,s-10ms加一,当s-10ms满十时,s-100ms加一,以此类推。
4.1.260进制计数器秒模块的仿真
图4.1.260进制计数器秒模块的仿真
分析:
clk为时钟脉冲信号,clear是清零信号,s-1s是秒输出信号,s-10s是十秒输出信号,co是进位信号。
当clear=‘0’时,每经过一次时钟脉冲,s-1s加一,当s-1s满十次时,s-10s加一,且co输出一次高电平,以此类推。
4.1.360进制计数器分模块的仿真
图4.1.360进制计数器分模块的仿真
分析:
clk为时钟脉冲信号,clear是清零信号,s-1min是分输出信号,s-10min是十分输出信号。
当clear=‘0’时,每经过一次时钟脉冲,s-1min加一,当s-1min满十次时,s-10min加一,以此类推。
4.2计时控制电路的仿真
图4.2控制模块的仿真
分析:
在数码管位选信号choose的控制下,分别选择对应的输入端传递给输出端y,当choose=0时,将s-10ms的内容输出,当choose=1时,将s-100ms的内容输出,以此类推。
4.3显示电路的仿真
4.3.1扫描电路的仿真
图4.3.1扫描电路的仿真
分析:
clk是时钟信号,count是数码管位选信号,一次轮流扫描第0~5位数码管。
4.3.2七段译码器的仿真
图4.3.2七段译码器的仿真
分析:
BCD为时钟脉冲输入信号,LED是输出信号。
当输入为“0000”,输出为“1111110”,当输入为“0001”,输出为“0110000”,当输入为“0010”,输出为“1101101”等等来实现译码功能。
器件编程与硬件下载
(1)在Quartus软件中为顶层文件选择好芯片类型,选择引脚后进行编译。
(2)将实验箱端口与计算机相应端口连接,检测试验箱是否可以使用,经检测无误后,关闭试验箱,将主芯片标号对应顶层文件相应引脚标号连线到相应器件处。
即输入时钟信号端接试验箱时钟发生电路CLK输出端(用20MHz信号),启动新号段与归零信号端分别接两个拨码开关,输出端count[2..0]分别接3/8译码器的SEL2—SEL0端,输出a,b,c,d,e,f,g,h端接显示译码器的相应输入端,连接好线后打开试验箱电源,将设计好的程序下载到试验箱的芯片上即可测试功能。
5.心得体会
通过本次课设,不仅学到了关于EDA的许多专业知识,同时也享受到了动手的乐趣,还认识到了QuartusⅡ软件的功能非常强大,对于很多关于电方面的元器件都可以用它来实现,这使得在使用的时候非常方便及多变。
同时也熟悉了QuartusⅡ的工作环境,可以很熟练的对QuartusⅡ进行常规的操作,快速进行程序编辑和仿真。
其实如何有效和快速的找到资料也是课设给与的启发,利用好图书馆和网络,是资源的到最好的利用。
另外,与他人交流思想是取得成功的关键,在交流中,不仅强化了自己原有的知识体系也可以扩展自己的思维。
通过思考、发问、自己解惑并动手、改进的过程,才能真正的完成课题。
另外,在应用VHDL的过程中,也真正切身领会到了其并行运行与其他软件顺序执行的差别及其在电路上的优越性。
用VHDL硬件描述语言的形式来进行数字系统的设计方便灵活,利用EDA软件进行编译优化仿真极大地减少了电路设计时间和可能发生的错误,降低了生产成本。
通过这次设计和设计中遇到的问题,也积累了一定的经验,对今后从事电路设计工作会有一定的帮助。
参考文献
[1]潘松,黄继业.EDA技术与VHDL,第2版.北京:
清华大学出版社,2007.
[2]陈小毛,胡机秀.新编数字电路与EDA技术.北京:
国防工业出版社,2008.
[3]夏路易.基于EDA的电子技术课程设计.北京:
电子工业出版社,2009.
[4]宋嘉玉,孙丽霞.EDA实用技术.北京:
人民邮电出版社,2006.
[5]齐洪喜,陆颖.VHDL电路设计实用技术.北京:
清华大学出版社,2004.