数电实验报告

合集下载

郑大数电实验报告

郑大数电实验报告

一、实验目的1. 理解数字电路的基本概念和基本原理。

2. 掌握数字电路中常用逻辑门电路的功能和特性。

3. 学会使用数字电路实验箱进行基本实验操作。

4. 培养动手实践能力和分析问题、解决问题的能力。

二、实验原理数字电路是由逻辑门电路组成的,用于处理数字信号的电路。

逻辑门电路是数字电路的基本单元,包括与门、或门、非门、异或门等。

本实验主要涉及以下逻辑门电路:1. 与门(AND Gate):只有当所有输入信号都为高电平时,输出信号才为高电平。

2. 或门(OR Gate):只要有一个输入信号为高电平,输出信号就为高电平。

3. 非门(NOT Gate):输入信号为高电平时,输出信号为低电平;输入信号为低电平时,输出信号为高电平。

4. 异或门(XOR Gate):只有当输入信号不同时,输出信号才为高电平。

三、实验仪器与设备1. 数字电路实验箱2. 电源3. 逻辑开关4. 测试灯5. 连接线四、实验步骤1. 与门实验:- 将与门输入端连接到逻辑开关。

- 通过逻辑开关控制输入信号,观察输出信号的变化。

- 记录实验数据,分析实验结果。

2. 或门实验:- 将或门输入端连接到逻辑开关。

- 通过逻辑开关控制输入信号,观察输出信号的变化。

- 记录实验数据,分析实验结果。

3. 非门实验:- 将非门输入端连接到逻辑开关。

- 通过逻辑开关控制输入信号,观察输出信号的变化。

- 记录实验数据,分析实验结果。

4. 异或门实验:- 将异或门输入端连接到逻辑开关。

- 通过逻辑开关控制输入信号,观察输出信号的变化。

- 记录实验数据,分析实验结果。

五、实验结果与分析1. 与门实验:- 输入信号均为高电平时,输出信号为高电平。

- 至少有一个输入信号为低电平时,输出信号为低电平。

2. 或门实验:- 至少有一个输入信号为高电平时,输出信号为高电平。

- 输入信号均为低电平时,输出信号为低电平。

3. 非门实验:- 输入信号为高电平时,输出信号为低电平。

数电实验报告范文

数电实验报告范文

数电实验报告范文实验名称:数字电路设计与实现实验目的:通过实验,掌握数字电路设计的基本原理和方法,并了解数字电路中常见的逻辑门的应用和性能特点,学会使用逻辑门组合构成各种数字电路,实现指定功能。

实验原理:1.逻辑门的基本原理与应用:逻辑门是数字电路中最基本,并且最重要的一类元件。

常见的逻辑门有与门、或门、非门,与非门、或非门、异或门等。

它们分别表示并、或、非、与非、或非、异或运算。

2.组合逻辑电路:由多个逻辑门组成的逻辑电路,称为组合逻辑电路。

在组合逻辑电路中,各个逻辑门输出与输入的关系是由逻辑门之间的位置和连接方式决定的。

实验仪器和材料:1.数字电路实验箱2.数字逻辑集成电路(例如74LS00、74LS02、74LS04等)3.连线实验步骤:1.实验前准备:将所需的74系列数字集成电路插入到数字电路实验箱的插槽中并连接好电源。

2.实验一:实现逻辑门的基本逻辑运算a.连接和经逻辑门74LS08,将A、B作为输入,将其输出接到LED指示灯上;b.依次给A、B输入不同的逻辑电平,观察输出结果,并记录下来;c.尝试连接其他逻辑门实现不同的逻辑运算,并观察其输出结果。

3.实验二:组合逻辑电路的设计a.根据实验需求,设计一个3输入与门电路;b.使用74LS08等逻辑门实现该电路;c.给输入端依次输入不同的逻辑电平,观察输出结果,并记录下来。

4.实验三:数字电路的简化和优化a.给定一个复杂的逻辑电路图,使用布尔代数等方法进行化简,寻找最简布尔方程;b.结合实际情况,将最简布尔方程转换为最简的逻辑电路图;c.根据设计的逻辑电路图,使用逻辑门组装出该电路,并验证其功能。

实验数据和结果:1.实验一结果:A,B,输:-------:,:-------:,:---------0,0,0,1,1,0,1,1,2.实验二结果:A,B,C,输:-------:,:-------:,:-------:,:--------0,0,0,0,0,1,0,1,0,0,1,1,1,0,0,1,0,1,1,1,0,1,1,1,3.实验三结果:(示例)原始布尔方程:F=A'B+AB'+AC+B'C最简化布尔方程:F=A⊕B⊕C逻辑电路图:![逻辑电路图](logic_circuit.png)实验结论:通过本次实验,我们学习到了逻辑门的基本原理、应用和各个逻辑门的特点。

数电实验报告实验

数电实验报告实验

一、实验目的1. 理解和掌握数字电路的基本原理和设计方法。

2. 培养动手能力和实验技能。

3. 提高分析问题和解决问题的能力。

二、实验原理数字电路是一种以二进制为基础的电路,其基本元件是逻辑门和触发器。

本实验主要涉及以下几种逻辑门:与门、或门、非门、异或门、同或门、与非门、或非门等。

1. 与门(AND Gate):当所有输入端都为高电平时,输出才为高电平。

2. 或门(OR Gate):当至少一个输入端为高电平时,输出为高电平。

3. 非门(NOT Gate):对输入信号取反。

4. 异或门(XOR Gate):当输入端信号不同时,输出为高电平。

5. 同或门(NOR Gate):当输入端信号相同时,输出为高电平。

6. 与非门(NAND Gate):与门和非门的组合。

7. 或非门(NOR Gate):或门和非门的组合。

三、实验器材1. 数字电路实验箱2. 逻辑门芯片3. 电源4. 连接线5. 测试仪器四、实验步骤1. 组成基本逻辑门电路:根据实验原理,搭建与门、或门、非门、异或门、同或门、与非门、或非门等基本逻辑门电路。

2. 测试电路功能:使用测试仪器对搭建的电路进行测试,验证电路是否满足基本逻辑功能。

3. 组成组合逻辑电路:根据实验要求,搭建组合逻辑电路,如全加器、半加器、译码器、编码器等。

4. 测试组合逻辑电路:使用测试仪器对搭建的组合逻辑电路进行测试,验证电路是否满足设计要求。

5. 组成时序逻辑电路:根据实验要求,搭建时序逻辑电路,如触发器、计数器、寄存器等。

6. 测试时序逻辑电路:使用测试仪器对搭建的时序逻辑电路进行测试,验证电路是否满足设计要求。

五、实验结果与分析1. 基本逻辑门电路测试结果:根据测试数据,搭建的与门、或门、非门、异或门、同或门、与非门、或非门等基本逻辑门电路均满足设计要求。

2. 组合逻辑电路测试结果:根据测试数据,搭建的全加器、半加器、译码器、编码器等组合逻辑电路均满足设计要求。

数电实验报告

数电实验报告

一、实验名称1. 实验一QuartusⅡ原理图输入法设计与实现2. 实验二用VHDL设计与实现组合逻辑电路(一)3. 实验三用VHDL设计与实现时序逻辑电路(二)4.实验四用VHDL设计与实现时序逻辑电路(三)(数码管动态扫描控制器)二、实验任务要求1.实验一:○1用逻辑门设计实现一个半加器,仿真验证其功能,并生成新的半加器图形模块单元;○2用上面生成的半加器模块和逻辑门设计实现一个全加器,仿真验证其功能,并下载到实验板测试,要求用拨码开关设定输入信号,发光二极管显示输出信号;○3用3线-8线译码器(74LS138)和逻辑门设计实现函数F=CBA+CBA+CBA+CBA,仿真验证其功能,并下载到实验班测试。

要求用拨码开关设定输入信号,发光二极管显示输出信号;2.实验二:○1用VHDL语言设计实现一个4位二进制奇校验器,输入奇数个…1‟时,输出为…1‟,否则输出为…0‟,仿真验证其功能,并下载到实验板测试。

要求用拨码开关设定输入信号,发光二极管显示输出信号;○2用VHDL语言设计实现一个8421码转换为余3码的代码转换器,仿真验证其功能,并下载到实验板测试。

要求用拨码开关设定输入信号,发光二极管显示输出信号;○3用VHDL语言设计实现一个共阴极7段数码管译码器,仿真验证其功能,并下载到实验班测试。

要求用拨码开关设定输入信号,发光二极管显示输出信号;3.实验三:○1用VHDL语言设计实现一个分频系数为12,分频输出信号占空比为50%的分频器。

要求在Quartus Ⅱ平台上设计程序并仿真验证设计;○2用VHDL语言设计实现一个带异步复位的8421码十进制计数器,仿真验证其功能,并下载到实验板测试。

要求用拨码开关设定输入信号,发光二极管显示输出信号;○3将分频器、8421十进制计数器、数码管译码器3个电路进行连接并下载测试。

4.实验四:○1用VHDL语言设计并实现六个数码管串行扫描电路,要求同时显示0、1、2、3、4、5这6个不同的数字图形到6个数码管上,仿真验证其功能,并下载到实验板测试;(必做)○2用VHDL语言设计并实现六个数码管循环左滚动,时钟点亮6个数码管,坐出右进,状态为:012345→123450→234501→345012→450123→501234→012345;(选做)○3用VHDL语言设计并实现六个数码管向左滚动,用全灭的数码管填充右边,直至全部变灭,然后再一次从右边一个一个地点亮。

数字电路实训报告

数字电路实训报告

一、设计目的及要求:(一)实验目的:1. 通过实验培养学生的市场素质,工艺素质,自主学习的能力,分析问题解决问题的能力以及团队精神。

2. 通过本实验要求学生熟悉各种常用中规模集成电路组合逻辑电路的功能与使用方法,学会组装和调试各种中规模集成电路组合逻辑电路,掌握多片中小规模集成电路组合逻辑电路的级联、功能扩展及综合设计技术,使学生具有数字系统外围电路、接口电路方面的综合设计能力。

(二)实验要求1. 数字显示电路操作面板:左侧有16个按键,编号为0到15数字,面板右侧有2个共阳7段显示器。

2. 设计要求:当按下小于10的按键后,右侧低位7段显示器显示数字,左侧7段显示器显示0;当按下大于9的按键后,右侧低位7段显示器显示个位数字,左侧7段显示器显示1。

若同时按下几个按键,优先级别的顺序是15到0。

二、电路框图及原理图原理图概要:数字显示电路由键盘、编码、码制转换、译码显示组成。

各部分作用:1. 键盘:用于0~15数字的输入。

可以由16个自锁定式的按键来排列成4×4键盘。

2.编码:采用两片74ls148级联来完成对0~15的编码,并且是具有优先级的编码。

3.码制转换:本电路采用了2个74ls00、1个74ls04、1个74ls283来完成对0~15出事编码的码制转换,转换成个位与十位的8421bcd码,为下一步的解码做准备。

4.译码显示:本电路采用了两个74ls47分别对码制转换后的bcd码进行译码,并且由这两个芯片分别驱动两片七段共阳极数码管。

原理图:三、设计思想及基本原理分析:篇二:数电实验实验报告数字电路实验报告院系:电气工程学院专业:电气工程极其自动化班级:09级7班姓名:王哲伟学号:2009302540221 实验一组合逻辑电路分析一.试验用集成电路引脚图74ls00集成电路 74ls20集成电路四2输入与非门双4输入与非门二.实验内容 1.实验一x1abdabcd按逻辑开关,“1”表示高电平,“0”表示低电平2.5 vc示灯:灯亮表示“1”,灯灭表示“0”自拟表格并记录: 2.实验二密码锁的开锁条件是:拨对密码,钥匙插入锁眼将电源接通,当两个条件同时满足时,开锁信号为“1”,将锁打开。

数电实验报告实验一心得

数电实验报告实验一心得

数电实验报告实验一心得引言本实验是数字电路课程的第一次实验,旨在通过实际操作和观察,加深对数字电路基础知识的理解和掌握。

本次实验主要涉及布尔代数、逻辑门、模拟开关和数字显示等内容。

在实验过程中,我对数字电路的原理和实际应用有了更深入的了解。

实验一:逻辑门电路的实验实验原理逻辑门是数字电路中的基本组件,它能够根据输入的布尔值输出相应的结果。

常见的逻辑门有与门、或门、非门等。

本次实验主要是通过搭建逻辑门电路实现布尔函数的运算。

实验过程1. 首先,我按照实验指导书上的电路图,使用示波器搭建了一个简单的与门电路。

并将输入端连接到两个开关,输出端连接到示波器,以观察电路的输入和输出信号变化。

2. 其次,我打开示波器,观察了两个开关分别为0和1时的输出结果。

当两个输入均为1时,示波器上的信号为高电平,否则为低电平。

3. 我进一步观察了两个开关都为1时的输出信号波形。

通过示波器上的脉冲信号可以清晰地看出与门的实际运行过程,验证了实验原理的正确性。

实验结果和分析通过本次实验,我成功地搭建了一个与门电路,并观察了输入和输出之间的关系。

通过示波器上的信号波形,我更加直观地了解了数字电路中布尔函数的运算过程。

根据实验结果和分析,我可以总结出:1. 逻辑门电路可以根据布尔函数进行输入信号的运算,输出相应的结果。

2. 在与门电路中,当输入信号均为1时,输出信号为1,否则为0。

3. 示例器可以实时显示电路的输入和输出信号波形,方便实验者观察和分析。

结论通过本次实验,我对数字电路的基本原理和逻辑门电路有了更深刻的理解。

我学会了如何搭建逻辑门电路,并通过示波器观察和分析输入和输出信号的变化。

这对我进一步理解数字电路的设计和应用具有重要意义。

通过实验,我还锻炼了动手操作、实际观察和分析问题的能力。

实验过程中,需要认真对待并细致观察电路的运行情况,及时发现和解决问题。

这些能力对于今后的学习和研究都非常重要。

总之,本次实验让我更好地理解了数字电路的基本原理和应用,提高了我的实验能力和观察分析能力。

数电实验报告

数电实验报告

数电实验报告引言:数电实验是电子信息科学与技术专业中一门重要的实验课程。

通过数电实验,我们可以掌握数字电路的基本原理与设计方法,加深对电子电路原理的理解与应用。

本实验报告将对我们进行的数电实验进行总结与评述,以便更好地理解数电实验的内容和意义。

实验目的:本次数电实验的主要目的是通过实验的方式,掌握数字电路的设计与实现原理,以及相应的实验工具和测试设备的使用方法。

通过实际操作,我们将验证数字电路的可靠性和正确性,并培养我们的实验技能和分析问题的能力。

实验内容:本次数电实验涵盖了多个实验项目,其中包括:逻辑门的实验、组合逻辑电路的实验以及时序逻辑电路的实验等。

1. 逻辑门的实验这一部分我们主要学习并实验了与门、或门、非门、异或门等逻辑门的基本原理与应用。

透过实际连接与测试,我们进一步了解了逻辑门之间的相互转换关系和应用场景。

通过使用示波器、万用表等仪器设备,我们能够验证逻辑门的逻辑功能与实际输出是否一致。

2. 组合逻辑电路的实验在组合逻辑电路的实验中,我们学习了多种组合逻辑电路的设计原理和真值表的绘制方法。

通过实际搭建和测试,我们验证了布尔代数的基本运算规则在实际电路中的应用,并掌握了基本的编码器、解码器和多路选择器等组合逻辑电路的设计与实现方法。

3. 时序逻辑电路的实验时序逻辑电路实验是本次数电实验的重点和难点部分。

通过实验,我们学习了时钟信号的产生与作用原理,掌握了触发器的工作原理和应用方法。

我们还学习了时序逻辑电路的分析与设计技巧,实践了状态图和状态表的绘制方法,进一步体验了时序逻辑电路在数字系统中的重要性和应用价值。

实验结果与分析:通过实验操作和测试数据,我们得出了相应的实验结果,并对实验结果进行了分析。

通过实验数据的处理和对比,我们可以进一步验证电路设计的正确性,找出问题所在并加以改正。

同时,我们还对实验结果进行了数据处理和图表绘制,以便更好地展示实验结果。

总结与反思:通过本次数电实验,我们不仅掌握了数字电路的基本原理和设计方法,还提高了实验操作技能、问题分析和解决能力。

数电实验报告(含实验内容)

数电实验报告(含实验内容)

数电实验报告(含实验内容)班级:专业:姓名:学号:实验一用与非门构成逻辑电路一、实验目的1、熟练掌握逻辑电路的连接并学会逻辑电路的分析方法2、熟练掌握逻辑门电路间的功能变换和测试电路的逻辑功能二、实验设备及器材KHD-2 实验台集成 4 输入2 与非门74LS20集成 2 输入4 与非门74LS00 或CC4011三、实验原理本实验用的逻辑图如图 2-1 所示图1-1图1-1四、实验内容及步骤1、用与非门实现图1-1电路,测试其逻辑功能,将结果填入表1-1中,并说明该电路的逻辑功能。

2、用与非门实现图1-1电路,测试其逻辑功能,将结果填入表1-2中,并说明该电路的逻辑功能。

3、用与非门实现以下逻辑函数式,测试其逻辑功能,将结果填入表1-3中。

Y(A,B,C)=A’B+B’C+AC班级:专业:姓名:学号:五、实验预习要求1、进一步熟悉 74LS00、74LS20 和CC4011 的管脚引线2、分析图 1-1 (a)、的逻辑功能,写出逻辑函数表达式,并作出真值表。

六、实验报告1、将实验数据整理后填入相关的表格中2、分别说明各逻辑电路图所实现的逻辑功能A B C Z A B C Y表1-1 表1-2A B C Y 表1-3班级:专业:姓名:学号:实验二组合逻辑电路的设计与测试一、实验目的1、掌握组合逻辑电路的设计与测试方法2、进一步熟悉常用集成门电路的逻辑功能及使用二、实验设备及器材KHD-2 实验台4 输入2 与非门74LS202 输入4 与非门74LS00 或CC4011三、实验原理使用中、小规模集成电路来设计组合电路是最常见的逻辑电路的设计方式。

设计组合电路的一般步骤如图2-1 所示。

图 2-1 组合逻辑电路设计流程图根据设计任务的要求建立输入、输出变量,并列出真值表。

然后用逻辑代数或卡诺图化简法求出简化的逻辑表达式。

并按实际选用逻辑门的类型修改逻辑表达式。

根据简化后的逻辑表达,画出逻辑图,用标准器件构成逻辑电路。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

数字电路与逻辑设计综合实验实验报告课题名称:数字钟班级:08211102班学号:070062班内序号:33姓名:何慧芳一.设计课题的任务要求1.实验目的1.熟练掌握VHDL 语言和QuartusII 软件的使用;2.理解状态机的工作原理和设计方法;3.掌握利用EDA 工具进行自顶向下的电子系统设计方法;2.实验任务A.基本任务:设计制作一个能显示时、分、秒的时钟1. 可手动校对时间,能分别进行时和分的校正;2. 12 小时(有上、下午显示)、24 小时计时制可选;B.提高要求:1. 整点报时功能;2. 闹铃功能,当计时到预定时间时,蜂鸣器发出闹铃信号,闹铃时间为5 秒,可提前终止闹铃;3. 自拟其它功能。

3.实验器材1.计算机;2.示波器;3.直流稳压电源;4.万用表;5.EDA 开发板及相应元器件。

二.系统设计(设计思路、总体框图、分块设计)1.设计思路数字钟是一个将“时”、“分”、“秒”显示于人的视觉器官的计时装置。

它的计时周期为24小时,显示满刻度为23 时59 分59 秒;或者计时周期为12 小时并配有上下午指示,显示满刻度为12 时59 分59 秒;另外还应有校时功能和报时功能。

电路由晶体振荡器、时钟计数器、译码驱动电路和数字显示电路以及时间调整电路组成。

其中,时钟计数器、译码驱动电路及时间调整电路由CPLD 设计完成,晶体振荡器负责给CPLD 提供所需的高频时钟脉冲信号。

1、晶体振荡器晶体振荡器的作用是产生时间标准信号。

数字钟的精度,主要取决于时间标准信号的频率及其稳定度。

因此,一般采用石英晶体振荡器经过分频得到这一信号。

也可采用由门电路或555 定时器构成的多谐振荡器作为时间标准信号源。

2、计数器有了时间标准“秒”信号后,就可以根据60 秒为1 分、60 分为1 小时、24 小时为1 天的计数周期,分别组成两个六十进制(秒、分)、一个二十四进制(时)的计数器。

将这些计数器适当地连接,就可以构成秒、分、时的计数,实现计时的功能。

3、译码和数码显示电路译码和数码显示电路是将数字钟和计时状态直观清晰地反映出来,被人们的视觉器官所接受。

显示器件选用LED 七段数码管。

在译码显示电路输出的驱动下,显示出清晰、直观的数字符号。

4、校时电路实际的数字钟表电路由于秒信号的精确性不可能做到完全(绝对)准确无误,加之电路中其它原因,数字钟总会产生走时误差的现象。

因此,电路中就应该有校准时间功能的电路。

2.模块划分采用自顶向下的设计方法,通过对数字钟实现功能的分析,决定将各个功能由一个个模块实现,核心模块就是秒计时器、分计时器和小时计时器。

其他的功能主要围绕在计时器的周边添加,这样系统设计简单明了,并且功能容易扩展。

将模块分为:分频模块:div50m,div500计时模块:second,minute,hour整点报时和闹铃模块:speaker,alarm,beep译码和数码显示:seltime,display3.总体框图(1).设计的时钟的系统结构图(对外接口图)(2).各模块连接图(逻辑划分方框图):(3)设计的时钟的逻辑流程图(4)逻辑图对应的MDS图方框图三.仿真波形及波形分析1,秒计时器仿真波形:冲,同时秒从0开始继续计时;波形分析:设置set设置时间有效时,使set-sec有效,则秒按照计时规律变化,在59秒的时候,不产生进位enmin。

2,分计时器仿真波形:波形分析:可以看到在进位enmin为1的时候,分钟按照规律变为加1。

当分钟变化到59的时候产生进位enhour。

Enmin为0的时候,即秒还没有进位的时候,分钟保持不表。

3,小时计时器仿真波形:波形分析:可以看到enhour为1的时候小时按照规律变化,到23时小时从0开始计数。

Enhour 为0的时候小时不变化。

4,小时,分,秒总体仿真波形波形分析:从图中可以看出置0信号置0,调时,调分信号为高电平分,时分别进1的情况。

5整点报时仿真波形:6,12/24小时进制波形分析:从图中可以看到每个24小时制对应的12小时制的数值和上下午显示。

从仿真来看没有出现错误。

7,闹铃模块仿真波形:波形分析:alarm_on为1的时候,当输入的时间和设置时间相等,则beep输出1,完成了闹铃的功能。

8,分时扫描模块仿真波形:波形分析:可以看出在时钟周期下六个数码管分时输出有效,在大于300hz的频率下人眼会看到六个数码管持续稳定的点亮。

9,数码管显示仿真波形:10,轰鸣器仿真波形:波形分析:可以看到a 和b 任一个为1,则输出bp 为1四.源程序1.分频模块use ieee.std_logic_unsigned.all;entity div50m isport(clk_in : in std_logic; --时钟输入clk_out : out std_logic); --时钟输出end;architecture a of div50m issignal cnt : integer range 0 to 24999999;signal clk_tmp : std_logic;beginprocess(clk_in)beginif (clk_in'event and clk_in='1') thenif cnt=24999999 thencnt<=0;clk_tmp<= not clk_tmp;elsecnt<=cnt+1;end if;end if;end process;clk_out<=clk_tmp;end;--div500将50mhz的时钟分频到500hz,供分时扫描模块使用library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity div500 isport(clk_in : in std_logic;clk_out : out std_logic);end;architecture b of div500 issignal cnt : integer range 0 to 49999;signal clk_tmp : std_logic;beginprocess(clk_in)beginif (clk_in'event and clk_in='1') thenif cnt=49999 thencnt<=0;clk_tmp<= not clk_tmp;elsecnt<=cnt+1;end if;end if;end process;clk_out<=clk_tmp;end;2.秒计时器enmin<='1';tmp1<="0000";tmp2<="0000";elsif(tmp2="1001") then –秒的个位到9则十位加1,个位变0enmin<='0';tmp2<="0000";tmp1<=tmp1+1;elseenmin<='0';tmp2<=tmp2+1;end if;elsif(set='1') then –设置时间有效则进入设时,改变秒的数值if(set_sec='1') thenif(tmp1&tmp2="01011001") thentmp1<="0000";tmp2<="0000";elsif(tmp2="1001") thentmp2<="0000";tmp1<=tmp1+1;elsetmp2<=tmp2+1;end if;end if;end if;end if;end process;daout_h<=tmp1;daout_l<=tmp2;end sec;3.分计时器enhour<='1';tmp1<="0000";tmp2<="0000";elsif(tmp2="1001") then --分的个位到9的时变为0,十位加1enhour<='0';tmp2<="0000";tmp1<=tmp1+1;elseenhour<='0';tmp2<=tmp2+1;end if;end if;elsif(set='1') then –set有效时则分钟随规律变化if(set_min='1') thenif(tmp1&tmp2="01011001") thentmp1<="0000";tmp2<="0000";elsif(tmp2="1001") thentmp2<="0000";tmp1<=tmp1+1;elsetmp2<=tmp2+1;use ieee.std_logic_unsigned.all;entity hour isport(clk,reset,set,set_hour,enhour:in std_logic;时钟,复位,设置时,设置分,小时进位daout_h:out std_logic_vector(3 downto 0);小时高位daout_l:out std_logic_vector(3 downto 0));小时低位end hour;architecture hou of hour issignal tmp1,tmp2:std_logic_vector(3 downto 0);小时高低位中间信号beginprocess(clk,reset,set,set_hour,enhour)beginif(clk'event and clk='1') thenif(reset='1') then --reset有效则清零tmp1<="0000";tmp2<="0000";elsif(set='0') thenif(enhour='1') then --enhour为1时才变化if(tmp1&tmp2="00100011") then --小时到23时变成0tmp1<="0000";tmp2<="0000";elsif(tmp2="1001") then —小时个位到9时,个位变0,十位加1tmp2<="0000";tmp1<=tmp1+1;elsetmp2<=tmp2+1;end if;end if;elsif(set='1') then --set有效则按规律改变小时if(set_hour='1') thenif(tmp1&tmp2="00100011") thentmp1<="0000";tmp2<="0000";elsif(tmp2="1001") thentmp2<="0000";tmp1<=tmp1+1;elsetmp2<=tmp2+1;end if;end if;end if;end if;end process;daout_h<=tmp1; daout_l<=tmp2; end hou;5.整点报时模块end mode;architecture mo of mode issignal tmp1,tmp2:std_logic_vector(3 downto 0);beginprocess(cmode)beginif(cmode='0') then --cmode为0,为24小时制,此时am、pm都是0 tmp1<=hour_h;tmp2<=hour_l;am<='0';pm<='0';else --cmode为1,为12小时制,下面是将24小时换成12小时if(hour_h&hour_l>"00100001") then --小时大于21时的转换tmp1<=hour_h-"0001";tmp2<=hour_l-"0010";am<='0';pm<='1';elsif(hour_h&hour_l>"00011001") then --小时大于19时的转换tmp1<=hour_h-"0010";tmp2<=hour_l+"1000";am<='0';pm<='1';elsif(hour_h&hour_l>"00010010") then--小时大于12时的转换tmp1<=hour_h-"0001";tmp2<=hour_l-"0010";am<='0';pm<='1';else --小于等于12小时的为上午,时间不用转换tmp1<=hour_h;tmp2<=hour_l;am<='1';pm<='0';end if;end if;end process;daout_h<=tmp1;daout_l<=tmp2;end mo;仿真波形:entity alarm isport(clk,reset,set_a,alarm_on,set_min,set_hour:in std_logic;时钟,复位,设置闹钟,闹铃开关,设分,设时s_h,s_l,m_h,m_l,h_h,h_l:in std_logic_vector(3 downto 0);秒,小时,分,高低位beep2:out std_logic; 报时信号douts_h,douts_l,doutm_h,doutm_l,douth_h,douth_l:out std_logic_vector(3 downto 0));秒,分,时的高低位end alarm;architecture al of alarm issignal ds_h,ds_l,dm_h,dm_l,dh_h,dh_l,tmpm1,tmpm2,tmph1,tmph2:std_logic_vector(3 downto 0);时,分,秒的高低位;中间信号时分高低位beginp1:process(clk,set_a) –进程1,主要实现模块时间的输出beginif(clk'event and clk='1') thenif(set_a='0') then --set_a为0时输出的为输入的时间信号ds_h<=s_h;ds_l<=s_l;dm_h<=m_h;dm_l<=m_l;dh_h<=h_h;dh_l<=h_l;elsif(set_a='1') then --set_a为1时输出的为寄存器中的闹铃时间ds_h<="0000";ds_l<="0000";dm_h<=tmpm1;dm_l<=tmpm2;dh_h<=tmph1;dh_l<=tmph2;end if;end if;end process p1;p2:process(clk,alarm_on) --进程2主要实现的是闹铃的声音输出beginif(clk'event and clk='1') thenif(set_a='0') thenif(alarm_on='1') then --如果闹铃的开关alarm_on为1时if(dh_h&dh_l&dm_h&dm_l=tmph1&tmph2&tmpm1&tmpm2) then --输入时间与设定闹铃时间相等,则闹铃beep2为1beep2<='1';else --否则闹铃beep2为0beep2<='0';end if;elsebeep2<='0';--闹铃开关alarm_on为0,则beep2为0end if;end if;end if;end process p2;p3:process(clk,reset,set_a) --进程3,主要实现闹铃时间的设置beginif(clk'event and clk='1')thenif(reset='1') then --reset有效则清零tmpm1<="0000";tmpm2<="0000";tmph1<="0000";tmph2<="0000";elsif(set_a='1') then --输出显示为闹铃时间时才可设置闹铃时间if(set_min='1') then --设置闹铃的分钟if(tmpm1&tmpm2="01011001") then--59tmpm1<="0000";tmpm2<="0000";elsif(tmpm2="1001") thentmpm2<="0000";tmpm1<=tmpm1+1;elsetmpm2<=tmpm2+1;end if;end if;if(set_hour='1') then --设置闹铃的小时if(tmph1&tmph2="00100011") then --23tmph1<="0000";tmph2<="0000";elsif(tmph2="1001") thentmph2<="0000";tmph1<=tmph1+1;elsetmph2<=tmph2+1;end if;end if;end if;end if;end process p3;douts_h<=ds_h;douts_l<=ds_l;doutm_h<=dm_h;doutm_l<=dm_l;douth_h<=dh_h;douth_l<=dh_l;end al;8.分时扫描模块cat:out std_logic_vector(5 downto 0)); --选通end seltime;architecture sel of seltime issignal tmp:std_logic_vector(2 downto 0);beginprocess(clk)beginif(clk'event and clk='1') then --设置一个模为6的计数器if(tmp="101") then--计数器加到5则从0开始计数tmp<="000";elsetmp<=tmp+1;end if;case tmp is --分时选择when "000" => cat<="111110";daout<=sec_l;when "001" => cat<="111101";daout<=sec_h;when "010" => cat<="111011";daout<=min_l;when "011" => cat<="110111";daout<=min_h;when "100" => cat<="101111";daout<=hou_l;when "101" => cat<="011111";daout<=hou_h;when others =>daout<="1111";end case;end if;end process;end sel;when "0011" => led<="1111001"; --3when "0100" => led<="0110011"; --4when "0101" => led<="1011011"; --5when "0110" => led<="1011111"; --6when "0111" => led<="1110000"; --7when "1000" => led<="1111111"; --8when "1001" => led<="1111011"; --9when others => led<="0000000";end case;end process;end disp;10.蜂鸣器模块library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity clock isport(clk,reset,set,set_sec,set_min,set_hour,cmode,set_a,alarm_on:in std_logic;bp,am,pm:out std_logic;cat:out std_logic_vector(5 downto 0);led:out std_logic_vector(6 downto 0));end clock;architecture clo of clock issignal clk1,clk2,senmin,senhour,bp1,bp2:std_logic;signal ssech,ssecl,sminh,sminl,shouh,shoul:std_logic_vector(3 downto 0);signal mhourh,mhourl,sh,sl,mh,ml,hh,hl:std_logic_vector(3 downto 0);signal dout:std_logic_vector(3 downto 0);component div50m is --分频器模块port(clk_in : in std_logic;clk_out : out std_logic);end component;component div500 is –分频器模块port(clk_in : in std_logic;clk_out : out std_logic);end component;component second is --秒计时器port(clk,reset,set,set_sec:in std_logic;enmin:out std_logic;daout_h:out std_logic_vector(3 downto 0);daout_l:out std_logic_vector(3 downto 0));end component;component minute is --分计时器port(clk,reset,set,set_min,enmin:in std_logic;enhour:out std_logic;daout_h:out std_logic_vector(3 downto 0);daout_l:out std_logic_vector(3 downto 0));end component;component hour is --小时计时器port(clk,reset,set,set_hour,enhour:in std_logic;daout_h:out std_logic_vector(3 downto 0);daout_l:out std_logic_vector(3 downto 0));end component;component speaker is --整点报时port(reset:in std_logic;a,b,c,d:in std_logic_vector(3 downto 0);beep1:out std_logic);end component;component mode is --12/24小时显示port(cmode:in std_logic;hour_h,hour_l:in std_logic_vector(3 downto 0);daout_h,daout_l:out std_logic_vector(3 downto 0);am,pm:out std_logic);end component;component alarm is --闹铃模块port(clk,reset,set_a,alarm_on,set_min,set_hour:in std_logic;s_h,s_l,m_h,m_l,h_h,h_l:in std_logic_vector(3 downto 0);beep2:out std_logic;douts_h,douts_l,doutm_h,doutm_l,douth_h,douth_l:out std_logic_vector(3 downto 0));end component;component seltime is --分时扫描port(clk:in std_logic;sec_h,sec_l,min_h,min_l,hou_h,hou_l:in std_logic_vector(3 downto 0);daout:out std_logic_vector(3 downto 0);cat:out std_logic_vector(5 downto 0));end component;component display is-- 数码管显示port(num:in std_logic_vector(3 downto 0);led:out std_logic_vector(6 downto 0));end component;component beep is --蜂鸣器模块port(a,b:in std_logic;bp:out std_logic);end component;begin --元件连接u1: div50m port map(clk_in=>clk,clk_out=>clk1);u2: div500 port map(clk_in=>clk,clk_out=>clk2);u3: second port map(clk=>clk1,reset=>reset,set=>set,set_sec=>set_sec,enmin=>senmin,daout_h=>ssech,daout_l=>ssecl);u4: minute port map(clk=>clk1,reset=>reset,set=>set,set_min=>set_min,enmin=>senmin,enhour=>senhour,daout_h=>sminh,daout_l=>sminl);u5: hour port map(clk=>clk1,reset=>reset,set=>set,set_hour=>set_hour,enhour=>senhour,daout_h=>mhourh,daout_l=>mhourl);u6: speaker port map(reset=>reset,a=>sminh,b=>sminl,c=>ssech,d=>ssecl,beep1=>bp1);u7: mode port map(cmode=>cmode,hour_h=>mhourh,hour_l=>mhourl,daout_h=>shouh,daout_l=>shoul,am=>am,pm=>pm);u8: alarm port map(clk=>clk1,reset=>reset,set_a=>set_a,alarm_on=>alarm_on,set_min=>set_min,set_hour=>set_hour,s_h=>ssech,s_l=>ssecl,m_h=>sminh,m_l=>sminl,h_h=>shouh,h_l=>shoul,beep2=>bp2,douts_h=>sh,douts_l=>sl,doutm_h=>mh,doutm_l=>ml,douth_h=>hh,douth_l=>hl);u9: seltime port map(clk=>clk2,sec_h=>sh,sec_l=>sl,min_h=>mh,min_l=>ml,hou_h=>hh,hou_l=>hl,daout=>dout,cat=>cat);u10: display port map(num=>dout,led=>led);u11: beep port map(a=>bp1,b=>bp2,bp=>bp);end clo;RTL图:由quartusII自动生成的RTL图可以看出,顶层文件的连接图与系统设计时的模块连接图相同。

相关文档
最新文档