014 Xilinx 原语(千兆以太网相关)
原語是 Xilinx 器件底層硬件中的功能模塊,它使用專用的資源來實現(xiàn)一系列的功能。相比于 IP 核,原語的調(diào)用方法更簡單,但是一般只用于實現(xiàn)一些簡單的功能。 本文主要講解BUFG、BUFIO、IDDR、ODDR、IDELAYE2和IDELAYCTRL。
一、BUFG
BUFG: 全局緩沖,BUFG的輸出到達(dá)FPGA內(nèi)部的IOB、CLB、塊RAM的時鐘延遲和抖動最小。BUFG原語模板如下:
1 BUFG BUFG_inst ( 2 .O(O), // 1-bit output: Clock output 3 .I(I) // 1-bit input: Clock input 4 );
View Code
除了 BUFG 外,常用的還有 BUFR, BUFR 是 regional 時鐘網(wǎng)絡(luò),它的驅(qū)動范圍只能局限在一個 clock region的邏輯。BUFR相比BUFG的最大優(yōu)勢是偏斜和功耗都比較小。
二、BUFIO
BUFIO: BUFIO 是 IO 時鐘網(wǎng)絡(luò), 其獨立于全局時鐘資源,適合采集源同步數(shù)據(jù)。 它只能驅(qū)動 IO Block里面的邏輯,不能驅(qū)動CLB里面的LUT,REG等邏輯。BUFIO原語模板如下:
1 BUFIO BUFIO_inst ( 2 .O(O), // 1-bit output: Clock output (connect to I/O clock loads). 3 .I(I) // 1-bit input: Clock input (connect to an IBUF or BUFMR). 4 );
View Code
BUFIO 在采集源同步 IO 數(shù)據(jù)時,提供非常小的延時,因此非常適合采集比如 RGMII 接收側(cè)的數(shù)據(jù),但是由于其不能驅(qū)動FPGA的內(nèi)部邏輯,因此需要BUFIO和BUFG配合使用,以達(dá)到最佳性能。如ETH_RXC的時鐘經(jīng)過BUFIO,用來采集端口數(shù)據(jù);ETH_RXC經(jīng)過BUFG,用來作為除端口采集外的其他模塊的操作時鐘。
三、IDDR
IDDR: 在7系列設(shè)備的ILOGIC block中有專屬的registers來實現(xiàn)input double-data-rate(IDDR) registers,將輸入的上下邊沿DDR信號,轉(zhuǎn)換成兩位單邊沿SDR信號。IDDR的原語結(jié)構(gòu)圖如下圖所示:
C:輸入的同步時鐘;
D:輸入的 1 位 DDR 數(shù)據(jù);
Q1 和 Q2:分別是“C”時鐘上升沿和下降沿同步輸出的 SDR 數(shù)據(jù)。
CE:時鐘使能信號;
S/R:置位/復(fù)位信號,這兩個信號不能同時拉高。
IDDR 原語模板如下:
1 IDDR #(
2 .DDR_CLK_EDGE("OPPOSITE_EDGE"), // "OPPOSITE_EDGE", "SAME_EDGE"
3 // or "SAME_EDGE_PIPELINED"
4 .INIT_Q1(1'b0), // Initial value of Q1: 1'b0 or 1'b1
5 .INIT_Q2(1'b0), // Initial value of Q2: 1'b0 or 1'b1
6 .SRTYPE("SYNC") // Set/Reset type: "SYNC" or "ASYNC"
7 ) IDDR_inst (
8 .Q1(Q1), // 1-bit output for positive edge of clock
9 .Q2(Q2), // 1-bit output for negative edge of clock
10 .C(C), // 1-bit clock input
11 .CE(CE), // 1-bit clock enable input
12 .D(D), // 1-bit DDR data input
13 .R(R), // 1-bit reset
14 .S(S) // 1-bit set
15 );
View Code
DDR_CLK_EDGE 參數(shù)為 IDDR 的三種采集模式,分別為“OPPOSITE_EDGE”、“SAME_EDGE”和“SAME_EDGE_PIPELINED”模式。OPPOSITE_EDGE模式的時序圖如下圖所示:
OPPOSITE_EDGE 模式下, 在時鐘的上升沿輸出的 Q1, 時鐘的下降沿輸出 Q2。
SAME_EDGE 模式的時序圖如下圖所示:
圖27.1.17 IDDR“SAME_EDGE”模式時序圖
SAME_EDGE 模式下,在時鐘的上升沿輸出 Q1 和 Q2,但 Q1 和 Q2 不在同一個 cycle 輸出。
SAME_EDGE_PIPELINED 模式的時序圖如下圖所示:
SAME_EDGE_PIPELINED 模式下,在時鐘的上升沿輸出 Q1 和 Q2, Q1 和 Q2 雖然在同一個 cycle 輸出,但整體延時了一個時鐘周期。在使用IDDR時,一般采用此種模式。
四、ODDR
ODDR: 通過 ODDR 把兩路單端的數(shù)據(jù)合并到一路上輸出,上下沿同時輸出數(shù)據(jù),上升沿輸出 a 路,下降沿輸出b路;如果兩路輸入信號一路固定為1, 另外一路固定為0,那么輸出的信號實際上是時鐘信號。
ODDR 的原語結(jié)構(gòu)圖如下圖所示:
C:輸入的同步時鐘;
Q:輸出的 1 位 DDR 數(shù)據(jù);
D1 和 D2:分別是“C”時鐘上升沿和下降沿同步輸入的 SDR 數(shù)據(jù)。
CE:時鐘使能信號;
S/R:置位/復(fù)位信號,這兩個信號不能同時拉高。
ODDR 原語模板如下:
1 ODDR #(
2 .DDR_CLK_EDGE("OPPOSITE_EDGE"), // "OPPOSITE_EDGE" or "SAME_EDGE"
3 .INIT(1'b0), // Initial value of Q: 1'b0 or 1'b1
4 .SRTYPE("SYNC") // Set/Reset type: "SYNC" or "ASYNC"
5 ) ODDR_inst (
6 .Q(Q), // 1-bit DDR output
7 .C(C), // 1-bit clock input
8 .CE(CE), // 1-bit clock enable input
9 .D1(D1), // 1-bit data input (positive edge)
10 .D2(D2), // 1-bit data input (negative edge)
11 .R(R), // 1-bit reset
12 .S(S) // 1-bit set
13 );
View Code
DDR_CLK_EDGE 參數(shù)為 ODDR 的兩種輸出模式,分別為“OPPOSITE_EDGE”和“SAME_EDGE”模式。
OPPOSITE_EDGE 模式的時序圖如下圖所示:
此種模式下, 在 FPGA 內(nèi)部需要兩個反相時鐘來同步 D1 和 D2, 此種模式使用較少。
SAME_EDGE 模式的時序圖如下圖所示:
此種模式下,數(shù)據(jù)可以在相同的時鐘邊沿輸出到 Q,一般采用此種模式。
五、IDELAYE2
IDELAYE2: IO 延時原語,用于在信號通過引腳進(jìn)入芯片內(nèi)部之前,進(jìn)行延時調(diào)節(jié),一般高速端口信號由于走線延時等原因,需要通過IDELAYE2原語對數(shù)據(jù)做微調(diào)。IDELAYE2原語模板如下:
1 IDELAYE2 #(
2 .CINVCTRL_SEL("FALSE"), // Enable dynamic clock inversion (FALSE, TRUE)
3 .DELAY_SRC("IDATAIN"), // Delay input (IDATAIN, DATAIN)
4 .HIGH_PERFORMANCE_MODE("FALSE"), // Reduced jitter ("TRUE"), Reduced power ("FALSE")
5 .IDELAY_TYPE("FIXED"), // FIXED, VARIABLE, VAR_LOAD, VAR_LOAD_PIPE
6 .IDELAY_VALUE(0), // Input delay tap setting (0-31)
7 .PIPE_SEL("FALSE"), // Select pipelined mode, FALSE, TRUE
8 .REFCLK_FREQUENCY(200.0), // IDELAYCTRL clock input frequency in MHz
9 .SIGNAL_PATTERN("DATA") // DATA, CLOCK input signal
10 )
11 IDELAYE2_inst (
12 .CNTVALUEOUT(CNTVALUEOUT), // 5-bit output: Counter value output
13 .DATAOUT(DATAOUT), // 1-bit output: Delayed data output
14 .C(C), // 1-bit input: Clock input
15 .CE(CE), // 1-bit input: Active high enable increment/decrement input
16 .CINVCTRL(CINVCTRL), // 1-bit input: Dynamic clock inversion input
17 .CNTVALUEIN(CNTVALUEIN), // 5-bit input: Counter value input
18 .DATAIN(DATAIN), // 1-bit input: Internal delay data input
19 .IDATAIN(IDATAIN), // 1-bit input: Data input from the I/O
20 .INC(INC), // 1-bit input: Increment / Decrement tap delay input
21 .LD(LD), // 1-bit input: Load IDELAY_VALUE input
22 .LDPIPEEN(LDPIPEEN), // 1-bit input: Enable PIPELINE register to load data input
23 .REGRST(REGRST) // 1-bit input: Active-high reset tap-delay input
24 );
View Code
IDATAIN 為延時前的輸入信號, DATAOUT 為延時后的輸出信號。
REFCLK_FREQUENCY 參數(shù)為 IDELAYCTRL 原語的參考時鐘頻率,一般為 200Mhz;IDELAY_VALUE參數(shù)用來設(shè)置延時的tap數(shù),范圍為1~31,每個tap數(shù)的延時時間和參考時鐘頻率有關(guān)。
和 IDELAYE2 對應(yīng)的還有 ODELAYE2,由于 A7 系列沒有 ODELAYE2 原語, 故此處不做討論。
六、IDELAYCTRL
IDELAYCTRL: IDELAYCTRL 和 IDELAYE2 一般同時使用, IDELAYCTRL 對 IDELAYE2 延時進(jìn)行校準(zhǔn)。
IDELAYCTRL原語如下:
1 (* IODELAY_GROUP = <iodelay_group_name> *) 2 IDELAYCTRL IDELAYCTRL_inst ( 3 .RDY(RDY), // 1-bit output: Ready output 4 .REFCLK(REFCLK), // 1-bit input: Reference clock input 5 .RST(RST) // 1-bit input: Active high reset input 6 );
View Code
IODELAY_GROUP 為延時 IO 分組,一般數(shù)據(jù)接口位于多個 BANK 時,才需要分組。
IDELAYCTRL 通過參考時鐘 REFCLK 來校準(zhǔn) IDELAY2 每個 tap 的延時值,可用的 REFCLK 頻率為190Mhz~210Mhz或者290Mhz~310Mhz。時鐘頻率越高對應(yīng)的tap延時平均值越小,即延時調(diào)節(jié)精度越高。
當(dāng)參考時鐘為 200Mhz 時,一個 tap 為 78ps。
七、參考資料
1、1_領(lǐng)航者ZYNQ之FPGA開發(fā)指南_V1.3,以太網(wǎng) ARP 測試實驗
總結(jié)
以上是生活随笔為你收集整理的014 Xilinx 原语(千兆以太网相关)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: log4j2配置文件模板(带详细注释)
- 下一篇: 基本ILS面的评估