首頁歷史 > 正文

可程式設計邏輯晶片的“心臟”:FPGA時鐘網路(2)

2021-10-23由 現場可程式設計邏輯閘陣列 發表于 歷史

前言

接著上期文章繼續分析關於時鐘網路的結構,時鐘結構相當於“心臟的通路”,使時鐘到達各地的時間不至於嚴重的延遲。

一、時鐘網路結構

可程式設計邏輯晶片的“心臟”: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:內含高速序列收發器。

可程式設計邏輯晶片的“心臟”:FPGA時鐘網路(2)

區域時鐘網路結構

上圖為一個時鐘域基本的連線結構,即被虛線分割的

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 (輸出訊號)

);

可程式設計邏輯晶片的“心臟”:FPGA時鐘網路(2)

BUFG時序圖

2。1。2 BUFGMUX (全域性時鐘選擇緩衝,高電平敏感)

它有兩個輸入I0和I1,一個控制端S,一個輸出端O。當S為低電平時輸出時鐘為I0,反之為I1。I0和I1兩個輸入時鐘可以為非同步關係。

verilog原語例化:

BUFGMUX 例化名

。O (輸出訊號),

。I0 (輸入訊號0),

。I1 (輸入訊號1),

。S (控制使能)

);

可程式設計邏輯晶片的“心臟”:FPGA時鐘網路(2)

時序圖

當前的輸出為I0,S為控制使能,置1時為啟用輸出改變。

如果I0當前為高電平,則多路複用器等待I0置為低電平。

I0為低電平後,多路複用器輸出將保持低電平,直到I1由高電平變為低電平為止。

當I1從高電平過渡到低電平時,輸出切換到I1,則輸出上不會出現毛刺或短脈衝。

2。1。3 BUFGMUX_1(全域性時鐘選擇緩衝,高電平敏感)

作用與BUFGMUX類似。

verilog原語例化:

BUFGMUX_1 例化名

。O (輸出訊號),

。I0 (輸入訊號0),

。I1 (輸入訊號1),

。S (控制使能)

);

可程式設計邏輯晶片的“心臟”:FPGA時鐘網路(2)

時序圖

當前的輸出為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才有輸出。

可程式設計邏輯晶片的“心臟”:FPGA時鐘網路(2)

時序圖

在時鐘使能置0時,輸出訊號為低電平,時鐘使能置1時,輸出訊號為輸出。

2。2 差分時鐘緩衝

2。2。1 IBUFGDS(差分時鐘緩衝)

當訊號從一對差分全域性時鐘管腳輸入時,必須透過IBUFGDS支援BLVDS、LDT、LVDSEXT、LVDS等多種格式的IO標準。與IBUFG功能類似。

2。2。2 IBUFDS_GTE2(差分轉單端)

將差分時鐘轉換成單端時鐘訊號。

例化:

可程式設計邏輯晶片的“心臟”:FPGA時鐘網路(2)

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獨有的元件。

可程式設計邏輯晶片的“心臟”:FPGA時鐘網路(2)

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元件。

可程式設計邏輯晶片的“心臟”:FPGA時鐘網路(2)

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有效。

下期講介紹時間網路的使用方法。

水平有限,如有錯誤,請指教不勝感情。如果您有其他看法,歡迎在下方討論,謝謝!

頂部