基于VHDL的闹钟系统设计.docx
- 文档编号:24319412
- 上传时间:2023-05-26
- 格式:DOCX
- 页数:70
- 大小:344.61KB
基于VHDL的闹钟系统设计.docx
《基于VHDL的闹钟系统设计.docx》由会员分享,可在线阅读,更多相关《基于VHDL的闹钟系统设计.docx(70页珍藏版)》请在冰豆网上搜索。
基于VHDL的闹钟系统设计
引言
人类社会已进入到高度发达的信息化社会,信息社会的发展离不开电子产品的进步。
现代电子产品在性能提高、复杂度增大的同时,价格却一直呈下降趋势,而且产品更新换代的步伐也越来越快,实现这种进步的主要因素是生产制造技术和电子设计技术的发展。
前者以微细加工技术为代表,目前已进展到深亚微米阶段,可以在几平方厘米的芯片上集成数千万个晶体管。
后者的核心就是EDA技术,EDA是指以计算机为工作平台,融合应用电子技术、计算机技术、智能化技术最新成果而研制成的电子CAD通用软件包,主要能辅助进行三方面的设计工作:
IC设计,电子电路设计,PCB设计。
没有EDA技术的支持,想要完成上述超大规模集成电路的设计制造是不可想象的,反过来,生产制造技术的不断进步又必将对EDA技术提出新的要求。
回顾近30年电子设计技术的发展历程,可将EDA技术分为三个阶段。
七十年代为CAD阶段,人们开始用计算机辅助进行IC版图编辑、PCB布局布线,取代了手工操作,产生了计算机辅助设计的概念。
八十年代为CAE阶段,与CAD相比,除了纯粹的图形绘制功能外,又增加了电路功能设计和结构设计,并且通过电气连接网络表将两者结合在一起,实现了工程设计,这就是计算机辅助工程的概念。
CAE的主要功能是:
原理图输入,逻辑仿真,电路分析,自动布局布线,PCB后分析。
九十年代为ESDA阶段,尽管CAD/CAE技术取得了巨大的成功,但并没有把人从繁重的设计工作中彻底解放出来。
在整个设计过程中,自动化和智能化程度还不高,各种EDA软件界面千差万别,学习使用困难,并且互不兼容,直接影响到设计环节间的衔接。
基于以上不足,人们开始追求:
贯彻整个设计过程的自动化,这就是ESDA即电子系统设计自动化。
高层次设计给我们提供了一种%26ldquo;自顶向下%26rdquo;(Top%26ndash;Down)的全新设计方法,这种设计方法首先从系统设计入手,在顶层进行功能方框图的划分和结构设计。
在方框图一级进行仿真、纠错,并用硬件描述语言对高层次的系统行为进行描述,在系统一级进行验证。
然后用综合优化工具生成具体门电路的网表,其对应的物理实现级可以是印刷电路板或专用集成电路。
由于设计的主要仿真和调试过程是在高层次上完成的,这一方面有利于早期发现结构设计上的错误,避免设计工作的浪费,同时也减少了逻辑功能仿真的工作量,提高了设计的一次成功率。
现代电子产品的复杂度日益加深,一个电子系统可能由数万个中小规模集成电路构成,这就带来了体积大、功耗大、可靠性差的问题,解决这一问题的有效方法就是采用ASIC(ApplicationSpecificIntegratedCircuits)芯片进行设计。
ASIC按照设计方法的不同可分为:
全定制ASIC,半定制ASIC,可编程ASIC(也称为可编程逻辑器件)。
设计全定制ASIC芯片时,设计师要定义芯片上所有晶体管的几何图形和工艺规则,最后将设计结果交由IC厂家掩膜制造完成。
优点是:
芯片可以获得最优的性能,即面积利用率高、速度快、功耗低。
缺点是:
开发周期长,费用高,只适合大批量产品开发。
半定制ASIC芯片的版图设计方法有所不同,分为门阵列设计法和标准单元设计法,这两种方法都是约束性的设计方法,其主要目的就是简化设计,以牺牲芯片性能为代价来缩短开发时间。
可编程逻辑芯片与上述掩膜ASIC的不同之处在于:
设计人员完成版图设计后,在实验室内就可以烧制出自己的芯片,无须IC厂家的参与,大大缩短了开发周期。
20世纪末,电子技术获得了飞速的发展,在其带动下,现代电子产品几乎渗透了社会的各个领域,有力的推动了社会生产力的发展和社会信息化程度的提高,同时也使现代电子产品性能进一步提高,产品更新换代的节奏也越来越快。
现代电子设计技术的核心是EDA技术。
EDA技术就是依赖功能强大的计算机,在EDA工具软件平台上,对以硬件描述语言VHDL为系统逻辑描述手段完成的设计文件,自动的完成逻辑编译、逻辑化简、逻辑分割、逻辑综合、结构综合,以及逻辑优化和仿真测试,直至实现既定的电子线路系统功能。
EDA技术使得设计者的工作仅限于利用软件的方式,即利用硬件描述语言和EDA软件来完成对系统硬件功能的实现。
从另一方面看,在现代到新电子产品的设计和生产中,微电子技术和现代电子设计技术时互相促进、互相推动又相互制约的两个技术环节。
前者代表了物理层在广度和深度上硬件电路实现的发展,后者则反应了现代先进的电子理论、电子技术、仿真技术、设计。
工艺和设计技术与最新的计算机软件技术有机的融合和升华。
因此,严格的说,EDA技术已不是某一学科的分支,或某种新的技能技术,它应该是一门综合性学科。
它融合多学科于一体,又渗透于各学科之中,打破了软件和硬件间的壁垒,使计算机的软件技术与硬件实现、设计效率和产品性能合二为一,它代表了电子设计技术和应用技术的发展方向。
作为当代大学生,特别是信息工程类的学生,EDA技术是知识体系中不可缺少的一部分。
所以我们这次课程设计是基于EDA技术来设计一个闹钟系统,通过对EDA的实际应用来更加充分的认识、使用和发展EDA技术。
1大规模可编程逻辑器件及VHDL简介
在数字电子系统领域,存在三种基本的器件类型:
存储器、微处理器和逻辑器件。
存储器用来存储随机信息,如数据表或数据库的内容。
微处理器执行软件指令来完成范围广泛的任务,如运行字处理程序或视频游戏。
逻辑器件提供特定的功能,包括器件与器件间的接口、数据通信、信号处理、数据显示、定时和控制操作、以及系统运行所需要的所有其它功能。
逻辑器件可分为两大类:
固定逻辑器件和可编程逻辑器件。
可编程逻辑器件的两种类型是现场可编程门阵列(FPGA)和复杂可编程逻辑器件(CPLD)。
1.1CPLD和FPGA简介
可编程逻辑器件(PLD-ProgrammmableLogicDevices)是一种由用户编程以实现某种逻辑功能的新型逻辑器件。
20世纪70年代末出现了可编程阵列逻辑(PLA-ProgrammableArrayLogic)器件。
随着技术的进步,生产工艺的不断进步,各种可编程逻辑器件如雨后春笋般涌现,如PROM、EPROM、EEPROM等。
在EPROM基础上出现的高密度可编程逻辑器件称为EPLD或CPLD。
在20世纪80年代中期,美国Xilinx公司首先推出了现场可编程门阵列(FPGA)器件。
FPGA器件采用逻辑单元阵列结构和静态随机存取器工艺,设计灵活,集成度高,可无限次反复编程,并可现场模拟调试验证。
1.1.1CPLD结构
CPLD是属于粗粒结构的可编程逻辑器件。
它具有丰富的逻辑资源(即逻辑门与寄存器的比例高)和高度灵活的路由资源。
CPLD以群阵列(arrayofclusters)的形式排列,由水平和垂直路由通道连接起来。
这些路由通道把信号送到器件的引脚上或者传进来,并且把CPLD内部的逻辑群连接起来。
CPLD最基本的单元是宏单元。
一个宏单元包含一个寄存器及其它有用特性。
因为每个宏单元用了16个乘积项,因此设计人员可部署大量的组合逻辑而不用增加额外的路径。
宏单元以逻辑模块的形式排列(LB),每个逻辑模块由16个宏单元组成。
宏单元执行一个AND操作,然后一个OR操作以实现组合逻辑。
每个群还包含两个单端口逻辑群存储器模块和一个多端口通道存储器模块。
前者每模块有8,192b存储器,后者包含4,096b专用通信存储器且可配置为单端口、多端口或带专用控制逻。
1.1.2FPGA结构
FPGA具有掩膜可编程门阵列的通用结构,它由逻辑功能块排成阵列组成,并由可编程的互联资源连接这些逻辑功能块以及相应的输入/输出单元来实现不同的设计。
其中,FPGA的功能由逻辑结构的配置数据决定。
工作时,这些配置数据存放在片内的SRAM或熔丝上。
基于SRAM的FPGA器件,在工作前需要从芯片外部加载配置数据,配置数据可以村粗在片外的EPROM或其他存储体。
用户可以控制加载过程,在现场修改期间的逻辑功能,即所谓现场编程。
1.1.3CPLD与FPGA的比较
尽管FPGA和CPLD都是可编程ASIC器件,有很多共同特点,但由于FPGA和CPLDA结构上的差异,具有各自的特点:
1)CPLD更适合完成各种算法和组合逻辑,FPGA更适合于完成时序逻辑。
换句话说,FPGA更适合于触发器丰富的结构,而CPLD更适合于触发器有限而乘积项丰富的结构。
2)在编程上FPGA比CPLD具有更大的灵活性。
CPLD通过修改具有固定内连电路的逻辑功能来编程,FPGA主要通过改变内部连线的布线来编程;FPGA可在逻辑门下编程,而CPLD是在逻辑块下编程。
3)FPGA比CPLD使用起来更方便。
CPLD的编程采用EPROM或FASTFLASH技术,无需外部存储器芯片,使用简单。
而FPGA的编程信息需存放在外部存储器上,使用方法复杂。
4)CPLD的速度比FPGA快,并且具有较大的时间可预测性。
这是由于FPGA是门级编程,并且CLB之间采用分布式互联,而CPLD是逻辑块级编程,并且其逻辑块之间的互联是集总式的。
5)在编程方式上,CPLD主要是基于EPROM或FLASH存储器编程,编程次数可达1万次,优点是系统断电时编程信息也不丢失。
CPLD又可分为在编程器上编程和在系统编程两类。
FPGA大部分是基于SRAM编程,编程信息在系统断电时丢失,每次上电时,需从器件外部将编程数据重新写入SRAM中。
其优点是可以编程任意次,可在工作中快速编程,从而实现板级和系统级的动态配置。
1.2硬件描述语言VHDL
VHDL(VHSIChardwareDescriptionLanguage)语言是1983年美国国防部(DOD)发起创建的由IEEE进一步发展并在1987年“IEEE标准1076”发布的硬件电路描述语言。
它覆盖面广,描述能力强,能够支持硬件设计、验证、综合和测试,是一种多层次的硬件描述语言,它还可以描述与工艺有关的信息,工艺参数,可以通过设计文件语言参数来调整,不会因工艺变化而使VHDL语言过时,因此它有着较长的生命周期,广范应用于EDA技术中。
1.2.1VHDL语言的特性
在面对VHDL作为一个规范语言和建模语言,随着VHDL的标准化,出现了一些支持该语言的仿真器。
由于创建VHDL的最初目的是用于标准文档的建立和电路功能模拟,其基本想法是在高层次上描述系统和元件的行为。
但到了90年代初,人们发现,用软件工具将VHDL源码自动地转化为文本方式表达基本逻辑元件连接图,即网表文件。
这种方法显然对于电路自动设计是一个极大地推进。
很快,电子设计领域出现了第一个软件设计工具,即VHDL逻辑综合器,它把标准VHDL的部分语句描述转化为具体电路实现的网表文件。
VHDL具有与具体硬件电路无关和与设计平台无关的特性,并且具有良好的电路行为描述和系统描述能力,在语言易读性和层次化结构化设计方面表现了强大的生命力和应用潜力。
因此,VHDL支持各种模式的设计方法:
自顶向下与自底向上或混合方法,当今许多电子产品生命周期缩短,需要多次重新设计以融入最新技术、改变工艺等方面,VHDL具有良好的适应性。
1.2.2VHDL语言的应用
VHDL主要用于描述数字系统的结构,行为,功能和接口。
除了含有许多具有硬件特征的语句外,VHDL的语言形式和描述风格与句法是十分类似于一般的计算机高级语言。
VHDL的程序结构特点是将一项工程设计,或称设计实体(可以是一个元件,一个电路模块或一个系统)分成外部和内部,既涉及实体的内部功能和算法完成部分。
在对一个设计实体定义了外部界面后,一旦其内部开发完成后,其他的设计就可以直接调用这个实体。
这种将设计实体分成内外部分的概念是VHDL系统设计的基本点。
1.3MAX+PLUSⅡ概述
MAX+PLUSⅡ是Altera公司提供的EDA设计软件,它提供了与结构无关的设计环境,是一个完全集成化、易学、易用的可编程逻辑设计环境,MAX+PLUS
支持FLEX、MAX和Classic系列器件。
MAX+PLUS
软件的设计输入方法很多,主要包括原理图案设计输入方式、文本设计输入方式、波形设计输入方式、底层设计输入方式等。
2设计方案论证
2.1方案分析
根据任务书的要求,所设计的闹钟需要具有计时、校时、设闹三个最基本的功能。
根据这三个要求展开分析:
1)闹钟要能够计时就必须要有个计时器,计时器可以用计数器来制作完成,在这里为了能够很好的计时采用同步计数器比较好;
2)校时功能的实现必须要有个控制器来管理,因为在校时的时候我们要让闹钟正常的计时,只有当设定好时间后才按新的时间来计时。
这样就需要一个状态机来实现管理,也是整个系统的核心。
3)设定闹钟,这必须要有个闹钟时间寄存器来存储设定的时间。
2.2设计方案
根据上面的方案分析后大概可以确定如图1.1的方案来完成整个系统的设计:
buffertime
time[23..0]displaytime[23..0]
alarmloadalarmtime[23..0]
keyvalue
keypress
Buffertime[23..0]Alarm_signal
functionkey
timeloadtime[23..0]
图2.1闹钟机构示意图
从图2.1可以看出闹钟大概由主要的六部分组成,即:
键盘接口电路、状态机、闹钟时间寄存器、计时器、铃声管理和显示管理模块。
分别设计各个模块,使其完成相应的功能,最后按照这样的框图就可以完成整个系统的设计。
2.3主要模块原理简介
状态机
数字电路中的控制器模块可以是CPU也可以是有限状态机。
CPU是通用的数字电路控制模块,而有限状态机则一般是根据具体要求专门设计的。
有限状态机比CPU灵活得多,它所占硬件资源的多少取决于所设计电路的复杂性。
此外有限状态机还有高速、高效率的优点,因此在数字电路中获得广泛的应用。
1)状态机的基本结构和功能
状态机是包括一组寄存器的电路,该寄存器的值称为状态机的状态。
状态机的状态不仅和输入信号有关,而且还与寄存器的当前状态有关。
状态机可以认为是组合逻辑电路和寄存器逻辑电路的特殊组合,它包括两个主要部分:
组合逻辑本分和寄存器部分。
寄存器逻辑用于存储状态机的状态,组合逻辑包括两个部分:
状态译码和输出译码。
状态译码用于确定状态机下个时钟周期的状态值,即确定状态机的激励方程,而输出译码确定状态机的输出,即确定状态机的输出方程。
在状态机输出的产生过程中,根据输出译码是否使用输入信号可以分为两类状态机:
莫尔状态机和米利状态机。
在莫尔状态机中,输出只与当前状态有关,而在米利状态机中国,输出不仅和当前状态有关,还与输入有关。
状态机又分为同步状体机和异步状态机。
同步状态机使用全局时钟信号,所有寄存器的时钟都是通一个,这使得状态机的改变只发生在时钟的上升沿。
异步状态机则利用组合逻辑电路的传播延迟来实现状态的存储功能,这样的状态机难于设计,而且很不稳定。
设计状态机时,在状态机的状态数目确定后,就需要选择一些寄存器的值来表示这些状态,称为状态的编码。
不同状态编码会影响到状态机实现的性能。
存在两种普遍使用的状态编码:
二进制编码和one-hot编码。
二进制编码是指用n位的寄存器来表示2^6个状态的编码,即每个可能出现的二进制值都表示一种状态。
二进制编码需要的寄存器示最少的,因此又叫做压缩状态编码。
而one-hot编码在所有寄存器的值中只有一个寄存器的值位“1”,其余都是“0”。
因此n个状态就需要n个寄存器。
2)状态机的VHDL模型
(1)米利状态机的VHDL模型
数据输入下一个状态
数据输出
clock当前状态
当前状态反馈
图2.2米利的状态模型
可见米利模型包括3部分:
即状态译码、状态更新和输出译码。
状态译码部分是由数据输入和当前状态反馈决定下一个状态。
状态更新模块是在时钟的上升沿时将下个状态的值赋给当前状态。
输出译码模块是由数据输入和当前状态通过译码得到数据输出。
有时输出译码也通过寄存器锁存,也是成为同步输出译码。
(2)莫尔状态机的VHDL模型
数据输入下一状态当前状态数据输出
clock
当前状态反馈
图2.3莫尔机模型
3)用VHDL实现有限状态机的一般步骤
(1)选择米利状态机或莫尔状态机
米利机和莫尔机的不同之处在于:
首先,米利机的输出直接受到输入的影响,所以输入变化可能出现在时钟周期内的任何时刻。
而莫尔状态机输出只决定于当前状态,所以输出除了可能在时钟的上升沿后的几个门延迟时间内输出不稳定外,在一个时钟周期内是稳定的。
当然如果米利的输出译码采用了寄存器锁存输出,则其输出在一个时钟周期内也是稳定的。
其次,实现相同的功能,摩尔机比米利机需要更多的状态个数。
(2)决定需要的状态数目。
(3)给出状态之间的转移关系,如状态转移表和状态转移图。
(4)把状态转移表和状态转移图用VHDL来描述,从而实现该有限状态机。
3闹钟单元电路设计及测试
3.1键盘接口电路的设计
行列式键盘又叫矩阵式键盘,4×4的行列结构可以构成有16个键的键盘,行列式键盘的电路原理图如图3.1所示:
+5V
5.1k
图3.1行列式键盘电路原理图
按键设置在行列线交叉点,行、列线分别连接到按键开关的两端。
列线通过上拉电阻接+5V的电压,即列线的输出被钳位到高电平状态。
判断键盘中有无按键按下是通过行线送入扫描信号,然从列线读取状态得到。
其方法是依次给行线送低电平,检查按键的输入。
如果列线信号全为高电平,则代表低电平信号所在的行中无按键按下;如果列线信号全为低电平,则代表低电平信号所在的行中有按键按下。
所以键盘接口电路可以由下面几个部分组成:
3.1.1键盘扫描电路
键盘扫描电路是用于产生keydrv3~keydrv0信号,其变化顺序依次为1110~1101~1011~0111……周而复始的扫描。
其停留在每个状态的时间大约为10ms。
键盘扫描电路的外部接口的程序采用一个状态机来实现扫描电路。
该状态机是一个one-hot态机,并且输出值就是状态机的状态,没有通过一个逻辑电路来作输出译码。
这样做的好处是得到的输出信号比较干净,没有毛刺。
仿真波形如下图3.2所示:
图3.2键盘扫描电路仿真图
图形分析:
从仿真图中可以看出CLK_scan是周期为20ms的扫描时钟,keydrv为输出到键盘的扫描信号,宽度为4位,分别为1110~1101~1011~0111……周而复始的扫描,和设计要求符合。
同时也可以得到键盘扫描电路外部接口图。
如图3.3所示:
图3.3键盘扫描电路外部接口
3.1.2键盘译码电路
键盘译码电路是从keydrv3~keydrv0和keyin3~keyin0信号中译码出按键键值。
按键标志产生电路是产生按键标志信号keypressed的电路。
由于这两个电路关系紧密,因此放入同一个模块中实现。
其外部接口如图3.4所示:
图3.4键盘译码电路的外部接口
其中clk为全局时钟。
Keydrv为键盘扫描信号,keyin为键盘输入信号,keyvalue为键值(代表按键所在位置),keypressed表示有一个按键被按下,每发生依次按键动作,keypressed就输出一个宽度为全局时钟周期的正脉冲。
该信号用于与其他模块握手,负责通知其他模块键盘上有按键发生。
Functionkey信号是表明按键是否为功能键。
当按键是功能键时,functionkey为高电平,否则为低电平。
时序仿真图如图3.5所示:
图3.5键盘译码电路波形图
图形分析:
由图可以看出在输入为1110时,即对应的1时,键盘输出keyvalue在时钟的下一个脉冲的上升沿时候输出为1,在没有新的数据输入时一直保持前一个数值直到下个数据被输入。
从图中可以看出,电路满足这样的要求,说明电路设计合理,达到了任务要求。
3.1.3时钟产生模块
时钟产生模块是用于产生扫描时钟的,他的输出提供给键盘扫描模块和按键标志产生模块,其外部接口如图3.6所示。
它的输入是全局时钟,假设全局时钟频率为12MHZ。
它的输出是周期为100ms的扫描时钟。
图3.6时钟产生模块外部接口
它包含有一个计数器模块和一个译码输出模块。
应该值得注意的是译码器的输出采用了寄存器锁存输出,这是为了消除毛刺。
译码器的输入是计数器的输出,计数器各级输出延迟是不一样的,因此译码器输出clk_scan信号波形就会有毛刺,但是,在本程序中,把有毛刺的信号通过时钟采样,即通过一个D触发器,这样就会使信号延迟一个时钟周期,在本例中这种延迟是允许的。
3.1.4键盘接口电路顶层电路实现
键盘接口电路的顶层电路是把键盘扫描模块、键盘译码且按键标志产生模块和时钟产生模块连接起来,结构如图3.7所示:
图3.7键盘接口电路结构图
其中Clk为外部时钟在这里用12M的频率
其仿真波形如图3.8所示:
图3.8键盘接口电路波形图
3.2闹钟模块设计:
闹钟模块可以分为状态机、闹钟时间寄存器、计时器、多路选通器和铃声管理5个主要模块。
3.2.1、计时器模块设计
计时器是实现计时功能的部件,它给出当前时间信号time。
当前时间以6位BCD数来表示,前2位BCD数用于表示小时,中间2位BCD数用于表示分钟,最后2位BCD数用于表示秒。
用BCD数来表示时间的好处在于方便送到显示模块进行译码。
计时器的外部接口如图3.9所示:
(其中clk为全局时钟,其频率为1MHZ。
Load为同步加载信号,当load为高电平时,数据buffertime被加载到计数器输出time中。
Time为计时器输出,即当前的时间。
)
图3.9计时器模块外部接口
根据VHDL程序计时器模块仿真波形如图3.10所示:
图3.10计时器波形图
图形分析:
由图可以看出,用户输入的时间先是放在时间缓冲器中,并没有立即加载到计时器上。
当时间加载信号load为高电平时候新设定的闹钟时间才被加载到计时器。
这时候闹钟就能够按新设定的时间开始计时。
在这里仿真的时候,特意将时间设定为整点以前的一个时间,这样就能够清楚的看到新设定的时间起作用而且闹钟按新设定的时间正常计时。
3.2.2.状态机
状态机模块是闹钟的控制器,它给出控制其他模块的时序。
状态机的输入信号是键盘模块的输出信号keyvalue.Keypressed和functionkey.状态机的输出是缓存时间信号buffertime、闹钟时间和加载信号alarmload、计时器时间加载信号timeload、闹钟开关状态alarmon和整点报时开关状态houralarmon.Time是由用户通过键盘输入的时间信号,可以送给闹钟寄存器和计时器。
状态机可以划分为独立的两个部分,其中一个部分用于产生缓存时间信号buffertime、闹钟时间加载信号alarmload和计时器时间加载信号timeload,称这部分状态机为校时和设闹状态机,其的外部接口如图3.11所示。
另一部开关状态alarmon和整点报时开关状态信号houralarmon,称之为闹钟和整点报时开关状态机,其分用于产生闹钟外部接口如图3.12所示:
图3.11校时和闹钟状态机的外部接口
图3.12闹钟和整点报时开关状态机的外部接口
1)校时和设闹状态机
状态机的设计最重要的时得到状态机的状态转移图。
根据前面设计的用户操作流程可以得到校时和设闹状态机的转移图如3.13所示。
其中计时状态为显示当前的状态。
在设闹更新状态内,闹钟寄存器的值被更新。
key=Ekey=F
key=0~2key=0~2
key=Bkey=B
key=0~9
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 VHDL 闹钟 系统 设计