038
基于FPGA的电子时钟设计样本
(样本只提供该系统的基本情况介绍,若需要完整的设计和论文,建议您购买本系统,凡是购买本站系统的,本站均根据您的要求,把系统上的开发信息,题目等修改成符合您的要求)
本系统开发工具:单片机/汇编
本设计包含内容
毕业论文+开题报告+答辩稿
论文大概:
摘 要
VHDL是Very High Speed Integrated Circuit Hardware Description
Language的缩写,意思是超高速集成电路硬件描述语言。对于复杂的数字系统的设计,它有独特的作用。它的硬件描述能力强,能轻易的描述出硬件的结构和功能。这种语言的应用至少意味着两种重大的改变:电路的设计竟然可以通过文字描述的方式完成;电子电路可以当作文件一样来存储。随着现代技术的发展,这种语言的效益与作用日益明显,每年均能够以超过30%的速度快速成长。
这次毕业设计的内容是在简要介绍了VHDL语言的一些基本语法和概念后,进一步应用VHDL,在MAX+plusII
的环境下设计一个电子钟,最后通过仿真出时序图实现预定功能。电子钟的时间显示用到了七段数码管(或称七段显示器)的电路设计,内部的时间控制输出则用到了各种设计,包括:时钟分频模块、计时模块、按键模块和显示模块四个部分。
关键词:VHDL,电子钟,七段显示器,时序图。
1.1 Abstract
VHDL is an abbreviation for “Very High Speed
Integrated Circuit Hardware Description Language”. and is along with
Verilog the most widely used hardware description language. It is
used to describe the behavior and structure of electronic systems,
but is particularly suited as a language to describe the structure
and behavior of digital electronic hardware designs. The application
of it means two changes: electro circuit design can be done by the
kind of file description.; and electro circuit can be stored as a
file.
It is used to lower the cost and reduce the design cycle.
It can supply designers’ needs easily. With the development of
modern technology it grows more than 30% every year.
This
graduation project content was was introducing briefly after VHDL
language some basic grammars and the concept, further applied VHDL,
designed an electron clock under the MAX+plusII environment, finally
left the succession chart realization predetermined function through
the simulation.The electron clock time demonstrated used seven
sections of nixietubes (or called seven-segment displays) the
circuit design, internal timing control lost the origin to use each
kind of design, including: Clock frequency division module, time
module, pressed key module and demonstration module four
parts.
Key words: Vhdl,electronic clock, seven segment display,
time-analyse .
目
录
摘要…………………………………………………………………………………1
Abstract……………………………………………………………………………2
1 绪论……………………………………………………………………………4
2
VHDL简介………………………………………………………………………5
3
VHDL电子钟设计…………………………………………………………………7
3.1电子钟的设计要求和工作原理……………………………………………7
3.1.1设计要求……………………………………………………………7
3.1.2
系统设计方案概述及工作原理……………………………………7
3.2
电子种的顶层设计…………………………………………………………7
3.2.1顶层设计分析………………………………………………………7
3.2.2
电子钟顶层VHDL设计……………………………………………10
3.3
电子钟的底层模块………………………………………………………13
3.3.1
时钟分频模块……………………………………………………13
3.3.2
计时模块…………………………………………………………15
3.3.3
按键模块…………………………………………………………24
3.4
显示模块…………………………………………………………………26
3.4.1进制计数器counter6……………………………………………27
3.4.2
显示位选择译码电路……………………………………………29
3.4.3
计时位选择电路…………………………………………………30
3.4.4
七段显示译码电路………………………………………………32
3.4.5
显示模块的VHDL设计……………………………………………34
4 MAX+plusII的使用简介……………………………………………………37
5.总结与体会……………………………………………………………………38
6.致谢……………………………………………………………………………39
参考文献…………………………………………………………………………39
1 绪 论
数字钟是一种用数字电路技术实现时、分、秒计时的装置,与机械式时钟相比具有更高的准确性和直观性,且无机械装置,具有更更长的使用寿命,因此得到了广泛的使用。在数字钟的发展上看,主要向小型化、多功能化发展。
数字钟从原理上讲是一种典型的数字电路,其中包括了组合逻辑电路和时序电路。传统的设计方法有两种,一是利用组合逻辑电路和时序电路等中小规模集成电路来设计;一是利用单片机编程技术来设计。这两种设计都存在硬件复杂,设计周期长,成本高等缺点。
FPGA是英文Field
Programmable Gate
Array的缩写,即现场可编程门阵列,它是在PAL、GAL、EPLD等可编程器件的基础上进一步发展的产物。它是作为专用集成电路(ASIC)领域中的一种半定制电路而出现的,既解决了定制电路的不足,又克服了原有可编程器件门电路数有限的缺点。
FPGA采用了逻辑单元阵列LCA(Logic Cell
Array)这样一个新概念,内部包括可配置逻辑模块CLB(Configurable Logic
Block)、输出输入模块IOB(Input Output
Block)和内部连线(Interconnect)三个部分。FPGA的基本特点主要有:
1)采用FPGA设计ASIC电路,用户不需要投片生产,就能得到合用的芯片。
2)FPGA可做其它全定制或半定制ASIC电路的中试样片。
3)FPGA内部有丰富的触发器和I/O引脚。
4)FPGA是ASIC电路中设计周期最短、开发费用最低、风险最小的器件之一。
5)FPGA采用高速CHMOS工艺,功耗低,可以与CMOS、TTL电平兼容。
可以说,FPGA芯片是小批量系统提高系统集成度、可靠性的最佳选择之一。
随着电子设计自动化(EDA)技术的发展,利用计算机辅助设计和用高密度可编程逻辑器件实现数字系统已经成为发展趋势。本次毕业设计就利用VHDL
语言的强大的电路描述和建模能力设计基于FPGA的电子时钟,可以提高利用计算机辅助设计和用高密度可编程逻辑器件实现数字系统的能力,为以后深入学习和应用电子系统现代设计方法打好基础,并具有工程实用性。
2. VHDL 简 介:
VHDL(Very High Speed Integrated Circuit Hardware Description
Language)即超高速集成电路硬件描述语言,在基于CPLD/FPGA和ASIC的数字系统设计中有着广泛的应用。
VHDL语言诞生于1983年,1987年被美国国防部和IEEE确定为标准的硬件描述语言。自从IEEE发布了VHDL的第一个标准版本IEEE
1076-1987后,各大EDA公司都先后推出了自己的支持VHDL的EDA工具。VHDL在电子设计行业得到了广泛的认同。此后IEEE又先后发布了IEEE
1076-1993和IEEE 1076-2000版本。
VHDL是硬件设计人员的一种描述工具,硬件设计本身还是要人来完成的。VHDL被设计出来的目的是为了硬件设计,具有硬件的性质。它用于描述电路系统的结构,接口,行为和功能,除了它具有的硬件特征的语句外,它的语言形式和描述风格,以及句法与一般的计算机高级语言相当类似,然而它又与软件语言具有完全不同的性质。
以下是一个vhdl的实例:
--
********************************************
LIBRARY IEEE;
USE
IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_ARITH.ALL;
USE
IEEE.STD_LOGIC_UNSIGNED.ALL;
--*********************************************
ENTITY
vhdl_example
is
PORT(
in1 :
IN Std_Logic;
out1 :
OUT Std_Logic
);
END
vhdl_example;
--*********************************************
ARCHITECTURE
a OF vhdl_example IS
BEGIN
out1 <=in1;
END
a;
--*********************************************
这个程序描述的是这样一个元件——在输入口in1直接引一条线至out1。这个程序体现出vhdl程序的一般结构:
使用库(use)定义区——实体(Entity)定义区——结构(Architecture)定义区。
由于vhdl程序里是使用“--”号作批注说明的,所以上述程序被批注分为三个部分,三个部分分别对应上述所描述的三个结构。
Use定义区描述的是这个程序使用的定义库,类似于c语言中的头文件包括;
Entity定义区描述的电子元件的外部结构,就是指电子元件的输入和输出接口,它用以定义一颗芯片的管脚状态;
Architecture定义区里面是这个程序的关键部分,包括算法,功能,硬件的行为等都是在Architecture区里面描述的,与Entity定义区相比,Entity定义区对于硬件来说是可视的,因为这个区描述的是实实在在的硬件结构(输入输出接口),而Architecture区里面的内容是不可视的。
VHDL语言的很多特点都可以从这个很小的程序中看出:
结构简单明了,各部分负责的硬件描述明确,能避开硬件具体的器件结构,用强大的行为描述能力对电路从逻辑上进行描述和设计;
可以看出,VHDL对设计的描述具有相对独立性,设计者可以不懂硬件的结构,也不必关心最终设计实现的目标器件是什么;设计者的责任是把硬件的结构和功能完整详细地描述出来;
此外,用VHDL设计的系统的功能可行性能够在早期就检验出来,这主要是因为随时可以对设计进行仿真;
以上特点决定了VHDL拥有的另一个很重要的优势:代码的再利用功能。这一点很适合目前急速发展的市场需求。
3.VHDL电子钟设计
3.1
电子钟的设计要求和工作原理
3.1.1设计要求:
1) 、有时、分、秒计数显示功能,小时为24进制,分钟和秒为60进制。
2) 、以根据需要设置复位、清零、置位等功能。
3.1.2
系统设计方案概述及工作原理
根据系统设计要求,系统设计采用自顶向下设计方法,由时钟分频模块、计时模块、按键模块和显示模块四个部分组成。
1)首先按下复位开关rest进行复位清零操作,电子钟从新计时开始。sethr10、sethr可以调整时种,setmin10、setmin
可以调整分钟,步进为1。
2)由于电子钟的最小计时单位是1s,因此提供给系统的内部的时钟频率应该大于1Hz,这里取100Hz。CLK端连接外部10Hz的时钟输入信号clk。对clk进行计数,当clk=10时,秒加1,当秒加到60时,分加1;当分加到60时,时加1;当时加到24时,全部清0,从新计时。
3)用6位数码管分别显示“时”、“分”、“秒”,通过输出线segment(
6 DOWNTO 0 )上的信号来点亮指定的LED七段显示数码管;为了节省资源,采用动态显示,choose(5 Downto 0
)以100Hz的频率使6个LED七段显示数码管按次序依次点亮,由于频率很高,因此可以得到一个无闪烁的,稳定的时间显示输出。
3.2
电子种的顶层设计
3.2.1顶层设计分析
对于电子钟的设计,这里将采用自顶向下的设计方法进行设计,因此首先需要进行电子钟的顶层设计。本节将首先介绍电子钟的系统结构和模块划分,然后设计出顶层VHDL设计程序。
根据电子钟的设计要求、工作原理和设计方案,这里不难给出设计系统机构框图如下所示。
图
3.1
电子钟系统结构框图
给出系统的结构框图后,接下来的工作就是进行电子钟系统的模块划分以及确定这些模块之间的连接关系。
图
3.2 系统各个模块的连接关系图。
根据系统的设计要求和工作原理以及图3.2所示的各个模块之间的连接关系,可以看出系统的输入输出信号包括:
1) 外部输入的时钟信号clk:输入信号;
2) 复位开关信号reset:输入信号;
3) 时/分调整信号sethr10、sethr、setmin10、setmin:输入信号;
4) LED六段显示数码管的选通信号choose[5:0]:输出信号;
5) LED七段显示数码管的输出信号segment[6:0]:输出信号。
由于外部始终信号clk的频率为10Hz,而实际需要的内部计时时钟频率为1Hz。因此需要一个时钟分频电路。通过这个分频电路,对外部时钟信号clk进行分频操作,用来产生频率分别为1Hz的时钟信号。
由于时间显示是由6个LED七段显示数码管组成,因此需要产生6位的计时信息:小时十位信号、小时各位信号、分十位信号、分各位信号、秒十位信号、秒各位信号。这个定时计数可以采用一个定时计数器来完成,他的功能就是用来产生6位计时信息。这里采用循环点亮LED七段显示数码管的方法来显示时间输出。通过信号choose
(7 DOWNTO 0)来进行6个LED七段显示数码管的选择。从而将输出信号segment(6 DOWNTO 0)送到相应的
LED七段显示数码管上以完成秒表计时的显示。
各个模块的对外接口如下:
(时钟分频模块、计时模块、按键模块和显示模块四个部分组成。)
1、 时钟分频模块
1)、复位开关信号reset:输入信号;
2)、外部时钟信号clk:输入信号;
3)、内部计时时钟信号clk0:输出信号。
2、 计时模块
1)、内部计时时钟信号clk0:输入信号;
2)、复位关信号reset:输入信号
3、小时十位信号hr10:输出信号;
4、小时个位信号hr:输出信号;
5、分十位信号min10:输出信号;
6、分个位信号min:输出信号;
7、秒十位信号sec10:输出信号;
8、秒个位信号sec:输出信号。
3、 按键模块
1)、复位开关信号reset:输入信号;
2)、时调整按键sethr10、sethr:输入信号;
3)、分调整按键setmin10、setmin:输入信号;
4)、小时十位信号hr10:输出信号;
5)、小时个位信号hr:输出信号;
6)、分十位信号min10:输出信号;
7)、分个位信号min:输出信号。
4、 显示模块
1)、外部时钟信号clk:输入信号;
2)、小时十位信号hr10:输入信号;
3)、小时个位信号hr:输入信号;
4)、分十位信号min10:输入信号;
5)、分个位信号min:输入信号;
6)、秒十位信号sec10:输入信号;
7)、秒个位信号sec:输入信号。
8)、LED七段显示数码管的选通信号choose:输出信号;
9)、LED七段显示数码管的输出信号segment:输出信号。
3.2.2 电子钟顶层VHDL设计
划分的四个模块以元件的形式给出,因此首先在结构的说明部分进行元件说明,然后才呢功能够在结构体中进行例化调用,另外,结构的说明部分还定义了许多中间信号,他们的功能是用来在模块之间传诵信息。
--电子钟顶层VHDL设计程序:
library
ieee;
use ieee.std_logic_1164.all;
use
ieee.std_logic_arith.all;
use ieee.std_logic_unsigned.all;
entity stopwatch is
port(reset :in
std_logic;
Shi_on :in
std_logic;
fen_on :in
std_logic;
clk :in
std_logic;
choose :out std_logic_vector(5
downto 0);
segment :out std_logic_vector(6
downto 0));
end stopwatch;
architecture structure of stopwatch is
component
clk_div
port(clk :in
std_logic;
clk0 :out
std_logic);
end component;
component time_counter
port(reset
:in std_logic;
enable :in std_logic;
clk0 :in std_logic;
hr10 :out std_logic_vector(3 downto
0);
hr :out
std_logic_vector(3 downto 0);
min10 :out std_logic_vector(2 downto 0);
min :out std_logic_vector(3 downto
0);
sec10 :out std_logic_vector(2
downto 0);
sec :out
std_logic_vector(3 downto
0));
end component;
component keyin
port(clk :in
std_logic;
sethr10:in
std_logic;
sethr :in
std_logic;
setmin10:in
std_logic;
setmin:in
std_logic;
reset :in
std_logic;
hr10 :out std_logic_vector(3
downto 0);
hr :out
std_logic_vector(3 downto 0);
min10 :out std_logic_vector(2 downto 0);
min :out std_logic_vector(3 downto
0));
end component;
component display
port(clk :in
std_logic;
reset :in
std_logic;
hr10 :in std_logic_vector(3
downto 0);
hr :in
std_logic_vector(3 downto 0);
min10 :in std_logic_vector(2 downto 0);
min :in std_logic_vector(3 downto
0);
sec10 :in std_logic_vector(2 downto
0);
sec :in
std_logic_vector(3 downto 0);
choose :out
std_logic_vector(5 downto 0);
segment :out
std_logic_vector(6 downto 0));
end component;
signal
clk0 :std_logic;
signal
enable :std_logic;
signal hr10 :std_logic_vector(3
downto 0);
signal
hr :std_logic_vector(3 downto 0);
signal min10 :std_logic_vector(2 downto
0);
signal min :std_logic_vector(3
downto 0);
signal
sec10 :std_logic_vector(2 downto 0);
signal sec :std_logic_vector(3 downto
0);
begin
u0:clk_div
port
map(clk,clk0);
u1:time_counter
port
map(reset,enable,clk0,hr10,hr,min10,min,sec10,sec);
u2:keyin
port
map(clk,Shi_on,fen_on,reset,
hr10,hr,min10,min,sec10,sec);
u3:display
port
map(clk,reset,hr10,hr,min10,min,sec10,sec,
choose,segment);
end structure;
完成电子钟的顶层VHDL设计程序后,接下来就进行底层模块的设计了,因为顶层设计完全是靠底层模块来支持的。另外,对于顶层VHDL设计程序
的仿真验证也需要在底层模块的设计完成后才能进行。
3.3
电子钟的底层模块
3.3.1时钟分频模块
时钟分频模块的功能是将输入的外部时钟信号clk进行分频,从而产生用来内部定时计数的1Hz的时钟信号clk0。采用10分频电路就可以完成相应功能。
下面给出10分频电路的VHDL设计程序。
library
ieee;
use ieee.std_logic_1164.all;
use
ieee.std_logic_arith.all;
use ieee.std_logic_unsigned.all;
entity clk_div is
port(clk :in
std_logic;
clk0:out std_logic);
end clk_div;
architecture rtl of clk_div is
signal
count:std_logic_vector(3 downto
0);
begin
process(clk)
begin
if(clk'event and
clk='1')then
if(count="1001")then
count<=(others=>'0');
else
count<=count+1;
end
if;
end if;
end process;
process(clk)
begin
if(clk'event
and
clk='1')then
if(count="1001")then
clk0<='1';
else
clk0<='0';
end
if;
end if;
end process;
end
rtl;
完成VHDL设计程序后,接下来可以对其仿真,以验证VHDL设计的逻辑是否正确,下图3.3给出了10分频电路的仿真波形。为了能够在图上看的清楚,仿真时钟选择的是clk周期为200ns。
图3.3
10分频电路的仿真波形
对时钟分频模块的VHDL设计程序进行仿真验证,输出信号clk0是输入信号clk的十分频。
3.3.2
计时模块
电子种计时模块主要是用来实现内部定时计数功能。计时模块的输入信号包括内部计时时钟信号clk0,输出信号就是计时信息,包括小时十位信号hr10、小时个位信号hr、分十位信号min10、分个位信号min、秒十位信号sec10、秒个位信号sec。通过分析,计时模块可以采用2个六进制计数器、2个十进制计数器和1个二十四进制计数器串联在一起来实现。
图3.4
计时模块结构框图