14电气EDA实验指导书(1)

更新时间:2024-04-28 03:01:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

EDA实验指导书

目 录

实验一 基于QUARTUSII图形输入电路的设计 ...................... 2 实验二 含异步清零和同步使能的加法计数器的设计 .......... 5 实验三 图形和VHDL混合输入的电路设计 ............................ 7 实验四 矩阵键盘接口电路的设计 ........................................ 10 实验五 交通灯控制电路实验 ................................................ 16 附图EP1K10TC100管脚图 ...................................................... 24

主芯片:ACEX 1K 系列的EP1K10TC100-3 下载电缆:Byte Blaster II

1

实验一 基于QUARTUSII图形输入电路的设计

一、 实验目的

1、通过一个简单的3线—8线译码器的设计,掌握组合逻辑电路的设计方法。 2、初步了解QUARTUSII原理图输入设计的全过程。 3、掌握组合逻辑电路的静态测试方法。

二、 实验原理

3线-8线译码器三输入,八输出。当输入信号按二进制方式的表示值为N时,输出端标号为N的输出端输出高电平表示有信号产生,而其它则为低电平表示无信号产生。因为三个输入端能产生的组合状态有八种,所以输出端在每种组合中仅有一位为高电平的情况下,能表示所有的输入组合。其真值表如表1-1所示

输入 D2 0 0 0 0 1 1 1 1

D1 0 0 1 1 0 0 1 1

D0 0 1 0 1 0 1 0 1

Y7 0 0 0 0 0 0 0 1

Y6 0 0 0 0 0 0 1 0

Y5 0 0 0 0 0 1 0 0

输出 Y4 0 0 0 0 1 0 0 0

Y3 0 0 0 1 0 0 0 0

Y2 0 0 1 0 0 0 0 0

Y1 0 1 0 0 0 0 0 0

Y0 1 0 0 0 0 0 0 0

表1-1 3线-8线译码器真值表

译码器不需要像编码器那样用一个输出端指示输出是否有效。但可以在输入中加入一个输出使能端,用来指示是否将当前的输入进行有效的译码,当使能端指示输入信号无效或不用对当前信号进行译码时,输出端全为高电平,表示无任何信号。本例设计中没有考虑使能输入端,自己设计时可以考虑加入使能输入端时,程序如何设计。

三、 实验内容

在本实验中,用三个拨动开关来表示3线-8线译码器的三个输入(D2-D0);用

2

八个LED来表示3线-8线译码器的八个输出(Y0-Y7)。通过输入不同的值来观察输入的结果与3线-8线译码器的真值表(表1-1)是否一致。实验箱中的拨动开关当开关闭合(拨动开关的档位在下方)时其输出为低电平,反之输出高电平。

LED灯与其对应的端口为高电平时LED就会发光,反之LED灯灭。

四、 实验步骤

1、 2、

打开QUARTUSII软件,新建一个工程。

建完工程之后,再新建一个图形设计文件Schematic File。 并输入3线-8

线译码器电路图1-1所示。

图1-1 设计文件的输入

3、 编译仿真无误后,根据用户自己的要求进行管脚分配。分配完成后,再进行全

编译一次,以使管脚分配生效。

4、 根据实验内容用实验导线将上面管脚分配的FPGA管脚与对应的模块连接起

来。

3

如果是调用的本书提供的VHDL代码,则实验连线如下: D2-D0:编码输入端,接3个拨动开关S1-S3。 Y0-Y7:编码输出信号,接8个LED灯D1-D8。

5、 用下载电缆将对应的sof文件加载到FPGA中。观察实验结果。

6、 用VHDL语言设计上述3线-8线译码器,新建VHDL设计文件,输入程序如

下:(其中增加了en使能输入端,低电平有效)

五、实验现象与结果

文件加载到目标器件后,拨动拨动开关,LED灯会按表1-1所示的真值表对应的点亮。

六、实验报告

1、进一步熟悉和理解QUARTUSII软件的使用方法。

2、将实验原理、设计过程、编译仿真波形和分析结果、硬件测试结果记录下来。

4

实验二 含异步清零和同步使能的加法计数器的设计

一、 实验目的

1、 了解二进制计数器的工作原理。

2、 进一步熟悉QUARTUSII软件的使用方法和VHDL输入。

3、时钟在编程过程中的作用。

二、 实验原理

二进制计数器中应用最多、功能最全的计数器之一,含异步清零和同步使能的加法计数器的具体工作过程如下:

在时钟上升沿的情况下,检测使能端是否允许计数,如果允许计数(定义使能端高电平有效)则开始计数,否则一直检测使能端信号。在计数过程中再检测复位信号是否有效(低电平有效),当复位信号起作用时,使计数值清零,继续进行检测和计数。其工作时序如图2-1所示:

图2-1 计数器的工作时序

三、 实验内容

本实验要求完成的任务是在时钟信号的作用下,通过使能端和复位信号来完成加法计数器的计数。实验中时钟信号使用数字时钟源模块的1HZ信号,用一位拨动开关S1表示使能端信号,用复位开关K1表示复位信号,用LED模块的D1~D4来表示计

5

数的二进制结果。实验LED亮表示对应的位为‘1’,LED灭表示对应的位为‘0’。通过输入不同的值模拟计数器的工作时序,观察计数的结果。

四、 实验步骤

1、 打开QUARTUSII软件,新建一个工程。

2、 建完工程之后,再新建一个VHDL File,打开VHDL编辑器对话框。 3、 按照实验原理和自己的想法,在VHDL编辑窗口编写VHDL程序。

注意:要求有异步清零信信号ret,低电平有效; 同步时能信号en,高电平有效 参考程序: library ieee;

use ieee.std_logic_1164.all; use ieee.std_logic_arith.all; use ieee.std_logic_unsigned.all;

-------------------------------------------------------------------- entity exp3 is

port( clk,ret,en : in std_logic; --定义时钟、异步复位、同步使能信号 cq : out std_logic_vector(3 downto 0); --计数结果 cout : out std_logic --进位信号 ); end exp3;

-------------------------------------------------------------------- architecture behave of exp3 is begin

process(clk,ret,en)

variable cqi : std_logic_vector(3 downto 0); begin

if ret='0' then cqi:=(others =>'0');-- 计数器异步复位 elsif clk'event and clk='1' then--检测时钟上升沿 if en='1' then--检测是否允许计数(同步使能)

6

if cqi<15 then cqi:=cqi+1; else cqi:=(others =>'0'); end if; end if; end if;

if cqi=15 then cout<='1';--输出进位信号 else cout<='0'; end if;

cq<=cqi;--计数值向端口输出 end process; end behave;

4、 编写完VHDL程序后,保存起来。方法同实验一。

5、 对自己编写的VHDL程序进行编译并仿真,对程序的错误进行修改。 6、 编译仿真无误后,根据用户自己的要求进行管脚分配。分配完成后,再进行

全编译一次,以使管脚分配生效。

7、 根据实验内容用实验导线将上面管脚分配的FPGA管脚与对应的模块连接起

来。

8、 用下载电缆将对应的sof文件加载到FPGA中。观察实验结果是否与自己的编

程思想一致。

9、 思考:把该设计改成是加减法可控的计数器,增加控制输入端M,当M=0时,

进行加法计数,当M=1时,进行减法计数。

五、 实验现象与结果 六、 实验报告

1、 绘出仿真波形,并作说明。

2、 写出在VHDL编程过程中需要说明的规则。

3、 将实验原理、设计过程、编译仿真波形和分析结果、硬件测试结果记录下来。 4、 改变时钟频率,看实验现象会有什么改变,试解释这一现象。

7

实验三 图形和VHDL混合输入的电路设计

一、 实验目的

1、 学习在QUARTUSII软件中模块符号文件的生成与调用。 2、 掌握模块符号与模块符号之间的连线规则与方法。 3、 掌握从设计文件到模块符号的创建过程。

二、 实验原理

在层次化的设计文件中,经常需要将已经设计好的工程文件生成一个模块符号文件作为自己的功能模块符号在顶层调用,该符号就像图形设计文件中的任何其它宏功能符号一样可被高层设计重复调用。

三、 实验内容

在实验中,时钟信号选取12KHZ做为数码管的扫描时钟,拨动开关输入一个预置的八位数据,经过数控分频电路分频后得到一个较低的频率做为加法计数器(实验一)的时钟频率进行计数器的加法运算。得到的值给数码显示译码电路在数码管上显示出来。

四、 实验步骤

1、 打开QUARTUSII软件,新建一个工程。 2、 其中,本实验的三个组成模块,分别为: 计数器模块(exp1.vhd),实验一。 数码显示译码器模块(ymq.vhd),; 数控分频器的设计 (fpq.vhd)

3、 对设计文件(exp1.vhd;ymq.vhd;fpq.vhd)进行模块符号文件的创建。 4、 新建一个图形编辑文件,调用3中创建的模块符号,输入设计电路如图3-1所示。

8

图3-1 实验三的设计电路

5、 编译仿真无误后,根据用户自己的要求进行管脚分配。分配完成后,再进行全

编译一次,以使管脚分配生效。

如果是调用的本书提供的VHDL代码,则实验连线如下:

CLK:FPGA时钟信号,接数字时钟CLOCK3,并将这组时钟设为1024HZ。 DATA[7..0]:分频数据输入信号,分别接拨动开关的S8-S1。 COUT:计数进位输出信号,接一个LED灯D1。 RET:计数复位信号,接一个按键开关K1。

LEDAG[6..0]:数码管显示信号,接数码管的G、F、E、D、C、B、A。 SEL[2..0]:数码管的位选信号,接数码管的SEL2、SEL1、SEL0。

6、 根据实验内容用实验导线将上面管脚分配的FPGA管脚与对应的模块连接起

来。

7、 用下载电缆将对应的sof文件加载到FPGA中。观察实验结果是否与自己的编程

思想一致。

五、 实验现象与结果

以设计的参考示例为例,当设计文件加载到目标器件后,拨动八位拨动开关,使

9

其为一个数值,则八位数码管按一定的速率开始显示“0-F”,当数码管显示A-F时LED灯LED1开始被点亮,显示其它数值时熄灭。按S1键显示的数值又从0开始,拨动八位拨动开关,置于其它数据,数码管的显示速率会发生改变。

六、 实验报告

1、 出仿真波形,并作说明。

2、 自己设计文件,然后通过设计文件到模块符号文件的转换,设计自己的电路并

在实验系统中验证。进一步掌握这种方法。

3、 写出在软件中通过其它方法从设计文件到模块符号文件的转换过程。

10

实验四 矩阵键盘接口电路的设计

一、 实验目的

1、了解普通4×4键盘扫描的原理。 2、进一步加深七段码管显示过程的理解。 3、了解对输入/输出端口的定义方法。

一、 实验原理

实现键盘有两种方案:一是采用现有的一些芯片实现键盘扫描;再就是用软件实现键盘扫描。作为一个嵌入系统设计人员,总是会关心产品成本。目前有很多芯片可以用来实现键盘扫描,但是键盘扫描的软件实现方法有助于缩减一个系统的重复开发成本,且只需要很少的CPU 开销。嵌入式控制器的功能能强,可能充分利用这一资源,这里就介绍一下软键盘的实现方案。

图4-1 简单键盘电路

通常在一个键盘中使用了一个瞬时接触开关,并且用如图4-1 所示的简单电路,微处理器可以容易地检测到闭合。当开关打开时,通过处理器的I/O 口的一个上拉电阻提供逻辑1;当开关闭合时,处理器的/IO 口的输入将被拉低得到逻辑0。可遗憾的是,开关并不完善,因为当它们被按下或者被释放时,并不能够产生一个明确的1 或者0。尽管触点可能看起来稳定而且很快地闭合,但与微处理器快速的运行速度相比,这种动作是比较慢的。当触点闭合时,其弹起就像一个球。弹起效果将产生如图4-2 所示的好几个脉冲。弹起的持续时间通常将 维持在5ms~30ms 之间。

11

如果需要多个键,则可以将每个开关连接到微处理器上它自己的输入端口。然而,当开关的数目增加时,这种方法将很快使用完所有的输入端口。

图4-2 按键抖动

键盘上阵列这些开关最有效的方法(当需要5 个以上的键时)就形成了一个如图4-3 所示的二维矩阵。当行和列的数目一样多时,也就是方型的矩阵,将产生一个最优化的布列方式(I/O 端被连接的时候)。一个瞬时接触开关(按钮)放置在每一行与线一列的交叉点。矩阵所需的键的数目显然根据应用程序而不同。每一行由一个输出端口的一位驱动,而每一列由一个电阻器上拉且供给输入端口一位。

图4-3 矩阵键盘

键盘扫描的实现过程如下:对于4×4键盘,通常连接为4行、4列,因此要识别按键,只需要知道是哪一行和哪一列即可,为了完成这一识别过程,我们的思想是,首先固定输出4行为高电平,然后输出4列为低电平,在读入输出的4行的值,通常高电平会被低电平拉低,如果读入的4行均为高电平,那么肯定没有按键按下,否则,如果读入的4行有一位为低电平,那么对应的该行肯定有一个按键按

12

下,这样便可以获取到按键的行值。同理,获取列值也是如此,先输出4列为高电平,然后在输出4行为低电平,再读入列值,如果其中有哪一位为低电平,那么肯定对应的那一列有按键按下。

获取到行值和列值以后,组合成一个8位的数据,根据实现不同的编码在对每个按键进行匹配,找到键值后在7段码管显示。

二、 实验内容

本实验要求完成的任务是通过编程实现对4X4矩阵键盘按下键的键值的读取,并在数码管上完成一定功能(如移动等)的显示。

三、 实验步骤

1、打开QUARTUSII软件,新建一个工程。

2、建完工程之后,再新建一个VHDL File,打开VHDL编辑器对话框。 3、按照实验原理和自己的想法,在VHDL编辑窗口编写VHDL程序,用户可参照光盘中提供的示例程序。

参考程序:

library ieee;

use ieee.std_logic_1164.all; use ieee.std_logic_arith.all; use ieee.std_logic_unsigned.all;

------------------------------------------------------------------ entity exp12 is

port( Clk : in std_logic; --时钟信号

Kr : in std_logic_vector(3 downto 0); --键盘行

Kc : buffer std_logic_vector(3 downto 0); --键盘列

a,b,c,d,e,f,g : out std_logic; --七段码管显示 Sa,sb,sc : buffer std_logic); --七段码管片选 end exp12;

------------------------------------------------------------------ architecture behave of exp12 is

signal keyr,keyc : std_logic_vector(3 downto 0); signal kcount : std_logic_vector(2 downto 0); signal dcount : std_logic_vector(2 downto 0);

13

signal kflag1,kflag2 : std_logic;

signal buff1,buff2,buff3,buff4,buff5,buff6,buff7,buff8 : integer range 0 to 15;

signal Disp_Temp : integer range 0 to 15;

signal Disp_Decode : std_logic_vector(6 downto 0);

begin

process(Clk) --扫描键盘 begin

if(Clk'event and Clk='1') then if(Kr=\ kflag1<='0';

kcount<=kcount+1; if(kcount=0) then kc<=\

elsif(kcount=1) then kc<=\

elsif(kcount=2) then kc<=\ else

kc<=\ end if; else

kflag1<='1'; keyr<=Kr; keyc<=Kc; end if;

kflag2<=kflag1; end if; end process;

process(Clk) --显示右移 begin

if(Clk'event and Clk='1') then

if(kflag1='1' and kflag2='0' ) then buff1<=buff2; buff2<=buff3; buff3<=buff4; buff4<=buff5; buff5<=buff6; buff6<=buff7;

14

buff7<=buff8; end if; end if;

end process; process(Clk) -- 获取键值 begin

if(Clk'event and Clk='1') then

if(kflag1='1' and kflag2='0') then if(keyr=\ case keyc is

when \ when \ when \ when \

when others=>buff8<=buff8; --no change end case;

elsif(keyr=\ case keyc is

when \ when \ when \ when \

when others=>buff8<=buff8; --no change end case;

elsif(keyr=\ case keyc is

when \ when \ when \ when \

when others=>buff8<=buff8; --no change end case;

elsif(keyr=\ case keyc is

when \ when \ when \ when \

when others=>buff8<=buff8; --no change end case; end if;

end if; end if;

15

end process;

process(dcount) begin

case (dcount) is

when \ when \ when \ when \ when \ when \ when \

when \ end case; end process;

process(Clk) begin

if(Clk'event and Clk='1') then --扫描累加 dcount<=dcount+1; a<=Disp_Decode(0); b<=Disp_Decode(1); c<=Disp_Decode(2); d<=Disp_Decode(3); e<=Disp_Decode(4); f<=Disp_Decode(5); g<=Disp_Decode(6); sa<=dcount(0); sb<=dcount(1); sc<=dcount(2);

end if; end process;

process(Disp_Temp) --显示转换 begin

case Disp_Temp is

when 0=>Disp_Decode<=\ when 1=>Disp_Decode<=\ when 2=>Disp_Decode<=\ when 3=>Disp_Decode<=\ when 4=>Disp_Decode<=\ when 5=>Disp_Decode<=\ when 6=>Disp_Decode<=\ when 7=>Disp_Decode<=\

16

when 8=>Disp_Decode<=\ when 9=>Disp_Decode<=\ when 10=>Disp_Decode<=\ when 11=>Disp_Decode<=\ when 12=>Disp_Decode<=\ when 13=>Disp_Decode<=\ when 14=>Disp_Decode<=\ when 15=>Disp_Decode<=\

when others=>Disp_Decode<=\全灭 end case; end process; end behave;

4、编写完VHDL程序后,保存起来。

5、对自己编写的VHDL程序进行编译并仿真,对程序的错误进行修改。 6、编译仿真无误后,根据用户自己的要求进行管脚分配。分配完成后,再进

行全编译一次,以使管脚分配生效。

7、根据实验内容用实验导线将上面管脚分配的FPGA管脚与对应的模块连接

起来。

如果是调用的本书提供的VHDL代码,则实验连线如下:

Clk:FPGA工作时钟信号,接数字时钟CLOCK3,并设为1024HZ。 Kr[0:3]:分别接4×4键盘部分的R1、R2、R3和R4。 Kc[0:3]:分别接4×4键盘部分的C1、C2、C3和C4。 Sa、Sb、Sc:接七段码显示区的Sel0、Sel1和Sel2。

A、B、C、D、E、F、G:接七段码显示区的A、B、C、D、E、F和G 8、用下载电缆将对应的sof文件加载到FPGA中。观察实验结果是否与自己的编程思想一致。

四、 实验结果与现象

以设计的参考示例为例,当设计文件加载到目标器件后,按下矩阵键盘的某一个键,则在数码管上显示对应的这个键标识的键值,当再按下第二个键的时候前一个键的键值在数码管上左移一位。

五、 实验报告

17

1、绘出不同的键值时的数码管的仿真波形,并作说明。

2、根据自己的思路,找一找还有没有其它方法进行键盘的扫描显示。并画出流程图。

1、 将实验原理、设计过程、编译仿真波形和分析结果、硬件测试结果记录下来。

18

实验五 多功能数字钟的设计

一、实验目的

1、了解数字钟的工作原理。

2、进一步熟悉用VHDL语言编写驱动七段码管显示的代码。 3、掌握VHDL编写中的一些小技巧。

二、实验原理

多功能数字钟应该具有的功能有:显示时-分-秒、整点报时、小时和分钟可调等基本功能。首先要知道钟表的工作机理,整个钟表的工作应该是在1Hz信号的作用下进行,这样每来一个时钟信号,秒增加1秒,当秒从59秒跳转到00秒时,分钟增加1分,同时当分钟从59分跳转到00分时,小时增加1小时,但是需要注意的是,小时的范围是从0~23时。

在实验中为了显示的方便,由于分钟和秒钟显示的范围都是从0~59,所以可以用一个3位的二进制码显示十位,用一个四位的二进制码(BCD码)显示个位,对于小时因为它的范围是从0~23,所以可以用一个2位的二进制码显示十位,用4位二进制码(BCD码)显示个位。

实验中由于七段码管是扫描的方式显示,所以虽然时钟需要的是1Hz时钟信号,但是扫描确需要一个比较高频率的信号,因此为了得到准确的1Hz信号,必须对输入的系统时钟进行分频。

对于整点报时功能,用户可以根据系统的硬件结构和自身的具体要求来设计。本实验设计的是当进行整点的倒计时5秒时,让LED来闪烁进行整点报时的提示。

三、实验内容

本实验的任务就是设计一个多功能数字钟,要求显示格式为 小时-分钟-秒钟,整点报时,报时时间为10秒,即从整点前10秒钟开始进行报时提示,喇叭开始发声,直到过整点时,在整点前5秒LED开始闪烁,过整点后,停止闪烁。系统时钟选择

19

时钟模块的10KHz,要得到1Hz时钟信号,必须对系统时钟进行10,000次分频。调整时间的的按键用按键模块的S1和S2,S1调节小时,每按下一次,小时增加一个小时,S2调整分钟,每按下一次,分钟增加一分钟。另外用S8按键作为系统时钟复位,复位后全部显示00-00-00。

四、实验步骤

1、打开QUARTUSII软件,新建一个工程。

2、建完工程之后,再新建一个VHDL File,打开VHDL编辑器对话框。 3、按照实验原理和自己的想法,在VHDL编辑窗口编写VHDL程序,用户可参照光盘中提供的示例程序。

library ieee;

use ieee.std_logic_1164.all; use ieee.std_logic_arith.all; use ieee.std_logic_unsigned.all;

------------------------------------------------------------------ entity exp20 is

port( Clk : in std_logic; --时钟输入 Rst : in std_logic; --复位输入

S1,S2 : in std_logic; --时间调节输入 SPK : out std_logic; --整点输报时输出

Display : out std_logic_vector(6 downto 0); --七段码管显示输出

SEG_SEL : buffer std_logic_vector(2 downto 0) --七段码管扫描驱动

); end exp20;

--------------------------------------------------------------------

architecture behave of exp20 is

signal Disp_Temp : integer range 0 to 15;

signal Disp_Decode : std_logic_vector(6 downto 0); signal SEC1,SEC10 : integer range 0 to 9; signal MIN1,MIN10 : integer range 0 to 9; signal HOUR1,HOUR10 : integer range 0 to 9;

20

signal Clk_SM : std_logic; signal Clk1Hz : std_logic; signal Clk2Hz : std_logic;

signal led_count : std_logic_vector(2 downto 0);

BEGIN

PROCESS(clk) --产生显示扫描时钟

variable cnttemp : INTEGER RANGE 0 TO 59999; BEGIN

IF clk='1' AND clk'event THEN

IF cnttemp=59999 THEN cnttemp:=0; ELSE

IF cnttemp<30000 THEN clk_SM<='1'; ELSE clk_SM<='0'; END IF;

cnttemp:=cnttemp+1; END IF; END IF; END PROCESS;

PROCESS(clk) --产生显示扫描时钟1HZ

variable cnt : INTEGER RANGE 0 TO 23999999; BEGIN

IF clk='1' AND clk'event THEN IF cnt=23999999 THEN cnt:=0; ELSE

IF cnt<12000000 THEN clk1hz<='1'; ELSE clk1hz<='0'; END IF;

cnt:=cnt+1; END IF; END IF; END PROCESS;

PROCESS(clk) --产生显示扫描时钟2HZ

variable cnt : INTEGER RANGE 0 TO 23999999; BEGIN

IF clk='1' AND clk'event THEN

21

IF cnt=11999999 THEN cnt:=0; ELSE

IF cnt<6000000 THEN clk2hz<='1'; ELSE clk2hz<='0'; END IF;

cnt:=cnt+1; END IF; END IF; END PROCESS;

process(Clk1Hz,Rst) begin

if(Rst='0') then --系统复位 SEC1<=0; SEC10<=0; MIN1<=0; MIN10<=0; HOUR1<=0; HOUR10<=0;

elsif(Clk1Hz'event and Clk1Hz='1') then -- if(S1='0') then --调节小时 if(HOUR1=9) then HOUR1<=0;

HOUR10<=HOUR10+1;

elsif(HOUR10=2 and HOUR1=3) then HOUR1<=0; HOUR10<=0; else

HOUR1<=HOUR1+1; end if;

elsif(S2='0') then --调节分钟 if(MIN1=9) then MIN1<=0;

if(MIN10=5) then MIN10<=0; else

MIN10<=MIN10+1; end if;

22

正常运行

else

MIN1<=MIN1+1; end if;

elsif(SEC1=9) then SEC1<=0;

if(SEC10=5) then SEC10<=0;

if(MIN1=9) then MIN1<=0;

if(MIN10=5) then MIN10<=0;

if(HOUR1=9) then HOUR1<=0;

HOUR10<=HOUR10+1;

elsif(HOUR10=2 and HOUR1=3) then HOUR1<=0; HOUR10<=0; else

HOUR1<=HOUR1+1; end if; else

MIN10<=MIN10+1; end if; else

MIN1<=MIN1+1; end if; else

SEC10<=SEC10+1; end if; else

SEC1<=SEC1+1; end if; end if; end process;

process(Clk) begin

if(Clk2hz'event and Clk2hz='1') then

23

if(MIN10=5 and MIN1=9 and SEC10=5 and sec1>3) then --在59分55秒开始提示

led_Count<=led_Count+1; else

led_count<=\ end if; end if;

SPK<=led_count(0); end process;

process(SEG_SEL) begin

case (SEG_SEL+1) is

when \ when \ when \ when \ when \ when \ when \ when \ end case; end process;

process(Clk) begin

if(Clk_SM'event and Clk_SM='1') then --扫描累加 SEG_SEL<=SEG_SEL+1; Display<=Disp_Decode; end if; end process;

process(Disp_Temp) --显示转换 begin

case Disp_Temp is

when 0=>Disp_Decode<=\ when 1=>Disp_Decode<=\

24

when 2=>Disp_Decode<=\ when 3=>Disp_Decode<=\ when 4=>Disp_Decode<=\ when 5=>Disp_Decode<=\ when 6=>Disp_Decode<=\ when 7=>Disp_Decode<=\ when 8=>Disp_Decode<=\ when 9=>Disp_Decode<=\ when 10=>Disp_Decode<=\

when others=>Disp_Decode<=\全灭 end case; end process;

end behave;

4、编写完VHDL程序后,保存起来。方法同实验一。

5、对自己编写的VHDL程序进行编译并仿真,对程序的错误进行修改,直到完全通过编译和仿真。

6、编译仿真无误后,根据用户自己的要求进行管脚分配。分配完成后,再进行全编译一次,以使管脚分配生效。

7、根据实验内容用实验导线将上面管脚分配的FPGA管脚与对应的模块连接起来。

CLK:FPGA时钟,接24MHZ数字时钟。 RST:复位信号,按一个按键开关K1。

S1、S2:小时、分钟调节,接两个按键开关K2、K3。 SPK:整点报时,接喇叭/蜂鸣器接口的蜂鸣器。

DISPLAY[6..0]:显示端口,接数码管模块的A、B、C、D、E、F、G。 SEL[2..0]:显示端口,接数码管模块的SEL2,SEL1,SEL0。

8、用下载电缆通过JTAG口将对应的sof文件加载到FPGA中。观察实验结果是否与自己的编程思想一致。

五、实验结果与现象

25

以设计的参考示例为例,当设计文件加载到目标器件后,数码管开始显示时间,从00-00-00开始。在整点的前5秒,喇叭开始发声进行报时,一旦超过整点,喇叭停止发声。按动按键开关的K2、K3小时和分钟开始步进,进行时间的调整。按下按键开关的K1,显示恢复到00-00-00重新开始显示时间。

六、实验报告

1、 绘出仿真波形,并作说明。

2、 将实验原理、设计过程、编译仿真波形和分析结果、硬件测试结果记录下来。 3、 在此实验的基础上试用其它的方法来实现数字钟的功能,并增加其它功能。

26

附图EP1K10TC100管脚图

27

本文来源:https://www.bwwdw.com/article/j49g.html

Top