文档库 最新最全的文档下载
当前位置:文档库 › FPGA实验报告

FPGA实验报告

FPGA实验报告
FPGA实验报告

CPLD/FPGA 应用开发

技术实验报告

学生姓名: 张齐昌 学 号: 201410204065 学 院: 信息工程学院 班 级: 通信14-2 指导教师: 荀延龙

2017年 4 月 16

实验一组合逻辑电路的设计

一、实验目的:

1、掌握用VHDL语言和EPLD进行组合逻辑电路的设计方法。

2、加深对EPLD设计全过程的理解。

3、掌握组合逻辑电路的静态测试方法。

二、实验设备:

1、PC机

2、EDA实验箱(主芯片是ALTERA公司EP1K100QC208-3 或EP1K30TC30144-3)。

三、实验内容(任意选做3个):

1、用VHDL语言输入法设计一个四舍五入判别电路,其输入为8421BCD码,要求当输入

大于或等于5时,判别电路输出为1;反之为0。

2、用VHDL语言输入法设计3个开关控制一盏灯的逻辑电路,要求当开关都断开时,灯灭;

任一开关闭合或断开,灯的状态变换一次。

3、用VHDL语言输入法设计一个4选1数据选择器,信号A、B、D3、D2、D1、D0、Y、

S。要求S=“0”时,根据A、B的状态m i选择输出端Y=D i。

4、用VHDL语言输入法设计一个3线-8线译码器,信号A、B、C、Y7、Y6、Y

5、Y4、Y3、

Y2、Y1、Y0、S。要求S=“0”时,根据A、B、C的状态m i选择输出端Y i=“0”。

四、实验步骤:

1、采用文本编辑器输入VHDL语言源程序,建立工程。

2、编译。

3、仿真。

4、对芯片进行编程。

5、根据管脚分配情况连线。

(1)四舍五入判别电路的四个输入管脚分别与四个拨码开关相连,输出数据与LED灯相连。

(2)开关控制电路的3个输入管脚分别与3个按键开关相连,输出管脚与LED 灯相连。

(3)4选1数据选择器的7个信号A、B、D3、D2、D1、D0、S分别连7个拨码开关,输出信号Y与LED灯相连。

(4)3线-8线译码器4个信号A、B、C、S分别连4个拨码开关,输出信号Y i 与8个LED灯相连。

6、控制输入信号(按键或拨码开关),观察电路输出(LED灯的亮与灭)。

五、实验程序及部分仿真电路图:

1、用VHDL语言输入法设计一个四舍五入判别电路,其输入为8421BCD码,要求当输入

大于或等于5时,判别电路输出为1;反之为0。

library ieee;

USE IEEE.STD_LOGIC_1164.ALL;

USE IEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITY t1_1 is

port(

d0,d1,d2,d3:in std_logic;

out1:out std_logic);

end t1_1;

architecture zqc of t1_1 is

begin

out1<=((d0 and d1)or(d1 and d2)or d3);

end zqc;

2、用VHDL语言输入法设计3个开关控制一盏灯的逻辑电路,要求当开关都断开时,灯灭;

任一开关闭合或断开,灯的状态变换一次。

library ieee

use ieee.std_logic_1164.all;

entity t1_2 is

port(

k:in std_logic_vector(2 downto 0)

y:out std_logic);

end t1_2

architecture zqc of t1_2 is

begin

with (k) select

y<='0'when "000",

'1'when "001",

'0'when "011",

'1'when "010",

'0'when "110",

'1'when "100",

'0'when "101",

'1'when "111";

end zqc

3、用VHDL语言输入法设计一个4选1数据选择器,信号A、B、D3、D2、D1、D0、Y、

S。要求S=“0”时,根据A、B的状态m i选择输出端Y=D i。

library ieee;

use ieee.std_logic_1164.all;

use ieee.std_logic_unsigned.all;

entity t3_1 is

port(a0,a1,a2,a3:in std_logic;

s:in std_logic_vector(1 downto 0);

y:out std_logic);

end t3_1 ;

architecture archmux of t3_1 is

begin

y<=a0 when s="00" else

a1 when s="01" else

a2 when s="10" else

a3;

end

archmux;

六、实验遇到问题以及感悟

第一次真实操作quartus Ⅱ9.0适应,实验中刚开始出现很多问题,程序错误,由于我的电脑安装是quartus Ⅱ15.0,高版本会自动加标点符号,所以我的程序几乎没有太多的符号,结果导致错误连篇,认真改正后,由于对编译就操作一次,导致问题太多,没有遵守荀老师的一个项目一个文件夹要求,导致引脚都是相同的,甚至都是低电平情况,但是荀老师希望我们能够自己寻找答案,自己去找出问题解决问题。

最后,我一个个解决问题,倍感欣慰。

实验二计数器及时序电路

一、实验目的:

1、了解时序电路的VHDL语言设计方法。

2、了解同步计数器的使用方法。

3、理解时序电路和同步计数器加译码电路的联系,设计任意编码计数器。

二、实验设备:

1、PC机

2、EDA实验箱(主芯片是ALTERA公司EP1K100QC208-3 或EPM7128SLC84-15)。

三、实验内容:

1、用VHDL语言输入法设计一个上升沿触发、异步清零的四位二进制加法计数器。

2、用VHDL语言输入法设计一个下降沿触发、同步清零的十二进制计数器。

3、用原理图输入法使用74161宏,要求M=1时实现六进制,M=0时实现十二进制计

数器,使用七段数码管显示。

四、实验步骤:

1、采用文本编辑器输入VHDL语言源程序,或采用原理图输入法从MF库中调用器件

74161,生成原理图,之后建立工程。

2、编译。

3、仿真。

4、对芯片进行编程。

5、根据管脚分配情况连线。

(1)四位二进制加法计数器,接入1.2Hz计数脉冲,清零复位信号接1个拨码开关,输出按照数据的高低位顺序连接4个LED灯。

(2)十二进制计数器,接入1.2Hz计数脉冲,清零复位信号接1个拨码开关,输出按照数据的高低位顺序连接4个LED灯。

(3)六进制/十二进制将计数器,接入1.2Hz计数脉冲,清零复位、M信号接2个拨码开关,输出端连接七段数码管a、b、c、d、e、f、g [SEL2,SEL1,SEL0]

信号接3个拨码开关。

6、控制输入信号拨码开关,观察实验结果。

7、改变输入时钟信号的频率,观察实验结果。

五、实验程序及部分仿真电路图:

1、用VHDL语言输入法设计一个上升沿触发、异步清零的四位二进制加法计数器。

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;

USE IEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITY T2_1 IS

PORT(CLK,CLR,UP:IN STD_LOGIC;

QA,QB,QC,QD:OUT STD_LOGIC);

END T2_1;

ARCHITECTURE ART OF T2_1 IS

SIGNAL COUNT_4:STD_LOGIC_VECTOR(3 DOWNTO 0);

BEGIN

QA<=COUNT_4(0);

QB<=COUNT_4(1);

QC<=COUNT_4(2);

QD<=COUNT_4(3);

PROCESS(CLK,CLR)

BEGIN

IF(CLR='0')THEN

COUNT_4<="0000";

ELSIF(CLK' EVENT AND CLK='1')THEN

IF(UP='1')THEN

COUNT_4<=COUNT_4+1;

ELSE

COUNT_4<=COUNT_4;

END IF;

END IF;

END PROCESS;

END ART;

2、用VHDL语言输入法设计一个下降沿触发、同步清零的十二进制计数器。

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;

USE IEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITY T2_2 IS

PORT (CLK,CLR,EN:IN STD_LOGIC;

QA,QB,QC,QD:OUT STD_LOGIC);

END T2_2;

ARCHITECTURE ART OF T2_2 IS

SIGNAL COUNT_4:STD_LOGIC_VECTOR(3 DOWNTO 0);

BEGIN

QA<=COUNT_4(0);

QB<=COUNT_4(1);

QC<=COUNT_4(2);

QD<=COUNT_4(3);

PROCESS(CLK,CLR)

BEGIN

IF(CLK'EVENT AND CLK='0')THEN

IF(CLR='0')THEN

COUNT_4<="0000";

ELSIF(CLK'EVENT AND CLK='0')THEN

IF(EN='0')THEN

COUNT_4<="0000";

ELSIF(COUNT_4="1100")THEN

COUNT_4<="0000";

ELSE

COUNT_4<=COUNT_4+1;

END IF;

END IF;

END IF;

END PROCESS;

END ART;

3、用原理图输入法使用74161宏,要求M=1时实现六进制,M=0时实现十二进制计

数器,使用七段数码管显示。

六、实验遇到问题以及感悟

实验一与实验二并没有出现什么问题,但是由于课本出现一个程序错误,导致我浪费很多时间,我作为初学者,并没有敢于挑战权威,所以,但是最终还是做出了改变这条语句,却发生变化,起初,我对VHDL语言时钟信号概念很模糊,不过程序T2-2中,存在两个始终判断信号,但是判断是同一个时钟,同一个下降沿,进程语句原因吧,我自己的见解,具体原因我并没有参阅到。

实验三,出现问题挺严重,M为高电平时候,仿真在0111,自动清零,后期解决不了,荀老师给讲解0111状态转变1000状态时候,Qd变化快存在1111的瞬时状态,导致CO毛刺,输出清零毛刺,被系统扑捉到导致清零。顿时明白了很多,也受益匪浅。

FPGA是一个多实验过程。所以我要多动手,勤练习。

实验三扫描驱动显示电路设计(设计性实验)

一、实验目的

1.了解实验箱中8位七段数码管显示模块的工作原理。

2.熟悉VHDL 硬件描述语言及设计专用数字集成电路的自顶向下的设计思想。

3.掌握利用CPLD/FPGA设计4位七段数码管扫描显示驱动电路的方法。

二、实验设备

1.计算机(配置为:P4 CPU 128M内存);

2.MAX+plusⅡ或Quartus Ⅱ开发工具软件;

3.EDA-V教学实验箱;

4.万用表;

5.DS 5022M型双踪数字示波器;

三、扫描原理

为了减少多位显示信号的接口接线,经常使用数码管动态扫描显示工作模式。实验箱中8位七段数码管的段码输入(a,b,c,d,e,f,g,dp)是分别并联在一起8根线,而每一个数码管是通过一个3位选择sel[2..0]来选定的。Sel信号与数码管之间是一3-8译码的关系,即sel 为“000”时,选中第1个数码管,sel为“001”时,选中第2个数码管,……,sel为“111”时,选中第8个数码管。

四、设计任务

本实验要求在给定子模块程序的基础上,画出设计原理图。自行编写顶层模块程序,完成扫描显示驱动电路的设计,实现在4个数码管上显示自己学号的末4位数字的功能。五、设计要求

1.要求在Max+plusⅡ/QuartusⅡ平台上用VHDL语言编写顶层模块程序,调试、仿真成功后,下载至ALTERA公司EP1K100QC208-3 或EP1K30TC144-3芯片,再利用外接电路实现以上设计功能。

2.扫描驱动显示电路有2个控制输入端:时钟信号clk,清零信号reset; 9个输出端:显示段码值a,b,c,d,e,f,g;位选信号s1, s0,全部为TTL电平,管脚分配任意,如下图所示。

3. 扩展功能:4位显示数字可以外部输入,数据形式自行定义。

4.根据芯片管脚分配连接电路。

六、实验报告要求

1.给出设计源程序、仿真结果、说明设计思路。

2.改变输入时钟信号的频率,观察实验结果如何改变。

3.字符扫描显示亮度与扫描频率的关系,且让人眼感觉不出闪烁现象的最低扫描频率是多少?

相关文档