资源描述
基于VHDL的数字电子时钟的设计
目录
基于VHDL的数字电子时钟的设计 1
目录 1
摘要 2
引言 2
一、设计分析 3
1.1 设计要求 3
1.2 性能指标及功能设计性能指标 3
二、设计方案 3
三、设计环境 4
3.1 硬件设计环境 4
3.1.1 可编程器件EP2C5Q208C8N 及开发板系统 5
3.1.2 64位的计算机一台 5
3.2 软件设计环境 5
3.2.1 QuartusⅡ软件开发平台(8.0版本) 5
3.2.2 Windows7操作系统 5
3.2.3 硬件描述语言VHDL 5
四、整体设计流图 7
4.1 各模块的原理性功能介绍 7
4.1.1 可编程器件EP2C5Q208C8N 7
4.1.2 CPLD-JTAG接口 7
4.1.3 晶振和蜂鸣器 7
4.1.4 LED数码管显示 8
4.1.5 独立按键 9
4.1.6 拨码开关 9
4.1.7 QuartusⅡ软件开发平台(8.0版本) 9
4.2 设计的整体框架 10
4.2.1在各个模块都编译通过的基础上在顶层用原理图的方法实现。 10
4.2.2 设计原理及流程图 11
4.2.3逻辑流程图 12
4.2.4状态转移图 13
五、系统的模块化设计 13
5.1 软件程序模块化设计 13
5.1.1 秒/分/时输入模块的软件设计 13
5.1.2 秒/分/时计数模块的软件设计 14
5.1.3 模式选择模块的软件设计 14
5.1.4 数码管 15
5.1.5 闹钟模块的软件设计 16
5.1.5 系统时钟的软件设计 18
5.2 硬件的测试 20
5.2.1模拟时钟电路图与实物图 20
设计心得 23
致谢 24
参考文献 24
摘要
随着人类的不断进步,现代电子设计技术已进入一个全新的阶段,传统的电子设计方法、工具和器件在更大的程度上被EDA所取代。本实验则是基于VHDL语言设计的数字钟,具有时、分、秒显示功能。电路主要有时间计数模块、时间显示模块以及译码模块。 数字钟是一个将“时”、“分”、“秒”显示于人的视觉器官的计时装置。它的基本功能是计时,计时周期为24小时,显示满刻度23时59分59秒;数字钟学习的目的是掌握各类计数器及它们相连的设计方法,熟悉多个数码管显示的原理与方法以及模块化设计方式;掌握用VHDL语言的设计思想以及整个数字系统的设计。此数字钟具有时,分,秒计数显示功能,以24小时为计数循环,能实现清零,调时,调分以及闹钟等功能。本设计是一个显示时(2位)分(2位)秒(2位)共六个数字的多功能电子钟。因此将其分频得1Hz的秒钟信号,秒计满60即得1分钟,分满60即得1小时信号,小时满24即得一天。
关键词:数字钟,计数器,数码管,模块化设计, VHDL
引言
本设计采用的VHDL是一种全方位的硬件描述语言具有极强的描述能力能支持系统行为级、寄存器传输级和逻辑门级三个不同层次的设计。当今电子产品正向功能多元化,体积最小化,功耗最低化的方向发展。它与传统的电子产品在设计上的显著区别师大量使用大规模可编程逻辑器件,使产品的性能提高,体积缩小,功耗降低.同时广泛运用现代计算机技术,提高产品的自动化程度和竞争力,缩短研发周期。EDA技术正是为了适应现代电子技术的要求,吸收众多学科最新科技成果而形成的一门新技术。 美国ALTERA公司的可编程逻辑器件采用全新的结构和先进的技术,加上MaxplusII(或最新的QUARTUS)开发环境,更具有高性能,开发周期短等特点,十分方便进行电子产品的开发和设计。 EDA技术,技术以大规模可编程逻辑器件为设计载体,以硬件描述语言为系统逻辑描述主要表达方式,以计算机、大规模可编程逻辑器件的开发软件及实验开发系统为设计工具,通过有关的开发软件,自动完成用软件的方式设计的电子系统到硬件系统的逻辑编译,逻辑化简,逻辑分割,逻辑映射,编程下载等工作。最终形成集成电子系统或专用集成芯片的一门新技术。 本设计利用VHDL硬件描述语言结合可编程逻辑器件进行的,并通过数码管动态显示计时结果。数字钟可以由各种技术实现,如单片机等.利用可编程逻辑器件具有其他方式没有的特点,它具有易学、方便、新颖、有趣、直观设计与实验项目成功率高,理论与实践结合紧密,体积小,容量大,I/O口丰富,易编程和加密等特点。并且它还具有开放的界面,丰富的设计库,模块化的工具以及LPM定制等优良性能,应用非常方便。因此,本设计采用可编程逻辑器件实现。 本设计主要研究基于FPGA的数字钟,要求时间以24小时为一个周期,显示时、分、秒。具有校时以及报时功能,可以对时、分及秒进行单独校对,使其校正到标准时间。
一、设计分析
1.1 设计要求
1)具有时、分、秒计数显示功能,以24小时循环计时。
2)要求走时误差不大于每天10秒。
3)具有调节小时、分钟,秒及清零的功能。
4)定时闹钟,实现整点报时,又扬声器发出报时声音,发出滴答的声音。
可编程逻辑器件及外围电子元器件,设计一个数字电子钟,利用EDA软件(QUARTUS Ⅱ)进行编译及仿真,设计输入可采用VHDL硬件描述语言输入法)和原理图输入法,并下载到EDA实验开发系统,连接外围电路,完成实际测试。
1.2 性能指标及功能设计性能指标
1)时钟计数:完成时、分、秒的正确计时并且显示所计的数字;对秒、分 60进制计数,即从0到59循环计数,时钟——24进制计数,即从0到23循环计数,并且在数码管上显示数值。
2)时间设置:手动调节分钟、小时,可以对所设计的时钟任意调时间,这样使数字钟真正具有使用功能。我们可以通过实验板上的键7和键4进行任意的调整,因为我们用的时钟信号均是1HZ的,所以每LED灯变化一次就来一个脉冲,即计数一次。
3)清零功能:reset为复位键,低电平时实现清零功能,高电平时正常计数。可以根据我们自己任意时间的复位。
4)蜂鸣器在整点时有报时信号产生,蜂鸣器报警。产生“滴答.滴答”的报警声音。,当闹钟计数至我们预先设定的时间时,闹钟的铃声响起,以提示人们时间到了。
二、设计方案
本设计采用自顶向下的设计方法和模块化设计方式,它由秒计数模块,分计数模块,小时计数模块,报警模块,秒分时设置模块和译码模块,程序包, entity模块(顶层模块)八部分组成。 优点:设计简单方便,层次清晰,工程的建立方便,无需单独设计各个组件模块产生原理图文件后再进行电路连接设计。
用顶层设计采用原理图输入设计、底层设计采用VHDL设计的原理图与VHDL混合设计方法设计带整点报时功能的数字钟,所以此设计可分为顶层与底层设计,共分为六个模块。即时模块、分模块、秒模块、动态扫描控制模块、段码译码模块和整点报时模块。 秒模块主体为60进制的计数器,ss为向动态扫描控制模块提供秒的个位和十位数据的信号。reset 为秒清零,mm为分钟进位,每60秒产生一个高电平的信号,作为分模块的时钟输入,clk为秒模块的时钟输入,接1Hz脉冲信号,mm为分钟设置,低电平是不影响秒模块工作,当它为高电平时,mm信号会随之产生一个和clk频率相同的信号,达到调整分钟的目的。 分模块主体为60进制的计数器,daout为向动态扫描控制模块提供分的个位和十位数据的信号。分钟进位,每60分产生一个高电平的信号,作为时模块的时钟输入,秒计数到60时的进位输出信号hh和分钟调整输入信号mm,经或关系后接分的脉冲输入端clk,clk1为时调整脉冲,接1Hz脉冲, hh时钟设置,低电平是不影响分模块工作,当它为高电平时,mm信号会随之产生一个和clk频率相同的信号,达到调整时的目的。 时模块为一个24进制的计数器,动态扫描控制模块提供秒的个位和十位数据的信号。分计数到60时的进位输出信号和时调整输入信号,经或关系后接时脉冲输入端clk。为向动态扫描控制模块提供时的个位和十位数据的信号。 动态扫描模块中为动态扫描控制模块的脉冲输入,由外部脉冲发生电路提供,频率约为1kHz,sel0、sel1、sel2接外部38译码器74LS138的输入端A、B、C,ss[6..0]、mm[6..0]、hh[5..0]分别为秒模块、分模块、时模块计数段码输出控制信号。该模块实现时间的动态扫描显示控制。
字系统采用自顶向下、由粗到细,逐步分解的设计方法,最顶层电路是指系统的整体要求,最下层是具体的逻辑电路实现。自顶向下的设计方法将一个复杂的系统逐步分解成若干功能模块,从而进行设计描述,并且应用EDA软件平台自动完成各功能模块的逻辑综合与优化。利用QuartusⅡ进行具体设计编程、处理、检查以及器件编程
三、设计环境
3.1 硬件设计环境
本设计使用VHDL硬件开发板,可编程逻辑器件EP2C5Q208C8N 系列。设计过程中用到的外围电路的以及设计条件:
3.1.1 可编程器件EP2C5Q208C8N 及开发板系统
3.1.2.1 CPLD –JTAG接口
3.1.3.2 晶振和蜂鸣器
3.1.4.3 LED数码管显示
3.1.5.4 独立按键
3.1.6.5 拨码开关
3.1.2 64位的计算机一台
3.2 软件设计环境
3.2.1 QuartusⅡ软件开发平台(8.0版本)
3.2.2 Windows7操作系统
3.2.3 硬件描述语言VHDL
3.2.3.1 VHDL的简介
VHDL的英文全名是Very-High-Speed Integrated Circuit HardwareDescription Language,诞生于1982年。1987年底,VHDL被IEEE和美国国防部确认为标准硬件描述语言 。自IEEE公布了VHDL的标准版本,IEEE-1076(简称87版)之后,各EDA公司相继推出了自己的VHDL设计环境,或宣布自己的设计工具可以和VHDL接口。此后VHDL在电子设计领域得到了广泛的接受,并逐步取代了原有的非标准的硬件描述语言。1993年,IEEE对VHDL进行了修订,从更高的抽象层次和系统描述能力上扩展VHDL的内容,公布了新版本的VHDL,即IEEE标准的1076-1993版本,(简称93版)。现在,VHDL和Verilog作为IEEE的工业标准硬件描述语言,又得到众多EDA公司的支持,在电子工程领域,已成为事实上的通用硬件描述语言。有专家认为,在新的世纪中,VHDL于Verilog语言将承担起大部分的数字系统设计任务。
3.2.3.2 VHDL的特点
(1)用VHDL代码而不是用原理图进行设计,意味着整个电路板的模型及性能可用计算机模拟进行验证。
(2) VHDL元件的设计与工艺u无关,与工艺独立,方便工艺转换。
(3)VHDL支持各种设计方法,自顶向下、自底向上或者混合的都可以。
(4)可以进行从系统级到逻辑级的描述,即混合描述。
(5)VHDL区别于其他的HDL,已形成标准,其代码在不同的系统中可交换建模。
3.2.3.3 VHDL的设计流程
1)设计规范的定义 明确这个系统有哪些设计要求,和你要想到达的目标。
2)采用VHDL进行设计描述 这部分包括设计规划和程序的编写。设计规划主要包括设计方式的选择及是否进行模块划分。设计方式一般包括直接设计,自顶向下和自底向下设计,这个和其他软件语言差不多。最重要还是模块划分。
3)VHDL程序仿真
4)综合、优化和布局布线 综合指的是将设计描述转化成底层电路的表示形式,其结果是一个网表或者是一组逻辑方程;优化,这个主要是为了提高程序的执行效率及减少资源的利用;布局布线,指的是将逻辑关系转化成电路连接的方式。
5)仿真 ,这个与VHDL程序仿真不同,这个不仅是对逻辑方面的验证,还要进行时序功能验证。
6)器件编程
四、整体设计流图
4.1 各模块的原理性功能介绍
4.1.1 可编程器件EP2C5Q208C8N
4.1.2 CPLD-JTAG接口
4.1.3 晶振和蜂鸣器
晶体振荡电路是构成数字式时钟的核心,它保证了时钟走时准确及稳定。晶体振荡器它的作用是产生时间标准信号。数字钟的精度主要取决于时间标准信号的频率及其稳定度。因此,一般采用石英晶体振荡器经过分频得到这一信号。晶体振荡器电路给数字钟提供一个频率稳定准确的32768Hz的方波信号,可保证数字钟的走时准确及稳定。不管是指针式的电子钟还是数字显示的电子钟都使用了晶体振荡器电路
4.1.4 LED数码管显示
译码是把给定的代码进行翻译,本设计即是将时、分、秒计数器输出的四位二进制数代码翻译为相应的十进制数,并通过显示器显示。
译码为编码的逆过程。它将编码时赋予代码的含义“翻译”过来。实现译。码的逻辑电路成为译码器。译码器输出与输入代码有唯一的对应关系。74LS47是输出低电平有效的七段字形译码器,它在这里与数码管配合使用,下表列出了74LS47的真值表,表示出了它与数码管之间的关系。
译码是把给定的代码进行翻译,本设计即是将时、分、秒计数器输出的四位二进制数代码翻译为相应的十进制数,并通过显示器显示,通常显示器与译码器是配套使用的。我们选用的七段译码驱动器(74LS47)和LA5611数码管。
4.1.5 独立按键
此次设计主要外部电路的触发,每按一下将记一次数。
S1 校对秒的按键
S3 校对分的按键
S6 校对时的按键
多功能数字钟的闹钟功能部分通过按键s1,s3,s6,设定闹钟时间,当时钟进入闹钟设定的时间
4.1.6 拨码开关
此次设计拨码开关的主要作用是清零,和选择模式即状态的切换
4.1.7 QuartusⅡ软件开发平台(8.0版本)
本程序设计的是基于VHDL的数字时钟,,,,采用采用采用采用EDA开发工具,VHDL语言为硬件描述语言, QUARTUSII作为程序的运行平台,所开发的程序经过调试运行,波形仿真验证,初步实现了设计目标。
4.2 设计的整体框架
4.2.1在各个模块都编译通过的基础上在顶层用原理图的方法实现。
具体步骤如下:
1)确定总体结构 这是在进行系统具体编程设计之前就应该做的工作。有了这一步,就对数字钟的模块有了了解。在具体设计时只要根据这些模块各自的功能编写程序就大大的提高工作效率。系统总体框图如图1所示。
2)系统功能分析 整个系统以Altera的芯片为核心,外部设备比较简单,只需要几个拨码开关和6个数码管,开关分别作系统复位和校时用,6个数码管分别显示秒、分和小时。核心部分由3大模块组成,即时间计数模块、控制模块和显示模块。在系统设计时将控制模块和时间计数模块集成在一起。时间计数模块是通过计数产生秒、分和小时信号,显示模块对时间计数模块产生的秒、分和小时的信号,通过时钟扫描逐个在数码管上显示。校时功能主要是在计数器的设计上实现,通过设计正常计时和校时2个选通完成正常计时和校时的切换。
3)系统核心模块功能分析及实现 ①时间计数模块。时间计数模块由一系列的计数器进行级联实现,包括六进制、十进制、二十四进制计数器。秒和分钟的计数器的各位为十进制计数器。小时位为二十四进制计数器则由一个VHDL程序实现。
②显示模块。显示模块由一个没有进位的六进制计数器、一个六选一选择器和一个七段译码管组成。六进制计数器为六选一选择器的选择判断提供输入信号,六选一选择器的选择输入端段分别接秒各位、分个位、分十位和小时位计数器的输出,用来完成动态扫描显示。
细化后的原理框图:
4.2.2 设计原理及流程图
数字电子钟的逻辑框图如下,它由振荡器、分频器、计数器、译码器显示器和校时电路组成。振荡器产生稳定的高频脉冲信号,作为数字钟的时间基准,然后经过分频器输出标准秒脉冲。秒计数器满60后向分计数器进位,分计数器满60后向小时计数器进位,小时计数器按照“24翻1”规律计数。计数器的输出分别经译码器送显示器显示。计时出现误差时,可以用校时电路校时、校分
4.2.3逻辑流程图
4.2.4状态转移图
五、系统的模块化设计
5.1 软件程序模块化设计
5.1.1 秒/分/时输入模块的软件设计
60进制计数器(分、秒计数器)工作原理: “秒”计数器电路与“分”计数器电路都是60进制,它由一级10进制计数器和一级6进制计数器连接构成,如图三所示,采用两片中规模集成电路74LS90串接起来构成的“秒”、“分”计数器,实现时采用反馈清零法。(秒分时模块程序一样不再重复)
architecture art of disshk is
begin
process(clk,d)
variable count:integer range 0 to 100;--d为置位,计数段为100次
begin
if d = '0' then
if clk'event and clk='1' then --信号为1时有效
if(count=100) then 当扫描为次数为100次时
q<='0'; --
count :=0;
else
count:=count+1;-- 否则开始计数
end if;
end if;
else q<='1';
end if;
5.1.2 秒/分/时计数模块的软件设计
entity count is
port (cl_r,clk,add: in std_logic;
gsec,ssec: out std_logic_vector(3 downto 0);
c: out std_logic);
end entity ;
architecture art of count is
signal co,rclk: std_logic;
begin
process(cl_r,clk,rclk,co,add) is
variable secg,secs,ad: std_logic_vector(3 downto 0);定义 秒的端口 个位,十位
begin
rclk<=add xnor clk; 扫描时钟要低于系统时钟
if cl_r='0' then
secg:="0000";secs:="0000";co<='0';
elsif (rclk='1'and rclk'event) then
If secg="1001" and secs="0101" then secg:="0000";secs:="0000";co<='1';- elsif secg="1001" then secs:=secs+1;secg:="0000";co<='0';
elsif secg<"1001" then secg:=secg+1;
end if;
----当计数个位为9,十位为5,计数值为59时,秒的个位十位都为零,进位为一,说明此时计数为一分钟。秒的个位一直计数,计数值不到9时,一直加,直到出现个位出现9,十位加一。
5.1.3 模式选择模块的软件设计
entity slc is
port(
add: in std_logic_vector(2 downto 0);
sel:in std_logic;
naout,clkout : out std_logic_vector(2 downto 0));
end entity;
architecture art of slc is
begin
process(sel,add)
begin
if(sel='1') then ------sel为一时,闹钟模式开启,否则继续时钟的显示
naout<=add;
else
clkout<=add;
5.1.4 数码管
位选和段选
architecture art of sel is
signal data: std_logic_vector(3 downto 0);
begin
process(sel,f0,f1,f2,f3,f4,f5)
begin
case sel is -------数码管的位选,数码管为共阳极的,秒分时共用六个 when "000"=>data<=f0;wei<="111110";---------数码管显示
when "001"=>data<=f1;wei<="111101";
when "010"=>data<=f2;wei<="111011";
when "011"=>data<=f3;wei<="110111";
when "100"=>data<=f4;wei<="101111";
when "101"=>data<=f5;wei<="011111";
when others=>data<=f0;wei<="111111";
end case;
end process;
process(data,sel)
begin
if sel="010" or sel="100" then 若是第二个或是第四个数码管亮,则低位的两个点要显示,低电平有效。
case data is
when"0000"=>du<="01000000";
when"0001"=>du<="01111001";
when"0010"=>du<="00100100";
when"0011"=>du<="00110000";
when"0100"=>du<="00011001";
when"0101"=>du<="00010010";
when"0110"=>du<="00000010";
when"0111"=>du<="01111000";
when"1000"=>du<="00000000";
when"1001"=>du<="00010000";
when others=>du<="01000000";
end case;
else
case data is
when"0000"=>du<="11000000";
when"0001"=>du<="11111001";
when"0010"=>du<="10100100";
when"0011"=>du<="10110000";
when"0100"=>du<="10011001";
when"0101"=>du<="10010010";
when"0110"=>du<="10000010";
when"0111"=>du<="11111000";
when"1000"=>du<="10000000";
when"1001"=>du<="10010000";
when others=>du<="11000000"; ----------段选
end case;
end if;
end process;
5.1.5 闹钟模块的软件设计
闹钟能否正常计数、能否对计时时间进行调整,定时闹铃功能是否正常,动态扫描显示是否正常。
原理框图:
(1)计数模块:按照时钟模式完成一天24小时的计时功能。
(2)译码模块:根据计时模块的状态输出值来确定对应位的数据的,其输出是7段高低电平,以点亮相应的数码管;
(3)计数控制模块:根据外部控制信号,进行时钟计数的调整和计时的控制;
(4)响铃控制模块:根据外部闹钟控制信号完成闹钟的定时,当计数模块技术到和该模块所设定时间一致时,该模块将驱动蜂鸣器响铃。
(5)分频器:根据外部的输入时钟,将外部时钟成两路信号,一路用于正常的计数,一路用于七段显示数码管的动态扫描输出。
architecture art of beep is
signal bep : std_logic;
begin
process(bep,clk,hh1,hh2,mm1,mm2,h1,h2,m1,m2)
begin
if (h1=hh1 and h2=hh2 and mm1=m1 and mm2=m2 ) OR (mm1="0000" and mm2="0000") then ----当前时间的时分秒完全等于设置的闹钟时间,蜂鸣器才有效,否则蜂鸣器不响,继续显示当前的时间
if clk='1' and clk'event then
bep<=not bep;
end if;
else bep<='1';
end if;
5.1.5 系统时钟的软件设计
process(clk)
variable counts:integer range 0 to 50000000; ---系统时钟为50MHZ
begin
if clk'event and clk='1' then -----时钟高电平有效
if(counts<25000000) then -----计数周期为1ms,1ms扫描100次,
clks<='1'; ----0到0.5毫秒为高电平
counts:=counts+1;
elsif(counts<50000000) then ----0.5毫秒到1毫秒为低电平
clks<='0';
counts:=counts+1;
else
counts:=0;
end if;
end if;
end process;
process(clk)
variable countms:integer range 0 to 50000; ------分频段
begin
if clk'event and clk='1' then -----时钟高电平有效
if(countms<25000) then -----计数周期为0.1ms.0到0.5毫秒为低电平
clkms<='1';
countms:=countms+1;
elsif(countms<50000) then 0.05到0.05毫秒为低电平
clkms<='0';
countms:=countms+1;
else
countms:=0;
end if;
end if;
end process;
end architecture fenp;
end if;
c<=co;
ssec<=secs;
gsec<=secg;
end process;
end architecture;
动态扫描,时间1s
计数达到59秒后本身清零,进位给分位,依次类推
时钟信号的输入
模式的切换,闹钟的输入端口
三个图分别为秒分时的输入端口
位选六位,段选
8位
5.2 硬件的测试
本次选用EP2c5Q208C8N芯片。外部需接几上升沿按键,并接扬声器和不许译码器的数码管。
下载测试后,按复位键后数码管显示0时0分0秒开始计数,分秒时计数都正确。按动调分键或调小时键后,分位或小时位开始自加,再按键后停止。当时间到整点时会有十秒报时,按动停止键停止报时,不按此键时自动到十秒后停止报时。设计结果达到要求。
5.2.1模拟时钟电路图与实物图
数字钟实际上是一个对标准频率(1HZ)进行计数的计数电路。由于计数的起始时间不可能与标准时间(如北京时间)一致,故需要在电路上加一个校时电路,同时标准的1HZ时间信号必须做到准确稳定。通常使用石英晶体振荡器电路构成数字钟
实物电路图:
此图为拨码开关的实物图,当4开关处于高电平时,说明选择模式已经打开了,你可以选择是计数模式,还是显示时分秒模式,还是闹钟模式
当拨码开关2,拨至高电平时,所有数码管显示的数值将全部清零
校对分的独立按键,每按一下,计数值加一,计数范围0到59
校对时的独立按键,每按一下,计数值加1,计数范围0到23
校对秒的独立按键,每按一下,计数值加1,计数范围,0到59
假使此刻时间为早上九点九分57秒,我们在选择的模式(拨码开关)下,将状态调为闹钟模式,将闹钟定为十点整,也就是10.00.00。然后将拨码开关拨下,则数码管继续此刻的时间显示,当时间显示为10.00.00时,此时蜂鸣器将产生滴答滴答的声音。时间为一分钟。
设计心得
通过两星期的紧张工作,最后完成了我的设计任务——数字钟的设计与制作。通过 本次课程设计的学习,我深深的体会到设计课的重要性和目的性所在。本次设计课不仅仅培养了我们实际操作能力,也培养了我们灵活运用课本知识,理论联系实际,独立自主的进行设计的能力。它不仅仅是一个学习新知识新方法的好机会,同时也是对我所学知识的一次综合的检验和复习,使我明白了自己的缺陷所在,从而查漏补缺。希望学校以后多安排一些类似的实践环节,让同学们学以致用。 课程设计中要求要有耐心和毅力,还要细心,稍有不慎,一个小小的错误就会导致结果的不正确,而对错误的检查要求我要有足够的耐心,通过这次设计和设计中遇到的问题,也积累了一定的经验,对以后从事集成电路设计工作会有一定的帮助。在应用VHDL的过程中让我真正领会到了其并行运行与其他软件(C语言)顺序执行的差别及其在电路设计上的优越性。用VHDL硬件描述语言的形式来进行数字系统的设计方便灵活,利用EDA软件进行编译优化仿真极大地减少了电路设计时间和可能发生的错误,降低了开发成本,这种设计方法必将在未来的数字系统设计中发挥越来越重要的作用。
也是本次课程设计,巩固了我们以前学过的专业知识,通过这次的程序设计,使我们对数字系统结构也有了更进一步的了解与认识,同时对数据库软件EDA技术,VHDL语言等系列知识都有了一定的了解与认识。使用EDA技术开发页面的能力也有了提高,也使我们把理论与实践从正真意义上结合了起来,考研了我们的动手能力,查阅相关资料的能力,还有组织材料的能力。通过此次实践,我们从中可以找出自己知识的不足与欠缺,以便我们在日后的学习中得以改进与提高。
致谢
感谢梁老师一学期的教导,老师严谨的态度、严格的要求以及强烈的专业素养都对我们有十分深刻的影响,使得我们学会精益求精,端正自己的学习态度。在此,对梁老师表示衷心的感谢。通过本次设计实验,也使我们学到了很多,也借此机会综合巩固一学期所学的知识。也感谢身边帮助我的每一个同学。
参考文献
[1] 李国丽,朱维勇.电子技术实验指导书.合肥:中国科技大学出版社,2000
[2] 潘松,黄继业.EDA技术实用教程.北京:科学出版社,2002
[3] 郑家龙,王小海,章安元.集成电子技术基础教程.北京:高等教育出版社,2002
[4] 宋万杰,罗丰,吴顺君.CPLD技术及其应用.西安:西安电子科技大学出版社,1999
[5] 卢杰,赖毅.VHDL与数字电路设计.北京:科学出版社,2001
[6] 王金明,杨吉斌.数字系统设计与Verilog HDL.北京:电子工业出版社,2002
附录
闹钟模块的程序:library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity beep is
port(
clk: in std_logic;
hh1,hh2,mm1,mm2,h1,h2,m1,m2: in std_logic_vector(3 downto 0);
beep: out std_logic);
end entity;
architecture art of beep is
signal bep : std_logic;
begin
process(bep,clk,hh1,hh2,mm1,mm2,h1,h2,m1,m2)
begin
if (h1=hh1 and h2=hh2 and mm1=m1 and mm2=m2 ) OR (mm1="0000" and mm2="0000") then
if clk='1' and clk'event then
bep<=not bep;
end if;
else bep<='1';
end if;
beep<=bep;
end process;
end architecture;
数码管位选和段选
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity endslc is
port(
wei1,wei2: in std_logic_vector(5 downto 0);
out1,out2: in std_logic_vector(7 downto 0);
sel:in std_logic;
wei: out std_logic_vector(5 downto 0);
ot: out std_logic_vector(7 downto 0));
end entity;
architecture art of endslc is
begin
process(sel,wei1,wei2,out1,out2)
begin
if(sel='1') then
wei<=wei1;
ot<=out1;
else
wei<=wei2;
ot<=out2;
end if;
end process;
end architecture;
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity sel is
p
展开阅读全文