EDA实验报告 (1)
EDA实验报告

EDA实验报告班级:姓名:目录实验一:七段数码显示译码器设计 (1)摘要 (1)实验原理 (1)实验方案及仿真 (1)引脚下载 (2)实验结果与分析 (3)附录 (3)实验二:序列检测器设计 (6)摘要 (6)实验原理 (6)实现方案及仿真 (6)引脚下载 (7)实验结果与分析 (8)实验三:数控分频器的设计 (11)摘要 (11)实验原理 (11)方案的实现与仿真 (11)引脚下载 (12)实验结果及总结 (12)附录 (12)实验四:正弦信号发生器 (14)摘要 (14)实验原理 (14)实现方案与仿真 (14)嵌入式逻辑分析及管脚下载 (16)实验结果与分析 (17)附录 (18)实验一:七段数码显示译码器设计摘要:七段译码器是一种简单的组合电路,利用QuartusII的VHDL语言十分方便的设计出七段数码显示译码器。
将其生成原理图,再与四位二进制计数器组合而成的一个用数码管显示的十六位计数器。
整个设计过程完整的学习了QuartusII的整个设计流程。
实验原理:七段数码是纯组合电路,通常的小规模专用IC,如74或4000系列的器件只能作十进制BCD码译码,然而数字系统中的数据处理和运算都是2进制的,所以输出表达都是16进制的,为了满足16进制数的译码显示,最方便的方法就是利用译码程序在FPGA\CPLD中来实现。
本实验作为7段译码器,输出信号LED7S的7位分别是g、f、e、d、c、b、a,高位在左,低位在右。
例如当LED7S 输出为“1101101”时,数码管的7个段g、f、e、d、c、b、a分别为1、1、0、1、1、1、0、1。
接有高电平段发亮,于是数码管显示“5”。
实验方案及仿真:I、七段数码显示管的设计实现利用VHDL描述语言进行FPGA上的编译实现七段数码显示译码器的设计。
运行QuartusII在G:\QuartusII\LED7S\下新建一个工程文件。
新建一个vhdl语言编译文件,编写七段数码显示管的程序见附录1-1。
EDA-实验报告

实验一五人表决器设计一、实验目的1 加深对电路理论概念的理解3 加深计算机辅助分析及设计的概念4 了解及初步掌握对电路进行计算机辅助分析的过程二、实验要求制作一个五人表决器,共五个输入信号,一个输出信号。
若输入信号高电平数目多于低电平数目,则输出为高,否则为低。
三、实验原理根据设计要求可知,输入信号共有2^5=32种可能,然而输出为高则有15种可能。
对于本设计,只需一个模块就能完成任务,并采用列写真值表是最简单易懂的方法。
四、计算机辅助设计设A,B,C,D,E引脚为输入引脚,F为输出引脚。
则原理图如1所示图1.1 五人表决器原理图实验程序清单如下:MODULE VOTEA,B,C,D,E PIN;F PIN ISTYPE 'COM';TRUTH_TABLE([A,B,C,D,E]->[F])[0,0,1,1,1]->[1];[0,1,1,1,0]->[1];[0,1,0,1,1]->[1];[0,1,1,0,1]->[1];[1,0,1,1,1]->[1];[1,1,0,1,1]->[1];[1,1,1,0,1]->[1];[1,1,1,1,0]->[1];[1,1,1,0,0]->[1];[1,1,0,1,0]->[1];[1,1,1,1,1]->[1];[1,1,0,0,1]->[1];[1,0,0,1,1]->[1];[1,0,1,0,1]->[1];[1,0,1,1,0]->[1];END五、实验测试与仿真根据题目要求,可设输入分别为:0,0,0,0,0;1,1,1,1,1;1,0,1,0,0;0,1,0,1,1。
其测试程序如下所示:MODULE fivevoteA,B,C,D,E,F PIN;X=.X.;TEST_VECTORS([A,B,C,D,E]->[F])[0,0,0,0,0]->[X];[1,1,1,1,1]->[X];[1,0,1,0,0]->[X];[0,1,0,1,1]->[X];END测试仿真结果如图1.2所示:图1.2 五人表决器设计仿真图可知,设计基本符合题目要求。
EDA实验报告1

EDA 实验报告实验一:组合电路的设计实验内容是对2选1多路选择器VHDL 设计,它的程序如下:ENTITY mux21a ISPORT ( a, b : IN BIT; s : IN BIT; y : OUT BIT ); END ENTITY mux21a;ARCHITECTURE one OF mux21a IS SIGNAL d,e : BIT; BEGIN d <= a AND (NOT S) ; e <= b AND s ; y <= d OR e ;END ARCHITECTURE one ;Mux21a 仿真波形图以上便是2选1多路选择器的VHDL 完整描述,即可以看成一个元件mux21a 。
mux21a 实体是描述对应的逻辑图或者器件图,图中a 和b 分别是两个数据输入端的端口名,s 为通道选择控制信号输入端的端口名,y 为输出端的端口名。
Mux21a 结构体可以看成是元件的内部电路图。
最后是对仿真得出的mux21a 仿真波形图。
Mux21a 实体Mux21a 结构体实验二:时序电路的设计实验内容D 触发器的VHDL 语言描述,它的程序如下:LIBRARY IEEE ;USE IEEE.STD_LOGIC_1164.ALL ; ENTITY DFF1 ISPORT (CLK : IN STD_LOGIC ; D : IN STD_LOGIC ; Q : OUT STD_LOGIC ); END ;ARCHITECTURE bhv OF DFF1 IS BEGIN PROCESS (CLK) BEGINIF CLK'EVENT AND CLK = '1' THEN Q <= D ; END IF; END PROCESS ;END bhv;D 触发器的仿真波形图最简单并最具代表性的时序电路是D 触发器,它是现代可编程ASIC 设计中最基本的时序元件和底层元件。
南京理工大学EDA1实验报告(模电部分)

南京理工大学EDA课程设计(一)实验报告专业:自动化班级:姓名:学号:指导老师:2013年10月摘要在老师的悉心指导下,通过实验学习和训练,我已经掌握基了于Multisim的电路系统设计和仿真方法。
在一周的时间内,熟悉了Multisim软件的使用,包括电路图编辑、虚拟仪器仪表的使用和掌握常见电路分析方法。
能够运用Multisim软件对模拟电路进行设计和性能分析,掌握EDA设计的基本方法和步骤。
实验一:单级放大电路的仿真及设计,设计一个分压偏置的单管电压放大电路,并进行测试与分析,主要测试最大不失真时的静态工作点以及上下限频率。
实验二:负反馈放大电路的设计与仿真,设计一个阻容耦合两级电压放大电路,给电路引入电压串联深度负反馈,,观察负反馈对电路的影响。
实验三:阶梯波发生器的设计与仿真,设计一个能产生周期性阶梯波的电路,对电路进行分段测试和调节,直至输出合适的阶梯波。
改变电路元器件参数,观察输出波形的变化,确定影响阶梯波电压范围和周期的元器件。
关键词:EDA设计及仿真multisim 放大电路反馈电路阶梯波发生器实验一:单级放大电路的仿真及设计一、实验要求1、设计一个分压偏置的单管电压放大电路,要求信号源频率5kHz(峰值10mV) ,负载电阻5.1kΩ,电压增益大于50。
2、调节电路静态工作点(调节电位计),观察电路出现饱和失真和截止失真的输出信号波形,并测试对应的静态工作点值。
3、调节电路静态工作点(调节电位计),使电路输出信号不失真,并且幅度最大。
在此状态下测试:(1)电路静态工作点值;(2)三极管的输入、输出特性曲线和 、r be 、r ce值;(3)电路的输入电阻、输出电阻和电压增益;(4)电路的频率响应曲线和f L、f H值。
二、实验步骤1、设计分压偏置的单级放大电路如图1-1所示:图1-1、单级放大电路原理图2、电路饱和失真输出电压波形图调节电位器的阻值,改变静态工作点,当电阻器的阻值为0%Rw,交流电压源为10mV时,显示饱和失真的波形图如图1-2所示:图1-2、电路饱和失真输出电压波形图饱和失真时的静态工作点:Ubeq=636。
EDA实验报告

实验一:不同设计输入方式比较1、实验目的(1) 学习MAX+plus II软件的基本使用方法。
(2) 学习EDA实验开发系统的基本使用方法。
(3) 掌握VHDL程序的原理图和文本输入方式。
2、实验内容(1) 原理图输入(mux21.vhd) 方式的2选1多路选择器的设计(2) 文本编辑输入(mux41.vhd) 方式的4选1多路选择器的设计3、实验要求(1) MAX+plus II软件画出系统的原理框图,说明系统中各主要组成部分的功能。
(2) 编写VHDL源程序。
(3) 在MAX+plus II工具下编译、综合、适配、仿真、实验板上的硬件测试。
(4) 根据EDA实验开发装置编好用于硬件验证的管脚锁定文件。
(5) 记录系统仿真、硬件验证结果。
(6) 记录实验过程中出现的问题及解决办法。
4:实验步骤:程序编译过程:新建text文件→输入程序并保存其中保存名为实体名,并以vhd类型结尾→点击file下的project设定为current file点击maxplus 中的compiler按钮→显示无误后→点击新建按钮建立wave 文件→点击node 按钮添加管脚→保存并按text 的步骤检验wave 文件。
(1):用原理图法实现二选一多路选择器。
二选一选择器原理图其中B端为控制端,A,C为控制端(2):用文本输入法实现四选一多路选择器。
其文本程序如下:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY MUX41 ISPORT(INPUT:IN STD_LOGIC_VECTOR(3 DOWNTO 0);A,B:IN STD_LOGIC;Y:OUT STD_LOGIC);END MUX41;ARCHITECTURE BE_MUX41 OF MUX41 ISSIGNAL SEL:STD_LOGIC_VECTOR(1 DOWNTO 0); BEGINSEL<=A&B;PROCESS(INPUT,SEL)BEGINIF(SEL="00")THENY<=INPUT(0);ELSIF(SEL="01")THENY<=INPUT(1);ELSIF(SEL="10")THENY<=INPUT(2);ELSEY<=INPUT(3);END IF;END PROCESS;END BE_MUX41;实验二:VHDL语言编程—组合逻辑电路设计1、实验目的(1) 学习VHDL三种描述风格;(2) 学习元件例化语句的使用方法;(3) 学习VHDL程序层次化设计方法2、实验内容用元件例化语句方法和原理图方法设计四位全加器。
EDA技术实验报告(1)

实验一利用原理图输入法设计4位全加器一、实验目的:掌握利用原理图输入法设计简单组合电路的方法,掌握MAX+plusII的层次化设计方法。
通过一个4位全加器的设计,熟悉用EDA软件进行电路设计的详细流程。
二、实验原理:一个4位全加器可以由4个一位全加器构成,全加器的进位以串行方式实现,即将低位加法器的进位输出cout与相邻的高位加法器的低位进位输入信号cin相接。
1位全加器f-adder由2个半加器h-adder和一个或门按照下列电路来实现。
半加器h-adder由与门、同或门和非门构成。
四位加法器由4个全加器构成1234三、实验内容:1. 熟悉QuartusII软件界面,掌握利用原理图进行电路模块设计的方法。
QuartusII设计流程见教材第五章:QuartusII应用向导。
2.设计1位全加器原理图(1)生成一个新的图形文件(file->new->graphic editor)(2)按照给定的原理图输入逻辑门(symbol->enter symbol)(3)根据原理图连接所有逻辑门的端口,并添加输入/输出端口(4)为管脚和节点命名:在管脚上的PIN_NAME处双击鼠标左键,然后输入名字;选中需命名的线,然后输入名字。
(5)创建缺省(Default)符号:在File菜单中选择Create Symbol Files for Current File项,即可创建一个设计的符号,该符号可被高层设计调用。
3.利用层次化原理图方法设计4位全加器(1)生成新的空白原理图,作为4位全加器设计输入(2)利用已经生成的1位全加器的缺省符号作为电路单元,设计4位全加器的原理图.4.新建波形文件(file->new->Other Files->Vector Waveform File),保存后进行仿真(Processing ->Start Simulation),对4位全加器进行时序仿真。
EDA实验报告(四选一、四位比较器、加法器、计数器、巴克码发生器)

EDA实验报告(四选一、四位比较器、加法器、计数器、巴克码发生器)EDA实验报告实验14选1数据选择器的设计一、实验目的1.学习EDA软件的基本操作。
2.学习使用原理图进行设计输入。
3.初步掌握器件设计输入、编译、仿真和编程的过程。
4.学习实验开发系统的使用方法。
二、实验仪器与器材1.EDA开发软件一套2.微机一台3.实验开发系统一台4.打印机一台三、实验说明本实验通过使用基本门电路完成4选1数据选择器的设计,初步掌握EDA设计方法中的设计输入、编译、综合、仿真和编程的过程。
实验结果可通过实验开发系统验证,在实验开发系统上选择高、低电平开关作为输入,选择发光二极管显示输出电平值。
本实验使用Quartus II 软件作为设计工具,要求熟悉Quartus II 软件的使用环境和基本操作,如设计输入、编译和适配的过程等。
实验中的设计文件要求用原理图方法输入,实验时,注意原理图编辑器的使用方法。
例如,元件、连线、网络名的放置方法和放大、缩小、存盘、退出等命令的使用。
学会管脚锁定以及编程下载的方法等。
四、实验要求1.完成4选1数据选择器的原理图输入并进行编译;2.对设计的电路进行仿真验证;3.编程下载并在实验开发系统上验证设计结果。
五、实验结果4选1数据选择器的原理图:仿真波形图:管脚分配:实验2 四位比较器一、实验目的1.设计四位二进制码比较器,并在实验开发系统上验证。
2.学习层次化设计方法。
二、实验仪器与器材1.EDA 开发软件 一套 2.微机 一台 3.实验开发系统 一台 4.打印机 一台 5.其它器件与材料 若干 三、实验说明本实验实现两个4位二进制码的比较器,输入为两个4位二进制码0123A A A A 和0123B B B B ,输出为M(A=B ),G (A>B )和L (A<B )(如图所示)。
用高低电平开关作为输入,发光二极管作为输出,具体管脚安排可根据试验系统的实际情况自行定义。
EDA实验报告1

实验1 数码管扫描显示电路实验设计方案1.原理说明单个数码管有8位共用段信号和1位位选信号。
多个数码管显示可以采用动态扫描方式,只要扫描频率足够大,人眼观察到多个数码管均发光,且每个数码管显示值互相不干扰。
复杂的数字系统设计多采用模块化层次设计:自上而下或自下而上的方法。
采用混合模式的工程设计方法是指由设计者完成功能划分后的各层子模块设计可以采用不同设计方法完成,如原理图、硬件描述语言文本、状态机等。
本实验基于混合模式的工程设计流程,电路图由模4计数器、3选1多路选择器、2-3译码电路以及七段译码器组成,动态扫描显示3个数码管的数据。
2.结构框图实验波形仿真操作说明:设置clk为一个周期函数,其周期为100ns,设置din为十进制,din[0]为1,din[1]为2,din[2]为3,然后仿真波形,看输出的七段管qa、qb、qc、qd、qe、qf、qg的波形,通过下载到实验箱可以验证波形的正确性。
实验日志①实验感想:通过这次实验,我了解了Quartus2的平台和基本操作,对于这门课的实验,在课前应该自己先预习和做一部分,以免到课上做不完。
虽然指导书讲的比较仔细,在课上做完实验后,还应对实验原理有一定的理解,不应为了做实验而做实验。
②思考与练习:1.举例说明一个Quartus最小工程所必须维护哪些类型文件?答:编译必需的文件:设计文件(.gdf .bdf .EDIF .tdf .v .vqm .vt .vhd .vht)、存储器初始化文件(.mif .rif .hex)、配置文件(.qsf .tcl)、工程文件(.qpf);编译结束后生成的报告文件(.rpt .qsmg等);编程文件(.sof .pof .ttf等)。
2.图形输入法与硬件描述语言法优缺点是什么?答:图形输入法:(优点)能直接的用元件连接电路图,容易理解和思考,直观,连线简辑方便。
(缺点)连线容易出错,器件容易搞混。
硬件描述语言:(优点)逻辑性强,对实现电路器件和连线较多的逻辑电路较方便(缺点)设计代码需要较强的逻辑能力,消耗较多时间用于思考。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
汕头大学实验报告学院: 工学院系: 电子系专业: 通信年级:2008 成绩:姓名: 林海青学号:08142022 实验时间: 2010.12.12 指导教师: 白运新______________________________________________________________________________ 实验五具有音乐报点的数字钟实验一、实验目的:1、掌握多位计数器相连的设计方法。
2、掌握十进制、六十进制、二十四进制计数器的设计方法。
3、继续巩固多位共阴极扫描显示数码管的驱动及编码。
4、了解和掌握分频电路实现的方法。
5、掌握扬声器的驱动。
6、使用FPGA产生不同的音乐频率。
7、LED 灯的花样显示。
8、掌握CPLD技术的层次化设计方法。
二、设计要求1、具有时、分、秒计数显示功能,以24小时循环计时。
2、具有清零,调节小时、分钟功能。
3、具有整点报时功能,整点报时的同时LED灯花样显示。
三、硬件要求:1、主芯片ACEX1K EP1K30QC208。
2、8个LED灯。
3、扬声器。
4、8位七段扫描共阴极数码显示管。
5、三个按键开关(清零,调小时,调分钟)。
四、实验原理:在同一块CPLD芯片EP1K10TC100—3上集成了如下电路模块:1、时钟计数:秒——60进制BCD码计数;分——60进制BCD码计数;时——24进制BCD码计数;同时整个计数器有清零,调分,调时功能。
在接近整点时能提供报时信号。
2、有驱动8位七段共阴极扫描数码管的片选驱动信号输出和七段字行译码输出。
编码和扫描可参照“实验四”。
3、扬声器在整点时有报时乐曲驱动信号产生。
音符的产生:音符的产生是利用计数器对输入的时钟信号进行分频,然后输出不同的频率来控制扬声器发不同的声音。
计数器必须是模可变的计数器,也就是其初始计数值可变,这样便可以对其进行初始化,使其从不同的初始值开始计数,实现对输入时钟信号的不同分频。
节拍的产生:节拍也是利用计数器来实现,如果某一个音符需要维持的时间比较长,那么就可以在此计数器从计数值A到计数值B之间都维持该音符,很显然,A和B之间的间隔越大,那么该音符维持的时间也就越长。
乐谱的存储:乐谱是一个固定的组合电路,根据不同的输入值,然后输出一个固定的值,该值就是音符产生计数器的分频的初始值。
适当的选择这些计数器和组合电路,便可完成不同的乐曲和不同节奏。
4、LED灯按个人要求在整点时有花样显示信号产生。
五实验程序并解析:除24的计数:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;use ieee.std_logic_arith.all;entity counter24 isport(clk: in std_logic;bin: out std_logic_vector(5 downto 0); 输出数据s: in std_logic; 选择是否输出clr: in std_logic; 复位信号ec: in std_logic; 使能信号en24: out std_logic); 进位信号end entity;architecture a of counter24 issignal q: std_logic_vector(4 downto 0);signal rst,dly: std_logic;beginprocess(clk,rst)beginif rst='1'then 复位q<="00000";elsif clk'event and clk='1' thendly<=q(4);if ec='1' thenq<=q+1;end if;end if;end process;en24<= not q(4) and dly; 进位信号微分rst<='1' when q=24 or clr='1' else '0'; 复位信号设定bin<=('0'&q) when s='1' else "000000"; 计数输出end a;除60的计数:程序与counter24十分相似,加黑为区别部分library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;use ieee.std_logic_arith.all;entity counter60 isport(clk: in std_logic;bin: out std_logic_vector(5 downto 0); 输出数据s: in std_logic; 选择是否输出clr: in std_logic; 复位信号ec: in std_logic; 使能信号en60: out std_logic); 进位信号end entity;architecture a of counter60 issignal q: std_logic_vector(5 downto 0);signal rst,dly: std_logic;beginprocess(clk,rst)beginif rst='1'thenq<="000000";elsif clk'event and clk='1' thendly<=q(5);if ec='1' thenq<=q+1;end if;end if;end process;en60<= not q(5) and dly; 进位信号微分rst<='1' when q=60 or clr='1' else '0';bin<=q when s='1' else "000000";end a;------------------------------------------------------------------电子时钟主程序:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;use ieee.std_logic_arith.all;entity clock1 isport( clk:in std_logic;segout:out std_logic_vector(6 downto 0); 七段数码管显示selout:out std_logic_vector(2 downto 0); 38选择信号key:in std_logic_vector(2 downto 0)); 定义三个按键end entity;architecture a of clock1 iscomponent counter60 除60计数电路port(clk: in std_logic;bin: out std_logic_vector(5 downto 0);s: in std_logic;clr: in std_logic;ec: in std_logic;en60: out std_logic);end component;component counter24 除24计数电路port(clk: in std_logic;bin: out std_logic_vector(5 downto 0);s: in std_logic;clr: in std_logic;ec: in std_logic;en24: out std_logic);end component;signal bin: std_logic_vector(5 downto 0);signal dbs,dbm,dbh: std_logic_vector(5 downto 0);signal enb :std_logic_vector(2 downto 0);signal sec: std_logic;signal bcd: std_logic_vector(7 downto 0);signal clr: std_logic;signal cys,cym,cyh :std_logic;signal s:std_logic_vector(2 downto 0);signal num :std_logic_vector(3 downto 0);signal seg :std_logic_vector(6 downto 0);signal sel:std_logic_vector(2 downto 0);signal sample,dly_out,diff:std_logic;signal state:std_logic_vector(1 downto 0); ---11计时10调秒01调分00调时signal match:std_logic;signal glitter: std_logic;--glitterbeginconnection:blocksignal adj,ecs,ecm,ech,sc:std_logic;--adjustbeginu1:counter60 port map(clk,dbs,enb(0),clr,ecs,cys); 计秒u2:counter60 port map(clk,dbm,enb(1),clr,ecm,cym); 计分u3:counter24 port map(clk,dbh,enb(2),clr,ech,cyh); 计时clr<=not key(0);sc<=state(1) and state(0);adj<=sec and (not sc) and key(1);ecs<=(sec and sc) or (adj and state(1) and not state(0)); 计秒ecm<=(cys and sc) or (adj and not state(1) and state(0)); 计分ech<=(cym and sc) or (adj and not state(1) and not state(0)); 计时selout<=sel;gen: for i in 0 to 6 generatesegout(i)<=seg(i)and (sc or (glitter or not match)); 数据送给数码管end generate;end block;free_counter:blocksignal q:std_logic_vector(24 downto 0);signal dly,sdly: std_logic;beginprocess(clk)beginif clk'event and clk='1' thendly<=q(10);sdly<=q(3);q<=q+1;end if;end process;glitter<=q(10); 闪烁信号sec<=q(10) and not dly;--1hzs<=q(4 downto 2);--250hzsample<=q(3) and not sdly;--samplesel<="000" when s=0 else 扫描信号"001" when s=1 else"011" when s=2 else"100" when s=3 else"110" when s=4 else"111" when s=5 else"111";enb<= "001" when (s=0 or s=1) else"010" when (s=2 or s=3) else"100" when (s=4 or s=5) else"000";bin<= dbs when enb="001" else 选择秒,分,时去显示dbm when enb="010" elsedbh when enb="100" else"000000";match<='1' when ((s=0 or s=1)and state="10") else 控制是否闪烁'1' when ((s=2 or s=3)and state="01") else'1' when ((s=4 or s=5)and state="00") else'0';end block;binary_bcd:block—change二进制与BCD码的转换beginbcd<="00000000" when bin=0 else"00000001" when bin=1 else"00000010" when bin=2 else"00000011" when bin=3 else"00000100" when bin=4 else"00000101" when bin=5 else"00000111" when bin=7 else "00001000" when bin=8 else "00001001" when bin=9 else "00010000" when bin=10 else "00010001" when bin=11 else "00010010" when bin=12 else "00010011" when bin=13 else "00010100" when bin=14 else "00010101" when bin=15 else "00010110" when bin=16 else "00010111" when bin=17 else "00011000" when bin=18 else "00011001" when bin=19 else"00100000" when bin=20 else "00100001" when bin=21 else "00100010" when bin=22 else "00100011" when bin=23 else "00100100" when bin=24 else "00100101" when bin=25 else "00100110" when bin=26 else "00100111" when bin=27 else "00101000" when bin=28 else "00101001" when bin=29 else"00110000" when bin=30 else "00110001" when bin=31 else "00110010" when bin=32 else "00110011" when bin=33 else "00110100" when bin=34 else "00110101" when bin=35 else "00110110" when bin=36 else "00110111" when bin=37 else "00111000" when bin=38 else "00111001" when bin=39 else"01000000" when bin=40 else "01000001" when bin=41 else "01000010" when bin=42 else "01000011" when bin=43 else "01000100" when bin=44 else "01000101" when bin=45 else "01000110" when bin=46 else"01001000" when bin=48 else"01001001" when bin=49 else"01010000" when bin=50 else"01010001" when bin=51 else"01010010" when bin=52 else"01010011" when bin=53 else"01010100" when bin=54 else"01010101" when bin=55 else"01010110" when bin=56 else"01010111" when bin=57 else"01011000" when bin=58 else"01011001" when bin=59 else"00000000";end block;select_bcd:blockbeginnum<=bcd(3 downto 0) when (s=0 or s=2 or s=4) elsebcd(7 downto 4);end block;seven_segment:block number与七段数码管的转换beginseg<="0111111"when num=0 else"0000110"when num=1 else"1011011"when num=2 else"1001111"when num=3 else"1100110"when num=4 else"1101101"when num=5 else"1111101"when num=6 else"0000111"when num=7 else"1111111"when num=8 else"1101111"when num=9 else"1110111"when num=10 else"1111100"when num=11 else"0111001"when num=12 else"1011110"when num=13 else"1111001"when num=14 else"1110001"when num=15 else"0000000";end block;debounce:block 去抖电路signal d0,d1,s,r,dly,ndly:std_logic;beginprocess(clk)beginif clk'event and clk='1' thenif sample='1' thend1<=d0;d0<=key(2);s<=d0 and d1;r<=not d0 and not d1;end if;end if;end process;dly<=r nor ndly;ndly<=s nor dly;dly_out<=dly;end block;differential:blocksignal d1,d0:std_logic;beginprocess(clk)beginif clk'event and clk='1'thend1<=d0;d0<=dly_out;end if;end process;diff<=d0 and not d1;end block;timerset:block 状态的转换signal q:std_logic_vector(2 downto 0); signal set,ec:std_logic;beginprocess(clk)beginif set='1' thenq<="011";elsif clk'event and clk='1'thenif ec='1' thenq<=q-1;end if;end if;end process;set<='1'when q=7 else'0';ec<=diff and key(2);state<= q(1 downto 0);end block;end a;实验结果:在实验室里面,最终调出了电子时钟,能够进行时间的设置。