目前,大型設計一般推薦使用同步時序電路。同步時序電路基于時鐘觸發沿設計,對時鐘的周期、占空比、延時和抖動提出了更高的要求。為了滿足同步時序設計的要求,一般在FPGA設計中采用全局時鐘資源驅動設計的主時鐘,以達到最低的時鐘抖動和延遲。 FPGA全局時鐘資源一般使用全銅層工藝實作,并設計了專用時鐘緩沖與驅動結構,進而使全局時鐘到達晶片内部的所有可配置單元(CLB)、I/O單元(IOB)和選擇性塊RAM(Block Select RAM)的時延和抖動都為最小。為了适應複雜設計的需要,Xilinx的FPGA中內建的專用時鐘資源與數字延遲鎖相環(DLL)的數目不斷增加,最新的Virtex II器件最多可以提供16個全局時鐘輸入端口和8個數字時鐘管理子產品(DCM)。
與全局時鐘資源相關的原語常用的與全局時鐘資源相關的Xilinx器件原語包括:IBUFG、IBUFGDS、BUFG、BUFGP、BUFGCE、BUFGMUX、BUFGDLL和DCM等,如圖1所示。
1. IBUFG即輸入全局緩沖,是與專用全局時鐘輸入管腳相連接配接的首級全局緩沖。所有從全局時鐘管腳輸入的信号必須經過IBUF元,否則在布局布線時會報錯。 IBUFG支援AGP、CTT、GTL、GTLP、HSTL、LVCMOS、LVDCI、LVDS、LVPECL、LVTTL、PCI、PCIX和 SSTL等多種格式的IO标準。
G 單
2. IBUFGDS是IBUFG的差分形式,當信号從一對差分全局時鐘管腳輸入時,必須使用IBUFGDS作為全局時鐘輸入緩沖。IBUFG支援BLVDS、LDT、LVDSEXT、LVDS、LVPECL和ULVDS等多種格式的IO标準。
3. BUFG是全局緩沖,它的輸入是IBUFG的輸出,BUFG的輸出到達FPGA内部的IOB、CLB、選擇性塊RAM的時鐘延遲和抖動最小。
4. BUFGCE是帶有時鐘使能端的全局緩沖。它有一個輸入I、一個使能端CE和一個輸出端O。隻有當BUFGCE的使能端CE有效(高電平)時,BUFGCE才有輸出。
5. BUFGMUX是全局時鐘選擇緩沖,它有I0和I1兩個輸入,一個控制端S,一個輸出端O。當S為低電平時輸出時鐘為I0,反之為I1。需要指出的是BUFGMUX的應用十分靈活,I0和I1兩個輸入時鐘甚至可以為異步關系。
6. BUFGP相當于IBUG加上BUFG。
7. BUFGDLL是全局緩沖延遲鎖相環,相當于BUFG與DLL的結合。BUFGDLL在早期設計中經常使用,用以完成全局時鐘的同步和驅動等功能。随着數字時鐘管理單元(DCM)的日益完善,目前BUFGDLL的應用已經逐漸被DCM所取代。
8. DCM即數字時鐘管理單元,主要完成時鐘的同步、移相、分頻、倍頻和去抖動等。DCM與全局時鐘有着密不可分的聯系,為了達到最小的延遲和抖動,幾乎所有的DCM應用都要使用全局緩沖資源。DCM可以用Xilinx ISE軟體中的Architecture Wizard直接生成。
全局時鐘資源的使用方法 全局時鐘資源的使用方法(五種)
1:IBUFG + BUFG的使用方法:
IBUFG後面連接配接BUFG的方法是最基本的全局時鐘資源使用方法,由于IBUFG組合BUFG相當于BUFGP,是以在這種使用方法也稱為BUFGP方法。
2. IBUFGDS + BUFG的使用方法:
當輸入時鐘信号為差分信号時,需要使用IBUFGDS代替IBUFG。
3. IBUFG + DCM + BUFG的使用方法:
這種使用方法最靈活,對全局時鐘的控制更加有效。通過DCM子產品不僅僅能對時鐘進行同步、移相、分頻和倍頻等變換,而且可以使全局時鐘的輸出達到無抖動延遲。
4. Logic + BUFG的使用方法:
BUFG不但可以驅動IBUFG的輸出,還可以驅動其它普通信号的輸出。當某個信号(時鐘、使能、快速路徑)的扇出非常大,并且要求抖動延遲最小時,可以使用BUFG驅動該信号,使該信号利用全局時鐘資源。但需要注意的是,普通IO的輸入或普通片内信号進入全局時鐘布線層需要一個固有的延時,一般在10ns左右,即普通IO和普通片内信号從輸入到BUFG輸出有一個約10ns左右的固有延時,但是BUFG的輸出到片内所有單元(IOB、CLB、選擇性塊RAM)的延時可以忽略不計為“0”ns。
5. Logic + DCM + BUFG的使用方法:
DCM同樣也可以控制并變換普通時鐘信号,即DCM的輸入也可以是普通片内信号。使用全局時鐘資源的注意事項全局時鐘資源必須滿足的重要原則是:使用IBUFG或IBUFGDS的充分必要條件是信号從專用全局時鐘管腳輸入。換言之,當某個信号從全局時鐘管腳輸入,不論它是否為時鐘信号,都必須使用IBUFG或IBUFGDS;如果對某個信号使用了IBUFG或IBUFGDS硬體原語,則這個信号必定是從全局時鐘管腳輸入的。如果違反了這條原則,那麼在布局布線時會報錯。這條規則的使用是由FPGA的内部結構決定的:IBUFG和IBUFGDS的輸入端僅僅與晶片的專用全局時鐘輸入管腳有實體連接配接,與普通IO和其它内部CLB等沒有實體連接配接。另外,由于BUFGP相當于IBUFG和BUFG的組合,是以BUFGP的使用也必須遵循上述的原則。
全局時鐘資源的例化方法
全局時鐘資源的例化方法大緻可分為兩種:
一是在程式中直接例化全局時鐘資源;
二是通過綜合階段限制或者實作階段限制實作對全局時鐘資源的使用;
第一種方法比較簡單,使用者隻需按照前面講述的5種全局時鐘資源的基本使用方法編寫代碼或者繪制原理圖即可。
第二方法是通過綜合階段限制或實作階段的限制完成對全局時鐘資源的調用,這種方法根據綜合工具和布局布線工具的不同而異。
--------------------------------------------------------------------------------------------------------------
IBUFDS、IBUFGDS和OBUFDS都是差分信号緩沖器,用于不同電平接口之間的緩沖和轉換。IBUFDS 是差分輸入的時候用,OBUFDS是差分輸出的時候用,而IBUFGDS則是時鐘信号專用的輸入緩沖器。
下面詳細說明:
IBUFDS
Differential Signaling Input Buffer with Selectable I/O Interface
//差分輸入時鐘緩沖器
IBUFDS是一個輸入緩沖器,支援低壓差分信号(如LVCMOS、LVDS等)。在IBUFDS中,一個電平接口用兩個獨特的電平接口(I和IB)表示。一個可以認為是主信号,另一個可以認為是從信号。主信号和從信号是同一個邏輯信号,但是相位相反。
Inputs | Outputs | |
I | IB | O |
No Change | ||
1 | ||
1 | 1 | |
1 | 1 | No Change |
Verilog Instantiation Template
IBUFDS instance_name (.O (user_O),
.I (user_I),
.IB (user_IB));
IBUFGDS
Dedicated(專用的) Differential Signaling Input Buffer with Selectable I/O Interface
//專用差分輸入時鐘緩沖器
IBUFGDS是一個連接配接時鐘信号BUFG或DCM的專用的差分信号輸入緩沖器。在IBUFGDS中,一個電平接口用兩個獨立的電平接口(I和IB)表示。一個可以認為是主信号,另一個可以認為是從信号。主信号和從信号是同一個邏輯信号,但是相位相反。
Inputs | Outputs | |
I | IB | O |
- * | ||
1 | ||
1 | 1 | |
1 | 1 | - * |
* The dash (-) means No Change.
Verilog Instantiation Template
IBUFGDS instance_name (.O (user_O),
.I (user_I),
.IB (user_IB));
OBUFDS
Differential Signaling Output Buffer with Selectable I/O Interface
//差分輸出時鐘緩沖器
OBUFDS是一個輸出緩沖器,支援低壓差分信号。OBUFDS隔離出了内電路并向晶片上的信号提供驅動電流。它的輸出用O和OB兩個獨立接口表示。一個可以認為是主信号,另一個可以認為是從信号。主信号和從信号是同一個邏輯信号,但是,相位相反。
Inputs | Outputs | |
I | O | OB |
1 | ||
1 | 1 |
Verilog Instantiation Template
OBUFDS instance_name (.O (user_O),
.OB (user_OB),
.I (user_I));