來源:FPGA 時鐘設(shè)計 1 —— 時鐘資源總結(jié)
關(guān)于一款芯片肥荔,最權(quán)威篷牌、最新的資料當然是廠家的官方文件添瓷。很多大牛都推薦直接閱讀原廠的 datasheet 和 user guide鹅髓。根據(jù)我的體驗瑟押,這確實是最好的途徑陷寝。原因有兩個:
- 首先锅很,市面上的書一般都落后業(yè)界的步伐,我們看到的很多書上的資料都是過時的凤跑。
- 其次爆安,市面上書(尤其是國內(nèi))很多都是簡單的翻譯手冊而來的,而且雖然作者標的是某某大學(xué)的教授仔引,事實上都是教授手下的研究生替老師干活翻譯的扔仓,不能保證翻譯的正確性。
實驗室有的芯片是 Xilinx 的 Virtex-5 系列咖耘,Virtex-5 的 User Guide 是 UG190翘簇,以下內(nèi)容都是從中摘抄的筆記。
Three Types of clock resource(三種時鐘資源)
1儿倒、Global Clocks(全局時鐘)
- 為了時鐘目的版保,每個 Virtex-5 系列的器件內(nèi)部都被分成不同的區(qū)域(regions)呜笑,隨著器件的尺寸不同,最小的有 8 個區(qū)域彻犁,最大的有 24 個區(qū)域叫胁。
- 全局時鐘資源(Global I/O)和局部時鐘資源可以完成所有的復(fù)雜的 / 簡單的時鐘要求。
- 不推薦使用其他的非時鐘資源(比如局部布線資源)來完成時鐘功能汞幢。
- 每個 Virtex-5 系列的器件都有 32 條全局時鐘線 (global clock line)驼鹅,可以驅(qū)動片上的所有時序資源(CLB、BRAM森篷、CMTs输钩、I/O),也可以驅(qū)動其他的邏輯信號仲智。
- 這些全局時鐘線可以用在任何一個區(qū)域中张足。
- 全局時鐘線只能由全局時鐘緩沖器(global clock buffer)驅(qū)動。
- 全局時鐘緩沖器一般由時鐘管理塊(Clock Management Tile, CMT)驅(qū)動坎藐,以減少時鐘布線延時或者調(diào)整和另外一個時鐘的相對延時。
- 全局時鐘的個數(shù)比 CMTs 多哼绑,但是一個 CMT 可以驅(qū)動多個全局時鐘岩馍。
2、Regional Clocks(區(qū)域時鐘)
- 每個區(qū)域(region)含有 2 個局部時鐘緩沖器(regional clock buffer)和 4 個局部時鐘樹(regional clock tree)抖韩。
- 除了處于芯片中心列的組(bank)外蛀恩,一個 Virtex -5 I/O bank 恰好橫跨一個區(qū)域。大小和區(qū)域完全相同的每個組含有 4 個 clock-capable 的時鐘輸入茂浮。
- 每個輸入可以差分驅(qū)動或單端驅(qū)動同一組或區(qū)域中的四個 I/O 時 鐘(I/O clocks)和兩個區(qū)域時鐘(regional clock)双谆。
3、I/O clocks(I/O時鐘)
- 第三種時鐘資源是 I/O clocks席揽,可以達到非常高的速度顽馋,用于局部的 I/O 串行器/解串器。
Global Clocking Resources(全局時鐘資源)
- 全局時鐘(global clocks)是個專用網(wǎng)絡(luò)幌羞,是專為覆蓋對 FPGA 中各種資源的所有時鐘輸入設(shè)計的寸谜。
- 全局時鐘資源包括
- Global Clock Inputs
- Global Clock Buffers
- Clock Tree and Nets-GCLK
- Clock Regions
Global Clock Inputs
Virtex-5 FPGA 包含專用的全局時鐘輸入位置,這些輸入位置即使不用作時鐘輸入属桦,也可用作常規(guī)用戶 I/O熊痴。
每個器件有 20 個全局時鐘輸入。
時鐘輸入可以按任意 I/O 標準配置聂宾,包括差分 I/O 標準果善。每個時鐘輸入可以是單端輸入,也可以是差分輸入系谐。
Global Clock Input Buffer Primitives(全局時鐘輸入緩沖原語)
IBUFG巾陕,單端輸入全局緩沖
IBUFGDS,差分輸入全局緩沖
Global Clock Buffers
- 每個 Virtex-5 器件有 32 個全局時鐘緩沖器。
- 每半個晶片 (上半 / 下半)包含 16 個全局時鐘緩沖器惜论。
- 全局時鐘緩沖器允許各種時鐘源 / 信號源接入全局時鐘樹和網(wǎng)许赃。可以輸入全局時鐘緩沖器的源包括:
- Global clock inputs
- Clock Management Tile (CMT) outputs including:
- Digital Clock Managers (DCMs)
- Phase-Locked Loops (PLLs)
- Other global clock buffer outputs
- General interconnect
- 全局時鐘緩沖器只能由同半個晶片 (上半 / 下半)中的源驅(qū)動馆类。
- 但是混聊,在一個時鐘區(qū)域中僅能驅(qū)動十個不同的時鐘。
- 一個時鐘區(qū)域 (20 個 CLB)是由上十個 CLB 行和下十個 CLB 行組成的時鐘樹的一個 枝乾巧。
- 一個時鐘區(qū)域僅橫跨器件的一半句喜。、
- Global Clock Buffer Primitives
- BUFGCTRL沟于、BUFG咳胃、BUFGCE、BUFGCE_1旷太、BUFGMUX展懈、BUFGMUX_1、BUFGMUX_CTRL
- 其他所有原語均出自 BUFGCTRL 的軟件預(yù)設(shè)置供璧。
- BUFG 全局緩沖
- BUFGCE 帶有時鐘使能(CE)的全局緩沖(BUFG)
- BUFGMUX 全局時鐘選擇緩沖
- BUFGP = IBUFG + BUFG
- BUFGDLL 全局緩沖延遲鎖相環(huán)(舍存崖,被 DCM 代替)
Clock Tree and Nets - GCLK
- Virtex-5 時鐘樹是為低歪斜和低功耗操作設(shè)計的。
- 任何未用分枝都不連接睡毒。
- 當所有邏輯資源都使用時来惧,時鐘樹還管理負載 / 扇出。
- 所有全局時鐘線和緩沖器都以差分形式實現(xiàn)演顾,這有助于大大改善占空比和共模噪聲抑制能力
- 在 Virtex-5 架構(gòu)中供搀,全局時鐘線的引腳接入不僅限于邏輯資源的時鐘引腳。全局時鐘線不用局部互連即可接入 CLB 中的其他引腳钠至。
Clock Regions
- Virtex-5 器件通過使用時鐘區(qū)域改善時鐘控制分配葛虐。
- 每個時鐘區(qū)域最多可有十個全局時鐘域。
- 這十個全局時鐘可以由 32 個全局時鐘緩沖器的任意組合驅(qū)動棉钧。
How to use global clock
Xilinx 芯片全局時鐘資源的使用方法主要有 5 種:
-
IBUFG + BUFG
最基本的全局時鐘資源使用方法挡闰,也稱為 “ BUFGP 法 ” -
IBUFGDS + BUFG
當時鐘信號為差分形式時,需要用 IBUFGDS 代替 IBUFG -
IBUFG + DCM + BUFG
最靈活的使用方法(一般外部提供的時鐘都需要倍頻掰盘、分頻摄悯、移相等操作以后才可以使用,所以中間需要 DCM) -
Logic + BUFG
BUFG 的輸入可以是普通信號愧捕,當某個信號(時鐘奢驯、使能、快速路徑)的扇出非常大次绘、要求抖動延遲最小時瘪阁,可以使用 BUFG 來驅(qū)動這個信號撒遣,使這個信號利用全局時鐘資源。 -
Logic + DCM + BUFG
DCM 的輸入也可以是普通信號管跺,所以上面的例子中的信號需要倍頻义黎、分頻等操作時,需要在中間添加 DCM 豁跑。
在具體使用這些組合方式時廉涕,有兩種例化方式:
- 在設(shè)計中直接例化全局時鐘資源
比較簡單,按照需求例化上面 5 種組合方式即可艇拍。 - 在綜合階段/實現(xiàn)階段通過約束文件的方式實現(xiàn)
隨著綜合工具/布局布線工具的不同而變化狐蜕,大多數(shù)綜合工具會自動分析時鐘信號的扇出數(shù)目,在全局時鐘資源富裕的情況下卸夕,使扇出數(shù)目最大的信號自動指定使用全局時鐘資源层释。這時候我們必須保證滿足下面的原則,否則會報錯快集。如果不能滿足贡羔,則必須在約束文件中明確聲明該信號不使用全局時鐘資源。
NET "CLK" CLOCK_DEDICATED_ROUTE = FALSE;
Principle in Using global clock
原則: 使用 IBUFG / IBUFGDS 的必要條件是信號從全局時鐘引腳輸入个初。
也就是說乖寒,如果某個信號從全局時鐘引腳輸入,不管它是否為時鐘信號勃黍,必須使用 IBUFG/IBUFGDS;如果對某個信號使用了 IBUFG/IBUFGDS晕讲,則這個信號必須從全局時鐘引腳輸入覆获。
原因: 由 Xilinx FPGA 內(nèi)部結(jié)構(gòu)決定的,IBUFG/IBUFGDS 的輸入端僅和芯片的全局時鐘引腳有物理連接瓢省,與普通的 I/O 和其他內(nèi)部 CLB 等沒有物理連接弄息。
P.S. 第二全局時鐘資源
在看其他資料時,看到一種新的時鐘資源 —— 第二全局時鐘資源勤婚。官方的文檔我還沒有找到摹量,所以就直接摘抄書上的筆記了 =.=
- 第二全局時鐘資源屬于長線資源,長度和驅(qū)動能力僅次于全局時鐘資源馒胆,也可以驅(qū)動芯片內(nèi)部的任何一個邏輯缨称,抖動和延時僅次于全局時鐘。
- 在設(shè)計中祝迂,一般將高頻率睦尽、高扇出的時鐘使能信號以及高速路徑上的關(guān)鍵信號指定為全局第二時鐘信號。
- 使用全局時鐘資源并不占用邏輯資源型雳,也不影響其他布線資源当凡;第二時鐘資源占用的是芯片內(nèi)部的資源山害,占用部分邏輯資源,各個部分的布線會相互影響沿量,所以建議在設(shè)計中邏輯占用資源不超過70%時使用浪慌。
使用方法
可以在約束編輯器中的專用約束Misc選項中,指定所選信號使用低抖動延遲資源“Low Skew”來指定朴则,也可以在ucf文件中添加“USELOWSKEWLINES"約束命令权纤。
NET “s1" USELOWSKEWLINES;
NET “s2" USELOWSKEWLINES;
NET “s3" USELOWSKEWLINES;
Regional Clocking Resources(區(qū)域時鐘資源)
- 區(qū)域時鐘網(wǎng)絡(luò)是一組獨立于全局時鐘網(wǎng)絡(luò)的時鐘網(wǎng)絡(luò)。
- 與全局時鐘不同佛掖,區(qū)域時鐘信號 (BUFR) 的跨度限于三個時鐘區(qū)域妖碉,而 I/O 時鐘信號只驅(qū)動一個區(qū)域。
- Virtex-5 時鐘控制資源和網(wǎng)絡(luò)由以下通路和組件構(gòu)成:
- Clock Capable I/O
- I/O Clock Buffer (BUFIO)
- Regional Clock Buffer (BUFR)
- Regional Clock Nets
Clock Capable I/O
- 典型時鐘區(qū)域中有四個 clock-capable I/O 引腳對 (中心列有例外)芥被。
- 有些全局時鐘輸入也是 clock capable I/O欧宜。
- 每個組中有四個專用 clock capable I/O 區(qū)。
- 當用作時鐘輸入時拴魄,clock-capable 引腳可以驅(qū)動 BUFIO 和 BUFR冗茸。
- 這些引腳不能直接連接到全局時鐘緩沖器。
I/O Clock Buffer - BUFIO
- I/O 時鐘緩沖器 (BUFIO) 是可以在 Virtex-5 器件中使用的一種時鐘緩沖器匹中。
- BUFIO 驅(qū)動 I/O 列內(nèi)一個獨立于全局時鐘資源的專用時鐘網(wǎng)夏漱。
- BUFIO 只能由位于同一時鐘區(qū)域的 clock capable I/O 驅(qū)動。
- 典型的時鐘區(qū)域中有四個 BUFIO顶捷。
- BUFIO 不能驅(qū)動邏輯資源 (CLB挂绰、Block RAM 等),因為 I/O 時鐘網(wǎng)絡(luò)只能覆蓋同一組或時鐘區(qū)域內(nèi)的 I/O 列服赎。
-
BUFIO Primitive
BUFIO 其實就是一個時鐘輸入和時鐘輸出緩沖器葵蒂。輸入與輸出之間有一個相位延遲。
Regional Clock Buffer - BUFR
- 區(qū)域時鐘緩沖器 (BUFR) 是可以在 Virtex-5 器件中使用的另一種時鐘緩沖器重虑。
- BUFR 將時鐘信號驅(qū)動到時鐘區(qū)域內(nèi)一個獨立于全局時鐘樹的專用時鐘網(wǎng)践付。
- 每個 BUFR 可以驅(qū)動其所在區(qū)域中的四個區(qū)域時鐘和相鄰區(qū)域 (最多三個時鐘區(qū)域)中的四個時鐘網(wǎng)。
- 與 BUFIO 不同缺厉,BUFR 不僅可以驅(qū)動其所在時鐘區(qū)域和相鄰時鐘區(qū)域中的 I/O 邏輯永高,還可以驅(qū)動其中的邏輯資源 (CLB、Block RAM 等)提针。
- 典型的時鐘區(qū)域 (四個區(qū)域時鐘網(wǎng)絡(luò))中有兩個 BUFR命爬。中心列沒有 BUFR。
-
BUFR Primitive
BUFR 是一個具有輸入時鐘分頻功能的時鐘輸入 / 時鐘輸出緩沖器辐脖。
Regional Clock Nets
- 除了全局時鐘樹和網(wǎng)(global clock trees and nets)遇骑,Virtex-5 器件還包含區(qū)域時鐘網(wǎng)(Regional Clock Nets)。
- 這些時鐘樹也是為低歪斜和低功耗操作設(shè)計的揖曾。
- 未用分枝都不連接落萎。
- 當所有邏輯資源都使用時亥啦,時鐘樹還管理負載 / 扇出。
- 區(qū)域時鐘網(wǎng)的傳播并非遍及整個 Virtex-5 器件练链,而是僅限于一個時鐘區(qū)域翔脱。
- 一個時鐘區(qū)域包含四個獨立的區(qū)域時鐘網(wǎng)。
- 要接入?yún)^(qū)域時鐘網(wǎng)媒鼓,BUFR 必須例化届吁。
- 一個 BUFR 最多可以驅(qū)動兩個相鄰時鐘區(qū)域中的區(qū)域時鐘。
Clock Management Technology(時鐘管理技術(shù))
- Virtex-5 系列的芯片內(nèi)部含有的時鐘管理模塊(Clock Management Tiles绿鸣,CMTs)可以提供靈活的疚沐、高性能的時鐘信號。
- 每個 CMT 由 2 個 DCM 和 1 個 PLL 組成潮模。
DCM
- DCM 原語有兩個:DCM_BASE亮蛔、DCM_ADV
- DCM_BASE 提供基本的功能,比如去歪斜擎厢、頻率合成究流、固定相移;
- DCM_ADV 提供更高級的功能动遭,比如動態(tài)重配置芬探。
- 兩個原語都有各自的輸入輸出端口、屬性設(shè)置和狀態(tài)標識
- DCM 可以連接到芯片上的其他時鐘資源厘惦,包括專用時鐘 I/O偷仿,時鐘緩沖器和PLL
PLL
- Virtex-5 芯片最多包含了 6 個 CMT 模塊,每個 CMT 模塊包含一個 PLL宵蕉,PLL 主要用來廣譜頻率的合成酝静,并且與 DCM 配合最為外部/內(nèi)部時鐘的抖動濾波器。
- PLL 也有兩個原語:PLL_BASE国裳、PLL_ADV
- PLL_BASE 提供基本的功能形入,比如時鐘去歪斜全跨、頻率合成缝左、精確相移、占空比調(diào)整浓若;PLL_ADV 提供更高級的功能渺杉,比如時鐘切換、動態(tài)重配置等挪钓。
MMCM
- 不同系列的芯片內(nèi)部的時鐘管理模塊是不同的是越,比如在 Virtex-5 系列后的芯片就含有了 混合模式時鐘管理器 MMCM 。
- 具體實現(xiàn)時該如何選擇 DCM碌上、DLL倚评、PLL浦徊、MMCM ?找到一篇介紹 Xilinx 時鐘資源的文章:
如何正確使用FPGA的時鐘資源
Other Tips
- 一般來說天梧,外部提供的時鐘信號都需要進行倍頻/分頻才可以使用盔性,這時候需要組合各種時鐘緩沖器和 DCM、PLL 等模塊呢岗,我們有兩種方法:
- 代碼中例化原語冕香,手動組合各種時鐘緩沖器和 DCM、PLL
- 使用 IP core 向?qū)Ш笤ィ瑒?chuàng)建時鐘管理器(可以發(fā)現(xiàn) IP core 生成的代碼就是上面 5 種組合方式)
- 個人感覺使用第二種方法應(yīng)該更加簡潔悉尾、方便,不容易出錯吧挫酿。(如果在代碼中沒有明確聲明使用buffer构眯,ISE 綜合屬性、IP core 屬性設(shè)置里面默認會給所有的輸入輸出自動加上緩沖器)
- 對 FPGA 設(shè)計而言饭豹,全局時鐘是最簡單最可預(yù)測的時鐘鸵赖,最好的時鐘方案是:由專用的全局時鐘輸入引腳驅(qū)動單個全局時鐘蜜笤,并用后者去控制設(shè)計中的每個觸發(fā)器尽纽。全局時鐘資源是專用布線資源,存在與全銅布線層上陶贼,使用全局時鐘資源不影響芯片的其他布線資源翘悉,因此在可以使用全局時鐘的時候盡可能使用茫打。
Summary
- 雖然各個芯片都不盡相同,但是了解相關(guān)的基本知識有利于我們快速掌握芯片的時鐘資源妖混、快速上手老赤。
- Xilinx 的所有器件上的時鐘資源可以分為前面說的 3 類:全局時鐘(global clock)、局部時鐘(regional clock)制市、I/O 時鐘(I/O clock)抬旺,但是不同的器件內(nèi)部含有的時鐘管理模塊是不同的,具體到每一款芯片祥楣,應(yīng)該以對應(yīng)的 User Guide 為準开财。