Xilinx FPGA IBIS 模型的使用問題,總結+分析都在這裡了

關於Xilinx FPGA 模型的使用問題,分享一篇來自專家——老胡的總結、分析給大家。


我們從Xilinx網站,或者Vivado的安裝目錄中獲得的FPGA IBIS模型是這款芯片的通用模型,在信號完整性仿真中使用起來,很不方便。究其原因,其實就是管腳映射不對。

每個FPGA的應用,都會對FPGA的管腳做一個重新定義,Xilinx在提供IBIS模型的時候是無法預計到,所有每個FPGA應用,都要根據具體應用情況生成相應的IBIS模型。

Xilinx FPGA IBIS 模型的使用問題,總結+分析都在這裡了

上圖是一個Xilinx Zynq7 IBIS模型,注意觀察[PIN]這段的第一列,管腳號,你就會發現,FPGA芯片根本不會使用到這樣的管腳號。

這個模型如果直接映射給器件,軟件在仿真過程中,會報告無法找到管腳buffer IBIS模型。


如何獲取正確的IBIS模型呢?

日常工作中,總結下來,有兩種辦法:

1、通過Vivado自動生成

這是Vivado自帶的功能,只要你有和PCB一致的管腳分配文件,就可以自動生成。

相對於上面的方法,這種方法要求使用者對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],我建議手工添加上,提供在仿真中使用的靈活性。

Xilinx FPGA IBIS 模型的使用問題,總結+分析都在這裡了


管腳映射信息獲取

編輯IBIS模型中[Pin]這一段信息,需要獲取FPGA管腳和網絡名稱的對應關係。如果你使用Mentor的IOPT進行FPGA的管腳優化,你有福了,IOPT可以直接生成的管腳分配文件就包含了這個信息。

文章僅以Mentor PADS Standard/Standard Plus為例,介紹管腳映射信息的獲取方式。

PADS Standard/Standard Plus中提供了很方便獲取管腳映射信息的script。其實這也是PADS的一個很好的功能,任何軟件暫未提供的功能,都可以通過script編程的方式實現。

script的調用方式如下圖所示:

Xilinx FPGA IBIS 模型的使用問題,總結+分析都在這裡了

在PAD菜單中選擇Tools->Basic Scripts->Basic Scripts。在彈出對話框中選擇18-Excel Pin List Report,就可以獲得一個包含PCB板上所有器件管腳映射的Excel文件。

Xilinx FPGA IBIS 模型的使用問題,總結+分析都在這裡了

在Excel文件中選取需要的信號和管腳,按照下圖的格式排列,其中第三列是用來添加仿真中將要使用的IBIS Buffer模型名稱或者Model Selector名稱。

在文中的例子中,我編輯的模型將使用在DDR仿真中,所以我添加的都是Model Selector的名稱。

Xilinx FPGA IBIS 模型的使用問題,總結+分析都在這裡了

一點使用經驗,IBIS語法中不支持表格分隔符【Tab】,不能直接從Excel中直接複製粘貼到IBIS模型中去,我通常使用NotePad作中間載體,在其中,使用Replace功能將所有的U14.替換掉。

如果在SI仿真中需要使用.pkg文件,就需要將FPGA的所有管腳在[Pin]段列出來:

Xilinx FPGA IBIS 模型的使用問題,總結+分析都在這裡了

對於電源管腳,需要定義model_name為POWER,地管腳需要定義model_name為GND,未連接管腳定義model_name為NC。

對於一些仿真中不需要使用的管腳可以給一個臨時模型,如上圖中,我將FPGA中所有與DDR仿真無關的管腳的model_name設置為HSTL_I_F_HR。

編輯好了[Pin]這段,根據FPGA中差分對的定義情況,將[Diff Pin]這段也編輯好。

Xilinx FPGA IBIS 模型的使用問題,總結+分析都在這裡了

如果必要刪除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模型的加載速度。

Xilinx FPGA IBIS 模型的使用問題,總結+分析都在這裡了


封裝模型的添加

很多芯片廠家在提供IBIS模型的同時也會提供後綴為.pkg的封裝文件,如何使用.pkg文件也是朋友們經常問到的問題。其實這就是個IBIS的語法問題,在IBIS規範中有明確的定義。

Xilinx FPGA IBIS 模型的使用問題,總結+分析都在這裡了

上圖是IBIS6.1規範的截圖,需要使用.pkg封裝模型只需要添加[Package Model]關鍵字就可以了。

Xilinx FPGA IBIS 模型的使用問題,總結+分析都在這裡了

如上圖所示,在本文的例子中我在[Pin]之前添加了[Package Model]字段,其中 clg400_7z010是封裝模型的名字。

注意:HyperLynx不支持外部package model說明,需要把.pkg文件中的[Define Package Model]和[End Package Model]關鍵字之間的封裝模型定義全部複製到IBIS文件中,如下圖所示。

Xilinx FPGA IBIS 模型的使用問題,總結+分析都在這裡了

為了測試.pkg文件添加的有效性,在添加[Package Model]字段之前,我將[Package]字段中的R_pkg, C_pkg, 和L_pkg都改成0,仿真獲得比對參考波形。

添加了[Package Model] 引用.pkg模型文件,仿真波形如下。下圖中黃色波形為添加了Package模型後的仿真波形,紅色為所有寄生參數設置為0的仿真仿真波形。

Xilinx FPGA IBIS 模型的使用問題,總結+分析都在這裡了


如果讀完文章,還有不解和疑惑,可以在文段後留言討論,或者去EDA365電子論壇發帖討論。EDA365近期會推出系列仿真直播課程,歡迎大家關注瞭解!


分享到:


相關文章: