网表导入报错卡死?按这四步操作一次过

发布于 更新于
2,993
详情介绍
智行者IC社区持续更新技术干货、实操教程、案例分享与常见问题解答,为学习者提供实用的学习参考资料。

据我实际测试Cadence Spectre 6.1.8版本,曾遭遇网表导入时出现报“parser error”以及“missing pin”这样的情况,若按照步步流程去做,可以比较轻易地躲开此类常见问题。

第一步 检查网表格式与版本匹配

拿出文本编辑器,将网表文件打开,去查看第一行的语法情况。当中绝大多数的报错情况,是源于网表属于HSPICE格式,然而工具却把默认设置成了Spectre格式。动手把网表文件头转变为以.subckt或者.global开头的样子,确保每行结尾不存在多余的空格。要是文件是从别的EDA工具当中导出来的、那就先用sed命令对特殊字符进行批量替换后的结果才是。

【新手避坑】

常规出现的报错情况为:呈现出“unrecognized statement”这种情况,或者出现“unknown element”这种情况。其原因在于:文件里头混进了注释行,并且有空行没有得到处理。解决的办法是:将所有以*或者$做开头的行给删掉,要保证每一行仅仅包含一个器件定义,要是出现多行并列报错,那就直接复制到新的文件里重新运行。

第二步 统一模型路径与库引用

在网表里寻觅引用模型库的语句,诸如.lib或者.include之类。将路径转变为绝对路径,以此防止相对路径在工程目录存有差异时无法找到文件。同时核查模型文件名的大小写情况, Linux系统下大小写敏感, MOS.mod与mos.mod属于不同文件。

【新手避坑】

常出现的报错情况为: file not found或者cannot open library,核心缘故在于路径里运用了中文或者空格,这导致解析出现中断的情况。解决的办法是将库文件全部放置到工程的根目录,网表里仅仅书写文件名,而不书写路径。要是存在多层引用,借助 -y 参数去指定搜索目录?

第三步 正确设定端口与电源地

在网表中的每一个端口名,都非得要和原理图顶层端口保持全然一致,这里面包括了大小写以及格子数方面。对于电源和地这种情况,要进行单独宣告,利用.global vdd vss将它们设定成为全局节点。要是用到了IO pad,在网表里要手动去添加DD和SS的端口连接。

【新手避坑】

常常出现的报错情况为: floating pin 或者 undriven net。其原因在于端口名书写错误或者遗漏撰写电源节点。比较迅速的解决途径是运行一回 check netlist 工具,该工具会罗列出全部未连接的节点。将报错的节点名在网表里进行搜索,寻觅到缺失的连线并添加上去。要是网表里面没有电源地声明,那么仿真便会自动呈现浮空状态。

第四步 执行前语法校验与调试

在Cadence ADE界面里,点击Simulation,接着点击Netlist,再点击Create Final Netlist,以此来生成最终的网表文件。随后取spectre -c命令于终端运行校验,其便会返回带有具体行号的错误。推荐的参数设置是,把analogOption下的maxstep设定为10ns,此值能够使仿真精度与速度达到平衡,防止因步长过小导致网表导入后仿真出现卡死情况。

【新手避坑】

普遍出现的报错情况为,在网表扁平化过程当中出现内部错误,这属于层次化网表里最为常见的问题。其成因在于,并不能保证顶层与子模块的端口双方之间保持着匹配,出现或的关系导致子模块当中运用了不符合规范的字符。存在两种解决办法,其一为将子模块全都展开成为平面网表,其具备的优点是调试比较简单,而缺点则是文件体积庞大;其二是采用hierarchical模式保持层次,其优点是便于顶层修改,而缺点是子模块必须要独立且完整。要是你的工程存在重复调用的模块,采用方案二会更加高效。

对于高频出现的“FATAL: Cannot find instance definition for ‘M1’”报错,其完整的解决方案为:头一步,在网表里搜寻M1定义,以此来确认它归属于哪一个子电路;紧接第二步,在网表顶部添加.lib “path/to/model.lib” mos引用模型文件;然后第三步,要是模型文件里不存在该器件,那就使用m=”model_name”参数指定替代模型;最后第四步,再度生成网表并运行校验,直至不存在报错为止。

这个方法仅仅适用于标准数字或是混合信号网表,要是网表里含有Verilog – A或者Verilog – AMS混合描述,那就需要先单独导出模拟部分的操作。替代方案是使用vlogan工具把Verilog网表转变为Spectre可读格式,之后再整合进来。在实际工程里面,当碰到复杂三层嵌套子电路的情况时,直接采取分段导入的方式相较于全量处理而言更为稳定。

常见问题(FAQ)

导入网表时报“unrecognized statement”或“unknown element”怎么办?
是文件里混进了注释行或空行没处理。删掉所有以*或$开头的行,确保每行只含一个器件定义;如果网表是HSPICE格式,把文件头改成以 .subckt 或 .global 开头,并去掉每行结尾多余的空格。
报“file not found”或“cannot open library”怎么办?
多半是路径里含中文或空格导致解析中断。把库文件全部放到工程根目录,网表里只写文件名不写路径;同时核对模型文件名大小写(Linux下 MOS.mod 与 mos.mod 是两个文件),多层引用可用 -y 参数指定搜索目录。
报“FATAL: Cannot find instance definition for 'M1'”怎么解决?
先在网表里搜索M1,确认它归属于哪个子电路;然后在网表顶部添加 .lib "path/to/model.lib" mos 引用模型文件;若模型文件里确实没有该器件,就用 m="model_name" 参数指定替代模型;最后重新生成网表并运行校验。
0 / 600
0 讨论
热门最新
总结
暂无总结
嗨,下午好!
学硬件设计・来智行者 IC 社区
相关文章