百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 热门文章 > 正文

Xilinx FPGA IBIS 模型的使用问题,总结+分析都在这里了

bigegpt 2024-08-10 12:11 4 浏览

关于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近期会推出系列仿真直播课程,欢迎大家关注了解!

相关推荐

5分钟搭建公网https网页文件服务器,免费权威TLS证书

请关注本头条号,每天坚持更新原创干货技术文章。如需学习视频,请在微信搜索公众号“智传网优”直接开始自助视频学习前言本文主要讲解如何快速搭建一个https网页文件服务器,并免费申请权威机构颁发的tls证...

nginx负载均衡配置(nginx负载均衡配置两个程序副本)

Nginx是什么没有听过Nginx?那么一定听过它的“同行”Apache吧!Nginx同Apache一样都是一种WEB服务器。基于REST架构风格,以统一资源描述符(UniformResources...

19《Nginx 入门教程》Nginx综合实践

今天我们将基于Nginx完成两个比较有用的场景,但是用到的Nginx的配置非常简单。内部Yum源搭建内部Pip源搭建1.实验环境ceph1centos7.6内网ip:172.16....

Nginx性能调优与优化指南(nginx优化配置大全)

Nginx性能调优需要结合服务器硬件资源、业务场景和负载特征进行针对性优化。以下是一些关键优化方向和具体配置示例:一、Nginx配置优化1.进程与连接数优化nginxworker_process...

C++后端开发必须彻底搞懂Nginx,从原理到实战(高级篇)

本文为Nginx实操高级篇。通过配置Nginx配置文件,实现正向代理、反向代理、负载均衡、Nginx缓存、动静分离和高可用Nginx6种功能,并对Nginx的原理作进一步的解析。当需...

【Nginx】史上最全的Nginx配置详解

Nginx服务器配置中最频繁的部分,代理、缓存和日志定义等绝大多数功能和第三方模块的配置都在这里,http块又包括http全局块和server块。Nginx是非常重要的负载均衡中间件,被广泛应用于大型...

【Nginx】Nginx 4种常见配置实例(nginx基本配置与参数说明)

本文主要介绍nginx4种常见的配置实例。Nginx实现反向代理;Nginx实现负载均衡;Nginx实现动静分离;Nginx实现高可用集群;Nginx4种常见配置实例如下:一、Nginx反向代理配...

使用nginx+allure管理自动化测试报告

allure在自动化测试中经常用来生成漂亮的报告,但是网上及官网上给出的例子都仅仅是针对单个测试用例文件的形式介绍的,实际使用中,自动化测试往往需要包含不止一个产品或项目,本文介绍如何使用nginx+...

nginx配置文件详解(nginx配置文件详解高清版)

Nginx是一个强大的免费开源的HTTP服务器和反向代理服务器。在Web开发项目中,nginx常用作为静态文件服务器处理静态文件,并负责将动态请求转发至应用服务器(如Django,Flask,et...

SpringCloud Eureka-服务注册与发现

1.Eureka介绍1.1学习Eureka前的说明目前主流的服务注册&发现的组件是Nacos,但是Eureka作为老牌经典的服务注册&发现技术还是有必要学习一下,原因:(1)一些早期的分布式微服...

微服务 Spring Cloud 实战 Eureka+Gateway+Feign+Hystrix

前言我所在项目组刚接到一个微服务改造需求,技术选型为SpringCloud,具体需求是把部分项目使用SpringCloud技术进行重构。本篇文章中介绍了Eureka、Gateway、Fe...

深度剖析 Spring Cloud Eureka 底层实现原理

你作为一名互联网大厂后端技术开发人员,在构建分布式系统时,是不是常常为服务的注册与发现而头疼?你是否好奇,像SpringCloudEureka这样被广泛使用的组件,它的底层实现原理到底是怎样的...

热爱生活,喜欢折腾。(很热爱生活)

原文是stackoverflow的一则高票回答,原文链接可能之前也有人翻译过,但是刚好自己也有疑惑,所以搬运一下,个人水平有限所以可能翻译存在误差,欢迎指正(如侵删)。尽管classmethod和st...

GDB调试的高级技巧(详细描述gdb调试程序的全过程)

GDB是我们平时调试c/c++程序的利器,查起复杂的bug问题,比打印大法要好得多,但是也不得不说,gdb在默认情况下用起来并不是很好用,最近学习到几个高级点的技巧,分享下:一美化打印先上个例子...

Arduino 实例(二十三)Arduino 给Python 编译器发送信息

1首先Python需要安装Pyserial库,在命令提示符中输入pipintallpyserial若是遇到提示‘pip‘不是内部或外部命令,也不是可运行的程序或批处理文件,则需要设置环境变...