HLMC_55 IP数字后端设计

本文记录了在HLMC_55工艺下完成一个IP数字后端设计的全过程,包括选用的工艺库、初始文件、后端流程的各个环节,以及遇到的绕线和时序挑战。在设计中,由于工艺限制和不规则floorplan,导致绕线和时序成为关键问题。通过调整布局、时钟树优化、解决短路和进行多轮ECO迭代,最终完成了设计并进行了signoff分析。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        前段时间完成了一个IP在HLMC_55工艺下的后端设计,在此记录如下。

        关于工艺

        本次设计选用工艺库为IH55LP_HS_RVT_V2p3_1P4M_1TM2X,设计中不包含IO及Memory,因此物理库只引用standard_cell。关于时序库,target_library选择ih55lp_hs_rvt_ss_1p08_125c_basic.db,link_library选择ih55lp_hs_rvt_ss_1p08_125c_basic.db和ih55lp_hs_rvt_ff_1p32_-40c_basic.db。tech_file选择tf/HLMC_cl055lp_1p4m_1tm2x_mw.tf。因为此工艺只有4层金属,相比其他工艺,绕线问题将成为本设计的设计瓶颈。

        拿到的初始文件

        从前端拿到的东西只有一个网表和一个sdc,因此本次设计不包含扫描链。从sdc可看出,本次设计包含8个主时钟,其中最高频时钟周期为1.25ns(为了减轻后面修正时序的工作量,在apr时把周期调整为1.2),另有17个衍生时钟,用于产生分频。

        从版图拿到的floorplan size为{ {0 0}, {0 482},{2550 482},{2550 0},{2005 0},{2005 382},{545 382},{545 0}},这是一个不规则图形,一开始跑流程的时候仅仅意识到这个不规则形状可能对时序有恶劣的影响,没有考虑到其对绕线的影响,这一点后面再详细讲述。

      

switch (poHeader.getCorpCode()) { case FabUtils.FAB5_CORP_CODE: /* * 根据OUID获取对应库存组织 * FAB5: 84,'HLMC' * FAB6: 86,81 'HLIC' * FAB10: 84,'HHCD' */ if (poHeader.getOuId() == 84) { poHeader.setDestinationOrgName(CompanyUtils.DES_ORG_NAME_FAB5); } // 公司中文名称 poHeader.setCorpName(FabUtils.FAB5_CORP_FULL_NAME); // 公司英文名称 poHeader.setCorpEnName(FabUtils.FAB5_CORP_FULL_NAME_EN); // 采购订单号 // 唛头 poHeader.setShippingMark(TemplateNameUtils.SHIPPING_MARK_FAB5 + poHeader.getPoNumber()); poHeader.setLeftTitle(TemplateNameUtils.LEFT_TITLE_FAB5); termTplName = bo.getLanguageType().equals(PrPoConstant.PRINT_LANGUAGE_TYPE_ZH) ? TemplateNameUtils.FAB5_ZHS + (bo.getPrintFileType().equals(PrPoConstant.PRINT_FILE_TYPE_PDF) ? TemplateNameUtils.FILE_TYPE_PDF : TemplateNameUtils.FILE_TYPE_WORD) : TemplateNameUtils.FAB5_US + (bo.getPrintFileType().equals(PrPoConstant.PRINT_FILE_TYPE_PDF) ? TemplateNameUtils.FILE_TYPE_PDF : TemplateNameUtils.FILE_TYPE_WORD); break; case FabUtils.FAB6_CORP_CODE: if (poHeader.getOuId() == 86 || poHeader.getOuId() == 81) { poHeader.setDestinationOrgName(CompanyUtils.DES_ORG_NAME_FAB6); } poHeader.setCorpName(FabUtils.FAB6_OR_8_CORP_FULL_NAME); poHeader.setCorpEnName(FabUtils.FAB6_OR_8_CORP_FULL_NAME_EN); poHeader.setLeftTitle(TemplateNameUtils.LEFT_TITLE_HLIC); // 唛头 poHeader.setShippingMark(TemplateNameUtils.SHIPPING_MARK_FAB6 + poHeader.getPoNumber()); termTplName = bo.getLanguageType().equals(PrPoConstant.PRINT_LANGUAGE_TYPE_ZH) ? TemplateNameUtils.FAB6_ZHS + (bo.getPrintFileType().equals(PrPoConstant.PRINT_FILE_TYPE_PDF) ? TemplateNameUtils.FILE_TYPE_PDF : TemplateNameUtils.FILE_TYPE_WORD) : TemplateNameUtils.FAB6_US + (bo.getPrintFileType().equals(PrPoConstant.PRINT_FILE_TYPE_PDF) ? TemplateNameUtils.FILE_TYPE_PDF : TemplateNameUtils.FILE_TYPE_WORD); break; case FabUtils.FAB10_CORP_CODE: if (poHeader.getOuId() == 84) { poHeader.setDestinationOrgName(CompanyUtils.DES_ORG_NAME_FAB10); } poHeader.setCorpName(FabUtils.FAB10_CORP_FULL_NAME); poHeader.setCorpEnName(FabUtils.FAB10_CORP_FULL_NAME_EN); poHeader.setLeftTitle(""); // 唛头 poHeader.setShippingMark(TemplateNameUtils.SHIPPING_MARK_FAB10 + poHeader.getPoNumber()); termTplName = bo.getLanguageType().equals(PrPoConstant.PRINT_LANGUAGE_TYPE_ZH) ? TemplateNameUtils.FAB10_ZHS + (bo.getPrintFileType().equals(PrPoConstant.PRINT_FILE_TYPE_PDF) ? TemplateNameUtils.FILE_TYPE_PDF : TemplateNameUtils.FILE_TYPE_WORD) : TemplateNameUtils.FAB10_US + (bo.getPrintFileType().equals(PrPoConstant.PRINT_FILE_TYPE_PDF) ? TemplateNameUtils.FILE_TYPE_PDF : TemplateNameUtils.FILE_TYPE_WORD); break; } 这段代码有待优化的地方吗?
最新发布
06-27
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值