014 Xilinx 原语(千兆以太网相关)
原語(yǔ)是 Xilinx 器件底層硬件中的功能模塊,它使用專用的資源來(lái)實(shí)現(xiàn)一系列的功能。相比于 IP 核,原語(yǔ)的調(diào)用方法更簡(jiǎn)單,但是一般只用于實(shí)現(xiàn)一些簡(jiǎn)單的功能。 本文主要講解BUFG、BUFIO、IDDR、ODDR、IDELAYE2和IDELAYCTRL。
一、BUFG
BUFG: 全局緩沖,BUFG的輸出到達(dá)FPGA內(nèi)部的IOB、CLB、塊RAM的時(shí)鐘延遲和抖動(dòng)最小。BUFG原語(yǔ)模板如下:
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 時(shí)鐘網(wǎng)絡(luò),它的驅(qū)動(dòng)范圍只能局限在一個(gè) clock region的邏輯。BUFR相比BUFG的最大優(yōu)勢(shì)是偏斜和功耗都比較小。
二、BUFIO
BUFIO: BUFIO 是 IO 時(shí)鐘網(wǎng)絡(luò), 其獨(dú)立于全局時(shí)鐘資源,適合采集源同步數(shù)據(jù)。 它只能驅(qū)動(dòng) IO Block里面的邏輯,不能驅(qū)動(dòng)CLB里面的LUT,REG等邏輯。BUFIO原語(yǔ)模板如下:
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ù)時(shí),提供非常小的延時(shí),因此非常適合采集比如 RGMII 接收側(cè)的數(shù)據(jù),但是由于其不能驅(qū)動(dòng)FPGA的內(nèi)部邏輯,因此需要BUFIO和BUFG配合使用,以達(dá)到最佳性能。如ETH_RXC的時(shí)鐘經(jīng)過(guò)BUFIO,用來(lái)采集端口數(shù)據(jù);ETH_RXC經(jīng)過(guò)BUFG,用來(lái)作為除端口采集外的其他模塊的操作時(shí)鐘。
三、IDDR
IDDR: 在7系列設(shè)備的ILOGIC block中有專屬的registers來(lái)實(shí)現(xiàn)input double-data-rate(IDDR) registers,將輸入的上下邊沿DDR信號(hào),轉(zhuǎn)換成兩位單邊沿SDR信號(hào)。IDDR的原語(yǔ)結(jié)構(gòu)圖如下圖所示:
C:輸入的同步時(shí)鐘;
D:輸入的 1 位 DDR 數(shù)據(jù);
Q1 和 Q2:分別是“C”時(shí)鐘上升沿和下降沿同步輸出的 SDR 數(shù)據(jù)。
CE:時(shí)鐘使能信號(hào);
S/R:置位/復(fù)位信號(hào),這兩個(gè)信號(hào)不能同時(shí)拉高。
IDDR 原語(yǔ)模板如下:
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模式的時(shí)序圖如下圖所示:
OPPOSITE_EDGE 模式下, 在時(shí)鐘的上升沿輸出的 Q1, 時(shí)鐘的下降沿輸出 Q2。
SAME_EDGE 模式的時(shí)序圖如下圖所示:
圖27.1.17 IDDR“SAME_EDGE”模式時(shí)序圖
SAME_EDGE 模式下,在時(shí)鐘的上升沿輸出 Q1 和 Q2,但 Q1 和 Q2 不在同一個(gè) cycle 輸出。
SAME_EDGE_PIPELINED 模式的時(shí)序圖如下圖所示:
SAME_EDGE_PIPELINED 模式下,在時(shí)鐘的上升沿輸出 Q1 和 Q2, Q1 和 Q2 雖然在同一個(gè) cycle 輸出,但整體延時(shí)了一個(gè)時(shí)鐘周期。在使用IDDR時(shí),一般采用此種模式。
四、ODDR
ODDR: 通過(guò) ODDR 把兩路單端的數(shù)據(jù)合并到一路上輸出,上下沿同時(shí)輸出數(shù)據(jù),上升沿輸出 a 路,下降沿輸出b路;如果兩路輸入信號(hào)一路固定為1, 另外一路固定為0,那么輸出的信號(hào)實(shí)際上是時(shí)鐘信號(hào)。
ODDR 的原語(yǔ)結(jié)構(gòu)圖如下圖所示:
C:輸入的同步時(shí)鐘;
Q:輸出的 1 位 DDR 數(shù)據(jù);
D1 和 D2:分別是“C”時(shí)鐘上升沿和下降沿同步輸入的 SDR 數(shù)據(jù)。
CE:時(shí)鐘使能信號(hào);
S/R:置位/復(fù)位信號(hào),這兩個(gè)信號(hào)不能同時(shí)拉高。
ODDR 原語(yǔ)模板如下:
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 模式的時(shí)序圖如下圖所示:
此種模式下, 在 FPGA 內(nèi)部需要兩個(gè)反相時(shí)鐘來(lái)同步 D1 和 D2, 此種模式使用較少。
SAME_EDGE 模式的時(shí)序圖如下圖所示:
此種模式下,數(shù)據(jù)可以在相同的時(shí)鐘邊沿輸出到 Q,一般采用此種模式。
五、IDELAYE2
IDELAYE2: IO 延時(shí)原語(yǔ),用于在信號(hào)通過(guò)引腳進(jìn)入芯片內(nèi)部之前,進(jìn)行延時(shí)調(diào)節(jié),一般高速端口信號(hào)由于走線延時(shí)等原因,需要通過(guò)IDELAYE2原語(yǔ)對(duì)數(shù)據(jù)做微調(diào)。IDELAYE2原語(yǔ)模板如下:
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 為延時(shí)前的輸入信號(hào), DATAOUT 為延時(shí)后的輸出信號(hào)。
REFCLK_FREQUENCY 參數(shù)為 IDELAYCTRL 原語(yǔ)的參考時(shí)鐘頻率,一般為 200Mhz;IDELAY_VALUE參數(shù)用來(lái)設(shè)置延時(shí)的tap數(shù),范圍為1~31,每個(gè)tap數(shù)的延時(shí)時(shí)間和參考時(shí)鐘頻率有關(guān)。
和 IDELAYE2 對(duì)應(yīng)的還有 ODELAYE2,由于 A7 系列沒有 ODELAYE2 原語(yǔ), 故此處不做討論。
六、IDELAYCTRL
IDELAYCTRL: IDELAYCTRL 和 IDELAYE2 一般同時(shí)使用, IDELAYCTRL 對(duì) IDELAYE2 延時(shí)進(jìn)行校準(zhǔn)。
IDELAYCTRL原語(yǔ)如下:
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 為延時(shí) IO 分組,一般數(shù)據(jù)接口位于多個(gè) BANK 時(shí),才需要分組。
IDELAYCTRL 通過(guò)參考時(shí)鐘 REFCLK 來(lái)校準(zhǔn) IDELAY2 每個(gè) tap 的延時(shí)值,可用的 REFCLK 頻率為190Mhz~210Mhz或者290Mhz~310Mhz。時(shí)鐘頻率越高對(duì)應(yīng)的tap延時(shí)平均值越小,即延時(shí)調(diào)節(jié)精度越高。
當(dāng)參考時(shí)鐘為 200Mhz 時(shí),一個(gè) tap 為 78ps。
七、參考資料
1、1_領(lǐng)航者ZYNQ之FPGA開發(fā)指南_V1.3,以太網(wǎng) ARP 測(cè)試實(shí)驗(yàn)
總結(jié)
以上是生活随笔為你收集整理的014 Xilinx 原语(千兆以太网相关)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: log4j2配置文件模板(带详细注释)
- 下一篇: 基本ILS面的评估