多功能数字表的设计.docx

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

多功能数字表的设计.docx

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

多功能数字表的设计.docx

多功能数字表的设计

 

郑州轻工业学院

课程设计说明书

 

题目:

多功能数字表的设计

 

姓名:

院(系):

电气信息工程学院

专业班级:

电子信息工程

学号:

指导教师:

耿鑫

 

成绩:

 

时间:

2014年6月16日至2014年6月20日

 

郑州轻工业学院

课程设计任务书

题目多功能数字表的设计

专业、班级学号姓名

主要内容、基本要求、主要参考资料等:

基于钟表设计的常识,给出时、分、秒的设计思路,并利用硬件编程语言VHDL或者Verilog-HDL来实

现。

要求具有基本功能如调整时间对表、闹铃、计时器等,给出完成控制电路所需要的设计模块;给出硬

件编程语言的实现,并进行仿真;给出下载电路的设计,设计为2种下载方法,其中一种必须为JTAG;同

时设计者报告不允许雷同。

参考资料:

1、潘松、黄继业《EDA技术及其应用》(第四版)科学出版社2009

2、樊昌信《通信原理》电子出版社

完成期限:

指导教师签名:

课程负责人签名:

年月日

摘要

现代电子设计技术的核心已日趋转向基于计算机的电子设计自动化技术,即EDA技术,作为其现代电子设计技术的核心,人们也越来越重视这方面的研究。

在EDA工具软件平台上,对以硬件描述语言HDL为系统逻辑描述手段完成的设计文件,自动完成文件编译、化简、分割、综合、布局布线以及逻辑优化和仿真测试。

本实验中我们运用EDA课程中所学的知识,设计了一个拥有时间校正和闹钟功能的24小时制多功能数字时钟。

通过本实验,我们初步了解EDA的设计过程;初步掌握用VHDL语言的设计方法和设计思想;初步熟悉Max+PlusII软件平台的编程和仿真,并通过AEDK-EDA实验板下载模拟实现初步了解了硬件实现的方法。

关键词数字时钟/VHDL/FPGA/Max+PlusII

 

目录

1绪论1

2工作原理3

2.1设计思想3

2.2原理分析3

3各子模块具体分析6

3.1时分秒程序介绍6

3.1.1时模块6

3.1.2分模块7

3.1.3秒模块8

3.2计时模块10

3.2.1秒计时10

3.2.2分计时11

3.2.3小时计时12

3.3闹钟模块14

3.3.1闹钟分计时14

3.3.1闹钟小时计时15

3.4报时模块17

3.5下载电路19

3.5.1方式一19

3.5.2方式二20

结束语21

致谢22

参考文献23

 

1绪论

EDA技术就是以计算机为工具,设计者在EDA软件平台上,用硬件描述语言VHDL完成设计文件,然后由计算机自动地完成逻辑编译、化简、分割、综合、优化、布局、布线和仿真,直至对于特定目标芯片的适配编译、逻辑映射和编程下载等工作。

EDA技术的出现,极大地提高了电路设计的效率和可操作性,减轻了设计者的劳动强度。

 

EDA技术在进入21世纪后,得到了进一步的发展。

嵌入式处理器软核的成熟,使得SOPC步入大规模应用阶段。

电子技术领域开始全方位融入EDA技术,传统的电路系统除了日渐完善的数字技术外都发生了重大的改变。

同时,EDA技术使得电子领域各学科间的界限更加模糊,更加互为包容。

这些都更加利于EDA设计人员对电子系统的设计,如FPGA/CPLD的开发和全定制和半定制ASIC的设计等。

 

EDA技术相对于传统数字电路系统有很大的不同,它运用HDL对数字系统进行抽象的行为和功能描述到具体的内部线路结构描述,从而可以在电子设计的各个阶段、各个层次进行计算机模拟验证,保证了设计过程的正确性,可以大幅度的降低设计成本和设计周期。

又因为有各类库的支持,能够完成各种自动设计过程,极大的简化了设计文档的管理,逻辑仿真测试功能也在应设计的需要而日益强大。

 

在EDA的程序编写中,一般采用MAX+plusII进行编写。

MAX+plusII是Altera提供的FPGA/CPLD开发集成环境,Altera是世界最大的可编程逻辑器件供应商之一。

MAX+plusII界面友好,实用便捷,是我这样的初学者最好的学习和实验工具。

它提供了一种与结构无关的设计环境,使我这样的的初学者也能方便地进行设计输入,快速处理和器件编程,使得我的学习更加的方便。

 

在EDA的技术开发中还存在一个地位十分重要的东西,它就是IP。

IP就是知识产权核或知识产权模块的意思。

著名的美国Dataquest咨询公司将半导体产业的IP定义为用于ASIC或FPGA/CPLD中预先设计好电路功能模块。

IP中还存在分类,一般分为软IP、固IP和硬IP。

软IP是用VHDL等硬件描述语言描述的功能模块,但不涉及具体电路元件,固IP始完成了综合的功能模块,硬IP提供设计最终阶段产品:

掩模。

目前的数字集成电路的设计都比较模块化(参见集成电路设计、设计收敛(Designclosure)和设计流(Designflow(EDA)))。

半导体器件制造工艺需要标准化的设计描述,高抽象级的描述将被编译为信息单元(cell)的形式。

设计人员在进行逻辑设计时无需考虑信息单元的具体硬件工艺。

利用特定的集成电路制造工艺来实现硬件电路,信息单元就会实施预定义的逻辑或其他电子功能。

半导体硬件厂商大多会为它们制造的元件提供“元件库”,并提供相应的标准化仿真模型。

相比数字的电子设计自动化工具,模拟系统的电子设计自动化工具大多并非模块化的,这是因为模拟电路的功能更加复杂,而且不同部分的相互影响较强,而且作用规律复杂,电子元件大多没有那么理想。

VerilogAMS就是一种用于模拟电子设计的硬件描述语言。

此外,设计人员可以使用硬件验证语言来完成项目的验证工作目前最新的发展趋势是将集描述语言、验证语言集成为一体,典型的例子有SystemVerilog。

随着集成电路规模的扩大、半导体技术的发展,电子设计自动化的重要性急剧增加。

这些工具的使用者包括半导体器件制造中心的硬件技术人员,他们的工作是操作半导体器件制造设备并管理整个工作车间。

一些以设计为主要业务的公司,也会使用电子设计自动化软件来评估制造部门是否能够适应新的设计任务。

电子设计自动化工具还被用来将设计的功能导入到类似现场可编程逻辑门阵列的半定制可编程逻辑器件,或者生产全定制的专用集成电路。

 

2工作原理

2.1设计思想

(1)“小时”校准状态:

在“小时”校准状态下,显示“小时”的数码管以2Hz闪烁,并以2Hz的频率递增计数。

(2)“分”校准状态:

在“分”校准状态下,显示“分”的数码管以2Hz闪烁,并以2Hz的频率递增计数。

 

(3)“秒”校准状态:

在“秒复零”状态下,显示“秒”的数码管以2Hz闪烁,并以1Hz的频率递增计数。

  

(4)闹钟“小时”校准状态:

在闹钟“小时”校准状态下,显示“小时”的数码管以2Hz闪烁,并以2Hz的频率递增计数。

(5)闹钟“分”校准状态:

在闹钟“分”校准状态下,显示“分”的数码管以2Hz闪烁,并以2Hz的频率递增计数。

  

2.2原理分析

数字计时器是由计时电路、译码显示电路、脉冲发生电路和控制电路等几部分组成的,控制电路按要求可由校分校时电路、清零电路和保持电路组成。

其中,脉冲发生电路将试验箱提供的48Mhz的频率分成电路所需要的频率;计时电路与动态显示电路相连,将时间与星期显示在七段数码管上,并且驱动蜂鸣器整点报时;校时校分电路对时、分、星期提供快速校时;清零电路作用时,系统的分秒时同时归零;保持电路作用时,系统停止计时并保持时间不变。

其原理框图如图所示:

电路总图如下(电路进行了封装):

图2电路总图

首先由分频器把原来的48MHZ的脉冲用进行分频得到1Khz、500hz、2hz、1hz的脉冲。

1hz的脉冲送到时钟计时电路秒位的clk输入口;秒位的进位信号和2hz脉冲通过开关的选择输送到分位电路的时钟输入口,前者用于正常计时,后者由于校分时;分位的进位信号和2hz脉冲通过开关的选择输送到时位电路的时钟输入口,前者用于正常计时,后者由于校时。

把三个计数器的输出输送给一个24选4的数据选择器,六组分别为秒个位、秒十位、分个位、分十位、时个位、时十位。

数据选择器输入信号由一个模八的计数器提供,这个模八的计数器的输出同时送给一74138译码器。

数据选择器的输出送入7447段译码器的输入口,74138的的输出由于选择显示器的位,7447的输出用于段的显示,这样就实现了动态显示。

至于整点报时电路我们把要蜂鸣器响的时间通过卡诺图化简,得到最简的逻辑函数式,再把逻辑函数式通过电路实现,满足要求才把脉冲信号输送给蜂鸣器。

闹钟电路:

首先通过选择是否向分位和十位电路送脉冲来设定时间,当两个电路都无脉冲则电路保持当前的数字,输出端上的电平不在改变,把这个电平信号与时钟计时电路中的对应位输送到一个双输入的同或门,再把14个与门的输出与起来,在与1khz的脉冲与其来送入蜂鸣器。

闹表各位的动态显示原理与上面相同。

万年历电路:

其正常状态的脉冲是由时钟计数器时位的进位信号提供的,在调整日期时,时钟信号是通过开关选择一个2hz脉冲输送到各个电路时钟端的。

清零开关的输入信号输送到各个计数器的清零端即可。

万年历各位的动态显示原理与上面相同。

最后由于有三组输出信号要显示,我们通过显示模式控制开关选择要显示的状态信号。

以上的各种状态下的控制键通过模式的选择进行了复用。

模式状态切换的连个按键的输入同时输送到两个LED灯,通过观察灯的状态我们就可以判断当前的模式。

 

3各子模块具体分析

3.1时分秒程序介绍

3.1.1时模块

LIBRARYIEEE;

useIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYhourIS

PORT(clk,reset:

INSTD_LOGIC;

daout:

outSTD_LOGIC_VECTOR(5DOWNTO0));

ENDENTITYhour;

ARCHITECTUREfunOFhourIS

SIGNALcount:

STD_LOGIC_VECTOR(5DOWNTO0);

BEGIN

daout<=count;

PROCESS(clk,reset)

BEGIN

IF(reset='0')THENcount<="000000";--若reset=0,则异步清零

ELSIF(clk'eventandclk='1')THEN--否则,若clk上升沿到

IF(count(3DOWNTO0)="1001")THEN--若个位计时恰好到"1001"即9

IF(count<16#23#)THEN--23进制

count<=count+7;--若到23D则

else

count<="000000";--复0

ENDIF;

ELSIF(count<16#23#)THEN--若未到23D,则count进1

count<=count+1;

ELSE--否则清零

count<="000000";

ENDIF;--ENDIF(count(3DOWNTO0)="1001")

ENDIF;--ENDIF(reset='0')

ENDPROCESS;

ENDfun;

3.1.2分模块

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYminuteIS

PORT(clk,clk1,reset,sethour:

INSTD_LOGIC;

enhour:

OUTSTD_LOGIC;

daout:

OUTSTD_LOGIC_VECTOR(6DOWNTO0));

ENDENTITYminute;

ARCHITECTUREfunOFminuteIS

SIGNALcount:

STD_LOGIC_VECTOR(6DOWNTO0);

SIGNALenhour_1,enhour_2:

STD_LOGIC;--enmin_1为59分时的进位信号

BEGIN--enmin_2由clk调制后的手动调时脉号串

daout<=count;

enhour_2<=(sethourandclk1);--sethour为手动调时控制信号,高电平有效

enhour<=(enhour_1orenhour_2);

PROCESS(clk,reset,sethour)

BEGIN

IF(reset='0')THEN--若reset为0,则异步清零

count<="0000000";

ELSIF(clk'eventandclk='1')THEN--否则,若clk上升沿到

IF(count(3DOWNTO0)="1001")THEN--若个位计时恰好到"1001"即9

IF(count<16#60#)THEN--又若count小于16#60#,即60

IF(count="1011001")THEN--又若已到59D

enhour_1<='1';--则置进位为1

count<="0000000";--count复0

ELSE

count<=count+7;--若count未到59D,则加7,即作"加6校正"

ENDIF;--使前面的16#60#的个位转变为8421BCD的容量

ELSE

count<="0000000";--count复0(有此句,则对无效状态电路可自动)

ENDIF;--ENDIF(count<16#60#)

ELSIF(count<16#60#)THEN

count<=count+1;--若count<16#60#则count加1

enhour_1<='0'after100ns;--没有发生进位

ELSE

count<="0000000";--否则,若count不小于16#60#count复0

ENDIF;--ENDIF(count(3DOWNTO0)="1001")

ENDIF;--ENDIF(reset='0')

ENDprocess;

ENDfun;

3.1.3秒模块

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYsecondIS

PORT(clk,reset,setmin:

STD_LOGIC;

enmin:

OUTSTD_LOGIC;

daout:

OUTSTD_LOGIC_VECTOR(6DOWNTO0));

ENDENTITYsecond;

ARCHITECTUREfunOFsecondIS

SIGNALcount:

STD_LOGIC_VECTOR(6DOWNTO0);

SIGNALenmin_1,enmin_2:

STD_LOGIC;--enmin_1为59秒时的进位信号

BEGIN--enmin_2由clk调制后的手动调分脉冲信号串

daout<=count;

enmin_2<=(setminandclk);--setmin为手动调分控制信号,高电平有效

enmin<=(enmin_1orenmin_2);--enmin为向分进位信号

PROCESS(clk,reset,setmin)

BEGIN

IF(reset='0')THENcount<="0000000";--若reset为0,则异步清零

ELSIF(clk'eventandclk='1')then--否则,若clk上升沿到

IF(count(3downto0)="1001")then--若个位计时恰好到"1001"即9

IF(count<16#60#)then--又若count小于16#60#,即60H

IF(count="1011001")then--又若已到59D

enmin_1<='1';count<="0000000";--则置进位为1及count复0

ELSE--未到59D

count<=count+7;--则加7,而+7=+1+6,即作"加6校正"

ENDIF;

ELSE--若count不小于16#60#(即count等于或大于16#60#)

count<="0000000";--count复0

ENDIF;--ENDIF(count<16#60#)

ELSIF(count<16#60#)then--若个位计数未到"1001"则转此句再判

count<=count+1;--若count<16#60#则count加1

enmin_1<='0'after100ns;--没有发生进位

ELSE--否则,若count不小于16#60#

count<="0000000";--则count复0

ENDIF;--ENDIF(count(3DOWNTO0)="1001")

ENDIF;--ENDIF(reset='0')

ENDPROCESS;

ENDfun;

3.2计时模块

3.2.1秒计时

(1)源程序:

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;

useieee.std_logic_arith;

entitycnts60is

port(sld0:

bufferstd_logic_vector(3downto0);

sld1:

bufferstd_logic_vector(7downto4);

co:

outstd_logic;

rest:

instd_logic;

clk:

instd_logic);

endcnts60;

architecturertlofcnts60is

begin

process(clk,rest)

begin

ifrest='1'thensld1<="0000";sld0<="0000";

elsif(clk'eventandclk='1')then

if(sld1="0101"andsld0="1001")then

sld1<="0000";sld0<="0000";co<='1';

elsifsld0="1001"then

sld0<="0000";

sld1<=sld1+1;co<='0';

elsesld0<=sld0+1;co<='0';

endif;

endif;

endprocess;

endrtl;

(2)仿真波形图:

(3)模块图:

3.2.2分计时

(1)源程序:

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;

useieee.std_logic_arith;

entitycnt60is

port(sld0:

bufferstd_logic_vector(3downto0);

sld1:

bufferstd_logic_vector(7downto4);

co:

outstd_logic;

clk:

instd_logic);

endcnt60;

architecturertlofcnt60is

begin

process(clk)

begin

if(clk'eventandclk='1')then

if(sld1="0101"andsld0="1001")then

sld1<="0000";sld0<="0000";co<='1';

elsifsld0="1001"then

sld0<="0000";

sld1<=sld1+1;co<='0';

elsesld0<=sld0+1;co<='0';

endif;

endif;

endprocess;

endrtl;

(2)仿真波形图:

(3)模块图:

3.2.3小时计时

(1)源程序:

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;

useieee.std_logic_arith;

entitycnt24is

port(sld0:

bufferstd_logic_vector(3downto0);

sld1:

bufferstd_logic_vector(7downto4);

clk:

instd_logic);

endcnt24;

architecturertlofcnt24is

signals:

std_logic_vector(7downto0);

begin

process(clk)

begin

s<=sld1&sld0;

if(clk'eventandclk='1')then

ifs="00100011"then

sld1<="0000";

sld0<="0000";

elsifsld0="1001"then

sld0<="0000";

sld1<=sld1+1;

elsesld0<=sld0+1;

endif;

endif;

endprocess;

endrtl;

(2)仿真波形图:

(3)模块图:

3.3闹钟模块

3.3.1闹钟分计时

(1)源程序:

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;

useieee.std_logic_arith;

entitycntm60bis

port(sld0:

bufferstd_logic_vector(3downto0);

sld1:

bufferstd_logic_vector(7downto4);

en:

instd_logic;

clk:

instd_logic);

endcntm60b;

architecturertlofcntm60bis

begin

process(clk)

begin

if(clk'eventandclk='1')then

ifen='1'then

if(sld1="0101"andsld0="1001")then

sld1<="0000";sld0<="0000";

elsifsld0="1001"then

sld0<="0000";

sld1<=sld1+1;

elsesld0<=sld0+1;

endif;

endif;

endif;

endprocess;

endrtl;

(2)仿真波形图:

(3

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

当前位置:首页 > 成人教育 > 成考

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

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