广东工业大学VHDL实验报告.docx
《广东工业大学VHDL实验报告.docx》由会员分享,可在线阅读,更多相关《广东工业大学VHDL实验报告.docx(19页珍藏版)》请在冰豆网上搜索。
广东工业大学VHDL实验报告
VHDL与集成电路设计实验报告
时间:
第7周周四实验一应用QuartusII完成基本组合电路设计
一、实验目的:
熟悉QuartusⅡ的VHDL文本设计流程全过程,学习简单组合电路的设计、多层次电路设计、仿真和硬件测试。
二、实验内容:
首先利用QuartusⅡ完成2选1多路选择器(例1)的文本编辑输入(mux21a.vhd)和仿真测试等步骤,给出图1-1所示的仿真波形。
最后在实验系统上进行硬件测试,验证本项设计的功能。
三、实验程序:
...
COMPONENTMUX21A
PORT(a,b,s:
INSTD_LOGIC;
y:
OUTSTD_LOGIC);
ENDCOMPONENT;
...
u1:
MUX21APORTMAP(a=>a2,b=>a3,s=>s0,y=>tmp);
u2:
MUX21APORTMAP(a=>a1,b=>tmp,s=>s1,y=>outy);
ENDARCHITECTUREBHV;
【例1】
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;
五、实验结果及分析
仿真结果:
仿真结果分析:
这是一个选择输出功能,当s为高电平时,输出b;当s为低电平时,输出为a。
输出存在延迟。
VHDL与集成电路设计实验报告
时间:
第8周周四实验四:
移位相加硬件乘法器设计
一、实验目的:
学习应用移位相加原理设计8位乘法器。
二、实验内容:
(1)实验内容1:
根据给出的乘法器逻辑原理图及其各模块的VHDL描述,在QuartusII上完成全部设计,包括编辑、编译、综合和仿真操作等。
以87H乘以F5H为例,进行仿真,对仿真波形作出详细解释,包括对8个工作时钟节拍中,每一节拍乘法操作的方式和结果,对照波形图给以详细说明,根据顶层设计例9-16,结合图9-34,画出乘法器的详细电路原理框图。
(2)实验内容2:
编程下载,进行实验验证。
实验电路选择No.1,8位乘数用键2、键1输入;8位被乘数用键4和键3输入;16位乘积可由4个数码管(数码管8、7、6、5)显示;用键8输入CLK,键7输入START(注意,START由高到低是清0,由低到高电平是允许乘法计算)。
详细观察每一时钟节拍的运算结果,并与仿真结果进行比较。
(3)实验内容3:
乘法时钟连接实验系统上的连续脉冲,如clock0,设计一个此乘法器的控制模块,接受实验系统上的连续脉冲,如clock0,当给定启动/清0信号后,能自动发出CLK信号驱动乘法运算,当8个脉冲后自动停止(参考程序:
例9-15)。
(4)实验内容4:
设计一个纯组合电路的8X8等于16位的乘法器和一个LPM乘法器(选择不同的流水线方式),具体说明并比较这几种乘法器的逻辑资源占用情况和运行速度情况。
三、实验程序(部分)
【例9-11】
LIBRARYIEEE;--8位右移寄存器
USEIEEE.STD_LOGIC_1164.ALL;
ENTITYSREG8BIS
PORT(CLK,LOAD:
INSTD_LOGIC;
DIN:
INSTD_LOGIC_VECTOR(7DOWNTO0);
QB:
OUTSTD_LOGIC);
ENDSREG8B;
ARCHITECTUREbehavOFSREG8BIS
SIGNALREG8:
STD_LOGIC_VECTOR(7DOWNTO0);
BEGIN
PROCESS(CLK,LOAD)
BEGIN
IFCLK'EVENTANDCLK='1'THEN
IFLOAD='1'THENREG8<=DIN;
ELSEREG8(6DOWNTO0)<=REG8(7DOWNTO1);
ENDIF;
ENDIF;
ENDPROCESS;
QB<=REG8(0);--输出最低位
ENDbehav;
COMPONENTREG16B
PORT(CLK,CLR:
INSTD_LOGIC;
D:
INSTD_LOGIC_VECTOR(8DOWNTO0);
Q:
OUTSTD_LOGIC_VECTOR(15DOWNTO0));
ENDCOMPONENT;
SIGNALGNDINT,INTCLK,RSTALL,NEWSTART,QB:
STD_LOGIC;
SIGNALANDSD:
STD_LOGIC_VECTOR(7DOWNTO0);
SIGNALDTBIN:
STD_LOGIC_VECTOR(8DOWNTO0);
SIGNALDTBOUT:
STD_LOGIC_VECTOR(15DOWNTO0);
BEGIN
DOUT<=DTBOUT;GNDINT<='0';
PROCESS(CLKK,START)
BEGIN
IFSTART='1'THENNEWSTART<='1';
ELSIFCLKK='0'THENNEWSTART<='0';ENDIF;
ENDPROCESS;
U1:
ARICTLPORTMAP(CLK=>CLKK,START=>NEWSTART,CLKOUT=>INTCLK,RSTALL=>RSTALL);
U2:
SREG8BPORTMAP(CLK=>INTCLK,LOAD=>RSTALL,DIN=>B,QB=>QB);
U3:
ANDARITHPORTMAP(ABIN=>QB,DIN=>A,DOUT=>ANDSD);
U4:
ADDER8BPORTMAP(CIN=>GNDINT,A=>DTBOUT(15DOWNTO8),B=>ANDSD,
S=>DTBIN(7DOWNTO0),COUT=>DTBIN(8));
U5:
REG16BPORTMAP(CLK=>INTCLK,CLR=>RSTALL,D=>DTBIN,Q=>DTBOUT);
ENDstruc;
【例9-14】
LIBRARYIEEE;--16位锁存器/右移寄存器
USEIEEE.STD_LOGIC_1164.ALL;
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
ENTITYREG16BIS--16位锁存器
PORT(CLK,CLR:
INSTD_LOGIC;
D:
INSTD_LOGIC_VECTOR(8DOWNTO0);
Q:
OUTSTD_LOGIC_VECTOR(15DOWNTO0));
ENDREG16B;
ARCHITECTUREbehavOFREG16BIS
SIGNALR16S:
STD_LOGIC_VECTOR(15DOWNTO0);
BEGIN
PROCESS(CLK,CLR)
BEGIN
IFCLR='1'THENR16S<="0000000000000000";--时钟到来时,锁存输入值,并右移低8位
ELSIFCLK'EVENTANDCLK='1'THEN
R16S(6DOWNTO0)<=R16S(7DOWNTO1);--右移低8位
R16S(15DOWNTO7)<=D;--将输入锁到高8位
ENDIF;
ENDPROCESS;
Q<=R16S;
ENDbehav;
四、实验结果及分析
结果分析:
次此实验功能为十六进制的乘法运算功能,注意其时钟信号频率不能太高,要不然来不及计算,则不会出结果,还有就是该功能只能计算结果是四位及以下的十六进制乘法,该仿真经过8个脉冲后得到C7*FE=C572
VHDL与集成电路设计实验报告
时间:
第9周周三实验五:
8位16进制频率计设计
一、实验目的:
设计8位16进制频率计,学习较复杂的数字系统设计方法。
二、实验内容:
分别仿真测试模块例7-7、例7-8和例7-9,再结合例7-10完成频率计的完整设计和硬件实现,并给出其测频时序波形及其分析。
建议选实验电路模式5;8个数码管以16进制形式显示测频输出;待测频率输入FIN由clock0输入,频率可选4Hz、256HZ、3Hz...50MHz等;1HZ测频控制信号CLK1HZ可由clock2输入(用跳线选1Hz)。
注意,这时8个数码管的测频显示值是16进制的。
将频率计改为8位10进制频率计,注意此设计电路的计数器必须是8个4位的10进制计数器,而不是1个。
此外注意在测频速度上给予优化。
用LPM模块取代例7-8和例7-9,再完成同样的设计任务。
用嵌入式锁相环PLL的LPM模块对实验系统的50MHz或20MHz时钟源分频率,PLL的输出信号作为频率计的待测信号。
注意PLL的输入时钟必须是器件的专用时钟输入脚,且输入频率不能低于16MHz。
三、实验程序(部分)
【例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-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;
四、实验结果:
结果分析:
给出不同频率的时钟则是不同的计数方式,测定信号的频率必须有一个脉宽为1秒的输入信号脉冲计数允许的信号;1秒计数结束后,计数值被锁入锁存器,计数器清0,为下一测频计数周期作好准备。
测频控制信号可以由一个独立的发生器来产生。
VHDL与集成电路设计实验报告
时间:
第10周周三实验六:
数控分频器与乐曲硬件演奏电路设计
一、实验目的:
学习利用数控分频器设计硬件乐曲演奏电路。
二、实验内容:
实验内容1:
定制例3-4的NoteTabs模块中的音符数据ROM“music”。
该ROM中的音符数据已列在例3-5中。
注意该例数据表中的数据位宽、深度和数据的表达类型。
此外,为了节省篇幅,例中的数据都横排了,实用中应该以每一分号为一行来展开,否则会出错。
最后对该ROM进行仿真,确认例3-5中的音符数据已经进入ROM中。
实验内容2:
根据给出的乘法器逻辑原理图及其各模块的VHDL描述,在QuartusII上完成全部设计,包括编辑、编译、综合和仿真操作等。
给出仿真波形,并作出详细说明。
实验内容3:
硬件验证。
先将引脚锁定,使CLK12MHz与clock9相接,接受12MHz时钟频率(用短路帽在clock9接“12MHz”);CLK8Hz与clock2相接,接受4Hz频率;发音输出SPKOUT接Speaker;与演奏发音相对应的简谱码输出显示可由CODE1在数码管5显示;HIGH1为高八度音指示,可由发光管D5指示,最后向目标芯片下载适配后的SOF逻辑设计文件。
实验电路结构图为NO.1。
三:
实验程序(部分)
(节选)CASEIndexIS--译码电路,查表方式,控制音调的预置数
WHEN"0000"=>Tone<="11111111111";CODE<="0000";HIGH<='0';--2047
WHEN"0001"=>Tone<="01100000101";CODE<="0001";HIGH<='0';--773;
WHEN"0010"=>Tone<="01110010000";CODE<="0010";HIGH<='0';--912;
WHEN"0011"=>Tone<="10000001100";CODE<="0011";HIGH<='0';--1036;
WHEN"0101"=>Tone<="10010101101";CODE<="0101";HIGH<='0';--1197;
WHEN"0110"=>Tone<="10100001010";CODE<="0110";HIGH<='0';--1290;
WHEN"0111"=>Tone<="10101011100";CODE<="0111";HIGH<='0';--1372;
WHEN"1000"=>Tone<="10110000010";CODE<="0001";HIGH<='1';--1410;
WHEN"1001"=>Tone<="10111001000";CODE<="0010";HIGH<='1';--1480;
WHEN"1010"=>Tone<="11000000110";CODE<="0011";HIGH<='1';--1542;
WHEN"1100"=>Tone<="11001010110";CODE<="0101";HIGH<='1';--1622;
WHEN"1101"=>Tone<="11010000100";CODE<="0110";HIGH<='1';--1668;
WHEN"1111"=>Tone<="11011000000";CODE<="0001";HIGH<='1';--1728;
WHENOTHERS=>NULL;
ENDCASE;
ENDPROCESS;
END;
【例3-5】
WIDTH=4;--“梁祝”乐曲演奏数据
DEPTH=256;
ADDRESS_RADIX=DEC;
DATA_RADIX=DEC;
CONTENTBEGIN--注意,以下的数据排列方法只是为了节省空间,实用文件中要展开以下数据,每一组占一行
00:
3;01:
3;02:
3;03:
3;04:
5;05:
5;06:
5;07:
6;08:
8;09:
8;
10:
8;11:
9;12:
6;13:
8;14:
5;15:
5;16:
12;17:
12;18:
12;19:
15;
20:
13;21:
12;22:
10;23:
12;24:
9;25:
9;26:
9;27:
9;28:
9;29:
9;
30:
9;31:
0;32:
9;33:
9;34:
9;35:
10;36:
7;37:
7;38:
6;39:
6;
40:
5;41:
5;42:
5;43:
6;44:
8;45:
8;46:
9;47:
9;48:
3;49:
3;
50:
8;51:
8;52:
6;53:
5;54:
6;55:
8;56:
5;57:
5;58:
5;59:
5;
60:
5;61:
5;62:
5;63:
5;64:
10;65:
10;66:
10;67:
12;68:
7;69:
7;
70:
9;71:
9;72:
6;73:
8;74:
5;75:
5;76:
5;77:
5;78:
5;79:
5;
80:
3;81:
5;82:
3;83:
3;84:
5;85:
6;86:
7;87:
9;88:
6;89:
6;
90:
6;91:
6;92:
6;93:
6;94:
5;95:
6;96:
8;97:
8;98:
8;99:
9;
100:
12;101:
12;102:
12;103:
10;104:
9;105:
9;106:
10;107:
9;108:
8;109:
8;
110:
6;111:
5;112:
3;113:
3;114:
3;115:
3;116:
8;117:
8;118:
8;119:
8;
120:
6;121:
8;122:
6;123:
5;124:
3;125:
5;126:
6;127:
8;128:
5;129:
5;
130:
5;131:
5;132:
5;133:
5;134:
5;135:
5;136:
0;137:
0;138:
0;
END;
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);