| |
前言:数模混合芯片中,模拟部分往往被封装成一个大的Analog_TOP再给数字集成,数字部分需要对应的lib来跑后面的flow。问了很多做模拟的同事和朋友,似乎只有做对外模拟IP交付的人才会生成lib,对内交付时,要么频率低,不用lib,直接当异步处理,要么就数字自己来搞lib。那么这次也只能硬着头皮自己来了。
liberate中的各种命令选项相当多,搞懂还是挺花时间的,这次因为模拟内部只有vendor提供的ADC(已有现成的lib,无完整gds)和其他一些timing不敏感的功能和接口,所以我的策略就是把liberate当作一个大型脚本,生成一个只提供接口信息的lib,然后再写脚本将ADC的详细timing信息和接口信息merge到一起。当然,ANALOG_TOP封装ADC后,接口连线肯定有所增加,delay也会有所增加,这部分就只能忽略了,如果有朋友知道怎么把这部分延迟加到lib中,还希望不吝赐教啊~~
对着liberate referance manual开始研究:
1、运行liberate,用以下两句命令,用已有lib生成一个template。没有template也没事,自己写也行。
read_library existing.lib
write_template -use_lu_table_name liberate_templates
template内主要是define_template,define_cell等。我这里重点改define_cell的input、output这些,因为整个ANALOG_TOP是被作为一个cell来看的。
2、read_spice
准备好analog netlist和device model,read_spice{netlist model}。model选定TT、SS、FF,但是这里不能用$定义变量,不知道为什么。
3、set_operating_condition -voltage 1.21 -temp -40
根据PVT选择。
4、source template
5、char_library -io
开始特征化,这才是重点,会调用SPICE simulator,我这边用的时Spectre
不加-io选项时,工具会报一个error,意思里面全要计算,太多了,达到计算上限,建议加-io选项,只关心IO。就试了试,可以顺利跑完。
6、write_library new.lib
接口齐全,lib需要的header、bus type、template、接口pin上的cap都有,就是不会再有timing(){...}了,不过也够了。
7、依照上面的流程把需要的corner都来run一遍
8、写脚本将ADC.lib 写入new.lib
往往ADC的pin和ANALOG_TOP中的pin name不一致了,需要修改。related_pin也要特别注意,name变了要修改,直接影响STA。
9、用library compiler生成db
lc_shell>read_lib new.lib
lc_shell>write_lib -o new.db library_name
10、最后打开PrimeTime看看
netlist link db的过程会检查二者接口是否一一对应
然后report_timing看看ADC相关路径是否都能报出来,报的对不对,clk是不是预期的,以确认ADC merge的正确性
不知道这算不算阉割版的K库?使用liberate的过程中才意识到,缺乏mos管等底层知识是很难玩转这个工具的,这里只是解决了lib有无的问题,带timing的lib如何产生,还希望有大神能提点提点~~