基于VHDL的数字时钟的设计.docx
- 文档编号:8977417
- 上传时间:2023-02-02
- 格式:DOCX
- 页数:21
- 大小:239KB
基于VHDL的数字时钟的设计.docx
《基于VHDL的数字时钟的设计.docx》由会员分享,可在线阅读,更多相关《基于VHDL的数字时钟的设计.docx(21页珍藏版)》请在冰豆网上搜索。
基于VHDL的数字时钟的设计
目录
一、EDA技术概述··························································4
二、AlteraMax+plusII简介··············································5
三、设计任务及要求·······················································6
3.1设计任务··························································6
3.2设计要求··························································6
四、系统电路设计·························································6
4.1VHDL语言开发的流程···············································6
4.2系统框架图·······················································7
4.3电路设计思路与实现················································8
五、电路功能调试及测试················································8
5.1测试内容及步骤····················································8
5.2模块说明························································8
5.3数字钟各模块连接示意图···········································9
5.4功能测试··························································9
5.5小结····························································9
六、小结·····························································9
实物图··································································17
参考文献································································18
一、EDA技术概述
EDA是电子设计自动化ElectronicDesignAutomation)的缩写,在20世纪90年代初从计算机辅助设计(CAD)、计算机辅助制造CAM)、计算机辅助测试CAT)和计算机辅助工程(CAE)的概念发展而来的。
EDA技术就是以计算机为工具,设计者在EDA软件平台上,用硬件描述语言VHDL完成设计文件,然后由计算机自动地完成逻辑编译、化简、分割、综合、优化、布局、布线和仿真,直至对于特定目标芯片的适配编译、逻辑映射和编程下载等工作。
EDA技术伴随着计算机、集成电路、电子系统设计的发展,经历了计算机辅助设计CAD、计算机辅助工程设计CAE和电子设计自动化EDA三个发展过程。
EDA软件工具种类繁多,如:
Smartork、Orcad、Tango、Protel、Workbench(multsim)、Pspice及各大可编程器件厂商提供的专用开发软件,如:
Altera公司提供的maxpluss2、Lattice公司提供的ispDesignExpert/PAC-Designer、Xilinx公司提供的FoudationSeries/webpack等。
随着电子设计自动化(EDA)技术的不断发展,其含义也不断发生变化,早期的电子设计自动化多指类似Protel电路版图的设计自动化概念,这种概念仅限于电路元器件与元器件之间即芯片外设计自动化,随着微电子技术的不断发展,当今的EDA技术更多的是指可编程逻辑器件的设计技术,即芯片内的电路设计自动化。
也就是说,开发人员完全可以通过自己的电路设计来定制其芯片内部的电路功能,使之成为设计者自己的专用集成电路(即ASIC)芯片,这就是我们今天所说的的EDA技术——用户可编程逻辑器件(PLD)技术。
EDA技术的基本特征:
EDA代表了当今电子设计技术的最新发展方向,利用EDA工具,电子设计师可以从概念、算法、协议等开始设计电子系统,大量工作可以通过计算机完成,并可以将电子产品从电路设计、性能分析到设计出IC版图或PCB版图的整个过程在计算机上自动处理完成。
设计者采用的设计方法是一种高层次的”自顶向下”的全新设计方法,这种设汁方法首先从系统设计人手,在顶层进行功能方框图的划分和结构设计。
在方框图一级进行仿真、纠错.并用硬件描述语言对高层次的系统行为进行描述,在系统一级进行驶证。
然后,用综合优化工具生成具体门电路的网络表,其对应的物理实现级可以是印刷电路板或专用集成电路(ASIC)。
硬件描述语言:
硬件描述语言(HDL)是一种用于进行电子系统硬件设计的计算机高级语言,它采用软件的设计方法来描述电子系统的逻辑功能、电路结构和连接形式。
硬件描述语言可以在三个层次上进行电路描述,其层次由高到低分为行为级、R,几级和门电路级。
常用硬件描述语言有WDL、Velllq和AHDL语言。
WDL语言是一种高级描述语言
二、AlteraMax+plusII简介
Max+plusⅡ是Altera公司上一代的PLD开发软件,提供的FPGA/CPLD开发集成环境,Altera是世界上最大可编程逻辑器件的供应商之一。
Max+plusⅡ界面友好,使用便捷,被誉为业界最易用易学的EDA软件。
在Max+plusⅡ上可以完成设计输入、元件适配、时序仿真和功能仿真、编程下载整个流程,它提供了一种与结构无关的设计环境,是设计者能方便地进行设计输入、快速处理和器件编程。
目前Altera已经停止开发MaxplusII,而转向QuartusII软件平台。
Max+plusⅡ开发系统的特点:
1、开放的界面。
Max+plusⅡ支持与Cadence,Exemplarlogic,MentorGraphics,Synplicty,Viewlogic和其它公司所提供的EDA工具接口。
2、与结构无关。
Max+plusⅡ系统的核心Complier支持Altera公司的FLEX10K、FLEX8000、FLEX6000、MAX9000、MAX7000、MAX5000和Classic可编程逻辑
器件,提供了世界上唯一真正与结构无关的可编程逻辑设计环境。
3、完全集成化。
Max+plusⅡ的设计输入、处理与较验功能全部集成在统一的开发环境下,这样可以加快动态调试、缩短开发周期。
4、丰富的设计库。
Max+plusⅡ提供丰富的库单元供设计者调用,其中包括74系列的全部器件和多种特殊的逻辑功能(Macro-Function)以及新型的参数化的兆功能(Mage-Function)。
5、模块化工具。
设计人员可以从各种设计输入、处理和较验选项中进行选择从而使设计环境用户化。
6、硬件描述语言(HDL) Max+plusⅡ软件支持各种HDL设计输入选项,包括VHDL、VerilogHDL和Altera自己的硬件描述语言AHDL。
7、Opencore特征。
Max+plusⅡ软件具有开放核的特点,允许设计人员添加自己认为有价值的宏函数。
Max+plusⅡ可编程逻辑的两种类型:
CPLD和FPGA
可编程逻辑器件的两种主要类型是现场可编程门阵列(FPGA)和复杂可编程逻辑器件(CPLD)。
在这两类可编程逻辑器件中,FPGA提供了最高的逻辑密度、最丰富的特性和最高的性能。
现在最新的FPGA器件,如XilinxVirtex系列中的部分器件,可提供八百万"系统门"(相对逻辑密度)。
这些先进的器件还提供诸如内建的硬连线处理器、大容量储存器、时钟管理系统等特性,并支持多种最新的超快速器件至器件信号技。
FPGA被应用于范围广泛的应用中,从数据处理和存储,以及到仪器仪表、电信和数字信号处理等。
三、设计任务及要求
3.1设计任务
本设计以MAX+PLUSII软件为核心,通过FPGA的,编程语言VHDL编写数字时钟。
从而达到一个数字时钟,具有时、分、秒计数显示功能。
3.2设计要求
设计一个数字时钟,具有时、分、秒计数显示功能,以24小时循环计时,具有消零、调节小时、分钟功能,具有整点报时功能,整点报时的同时LED灯花样显示。
1、采用自顶向下设计方法设计电子钟,进行电子钟的顶层模块的设计和仿真验证;
2、将系统划分成若干个底层子模块,并进行仿真验证;
3、经EDA开发平台MAX+PLUSII综合成门级电路,进行门级仿真验证。
4、下载到CPLD上,完成硬件实现。
四、系统电路设计
4.1VHDL语言开发的流程
(1)文本编辑:
用任何文本编辑器都可以进行,也可以用专用的HDL编辑环境。
通常VHDL文件保存为.vhd文件。
(2)功能仿真:
将文件调入HDL仿真软件进行功能仿真,检查逻辑功能是否正确(也叫前仿真,对简单的设计可以跳过这一步,只在布线完成以后,进行时序仿真)。
(3)逻辑综合:
将源文件调入逻辑综合软件进行综合,即把语言综合成最简的布尔表达式和信号的连接关系。
逻辑综合软件会生成.edf(edif)的EDA工业标准文件。
(4)布局布线:
将.edf文件调入PLD厂家提供的软件中进行布线,即把设计好的逻辑安放到PLD/FPGA内。
(5)编程下载:
确认仿真无误后,将文件下载到芯片中。
数码管显示模块
显示模块
时间计数
模块
4.2数字系统框架图
分计数器(60进制)
秒计数器(60进制)
控制模块
图1数字钟系统框图
4.3电路设计思路与实现
基于VHDL语言,在各个模块都编译通过的基础上在顶层用原理图的方法实现。
具体实现步骤如下:
1.确定总体结构
这是在进行系统具体编程设计之前就应该做的工作。
有了这一步,就对数字钟的模块有了了解。
在具体设计时只要根据这些模块各自的功能去编写程序,就大大提高了工作效率。
2.系统功能分析
整个系统以Altera的FPGA2EPK1000[2~4]为核心,外部设备比较简单,只需要几个拨码开关和6个数码管,开关分别作系统复位和校时用,6个数码管分别显示秒、分和小时。
核心部分由3大模块组成,即时间计数模块、控制模块和显示模块。
在系统设计时将控制模块和时间计数模块集成在一起。
时间计数模块是通过计数产生秒、分和小时信号。
显示模块对时间计数模块产生的秒、分、小时信号,通过时钟扫描逐个在数码管上显示。
校时功能主要是在计数器的设计上实现,通过设计正常计时和校时2个选通端完成正常计时和校时的切换。
3.系统核心模块设计及实现
(1)时间计数模块。
时间计数模块由一系列的计数器进行级联实现,包括六进制、十进制、二十四进制计数器。
秒和分钟的计数器的各位为十进制计数器。
小时位的二十四进制计数则由一个VHDL程序实现。
下面是各个模块的设计:
模块一:
SECCOUNT(秒的计数器60进制)
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entityseccountis
port(en,res,clk:
instd_logic;
ca:
outstd_logic;
a,b:
outstd_logic_vector(3downto0));
endseccount;
architecturertlofseccountis
signalaout,bout:
std_logic_vector(3downto0);
signalcout:
std_logic;
begin
process(en,clk,res)
begin
if(res='0')then
aout<="0000";
bout<="0000";
cout<='0';
elsif(clk'eventandclk='1')then
if(en='1')then
if(bout>4)then
if(aout>9)then
aout<="0000";
bout<="0000";
cout<='1';
else
aout<=aout+1;
endif;
else
if(aout=9)then
aout<="0000";
bout<=bout+1;
else
aout<=aout+1;
cout<='0';
endif;
endif;
endif;
endif;
endprocess;
a<=aout;
b<=bout;
ca<=cout;
endrtl;
仿真波形图:
图2秒时序仿真图
综合后产生的Symbol图
图3秒Symbol图
模块二:
MINCOUNT(分的计数器60进制)
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entitymincountis
port(en1,en2,res,clk:
instd_logic;
ca,cp:
outstd_logic;
a,b:
outstd_logic_vector(3downto0));
endmincount;
architecturertlofmincountis
signalaout,bout:
std_logic_vector(3downto0);
signalcout:
std_logic;
begin
process(en1,en2,clk,res)
begin
if(res='0')then
aout<="0000";
bout<="0000";
cout<='0';
elsif(clk'eventandclk='1')then
if(en1='1'oren2='0')then
if(bout>4)then
if(aout>9)then
aout<="0000";
bout<="0000";
cout<='1';
else
aout<=aout+1;
endif;
else
if(aout=9)then
aout<="0000";
bout<=bout+1;
else
aout<=aout+1;
cout<='0';
endif;
endif;
endif;
endif;
endprocess;
cp<=bout
(2)andbout
(1)andaout(0)andaout(3);
a<=aout;
b<=bout;
ca<=cout;
endrtl;
仿真波形图:
图4分时序仿真图
综合后产生的Symbol图
图5分Symbol图
模块三:
COUNT24(时的计数器24进制)
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entitycount24is
port(en1,en2,res,clk:
instd_logic;
ca:
outstd_logic;
a,b:
outstd_logic_vector(3downto0));
endcount24;
architecturertlofcount24is
signalaout,bout:
std_logic_vector(3downto0);
signalcout,cl:
std_logic;
begin
cl<=clkwhenen2='0'else
en1;
process(en1,en2,cl,res)
begin
if(res='0')then
aout<="0000";
bout<="0000";
cout<='0';
elsif(cl'eventandcl='1')then
if(bout>1)then
if(aout>2)then
aout<="0000";
bout<="0000";
cout<='1';
else
aout<=aout+1;
endif;
else
if(aout=9)then
aout<="0000";
bout<=bout+1;
else
aout<=aout+1;
endif;
endif;
endif;
endprocess;
a<=aout;
b<=bout;
ca<=cout;
endrtl;
仿真波形图:
图6时时序仿真图
综合后产生的Symbol图
图7时Symbol图
(2)显示模块。
显示模块两个部分组成,包括扫描显示模块和7段译码显示模块,通过对时间计时模块的动态扫描,驱动8位七段共阴扫描数码管的片选驱动信号输出和七段字形译码输出。
蜂鸣器在整点时有报时驱动信号产生。
模块一:
SCANSELECT(扫描显示模块)
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entityscanselectis
port(clk:
instd_logic;
res:
instd_logic;
in1,in2,in3,in4,in5,in6:
instd_logic_vector(3downto0);
sel:
outstd_logic_vector(2downto0);
daout:
outstd_logic_vector(3downto0));
endscanselect;
architecturebehaveofscanselectis
begin
PROCESS(clk)
VARIABLEcnt:
std_logic_vector(2downto0);
BEGIN
IF(clk'eventANDCLK='1')THEN
ifres='0'then
cnt:
="000";
else
IFcnt="101"THEN
cnt:
="000";
ELSEcnt:
=cnt+1;
ENDIF;
ENDIF;
ifcnt="000"then
daout(0)<=in1(0);
daout
(1)<=in1
(1);
daout
(2)<=in1
(2);
daout(3)<=in1(3);
elsifcnt="001"then
daout(0)<=in2(0);
daout
(1)<=in2
(1);
daout
(2)<=in2
(2);
daout(3)<=in2(3);
elsifcnt="010"then
daout(0)<=in3(0);
daout
(1)<=in3
(1);
daout
(2)<=in3
(2);
daout(3)<=in3(3);
elsifcnt="011"then
daout(0)<=in4(0);
daout
(1)<=in4
(1);
daout
(2)<=in4
(2);
daout(3)<=in4(3);
elsifcnt="100"then
daout(0)<=in5(0);
daout
(1)<=in5
(1);
daout
(2)<=in5
(2);
daout(3)<=in5(3);
elsifcnt="101"then
daout(0)<=in6(0);
daout
(1)<=in6
(1);
daout
(2)<=in6
(2);
daout(3)<=in6(3);
endif;
endif;
sel<=cnt;
endprocess;
endbehave;
仿真图:
图8扫描显示仿真图
综合后产生的Symbol图:
图9扫描显示Symbol图
模块二:
DISP(七段译码器)
libraryieee;
useieee.std_logic_1164.all;
entitydispis
port(d:
instd_logic_vector(3downto0);
q:
outstd_logic_vector(6downto0));
enddisp;
architecturertlofdispis
begin
process(d)
begin
casedis
when"0000"=>q<="0111111";
when"0001"=>q<="0000110";
when"0010"=>q<="1011011";
when"0011"=>q<="1001111";
when"0100"=>q<="1100110";
when"0101"=>q<="1101101";
when"0110"=>q<="1111101";
when"0111"=>q<="0100111";
when"1000"=>q<="1111111";
whenothers=>q<="1101111";
endcase;
endprocess;
endrtl;
仿真图:
图10七段译码仿真图
综合后产生的Symbol图:
图11七段译码Symbol图
五、电路功能调试及测试
5.1测试内容及步骤
1.根据电路持点,利用层次设计概念将此设计任务分成若干模块,规定每一模块的功能和各模块之间的接口。
先分做和调试其中每一个模块,然后再将各模块合起来调试。
2
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 VHDL 数字 时钟 设计