据我实际测试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可读格式,之后再整合进来。在实际工程里面,当碰到复杂三层嵌套子电路的情况时,直接采取分段导入的方式相较于全量处理而言更为稳定。











