fpga课程实验报告.docx
- 文档编号:3404817
- 上传时间:2022-11-22
- 格式:DOCX
- 页数:28
- 大小:3.21MB
fpga课程实验报告.docx
《fpga课程实验报告.docx》由会员分享,可在线阅读,更多相关《fpga课程实验报告.docx(28页珍藏版)》请在冰豆网上搜索。
fpga课程实验报告
实验一、加法器设计
1.1实验目的
(1)熟练使用QuartusII开发环境的基本操作
(2)学习组合逻辑电路的设计方法
(3)掌握QuartusII中基于VHDL语言设计的流程
(4)掌握QuartusII中基于原理图设计的流程
(5)综合应用VHDL语言及原理图进行数字电路设计
任一时刻的输出仅仅取决于当时的输入,与电路原来的状态无关,这样的数字电路叫做组合逻辑电路。
常见的组合逻辑电路有运算电路、编码器、译码器和数据选择器等。
运算电路的基本运算包括了加、减、乘、除。
对于乘法和除法,不管是十进制还是二进制,乘法都被分解为一系列的加法,而除法被分解为一系列的减法。
例如,一个乘法器可以由一个n位加法器和一个移位寄存器实现。
在数字系统中,加法器是最常见的组合逻辑器件,多位加法器的构成有两种方式:
串行进位和并行进位方式。
串行进位加法器是由多个全加器级联而成,低位全加器的进位输出连接到相邻高位全加器的进位输入,电路简单,但运算速度较慢。
并行进位方式设有并行进位产生逻辑,运算速度较快,但并行进位加法器通常比串行级联加法器占用更多的资源。
随着位数的增加,相同位数的并行加法器与串行加法器之间的差距也越来越大。
因此,在工程实践中,选择加法器往往需要在速度和容量之间进行折中,从而寻找到一个恰到好处的应用方案。
1.2实验要求
(1)用VHDL语言设计一位全加加器,文件名alladd1.VHD,调试无误后并生成符号
(2)建立顶层原理图文件adder4.bfd,调用已设计的一位全加器实现四位加法器。
图1-13位全加器原理图
1.3实验完成内容
实验步骤:
①创建工程
选择菜单栏File->NewProjectWizard,进入NewProjectWizard:
Introd-uction界面,单击Next,进入创建工程向导第一步,选择工程存放文件夹(这里为:
E:
/2132401/e2)和填写工程文件名(这里为:
adder),再单击Next,进入创建工程向导第二步,为工程添加文件,本次试验没有文件可以调用,直接单击Next,进入创建工程向导第三步,选择FPGA芯片类型,这里首先选择Cyclone系列,然后选择EP1C12Q240C8型号,单击下一步,进入创建工程向导第四步,选择仿真工具,这里不选择任何仿真工具,直接用quartus自带仿真工具即可,单击Next,进入进入创建工程向导最后一步,生成详细设置列表,确认无误后,单击Finish,完成创建工程操作。
见图1-2
图1-2创建工程报表
②设计文件输入
选择File->New->DesignFiles->VerilogFile.在文本输入框中输入以下代码:
libraryieee;
useieee.std_logic_1164.all;
entityalladd1is
port(a,b,ci:
instd_logic;
co,so:
outstd_logic);
endalladd1;
architecturebehavofalladd1is
begin
so<=axorbxorci;
co<=(aandb)or(aandci)or(bandci);
endbehav;
保存成adder1.VHD文件,编译无误后,再生成原理图元件,File->Create/Update->CreatSymbolFilesForCurrentFile,生成成功后,
图1-3创建1位全加器逻辑器件
再创建一个原理图文件,File->New->BlockDiagram/SchematicFile,进入设计原理图界面,在左侧选择元件,选择生成的元件,再依次按照下图选择元件和连好线。
图1-43位全加器电路原理图
连好线后,选择当前文件设为顶层文件,然后编译,编译成功后进行仿真操作。
③效果仿真
File->New->VectorWaveformFile,则依据图1-4的原理图文件仿真结果如下图:
图1-53位全加器仿真结果
从上图可以看出,此次仿真结果正确,接着可以进行下一步配置引脚操作。
④引脚分配
按下图所示分配引脚:
图1-6引脚分配图
分配好引脚后,进行全编译环节,单击
,全编译完成后,观察实验现象。
图1-7全编译
⑤实验现象
实验板上的拨档开关K1、K2、K3为A0A1A2为,K4、K5、K6为B0B1B2位,K7为Ci位,D1_1,D1_2,D1_3,D1_4为结果输出显示为S0S1S2S3位,如A2A1A0=010,B2B1B1=100时,结果应为S3S2S1S0=0110,所以对应的D1_4、D1_3、D1_2、D1_1的状态分别为灭、亮、亮、灭,验证了3位全加器的实验结果。
至此,整个3位全加器的实验流程结束。
实验二、编译码器的设计
2.1实验目的
(1)熟练使用QuartusII开发环境的基本操作
(2)巩固组合逻辑电路的设计方法
(3)掌握QuartusII中基于VHDL语言设计的流程
(4)掌握QuartusII中基于原理图设计的流程
(5)综合应用VHDL语言及原理图进行数字电路设计
编码器和译码器是数字系统中广泛使用的多输入多输出组合逻辑部件。
编码器的逻辑功能就是把输入的高低电平信号编成一个对应的二进制代码,经常使用的编码器有普通编码器和优先编码器两类。
在普通编码器中,任何时刻只允许输入一个编码信号,否则输出将发生混乱。
在优先编码器中,允许同时输入两个以上的编码信号,只对其中优先权最高的一个进行编码。
译码器是编码器的反操作,它的逻辑功能是将每个输入的二进制代码译成对应的输出高、低电平信号。
常用的译码器电路有二进制译码器、显示译码器和二-十进制译码器。
BCD码-八段数码管显示译码器是一个4线-8线译码器,数码管有共阴极和共阳极两种结构,下面只介绍共阴极结构。
共阴极结构见图,在共阴极结构中,各段发光二极管的阴极连在一起,将此公共点接地,某一段发光二极管的阴极为高电平时,该段发光。
显示0~9某个字符时,则要求在a~dp送固定的字段码。
例如输入信号为“0000”要使LED显示“0”,小数点不亮的话,则要求输出a、b、c、d、e,f各段为高电平,g和dp为低电平,字段码为“abcdefgdp”为“11111100”,其他数字显示以此类推。
2.2实验要求
用VHDL设计一个BCD码-八段数码管显示译码器,仿真验证结果
2.3实验完成内容
①创建工程
选择菜单栏File->NewProjectWizard,进入NewProjectWizard:
Introduct-ion界面,单击Next,进入创建工程向导第一步,选择工程存放文件夹(这里为:
H:
/2132401/e5)和填写工程文件名(这里为:
yimaqi),再单击Next,进入创建工程向导第二步,为工程添加文件,本次试验没有文件可以调用,直接单击Next,进入创建工程向导第三步,选择FPGA芯片类型,这里首先选择Cyclone系列,然后选择EP1C12Q240C8型号,单击下一步,进入创建工程向导第四步,选择仿真工具,这里不选择任何仿真工具,直接用quartus自带仿真工具即可,单击Next,进入进入创建工程向导最后一步,生成详细设置列表,确认无误后,单击Finish,完成创建工程操作。
见图2-1
图2-1创建工程报表
②设计文件输入
选择File->New->DesignFiles->VerilogFile.在文本输入框中输入以下代码:
libraryieee;
useieee.std_logic_1164.all;
entityyimaqiis
port(a:
instd_logic_vector(3downto0);
b:
outstd_logic_vector(7downto0));
endyimaqi;
architecturertlofyimaqiis
begin
process(a)
begin
caseais
when"0000"=>b<="11111100";
when"0001"=>b<="01100000";
when"0010"=>b<="11110010";
when"0011"=>b<="01100110";
when"0100"=>b<="10110110";
when"0101"=>b<="00111110";
when"0110"=>b<="11100000";
when"0111"=>b<="11111110";
when"1000"=>b<="11100110";
whenothers=>b<="ZZZZZZZZ";
endcase;
endprocess;
endrtl;
保存成yimaqi.VHD文件,直至编译无误。
图2-2编译完成
③功能仿真
File->New->VectorWaveformFile,仿真结果如下:
图2-3仿真结果
从仿真结果看出,与预期一致。
④引脚分配:
单击Assignments->PinPlaner,进入引脚分配界面,按下图所示分配好引脚。
图2-4引脚分配图
⑤全编译及程序下载
单击全编译按钮
,完成后如下图所示:
图2-5全编译
完成全编译后,进行程序下载。
观察实验现象。
⑥实验现象
通过拨码开关,直接在数码管上显示出来,如K1K2K3K4=0110,数码管显示6,K1K2K3K4=1001,数码管上显示9。
至此,译码器实验结束,验证了其译码预期功能。
实验三、触发器的设计
3.1实验目的
(1)熟练使用QuartusII开发环境的基本操作
(2)学习时序逻辑电路的设计方法
(3)掌握QuartusII中基于VHDL语言设计的流程
(4)掌握QuartusII中基于原理图设计的流程
(5)综合应用VHDL语言及原理图进行数字电路设计
时序逻辑电路的特点是:
输出不仅取决于当时的输入值,而且还与电路过去的状态有关。
在数字电路中,不但需要对信号进行算术和逻辑运算,还经常需要将运算结果保存起来,那么一般的时序电路的结构图就包括组合逻辑电路和存储电路两部分。
存储电路是通过各种存储单元来实现的,存储单元按照触发方式可以分为电平触发和边沿触发两种,电平触发的称为锁存器,边沿触发的称为触发器。
时序逻辑电路的基础电路包括触发器、锁存器、计数器、寄存器、储存器等。
在时序电路中,时钟信号是一个重要信号,任何时序电路都是以时钟为驱动信号,是时序电路的执行条件和同步信号。
时钟信号分为上升沿和下降沿,在对时钟边沿进行说明时,一定要指定是上升沿还是下降沿。
1、时序电路中时钟的描述:
(1)时钟信号上升沿到来的条件可写为:
IFIFclk'EVENTANDclk='1'ANDclk'LAST_VAULE=0;
(2)时钟信号下降沿的属性描述为:
IFclk'EVENTANDclk=0ANDclk'LAST_VALUE=1;
也可用IEEE库中标准程序包std_logic_1164内的预定义函数:
Rising_edge(clk)上升沿判断
Falling_edge(clk)下降沿判断
2、复位的描述:
时序电路的初始状态应由复位信号来设置。
根据复位信号对时序电路复位的操作不同,使其可以分为同步复位和异步复位。
(1)同步复位
在设计时序电路同步复位功能时,VHDL程序要把同步复位放在以时钟为敏感信号的进程中定义,且用IF语句来描述必要的复位条件。
常用的两种形式如下:
PROCESS(clock_signal)
BEGIN
IF(clock_edge_condition)THEN
IF(reset_condition)THENSignal_out<=reset_value;
ELSESignal_out<=signal_in;
--其他时序语句
ENDIF;
ENDIF;
ENDPROCESS;
(2)异步复位
所谓异步复位,就是当复位信号有效时,时序电路立即复位,与时钟信号无关。
异步复位方法有三个要点:
首先,在进程敏感信号表中应有clk,Reset同时存在;其次,用IF语句描述复位条件;最后,ELSIF程序段描述时钟信号边沿的条件,并加clk'EVENT属性。
常用形式如下:
PROCESS(reset_signal,clock_signal)
BEGIN
IF(reset_condition)THEN--复位条件成立
Signal_out<=reset_value;--复位赋予输出信号
ELSIF(clock_eventANDclock_edge_condition)THEN
Signal_out<=signal_in;--复位条件不成立
其他时序语句;--执行正常时序电路功能
ENDIF;
ENDPROCESS;
3.2实验要求
设计一个带有同步置位和异步复位的时钟上升沿触发的D触发器
3.3实验完成内容
①创建工程
选择菜单栏File->NewProjectWizard,进入NewProjectWizard:
Intro-duction界面,单击Next,进入创建工程向导第一步,选择工程存放文件夹(这里为:
G:
/2132401/e5)和填写工程文件名(这里为:
f),再单击Next,进入创建工程向导第二步,为工程添加文件,本次试验没有文件可以调用,直接单击Next,进入创建工程向导第三步,选择FPGA芯片类型,这里首先选择Cyclone系列,然后选择EP1C12Q240C8型号,单击下一步,进入创建工程向导第四步,选择仿真工具,这里不选择任何仿真工具,直接用quartus自带仿真工具即可,单击Next,进入进入创建工程向导最后一步,生成详细设置列表,确认无误后,单击Finish,完成创建工程操作。
见图3-1
图3-1创建工程
②设计文件输入
选择File->New->DesignFiles->VerilogFile.在文本输入框中输入以下代码:
libraryieee;
useieee.std_logic_1164.all;
entityflipflopis
port(d:
instd_logic;
clk:
instd_logic;
clrn:
instd_logic;
ena:
instd_logic;
q:
outstd_logic
);
endflipflop;
architectureaofflipflopis
signalq_signal:
std_logic;
begin
process(clk,clrn)
begin
ifclrn='0'then
q_signal<='0';
elsif(clk'eventandclk='1')then
ifena='1'then
q_signal<=d;
else
q_signal<=q_signal;
endif;
endif;
endprocess;
q<=q_signal;
enda;
保存成flipflop.V文件,直至编译无误。
图3-2编译完成
③功能仿真
File->New->VectorWaveformFile,仿真结果如下:
图3-3仿真结果
从仿真结果看出,与预期一致。
④本实验没有在硬件上实现,故不用分配引脚。
⑤全编译及程序下载:
单击全编译按钮
,完成后如下图所示,
图3-4全编译
至此,D触发器实验结束,从仿真结果可以看出,实验程序完成了D触发器的功能。
实验四、计数器的设计
4.1实验目的
(1)熟练使用QuartusII开发环境的基本操作
(2)熟练掌握时序逻辑电路的设计方法
(3)掌握QuartusII中基于VHDL语言设计的流程
(4)掌握QuartusII中基于原理图设计的流程
(5)综合应用VHDL语言及原理图进行数字电路设计
计数器是数字系统中,计数器应用十分广泛。
它不仅能记录输入时钟脉冲的个数,还可以实现分频、定时、产生节拍脉冲和脉冲序列等。
例如,计算机中的时序发生器、分频器、指令计数器等都要使用计数器。
计数器的种类很多。
按时钟脉冲输入方式的不同,可分为同步计数器和异步计数器;按进位体制的不同,可分为二进制计数器和非二进制计数器。
按计数方法分类,可以分为加法计数器、减法计数器和可逆计数器。
4.2实验要求
设计同步十进制计数器,要求计数器有同步使能信号,异步复位信号,进位指示。
4.3实验完成内容
①创建工程
选择菜单栏File->NewProjectWizard,进入NewProjectWizard:
Introduction界面,单击Next,进入创建工程向导第一步,选择工程存放文件夹(这里为:
G:
/2132301/e4)和填写工程文件名(这里为:
jishuqi),再单击Next,进入创建工程向导第二步,为工程添加文件,本次试验没有文件可以调用,直接单击Next,进入创建工程向导第三步,选择FPGA芯片类型,这里首先选择Cyclone系列,然后选择EP1C12Q240C8型号,单击下一步,进入创建工程向导第四步,选择仿真工具,这里不选择任何仿真工具,直接用quartus自带仿真工具即可,单击Next,进入进入创建工程向导最后一步,生成详细设置列表,确认无误后,单击Finish,完成创建工程操作(见图4-1):
图4-1创建工程报表
②设计文件输入
选择File->New->DesignFiles->VerilogFile.在文本输入框中输入以下代码:
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_arith.all;
useieee.std_logic_unsigned.all;
entityjisuqiis
port(clk,reset,enable:
instd_logic;
a,b,c,d,e,f,g:
outstd_logic;
tp:
outstd_logic_vector(0to3);
xian:
outstd_logic_vector(0to6);
count:
outstd_logic);
endjisuqi;
architecturexuofjisuqiis
signaltemp:
std_logic_vector(0to3);
signalxianshi:
std_logic_vector(0to6);
begin
process(clk,reset,enable)
begin
if(reset='1')thentemp<="0000";
elsif(enable='1')then
if(clk'eventandclk='1')
thenif(temp<="1000")thentemp<=temp+1;
elsetemp<="0000";
endif;
endif;
endif;
endprocess;
process(temp)
begin
casetempis
when"0000"=>xianshi<="1111110";count<='0';
when"0001"=>xianshi<="0110000";count<='0';
when"0010"=>xianshi<="1101101";count<='0';
when"0011"=>xianshi<="1111001";count<='0';
when"0100"=>xianshi<="0110011";count<='0';
when"0101"=>xianshi<="1011011";count<='0';
when"0110"=>xianshi<="0011111";count<='0';
when"0111"=>xianshi<="1110000";count<='0';
when"1000"=>xianshi<="1111111";count<='0';
when"1001"=>xianshi<="1110011";count<='1';
whenothers=>xianshi<="0000000";count<='0';
endcase;
endprocess;
保存成jishuqi.VHD文件,直至编译无误。
图4-2编译完成
③功能仿真
File->New->VectorWaveformFile,仿真结果如下:
图4-3仿真结果
从仿真结果看出,与预期一致。
④引脚分配:
单击Assignments->PinPlaner,进入引脚分配界面,按下图所示分配好引脚。
图4-4引脚分配
⑤全编译及程序下载
单击全编译按钮
,完成后如下图所示:
图4-5全编译
⑥实验现象
下载程序后,通过设置拨码开关K1(使能EN)设置为1,拨码开关K2(异步复位端Rst)设置为1,数码管开始从0开始显示,一直计数到9,再来一个脉冲后,Led灯亮,表示进位输出。
当在计数过程中,K1为0时,则数码管停留在那个数。
而当K2为0时,数码管立即从0开始计数
至此,计数器实验结束,验证了其计数预期功能。
实验五、数据操作工程
5.1实验目的
(1)掌握原理图设计输入方法
(2)熟悉Megfunction库的参数化宏功能模块,并会利用宏模块进行电路设计。
5.2实验要求
本实验数据工程的模块划分为:
时钟模块的设计,数据抽取模块的设计,数据选择操作模块的设计
5.3实验完成内容
①创建工程
选择菜单栏File->NewProjectWizard,进入NewProjectWizard:
Introdu-ction界面,单击Next,进入创建工程向导第一步,选择工程存放文件夹(这里为:
G:
/2132401/sy7)和填写工程文件名(这里为:
SpreadSpectrum),再单击Next,进入创建工程向导第二步,为工程添加文件,本次试验没有文件可以调用,直接单击Next,进入创建工程向导第三步,选择FPGA芯片类型,这里首先选择Cyclone系列,然后选择EP1C12Q240C8型号,单击下一步,进入创建工程向导第四步,选择仿真工具,这里不选择任何仿真工具,直接用quartus自带仿真工具即可,单击Next,进入创建工程向导最后一步,生成详细设置列表,确认无误后,单击Finish,完成创建工程操作(见图5-1):
图5-1创建工程
②设计文件输入
选择File->New->Block
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- fpga 课程 实验 报告