首页 > 其他分享 >数模混合设计的LVS流程

数模混合设计的LVS流程

时间:2023-05-21 23:44:44浏览次数:59  
标签:数字 LVS cdl 流程 原理图 width 数模 网表

数模混合设计的LVS流程

1. 前言

最近项目到了验证环节,在做LVS碰到了一些问题。网络上也没有文章给出完整的解决方案,自己试了一下,踩了一些坑之后基本上搞定了这个问题,现记录流程供学习交流。

整体流程包括:数字模块单独LVS,模拟模块单独过LVS,数字网表反提原理图,顶层数字symbol处理,原理图提取cdl,大网表merge,大图LVS这7个步骤。

2. 数字模块单独LVS

数字后端结束后会提供gds的版图和用于过LVS的verilog门级网表,使用calibre LVS工具做LVS前需要将门级网表转换成cdl网表。这需要使用v2lvs工具。这里有一个教程可以参考:

https://wenku.baidu.com/view/8abaab0503d8ce2f0066233f.html?wkts=1683594986827

主要需要准备几个东西:

  1. verilog标准单元库
  2. spice标准单元网表库

以我自己的情况为例,将cim_core_syn.lvs.v的门级网表转换成cdl网表,因为用到了svt和lvt两类单元,所以要把svt和lvt的verilog标准单元库tcbn28hpcplusbwp7t40p140_pwr.v和tcbn28hpcplusbwp7t40p140lvt_pwr.v和spice标准单元网表库tcbn28hpcplusbwp7t40p140_110a.spi和tcbn28hpcplusbwp7t40p140lvt_110a.spi都吃进来。

-v参数跟输入的门级网表,-l参数跟verilog的库,-s参数跟spice库,-o是要输出的cdl

v2lvs -v cim_core_syn.lvs.v -l tcbn28hpcplusbwp7t40p140_pwr.v -l tcbn28hpcplusbwp7t40p140lvt_pwr.v -s tcbn28hpcplusbwp7t40p140_110a.spi -s tcbn28hpcplusbwp7t40p140lvt_110a.spi -o cim_core_syn.cdl

这样就获得了门级网表转换出的cdl网表了。需要注意使用这个cdl网表时需要保证tcbn28hpcplusbwp7t40p140_110a.spi和tcbn28hpcplusbwp7t40p140lvt_110a.spi两个spice标准单元库也在路径下,因为打开cdl网表可以看到,它会去调用这两个spice。

这个cdl文件就可以去和数字模块进行LVS了。在进行LVS时还有一个小坑是可能会出现找不到POWER&GROUND导致LVS出现abortion(因为子模块没有定义Global PG),出现报错:

WARNING: Invalid PATHCHK request "GROUND && ! POWER": no POWER nets present, operation aborted

https://bbs.eetop.cn/thread-305649-1-1.html

解决方案是在Setup->LVS Options中打开LVS Options的选项,在Supply标签页下勾掉Abort LVS on power/ground net errors,并在底下填写Power nets和Ground nets的标签名:

然后就能顺利LVS了。

3. 模拟模块单独LVS

模拟模块的LVS相对简单,这里不做赘述了,可以参考前面写过的这个博客:https://www.cnblogs.com/sasasatori/p/16041328.html

4. 数字网表反提取原理图

数字部分和模拟部分的拼版环节,首先需要制作原理大图,需要在virtuoso下完成,将数字cdl给转换到原理图的方法可以参考下面的博客。

https://blog.csdn.net/weixin_43277020/article/details/127897221

主要是在Virtuoso下通过File->Import->Spice,打开导入界面,在Input标签页下,Netlist File选择转换好的数字cdl网表,Netlist Language选择cdl,Reference Library List中填写自己使用的工艺库。并且勾选Device Mapping File选项。

Output标签页下,Output Library选择要输出到的Library。

转的过程中报错:

Spice In did not find the symbol view of the master cell 'nfet' of the instance

解决方式:

在Device Map标签页下创建一个Device Map,填写要映射的器件,把pfet,nfet,diode等spice网表中的器件名给映射到库里对应的器件名:

Device Map的介绍:

https://bbs.eetop.cn/thread-358413-1-1.html

对于我这里用了多种器件的情况,MappedTo里选择一种器件就行,最后转出来的schematic里的管子的Cell Name可能不对,但是model还是对的。

转的过程中还有报错:

解决方式:到cdl网表中找到名字里带有斜杠/的Instance,把斜杠给全部删掉,我这里用vim直接批量搜索斜杠/然后全部替换成空。

:%s/\///g

全部处理好之后就可以点OK或者Apply进行转换了,最后获得转换好的大原理图。

用这个schematic再制作symbol,然后再去和模拟的部分一起去merge大图,就可以了。

5. 顶层数字symbol处理

虽然已经获得了数字网表对应的schematic,但是如果用它再去导出cdl网表去做LVS就会出现错误,这里主要是工具的问题。

查看tsmc28的spice库发现所有的模型都没有定义finger width这个属性,原理图里的这个finger width属性是由width和finger number在一起计算出来的。只是由于virtuoso软件的bug所以在直接用cdl网表转换出来的原理图里finger width的值是不对的。所有的LVS错误也是由其引发的。

上面这个是用cdl->原理图->网表后做lvs的结果,结果发现这样抽取的w的值和原始网表中的w对应的width不一致了,也是这里导致的lvs中的错误。并且可以发现原理图中出现了finger width和width不一致的问题。

这边也尝试过这个链接里通过skill脚本批量改正finger width的方法。

https://bbs.eetop.cn/thread-469052-1-1.html

编辑这个skill脚本执行后确实可以改正所有的finger width使其在原理图和width一致,但是最后LVS再次导出的网表里的属性仍然是错误的。

所以进行LVS时绝对不能采取把数字cdl导入到原理图后再从原理图抽取cdl的方法,而是应该直接将原始的数字cdl覆盖掉大图里数字部分的cdl。

为了便利这个覆盖操作,需要再做一个只有pin info的空的数字symbol替换之前schematic提取的symbol,可以直接在原来的schematic下全选所有的instance和wire然后删掉,然后将大的原理图的symbol替换成这个只有pin的空schematic所对应的symbol即可.

6. 原理图提取cdl

在virtuoso中File->Export->CDL,然后选择要导出的大图原理图即可。运行成功后会弹出一个Netlist的界面,然后File->Save As进行保存。

7. 大网表merge

接下来需要进行大网表的merge,一共是三个步骤:

  1. 首先复制顶层原理图cdl中数字网表的port部分,对数字网表cdl中的对应数字顶层的port进行覆盖替换(这个原因是因为在进行调用时对于port的顺序是有要求的,不替换会造成线序的错配)

  1. 在顶层原理图cdl中INCLUDE数字网表cdl

  1. 删除掉顶层原理图cdl中的数字顶层网表部分

这样就完成了大图网表的merge操作。

8. 大图LVS

与正常的LVS过程基本没有区别,主要在Inputs->Spice Files下选择上一步中merge好的大图cdl网表即可。

在LVS Options中可以进行一下设置,否则会因为dummy导致一些问题,参考下面这篇:

https://zhuanlan.zhihu.com/p/576365775

然后Run LVS,根据LVS的报告清理掉一些Port,Net的问题,最后clean就可以了。

标签:数字,LVS,cdl,流程,原理图,width,数模,网表
From: https://www.cnblogs.com/sasasatori/p/17419517.html

相关文章

  • 4.内核及启动流程和systemd及awk
    总结内核设计流派及特点宏内核(monolithickernel):又称单内核和强内核,unix,Linux吧所有系统服务都放在内核里,所有功能集成于同一个程序,分层实现不同功能。其实Linux在单内核实现了模块化,也就相当于吸收了微内核的优点微内核(microkernel):windows,Solaris,HarmonyOS。简化内核功能,在内核......
  • 使用API数据接口获取商品详情数据的流程
    API数据接口是开发者获取第三方平台数据的一种方式,使用API接口可以快速地获取海量的商品详情数据,相比其他方式更加高效、实时。下面将介绍使用API数据接口获取商品详情数据的主要流程和步骤:申请API密钥服装打折网站在使用基于淘宝商品数据的API时,需要首先在淘宝开放平台申......
  • 2023年上海驾考科目三考试流程 All In One
    2023年上海驾考科目三考试流程AllInOne科目三考试一次通过秘籍demos(......
  • 微博官方API使用教程【全流程教学】
    目录微博开发者身份认证创建自己的应用新应用的相关配置基本信息高级信息微博认证流程OAuth2.0认证(核心步骤)AccessToken授权有效期接口调用Demo(以评论接口为例)微博开发者身份认证访问微博开放平台,登录自己微博账号,登录之后首先需要完善开发者的基本信息。填写完成后提交即......
  • 【源码解读】asp.net core源码启动流程精细解读
    引言core出来至今,已经7年了,我接触也已经4年了,从开始的2.1,2.2,3.1,5,6再到如今的7,一直都有再用,虽然我是一个Winform仔,但是源码一直从3.1到7都有再看,然后在QQ上面也一直比较活跃,之前好几年前一直说给大家解读asp.netcore源码,在之前的博客中,讲的都是比较粗略化的,因为东西太多......
  • c++ socket API使用流程(转)
    原文:https://blog.csdn.net/weixin_43687811/article/details/122657720?spm=1001.2101.3001.6650.16&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-16-122657720-blog-121686590.pc_relevant_multi_platform_featuressor......
  • Linux基础22 进程的优先级nice, 后台进程管理, 系统平均负载, 系统启动流程
    进程的优先级:nice值越高:表示优先级越低,例如19,该进程容易将CPU使用量让给其他进程。nice值越低:表示优先级越高,例如-20,该进程更不倾向于让出CPU。#以设定的优先级启动nice-n-10tail-f/var/log/messages#重新设置一个进程的优先级(调整sshd的优先级)[root@oldboyedu~]#......
  • 要想工作流程更简便,试试开源web表单设计器
    繁杂的工作流程,让您头疼不已?传统的表单制作效率低?内部数据迟迟得不到有效管理?......作为职场人的你,是否经常遇到上述问题。别着急,在如今的快节奏发展时代,传统的表单制作已经满足不了行业和市场的需求了,想要提质增效,不妨试试开源web表单设计器,说不定,它的灵活、简便、易操作优势特点......
  • 游戏前端工作流程总结
    序言不断总结完善方法论可以在类似的事物中提供指导和依据,下面是我作为前端游戏程序员对工作流程的经验总结。考虑比较复杂的情况,据实际情况酌情简化或者增加细节。本文多是经验所得,主观性较强,且个人水平有限,欢迎讨论交流和批评!流程大概流程如图所示,部分细节在下面说明需求宣......
  • 【一步步开发AI运动小程序】三、运动识别处理流程
    随着人工智能技术的不断发展,阿里体育等IT大厂,推出的“乐动力”、“天天跳绳”AI运动APP,让云上运动会、线上运动会、健身打卡、AI体育指导等概念空前火热。那么,能否将这些在APP成功应用的场景搬上小程序,分享这些概念的红利呢?本系列文章就带您一步一步从零开始开发一个AI运动小程序......