关于Xilinx FPGA 模型的使用问题,分享一篇来自专家——老胡的总结、分析给大家。
我们从Xilinx网站,或者Vivado的安装目录中获得的FPGA IBIS模型是这款芯片的通用模型,在信号完整性仿真中使用起来,很不方便。究其原因,其实就是管脚映射不对。
每个FPGA的应用,都会对FPGA的管脚做一个重新定义,Xilinx在提供IBIS模型的时候是无法预计到,所有每个FPGA应用,都要根据具体应用情况生成相应的IBIS模型。
上图是一个Xilinx Zynq7 IBIS模型,注意观察[PIN]这段的第一列,管脚号,你就会发现,FPGA芯片根本不会使用到这样的管脚号。
这个模型如果直接映射给器件,软件在仿真过程中,会报告无法找到管脚buffer IBIS模型。
如何获取正确的IBIS模型呢?
日常工作中,总结下来,有两种办法:
1、通过Vivado自动生成
这是Vivado自带的功能,只要你有和PCB一致的管脚分配文件,就可以自动生成。
2、手工编辑生成
相对于上面的方法,这种方法要求使用者对IBIS的语法有一定的了解。本文将着重对这个方法进行介绍。
手工生成FPGA IBIS模型
回顾IBIS的语法定义,一个IBIS文件主要包括以下几部分组成:
1、文件头,定义IBIS版本,生成厂家等信息
2、元件,定义了IBIS文件中所包含的元件 关键字为[Component],一个IBIS文件中可以描述多个元件
3、在[Component]部分是我们编辑FPGA IBIS模型要涉及的
a. 封装参数 IBIS文件中元件的管脚寄生参数有三种定义方式:
- 如下图所示的,[Package] 中定义的整个封装管脚寄生参数RLC的均值
- 在[Pin]部分中,定义了每个管脚的寄生RLC参数
- 使用[Package Model]关键字引用.pkg封装模型文件。这部分我将在本文的后面部分介绍
b. [Pin] 段定义了这个元件的管脚与IBIS Buffer模型的映射关系,以及每个管脚的RLC寄生参数,这个是我们生成FPGA IBIS模型要编辑的主要部分
b. [Diff Pin] 段定义了 元件管脚的差分配对关系,我们生成FPGA IBIS模型,在这一段要添加使用的差分对管脚
c. [Model Selector] 有时一个管脚需要多个IBIS Buffer模型来描述,比如我们在DDR仿真中经常用到的ODT模型,这个就需要使用[Model Selector]进行定义了。
Vivado自动生成的IBIS模型如果不包含[Model Selector],我建议手工添加上,提供在仿真中使用的灵活性。
管脚映射信息获取
编辑IBIS模型中[Pin]这一段信息,需要获取FPGA管脚和网络名称的对应关系。如果你使用Mentor的IOPT进行FPGA的管脚优化,你有福了,IOPT可以直接生成的管脚分配文件就包含了这个信息。
文章仅以Mentor PADS Standard/Standard Plus为例,介绍管脚映射信息的获取方式。
PADS Standard/Standard Plus中提供了很方便获取管脚映射信息的script。其实这也是PADS的一个很好的功能,任何软件暂未提供的功能,都可以通过script编程的方式实现。
script的调用方式如下图所示:
在PAD菜单中选择Tools->Basic Scripts->Basic Scripts。在弹出对话框中选择18-Excel Pin List Report,就可以获得一个包含PCB板上所有器件管脚映射的Excel文件。
在Excel文件中选取需要的信号和管脚,按照下图的格式排列,其中第三列是用来添加仿真中将要使用的IBIS Buffer模型名称或者Model Selector名称。
在文中的例子中,我编辑的模型将使用在DDR仿真中,所以我添加的都是Model Selector的名称。
一点使用经验,IBIS语法中不支持表格分隔符【Tab】,不能直接从Excel中直接复制粘贴到IBIS模型中去,我通常使用NotePad作中间载体,在其中,使用Replace功能将所有的U14.替换掉。
如果在SI仿真中需要使用.pkg文件,就需要将FPGA的所有管脚在[Pin]段列出来:
对于电源管脚,需要定义model_name为POWER,地管脚需要定义model_name为GND,未连接管脚定义model_name为NC。
对于一些仿真中不需要使用的管脚可以给一个临时模型,如上图中,我将FPGA中所有与DDR仿真无关的管脚的model_name设置为HSTL_I_F_HR。
编辑好了[Pin]这段,根据FPGA中差分对的定义情况,将[Diff Pin]这段也编辑好。
如果必要删除FPGA原始模型中没用用到的[Series Pin Mapping]定义,如果有用到,根据实际情况进行管脚修改。
Model Selector的构建
Model Selector中定义了一个管脚能够使用的IBIS Buffer模型的集合。一个偷懒的办法是把原始FPGA文件中定义的IBIS Buffer全部列在Model Selector中。虽然可以用,但是不经济,特别是对于一些大型的FPGA芯片,原始IBIS文件巨大,将导致SI仿真软件加载IBIS时间过长。比较好的办法是根据实际应用,选择放入Model Selector的IBIS Buffer Model。
文中使用到的例子是一个DDR3 1.35V的应用,我只需要Model Selector包含SSTL135的模型就可以了。更进一步,对于DDR_ADD我只需要包含SSTL135模型中IBIS输出模型就可以了,不需要ODT模型。
因为当FPGA作为Memory Controller使用时,地址、命令、控制以及时钟信号只为输出。甚至删除了原始IBIS文件中没有使用到的IBIS Buffer 模型定义,从而缩减IBIS文件大小,提高未来SI软件IBIS模型的加载速度。
封装模型的添加
很多芯片厂家在提供IBIS模型的同时也会提供后缀为.pkg的封装文件,如何使用.pkg文件也是朋友们经常问到的问题。其实这就是个IBIS的语法问题,在IBIS规范中有明确的定义。
上图是IBIS6.1规范的截图,需要使用.pkg封装模型只需要添加[Package Model]关键字就可以了。
如上图所示,在本文的例子中我在[Pin]之前添加了[Package Model]字段,其中 clg400_7z010是封装模型的名字。
注意:HyperLynx不支持外部package model说明,需要把.pkg文件中的[Define Package Model]和[End Package Model]关键字之间的封装模型定义全部复制到IBIS文件中,如下图所示。
为了测试.pkg文件添加的有效性,在添加[Package Model]字段之前,我将[Package]字段中的R_pkg, C_pkg, 和L_pkg都改成0,仿真获得比对参考波形。
添加了[Package Model] 引用.pkg模型文件,仿真波形如下。下图中黄色波形为添加了Package模型后的仿真波形,红色为所有寄生参数设置为0的仿真仿真波形。
文章转载自:老胡的HyperLynx世界;作者:老胡
如果读完文章,还有不解和疑惑,可以在文段后留言讨论,或者去EDA365电子论坛发帖讨论。EDA365近期会推出系列仿真直播课程,欢迎大家关注了解!