一、7 系列FPGAs SelectIO 資源
SelectIO,就是I/O接口以及I/O邏輯的總稱。《UG471--SelectIO》 篇可以分成3部分:第1部分介紹I/O的電氣特性,第2部分介紹I/O邏輯資源,第3部分介紹高級的I/O邏輯資源(serializer/deserializer)。
說到I/O,必須先提到FPGA的BANK。在7系列的FPGA中,BANK分為HR(High-range)BANK和HP(High-performance) BANK。HP BANK只能支持小于等于1.8V電平標準的I/O信號,HR BANK則支持小于等于3.3V電平標準的I/O信號。HP BANK專為高速I/O信號設計,支持DCI(數控阻抗),而HR BANK則適合更大眾化的所有I/O信號設計。下表列出了HP BANK 和HR BANK的特性。
無論是HR或者HP BNANK,每個BANK都包含50個I/O管腳,每個I/O管腳都可配置成輸入、輸出。每個BANK的首尾管腳只能作為單端I/O,其余48個I/O則可配置成24對差分I/O。
二、selectIO的邏輯資源
下圖為HP BANK的IO 模塊,HR BANK與之相比,沒有輸出延遲ODELAYE2;
I/O邏輯資源主要包含5部分:
2.1 ILOGIC
ILOGIC即輸入信號處理邏輯,緊挨著IOB,外界的輸入信號最先經過的就是ILOGIC。ILOGIC是由許多的數據選擇器和一個IDDR(input Double Data Rate)觸發器構成。該觸發器既可以雙沿捕獲輸入數據也可以拆分成普通單沿觸發器。在HP BANK中,ILOGIC被稱為ILOGICE2,在HR BANK中,ILOGIC被稱為ILOGICE3。下圖給出了ILOGICE3的示意圖:
ILOGICE2與ILOGICE3的區別是:ILOGICE3包含了ZHOLD(Zero Hold) delay。
2.2 IDELAY
IDELAY被稱為信號延遲模塊,它的作用就是把信號延遲一段時間。對于一些需要對齊的輸入信號來說,這至關重要。在7系列FPGA中,它被稱為IDELAYE2。IDELAYE2可以將信號延遲0~31節,在這區間任意可調,并且在參考時鐘為200M時,每節的延遲精度為78ps(1/(32×2×FREF),FREF為IDELAYCTRL的參考時鐘)。下圖為IDELAYE2例化框圖。
IDELAY后文詳細講解。
2.3 IDELAYCTRL
IDELAYCTRL其實是個輔助模塊,這么說吧,只要使用了IDELAY或者ODELAY,IDELAYCTRL必須被使用,要不然就無法正常工作。因為IDELAY或者ODELAY的延遲精度是由IDELAYCTRL的輸入時鐘決定的,一般為200MHz。下圖為IDELAYCTRL例化框圖。
2.4 ODELAY
ODELAY和IDEALY的使用方式差不多,只不過ODELAY是用作輸出信號的延遲。另外,HR BANK內沒有ODELAY,HP BANK才有,被稱為ODELAYE2。使用ODELAYE2時同樣需要例化IDELAYCTRL。下圖為ODELAYE2例化框圖:
2.5 OLOGIC
LOGIC包括2個部分:一個用于配置輸出路徑。另外一個用于配置三態控制路徑。輸出路徑和三態控制路徑都可以獨立配置成沿觸發器、ODDR以及組合邏輯輸出。
總的來說,I/O邏輯資源就是用來獲取或者輸出信號。對于一般的低速信號而言,I/O邏輯資源體現不出優勢,用不用都不影響最終結果,但是對于高速信號而言,就必須使用I/O邏輯資源了,不能夠正確使用它,整個FPGA邏輯代碼完全無用。
三、IDELAYE2原語
使用IDELAYE2原語必須例化IDELAYCTRL原語
IDELAYCTRL IDELAYCTRL_inst (
.RDY(RDY), // 1-bit output: Ready output
.REFCLK(REFCLK), // 1-bit input: Reference clock input
.RST(RST) // 1-bit input: Active high reset input
);
再看IDELAYE2原語:
3.1IDELAYE2屬性
3.2IDELAYE2端口
3.2.1延遲控制
1. FIXED模式: 固定模式,延遲值為輸入的VALUE
2. VARIABLE模式:由C,LD,CE,INC 共同控制,如下圖所示:
3. VAR_LOAD模式:由C,LD,CE,INC,CNTVALUEIN共同控制
3.3時序圖
我們再看一個VARIABLE模式,加載延時的時序圖:
IDELAY屬性如下:
IDELAY_TYPE = VARIABLE,
IDELAY_VALUE = 0,
DELAY_SRC = IDATAIN
時刻t1:
在C的上升沿,檢測LD為高,加載IDELAY_VALUE,即輸出延時為tap0;
時刻t2:
在C的上升沿,檢測到CE &INC同時為高,由上文延時控制部分內容可知,延時為當前值+1,即輸出延時為tap1;
時刻t3:
LD,CE,INC均為0,增加延時操作完成,輸出延時保持tap1,直到下一次又檢測到LD,CE,INC。
???????3.4仿真測試
Testbench:例化一個idelayctrl,再例化一個idelaye2(VAR_LOAD模式):
IDELAYCTRL IDELAYCTRL_inst (
.RDY(rdy), // 1-bit output: Ready output
.REFCLK(ref_clk),// 1-bit input: Reference clock input
.RST(rst) // 1-bit input: Active high reset input
);
IDELAYE2 #(
.CINVCTRL_SEL("FALSE"), // Enable dynamic clock inversion (FALSE, TRUE)
.DELAY_SRC("IDATAIN"), // Delay input (IDATAIN, DATAIN)
.HIGH_PERFORMANCE_MODE("FALSE"), // Reduced jitter ("TRUE"), Reduced power ("FALSE")
.IDELAY_TYPE("VAR_LOAD"), // FIXED, VARIABLE, VAR_LOAD, VAR_LOAD_PIPE
.IDELAY_VALUE(0), // Input delay tap setting (0-31)
.PIPE_SEL("FALSE"), // Select pipelined mode, FALSE, TRUE
.REFCLK_FREQUENCY(200.0), // IDELAYCTRL clock input frequency in MHz
.SIGNAL_PATTERN("DATA") // DATA, CLOCK input signal
)
IDELAYE2_inst_frame_delay (
.CNTVALUEOUT(cnt_delay_tap),// 5-bit output: Counter value output
.DATAOUT(rx_frame_delay), // 1-bit output: Delayed data output
.C(ref_clk), // 1-bit input: Clock input
.CE(1'b0), // 1-bit input: Active high enable increment/decrement input
.CINVCTRL(1'b0), // 1-bit input: Dynamic clock inversion input
.CNTVALUEIN(delay_value), // 5-bit input: Counter value input
.DATAIN(1'b0), // 1-bit input: Internal delay data input
.IDATAIN(rx_frame_buf), // 1-bit input: Data input from the I/O
.INC(1'b0), // 1-bit input: Increment / Decrement tap delay input
.LD(delay_load_en[12]), // 1-bit input: Load IDELAY_VALUE input
.LDPIPEEN(1'b0), // 1-bit input: Enable PIPELINE register to load data input
.REGRST(1'b0) // 1-bit input: Active-high reset tap-delay input
);
可以發現,只要過了idelay,就會增加0.6ns的延遲;
delay_value = 0;Tdelay=0.6ns;
仿真繼續往下走,當tap=31時,Tdelay=3.018ns=31x78(ps) +0.6ns;
測試驗證正確。
四、高級selectIO邏輯資源
為了方便使用I/O邏輯資源,Xilinx公司專門將幾種模塊集中起來,構成了功能強大的源語ISERDESE2和OSERDESE2:《UG471》翻譯(2)ISERDESE2原語介紹
審核編輯:符乾江
-
Xilinx
+關注
關注
71文章
2167瀏覽量
121302 -
邏輯
+關注
關注
2文章
833瀏覽量
29464
發布評論請先 登錄
相關推薦
評論