??本文對(duì)xilinx 7系列FPGA的時(shí)鐘布線資源進(jìn)行講解,內(nèi)容是對(duì)ug472手冊(cè)的解讀和總結(jié),需要該手冊(cè)的可以直接在xilinx官網(wǎng)獲取,或者在公眾號(hào)回復(fù)“xilinx手冊(cè)”即可獲取。
1、概括
??7系列器件根據(jù)芯片大小不同,會(huì)有8至24個(gè)時(shí)鐘區(qū)域,如圖1所示,圖中的每個(gè)虛線框就表示一個(gè)時(shí)鐘區(qū)域,每個(gè)時(shí)鐘區(qū)域包含50個(gè)CLB和50個(gè)IO。
??由上圖可知,F(xiàn)PGA被主時(shí)鐘網(wǎng)絡(luò)(Clock Backbone)分為左右兩部分,在主時(shí)鐘網(wǎng)絡(luò)中包含32個(gè)全局時(shí)鐘資源BUFG,32個(gè)BUFG被水平時(shí)鐘線(Horizontal Center)劃分為上下兩部分,每部分包含16個(gè)BUFG,上下兩部分的BUFG不能混用。
??從左向右,I/O 列(I/O Column)就是FPGA輸入輸出管腳的資源,包含前文介紹過(guò)的IOB、ILOGIC、OLOGIC等資源。位于I/O列旁邊的CMT,可以提供時(shí)鐘頻率合成、去偏差和抖動(dòng)濾波功能。每個(gè)CMT包含一個(gè)混合模式時(shí)鐘管理器(MMCM)和一個(gè)鎖相環(huán)(PLL)。最右側(cè)就是高速收發(fā)器所在列。
??注意水平相鄰的兩個(gè)時(shí)鐘區(qū)域通過(guò)水平時(shí)鐘行(Horizontal Clock Row)連接,也就是BUFH。把圖1中陰影部分的時(shí)鐘區(qū)域放大,得到結(jié)果如圖2所示。每個(gè)時(shí)鐘區(qū)域包含50個(gè)CLB和50個(gè)IO,在區(qū)域內(nèi)部又被水平時(shí)鐘行(Horizontal Clock Row)分為上、下兩部分,各自包含25個(gè)CLB和25個(gè)IO管腳。
??由圖2可知,時(shí)鐘區(qū)域內(nèi)部主要包含全局時(shí)鐘緩沖器(BUFG)、行時(shí)鐘緩沖器(BUFH)、區(qū)域時(shí)鐘緩沖器(BUFR)、IO時(shí)鐘緩沖器(BUFIO)、時(shí)鐘輸入管腳CC,BUFMR用于驅(qū)動(dòng)垂直相鄰時(shí)鐘區(qū)域的BUFR和BUFIO。
??后文主要就是對(duì)上面這些內(nèi)容進(jìn)行詳細(xì)講解,最后在通過(guò)一張圖進(jìn)行總結(jié),以后只需要通過(guò)最后的圖就知道7系列的FPGA的時(shí)鐘區(qū)域內(nèi)各個(gè)緩沖器的使用規(guī)則以及時(shí)鐘輸入管腳的時(shí)鐘規(guī)則。
2、時(shí)鐘輸入管腳
??用戶(hù)時(shí)鐘必須通過(guò)專(zhuān)用時(shí)鐘的差分引腳輸入FPGA,專(zhuān)用時(shí)鐘引腳輸入的信號(hào)可以對(duì)FPGA內(nèi)部全局、區(qū)域時(shí)鐘資源進(jìn)行專(zhuān)用高速訪問(wèn),時(shí)鐘信號(hào)不能通過(guò)通用IO進(jìn)入FPGA。
??每個(gè)I/O bank包括50個(gè)I/O引腳,在每個(gè)I/O列的每個(gè)I/O bank的50個(gè)I/O引腳中,有四個(gè)支持時(shí)鐘的輸入引腳對(duì)CC (總共8個(gè)引腳),2對(duì)MRCC和2對(duì)SRCC時(shí)鐘管腳,如圖3所示。水平時(shí)鐘行(Horizontal Clock Row)的上、下兩部分各包含一對(duì)MRCC差分時(shí)鐘管腳和一對(duì)SRCC時(shí)鐘管腳。
??這也可以從FPGA的原理圖中得到證實(shí),圖4是xilinx FPGA的一個(gè)BANK原理圖。在中部包含四個(gè)SRCC和MRCC的差分時(shí)鐘輸入引腳,IO_L11P_T1_SRCC就表示SRCC的P輸入端。
??每個(gè)支持時(shí)鐘的輸入管腳可以連接到PCB上的差分或單端時(shí)鐘,單端時(shí)鐘輸入必須分配給支持時(shí)鐘的輸入差分引腳對(duì)的P端。如果單端時(shí)鐘連接到差分時(shí)鐘引腳對(duì)的P端,則N端不能用作另一個(gè)單端時(shí)鐘引腳,只能用作用戶(hù)I/O。時(shí)鐘輸入管腳也可以被用作任何I/O標(biāo)準(zhǔn)(包括差分I/O標(biāo)準(zhǔn))的通用IO使用。
??SRCC管腳可以驅(qū)動(dòng)當(dāng)前時(shí)鐘域的IO時(shí)鐘緩沖器(BUFIO)、區(qū)域時(shí)鐘緩沖器(BUFR)、行時(shí)鐘緩沖器(BUFH)、位于同部分(如果SRCC位于FPGA下半部分,那就只能驅(qū)動(dòng)下半部分的BUFG)的全局時(shí)鐘緩沖器(BUFG)、相同或相鄰時(shí)鐘區(qū)域的CMT。
??MRCC具有SRCC所有功能,且可以驅(qū)動(dòng)多時(shí)鐘區(qū)域緩沖器(BUFMR)來(lái)訪問(wèn)最多三個(gè)上下垂直相鄰的時(shí)鐘區(qū)域的BUFR和BUFIO,在后文講解BUFR的時(shí)候會(huì)進(jìn)行詳細(xì)講解。
??如果一個(gè)時(shí)鐘驅(qū)動(dòng)一個(gè)CMT,那么時(shí)鐘輸入管腳和CMT必須處于同一個(gè)時(shí)鐘區(qū)域。
??單個(gè)時(shí)鐘輸入可以驅(qū)動(dòng)多達(dá)三個(gè)CMT,但時(shí)鐘的輸入管腳必須與中間的CMT處于同一時(shí)鐘區(qū)域,其余兩個(gè)CMT必須位于上下相鄰的時(shí)鐘區(qū)域。
??當(dāng)時(shí)鐘輸入管腳驅(qū)動(dòng)同一列中其它時(shí)鐘區(qū)域的CMT,但不驅(qū)動(dòng)同一時(shí)鐘區(qū)域的CMT時(shí),需要設(shè)置CLOCK_DEDICATED_ROUTE = BACKBON。這種情況下,CMT無(wú)法將輸出時(shí)鐘與輸入時(shí)鐘正確對(duì)齊。
??這里主要是了解FPGA每個(gè)IO bank的專(zhuān)用時(shí)鐘管腳有哪些,不同時(shí)鐘管腳輸入的時(shí)鐘信號(hào)能夠驅(qū)動(dòng)的時(shí)鐘資源有什么差異,單端時(shí)鐘應(yīng)該從什么管腳進(jìn)入FPGA就行了。
3、全局時(shí)鐘緩沖器(BUFG)
??從此開(kāi)始就會(huì)涉及一些原語(yǔ)的介紹,但是都比較簡(jiǎn)單,繼續(xù)往下看。
??7系列FPGA時(shí)鐘樹(shù)專(zhuān)為低偏斜和低功耗操作而設(shè)計(jì),任何未使用的分支都被斷開(kāi)。時(shí)鐘樹(shù)也可以用來(lái)驅(qū)動(dòng)邏輯資源,如復(fù)位或時(shí)鐘使能,主要用于高扇出網(wǎng)絡(luò)。
??每個(gè)7系列器件都有32條全局時(shí)鐘線,BUFG可以被上/下同一部分的MRCC、SRCC、CMT、BUFG、BUFR、GT高速收發(fā)器時(shí)鐘、還有計(jì)數(shù)器分頻得到的時(shí)鐘(不推薦)驅(qū)動(dòng)。BUFG的輸出可以驅(qū)動(dòng)CMT、BUFH、高速收發(fā)器時(shí)鐘信號(hào)、同一部分中的BUFG、CLB及IOB等所有時(shí)鐘區(qū)域的時(shí)鐘信號(hào)和控制信號(hào)。
??全局時(shí)鐘緩沖器(BUFGCTRL,簡(jiǎn)稱(chēng)BUFG)驅(qū)動(dòng)全局時(shí)鐘線,必須用于訪問(wèn)全局時(shí)鐘線。使用時(shí)鐘區(qū)域中的12條水平時(shí)鐘線,每個(gè)時(shí)鐘區(qū)域最多支持12條全局時(shí)鐘線。BUFG和BUFH會(huì)共用同一個(gè)時(shí)鐘區(qū)域里面的12條水平時(shí)鐘線。
??可以通過(guò)vivado中芯片的時(shí)鐘走線觀察,如圖5所示,一個(gè)區(qū)域會(huì)有12條水平的時(shí)鐘線。
??全局時(shí)鐘緩沖器相關(guān)的原語(yǔ)是比較多的,包括BUFGCTRL、BUFG、BUFGCE、BUFGCE_1、BUFGMUX、BUFGMUX_1、BUFGMUX_CTRL。其實(shí)后面6個(gè)都是通過(guò)BUFGCTRL演化而來(lái)的,常用的就是BUFG,所以本文就講解BUFGCTRL的功能以及怎么演化為BUFG的,其余原語(yǔ)就是使能或者選擇時(shí)鐘的功能,可以根據(jù)功能就可以得知具體怎么演化的了。
3.1、BUFGCTRL
??BUFGCTRL原語(yǔ)可以用于切換兩個(gè)異步時(shí)鐘,如圖6是BUFGCTRL原語(yǔ)的框圖,I0和I1是兩個(gè)時(shí)鐘輸入端口,而S0、S1、CE0、CE1、IGNORE0、IGNORE1是相應(yīng)的控制信號(hào),O是輸出時(shí)鐘端口。
??對(duì)應(yīng)原語(yǔ)如下所示:
BUFGCTRL #(
.INIT_OUT(0), // Initial value of BUFGCTRL output ($VALUES;)
.PRESELECT_I0("FALSE"), // BUFGCTRL output uses I0 input ($VALUES;)
.PRESELECT_I1("FALSE") // BUFGCTRL output uses I1 input ($VALUES;)
)
BUFGCTRL_inst (
.O(O), // 1-bit output: Clock output
.CE0(CE0), // 1-bit input: Clock enable input for I0
.CE1(CE1), // 1-bit input: Clock enable input for I1
.I0(I0), // 1-bit input: Primary clock
.I1(I1), // 1-bit input: Secondary clock
.IGNORE0(IGNORE0), // 1-bit input: Clock ignore input for I0
.IGNORE1(IGNORE1), // 1-bit input: Clock ignore input for I1
.S0(S0), // 1-bit input: Clock select for I0
.S1(S1) // 1-bit input: Clock select for I1
);
??幾個(gè)信號(hào)對(duì)應(yīng)的真值表如下表1所示:
表1 BUFGCTRL真值表
S0 | CE0 | S1 | CE1 | O |
---|---|---|---|---|
1 | 1 | X | 0 | I0 |
1 | 1 | 0 | X | I0 |
0 | X | 1 | 1 | I1 |
X | 0 | 1 | 1 | I1 |
1 | 1 | 1 | 1 | 保持 |
??當(dāng)S0和CE0為高電平且S1或CE1有低電平時(shí),將時(shí)鐘I0輸出,如果S1、CE1同時(shí)為高電平且S0或CE1為低電平時(shí),將時(shí)鐘I1輸出。如果四個(gè)信號(hào)全為高電平,則保持之前的輸出不變。
??對(duì)應(yīng)的時(shí)序圖如圖7所示,在I0的1處之前,S0和CE0為高電平,S1和CE1為低電平,則輸出時(shí)鐘I0。在1處S0、CE0、S1、CE1電平翻轉(zhuǎn),但是輸出信號(hào)O不會(huì)立即將時(shí)鐘信號(hào)I1輸出,而是要檢測(cè)到I0和I1的下降沿之后,在I1的上升沿3處后面才會(huì)把I1輸出。
??那如果不想讓BUFGCTRL在S和CE信號(hào)變化后檢測(cè)I0和I1的下降沿,該怎么辦?只需要把IGNORE0或者IGNORE1信號(hào)拉高即可,如圖7所示,把IGNORE1拉高,在5處S0、CE0、S1、CE1電平翻轉(zhuǎn),后面就只檢測(cè)I0的下降沿,而無(wú)需檢測(cè)I1的下降沿。
??BUFGCTRL有三個(gè)參數(shù),其中PRESELECT_I0和PRESELECT_I1用于設(shè)置I0和I1在器件運(yùn)行前的初始狀態(tài),一般默認(rèn)即可。INIT_OUT是用來(lái)設(shè)置BUFGCTRL在切換時(shí)是檢測(cè)I0和I1有效沿,以及檢測(cè)到相應(yīng)沿時(shí)輸出的電平狀態(tài),默認(rèn)為0。
??圖7中INIT_OUT為0,在切換時(shí)鐘過(guò)程中,在2處檢測(cè)到I0下降沿,然后端口O輸出低電平。
??雖然S和CE均用于選擇所需輸出,但對(duì)于無(wú)毛刺開(kāi)關(guān),僅建議使用S。
3.2、BUFG
??BUFG只是一個(gè)時(shí)鐘緩沖器,具有一個(gè)時(shí)鐘輸入和一個(gè)時(shí)鐘輸出。此原語(yǔ)基于BUFGCTRL,其中一些引腳連接到邏輯高電平或低電平。
??圖8是BUFG的框圖,將BUFGCTRL的S1、CE1、IGNORE0接低電平,S0、CE0、I1、IGNORE1接高電平,此時(shí)就會(huì)把I0作為輸出,也就是BUFG的功能了。
??BUFG的原語(yǔ)如下所示,這也是最常用的,把時(shí)鐘信號(hào)引入全局時(shí)鐘網(wǎng)絡(luò)。
BUFG BUFG_inst (
.O(O), // 1-bit output: Clock output
.I(I) // 1-bit input: Clock input
);
圖9是BUFG的時(shí)序圖。
??至于其余的BUFGCE、BUFGCE_1、BUFGMUX、BUFGMUX_1、BUFGMUX_CTRL也都是把BUFGCTRL的幾個(gè)輸入信號(hào)接固定電平演化得到的,此處就不再贅述,需要詳細(xì)了解的可以直接查看數(shù)據(jù)手冊(cè)。
4、水平時(shí)鐘緩沖器(BUFH/BUFHCE)
??水平時(shí)鐘緩沖器(BUFH/BUFHCE)允許通過(guò)水平時(shí)鐘行訪問(wèn)單個(gè)時(shí)鐘區(qū)域中的全局時(shí)鐘線。
??BUFH可以被同一或水平相鄰時(shí)鐘區(qū)域的SRCC、MRCC、CMT、BUFG、GT時(shí)鐘、互聯(lián)邏輯(不建議)驅(qū)動(dòng),BUFH的輸出可以驅(qū)動(dòng)同一時(shí)鐘區(qū)域的CMT、GT時(shí)鐘、該區(qū)域中任意時(shí)鐘節(jié)點(diǎn)(CLB、IOB、RAM、DSP等時(shí)鐘節(jié)點(diǎn)), 相當(dāng)于收到區(qū)域限制的BUFG。
??要使用BUFH,邏輯必須適合水平相鄰的兩個(gè)區(qū)域(左和右),如圖10所示。它還可以用作時(shí)鐘使能電路(BUFHCE ),獨(dú)立使能或禁用跨越單個(gè)時(shí)鐘區(qū)域的時(shí)鐘,從而實(shí)現(xiàn)潛在的節(jié)能。與驅(qū)動(dòng)兩個(gè)相鄰區(qū)域的BUFG相比,BUFH的功耗和抖動(dòng)更低。
??這個(gè)其實(shí)比較有用,比如電路中某部分電路可能就在上電之后工作一段時(shí)間,經(jīng)過(guò)這段時(shí)間后,就可以把該時(shí)鐘的使能信號(hào)拉低,從而關(guān)閉該區(qū)域的時(shí)鐘,降低功耗。
??使用每個(gè)時(shí)鐘區(qū)域中的12條水平時(shí)鐘線,每個(gè)時(shí)鐘區(qū)域可以支持多達(dá)12個(gè)時(shí)鐘。每個(gè)BUFH都有一個(gè)時(shí)鐘使能引腳(CE ),允許動(dòng)態(tài)關(guān)閉時(shí)鐘。圖11是BUFH的框圖。
??BUFH對(duì)應(yīng)原語(yǔ)模板如下所示:
BUFH BUFH_inst (
.O(O), // 1-bit output: Clock output
.I(I) // 1-bit input: Clock input
);
BUFHCE #(
.CE_TYPE("SYNC"), // "SYNC" (glitchless switching) or "ASYNC" (immediate switch)
.INIT_OUT(0) // Initial output value (0-1)
)
BUFHCE_inst (
.O(O), // 1-bit output: Clock output
.CE(CE), // 1-bit input: Active high enable
.I(I) // 1-bit input: Clock input
);
??原語(yǔ)的輸入和輸出信號(hào)都比較簡(jiǎn)單,不再贅述,該原語(yǔ)包含兩個(gè)參數(shù),其中INIT_OUT表示初始化時(shí)BUFH輸出電平,默認(rèn)輸出低電平。CE_TYPE用來(lái)表示使能端口與時(shí)鐘的關(guān)系,是異步使能還是同步使能,默認(rèn)為同步使能。
5、區(qū)域時(shí)鐘緩沖器(BUFR)
??BUFR將時(shí)鐘信號(hào)驅(qū)動(dòng)到時(shí)鐘區(qū)域內(nèi)的專(zhuān)用時(shí)鐘網(wǎng),獨(dú)立于全局時(shí)鐘樹(shù)。每個(gè)BUFR可以驅(qū)動(dòng)其所在區(qū)域的四個(gè)區(qū)域時(shí)鐘網(wǎng),BUFR可以驅(qū)動(dòng)I/O邏輯和邏輯資源(CLB、塊RAM等)。
??BUFR可以被同一時(shí)鐘區(qū)域的SRCC、MRCC、(MMCM . CLKOUT0~CLKOUT3)、時(shí)鐘反饋CLKFBOUT、上下相鄰時(shí)鐘區(qū)域的BUFMR、通用互聯(lián)(用戶(hù)分頻產(chǎn)生的時(shí)鐘信號(hào))驅(qū)動(dòng),BUFR輸出可以驅(qū)動(dòng)BUFG在該區(qū)域能驅(qū)動(dòng)的所有節(jié)點(diǎn)、CMT、同部分的BUFG(不推薦)。
??BUFR能夠產(chǎn)生相對(duì)于時(shí)鐘輸入的分頻時(shí)鐘輸出,分頻系數(shù)可以設(shè)置為1~8之間的整數(shù)。FPGA內(nèi)部能夠?qū)r(shí)鐘分頻的資源就是鎖相環(huán)和BUFR,鎖相環(huán)需要經(jīng)過(guò)全局時(shí)鐘網(wǎng)絡(luò),延遲會(huì)比BUFR分頻大很多,但是鎖相環(huán)的分頻會(huì)更加穩(wěn)定。圖12是BUFR的原語(yǔ)模型。
BUFR的原語(yǔ)模板如下所示:
BUFR #(
.BUFR_DIVIDE("BYPASS"), // Values: "BYPASS, 1, 2, 3, 4, 5, 6, 7, 8"
.SIM_DEVICE("7SERIES") // Must be set to "7SERIES"
)
BUFR_inst (
.O(O), // 1-bit output: Clock output port
.CE(CE), // 1-bit input: Active high, clock enable (Divided modes only)
.CLR(CLR), // 1-bit input: Active high, asynchronous clear (Divided modes only)
.I(I) // 1-bit input: Clock buffer input driven by an IBUF, MMCM or local interconnect
);
??BUFR的原語(yǔ)端口比較簡(jiǎn)單,I是輸入時(shí)鐘,O是輸出時(shí)鐘,CE是輸出時(shí)鐘使能,高電平有效。CLR用于分頻邏輯異步清零,高電平有效,將輸出設(shè)為低電平,不使用分頻功能時(shí)不能使用該信號(hào)。要注意在使用過(guò)程中CE信號(hào)從無(wú)效變?yōu)橛行Ш?,必須將CLR拉高一次。
??該原語(yǔ)有一個(gè)分頻的參數(shù)BUFR_DIVIDE,默認(rèn)為BYPASS,不使用分頻功能。注意分頻系數(shù)設(shè)置為奇數(shù)時(shí),輸出時(shí)鐘占空比不是50%,低電平持續(xù)時(shí)間會(huì)比高電平持續(xù)時(shí)間長(zhǎng)一個(gè)輸入時(shí)鐘周期。
??下圖是BUFR輸出3分頻的時(shí)序圖,在1后面的時(shí)鐘I上升沿,CE為高電平,此時(shí)輸出時(shí)鐘O輸出高電平。由于采用3分頻,所以時(shí)鐘I前一個(gè)時(shí)鐘周期BUFR輸出高電平,然后輸出兩個(gè)時(shí)鐘周期的低電平。在3處時(shí)鐘I上升沿檢測(cè)到CLR為高電平,則端口O輸出低電平。
??BUFR還是比較簡(jiǎn)單,能夠驅(qū)動(dòng)一個(gè)時(shí)鐘區(qū)域內(nèi)的所有時(shí)序節(jié)點(diǎn),并且能夠?qū)斎霑r(shí)鐘信號(hào)進(jìn)行分頻,可以減小延時(shí)。但是可能會(huì)有疑問(wèn),為什么會(huì)有1分頻這個(gè)選項(xiàng)?1分頻不就是不進(jìn)行分頻嗎?
??當(dāng)參數(shù)BUFR_DIVIDE設(shè)置為BYPASS時(shí),輸出信號(hào)直接繞過(guò)BUFR內(nèi)部分頻器,導(dǎo)致輸出信號(hào)的延時(shí)比分頻后輸出信號(hào)的延時(shí)小。
??如下圖所示,ISERDES的CLK采用BUFR直接輸入,而CLKDIV是MRCC經(jīng)過(guò)BUFR分頻后的時(shí)鐘。如果兩個(gè)BUFR輸出時(shí)鐘有效沿要對(duì)齊,提供CLK時(shí)鐘的BUFR分頻系數(shù)就只能設(shè)置為1,不能設(shè)置為BYPASS。
6、IO時(shí)鐘緩沖器(BUFIO)
??前文提到的這些時(shí)鐘路由資源,可以驅(qū)動(dòng)時(shí)鐘區(qū)域內(nèi)的所有時(shí)鐘節(jié)點(diǎn),但是BUFIO只能驅(qū)動(dòng)當(dāng)前時(shí)鐘區(qū)域的IO列中的時(shí)鐘節(jié)點(diǎn)。
??除互聯(lián)邏輯外,能夠驅(qū)動(dòng)BUFR的資源也能夠驅(qū)動(dòng)BUFIO,而B(niǎo)UFIO的輸出只能驅(qū)動(dòng)ILOGIC和OLOGIC的IO列中的時(shí)鐘信號(hào)。
??下圖能夠很好說(shuō)明BUFIO和BUFR的區(qū)別,BUFIO的輸出只能驅(qū)動(dòng)IO列里面的時(shí)鐘端口,而B(niǎo)UFR擁有BUFIO所有功能且還能驅(qū)動(dòng)當(dāng)前時(shí)鐘區(qū)域里的CLB、RAM、DSP的時(shí)序節(jié)點(diǎn)。
??BUFIO驅(qū)動(dòng)IO列的資源的延時(shí)相比BUFR、BUFG這些會(huì)更少,所以一般BUFIO與BUFR會(huì)一起使用,如下圖所示,BUFIO用于驅(qū)動(dòng)IO列中的時(shí)鐘信號(hào),而B(niǎo)UFR驅(qū)動(dòng)該時(shí)鐘區(qū)域內(nèi)的其余時(shí)鐘資源。這種方式在后續(xù)千兆網(wǎng)中會(huì)使用。
??BUFIO的原語(yǔ)模型如下圖所示:
??該原語(yǔ)的模板如下所示:
BUFIO BUFIO_inst (
.O(O), // 1-bit output: Clock output (connect to I/O clock loads).
.I(I) // 1-bit input: Clock input (connect to an IBUF or BUFMR).
);
??原語(yǔ)很簡(jiǎn)單,就一個(gè)輸入時(shí)鐘,經(jīng)過(guò)一定內(nèi)部延時(shí)后輸出。
7、多區(qū)域時(shí)鐘緩沖器(BUFMR/BUFMRCE)
??用戶(hù)時(shí)鐘從MRCC或SRCC進(jìn)入FPGA后,僅能驅(qū)動(dòng)當(dāng)前時(shí)鐘區(qū)域里的BUFIO和BUFR。如果同時(shí)想要驅(qū)動(dòng)上、下兩個(gè)垂直相鄰時(shí)鐘區(qū)域里的BUFR或BUFIO,則需要使用BUFMR。只有MRCC進(jìn)入的時(shí)鐘信號(hào)可以使用BUFMR,SRCC進(jìn)入的時(shí)鐘信號(hào)不能使用BUFMR。
??BUFMR/BUFMRCE只能把同一時(shí)鐘區(qū)域的MRCC或GT的時(shí)鐘信號(hào)作為輸入,而輸出信號(hào)只能驅(qū)動(dòng)垂直相鄰三個(gè)時(shí)鐘區(qū)域里面的BUFR和BUFIO,如下兩圖所示,兩張圖描述的內(nèi)容相似。
??BUFMR/BUFMRCE的原語(yǔ)模型如下圖所示:
??BUFMR和BUFMRCE原語(yǔ)其實(shí)就相差一個(gè)使能引腳,其余沒(méi)有區(qū)別,原語(yǔ)模板如下所示:
BUFMR BUFMR_inst (
.O(O), // 1-bit output: Clock output (connect to BUFIOs/BUFRs)
.I(I) // 1-bit input: Clock input (Connect to IBUF)
);
BUFMRCE #(
.CE_TYPE("SYNC"), // SYNC, ASYNC
.INIT_OUT(0) // Initial output and stopped polarity, (0-1)
)
BUFMRCE_inst (
.O(O), // 1-bit output: Clock output (connect to BUFIOs/BUFRs)
.CE(CE), // 1-bit input: Active high buffer enable
.I(I) // 1-bit input: Clock input (Connect to IBUF)
);
8、總結(jié)
??前文對(duì)BUFG、BUFH、BUFR、BUFIO、BUFMR做了講解,其實(shí)這些緩沖器的功能相似。
??1、BUFG功能最強(qiáng)大,每個(gè)FPGA最多只能有32個(gè)BUFG工作,32個(gè)BUFG被水平時(shí)鐘線分為上下兩部分,各16個(gè)BUFG,上半部分的BUFG不能驅(qū)動(dòng)下半部分相關(guān)時(shí)鐘節(jié)點(diǎn)。
??2、BUFH是能夠被水平相鄰時(shí)鐘區(qū)域的SRCC、MRCC等資源驅(qū)動(dòng),能夠驅(qū)動(dòng)該時(shí)鐘區(qū)域中BUFG能夠驅(qū)動(dòng)的時(shí)鐘節(jié)點(diǎn)。
??3、BUFR是區(qū)域時(shí)鐘緩沖器,能夠驅(qū)動(dòng)所在區(qū)域BUFG能驅(qū)動(dòng)的時(shí)鐘節(jié)點(diǎn),并且能夠?qū)斎霑r(shí)鐘進(jìn)行分頻輸出,可以降低分頻時(shí)鐘延時(shí)。
??4、BUFIO只能驅(qū)動(dòng)所在時(shí)鐘區(qū)域中的IO列中ILOGIC、OLOGIC的時(shí)鐘端口,延時(shí)也是最低的,最適合作為源同步時(shí)鐘的處理。一般與BUFR組合使用,將延遲降低到最小。
??5、BUFMR可以把所在時(shí)鐘區(qū)域的MRCC或GT時(shí)鐘作為輸入,輸出信號(hào)可以驅(qū)動(dòng)垂直相鄰三個(gè)時(shí)鐘區(qū)域的BUFR和BUFIO。
??上述所有資源都可以使用下圖進(jìn)行總結(jié),下圖是A7 FPGA的一個(gè)時(shí)鐘區(qū)域各個(gè)時(shí)鐘資源的分布。
??經(jīng)過(guò)前文講解,該圖可以對(duì)手冊(cè)的一半內(nèi)容進(jìn)行總結(jié),所以此處最后拿出來(lái)進(jìn)行總結(jié)。
??首先一個(gè)時(shí)鐘區(qū)域包括50個(gè)CLB,上圖中HROW上面包含25個(gè)CLB,下面包含25個(gè)CLB,且HROW上半部分的IO列中包含25個(gè)IO管腳,下半部分也有25個(gè)IO管腳,均包含2對(duì)差分時(shí)鐘專(zhuān)用引腳CC。
??IO列中包含BUFR和BUFIO,BUFIO的輸出只存在IO列中,表示只能驅(qū)動(dòng)IO列中的時(shí)鐘資源,而B(niǎo)UFR輸出還與CLB、RAM、DSP等時(shí)鐘端口連接,表示可以驅(qū)動(dòng)更多資源。
??BUFMR輸出分別穿出該時(shí)鐘區(qū)域,向上、下分別延伸,表示可以驅(qū)動(dòng)垂直相鄰上下區(qū)域的BUFR和BUFIO。
??BUFG和BUFH都是從主時(shí)鐘網(wǎng)絡(luò)中引出,通過(guò)HROW所在水平時(shí)鐘行進(jìn)入時(shí)鐘區(qū)域,會(huì)共用一個(gè)時(shí)鐘區(qū)域的12條水平時(shí)鐘線。并且在該區(qū)域中,BUFG和BUFH能夠驅(qū)動(dòng)的時(shí)鐘資源相同,都能夠被CMT和GT的時(shí)鐘信號(hào)驅(qū)動(dòng)。
??時(shí)鐘布線資源只是該手冊(cè)的一大半內(nèi)容,還有一半內(nèi)容是對(duì)MMCM和PLL使用進(jìn)行講解,包括原語(yǔ)的使用及相關(guān)參數(shù)。
??這個(gè)手冊(cè)很久之前就讀過(guò),那時(shí)候并沒(méi)有單獨(dú)調(diào)用這些資源使用,所以對(duì)BUFG、BUFH這些緩沖器的理解并不充分,甚至?xí)煜?。最近在?xiě)以太網(wǎng)相關(guān)代碼時(shí),使用到了BUFIO、BUFR這些緩沖器,就重讀了一遍手冊(cè),對(duì)一些重要的內(nèi)容進(jìn)行了總結(jié)。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-774244.html
??手冊(cè)最后幾頁(yè)的圖也可以說(shuō)是精華所在吧,能夠?qū)η拔牡拇蟛糠謨?nèi)容進(jìn)行總結(jié),熟悉之后,只要看到這些圖片就可以支道每個(gè)緩沖器的功能等等,不必記憶什么文字內(nèi)容。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-774244.html
到了這里,關(guān)于【驚喜揭秘】xilinx 7系列FPGA時(shí)鐘區(qū)域內(nèi)部結(jié)構(gòu)大揭秘,讓你輕松掌握!的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!