VLSI.docx
《VLSI.docx》由会员分享,可在线阅读,更多相关《VLSI.docx(19页珍藏版)》请在冰豆网上搜索。
![VLSI.docx](https://file1.bdocx.com/fileroot1/2022-12/17/f4025211-5653-4a9b-8bd7-01fc70564106/f4025211-5653-4a9b-8bd7-01fc705641061.gif)
VLSI
实验一15位流水线加法器的设计与实现
一、实验类型
研究探索性实验。
二、实验目的与任务
1.实验目的:
熟悉实现流水线的VLSI结构设计思想和所采用的结构设计优化技术,并进一步熟悉有关硬件描述语言的编程和EDA软件的使用。
2.实验任务:
完成一个15位流水线加法器的FPGA设计与实现,包括系统结构设计、硬件语言逻辑描述,再进行程序调试、仿真分析等。
三、实验基本原理
在系统硬件设计中,采用流水线可提高系统的处理速度,但需增加硬件资源。
而FPGA中由于每一个逻辑单元都包含一个触发器,这个触发器或者没有用到,或者用于存储布线资源,因此将流水线应用在FPGA的设计中,在提高系统处理速度的同时,只需要极少或根本不需要额外的硬件成本。
图1.1是一个采用流水线的15位加法器的原理图,它采用流水线将一个15位的并行加法器分解成一个7位和一个8位的并行加法运算,在提高系统处理速度的同时,又充分利用了系统的有关触发器资源。
图1.115位流水线加法器原理图
四、实验仪器设备与工具软件
1.PC机(要求内存在256M以上)。
2.QuartusII/(MAX+plusII+Synplify)、Modelsim软件。
五、实验内容
完成一个如图1.1所示的15位流水线加法器的FPGA设计与实现。
具体包括:
系统体系结构的设计,主要功能电路的设计,各种VHDL源程序的设计,系统的逻辑综合与适配,系统的调试验证(包括程序调试、有关仿真及分析)。
本设计的参考程序如下:
LIBRARYLPM;
USELPM.LPM_COMPONENTS.ALL;
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_ARITH.ALL;
ENTITYADD_1PIS
GENERIC(WIDTH:
INTEGER:
=15;--TOTALBITWIDTH
WIDTH1:
INTEGER:
=7;--BITWIDTHOFLSBS
WIDTH2:
INTEGER:
=8;--BITWIDTHOFMSBS
ONE:
INTEGER:
=1);--1BITFORCARRYREG.
PORT(X,Y:
INSTD_LOGIC_VECTOR(WIDTH-1DOWNTO0);
--INPUTS
SUM:
OUTSTD_LOGIC_VECTOR(WIDTH-1DOWNTO0);
--RESULT
CLK:
INSTD_LOGIC);
ENDADD_1P;
ARCHITECTUREFLEXOFADD_1PIS
SIGNALL1,L2,R1,Q1--LSBSOFINPUTS
:
STD_LOGIC_VECTOR(WIDTH1-1DOWNTO0);
SIGNALL3,L4,R2,Q2,U2,H2--MSBSOFINPUTS
:
STD_LOGIC_VECTOR(WIDTH2-1DOWNTO0);
SIGNALS:
STD_LOGIC_VECTOR(WIDTH-1DOWNTO0);
--OUTPUTREGISTER
SIGNALCR1,CQ1:
STD_LOGIC_VECTOR(ONE-1DOWNTO0);
--LSBSCARRYSIGNAL
BEGIN
PROCESS--SPLITINMSBSANDLSBSANDSTOREINREGISTERS
BEGIN
WAITUNTILCLK='1';
--SPLITLSBSFROMINPUTX,Y
FORKINWIDTH1-1DOWNTO0LOOP
L1(K)<=X(K);
L2(K)<=Y(K);
ENDLOOP;
--SPLITMSBSFROMINPUTX,Y
FORKINWIDTH2-1DOWNTO0LOOP
L3(K)<=X(K+WIDTH1);
L4(K)<=Y(K+WIDTH1);
ENDLOOP;
ENDPROCESS;
--------------FIRSTSTAGEOFTHEADDER------------------
ADD_1:
LPM_ADD_SUB--ADDLSBSOFXANDY
GENERICMAP(LPM_WIDTH=>WIDTH1,
LPM_REPRESENTATION=>"UNSIGNED",
LPM_DIRECTION=>"ADD")
PORTMAP(DATAA=>L1,DATAB=>L2,
RESULT=>R1,COUT=>CR1(0));
REG_1:
LPM_FF--SAVELSBSOFX+YANDCARRY
GENERICMAP(LPM_WIDTH=>WIDTH1)
PORTMAP(DATA=>R1,Q=>Q1,CLOCK=>CLK);
REG_2:
LPM_FF
GENERICMAP(LPM_WIDTH=>ONE)
PORTMAP(DATA=>CR1,Q=>CQ1,CLOCK=>CLK);
ADD_2:
LPM_ADD_SUB--ADDMSBSOFXANDY
GENERICMAP(LPM_WIDTH=>WIDTH2,
LPM_REPRESENTATION=>"UNSIGNED",
LPM_DIRECTION=>"ADD")
PORTMAP(DATAA=>L3,DATAB=>L4,RESULT=>R2);
REG_3:
LPM_FF--SAVEMSBSOFX+Y
GENERICMAP(LPM_WIDTH=>WIDTH2)
PORTMAP(DATA=>R2,Q=>Q2,CLOCK=>CLK);
------------SECONDSTAGEOFTHEADDER--------------------
--ONEOPERANDISZERO
H2<=(OTHERS=>'0');
--ADDRESULTFROMMSBS(X+Y)ANDCARRYFROMLSBS
ADD_3:
LPM_ADD_SUB
GENERICMAP(LPM_WIDTH=>WIDTH2,
LPM_REPRESENTATION=>"UNSIGNED",
LPM_DIRECTION=>"ADD")
PORTMAP(CIN=>CQ1(0),DATAA=>Q2,
DATAB=>H2,RESULT=>U2);
PROCESS--BUILDASINGLEREGISTEREDOUTPUT
BEGIN--WORDOFWIDTH=WIDTH1+WIDTH2
WAITUNTILCLK='1';
FORKINWIDTH1-1DOWNTO0LOOP
S(K)<=Q1(K);
ENDLOOP;
FORKINWIDTH2-1DOWNTO0LOOP
S(K+WIDTH1)<=U2(K);
ENDLOOP;
ENDPROCESS;
SUM<=S;--CONNECTSTOOUTPUTPINS
ENDFLEX;
六、实验步骤
1.系统体系结构及主要功能电路的设计。
2.各种VHDL源程序的设计。
3.源程序的编辑和编译。
4.逻辑综合和逻辑适配。
5.系统主要模块仿真和系统总体仿真以及有关结果分析
七、实验报告
图1实验一的时序图
图2实验一的RTL图
仿真结果分析
如图1中2+5=7,4+10=14,6+15=21……,但是值得注意的是7在经过3个延时后出现,分析图2可见,数据进来的时候先经过一个触发器,但来一个有效的脉冲的时候数据才能送过去,当经过寄存器1,2,3时又有一个延时,最后经过最后一个触发器的时候,又来一个有效的脉冲才能将数据送过去,故经过三个周期后才出现相加后的数值。
实验二可编程FIR滤波器的设计与实现
一、实验类型
研究探索性实验
二、实验目的与任务
1.实验目的:
熟悉实现可编程FIR滤波器的VLSI结构设计思想和所采用的结构设计优化技术,并进一步熟悉有关硬件描述语言的编程和EDA软件的使用。
2.实验任务:
完成一个可编程FIR滤波器的FPGA设计与实现,包括系统结构设计、硬件语言逻辑描述,再进行程序调试、仿真分析等。
三、实验基本原理
转置结构的FIR滤波器如图2.1所示,该滤波器的优点在不再需要给x[n]提供额外的移位寄存器,而且也没有必要为达到高通过量给乘积的加法器(树)添加额外的流水线级。
图2.1转置结构的FIR滤波器
四、实验仪器设备与工具软件
1.PC机(要求内存在256M以上)。
2.QuartusII/(MAX+plusII+Synplify)、Modelsim软件。
五、实验内容
根据图2.1所示的转置FIR滤波器的原理,完成一个滤波器长度为4的可编程转置FIR滤波器的FPGA设计与实现,具体包括:
系统体系结构的设计,主要功能电路的设计,各种VHDL源程序的设计,系统的逻辑综合与适配,系统的调试验证(包括程序调试、有关仿真及分析)。
其中系统的仿真与分析,选用DaubechiesDB4滤波器,该滤波器的系数为G(Z)=0.48301+0.8365Z-1+0.2241Z-2-0.1294Z-3。
若将系数成8位(加上符号位)精度模式,则G(Z)=124/256+214Z-1/256+57Z-2/256-33Z-3/256。
这时需注意变换后的结果要除以256才是实际的输出。
本设计的参考程序如下:
--THISISAGENERICFIRFILTERGENERATOR
--ITUSESW1BITDATA/COEFFICIENTSBITS
LIBRARYLPM;--USINGPREDEFINEDPACKAGES
USELPM.LPM_COMPONENTS.ALL;
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_ARITH.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYFIR_GENIS------>INTERFACE
GENERIC(W1:
INTEGER:
=9;--INPUTBITWIDTH
W2:
INTEGER:
=18;--MULTIPLIERBITWIDTH2*W1
W3:
INTEGER:
=19;--ADDERWIDTH=W2+LOG2(L)-1
W4:
INTEGER:
=11;--OUTPUTBITWIDTH
L:
INTEGER:
=4;--FILTERLENGTH
MPIPE:
INTEGER:
=3--PIPELINESTEPSOFMULTIPLIER
);
PORT(CLK:
INSTD_LOGIC;
LOAD_X:
INSTD_LOGIC;
X_IN:
INSTD_LOGIC_VECTOR(W1-1DOWNTO0);
C_IN:
INSTD_LOGIC_VECTOR(W1-1DOWNTO0);
Y_OUT:
OUTSTD_LOGIC_VECTOR(W4-1DOWNTO0));
ENDFIR_GEN;
ARCHITECTUREFLEXOFFIR_GENIS
SUBTYPEN1BITISSTD_LOGIC_VECTOR(W1-1DOWNTO0);
SUBTYPEN2BITISSTD_LOGIC_VECTOR(W2-1DOWNTO0);
SUBTYPEN3BITISSTD_LOGIC_VECTOR(W3-1DOWNTO0);
TYPEARRAY_N1BITISARRAY(0TOL-1)OFN1BIT;
TYPEARRAY_N2BITISARRAY(0TOL-1)OFN2BIT;
TYPEARRAY_N3BITISARRAY(0TOL-1)OFN3BIT;
SIGNALX:
N1BIT;
SIGNALY:
N3BIT;
SIGNALC:
ARRAY_N1BIT;--COEFFICIENTARRAY
SIGNALP:
ARRAY_N2BIT;--PRODUCTARRAY
SIGNALA:
ARRAY_N3BIT;--ADDERARRAY
BEGIN
LOAD:
PROCESS------>LOADDATAORCOEFFICIENT
BEGIN
WAITUNTILCLK='1';
IF(LOAD_X='0')THEN
C(L-1)<=C_IN;--STORECOEFFICIENTINREGISTER
FORIINL-2DOWNTO0LOOP--COEFFICIENTSSHIFTONE
C(I)<=C(I+1);
ENDLOOP;
ELSE
X<=X_IN;--GETONEDATASAMPLEATATIME
ENDIF;
ENDPROCESSLOAD;
SOP:
PROCESS(CLK)------>COMPUTESUM-OF-PRODUCTS
BEGIN
IFCLK'EVENTAND(CLK='1')THEN
FORIIN0TOL-2LOOP--COMPUTETHETRANSPOSED
A(I)<=(P(I)(W2-1)&P(I))+A(I+1);--FILTERADDS
ENDLOOP;
A(L-1)<=P(L-1)(W2-1)&P(L-1);--FIRSTTAPHAS
ENDIF;--ONLYAREGISTER
Y<=A(0);
ENDPROCESSSOP;
--INSTANTIATELPIPELINEDMULTIPLIER
MULGEN:
FORIIN0TOL-1GENERATE
MULS:
LPM_MULT--MULTIPLYP(I)=C(I)*X;
GENERICMAP(LPM_WIDTHA=>W1,LPM_WIDTHB=>W1,
LPM_PIPELINE=>MPIPE,
LPM_REPRESENTATION=>"SIGNED",
LPM_WIDTHP=>W2,
LPM_WIDTHS=>W2)
PORTMAP(CLOCK=>CLK,DATAA=>X,
DATAB=>C(I),RESULT=>P(I));
ENDGENERATE;
Y_OUT<=Y(W3-1DOWNTOW3-W4);
ENDFLEX;
六、实验步骤
1.系统体系结构及主要功能电路的设计。
2.各种VHDL源程序的设计。
3.源程序的编辑和编译。
4.逻辑综合和逻辑适配。
5.系统主要模块仿真和系统总体仿真以及有关结果分析。
七、实验报告
图3实验二的时序图
图4实验二的RTL图
仿真结果分析
其中系统的仿真与分析,选用DaubechiesDB4滤波器,该滤波器的系数为G(Z)=0.48301+0.8365Z-1+0.2241Z-2-0.1294Z-3。
若将系数成8位(加上符号位)精度模式,则G(Z)=124/256+214Z-1/256+57Z-2/256-33Z-3/256。
这时需注意变换后的结果要除以256才是实际的输出。
以图3为例,
Y(0)=124/256X(0)=124/256*100=48;
Y
(1)=124/256*X
(1)+214/256*X(0)=124/256*150+214/256*100=156;
Y
(2)=124/256*X
(2)+214/256*X
(1)+57/256*X(0)=124/256*200+214/256*150+57/25*100
=244;
Y(3)=124/256*X(3)+214/256*X
(2)+57/256*X
(1)-33/256*X(0)=124/256*250+214/256*200+57/256*150-33/256*100=308
实验三FFT的旋转因子乘法器、蝶形处理器的设计与实现
一、实验类型
研究探索性实验。
二、实验目的与任务
1.实验目的:
熟悉实现FFT的旋转因子乘法器、蝶形处理器的VLSI结构设计思想和所采用的结构设计优化技术,并进一步熟悉有关硬件描述语言的编程和EDA软件的使用。
2.实验任务:
完成实现FFT的旋转因子乘法器、蝶形处理器的FPGA设计与实现,包括系统结构设计、硬件语言逻辑描述,再进行程序调试、仿真分析等。
三、实验基本原理
FFT方法是信号处理领域核心的算法之一,广泛应用于雷达处理、观测,定时定位处理,数字通信、无线通讯、声纳、图像处理等领域。
radix-2FFT可以用蝶形处理器有效的实现,这种处理器除了蝶形本身外,还包括额外的旋转因子复数乘法器。
radix-2蝶形处理器由一个复数加法器、一个复数减法器和一个旋转因子的复数乘法器组成。
旋转因子的复数乘法器通常由4次实数乘法和2次加/减法运算实现。
但是也可3次实数乘法和3次加/减法运算实现,具体算法如下:
高效复数乘法器算法:
复数旋转因子乘法R+jI=(X+jY)(C+jS)=CX-SY+j(SX+CY)=[(C-S)*Y+C*(X-Y)]+j[(C+S)*X-C*(X-Y)],令E=X-Y,Z=C*E=C*(X-Y),则R=(C-S)*Y+Z,I=(C+S)*X-Z,由于C、C+S和C-S可以预先计算并存储,因此先计算E,Z,然后再计算R、I计算最后的乘积。
为了防止运算中的溢出,蝶形处理器需要计算两个蝶形方程:
Dre+jDim=((Are+jAim)+Bre+jBim))/2;Ere+jEim=((Are+jAim)-Bre+jBim))/2;
临时结果Ere+jEim必须乘以旋转因子。
四、实验仪器设备与工具软件
1.PC机(要求内存在256M以上)。
2.QuartusII/(MAX+plusII+Synplify)、Modelsim软件。
五、实验内容
完成实现FFT的旋转因子乘法器、蝶形处理器的FPGA设计与实现。
具体包括:
系统体系结构的设计,主要功能电路的设计,各种VHDL源程序的设计,系统的逻辑综合与适配,系统的调试验证(包括程序调试、有关仿真及分析)。
本设计的参考程序如下:
--旋转因子乘法器的VHDL程序
LIBRARYLPM;
USELPM.LPM_COMPONENTS.ALL;
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_ARITH.ALL;
ENTITYCCMULIS
GENERIC(W2:
INTEGER:
=17;--MULTIPLIERBITWIDTH
W1:
INTEGER:
=9;--BITWIDTHC+SSUM
W:
INTEGER:
=8);--INPUTBITWIDTH
PORT(CLK:
STD_LOGIC;--CLOCKFORTHEOUTPUTREGISTER
X_IN,Y_IN,C_IN--INPUTS
:
INSTD_LOGIC_VECTOR(W-1DOWNTO0);
CPS_IN,CMS_IN--INPUTS
:
INSTD_LOGIC_VECTOR(W1-1DOWNTO0);
R_OUT,I_OUT--RESULTS
:
OUTSTD_LOGIC_VECTOR(W-1DOWNTO0));
ENDCCMUL;
ARCHITECTUREFLEXOFCCMULIS
SIGNALX,Y,C:
STD_LOGIC_VECTOR(W-1DOWNTO0);
--INPUTSANDOUTPUTS
SIGNALR,I,CMSY,CPSX,XMYC--PRODUCTS
:
STD_LOGIC_VECTOR(W2-1DOWNTO0);
SIGNALXMY,CPS,CMS,SXTX,SXTY--X-YETC.
:
STD_LOGIC_VECTOR(W1-1DOWNTO0);
BEGIN
X<=X_IN;--X
Y<=Y_IN;--J*Y
C<=C_IN;--COS
CPS<=CPS_IN;--COS+SIN
CMS<=CMS_IN;--COS-SIN
PROCESS
BEGIN
WAITUNTILCLK='1';
R_OUT<=R(W2-3DOWNTOW-1);--SCALINGANDFF
I_OUT<=I(W2-3DOWNTOW-1);--FOROUTPUT
ENDPROCESS;
----------CCMULWITH3MUL.AND3ADD/SUB---------------
SXTX<=X(X'HIGH)&X;--POSSIBLEGROWTHFOR
SXTY<=Y(Y'HIGH)&Y;--SUB_1->SIGNEXTENSION
SUB_1:
LPM_ADD_SUB--SUB:
X-Y;
GENERICMAP(LPM_WIDTH=>W1,LPM_DIRECTION=>"SUB",
LPM_REPRESENTATION=>"SIGNED")
PORTMAP(DATAA=>SXTX,DATAB=>SXTY,RESULT=>XMY);
MUL_1:
LPM_MULT--MULTIPLY(X-Y)*C=XMYC
GENERICMAP(LPM_WIDTHA=>W1,LPM_WIDTHB=>W,
LPM_WIDTHP=>W2,LPM_WIDTHS=>W2,