《VHDL语言与FPGA设计_实验报告.docx》由会员分享,可在线阅读,更多相关《VHDL语言与FPGA设计_实验报告.docx(30页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、VHDL语言与FPGA设计实验报告 学院:班级:姓名:学号:指导老师:常州工学院实验1:2选1多路选择器设计一、 实验目的:熟悉Quartus的VHDL文本设计流程全过程,学习简单组合电路的设计、仿真和硬件测试。二、 实验内容:1.首先利用Quartus完成2选1多路选择器的文本编辑输入(mux21a.vhd)和仿真测试等步骤,给出仿真波形。最后在实验系统上进行硬件测试,验证本项设计的功能。2.引脚锁定以及硬件下载测试。建议选实验电路模式,用键1(PIO0)控制s或s接clock2;a和b分别接clock0和clock5;输出信号y接扬声器speaker。通过短路帽选择clock0接256Hz
2、信号,clock5接1024Hz。最后进行编译、下载和硬件测试实验通过选择键1,控制a、b,可使扬声器输出不同音调。逻辑电路图三、程序设计:library ieee;-use ieee.std_logic_1164.all;-ENTITY mux21a IS PORT ( a, b, s: IN BIT; y : OUT BIT );END ENTITY mux21a;ARCHITECTURE one OF mux21a IS BEGIN PROCESS (a,b,s) BEGIN IF s = 0 THEN y = a ; ELSE y new,选择vector waveform file。
3、2设定仿真时间区域在Edit-end time,在弹出的窗口time栏处输入50,单位选“us。3波形文件存盘,默认文件名为mux21a.vwf4将此工程mux21a的端口信号名选入波形编辑器中View-utility windows项的Node Finder选项。点击“list。5将端口信号名拖入波形编辑器中,拖完信号后可以关掉浮动窗口6按键盘上“CTRL+W,显示全部仿真时间区域。7编辑输入波形(输入鼓励信号)8) 仿真器参数设置9启动仿真器。提示是否保存,选择“是,仿真成功后选“确定。10) 观察仿真结果按键盘上“CTRL+W,在全部仿真时间区域内观察波形,并分析波形图显示的逻辑功能是否
4、正确。电路时序波形图时序分析:当s=0时,y口输出a,当s=1时,y口输出b。六、硬件测试翻开mux21a命名的工程,应选择File的Open Project命令。选择Assignments-assingnment editor项。Category栏中选择locations,然后双击TO栏的?new?,选择Node Finder。在出现的对话框左边框中选择需要锁定的端口信号名,这些信号跳到右栏,单击OK按键后,这些信号名即进入信号编辑栏。接着在表框中分别键入需要锁定的端口引脚名。锁定引脚后,必须重新编译,启动Processing-Start Ccomplication,编译完成后可下载配置文件
5、。引脚锁定图使用USB编程器下载配置文件首先安装USB编程器的驱动程序。选择自己搜索驱动程序。备注:假设没有正确安装驱动程序,USB Blaster 编程器不可选,这时必须到硬件设备管理器中删除打问号的USB驱动程序,重新正确安装。将编译产生的SOF格式配置文件配置进FPGA中。在MODE选择JTAG。编程器选择USB Blaster下载方式。点击“start将配置文件下载,然后进行硬件测试。程序下载完成后,选择实验电路模式5,通过短路帽选择clock0接256Hz信号,clock5接1024Hz信号。通过键一控制s,当键1进行切换时,明显能听到扬声器发出两种不同音调的声音。实验2:十进制计数
6、器设计一、 实验目的学习计数器的设计、仿真和硬件测试,进一步熟悉VHDL设计技术。二、 实验原理对于异步清零和同步加载与时钟使能的计数器:当时钟信号CLK、复位信号RST、时钟使能信号EN或加载信号LOAD中任一信号发生变化,都将启动进程。此时如果RST为0,将计数器清零,该操作独立于CLK,如果RST为,那么看是否有时钟信号的上升沿,如果有且EN=,接下去是判断加载控制信号LOAD的电平,如果LOAD为低电平,那么允许将输入口的四位加载数据置入计数器中,以便计数器在此根底上累计计数。如果LOAD为高电平,那么允许计数器计数;此时假设数值小于9,计数器将进行正常计数,否那么计数器清零。但如果E
7、N0,那么计数器保持原值不变。三、 实验内容1.在Quartus上对实验程序进行编辑、编译、综合、适配、仿真。说明例中各语句的作用,详细描述例如的功能特点,给出其所有信号的时序仿真波形。2.引脚锁定以及硬件下载测试。建议选实验电路模式,主时钟CLK接CLK0,EN接键1,RST接键2,LOAD接键3,DATA接键5,6,7,8,COUT接发光管D1,4位输出总线CQ3.0连接数码管1PIO19、PIO18、PIO17、PIO16显示。引脚锁定后进行编译、下载和硬件测试。逻辑电路图四、程序设计LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.ST
8、D_LOGIC_UNSIGNED.ALL;ENTITY CNT10 IS PORT (CLK,RST,EN : IN STD_LOGIC; CQ : OUT STD_LOGIC_VECTOR(3 DOWNTO 0); COUT : OUT STD_LOGIC ); END CNT10;ARCHITECTURE behav OF CNT10 ISBEGIN PROCESS(CLK, RST, EN) VARIABLE CQI : STD_LOGIC_VECTOR(3 DOWNTO 0); BEGIN IF RST = 1 THEN CQI := (OTHERS =0) ; -计数器异步复位 EL
9、SIF CLKEVENT AND CLK=1 THEN -检测时钟上升沿 IF EN = 1 THEN -检测是否允许计数同步使能 IF CQI 0); -大于9,计数值清零 END IF; END IF; END IF; IF CQI = 9 THEN COUT = 1; -计数大于9,输出进位信号 ELSE COUT = 0; END IF; CQ new,选择vector waveform file。2设定仿真时间区域在Edit-end time,在弹出的窗口time栏处输入50,单位选“us。3波形文件存盘,默认文件名为4将此工程CNT10的端口信号名选入波形编辑器中View-util
10、ity windows项的Node Finder选项。点击“list。5将端口信号名拖入波形编辑器中,拖完信号后可以关掉浮动窗口6按键盘上“CTRL+W,显示全部仿真时间区域。7编辑输入波形(输入鼓励信号)8) 仿真器参数设置9启动仿真器。提示是否保存,选择“是,仿真成功后选“确定。10) 观察仿真结果按键盘上“CTRL+W,在全部仿真时间区域内观察波形,并分析波形图显示的逻辑功能是否正确。电路时序波形图七、硬件测试翻开CNT10命名的工程,应选择File的Open Project命令。选择Assignments-assingnment editor项。Category栏中选择location
11、s,然后双击TO栏的?new?,选择Node Finder。在出现的对话框左边框中选择需要锁定的端口信号名,这些信号跳到右栏,单击OK按键后,这些信号名即进入信号编辑栏。接着在表框中分别键入需要锁定的端口引脚名。锁定引脚后,必须重新编译,启动Processing-Start Ccomplication,编译完成后可下载配置文件。引脚锁定图使用USB编程器下载配置文件首先安装USB编程器的驱动程序。选择自己搜索驱动程序。备注:假设没有正确安装驱动程序,USB Blaster 编程器不可选,这时必须到硬件设备管理器中删除打问号的USB驱动程序,重新正确安装。将编译产生的SOF格式配置文件配置进FP
12、GA中。在MODE选择JTAG。编程器选择USB Blaster下载方式。点击“start将配置文件下载,然后进行硬件测试。显示0-9,即十进制计数器,逢十进位灯闪烁一次实验3:七段数码显示译码器设计一、实验目的学习7段数码显示译码器设计;学习VHDL的CASE语句应用及多层次设计方法。二、实验原理7段数码是纯组合电路,通常的小规模专用IC,如74或4000系列的器件只能作十进制BCD码译码,然而数字系统中的数据处理和运算都是2进制的,所以输出表达都是16进制的,为了满足16进制数的译码显示,最方便的方法就是利用译码程序在FPGA/CPLD中来实现。实验参考程作为7段译码器,输出信号LED7S
13、的7位分别接数码管的7个段,高位在左,低位在右。例如当LED7S输出为“1101101”时,数码管的7个段:g、f、e、d、c、b、a分别接1、1、0、1、1、0、1;接有高电平的段发亮,于是数码管显示“5”。注意,这里没有考虑表示小数点的发光管,如果要考虑,需要增加段h, LED7S:OUT STD_LOGIC_VECTOR(6 DOWNTO 0)应改为 (7 DOWNTO 0)。三、实验内容1.说明程序中各语句的含义,以及该例的整体功能。在QuartusII上对该例进行编辑、编译、综合、适配、仿真,给出其所有信号的时序仿真波形。提示:用输入总线的方式给出输入信号仿真数据。2.引脚锁定及硬件
14、测试。建议选实验电路模式,用数码管8(PIO31-PIO28)和数码管7(PIO27-PIO24)显示译码输出led7s,键1(PIO3-PIO0)控制输入a,硬件验证译码器的工作性能。逻辑电路图四、程序设计LIBRARY IEEE ; USE IEEE.STD_LOGIC_1164.ALL ; ENTITY DECL7S IS PORT ( A : IN STD_LOGIC_VECTOR(3 DOWNTO 0); LED7S : OUT STD_LOGIC_VECTOR(6 DOWNTO 0) ) ; END ; ARCHITECTURE one OF DECL7S IS BEGIN PRO
15、CESS( A ) BEGIN CASE A IS WHEN 0000 = LED7S LED7S LED7S LED7S LED7S LED7S LED7S LED7S LED7S LED7S LED7S LED7S LED7S LED7S LED7S LED7S NULL ; END CASE ; END PROCESS ; END ; 五、软件编译选择PeocessingStart Compilation命令,启动全程编译。编译无错后的报告信息六、时序仿真1翻开波形编辑器选择File-new,选择vector waveform file。2设定仿真时间区域在Edit-end time,在
16、弹出的窗口time栏处输入50,单位选“us。3波形文件存盘,默认文件名为DECL7S.vwf4将此工程DECL7S的端口信号名选入波形编辑器中View-utility windows项的Node Finder选项。点击“list。5将端口信号名拖入波形编辑器中,拖完信号后可以关掉浮动窗口6按键盘上“CTRL+W,显示全部仿真时间区域。7编辑输入波形(输入鼓励信号)8) 仿真器参数设置9启动仿真器。提示是否保存,选择“是,仿真成功后选“确定。10) 观察仿真结果按键盘上“CTRL+W,在全部仿真时间区域内观察波形,并分析波形图显示的逻辑功能是否正确。电路时序波形图七、硬件测试翻开DECL7S命
17、名的工程,应选择File的Open Project命令。选择Assignments-assingnment editor项。Category栏中选择locations,然后双击TO栏的?new?,选择Node Finder。在出现的对话框左边框中选择需要锁定的端口信号名,这些信号跳到右栏,单击OK按键后,这些信号名即进入信号编辑栏。接着在表框中分别键入需要锁定的端口引脚名。锁定引脚后,必须重新编译,启动Processing-Start Ccomplication,编译完成后可下载配置文件。引脚锁定图使用USB编程器下载配置文件首先安装USB编程器的驱动程序。选择自己搜索驱动程序。备注:假设没有
18、正确安装驱动程序,USB Blaster 编程器不可选,这时必须到硬件设备管理器中删除打问号的USB驱动程序,重新正确安装。将编译产生的SOF格式配置文件配置进FPGA中。在MODE选择JTAG。编程器选择USB Blaster下载方式。点击“start将配置文件下载,然后进行硬件测试。通过对仿真结果的分析,当输入端A=“0000时,输出端DECL7S=“3F,数码管显示“0,当输入端A=“0001时,输出端DECL7S=“06,数码管显示“1。 实验4:数控分频器设计一、 实验目的学习数控分频器的设计、分析和测试方法。二、 实验原理数控分频器的功能就是当在输入端给定不同输入数据时,将对输入的
19、时钟信号有不同的分频比,数控分频器就是用计数值可并行预置的加法计数器设计完成的,方法是将计数溢出位与预置数加载输入信号相接即可。三、 实验内容在实验系统上硬件验证设计程序的功能。可选实验电路模式;键2、键1作为输入8位预置数D(PIO7-PIO0);CLK由clock0输入,频率选65536Hz或更高(确保分频后落在音频范围);输出FOUT接扬声器(SPKER)。编译下载后进行硬件测试:改变键2/键1的输入值,可听到不同音调的声音。逻辑电路图四、程序设计LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.AL
20、L;ENTITY DVF IS PORT ( CLK : IN STD_LOGIC; D : IN STD_LOGIC_VECTOR(7 DOWNTO 0); FOUT : OUT STD_LOGIC );END;ARCHITECTURE one OF DVF IS SIGNAL FULL : STD_LOGIC;BEGIN P_REG: PROCESS(CLK) VARIABLE CNT8 : STD_LOGIC_VECTOR(7 DOWNTO 0); BEGIN IF CLKEVENT AND CLK = 1 THEN IF CNT8 = 11111111 THEN CNT8 := D;
21、-当CNT8计数计满时,输入数据D被同步预置给计数器CNT8 FULL = 1; -同时使溢出标志信号FULL输出为高电平 ELSE CNT8 := CNT8 + 1; -否那么继续作加1计数 FULL = 0; -且输出溢出标志信号FULL为低电平 END IF; END IF;END PROCESS P_REG ; P_DIV: PROCESS(FULL) VARIABLE CNT2 : STD_LOGIC; BEGIN IF FULLEVENT AND FULL = 1 THEN CNT2 := NOT CNT2; -如果溢出标志信号FULL为高电平,D触发器输出取反 IF CNT2 =
22、 1 THEN FOUT = 1; ELSE FOUT new,选择vector waveform file。2设定仿真时间区域在Edit-end time,在弹出的窗口time栏处输入50,单位选“us。3波形文件存盘,默认文件名为DVF.vwf4将此工程DVF的端口信号名选入波形编辑器中View-utility windows项的Node Finder选项。点击“list。5将端口信号名拖入波形编辑器中,拖完信号后可以关掉浮动窗口6按键盘上“CTRL+W,显示全部仿真时间区域。7编辑输入波形(输入鼓励信号)8) 仿真器参数设置9启动仿真器。提示是否保存,选择“是,仿真成功后选“确定。10)
23、 观察仿真结果按键盘上“CTRL+W,在全部仿真时间区域内观察波形,并分析波形图显示的逻辑功能是否正确。电路时序波形图七、 硬件测试翻开DVF命名的工程,应选择File的Open Project命令。选择Assignments-assingnment editor项。Category栏中选择locations,然后双击TO栏的?new?,选择Node Finder。在出现的对话框左边框中选择需要锁定的端口信号名,这些信号跳到右栏,单击OK按键后,这些信号名即进入信号编辑栏。接着在表框中分别键入需要锁定的端口引脚名。锁定引脚后,必须重新编译,启动Processing-Start Ccomplic
24、ation,编译完成后可下载配置文件。引脚锁定图使用USB编程器下载配置文件首先安装USB编程器的驱动程序。选择自己搜索驱动程序。备注:假设没有正确安装驱动程序,USB Blaster 编程器不可选,这时必须到硬件设备管理器中删除打问号的USB驱动程序,重新正确安装。将编译产生的SOF格式配置文件配置进FPGA中。在MODE选择JTAG。编程器选择USB Blaster下载方式。点击“start将配置文件下载,然后进行硬件测试。改变键2/键1的输入值,可听到不同音调的声音。实验5:4位十进制频率计设计一、 实验目的熟悉VHDL语言模块化设计和原理图输入方法的使用,掌握更复杂的层次化设计技术和数
25、字系统设计方法。完成4位十进制频率计的设计。二、实验原理设计VHDL的十进制计数器模块,连接它们的计数进位,用4个计数模块就能组成一个4位有时钟使能的计数器;用VHDL测频控制器控制输入信号和计数闸门,完成频率测量。在仿真过程中应该注意它们可能的毛刺现象,最后按照设计流程和方法完成全部设计。顶层原理图三、实验内容首先完成4位频率计的设计,然后进行硬件测试,建议选择电路模式;数码2和1显示输出频率值,待测频率F_IN接clock0;测频控制时钟CLK接clock2,仿真测试该频率计待测信号的最高频率,并与硬件实测的结果进行比拟。四、程序设计测频控制程序模块:LIBRARY IEEE;USE IE
26、EE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY TESTCTL IS PORT ( CLKK : IN STD_LOGIC; CNT_EN,RST_CNT,LOAD : OUT STD_LOGIC); END TESTCTL;ARCHITECTURE behav OF TESTCTL IS SIGNAL DIV2CLK : STD_LOGIC;BEGIN PROCESS( CLKK ) BEGIN IF CLKKEVENT AND CLKK = 1 THEN DIV2CLK = NOT DIV2CLK; END IF;
27、END PROCESS; PROCESS( CLKK,DIV2CLK ) BEGIN IF CLKK=0 AND DIV2CLK=0 THEN RST_CNT =1; ELSE RST_CNT =0; END IF; END PROCESS; LOAD = NOT DIV2CLK; CNT_EN 0); ELSIF CLKEVENT AND CLK=1 THEN IF EN = 1 THEN IF CQI 0); END IF; END IF; END IF; IF CQI = 1001 THEN COUT =1; ELSE COUT =0; END IF; CQ = CQI; END PRO
28、CESS; END behav;锁存器程序模块:LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL;ENTITY REG4B IS PORT ( LOAD : IN STD_LOGIC; DIN : IN STD_LOGIC_VECTOR(3 DOWNTO 0); DOUT : OUT STD_LOGIC_VECTOR(3 DOWNTO 0);END REG4B;ARCHITECTURE behav OF REG4B ISBEGIN PROCESS(LOAD,DIN) BEGIN IF LOADEVENT AND LOAD = 1 THEN DOUT new,选
29、择vector waveform file。2设定仿真时间区域在Edit-end time,在弹出的窗口time栏处输入50,单位选“us。3波形文件存盘,默认文件名为TESTCTL.vwf4将此工程TESTCTL的端口信号名选入波形编辑器中View-utility windows项的Node Finder选项。点击“list。5将端口信号名拖入波形编辑器中,拖完信号后可以关掉浮动窗口6按键盘上“CTRL+W,显示全部仿真时间区域。7编辑输入波形(输入鼓励信号)8) 仿真器参数设置9启动仿真器。提示是否保存,选择“是,仿真成功后选“确定。10) 观察仿真结果按键盘上“CTRL+W,在全部仿真时
30、间区域内观察波形,并分析波形图显示的逻辑功能是否正确。电路时序波形图七、硬件测试翻开TESTCTL命名的工程,应选择File的Open Project命令。选择Assignments-assingnment editor项。Category栏中选择locations,然后双击TO栏的?new?,选择Node Finder。在出现的对话框左边框中选择需要锁定的端口信号名,这些信号跳到右栏,单击OK按键后,这些信号名即进入信号编辑栏。接着在表框中分别键入需要锁定的端口引脚名。锁定引脚后,必须重新编译,启动Processing-Start Ccomplication,编译完成后可下载配置文件。引脚锁
31、定图使用USB编程器下载配置文件首先安装USB编程器的驱动程序。选择自己搜索驱动程序。备注:假设没有正确安装驱动程序,USB Blaster 编程器不可选,这时必须到硬件设备管理器中删除打问号的USB驱动程序,重新正确安装。将编译产生的SOF格式配置文件配置进FPGA中。在MODE选择JTAG。编程器选择USB Blaster下载方式。点击“start将配置文件下载,然后进行硬件测试。实验6:FIFO存储器设计一、 实验目的学习使用Mega Wizard Plug-In Manager工具,熟悉LPM_FIFO的定制方法,完成数据宽度8位,深256的FIFO先进先出存储器设计,如下列图。二、实
32、验原理在写信号的有效时,在每一个时钟信号的上升沿,向FIFO存储器写入数据,在读信号的有效时,在每一个时钟信号的上升沿,按照先进先出的顺序,将FIFO中存入的数据读出。三、实验内容首先完成LPM_FIFO的参数定制,生成VHDL文本文件并保存,然后建立工程,编译,仿真。进行硬件测试时,建议选择电路模式实验系统电平开关在高电平位置;aclr连接键3,时钟clock连接键6 39,wrreq连接键8 43,rdreq连接键7 47,键2、键1写入数据data并在发光管D8-D1上显示,读出数据q连接数码管8、7并显示。注意仿真与硬件实测的结果进行比拟。逻辑电路图四、软件编译选择Peocessing
33、Start Compilation命令,启动全程编译。编译无错后的报告信息五、时序仿真1翻开波形编辑器选择File-new,选择vector waveform file。2设定仿真时间区域在Edit-end time,在弹出的窗口time栏处输入50,单位选“us。3波形文件存盘,默认文件名为FIFO.vwf4将此工程FIFO的端口信号名选入波形编辑器中View-utility windows项的Node Finder选项。点击“list。5将端口信号名拖入波形编辑器中,拖完信号后可以关掉浮动窗口6按键盘上“CTRL+W,显示全部仿真时间区域。7编辑输入波形(输入鼓励信号)8) 仿真器参数设置
34、9启动仿真器。提示是否保存,选择“是,仿真成功后选“确定。10) 观察仿真结果按键盘上“CTRL+W,在全部仿真时间区域内观察波形,并分析波形图显示的逻辑功能是否正确。电路时序波形图六、硬件测试翻开FIFO命名的工程,应选择File的Open Project命令。选择Assignments-assingnment editor项。Category栏中选择locations,然后双击TO栏的?new?,选择Node Finder。在出现的对话框左边框中选择需要锁定的端口信号名,这些信号跳到右栏,单击OK按键后,这些信号名即进入信号编辑栏。接着在表框中分别键入需要锁定的端口引脚名。锁定引脚后,必须
35、重新编译,启动Processing-Start Ccomplication,编译完成后可下载配置文件。引脚锁定图使用USB编程器下载配置文件首先安装USB编程器的驱动程序。选择自己搜索驱动程序。备注:假设没有正确安装驱动程序,USB Blaster 编程器不可选,这时必须到硬件设备管理器中删除打问号的USB驱动程序,重新正确安装。将编译产生的SOF格式配置文件配置进FPGA中。在MODE选择JTAG。编程器选择USB Blaster下载方式。点击“start将配置文件下载,然后进行硬件测试。实验7:序列检测器设计一、 实验目的用状态机实现序列检测器的设计,了解一般状态机的设计与应用。二、实验原
36、理序列检测器可用于检测一组或多组由二进制码组成的脉冲序列信号,当序列检测器连续收到一组串行二进制码后,如果这组码与检测器中预先设置的码相同,那么输出1,否那么输出0。由于这种检测的关键在于正确码的收到必须是连续的,这就要求检测器必须记住前一次的正确码及正确序列,直到在连续的检测中所收到的每一位码都与预置数的对应码相同。在检测过程中,任何一位不相等都将回到初始状态重新开始检测。参考程序描述的电路完成对序列数“11100101的检测,当这一串序列数高位在前(左移)串行进入检测器后,假设此数与预置的密码数相同,那么输出“A,否那么仍然输出“B。三、实验内容利用QuartusII对参考程序进行文本编辑
37、输入、仿真测试并给出仿真波形,了解控制信号的时序,最后进行引脚锁定并完成硬件测试实验。建议选择电路模式,用键7(PIO11)控制复位信号CLR;键6(PIO9)控制状态机工作时钟CLK;待检测串行序列数输入DIN接PIO10(左移,最高位在前);指示输出AB接PIO39PIO36(显示于数码管6)。下载后:按实验板“系统复位键;用键2和键1输入2位十六进制待测序列数“11100101;按键7复位(平时数码6指示显“B);按键6(CLK) 8次,这时假设串行输入的8位二进制序列码(显示于数码2/1和发光管D8D0)与预置码“11100101相同,那么数码6应从原来的B变成A,表示序列检测正确,否那么仍为B。逻辑电路图四、程序设计LIBRARY IEEE ;USE IEEE.STD_LOGIC_1164.ALL;ENTITY SCHK IS PORT(DIN,CLK,CLR : IN STD_LOGIC; -串行输入数据位/工作时钟/复位信号 AB : OUT STD_LOGIC_VECTOR(3 DOWNTO 0); -检测结果输出END SCHK;ARCHITECTURE behav OF SCHK IS
限制150内