VHDL实验报告.docx
- 文档编号:7179467
- 上传时间:2023-01-21
- 格式:DOCX
- 页数:17
- 大小:283.93KB
VHDL实验报告.docx
《VHDL实验报告.docx》由会员分享,可在线阅读,更多相关《VHDL实验报告.docx(17页珍藏版)》请在冰豆网上搜索。
VHDL实验报告
实验者:
黄成勇学号:
3110008723
班级:
电子(4)班日期:
2012年12月30日
实验一:
应用QuartusII完成基本组合电路设计
(1)实验目的:
熟悉QuartusⅡ的VHDL文本设计流程全过程,学习简单组合电路的设计、多层次电路设计、仿真和硬件测试。
(2)实验内容1:
首先利用QuartusⅡ完成2选1多路选择器的文本编辑输入(mux21a.vhd)和仿真测试等步骤,给出仿真波形。
最后在实验系统上进行硬件测试,验证本项设计的功能。
2选1多路选择器:
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
ENTITYmux21aIS
PORT(a,b,s:
INBIT;
y:
OUTBIT);
ENDENTITYmux21a;
ARCHITECTUREoneOFmux21aIS
BEGIN
PROCESS(a,b,s)
BEGIN
IFs='0'THENy<=a;ELSEy<=b;
ENDIF;
ENDPROCESS;
ENDARCHITECTUREone;
双2选1多路选择器
2选1多路选择器功能时序波形
(3)实验内容2:
将此多路选择器看成是一个元件mux21a,利用元件例化语句。
例化程序:
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
ENTITYmux31aIS
PORT(a1,a2,a3,s0,s1:
INSTD_LOGIC;
outy:
OUTSTD_LOGIC);
ENDENTITYmux31a;
ARCHITECTUREbhvOFmux31aIS
COMPONENT(a,b:
INSTD_LOGIC;
s:
INSTD_LOGIC);
ENDCOMPONENT;
BEGIN
u1:
MUX21APORTMAP(a=>a2,b=>a3,s=>s0,y=>tmp);
u2:
MUX21APORTMAP(a=>a1,b=>tmp,s=>s1,y=>outy);
ENDARCHITECTUREBHV;
(4)实验内容3:
引脚锁定以及硬件下载测试。
若选择目标器件是EP1C3,建议选实验电路模式5(附录图7),用键1(PIO0,模式5中为PIO233,引脚号为1)控制s0;用键2(PIO1,234,引脚号为2)控制s1;a3、a2和a1分别接clock5(引脚号为16)、clock0(引脚号为93)和clock2(引脚号为17);输出信号outy仍接扬声器spker(引脚号为129)。
通过短路帽选择clock0接256Hz信号,clock5接1024Hz,clock2接8Hz信号。
最后进行编译、下载和硬件测试实验(通过选择键1、键2,控制s0、s1,可使扬声器输出不同音调)。
实验二:
在QuartusII中用原理图输入法设计8位全加器
(1)实验目的:
熟悉利用QuartusⅡ的原理图输入方法设计简单组合电路,掌握层次化设计的方法,并通过一个8位全加器的设计把握利用EDA软件进行原理图输入方式的电子线路设计的详细流程。
(2)实验原理:
一个8位全加器可以由8个1位全加器构成,加法器间的进位可以串行方式实现,即将低位加法器的进位输出cout与相临的高位加法器的最低进位输入信号cin相接。
而一个1位全加器可以按照6.1节的方法来完成。
(3)实验内容1:
按照书本介绍的方法与流程,完成半加器和全加器的设计,包括原理图输入、编译、综合、适配、仿真、实验板上的硬件测试,并将此全加器电路设置成一个硬件符号入库。
键1、键2、键3(PIO0/1/2)分别接ain、bin、cin;发光管D2、D1(PIO9/8)分别接sum和cout。
半加器设计:
全加器设计:
(4)实验内容2,建立一个更高层次的原理图设计,利用以上获得的1位全加器构成8位全加器,并完成编译、综合、适配、仿真和硬件测试。
建议选择电路模式1(附录图3);键2、键1输入8位加数;键4、键3输入8位被加数;数码6/5显示加和;D8显示进位cout。
八位全加器设计:
实验三:
8位16进制频率计设计
(1)实验目的:
设计8位16进制频率计,学习较复杂的数字系统设计方法。
(2)实验原理:
根据频率的定义和频率测量的基本原理,测定信号的频率必须有一个脉宽为1秒的输入信号脉冲计数允许的信号;1秒计数结束后,计数值被锁入锁存器,计数器清0,为下一测频计数周期作好准备。
测频控制信号可以由一个独立的发生器来产生,即图7-34中的FTCTRL。
根据测频原理,测频控制时序可以如图所示。
(3)实验内容1:
分别仿真测试模块例7-7、例7-8和例7-9,再结合例7-10完成频率计的完整设计和硬件实现,并给出其测频时序波形及其分析。
建议选实验电路模式5;8个数码管以16进制形式显示测频输出;待测频率输入FIN由clock0输入,频率可选4Hz、256HZ、3Hz...50MHz等;1HZ测频控制信号CLK1HZ可由clock2输入(用跳线选1Hz)。
注意,这时8个数码管的测频显示值是16进制的。
【例7-7】
LIBRARYIEEE;--测频控制电路
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYFTCTRLIS
PORT(CLKK:
INSTD_LOGIC;--1Hz
CNT_EN:
OUTSTD_LOGIC;--计数器时钟使能
RST_CNT:
OUTSTD_LOGIC;--计数器清零
Load:
OUTSTD_LOGIC);--输出锁存信号
ENDFTCTRL;
ARCHITECTUREbehavOFFTCTRLIS
SIGNALDiv2CLK:
STD_LOGIC;
BEGIN
PROCESS(CLKK)
BEGIN
IFCLKK'EVENTANDCLKK='1'THEN--1Hz时钟2分频
Div2CLK<=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;
【例7-8】
LIBRARYIEEE;--32位锁存器
USEIEEE.STD_LOGIC_1164.ALL;
ENTITYREG32BIS
PORT(LK:
INSTD_LOGIC;
DIN:
INSTD_LOGIC_VECTOR(31DOWNTO0);
DOUT:
OUTSTD_LOGIC_VECTOR(31DOWNTO0));
ENDREG32B;
ARCHITECTUREbehavOFREG32BIS
BEGIN
PROCESS(LK,DIN)
BEGIN
IFLK'EVENTANDLK='1'THENDOUT<=DIN;
ENDIF;
ENDPROCESS;
ENDbehav;
【例7-9】
LIBRARYIEEE;--32位计数器
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYCOUNTER32BIS
PORT(FIN:
INSTD_LOGIC;--时钟信号
CLR:
INSTD_LOGIC;--清零信号
ENABL:
INSTD_LOGIC;--计数使能信号
DOUT:
OUTSTD_LOGIC_VECTOR(31DOWNTO0));--计数结果
ENDCOUNTER32B;
ARCHITECTUREbehavOFCOUNTER32BIS
SIGNALCQI:
STD_LOGIC_VECTOR(31DOWNTO0);
BEGIN
PROCESS(FIN,CLR,ENABL)
BEGIN
IFCLR='1'THENCQI<=(OTHERS=>'0');--清零
ELSIFFIN'EVENTANDFIN='1'THEN
IFENABL='1'THENCQI<=CQI+1;ENDIF;
ENDIF;
ENDPROCESS;
DOUT<=CQI;
ENDbehav;
【例7-10】
LIBRARYIEEE;--频率计顶层文件
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
ENTITYFREQTESTIS
PORT(CLK1HZ:
INSTD_LOGIC;
FSIN:
INSTD_LOGIC;
DOUT:
OUTSTD_LOGIC_VECTOR(31DOWNTO0));
ENDFREQTEST;
ARCHITECTUREstrucOFFREQTESTIS
COMPONENTFTCTRL
PORT(CLKK:
INSTD_LOGIC;--1Hz
CNT_EN:
OUTSTD_LOGIC;--计数器时钟使能
RST_CNT:
OUTSTD_LOGIC;--计数器清零
Load:
OUTSTD_LOGIC);--输出锁存信号
ENDCOMPONENT;
COMPONENTCOUNTER32B
PORT(FIN:
INSTD_LOGIC;--时钟信号
CLR:
INSTD_LOGIC;--清零信号
ENABL:
INSTD_LOGIC;--计数使能信号
DOUT:
OUTSTD_LOGIC_VECTOR(31DOWNTO0));--计数结果
ENDCOMPONENT;
COMPONENTREG32B
PORT(LK:
INSTD_LOGIC;
DIN:
INSTD_LOGIC_VECTOR(31DOWNTO0);
DOUT:
OUTSTD_LOGIC_VECTOR(31DOWNTO0));
ENDCOMPONENT;
SIGNALTSTEN1:
STD_LOGIC;
SIGNALCLR_CNT1:
STD_LOGIC;
SIGNALLoad1:
STD_LOGIC;
SIGNALDTO1:
STD_LOGIC_VECTOR(31DOWNTO0);
SIGNALCARRY_OUT1:
STD_LOGIC_VECTOR(6DOWNTO0);
BEGIN
U1:
FTCTRLPORTMAP(CLKK=>CLK1HZ,CNT_EN=>TSTEN1,
RST_CNT=>CLR_CNT1,Load=>Load1);
U2:
REG32BPORTMAP(LK=>Load1,DIN=>DTO1,DOUT=>DOUT);
U3:
COUNTER32BPORTMAP(FIN=>FSIN,CLR=>CLR_CNT1,
ENABL=>TSTEN1,DOUT=>DTO1);
ENDstruc;
由实验对相应的数据端口设计:
而实验代码对应的实验原理图为:
(4)实验内容2:
参考例3-22,将频率计改为8位10进制频率计,注意此设计电路的计数器必须是8个4位的10进制计数器,而不是1个。
此外注意在测频速度上给予优化。
十进制频率计数器设计程序:
LIBRARYIEEE;--8位十进制计数器
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYCOUNTERIS
PORT(FIN:
INSTD_LOGIC;--时钟信号
CLR:
INSTD_LOGIC;--清零信号
ENABL:
INSTD_LOGIC;--计数使能信号
DOUT:
OUTSTD_LOGIC_VECTOR(31DOWNTO0));--计数结果
ENDCOUNTER;
ARCHITECTUREbehavOFCOUNTERIS
COMPONENTCOUNTER10IS
PORT(FIN:
INSTD_LOGIC;--时钟信号
CLR:
INSTD_LOGIC;--清零信号
ENABL:
INSTD_LOGIC;--计数使能信号
DOUT:
OUTSTD_LOGIC_VECTOR(3DOWNTO0);--计数结果
COUT:
OUTSTD_LOGIC);
ENDCOMPONENT;
SIGNALCLK1,CLK2,CLK3,CLK4,CLK5,CLK6,CLK7:
STD_LOGIC;
BEGIN
u1:
COUNTER10PORTMAP(FIN=>FIN,CLR=>CLR,ENABL=>ENABL,DOUT=>DOUT(3DOWNTO0),COUT=>CLK1);
u2:
COUNTER10PORTMAP(FIN=>CLK1,CLR=>CLR,ENABL=>ENABL,DOUT=>DOUT(7DOWNTO4),COUT=>CLK2);
u3:
COUNTER10PORTMAP(FIN=>CLK2,CLR=>CLR,ENABL=>ENABL,DOUT=>DOUT(11DOWNTO8),COUT=>CLK3);
u4:
COUNTER10PORTMAP(FIN=>CLK3,CLR=>CLR,ENABL=>ENABL,DOUT=>DOUT(15DOWNTO12),COUT=>CLK4);
u5:
COUNTER10PORTMAP(FIN=>CLK4,CLR=>CLR,ENABL=>ENABL,DOUT=>DOUT(19DOWNTO16),COUT=>CLK5);
u6:
COUNTER10PORTMAP(FIN=>CLK5,CLR=>CLR,ENABL=>ENABL,DOUT=>DOUT(23DOWNTO20),COUT=>CLK6);
u7:
COUNTER10PORTMAP(FIN=>CLK6,CLR=>CLR,ENABL=>ENABL,DOUT=>DOUT(27DOWNTO24),COUT=>CLK7);
u8:
COUNTER10PORTMAP(FIN=>CLK7,CLR=>CLR,ENABL=>ENABL,DOUT=>DOUT(31DOWNTO28));
ENDARCHITECTUREbehav;
(5)实验内容3:
用LPM模块取代例7-8和例7-9,再完成同样的设计任务。
(6)实验内容4:
用嵌入式锁相环PLL的LPM模块对实验系统的50MHz或20MHz时钟源分频率,PLL的输出信号作为频率计的待测信号。
注意PLL的输入时钟必须是器件的专用时钟输入脚CLK✍pin16(clock5)或pin17(clock2),且输入频率不能低于16MHz。
(实验中可以将50MHz频率用线引向Clock2,但要拔除其上的短路帽)
(7)设计要求:
FTCTRL的计数使能信号CNT_EN能产生一个1秒脉宽的周期信号,并对频率计中的32位二进制计数器COUNTER32B(图7-34)的ENABL使能端进行同步控制。
当CNT_EN高电平时允许计数;低电平时停止计数,并保持其所计的脉冲数。
在停止计数期间,首先需要一个锁存信号LOAD的上跳沿将计数器在前1秒钟的计数值锁存进锁存器REG32B中,并由外部的16进制7段译码器译出,显示计数值。
设置锁存器的好处是数据显示稳定,不会由于周期性的清0信号而不断闪烁。
锁存信号后,必须有一清0信号RST_CNT对计数器进行清零,为下1秒的计数操作作准备。
实验四:
数控分频器与乐曲硬件演奏电路设计
乐曲硬件演奏电路设计:
(1)实验目的:
学习利用实验5-3的数控分频器设计硬件乐曲演奏电路。
(2)实验原理:
主系统由3个模块组成,例10-29是顶层设计文件,其内部有3个功能模块(如图10-3所示):
TONETABA.VHD、NOTETABS.VHD和SPEAKER.VHD。
图10-3硬件乐曲演奏电路结构(Synplify综合)
与利用微处理器(CPU或MCU)来实现乐曲演奏相比,以纯硬件完成乐曲演奏电路的逻辑要复杂得多,如果不借助于功能强大的EDA工具和硬件描述语言,仅凭传统的数字逻辑技术,即使最简单的演奏电路也难以实现。
本实验设计项目作为“梁祝”乐曲演奏电路的实现。
我们知道,组成乐曲的每个音符的发音频率值及其持续的时间是乐曲能连续演奏所需的两个基本要素,问题是如何来获取这两个要素所对应的数值以及通过纯硬件的手段来利用这些数值实现所希望乐曲的演奏效果。
图10-3中,模块U1类似于弹琴的人的手指;U2类似于琴键;U3类似于琴弦或音调发声器。
下面首先来了解图10-3的工作原理:
1、音符的频率可以由图10-3中的SPEAKERA获得,这是一个数控分频器(其详细工作原理可参考实验5-3)。
由其clk端输入一具有较高频率(这里是12MHz)的信号,通过SPEAKERA分频后由SPKOUT输出,由于直接从数控分频器中出来的输出信号是脉宽极窄的脉冲式信号,为了有利于驱动扬声器,需另加一个D触发器以均衡其占空比,但这时的频率将是原来的1/2。
SPEAKERA对clk输入信号的分频比由11位预置数Tone[10..0]决定。
SPKOUT的输出频率将决定每一音符的音调,这样,分频计数器的预置值Tone[10..0]与SPKOUT的输出频率,就有了对应关系。
例如在TONETABA模块中若取Tone[10..0]=1036,将发音符为"3"音的信号频率。
2、音符的持续时间须根据乐曲的速度及每个音符的节拍数来确定,图10-3中模块TONETABA的功能首先是为SPEAKERA提供决定所发音符的分频预置数,而此数在SPEAKER输入口停留的时间即为此音符的节拍值。
模块TONETABA是乐曲简谱码对应的分频预置数查表电路,其中设置了“梁祝”乐曲全部音符所对应的分频预置数,共13个,每一音符的停留时间由音乐节拍和音调发生器模块NOTETABS的clk的输入频率决定,在此为4Hz。
这13个值的输出由对应于TONETABA的4位输入值Index[3..0]确定,而Index[3..0]最多有16种可选值。
输向TONETABA中Index[3..0]的值ToneIndex[3..0]的输出值与持续的时间由模块NOTETABS决定。
3、在NOTETABS中设置了一个8位二进制计数器(计数最大值为138),作为音符数据ROM的地址发生器。
这个计数器的计数频率选为4Hz,即每一计数值的停留时间为0.25秒,恰为当全音符设为1秒时,四四拍的4分音符持续时间。
例如,NOTETABS在以下的VHDL逻辑描述中,“梁祝”乐曲的第一个音符为“3”,此音在逻辑中停留了4个时钟节拍,即1秒时间,相应地,所对应的“3”音符分频预置值为1036,在SPEAKERA的输入端停留了1秒。
随着NOTETABS中的计数器按4Hz的时钟速率作加法计数时,即随地址值递增时,音符数据ROM中的音符数据将从ROM中通过ToneIndex[3..0]端口输向TONETABA模块,“梁祝”乐曲就开始连续自然地演奏起来了。
(3)实验内容1:
定制例10-32的NoteTabs模块中的音符数据ROM“music”。
该ROM中的音符数据已列在例10-33中。
注意该例数据表中的数据位宽、深度和数据的表达类型。
此外,为了节省篇幅,例中的数据都横排了,实用中应该以每一分号为一行来展开,否则会出错。
最后对该ROM进行仿真,确认例10-33中的音符数据已经进入ROM中。
(4)实验内容2:
根据给出的乘法器逻辑原理图及其各模块的VHDL描述,在QuartusII上完成全部设计,包括编辑、编译、综合和仿真操作等。
给出仿真波形,并作出详细说明。
【例3-1】
LIBRARYIEEE;--硬件演奏电路顶层设计
USEIEEE.STD_LOGIC_1164.ALL;
ENTITYSongerIS
PORT(CLK12MHZ:
INSTD_LOGIC;--音调频率信号
CLK8HZ:
INSTD_LOGIC;--节拍频率信号
CODE1:
OUTSTD_LOGIC_VECTOR(3DOWNTO0);--简谱码输出显示
HIGH1:
OUTSTD_LOGIC;--高8度指示
SPKOUT:
OUTSTD_LOGIC);--声音输出
END;
ARCHITECTUREoneOFSongerIS
COMPONENTNoteTabs
PORT(clk:
INSTD_LOGIC;
ToneIndex:
OUTSTD_LOGIC_VECTOR(3DOWNTO0));
ENDCOMPONENT;
COMPONENTToneTaba
PORT(Index:
INSTD_LOGIC_VECTOR(3DOWNTO0);
CODE:
OUTSTD_LOGIC_VECTOR(3DOWNTO0);
HIGH:
OUTSTD_LOGIC;
Tone:
OUTSTD_LOGIC_VECTOR(10DOWNTO0));
ENDCOMPONENT;
COMPONENTSpeakera
PORT(clk:
INSTD_LOGIC;
Tone:
INSTD_LOGIC_VECTOR(10DOWNTO0);
SpkS:
OUTSTD_LOGIC);
ENDCOMPONENT;
SIGNALTone:
STD_LOGIC_VECTOR(10DOWNTO0);
SIGNALToneIndex:
STD_LOGIC_VECTOR(3DOWNTO0);
BEGIN
u1:
NoteTabsPORTMAP(clk=>CLK8HZ,ToneIndex=>ToneIndex);
u2:
ToneTabaPORTMAP(Index=>ToneIndex,Tone=>Tone,CODE=>CODE1,HIGH=>HIGH1);
u3:
SpeakeraPORTMAP(clk=>CLK12MHZ,Tone=>Tone,SpkS=>SPKOUT);
END;
【例3-2】
LIBRARYIEEE;
USEIEE
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- VHDL 实验 报告