可编程逻辑器件实验11个讲解.docx

上传人:b****4 文档编号:11356339 上传时间:2023-05-31 格式:DOCX 页数:28 大小:221.07KB
下载 相关 举报
可编程逻辑器件实验11个讲解.docx_第1页
第1页 / 共28页
可编程逻辑器件实验11个讲解.docx_第2页
第2页 / 共28页
可编程逻辑器件实验11个讲解.docx_第3页
第3页 / 共28页
可编程逻辑器件实验11个讲解.docx_第4页
第4页 / 共28页
可编程逻辑器件实验11个讲解.docx_第5页
第5页 / 共28页
可编程逻辑器件实验11个讲解.docx_第6页
第6页 / 共28页
可编程逻辑器件实验11个讲解.docx_第7页
第7页 / 共28页
可编程逻辑器件实验11个讲解.docx_第8页
第8页 / 共28页
可编程逻辑器件实验11个讲解.docx_第9页
第9页 / 共28页
可编程逻辑器件实验11个讲解.docx_第10页
第10页 / 共28页
可编程逻辑器件实验11个讲解.docx_第11页
第11页 / 共28页
可编程逻辑器件实验11个讲解.docx_第12页
第12页 / 共28页
可编程逻辑器件实验11个讲解.docx_第13页
第13页 / 共28页
可编程逻辑器件实验11个讲解.docx_第14页
第14页 / 共28页
可编程逻辑器件实验11个讲解.docx_第15页
第15页 / 共28页
可编程逻辑器件实验11个讲解.docx_第16页
第16页 / 共28页
可编程逻辑器件实验11个讲解.docx_第17页
第17页 / 共28页
可编程逻辑器件实验11个讲解.docx_第18页
第18页 / 共28页
可编程逻辑器件实验11个讲解.docx_第19页
第19页 / 共28页
可编程逻辑器件实验11个讲解.docx_第20页
第20页 / 共28页
亲,该文档总共28页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

可编程逻辑器件实验11个讲解.docx

《可编程逻辑器件实验11个讲解.docx》由会员分享,可在线阅读,更多相关《可编程逻辑器件实验11个讲解.docx(28页珍藏版)》请在冰点文库上搜索。

可编程逻辑器件实验11个讲解.docx

可编程逻辑器件实验11个讲解

 

可编程逻辑器件

 

 

目录

实验一QuartusⅡ软件及EDA实验平台介绍1

实验二QuartusⅡ文本设计输入4

实验三QuartusⅡ混合设计输入5

实验四D、T触发器7

实验五十六进制数码管显示8

实验六3-8译码器设计10

实验七计数器的设计12

实验八数控分频器的设计13

实验九锁存器的设计14

实验十4选1多路选择器19

实验十一循环彩灯控制器的设计21

 

实验一QuartusⅡ软件及EDA实验平台介绍

(1)实验目的:

熟悉QuartusⅡ软件的使用,学习其操作过程及仿真过程。

(2)实验内容:

学习使用QuartusⅡ对程序进行编辑输入、编译及仿真。

1、打开QuartusII软件。

2、选择路径。

选择File/NewProjectWizard,指定工作目录,指定工程和顶层设计实体称;注意:

工作目录名不能有中文。

3、添加设计文件。

将设计文件加入工程中。

单击“Next”,如果有已经建立好的VHDL或者原理图等文件可以在Filename中选择路径然后添加,或者选择AddAll添加所有可以添加的设计文件(.VHDL,.Verilog原理图等)。

如果没有直接点击“Next”,等建立好工程后再添加也可,这里我们暂不添加。

4、选择FPGA器件。

Family选择Cyclone,Availabledevice选EP1C12Q240C8,点击“Next”。

5、选择外部综合器、仿真器和时序分析器。

QuartusII支持外部工具,可通过选中来指定工具的路径。

这里我们不做选择,默认使用QuartusII自带的工具。

6、结束设置。

单击“Next”,弹出“工程设置统计”窗口,上面列出了工程的相关设置情况。

最后单击“Finish”,结束工程设置。

7、建立VHDL原文件。

选择菜单“File”“New…”。

8、添加文件到工程中。

VHDL原文件编辑完后,选择File/Save,选择和工程相同的文件名。

点击“保存”,文件就被添加进工程当中。

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;

entityadder4bis

port(clr,cin:

instd_logic;

a,b:

instd_logic_vector(3downto0);

s:

outstd_logic_vector(3downto0);

cout:

outstd_logic);

endadder4b;

architectureartofadder4bis

signalsint:

std_logic_vector(4downto0);

signalaa,bb:

std_logic_vector(4downto0);

begin

aa<='0'&a;

bb<='0'&b;

sint<=aa+bb+cin;

s<=sint(3downto0);

cout<=sint(4);

endart;

9、编译。

选择Processing/Start/StartAnalysis&Synthesis,进行综合。

10、功能仿真验证,从菜单File-New中选择创建VectorWaveformFile。

在新的波形文件中选入需要验证的引脚,通过在左边窗栏理点击鼠标右键,选InsertNodeorBus..,在打开的对话框中点击List,选择所要观察的信号引脚,设置引脚的信号值,如下图所示。

点击保存Save.

在Settings对话框中,选中SimulatorSettings选择页,设置Function类型仿真,并将新创建的波形文件当作仿真输入,如下图所示:

设置完毕之后,点击Processing->GenerateFunctionalSimulatorNetList,生产网表文件之后,点击StartSimulator,进行功能仿真,然后验证逻辑功能是否正确。

(4)实验报告:

简述实验步骤,写出实验的源程序,给出波形仿真结果。

实验二QuartusⅡ文本设计输入

(1)实验目的:

①熟悉QuartusⅡ软件的使用及仿真过程;

②掌握操作符的逻辑运算关系及数据类型,熟悉VHDL文本输入法。

(2)实验内容:

使用VHDL文本输入法完成基本门的设计,学习使用QuartusⅡ对程序进行编辑输入、编译及仿真。

libraryieee;

useiee.std_logic_1164.all;

entityjbmis

port(a,b:

inbit;

f1,f2,f3,f4,f5,f:

outbit);

endjbm;

architectureaofjbmis

begin

f1<=aandb;

f2<=aorb;

f<=nota;

f3<=anandb;

f4<=anorb;

f5<=not(axorb);

end;

(3)思考题

根据上述实验结果与现象,独立完成2位二进制数的“与、或非、异或、同或”逻辑运算,要求数据类型为标准逻辑矢量类型。

(4)实验报告

写出实验的源程序,给出相应表达式完成的逻辑关系,并给出波形仿真结果。

独立完成思考题,给出源程序。

实验三QuartusⅡ混合设计输入

(1)实验目的:

①熟悉QuartusⅡ软件的使用及仿真过程;

②熟悉VHDL混合输入法,并完成一位全加器的设计。

(2)实验原理

表3-1半加器真值表

a

b

so

co

0

0

0

0

0

1

1

0

1

0

1

0

1

1

0

1

建立一位半加器half_adder工程:

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

ENTITYHALF_ADDERIS

PORT(A,B:

INSTD_LOGIC;

S,Co:

OUTSTD_LOGIC);

ENDENTITYHALF_ADDER;

ARCHITECTURERTLOFHALF_ADDERIS

BEGIN

S<=NOT(AXOR(NOTB));

Co<=AANDB;

ENDARCHITECTUREHD;

(3)实验内容:

①使用VHDL文本输入法完成一位半加器的设计,利用QuartusⅡ对程序进行编辑输入、编译及仿真;

②将半加器生成元件符号,执行菜单【File】->【Create/Update】->【Createsymbolfileforcurrentfile】;

③新建原理图文件,并添加刚生成新元件;

④连接电路图

根据文本输入的半加器,结合所给原理图,进行合理的电路图连接。

注意:

原理图保存名称不要与半加器实体名重合。

⑤指定顶层文件

(4)实验报告

①给出半加器的原理,写出一位半加器的文本源程序;

②画出一位全加器的原理图,对一位全加器进行功能仿真,给出波形仿真结果,并举例验证结果是否正确。

实验四D、T触发器

(1)实验目的:

熟悉QuartusII的VHDL文本设计过程,学习简单时序电路的设计、仿真。

(2)实验原理

时序逻辑电路是现代复杂数字电路的重要组成部分,往往占到整个设计的90%以上。

触发器是时序电路的基本单元,本实验将涉及到D触发器与T触发器,采用的是边沿触发,边沿触发是实际电路实现的主要方式。

D触发器:

在时钟上升沿时,输出q=d,qb=

T触发器:

在时钟上升沿的作用下,T=0输出不变,T=1输出翻转。

(3)实验内容:

设计上升沿触发的同步复位的D触发器及上升沿触发的T触发器,分别利用QuartusⅡ对程序进行编辑输入、编译及仿真。

上升沿触发的同步复位的D触发器

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_signed.all;

entitysyndffis

port(d,clk,reset:

instd_logic;

q,qb:

outstd_logic);

endsyndff;

architecturedff_artofsyndffis

begin

process(clk)

begin

if(clk'eventandclk='1')then

if(reset='0')then

q<='0';qb<='1';

else

q<=d;qb<=notd;

endif;

endif;

endprocess;

enddff_art;

T触发器源程序代码:

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_signed.all;

entitytffis

port(t,clk:

instd_logic;

q:

outstd_logic);

end;

architecturetff_artoftffis

signalq_temp:

std_logic;

begin

p1:

process(clk,q_temp)

begin

ifrising_edge(clk)then

ift='1'then

q_temp<=notq_temp;

else

q_temp<=q_temp;

endif;

endif;

q<=q_temp;

endprocess;

q<=q_temp;

endtff_art;

(4)实验报告

写出D触发器及T触发器的程序代码及原理,找出D触发器的错误及T触发器的警告,说明其错误原因并改正,最后给出两个触发器的波形仿真结果。

实验五十六进制数码管显示

(1)实验目的

学习7段数码显示译码器设计,学习VHDL的case设计方法。

(2)实验仪器

计算机一台,EL教学实验箱(EDA-VI),QUARTUSII

(3)实验原理

七段数码管由8个(a,b,c,d,e,f,g,dp)按照一定位置排列的发光二极管构成,通常采取共阴极或者共阳极的设计,将8个二极管的同一极接在一起,通过分别控制另外的8个电极的电平,使二极管导通(发光)或截止(不发光)。

本实验采用共阴极设计,高电平点亮。

七段数码显示译码器的功能就是根据需要显示的字符,输出能够控制七段数码管显示出该字符的编码。

(4)实验内容

①用VHDL设计7段数码管显示电路设计,利用case语句实现数码管上显示字符的电路。

十六进制数码管显示源代码:

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

useieee.std_logic_unsigned.all;

ENTITYshumaIS

PORT(clk:

INSTD_LOGIC;

vga:

outstd_logic_vector(3downto0);

sel:

outstd_logic_vector(7downto0);

seg_led:

outstd_logic_vector(7downto0));

END;

ARCHITECTUREoneOFshumaIS

signalcq:

std_logic_vector(3downto0);

BEGIN

vga<="0010";

sel<="11111110";

PROCESS(clk,cq)

BEGIN

IF(clk='1'ANDclk'EVENT)THEN

cq<=cq+1;

endif;

CASEcqIS

WHEN"0000"=>seg_led<="00111111";

WHEN"0001"=>seg_led<="00000110";

WHEN"0010"=>seg_led<="01011011";

WHEN"0011"=>seg_led<="01001111";

WHEN"0100"=>seg_led<="01100110";

WHEN"0101"=>seg_led<="01101101";

WHEN"0110"=>seg_led<="01111101";

WHEN"0111"=>seg_led<="00000111";

WHEN"1000"=>seg_led<="01111111";

WHEN"1001"=>seg_led<="01101111";

WHEN"1010"=>seg_led<="01110111";

WHEN"1011"=>seg_led<="01111100";

WHEN"1100"=>seg_led<="00111001";

WHEN"1101"=>seg_led<="01011110";

WHEN"1110"=>seg_led<="01111001";

WHEN"1111"=>seg_led<="01110001";

WHENOTHERS=>NULL;

ENDCASE;

endprocess;

END;

②用QuartusII对②中的设计进行编译、综合、仿真,验证其功能是否与预期一致。

③管脚配置:

seg_led[0]:

PIN_105

seg_led[1]:

PIN_104

seg_led[2]:

PIN_101

seg_led[3]:

PIN_100

seg_led[4]:

PIN_85

seg_led[5]:

PIN_84

seg_led[6]:

PIN_83

seg_led[7]:

PIN_82

sel[0]:

PIN_86

sel[1]:

PIN_87

sel[2]:

PIN_88

sel[3]:

PIN_93

sel[4]:

PIN_94

sel[5]:

PIN_95

sel[6]:

PIN_98

sel[7]:

PIN_99

vga[0]:

PIN_162

vga[1]:

PIN_161

vga[2]:

PIN_164

vga[3]:

PIN_163

clk:

PIN_28

注意:

未分配管脚:

Assignments->device...->device&pinoptions->unusedpins->Reserveallunusedpins:

Asinputtri-stated。

④通过QuartusII的usb-blaster,将设计下载到实验电路上进行硬件测试。

(4)实验连线

clk的频率由SW17-SW20控制,用导线将IO3与IOCLK相连;

SW17-SW20控制时钟的频率,0111表示频率为5Hz,1111表示时钟频率为1Hz,本实验选用这两个频率进行测试,观察数码管显示字符的变化。

(5)实验报告

给出十六进制的数码管的程序代码、原理,自己改写程序选择不同的数码管显示字符,并提供实验过程中的拍摄图片。

 

实验六3-8译码器设计

(1)实验目的

通过3-8译码器的设计,掌握组合逻辑电路的设计方法,熟悉软件的使用,并利用实验箱对程序进行硬件测试。

(2)实验仪器

计算机一台,EL教学实验箱(EDA-VI),QUARTUSII

(3)实验原理

输入

输出

g1

g2a

g2b

C

B

A

Y0

Y1

Y2

Y3

Y4

Y5

Y6

Y7

0

X

X

X

X

X

1

1

1

1

1

1

1

1

1

0

0

0

0

0

0

1

1

1

1

1

1

1

1

0

0

0

0

1

1

0

1

1

1

1

1

1

1

0

0

0

1

0

1

1

0

1

1

1

1

1

1

0

0

0

1

1

1

1

1

0

1

1

1

1

1

0

0

1

0

0

1

1

1

1

0

1

1

1

1

0

0

1

0

1

1

1

1

1

1

0

1

1

1

0

0

1

1

0

1

1

1

1

1

1

0

1

1

0

0

1

1

1

1

1

1

1

1

1

1

0

利用case语句设计3-8译码器,译码器的输出接LED灯,为低电平点亮。

(4)实验内容

3-8译码器源程序代码:

LIBRARYieee;

USEieee.std_logic_1164.ALL;

ENTITYdecoder3_8IS

PORT(a,b,c,g1,g2a,g2b:

INSTD_LOGIC;

VGA:

outstd_logic_vector(3downto0);

Y:

OUTSTD_LOGIC_VECTOR(7DOWNTO0));

ENDdecoder3_8;

ARCHITECTUREfunOFdecoder3_8IS

SIGNALindata:

STD_LOGIC_VECTOR(2DOWNTO0);

BEGIN

VGA<=“0001”;indata<=C&B&A;

PROCESS(indata,G1,G2A,G2B)

BEGIN

IF(G1='1'ANDG2A='0'ANDG2B='0')THEN

CASEindataIS

WHEN"000"=>Y<="11111110";

WHEN"001"=>Y<="11111101";

WHEN"010"=>Y<="11111011";

WHEN"011"=>Y<="11110111";

WHEN"100"=>Y<="11101111";

WHEN"101"=>Y<="11011111";

WHEN"110"=>Y<="10111111";

WHEN"111"=>Y<="01111111";

WHENOTHERS=>Y<="XXXXXXXX";

ENDCASE;

ELSE

Y<="11111111";

ENDIF;

ENDPROCESS;

ENDfun;

管脚配置:

A:

PIN_105

B:

PIN_104

C:

PIN_101

G1:

PIN_100

G2A:

PIN_85

G2B:

PIN_84

Y[0]:

PIN_132

Y[1]:

PIN_133

Y[2]:

PIN_134

Y[3]:

PIN_135

Y[4]:

PIN_136

Y[5]:

PIN_137

Y[6]:

PIN_138

Y[7]:

PIN_139

vga[0]:

PIN_162

vga[1]:

PIN_161

vga[2]:

PIN_164

vga[3]:

PIN_163

利用quartusII软件对程序编译、仿真,验证其功能,最后将程序下载到实验箱,利用硬件测试实验的正确性。

注意:

未分配管脚:

Assignments->device...->device&pinoptions->unusedpins->Reserveallunusedpins:

Asinputtri-stated。

(5)实验连线

C、B、A、G1、G2A、G2B分别对应EDA-VI实验箱底板SW1-SW6;

Y0-Y7分别对应EDA-VI实验箱底板IO9-IO16;

用导线将IO9-IO16与8位LEDL1-L8相连,LED为低电平点亮;

功能选择位VGA[3..0]状态为0001,即16位拨码开关SW1-SW6被选中输出到总线D[15..0];

控制拨码开关SW1-SW6,观察L1-L8显示状态是否与预期输出结果一致。

(6)实验报告

简述3-8译码器原理,并根据提供的程序代码改用if语句描述,并给出其波形仿真结果;根据拨码开关的控制位置,简述实验箱变化情况。

实验七计数器的设计

(1)实验目的

进一步学习并掌握QuartusII开发系统的基本操作,熟悉设计计数器电路与仿真的方法,掌握CPLD/FPGA的开发流程。

(2)实验原理:

计数器是逻辑电路中使用最广泛的电路,并且在复杂电路的设计中几乎离不开计数器。

计数器的计数功能是在时钟信号的控制下进行的,当时钟出现上升沿,则计数一次,以此类推,直至计数到最大值,在时钟上升沿时,返回到起点。

(3)实验内容

①设计一个简单的4位二进制计数器,相当于16进制计数器。

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;

entitycnt4IS

port(clk:

instd_logic;

q:

outstd_logic_vector(3downto0));endcnt4;

architecturebehaveofcnt4is

signalq1:

std_logic_vector(3downto0);

begin

process(clk)

begin

if(clk'eventandclk='1')then

q1<=q1+1;

endif;

endprocess;

q<=q1;

endbehave;

②利用QuartusII软件进行编译、仿真,验证该计数器的功能。

③根据之前所学内容,设计一个可以在实验箱上显示的计数器。

(4)实验报告

给出计数器的程序代码,提供波形仿真结果。

实验八数控分频器的设计

(1)实验目的

学习数控分频器的设计、分析和测试方法。

(2)实验原理

分频器电路的实质其实就是计数器的设计。

对于二进制计数器,每一个输出端都是对前一个输出端的二分频。

数控分频器是利用计数器可并行预置的加法计数器完成的。

方法是将计数器溢出位与预置数加载输入信号加减即可。

这种方法类似于单片机的定时器工作模式。

(3)实验内容

①设计数控分频器

libraryieee;

usestd_logic_1164.all;

usestd_logic_unsigned.all;

entityfreq1is

port(clk:

instd_logic;

d:

instd_logic_vector(7downto0);

fout:

outstd_logic);

end;

architectureoneofdvfis

signalfull:

std_logic;

begin

p_reg:

process(clk)

variablecnt8:

std_logic_vector(7downto0);

begin

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 自然科学 > 物理

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2