




已阅读5页,还剩36页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
课程名称 EDA 学 院 电 信 专 业 电 信 班 级 三 班 学 号 姓 名 指导老师 目录第一章、 题目.3第二章、 设计步骤.4第三章、 设计心得.40第四章、 参考文献.41第一章 题目应用VHDL引用LPM库设计32位加法器。要求在Quartus II软件,利用VHDL完成层次式电路设计,电路中的元件可以用VHDL设计也可以用库元件连线构成再封装。借助EDA工具中的综合器,适配器,时序仿真器和编程器等工具进行相应处理。输入方法不限制。适配元件不限制。要求综合出RTL电路,并进行仿真输入波形设计并分析电路输出波形。第二章 设计步骤新建工程输入设计项目并存盘:利用lpm_add_sub函数。参数设定:引脚分配:程序清单:OPTIONS NAME_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,- controlled by add_sub portONE_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;% device family definitions %FUNCTION CBXI_PARAMETER (aclr, add_sub, cin, clken, clock, dataaLPM_WIDTH-1.0, databLPM_WIDTH-1.RETURNS (cout, overflow, resultLPM_WIDTH-1.0);- a useful macroDEFINE MIN(a, b) = a LPM_WIDTH) ? (LATENCY - LPM_WIDTH) : 0;CONSTANT REG_LAST_ADDER = (LATENCY = LPM_WIDTH) # (REGISTERED_AT_END = 1) ? 1 : 0;DEFINE OVFLOW_EXTRA_DEPTH() = (LPM_REPRESENTATION = SIGNED # LPM_REPRESENTATION = UNSIGNED & USED(add_sub) ? REG_LAST_ADDER :- Partial adders (for pipelined cases)CONSTANT RWIDTH = LPM_WIDTH MOD INT_LATENCY;- # of adders on the right sideCONSTANT LWIDTH = INT_LATENCY - RWIDTH;- # of adders on the left sideCONSTANT SUB_WIDTH1 = FLOOR(LPM_WIDTH DIV INT_LATENCY);- Width of right-side addersCONSTANT SUB_WIDTH0 = SUB_WIDTH1 + 1;- Width of left-side adders- =- Look-ahead adder section- =- Number of 8-bit adder blocks in carry-look-ahead casesCONSTANT LOOK_AHEAD_BLOCK_SIZE = 8;CONSTANT BLOCKS = CEIL(LPM_WIDTH DIV LOOK_AHEAD_BLOCK_SIZE);- Will use the look-ahead adder?CONSTANT USE_LOOK_AHEAD = -(!(LPM_WIDTH LOOK_AHEAD_BLOCK_SIZE) #(FAMILY_FLEX() = 1) & (USE_CARRY_CHAINS() # (!USE_CARRY_CHAINS() & SPEED_MAX_FACTOR = (!(FAMILY_FLEX() = 1) & (STYLE = NORMAL & SPEED_MAX_FACTOR 1 GENERATE- carry-in nodecin_node : NODE;cout_node: NODE;unreg_cout_node : NODE;- datab nodesIF (FAMILY_FLEX() = 1) GENERATEIF (USE_CARRY_CHAINS() GENERATEIF USED(add_sub) & ONE_INPUT_IS_CONSTANT = NO GENERATEdatab_nodeLPM_WIDTH-1.0 : LCELL; ELSE GENERATEdatab_nodeLPM_WIDTH-1.0 : NODE; END GENERATE;ELSE GENERATEIF USED(add_sub) & ONE_INPUT_IS_CONSTANT = NO GENERATEdatab_nodeLPM_WIDTH-1.0 : SOFT; ELSE GENERATEdatab_nodeLPM_WIDTH-1.0 : NODE; END GENERATE;END GENERATE;ELSE GENERATEIF USED(add_sub) & ONE_INPUT_IS_CONSTANT = NO GENERATEdatab_nodeLPM_WIDTH-1.0 : SOFT; ELSE GENERATEdatab_nodeLPM_WIDTH-1.0 : SOFT; END GENERATE;END GENERATE;IF (LPM_REPRESENTATION = UNSIGNED & LPM_DIRECTION != SUB) & USED(add_sub) GENERATEadd_sub_ffINT_LATENCY-2.0: bypassff WITH (WIDTH = 1);END GENERATE;- cases where pipeline structure is needed -IF !(FAMILY_FLEX() = 1) GENERATE- Non-FLEX cases- if a nonhomogenous adder, generate the longer (right side) adders IF RWIDTH 0 GENERATE adder0RWIDTH-1.0 : addcore WITH (WIDTH = SUB_WIDTH0,DIRECTION = ADD,USE_CS_BUFFERS = USE_CS_BUFFERS);datab0_ffINT_LATENCY-1.0RWIDTH-1.0: bypassff WITH (WIDTH = SUB_WIDTH0);END GENERATE;- generate the shorter (left side) addersadder1LWIDTH-1.0: addcore WITH (WIDTH = SUB_WIDTH1, DIRECTION = ADD,USE_CS_BUFFERS = USE_CS_BUFFERS);datab1_ffINT_LATENCY-1.0LWIDTH-1.0 : bypassff WITH (WIDTH = SUB_WIDTH1);- dataa pipeline registers dataa_ffINT_LATENCY-2.0: bypassff WITH (WIDTH = LPM_WIDTH);ELSE GENERATE- FLEX cases- if a nonhomogenous adder, generate the longer (right side) adders IF RWIDTH 0 GENERATEadder0RWIDTH-1.0 : addcore WITH (WIDTH = SUB_WIDTH0 + 1,DIRECTION = ADD,USE_CS_BUFFERS = USE_CS_BUFFERS);IF RWIDTH 1 GENERATEadder0_0RWIDTH-1.1 : addcore WITH (WIDTH = SUB_WIDTH0 + 1,DIRECTION = ADD,USE_CS_BUFFERS = USE_CS_BUFFERS);END GENERATE;adder1LWIDTH-1.0: addcore WITH (WIDTH = SUB_WIDTH1 + 1,DIRECTION = ADD,USE_CS_BUFFERS = USE_CS_BUFFERS);adder1_0LWIDTH-1.0: addcore WITH (WIDTH = SUB_WIDTH1 + 1,DIRECTION = ADD,USE_CS_BUFFERS = USE_CS_BUFFERS);datab0_ffINT_LATENCY-1.0RWIDTH-1.0: bypassff WITH (WIDTH = SUB_WIDTH0+1);ELSE GENERATEadder1LWIDTH-1.0: addcore WITH (WIDTH = SUB_WIDTH1 + 1,DIRECTION = ADD,USE_CS_BUFFERS = USE_CS_BUFFERS);IF LWIDTH 1 GENERATEadder1_0LWIDTH-1.1: addcore WITH (WIDTH = SUB_WIDTH1 + 1,DIRECTION = ADD,USE_CS_BUFFERS = USE_CS_BUFFERS);END GENERATE; END GENERATE;datab1_ffINT_LATENCY-1.0LWIDTH-1.0 : bypassff WITH (WIDTH = SUB_WIDTH1+1);IF LPM_REPRESENTATION = SIGNED GENERATEsign_ffINT_LATENCY-2.0: bypassff WITH (WIDTH = 2);END GENERATE;END GENERATE; ELSE GENERATE- non-pipelined adder cases- Will use a look-ahead type adder for FLEX/NORMAL with SPEED_MAX_FACTOR 5 or- MAX/FAST cases. Will use a ripple type adder for all other cases. IF USED(clock) # (USE_LOOK_AHEAD = 0) GENERATEadder : addcore WITH (WIDTH = LPM_WIDTH, DIRECTION = LPM_DIRECTION, REPRESENTATION = LPM_REPRESENTATION, USE_CS_BUFFERS = USE_CS_BUFFERS);cout_node : NODE;oflow_node : NODE;ELSE GENERATE cin_node : NODE; cout_node : NODE; oflow_node : NODE;datab_nodeLPM_WIDTH-1.0 : SOFT; adderBLOCKS-1.0 : addcore WITH (WIDTH = 8,DIRECTION = DEFAULT,USE_CS_BUFFERS = USE_CS_BUFFERS);look_ahead_unit : look_add WITH (WIDTH = BLOCKS);END GENERATE; END GENERATE; result_nodeLPM_WIDTH-1.0 : NODE;result_ext_latency_ffs: altshift WITH (WIDTH = LPM_WIDTH, DEPTH = EXT_LATENCY);carry_ext_latency_ffs: altshift WITH (WIDTH = 1, DEPTH = EXT_LATENCY);oflow_ext_latency_ffs: altshift WITH (WIDTH = 1, DEPTH = EXT_LATENCY);END GENERATE; - stratixEND GENERATE; -mercuryEND GENERATE; - StratixIIBEGINASSERT REPORT LPM_WIDTH = % LPM_WIDTH SEVERITY DEBUG;ASSERT REPORT LATENCY = % LATENCY SEVERITY DEBUG;ASSERT REPORT LWIDTH = % LWIDTH SEVERITY DEBUG;ASSERT REPORT RWIDTH = % RWIDTH SEVERITY DEBUG;ASSERT REPORT INT_LATENCY = % INT_LATENCY SEVERITY DEBUG;ASSERT REPORT EXT_LATENCY = % EXT_LATENCY SEVERITY DEBUG;ASSERT REPORT SUB_WIDTH1 = % SUB_WIDTH1 SEVERITY DEBUG;ASSERT (LPM_REPRESENTATION = SIGNED # LPM_REPRESENTATION = UNSIGNED)REPORT Illegal value for LPM_REPRESENTATION parameter (%) - value must be SIGNEDLPM_REPRESENTATIONSEVERITY ERRORHELP_ID LPM_ADD_SUB_REPRESENTATION;ASSERT (LPM_WIDTH 0)REPORT LPM_WIDTH parameter value must be greater than 0SEVERITY ERRORHELP_ID LPM_ADD_SUB_WIDTH;ASSERT (USED(clock) ? LATENCY 0 : LATENCY = 0)REPORT Value of LPM_PIPELINE parameter must be greater than 0 if clock input is used andSEVERITY ERRORHELP_ID LPM_ADD_SUB_CLOCK_WITHOUT_LATENCY;ASSERT (LATENCY 0)REPORT Value of LPM_WIDTH parameter must be greater than 0SEVERITY ERRORHELP_ID LPM_ADD_SUB_WIDTH2;ASSERT (LPM_REPRESENTATION = UNSIGNED # LPM_REPRESENTATION = SIGNED)REPORT Illegal value for LPM_REPRESENTATION parameter (%) - value must be UNSIGNED (theLPM_REPRESENTATIONSEVERITY ERRORHELP_ID LPM_ADD_SUB_REPRESENTATION2;ASSERT (ONE_INPUT_IS_CONSTANT = YES # ONE_INPUT_IS_CONSTANT = NO)REPORT Illegal value for ONE_INPUT_IS_CONSTANT parameter (%) - value must be YES or NO ONE_INPUT_IS_CONSTANTSEVERITY ERRORHELP_ID LPM_ADD_SUB_ICONSTANT;ASSERT (LPM_DIRECTION = DEFAULT # LPM_DIRECTION = ADD # LPM_DIRECTION = SUB)REPORT Illegal value for LPM_DIRECTION parameter (%) - value must be ADD, SUB, or DEFAULPM_DIRECTIONSEVERITY ERRORHELP_ID LPM_ADD_SUB_DIRECTION;ASSERT (LPM_DIRECTION = DEFAULT # USED(add_sub) = 0)REPORT Value of LPM_DIRECTION parameter (%) is not consistent with the use of the add_suLPM_DIRECTIONSEVERITY ERRORHELP_ID LPM_ADD_SUB_DIRECTION_ADD_SUB;- The next assertion is not implemented because MAX+PLUS II implementation - differs from the LPM standard. Both overflow and cout are allowed - in MAX+PLUS II.-ASSERT (USED(overflow) = 0 # USED(cout) = 0)-REPORT Cant use overflow port if cout port is used-SEVERITY ERROR-HELP_ID LPM_ADD_SUB_OVERCOUT;ASSERT (FAMILY_IS_KNOWN() = 1)REPORT Megafunction lpm_add_sub does not recognize the current device family (%) - ensure tDEVICE_FAMILYSEVERITY WARNINGHELP_ID LPM_ADD_SUB_FAMILY_UNKNOWN;IF CBX_FAMILY() = 1 & CBXI_PARAMETER != NOTHING GENERATEIF USED(aclr) GENERATEauto_generated.aclr = aclr;END GENERATE;IF USED(add_sub) GENERATEauto_generated.add_sub = add_sub;END GENERATE;IF USED(cin) GENERATEauto_generated.cin = cin;END GENERATE;IF USED(clken) GENERATEauto_generated.clken = clken;END GENERATE;IF USED(clock) GENERATEauto_generated.clock = clock;END GENERATE;IF USED(cout) GENERATEcout = auto_generated.cout;END GENERATE;IF USED(dataa) GENERATEauto_generated.dataa = dataa;END GENERATE;IF USED(datab) GENERATEauto_generated.datab = datab;END GENERATE;IF USED(overflow) GENERATEoverflow = auto_generated.overflow;END GENERATE;IF USED(result) GENERATEresult = auto_generated.result;END GENERATE;ELSE GENERATE- mercury wysiwyg adderIF FAMILY_MERCURY() = 1 & USE_WYS = ON GENERATEresult = mercury_adder.result;IF USED (cout) GENERATEcout = mercury_adder.cout;END GENERATE;IF USED(overflow) GENERATEoverflow = mercury_adder.overflow;END GENERATE;mercury_adder.dataa = dataa;mercury_adder.datab = datab;IF USED(cin) GENERATEmercury_adder.cin = cin;END GENERATE;IF USED(clock) GENERATEmercury_adder.clock = clock;END GENERATE;IF USED(aclr) GENERATEmercury_adder.aclr = aclr;END GENERATE;IF USED(clken) GENERATEmercury_adder.clken = clken;END GENERATE;IF USED(add_sub) GENERATEmercury_adder.add_sub = add_sub;END GENERATE;ELSE GENERATE- stratix wysisyg adderIF FAMILY_STRATIX() = 1 & (USE_WYS = ON # USED(add_sub) & (USE_CARRY_CHAINS() GENERATEresult = stratix_adder.result;IF USED(cout) GENERATEcout = stratix_adder.cout;END GENERATE;IF USED(overflow) GENERATEoverflow = stratix_adder.overflow;END GENERATE;stratix_adder.dataa = dataa;stratix_adder.datab = datab;IF USED(cin) GENERATEstratix_adder.cin = cin;END GENERATE;IF USED(clock) GENERATEstratix_adder.clock = clock;END GENERATE;IF USED(aclr) GENERATEstratix_adder.aclr = aclr;END GENERATE;IF USED(clken) GENERATEstratix_adder.clken = clken;END GENERATE;IF USED(add_sub) GENERATEstratix_adder.add_sub = add_sub;END GENERATE;ELSE GENERATE- default addcore adderIF INT_LATENCY 1 GENERATEIF USED(cin) GENERATEcin_node = cin;ELSE GENERATEIF LPM_DIRECTION = SUB GENERATEcin_node = VCC;ELSE GENERATEcin_node = !add_sub; END GENERATE;END GENERATE;IF (LPM_REPRESENTATION = UNSIGNED & LPM_DIRECTION != SUB) & USED(add_sub) GENERATEadd_sub_ff0.d0 = add_sub;IF INT_LATENCY 2 GENERATEadd_sub_ffINT_LATENCY-2.1.d0 = add_sub_ffINT_LATENCY-3.0.q0;END GENERATE;add_sub_ff.(clk, clrn, ena) = (clock, !aclr, clken);END GENERATE;IF LPM_DIRECTION = SUB GENERATEdatab_node = !datab;ELSE GENERATEIF USED(add_sub) GENERATEdatab_node = datab $ !add_sub;ELSE GENERATEdatab_node = datab;END GENERATE;END GENERATE;IF !(FAMILY_FLEX() = 1) GENERATE- non-FLEX cases- clock connections - adders clock/aclr/clken/add_sub connections IF RWIDTH 0 GENERATEadder0RWIDTH-1.0.(clock, aclr, clken) = (clock, aclr, clken);IF (LWIDTH 1) GENERATEadder1LWIDTH-2.0.(clock, aclr, clken) = (clock, aclr, clken);END GENERATE;ELSE GENERATE IF LWIDTH 1 GENERATEadder1LWIDTH-2.0.(clock, aclr, clken) = (clock, aclr, clken);END GENERATE;END GENERATE;IF REG_LAST_ADDER = 1 GENERATEadder1LWIDTH-1.(clock, aclr, clken) = (clock, aclr, clken);END GENERATE;dataa_ff.(clk, clrn, ena) = (clock, !aclr, clken);IF RWIDTH 0 GENERATEIF RWIDTH 1 GENERATEdatab0_ff0RWIDTH-1.1.(clk, clrn, ena) = (clock, !aclr, clken);END GENERATE;datab1_ff0LWIDTH-1.0.(clk, clrn, ena) = (clock, !aclr, clken);ELSE GENERATEdatab1_ff0LWIDTH-1.1.(clk, clrn, ena) = (clock, !aclr, clken);END GENERATE;-carry_ffINT_LAT
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 无缝墙布专业施工方案(3篇)
- 乡村扶贫慰问活动方案策划(3篇)
- 企业科技活动策划方案(3篇)
- 职场考试题库及答案解析
- 海事院校考试题库及答案
- 放射诊断考试题库及答案
- 北京市门头沟区2023-2024学年八年级下学期第一次月考道德与法制题目及答案
- 校长业务考试题目及答案
- 时间动态课件
- 100字的中秋作文(14篇)
- 《综合交通运输概论(第5版)》全套教学课件
- 2025年重庆市中考数学试卷真题(含标准答案)
- 旋挖钻机地基承载力验算2017.7
- 企业信息化管理职业资格考试试卷及答案2025年
- 护士转行病案管理制度
- 作用及使用方法人力制动机的种类81课件
- 网络协议分析实践试题及答案
- 临床中医护理课件教学
- 数学-“问题解决策略:转化”教案 2024-2025学年北师大版七年级数学下册
- 征收房屋转让协议书
- 锅炉使用单位安全员考试试题
评论
0/150
提交评论