可编程逻辑器件实验讲义11个.docx
- 文档编号:18271213
- 上传时间:2023-08-14
- 格式:DOCX
- 页数:27
- 大小:220.69KB
可编程逻辑器件实验讲义11个.docx
《可编程逻辑器件实验讲义11个.docx》由会员分享,可在线阅读,更多相关《可编程逻辑器件实验讲义11个.docx(27页珍藏版)》请在冰点文库上搜索。
可编程逻辑器件实验讲义11个
可编程逻辑器件
实
验
讲
义
实验一QuartusⅡ软件及EDA实验平台介绍
(1)实验目的:
熟悉QuartusⅡ软件的使用,学习其操作过程及仿真过程。
(2)实验内容:
学习使用QuartusⅡ对程序进行编辑输入、编译及仿真。
1、打开QuartusII软件。
2、选择路径。
选择ProjectWizard,指定工作目录,指定工程和顶层设计实体称;注意:
工作目录名不能有中文。
3、添加设计文件。
将设计文件加入工程中。
单击“Next”,如果有已经建立好的VHDL或者原理图等文件可以在中选择路径然后添加,或者选择AddAll添加所有可以添加的设计文件(.VHDL,.Verilog原理图等)。
如果没有直接点击“Next”,等建立好工程后再添加也可,这里我们暂不添加。
4、选择FPGA器件。
Family选择Cyclone,Availabledevice选EP1C12Q240C8,点击“Next”。
5、选择外部综合器、仿真器和时序分析器。
QuartusII支持外部工具,可通过选中来指定工具的路径。
这里我们不做选择,默认使用QuartusII自带的工具。
6、结束设置。
单击“Next”,弹出“工程设置统计”窗口,上面列出了工程的相关设置情况。
最后单击“Finish”,结束工程设置。
7、建立VHDL原文件。
选择菜单“File”→“New…”。
8、添加文件到工程中。
VHDL原文件编辑完后,选择,选择和工程相同的文件名。
点击“保存”,文件就被添加进工程当中。
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、功能仿真验证,从菜单中选择创建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
ifclk'eventandclk='1'then
ifcnt8=“”then--CNT8计数计满时
cnt8:
=d;--输入数据D被同步预置给CNT8
full<='1';--溢出标志信号FULL输出高电平
else
cnt8:
=cnt8+1;--否则继续作加1计数
full<='0';--输出溢出标志信号FULL为低电平
endif;
endif;
endprocessp_reg;
p_div:
process
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 可编程 逻辑 器件 实验 讲义 11