EDA课程设计 1.docx
- 文档编号:10297559
- 上传时间:2023-05-24
- 格式:DOCX
- 页数:49
- 大小:553.03KB
EDA课程设计 1.docx
《EDA课程设计 1.docx》由会员分享,可在线阅读,更多相关《EDA课程设计 1.docx(49页珍藏版)》请在冰点文库上搜索。
EDA课程设计1
华东交通大学理工学院
课程名称EDA
学院电信
专业电信
班级三班
学号20090210410313
姓名杨焜珺
指导老师谌洪茂
第一章、题目..........................................3
第二章、设计步骤......................................4
第三章、设计心得.....................................40
第四章、参考文献.....................................41
第一章题目
应用VHDL引用LPM库设计32位加法器。
要求在QuartusII软件,利用VHDL完成层次式电路设计,电路中的元件可以用VHDL设计也可以用库元件连线构成再封装。
借助EDA工具中的综合器,适配器,时序仿真器和编程器等工具进行相应处理。
输入方法不限制。
适配元件不限制。
要求综合出RTL电路,并进行仿真输入波形设计并分析电路输出波形。
第二章设计步骤
新建工程输入设计项目并存盘:
利用lpm_add_sub函数。
参数设定:
引脚分配:
程序清单:
OPTIONSNAME_SUBSTITUTION=ON;
INCLUDE"addcore";
INCLUDE"look_add";
INCLUDE"bypassff";
INCLUDE"altshift";
INCLUDE"alt_stratix_add_sub";
INCLUDE"alt_mercury_add_sub";
PARAMETERS
(
LPM_WIDTH,
LPM_REPRESENTATION="SIGNED",
LPM_DIRECTION="DEFAULT",--controlledbyadd_subport
ONE_INPUT_IS_CONSTANT="NO",
LPM_PIPELINE=0,
MAXIMIZE_SPEED=5,
REGISTERED_AT_END=0,
OPTIMIZE_FOR_SPEED=5,
USE_CS_BUFFERS=1,
CARRY_CHAIN="IGNORE",
CARRY_CHAIN_LENGTH=32,
DEVICE_FAMILY,
USE_WYS="OFF",
STYLE="NORMAL",
CBXI_PARAMETER="NOTHING"
);
INCLUDE"aglobal90.inc";%devicefamilydefinitions%
FUNCTION@CBXI_PARAMETER(aclr,add_sub,cin,clken,clock,dataa[LPM_WIDTH-1..0],datab[LPM_WIDTH-1.
RETURNS(cout,overflow,result[LPM_WIDTH-1..0]);
--ausefulmacro
DEFINEMIN(a,b)=a
a:
b;
--LPM_PIPELINEbecamethenewnameforLATENCY.WillkeepLATENCYinthecode.
CONSTANTLATENCY=LPM_PIPELINE;
--Determinetheeffectivespeed(vs.size)optimizationfactor:
IfThelocal
--paramisused,takeitastheeffectivevalue,otherwiseusetheglobalvalue
CONSTANTSPEED_MAX_FACTOR=USED(MAXIMIZE_SPEED)?
MAXIMIZE_SPEED:
OPTIMIZE_FOR_SPEED;
--Internalandexternallatency
CONSTANTLAST_STAGE_INDEX=(REGISTERED_AT_END==1)?
1:
0;
CONSTANTINT_STAGES_NUM=LATENCY+1-LAST_STAGE_INDEX;
CONSTANTINT_LATENCY=(LATENCY==0)?
1:
MIN(LPM_WIDTH,INT_STAGES_NUM);
CONSTANTEXT_LATENCY=(LATENCY>LPM_WIDTH)?
(LATENCY-LPM_WIDTH):
0;
CONSTANTREG_LAST_ADDER=((LATENCY>=LPM_WIDTH)#(REGISTERED_AT_END==1))?
1:
0;
DEFINEOVFLOW_EXTRA_DEPTH()=(LPM_REPRESENTATION=="SIGNED"#
LPM_REPRESENTATION=="UNSIGNED"&USED(add_sub))?
REG_LAST_ADDER:
--Partialadders(forpipelinedcases)
CONSTANTRWIDTH=LPM_WIDTHMODINT_LATENCY;--#ofaddersontherightside
CONSTANTLWIDTH=INT_LATENCY-RWIDTH;--#ofaddersontheleftside
CONSTANTSUB_WIDTH1=FLOOR(LPM_WIDTHDIVINT_LATENCY);--Widthofright-sideadders
CONSTANTSUB_WIDTH0=SUB_WIDTH1+1;--Widthofleft-sideadders
--=====================================================
--Look-aheadaddersection
--=====================================================
--Numberof8-bitadderblocksincarry-look-aheadcases
CONSTANTLOOK_AHEAD_BLOCK_SIZE=8;
CONSTANTBLOCKS=CEIL(LPM_WIDTHDIVLOOK_AHEAD_BLOCK_SIZE);
--Willusethelook-aheadadder?
CONSTANTUSE_LOOK_AHEAD=-(!
((LPM_WIDTH ((FAMILY_FLEX()==1)& (USE_CARRY_CHAINS()#(! USE_CARRY_CHAINS()&SPEED_MAX_FACTOR<= (! (FAMILY_FLEX()==1)& (STYLE=="NORMAL"&SPEED_MAX_FACTOR<=5)))); DEFINECBX_FAMILY()=((FAMILY_STRATIXII()==1#FAMILY_CYCLONEII()==1)? 1: 0); SUBDESIGNlpm_add_sub ( dataa[LPM_WIDTH-1..0]: INPUT=GND; datab[LPM_WIDTH-1..0]: INPUT=GND; cin: INPUT=GND; add_sub: INPUT=VCC; clock: INPUT=GND; aclr: INPUT=GND; clken: INPUT=VCC; result[LPM_WIDTH-1..0]: OUTPUT; cout: OUTPUT; overflow: OUTPUT; ) VARIABLE IFCBX_FAMILY()==1&CBXI_PARAMETER! ="NOTHING"GENERATE auto_generated: @CBXI_PARAMETERWITH(CBXI_PARAMETER="NOTHING"); ELSEGENERATE --UsewysiwygimplementationformercuryifUSE_WYSoptionisturnedon IFFAMILY_MERCURY()==1&USE_WYS=="ON"GENERATE mercury_adder: alt_mercury_add_subWITH( LPM_WIDTH=LPM_WIDTH, LPM_REPRESENTATION=LPM_REPRESENTATION, LPM_DIRECTION=LPM_DIRECTION, ONE_INPUT_IS_CONSTANT=ONE_INPUT_IS_CONSTANT, LPM_PIPELINE=LPM_PIPELINE, MAXIMIZE_SPEED=MAXIMIZE_SPEED, REGISTERED_AT_END=REGISTERED_AT_END, OPTIMIZE_FOR_SPEED=OPTIMIZE_FOR_SPEED, USE_CS_BUFFERS=USE_CS_BUFFERS, CARRY_CHAIN_LENGTH=CARRY_CHAIN_LENGTH, STYLE=STYLE ); ELSEGENERATE --UsewysisygimplementationforstratixifUSE_WYSisONoradd_subsignalisused IFFAMILY_STRATIX()==1&(USE_WYS=="ON"#USED(add_sub))&(USE_CARRY_CHAINS())GENERATE stratix_adder: alt_stratix_add_subWITH( LPM_WIDTH=LPM_WIDTH, LPM_REPRESENTATION=LPM_REPRESENTATION, LPM_DIRECTION=LPM_DIRECTION, ONE_INPUT_IS_CONSTANT=ONE_INPUT_IS_CONSTANT, LPM_PIPELINE=LPM_PIPELINE, MAXIMIZE_SPEED=MAXIMIZE_SPEED, REGISTERED_AT_END=REGISTERED_AT_END, OPTIMIZE_FOR_SPEED=OPTIMIZE_FOR_SPEED, USE_CS_BUFFERS=USE_CS_BUFFERS, CARRY_CHAIN_LENGTH=CARRY_CHAIN_LENGTH, STYLE=STYLE ); ELSEGENERATE IFINT_LATENCY>1GENERATE --carry-innode cin_node: NODE; cout_node: NODE; unreg_cout_node: NODE; --datab[]nodes IF(FAMILY_FLEX()==1)GENERATE IF(USE_CARRY_CHAINS())GENERATE IFUSED(add_sub)&ONE_INPUT_IS_CONSTANT=="NO"GENERATE datab_node[LPM_WIDTH-1..0]: LCELL; ELSEGENERATE datab_node[LPM_WIDTH-1..0]: NODE; ENDGENERATE; ELSEGENERATE IFUSED(add_sub)&ONE_INPUT_IS_CONSTANT=="NO"GENERATE datab_node[LPM_WIDTH-1..0]: SOFT; ELSEGENERATE datab_node[LPM_WIDTH-1..0]: NODE; ENDGENERATE; ENDGENERATE; ELSEGENERATE IFUSED(add_sub)&ONE_INPUT_IS_CONSTANT=="NO"GENERATE datab_node[LPM_WIDTH-1..0]: SOFT; ELSEGENERATE datab_node[LPM_WIDTH-1..0]: SOFT; ENDGENERATE; ENDGENERATE; IF(LPM_REPRESENTATION=="UNSIGNED"&LPM_DIRECTION! ="SUB")&USED(add_sub)GENERATE add_sub_ff[INT_LATENCY-2..0]: bypassffWITH(WIDTH=1); ENDGENERATE; ---------------------------------------------- --caseswherepipelinestructureisneeded-- ---------------------------------------------- IF! (FAMILY_FLEX()==1)GENERATE ---------------------------------- --Non-FLEXcases ---------------------------------- --ifanonhomogenousadder,generatethelonger(rightside)adders IFRWIDTH>0GENERATE adder0[RWIDTH-1..0]: addcoreWITH(WIDTH=SUB_WIDTH0, DIRECTION="ADD", USE_CS_BUFFERS=USE_CS_BUFFERS); datab0_ff[INT_LATENCY-1..0][RWIDTH-1..0]: bypassffWITH(WIDTH=SUB_WIDTH0); ENDGENERATE; --generatetheshorter(leftside)adders adder1[LWIDTH-1..0]: addcoreWITH(WIDTH=SUB_WIDTH1, DIRECTION="ADD", USE_CS_BUFFERS=USE_CS_BUFFERS); datab1_ff[INT_LATENCY-1..0][LWIDTH-1..0]: bypassffWITH(WIDTH=SUB_WIDTH1); --dataapipelineregisters dataa_ff[INT_LATENCY-2..0]: bypassffWITH(WIDTH=LPM_WIDTH); ELSEGENERATE ---------------------------------------------- --FLEXcases-- ---------------------------------------------- --ifanonhomogenousadder,generatethelonger(rightside)adders IFRWIDTH>0GENERATE adder0[RWIDTH-1..0]: addcoreWITH(WIDTH=SUB_WIDTH0+1, DIRECTION="ADD", USE_CS_BUFFERS=USE_CS_BUFFERS); IFRWIDTH>1GENERATE adder0_0[RWIDTH-1..1]: addcoreWITH(WIDTH=SUB_WIDTH0+1, DIRECTION="ADD", USE_CS_BUFFERS=USE_CS_BUFFERS); ENDGENERATE; adder1[LWIDTH-1..0]: addcoreWITH(WIDTH=SUB_WIDTH1+1, DIRECTION="ADD", USE_CS_BUFFERS=USE_CS_BUFFERS); adder1_0[LWIDTH-1..0]: addcoreWITH(WIDTH=SUB_WIDTH1+1, DIRECTION="ADD", USE_CS_BUFFERS=USE_CS_BUFFERS); datab0_ff[INT_LATENCY-1..0][RWIDTH-1..0]: bypassffWITH(WIDTH=SUB_WIDTH0+1); ELSEGENERATE adder1[LWIDTH-1..0]: addcoreWITH(WIDTH=SUB_WIDTH1+1, DIRECTION="ADD", USE_CS_BUFFERS=USE_CS_BUFFERS); IFLWIDTH>1GENERATE adder1_0[LWIDTH-1..1]: addcoreWITH(WIDTH=SUB_WIDTH1+1, DIRECTION="ADD", USE_CS_BUFFERS=USE_CS_BUFFERS); ENDGENERATE; ENDGENERATE; datab1_ff[INT_LATENCY-1..0][LWIDTH-1..0]: bypassffWITH(WIDTH=SUB_WIDTH1+1); IFLPM_REPRESENTATION=="SIGNED"GENERATE sign_ff[INT_LATENCY-2..0]: bypassffWITH(WIDTH=2); ENDGENERATE; ENDGENERATE; ELSEGENERATE ---------------------------------- --non-pipelinedaddercases-- ---------------------------------- --Willusealook-aheadtypeadderforFLEX/NORMALwithSPEED_MAX_FACTOR>5or --MAX/FASTcases.Willusearippletypeadderforallothercases. IFUSED(clock)#(USE_LOOK_AHEAD==0)GENERATE adder: addcoreWITH(WIDTH=LPM_WIDTH,DIRECTION=LPM_DIRECTION, REPRESENTATION=LPM_REPRESENTATION, USE_CS_BUFFERS=USE_CS_BUFFERS); cout_node: NODE; oflow_node: NODE; ELSEGENERATE cin_node: NODE; cout_node: NODE; oflow_node: NODE; datab_node[LPM_WIDTH-1..0]: SOFT; adder[BLOCKS-1..0]: addcoreWITH(WIDTH=8, DIRECTION="DEFAULT",
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- EDA课程设计 EDA 课程设计