VHDL语言与FPGA设计 实验报告.docx

上传人:b****6 文档编号:8758564 上传时间:2023-05-14 格式:DOCX 页数:34 大小:245.79KB
下载 相关 举报
VHDL语言与FPGA设计 实验报告.docx_第1页
第1页 / 共34页
VHDL语言与FPGA设计 实验报告.docx_第2页
第2页 / 共34页
VHDL语言与FPGA设计 实验报告.docx_第3页
第3页 / 共34页
VHDL语言与FPGA设计 实验报告.docx_第4页
第4页 / 共34页
VHDL语言与FPGA设计 实验报告.docx_第5页
第5页 / 共34页
VHDL语言与FPGA设计 实验报告.docx_第6页
第6页 / 共34页
VHDL语言与FPGA设计 实验报告.docx_第7页
第7页 / 共34页
VHDL语言与FPGA设计 实验报告.docx_第8页
第8页 / 共34页
VHDL语言与FPGA设计 实验报告.docx_第9页
第9页 / 共34页
VHDL语言与FPGA设计 实验报告.docx_第10页
第10页 / 共34页
VHDL语言与FPGA设计 实验报告.docx_第11页
第11页 / 共34页
VHDL语言与FPGA设计 实验报告.docx_第12页
第12页 / 共34页
VHDL语言与FPGA设计 实验报告.docx_第13页
第13页 / 共34页
VHDL语言与FPGA设计 实验报告.docx_第14页
第14页 / 共34页
VHDL语言与FPGA设计 实验报告.docx_第15页
第15页 / 共34页
VHDL语言与FPGA设计 实验报告.docx_第16页
第16页 / 共34页
VHDL语言与FPGA设计 实验报告.docx_第17页
第17页 / 共34页
VHDL语言与FPGA设计 实验报告.docx_第18页
第18页 / 共34页
VHDL语言与FPGA设计 实验报告.docx_第19页
第19页 / 共34页
VHDL语言与FPGA设计 实验报告.docx_第20页
第20页 / 共34页
亲,该文档总共34页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

VHDL语言与FPGA设计 实验报告.docx

《VHDL语言与FPGA设计 实验报告.docx》由会员分享,可在线阅读,更多相关《VHDL语言与FPGA设计 实验报告.docx(34页珍藏版)》请在冰点文库上搜索。

VHDL语言与FPGA设计 实验报告.docx

VHDL语言与FPGA设计实验报告

VHDL语言与FPGA设计

实验报告

 

学院:

班级:

姓名:

学号:

指导老师:

常州工学院

实验1:

2选1多路选择器设计

一、实验目的:

熟悉QuartusⅡ的VHDL文本设计流程全过程,学习简单组合电路的设计、仿真和硬件测试。

二、实验内容:

1.首先利用QuartusⅡ完成2选1多路选择器的文本编辑输入(mux21a.vhd)和仿真测试等步骤,给出仿真波形。

最后在实验系统上进行硬件测试,验证本项设计的功能。

2.引脚锁定以及硬件下载测试。

建议选实验电路模式No.5,用键1(PIO0)控制s(或s接clock2);a和b分别接clock0和clock5;输出信号y接扬声器speaker。

通过短路帽选择clock0接256Hz信号,clock5接1024Hz。

最后进行编译、下载和硬件测试实验(通过选择键1,控制a、b,可使扬声器输出不同音调)。

逻辑电路图

三、程序设计:

libraryieee;--

useieee.std_logic_1164.all;--

ENTITYmux21aIS

PORT(a,b,s:

INBIT;

y:

OUTBIT);

ENDENTITYmux21a;

ARCHITECTUREoneOFmux21aIS

BEGIN

PROCESS(a,b,s)

BEGIN

IFs='0'THEN

y<=a;ELSE

y<=b;

ENDIF;

ENDPROCESS;

ENDARCHITECTUREone;

程序分析:

这是一个2选1多路选择器,a和b分别为两个数字输入端的端口名,s为通道选择控制信号输入端的端口名,y为输出端的端口名。

四、软件编译

选择PeocessingStartCompilation命令,启动全程编译。

编译无错后的报告信息

五、时序仿真

1)打开波形编辑器

选择File->new,选择vectorwaveformfile。

2)设定仿真时间区域

在Edit->endtime,在弹出的窗口time栏处输入50,单位选“us”。

3)波形文件存盘,默认文件名为mux21a.vwf

4)将此工程mux21a的端口信号名选入波形编辑器中

View->utilitywindows项的NodeFinder选项。

点击“list”。

5)将端口信号名拖入波形编辑器中,拖完信号后可以关掉浮动窗口

6)按键盘上“CTRL+W”,显示全部仿真时间区域。

7)编辑输入波形(输入激励信号)

8)仿真器参数设置

9)启动仿真器。

提示是否保存,选择“是”,仿真成功后选“确定”。

10)观察仿真结果

按键盘上“CTRL+W”,在全部仿真时间区域内观察波形,并分析波形图显示的逻辑功能是否正确。

电路时序波形图

时序分析:

当s=0时,y口输出a,当s=1时,y口输出b。

六、硬件测试

打开mux21a命名的工程,应选择File的OpenProject命令。

选择Assignments->assingnmenteditor项。

Category栏中选择locations,然后双击TO栏的《new》,选择NodeFinder。

在出现的对话框左边框中选择需要锁定的端口信号名,这些信号跳到右栏,单击OK按键后,这些信号名即进入信号编辑栏。

接着在表框中分别键入需要锁定的端口引脚名。

锁定引脚后,必须重新编译,启动Processing->StartCcomplication,编译完成后可下载配置文件。

引脚锁定图

使用USB编程器下载配置文件

首先安装USB编程器的驱动程序。

选择自己搜索驱动程序。

备注:

若没有正确安装驱动程序,USBBlaster编程器不可选,这时必须到硬件设备管理器中删除打问号的USB驱动程序,重新正确安装。

将编译产生的SOF格式配置文件配置进FPGA中。

在MODE选择JTAG。

编程器选择USBBlaster下载方式。

点击“start”将配置文件下载,然后进行硬件测试。

程序下载完成后,选择实验电路模式5,通过短路帽选择clock0接256Hz信号,clock5接1024Hz信号。

通过键一控制s,当键1进行切换时,明显能听到扬声器发出两种不同音调的声音。

 

实验2:

十进制计数器设计

一、实验目的

学习计数器的设计、仿真和硬件测试,进一步熟悉VHDL设计技术。

二、实验原理

对于异步清零和同步加载与时钟使能的计数器:

当时钟信号CLK、复位信号RST、时钟使能信号EN或加载信号LOAD中任一信号发生变化,都将启动进程。

此时如果RST为‘0’,将计数器清零,该操作独立于CLK,如果RST为‘1’,则看是否有时钟信号的上升沿,如果有且EN=‘1’,接下去是判断加载控制信号LOAD的电平,如果LOAD为低电平,则允许将输入口的四位加载数据置入计数器中,以便计数器在此基础上累计计数。

如果LOAD为高电平,则允许计数器计数;此时若数值小于9,计数器将进行正常计数,否则计数器清零。

但如果EN=‘0’,则计数器保持原值不变。

三、实验内容

1.在QuartusⅡ上对实验程序进行编辑、编译、综合、适配、仿真。

说明例中各语句的作用,详细描述示例的功能特点,给出其所有信号的时序仿真波形。

2.引脚锁定以及硬件下载测试。

建议选实验电路模式No.5,主时钟CLK接CLK0,EN接键1,RST接键2,(LOAD接键3,DATA接键5,6,7,8),COUT接发光管D1,4位输出总线CQ[3..0]连接数码管1(PIO19、PIO18、PIO17、PIO16)显示。

引脚锁定后进行编译、下载和硬件测试。

逻辑电路图

四、程序设计

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYCNT10IS

PORT(CLK,RST,EN:

INSTD_LOGIC;

CQ:

OUTSTD_LOGIC_VECTOR(3DOWNTO0);

COUT:

OUTSTD_LOGIC);

ENDCNT10;

ARCHITECTUREbehavOFCNT10IS

BEGIN

PROCESS(CLK,RST,EN)

VARIABLECQI:

STD_LOGIC_VECTOR(3DOWNTO0);

BEGIN

IFRST='1'THENCQI:

=(OTHERS=>'0');--计数器异步复位

ELSIFCLK'EVENTANDCLK='1'THEN--检测时钟上升沿

IFEN='1'THEN--检测是否允许计数(同步使能)

IFCQI<9THENCQI:

=CQI+1;--允许计数,检测是否小于9

ELSECQI:

=(OTHERS=>'0');--大于9,计数值清零

ENDIF;

ENDIF;

ENDIF;

IFCQI=9THENCOUT<='1';--计数大于9,输出进位信号

ELSECOUT<='0';

ENDIF;

CQ<=CQI;--将计数值向端口输出

ENDPROCESS;

ENDbehave

五、软件编译

选择PeocessingStartCompilation命令,启动全程编译。

编译无错后的报告信息

六、时序仿真

1)打开波形编辑器

选择File->new,选择vectorwaveformfile。

2)设定仿真时间区域

在Edit->endtime,在弹出的窗口time栏处输入50,单位选“us”。

3)波形文件存盘,默认文件名为CNT10.vwf

4)将此工程CNT10的端口信号名选入波形编辑器中

View->utilitywindows项的NodeFinder选项。

点击“list”。

5)将端口信号名拖入波形编辑器中,拖完信号后可以关掉浮动窗口

6)按键盘上“CTRL+W”,显示全部仿真时间区域。

7)编辑输入波形(输入激励信号)

8)仿真器参数设置

9)启动仿真器。

提示是否保存,选择“是”,仿真成功后选“确定”。

10)观察仿真结果

按键盘上“CTRL+W”,在全部仿真时间区域内观察波形,并分析波形图显示的逻辑功能是否正确。

电路时序波形图

七、硬件测试

打开CNT10命名的工程,应选择File的OpenProject命令。

选择Assignments->assingnmenteditor项。

Category栏中选择locations,然后双击TO栏的《new》,选择NodeFinder。

在出现的对话框左边框中选择需要锁定的端口信号名,这些信号跳到右栏,单击OK按键后,这些信号名即进入信号编辑栏。

接着在表框中分别键入需要锁定的端口引脚名。

锁定引脚后,必须重新编译,启动Processing->StartCcomplication,编译完成后可下载配置文件。

引脚锁定图

使用USB编程器下载配置文件

首先安装USB编程器的驱动程序。

选择自己搜索驱动程序。

备注:

若没有正确安装驱动程序,USBBlaster编程器不可选,这时必须到硬件设备管理器中删除打问号的USB驱动程序,重新正确安装。

将编译产生的SOF格式配置文件配置进FPGA中。

在MODE选择JTAG。

编程器选择USBBlaster下载方式。

点击“start”将配置文件下载,然后进行硬件测试。

显示0-9,即十进制计数器,逢十进位灯闪烁一次

 

实验3:

七段数码显示译码器设计

一、实验目的

学习7段数码显示译码器设计;学习VHDL的CASE语句应用及多层次设计方法。

二、实验原理

7段数码是纯组合电路,通常的小规模专用IC,如74或4000系列的器件只能作十进制BCD码译码,然而数字系统中的数据处理和运算都是2进制的,所以输出表达都是16进制的,为了满足16进制数的译码显示,最方便的方法就是利用译码程序在FPGA/CPLD中来实现。

实验参考程作为7段译码器,输出信号LED7S的7位分别接数码管的7个段,高位在左,低位在右。

例如当LED7S输出为“1101101”时,数码管的7个段:

g、f、e、d、c、b、a分别接1、1、0、1、1、0、1;接有高电平的段发亮,于是数码管显示“5”。

注意,这里没有考虑表示小数点的发光管,如果要考虑,需要增加段h,LED7S:

OUTSTD_LOGIC_VECTOR(6DOWNTO0)应改为(7DOWNTO0)。

三、实验内容

1.说明程序中各语句的含义,以及该例的整体功能。

在QuartusII上对该例进行编辑、编译、综合、适配、仿真,给出其所有信号的时序仿真波形。

提示:

用输入总线的方式给出输入信号仿真数据。

2.引脚锁定及硬件测试。

建议选实验电路模式No.1,用数码管8(PIO31-PIO28)和数码管7(PIO27-PIO24)显示译码输出led7s,键1(PIO3-PIO0)控制输入a,硬件验证译码器的工作性能。

逻辑电路图

四、程序设计

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

ENTITYDECL7SIS

PORT(A:

INSTD_LOGIC_VECTOR(3DOWNTO0);

LED7S:

OUTSTD_LOGIC_VECTOR(6DOWNTO0));

END;

ARCHITECTUREoneOFDECL7SIS

BEGIN

PROCESS(A)

BEGIN

CASEAIS

WHEN"0000"=>LED7S<="0111111";

WHEN"0001"=>LED7S<="0000110";

WHEN"0010"=>LED7S<="1011011";

WHEN"0011"=>LED7S<="1001111";

WHEN"0100"=>LED7S<="1100110";

WHEN"0101"=>LED7S<="1101101";

WHEN"0110"=>LED7S<="1111101";

WHEN"0111"=>LED7S<="0000111";

WHEN"1000"=>LED7S<="1111111";

WHEN"1001"=>LED7S<="1101111";

WHEN"1010"=>LED7S<="1110111";

WHEN"1011"=>LED7S<="1111100";

WHEN"1100"=>LED7S<="0111001";

WHEN"1101"=>LED7S<="1011110";

WHEN"1110"=>LED7S<="1111001";

WHEN"1111"=>LED7S<="1110001";

WHENOTHERS=>NULL;

ENDCASE;

ENDPROCESS;

END;

五、软件编译

选择PeocessingStartCompilation命令,启动全程编译。

编译无错后的报告信息

六、时序仿真

1)打开波形编辑器

选择File->new,选择vectorwaveformfile。

2)设定仿真时间区域

在Edit->endtime,在弹出的窗口time栏处输入50,单位选“us”。

3)波形文件存盘,默认文件名为DECL7S.vwf

4)将此工程DECL7S的端口信号名选入波形编辑器中

View->utilitywindows项的NodeFinder选项。

点击“list”。

5)将端口信号名拖入波形编辑器中,拖完信号后可以关掉浮动窗口

6)按键盘上“CTRL+W”,显示全部仿真时间区域。

7)编辑输入波形(输入激励信号)

8)仿真器参数设置

9)启动仿真器。

提示是否保存,选择“是”,仿真成功后选“确定”。

10)观察仿真结果

按键盘上“CTRL+W”,在全部仿真时间区域内观察波形,并分析波形图显示的逻辑功能是否正确。

电路时序波形图

七、硬件测试

打开DECL7S命名的工程,应选择File的OpenProject命令。

选择Assignments->assingnmenteditor项。

Category栏中选择locations,然后双击TO栏的《new》,选择NodeFinder。

在出现的对话框左边框中选择需要锁定的端口信号名,这些信号跳到右栏,单击OK按键后,这些信号名即进入信号编辑栏。

接着在表框中分别键入需要锁定的端口引脚名。

锁定引脚后,必须重新编译,启动Processing->StartCcomplication,编译完成后可下载配置文件。

引脚锁定图

使用USB编程器下载配置文件

首先安装USB编程器的驱动程序。

选择自己搜索驱动程序。

备注:

若没有正确安装驱动程序,USBBlaster编程器不可选,这时必须到硬件设备管理器中删除打问号的USB驱动程序,重新正确安装。

将编译产生的SOF格式配置文件配置进FPGA中。

在MODE选择JTAG。

编程器选择USBBlaster下载方式。

点击“start”将配置文件下载,然后进行硬件测试。

通过对仿真结果的分析,当输入端A=“0000”时,输出端DECL7S=“3F”,数码管显示“0”,当输入端A=“0001”时,输出端DECL7S=“06”,数码管显示“1”……。

 

实验4:

数控分频器设计

一、实验目的

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

二、实验原理

数控分频器的功能就是当在输入端给定不同输入数据时,将对输入的时钟信号有不同的分频比,数控分频器就是用计数值可并行预置的加法计数器设计完成的,方法是将计数溢出位与预置数加载输入信号相接即可。

三、实验内容

在实验系统上硬件验证设计程序的功能。

可选实验电路模式No.1;键2、键1作为输入8位预置数D(PIO7-PIO0);CLK由clock0输入,频率选65536Hz或更高(确保分频后落在音频范围);输出FOUT接扬声器(SPKER)。

编译下载后进行硬件测试:

改变键2/键1的输入值,可听到不同音调的声音。

逻辑电路图

四、程序设计

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYDVFIS

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="11111111"THEN

CNT8:

=D;--当CNT8计数计满时,输入数据D被同步预置给计数器CNT8

FULL<='1';--同时使溢出标志信号FULL输出为高电平

ELSECNT8:

=CNT8+1;--否则继续作加1计数

FULL<='0';--且输出溢出标志信号FULL为低电平

ENDIF;

ENDIF;

ENDPROCESSP_REG;

P_DIV:

PROCESS(FULL)

VARIABLECNT2:

STD_LOGIC;

BEGIN

IFFULL'EVENTANDFULL='1'THEN

CNT2:

=NOTCNT2;--如果溢出标志信号FULL为高电平,D触发器输出取反

IFCNT2='1'THENFOUT<='1';ELSEFOUT<='0';

ENDIF;

ENDIF;

ENDPROCESSP_DIV;

END;

五、软件编译

选择PeocessingStartCompilation命令,启动全程编译。

编译无错后的报告信息

六、时序仿真

1)打开波形编辑器

选择File->new,选择vectorwaveformfile。

2)设定仿真时间区域

在Edit->endtime,在弹出的窗口time栏处输入50,单位选“us”。

3)波形文件存盘,默认文件名为DVF.vwf

4)将此工程DVF的端口信号名选入波形编辑器中

View->utilitywindows项的NodeFinder选项。

点击“list”。

5)将端口信号名拖入波形编辑器中,拖完信号后可以关掉浮动窗口

6)按键盘上“CTRL+W”,显示全部仿真时间区域。

7)编辑输入波形(输入激励信号)

8)仿真器参数设置

9)启动仿真器。

提示是否保存,选择“是”,仿真成功后选“确定”。

10)观察仿真结果

按键盘上“CTRL+W”,在全部仿真时间区域内观察波形,并分析波形图显示的逻辑功能是否正确。

电路时序波形图

七、硬件测试

打开DVF命名的工程,应选择File的OpenProject命令。

选择Assignments->assingnmenteditor项。

Category栏中选择locations,然后双击TO栏的《new》,选择NodeFinder。

在出现的对话框左边框中选择需要锁定的端口信号名,这些信号跳到右栏,单击OK按键后,这些信号名即进入信号编辑栏。

接着在表框中分别键入需要锁定的端口引脚名。

锁定引脚后,必须重新编译,启动Processing->StartCcomplication,编译完成后可下载配置文件。

引脚锁定图

使用USB编程器下载配置文件

首先安装USB编程器的驱动程序。

选择自己搜索驱动程序。

备注:

若没有正确安装驱动程序,USBBlaster编程器不可选,这时必须到硬件设备管理器中删除打问号的USB驱动程序,重新正确安装。

将编译产生的SOF格式配置文件配置进FPGA中。

在MODE选择JTAG。

编程器选择USBBlaster下载方式。

点击“start”将配置文件下载,然后进行硬件测试。

改变键2/键1的输入值,可听到不同音调的声音。

 

实验5:

4位十进制频率计设计

一、实验目的

熟悉VHDL语言模块化设计和原理图输入方法的使用,掌握更复杂的层次化设计技术和数字系统设计方法。

完成4位十进制频率计的设计。

二、实验原理

设计VHDL的十进制计数器模块,连接它们的计数进位,用4个计数模块就能组成一个4位有时钟使能的计数器;用VHDL测频控制器控制输入信号和计数闸门,完成频率测量。

在仿真过程中应该注意它们可能的毛刺现象,最后按照设计流程和方法完成全部设计。

顶层原理图

三、实验内容

首先完成4位频率计的设计,然后进行硬件测试,建议选择电路模式No.5;数码2和1显示输出频率值,待测频率F_IN接clock0;测频控制时钟CLK接clock2,仿真测试该频率计待测信号的最高频率,并与硬件实测的结果进行比较。

四、程序设计

测频控制程序模块:

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYTESTCTLIS

PORT(CLKK:

INSTD_LOGIC;

CNT_EN,RST_CNT,LOAD:

OUTSTD_LOGIC);

ENDTESTCTL;

ARCHITECTUREbehavOFTESTCTLIS

SIGNALDIV2CLK:

STD_LOGIC;

BEGIN

PROCESS(CLKK)

BEGIN

IFCLKK'EVENTANDCLKK='1'THENDIV2CLK<=NOTDIV2CLK;

ENDIF;

ENDPROCESS;

PROCESS(CLKK,DIV2CLK)

BEGIN

IFCLKK='0'ANDDIV2CLK='0'THENRST_CNT<='1';

ELSERST_CNT<='0';

ENDIF;

ENDPROCESS;

LOAD<=NOTDIV2CLK;

CNT_EN<=DIV2CLK;

ENDbehav;

计数器程序模块:

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYCNT10IS

PORT(CLK,RST,EN:

INSTD_LOGIC;

CQ:

OUTSTD_LOGIC_VEC

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

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

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

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