可程式設計邏輯晶片的“心臟”:FPGA時鐘網路(2)
前言
接著上期文章繼續分析關於時鐘網路的結構,時鐘結構相當於“心臟的通路”,使時鐘到達各地的時間不至於嚴重的延遲。
一、時鐘網路結構
時鐘網路總體架構圖
Clock Region(時鐘域):FPGA內部BANK(模組)分成了很多個時鐘區域,在區域內的時鐘不與外部互聯稱為區域性時鐘網路。
Clock Backbone(時鐘主幹道):將FPGA晶片的結構分成了左右兩部分,所有的全域性時鐘佈線均要從此經過。
HROW(水平時鐘線):從水平方向貫穿每個時鐘區域的中心區域,將時鐘區域分成上下完全一致的兩部分。全域性時鐘線進入每個時鐘區域的邏輯資源時,必須經過水平時鐘線。
I/O Column :外部訊號或時鐘輸入管腳。
CMT Backbone:對於相鄰時鐘區域的時鐘佈線,可以不使用珍貴的全域性時鐘網路,而使用每個時鐘區域都包含的CMT Backbone通道。
CMT Column:每個時鐘區域都包含一個CMT,一個CMT由一個MMCM和一個PLL組成。
GT Column:內含高速序列收發器。
區域時鐘網路結構
上圖為一個時鐘域基本的連線結構,即被虛線分割的
Clock Region。
全域性時鐘緩衝器(BUFG)能夠透過HROW(水平時鐘行)驅動所有區域
Backbone可以到達任意一個時鐘區域,且BUFG透過HROW到達時鐘區域內部的每個邏輯單元中。
BUFH即為水平時鐘緩衝器,它相當於一個功能受限的BUFG,其輸出時鐘只能透過HROW在左右相鄰的時鐘區域內工作。
BUFIO即為IO時鐘緩衝器,其輸出時鐘只能作用在一個時鐘區域的IO暫存器處,無法在FPGA內部邏輯使用。
BUFR即為區域時鐘緩衝器,其輸出的結果只作用在一個時鐘區域。
BUFMR即為多區域時鐘緩衝器,其輸出作用在本時鐘區域,還可以透過CMT Backbone作用在上下相鄰兩個時鐘區域。
MMCM、PLL即時鐘管理模組,用來消除時鐘的延遲、抖動以及產生各種不同頻率的時鐘。
CC即為外部時鐘輸入管腳,其管腳在內部可以連線到BUFG、BUFR、BUFIO、BUFH、MMCM、PLL等。
二、時鐘網路
2。1 時鐘緩衝
2。1。1 BUFG (即全域性緩衝)
BUFG的輸出作用是到達FPGA內部的IOB、CLB、Block Select RAM的時鐘延遲和抖動最小。
verilog原語例化:
BUFG 例化名
(
。I (輸入訊號),
。O (輸出訊號)
);
BUFG時序圖
2。1。2 BUFGMUX (全域性時鐘選擇緩衝,高電平敏感)
它有兩個輸入I0和I1,一個控制端S,一個輸出端O。當S為低電平時輸出時鐘為I0,反之為I1。I0和I1兩個輸入時鐘可以為非同步關係。
verilog原語例化:
BUFGMUX 例化名
(
。O (輸出訊號),
。I0 (輸入訊號0),
。I1 (輸入訊號1),
。S (控制使能)
);
時序圖
當前的輸出為I0,S為控制使能,置1時為啟用輸出改變。
如果I0當前為高電平,則多路複用器等待I0置為低電平。
I0為低電平後,多路複用器輸出將保持低電平,直到I1由高電平變為低電平為止。
當I1從高電平過渡到低電平時,輸出切換到I1,則輸出上不會出現毛刺或短脈衝。
2。1。3 BUFGMUX_1(全域性時鐘選擇緩衝,高電平敏感)
作用與BUFGMUX類似。
verilog原語例化:
BUFGMUX_1 例化名
(
。O (輸出訊號),
。I0 (輸入訊號0),
。I1 (輸入訊號1),
。S (控制使能)
);
時序圖
當前的輸出為I0,S為控制使能,置1時為啟用輸出改變。
如果I0當前為低電平,則多路複用器等待I0置為高電平。
I0為高電平後,多路複用器輸出將保持高電平,直到I1由低電平變為高電平為止。
當I1從低電平過渡到高電平時,輸出切換到I1,則輸出上不會出現毛刺或短脈衝。
2。1。4 IBUFG(單端輸入全域性緩衝)
是專用全域性時鐘輸入管腳相連線的全域性緩衝。所有從全域性時鐘管腳輸入的訊號必須經過IBUFG單元,否則在佈局佈線時會報錯。IBUFG支援電壓標準AGP,CTT,GTL,GTLP,HSTL,LVCMOS,LVDCI,LVPECL,LVTTL,PCI,PCIX,,SSTL等多種格式的IO標準。
在輸入訊號被編譯器綜合實現時,會自動加上IBUFG
IBUF為普通的常規輸入緩衝器,接到普通IO上
如上圖所示,在將該訊號設為頂層的訊號,時鐘訊號會自動被編譯器加IBUFG,其他的訊號在被應用到多的模組時,編譯器也會自動加IBUFG。
2。1。5 BUFGCE(時鐘使能端的全域性緩衝)
帶時鐘使能的全域性緩衝,它有一個輸入I、一個使能端CE和一個輸出端O。只有當BUFGCE的使能端CE有效或置1時,BUFGCE才有輸出。
時序圖
在時鐘使能置0時,輸出訊號為低電平,時鐘使能置1時,輸出訊號為輸出。
2。2 差分時鐘緩衝
2。2。1 IBUFGDS(差分時鐘緩衝)
當訊號從一對差分全域性時鐘管腳輸入時,必須透過IBUFGDS支援BLVDS、LDT、LVDSEXT、LVDS等多種格式的IO標準。與IBUFG功能類似。
2。2。2 IBUFDS_GTE2(差分轉單端)
將差分時鐘轉換成單端時鐘訊號。
例化:
verilog原語例化
2。2。3單端轉差分
verilog程式碼:
OBUFDS #(
。IOSTANDARD(“DEFAULT”), // Specify the output I/O standard
。SLEW(“SLOW”) // Specify the output slew rate
) OBUFDS_inst(
。O(O), // Diff_p output (connect directly to top-level port)
。OB(OB), // Diff_n output (connect directly to top-level port)
。I(I) // Buffer input
);
2。3 MMCM(混合模式時鐘管理器)
Mixed-Mode Clock Manager,對外部固定頻率時鐘進行處理,產生需要的時鐘,對時鐘進行調相位,調頻,消抖動和濾波功能,得到高質量的時鐘訊號,這是7系列FPGA獨有的元件。
MMCM架構圖
由上圖可見MMCM有2個時鐘輸入,使用選擇任1路即可,輸入時鐘經過PFD,CP,LF處理產生一定幅度的電壓輸入到VCO,VCO產生頻率與輸入電壓幅度成比例的高頻時鐘,再被除以M倍並反饋到PFD。
因此VCO的輸出頻率是一個穩定的、輸入頻率M倍的高頻時鐘,該時鐘除以不同的倍數(使用者呼叫)即可輸出時鐘clkout0到clkout6。另外第0路輸出和反饋輸出是可以被分數除法,且第0路第3路提供反相180度的輸出,VCO的輸出還可以精確調整相位
verilog原語例化:
MMCM_usrclk 例化名
(
。CLK_IN1 (q3_clk0_refclk_bufg),
。CLKFB_IN (CLKFB_IN),
。CLK_OUT1 (CLK_OUT_150),
。CLK_OUT2 (CLK_OUT_75),
。CLK_OUT3 (CLK_OUT_37),
。CLKFB_OUT (CLKFB_OUT),
。RESET (MMCM_RESET),
。LOCKED (MMCM_LOCKED)
);
訊號埠說明:
CLK_IN1:輸入時鐘源
CLKFB_IN:時鐘反饋,CLKFB_IN= CLKFB_OUT
CLK_OUT1:輸出時鐘訊號。
CLK_OUT1_150:輸出為150M頻率。
RESET:復位
LOCKED:輸出穩定使能。
可透過IP CORE Clocking Wizard進行設定
2。4 DCM(數字時鐘管理單元)
數字時鐘管理器(DCM)是一種用於管理時鐘且有助於時鐘訊號成形和操控的模組。DCM 內含一個延遲鎖相環(DLL),可根據輸入時鐘訊號,去除DCM 輸出時鐘訊號的歪斜,從而避免時鐘分配延遲,從實質上它是一個帶延時的鎖定環,具有對時鐘進行偏移校正和生成不同相位,動態改變時鐘的相位,生成相關倍頻的時鐘進行分頻。K7系列不支援DCM元件。
DCM架構圖
DCM共由四部分組成,如上圖所示。其中最底層仍採用成熟的DLL模組;其次分別為數字頻率合成器(DFS,Digital Frequency Synthesizer)、數字移相器(DPS,Digital Phase Shifter)和數字頻譜擴充套件器(DSS,Digital Spread Spectrum)。不同的晶片模組的DCM輸入頻率範圍是不同的。
埠訊號說明:
CLKIN(源時鐘輸入):DLL輸入時鐘訊號,通常來自IBUFG或BUFG。
CLKFB(反饋時鐘輸入):DLL時鐘反饋訊號,該反饋訊號必須源自CLK0或CLK2X,並透過IBUFG或BUFG相連。
RST(復位):控制DLL的初始化,通常接地。
CLK0(同頻訊號輸出):與CLKIN無相位偏移;CLK90與CLKIN 有90度相位偏移;CLK180與CLKIN 有180度相位偏移;CLK270與CL KIN有270度相位偏移。
CLKDV(分頻輸出):DLL輸出時鐘訊號,是CLKIN的分頻時鐘訊號。DLL支援的分頻係數為1。5,2,2。5,3,4,5,8 和16。
CLK2X(兩倍訊號輸出):CLKIN的2倍頻時鐘訊號。
LOCKED(輸出鎖存):為了完成鎖存,DLL可能要檢測上千個時鐘週期。當DLL完成鎖存之後,LOCKED有效。
下期講介紹時間網路的使用方法。
水平有限,如有錯誤,請指教不勝感情。如果您有其他看法,歡迎在下方討論,謝謝!