Xilinx公司原語的使用方法
原語,其英文名字為Primitive,是Xilinx針對其器件特征開發的一系列常用模塊的名字,用戶可以將其看成Xilinx公司為用戶提供的庫函數,類似于C++中的“cout”等關鍵字,是芯片中的基本元件,代表FPGA中實際擁有的硬件邏輯單元,如LUT,D觸發器,RAM等,相當于軟件中的機器語言。在實現過程中的翻譯步驟時,要將所有的設計單元都轉譯為目標器件中的基本元件,否則就是不可實現的。原語在設計中可以直接例化使用,是最直接的代碼輸入方式,其和HDL語言的關系,類似于匯編語言和C語言的關系。? Xilinx公司提供的原語,涵蓋了FPGA開發的常用領域,但只有相應配置的硬件才能執行相應的原語,并不是所有的原語都可以在任何一款芯片上運行。在Verilog中使用原語非常簡單,將其作為模塊名直接例化即可。本節以Virtex平臺介紹各類原語,因為該系列的原語類型是最全面的。其它系列芯片原語的使用方法是類似的。? Xilinx公司的原語按照功能分為10類,包括:計算組件、I/O端口組件、寄存器和鎖存器、時鐘組件、處理器組件、移位寄存器、配置和檢測組件、RAM/ROM組件、Slice/CLB組件以及G比特收發器組件。下面分別對其進行詳細介紹。?在Vivado 中可以打開所有支持的原語,位置如下:
TOOL ->Language Template
3.4.1 計算組件 ? 計算組件值得就是DSP48核,也有人將其稱為硬件乘法器,功能描述如表3-6所示。
?表3-6 計算組件清單
DSP48 其結構為一個18*18比特的有符號乘法器,且在后面還級聯了一個帶有可配置流水線的3輸入加法器? DSP48核由一個18比特的乘法后面級聯一個48比特的加法器,乘法器和加法器的應用位寬分別可以在18、48比特內任意調整。其在乘加模塊中有廣泛應用,特別是各類濾波器系統中,不僅可以提高系統穩定性,還能夠節省邏輯資源且工作在高速模式下。其在Verilog中的例化模版為:? ?
module fpga_v4_dsp48( BCOUT, P, PCOUT, A, B, BCIN, C, CARRYIN,CARRYINSEL, CEA, CEB, CEC, CECARRYIN, CECINSUB, CECTRL, CEM, CEP, CLK, OPMODE, PCIN, RSTA, RSTB, RSTC, RSTCARRYIN, RSTM, RSTP, SUBTRACT); output [17:0]BCOUT; output [47:0] P, PCOUT; // input [17:0] A, B; // input [47:0] C, PCIN; input [1:0] CARRYINSEL; input [6:0] OPMODE; input BCIN, CARRYIN,CEA,CEB, CEC,CECARRYIN,CECINSUB,CECTRL,CEM, CEP,CLK, RSTA, RSTB,RSTC,RSTCARRYIN,RSTM,RSTP,SUBTRACT; //對DSP48原語的功能進行配置。DSP48 #( .AREG(1), // Number of pipeline registers on the A input, 0, 1 or 2 .BREG(1), // Number of pipeline registers on the B input, 0, 1 or 2 .B_INPUT("DIRECT"), // B input DIRECT from fabric or CASCADE from another DSP48 .CARRYINREG(1), // Number of pipeline registers for the CARRYIN input, 0 or 1 .CARRYINSELREG(1), // Number of pipeline registers for the CARRYINSEL, 0 or 1 .CREG(1), // Number of pipeline registers on the C input, 0 or 1 .LEGACY_MODE("MULT18X18S"), // Backward compatibility, NONE, MULT18X18 or MULT18X18S .MREG(1), // Number of multiplier pipeline registers, 0 or 1 .OPMODEREG(1), // Number of pipeline regsiters on OPMODE input, 0 or 1 .PREG(1), // Number of pipeline registers on the P output, 0 or 1 .SUBTRACTREG(1) // Number of pipeline registers on the SUBTRACT input, 0 or 1 ) fpga_v4_dsp48 ( .BCOUT(BCOUT), // 18-bit B cascade output .P(P), // 48-bit product output .PCOUT(PCOUT), // 48-bit cascade output .A(A), // 18-bit A data input .B(B), // 18-bit B data input .BCIN(BCIN), // 18-bit B cascade input .C(C), // 48-bit cascade input .CARRYIN(CARRYIN), // Carry input signal .CARRYINSEL(CARRYINSEL), // 2-bit carry input select .CEA(CEA), // A data clock enable input .CEB(CEB), // B data clock enable input .CEC(CEC), // C data clock enable input .CECARRYIN(CECARRYIN), // CARRYIN clock enable input .CECINSUB(CECINSUB), // CINSUB clock enable input .CECTRL(CECTRL), // Clock Enable input for CTRL regsiters .CEM(CEM), // Clock Enable input for multiplier regsiters .CEP(CEP), // Clock Enable input for P regsiters .CLK(CLK), // Clock input .OPMODE(OPMODE), // 7-bit operation mode input .PCIN(PCIN), // 48-bit PCIN input .RSTA(RSTA), // Reset input for A pipeline registers .RSTB(RSTB), // Reset input for B pipeline registers .RSTC(RSTC), // Reset input for C pipeline registers .RSTCARRYIN(RSTCARRYIN), // Reset input for CARRYIN registers .RSTCTRL(RSTCTRL), // Reset input for CTRL registers .RSTM(RSTM), // Reset input for multiplier registers .RSTP(RSTP), // Reset input for P pipeline registers .SUBTRACT(SUBTRACT) // SUBTRACT input );
endmodule
br
3.4.2 時鐘組件 時鐘組件包括各種全局時鐘緩沖器、全局時鐘復用器、普通I/O本地的時鐘緩沖器以及高級數字時鐘管理模塊,如表3-7所示。
表3-7 時鐘組件的清單
下面對幾個常用時鐘組件進行簡單介紹,其余組件的使用方法是類似的。? 1.BUFG? BUFG是具有高扇出的全局時鐘緩沖器,一般由綜合器自動推斷并使用,其和同類原語的RTL結構如圖3-28所示。全局時鐘是具有高扇出驅動能力的緩沖器,可以將信號連到時鐘抖動可以忽略不計的全局時鐘網絡,BUFG組件還可應用于典型的高扇出信號和網絡,如復位信號和時鐘使能信號。如果要對全局時鐘實現PLL或DCM等時鐘管理,則需要手動例化該緩沖器。其例化的代碼模板如下所示:? // BUFG: 全局時鐘緩存(Global Clock Buffer),只能以內部信號驅動? // Xilinx HDL庫向導版本,ISE 9.1? BUFG BUFG_inst (? .O(O), //時鐘緩存輸出信號? .I(I) // /時鐘緩存輸入信號? );? // 結束BUFG_ins模塊的例化過程? 在綜合結果分析中,其和同類原語的RTL結構如圖3-32所示。
圖3-32 全局時鐘原語的RTL級結構示意圖
2. BUFMUX? BUFMUX是全局時鐘復用器,選擇兩個輸入時鐘I0或I1中的一個作為全局時鐘,其和同類原語BUFMUX1的RTL級結構如圖M所示。當選擇信號S為低時,選擇I0;否則輸出I1,其真值表如表M所示。BUFMUX原語和BUFMUX1原語的功能一樣,只是選擇邏輯不同,對于BUFMUX1,當選擇信號S為低時,選擇I1;否則輸出I0。 BUFMUX原語的例化代碼模板如下所示:? BUFMUX原語的例化代碼模板如下所示:? // BUFGMUX: 全局時鐘的2到1復用器(Global Clock Buffer 2-to-1 MUX)? // 適用芯片:Virtex-II/II-Pro/4/5, Spartan-3/3E/3A? // Xilinx HDL庫向導版本,ISE 9.1? BUFGMUX BUFGMUX_inst (? .O(O), //時鐘復用器的輸出信號? .I0(I0), // 0時鐘輸入信號? .I1(I1), //1時鐘輸入信號? .S(S) // 時鐘選擇信號? );? // 結束BUFGMUX_inst模塊的例化過程? 需要注意的是:該原語只用用全局時鐘處理,不能作為接口使用。在綜合結果分析時,它和同類原語BUFMUX1的RTL級結構如圖3-33所示。
圖3-33 全局時鐘復用器的RTL級結構示意圖
3. BUFIO? BUFIO是本地I/O時鐘緩沖器,其RTL結構如圖M所示,只有一個輸入與輸出,非常簡單。BUFIO使用獨立于全局時鐘網絡的專用時鐘網絡來驅動縱向I/O管腳,所以非常適合同步數據采集。BUFIO要求時鐘和相應的I/O必須在同一時鐘區域,而不同時鐘網絡的驅動需要BUFR原語來實現。需要注意的是,由于BUFIO引出的時鐘只到達了I/O列,所以不能來驅動邏輯資源,如CLB和塊RAM。? BUFIO的例化代碼模板如下:? ?
// BUFIO: 本地I/O時鐘緩沖器( Local Clock Buffer)
// 適用芯片:Virtex-4/5
// Xilinx HDL庫向導版本,ISE 9.1
BUFIO BUFIO_inst (
.O(O), //本地I/O時鐘緩沖器的輸出信號
.I(I) //本地I/O時鐘緩沖器的輸入信號
);
// 結束BUFIO模塊的例化過程
在綜合結果分析時,其RTL級結構如圖3-34所示。
圖3-34 本地I/O時鐘緩沖器的RTL級結構示意圖
4. BUFR? BUFR是本地I/O時鐘、邏輯緩沖器,其RTL結構如圖M所示。BUFR和BUFIO都是將驅動時鐘引入某一時鐘區域的專用時鐘網絡,而獨立于全局時鐘網絡;不同的是,BUFR不僅可以跨越不同的時鐘區域(最多3個),還能夠驅動I/O邏輯以及自身或鄰近時鐘區域的邏輯資源。BUFIO的輸出和本地內部互聯都能驅動BUFR組件。此外,BUFR能完成輸入時鐘1~8的整數分頻。因此,BUFR是同步設計中實現跨時鐘域以及串并轉換的最佳方式。? BUFIO的例化代碼模板如下:? ?
// BUFR: 本地I/O時鐘、邏輯緩沖器(Regional Clock Buffer)
// 適用芯片:Virtex-4/5
// Xilinx HDL庫向導版本,ISE 9.1
BUFR #(
.BUFR_DIVIDE("BYPASS"),
//分頻比,可選擇 "BYPASS", "1", "2", "3", "4", "5", "6", "7", "8"。
.SIM_DEVICE("VIRTEX4")
// 指定目標芯片, "VIRTEX4" 或者 "VIRTEX5"
) BUFR_inst (
.O(O), //時鐘緩存輸出信號
.CE(CE), //時鐘使能信號,輸入信號
.CLR(CLR), //時鐘緩存清空信號
.I(I) // 時鐘緩存輸入信號
);
// 結束BUFR模塊的例化過程
需要注意的是:BUFIO和BUFR只能在Virtex-4系列以及更高系列芯片中使用。在綜合結果分析時,其RTL結構如圖3-35所示。
圖3-35 本地I/O時鐘、邏輯緩沖器的RTL級結構示意圖
5. DCM_BASE? DCM_BASE是基本數字時鐘管理模塊的縮寫,是相位和頻率可配置的數字鎖相環電路,常用于FPGA系統中復雜的時鐘管理。如果需要頻率和相位動態重配置,則可以選用DCM_ADV原語;如果需要相位動態偏移,可使用DCM_PS原語。DCM系列原語的RTL結構如圖3-8所示。
模塊接口信號的說明如表3-8所列。?
DCM_BASE組件可以通過Xilinx的IP Wizard向導產生,也可以直接通過下面的例化代碼直接使用。其Verilog的例化代碼模板為:? ?
// DCM_BASE: 基本數字時鐘管理電路(Base Digital Clock Manager Circuit)
// 適用芯片:Virtex-4/5
// Xilinx HDL庫向導版本,ISE 9.1
DCM_BASE #(
.CLKDV_DIVIDE(2.0),
// CLKDV分頻比可以設置為: 1.5,2.0,2.5,3.0,3.5,4.0,4.5,5.0,5.5,6.0,6.5
// 7.0,7.5,8.0,9.0,10.0,11.0,12.0,13.0,14.0,15.0 or 16.0
.CLKFX_DIVIDE(1), // Can be any integer from 1 to 32
// CLKFX信號的分頻比,可為1到32之間的任意整數
.CLKFX_MULTIPLY(4),
// CLKFX信號的倍頻比,可為2到32之間的任意整數
.CLKIN_DIVIDE_BY_2("FALSE"),
// 輸入信號2分頻的使能信號,可設置為TRUE/FALSE
.CLKIN_PERIOD(10.0),
// 指定輸入時鐘的周期,單位為ns,數值范圍為1.25~1000.00。
.CLKOUT_PHASE_SHIFT("NONE"),
// 指定移相模式,可設置為NONE或FIXED
.CLK_FEEDBACK("1X"),
// 指定反饋時鐘的頻率,可設置為NONE、1X或2X。相應的頻率關系都是針對CLK0而言的。
.DCM_PERFORMANCE_MODE("MAX_SPEED"),
// DCM模塊性能模式,可設置為 MAX_SPEED 或 MAX_RANGE
.DESKEW_ADJUST("SYSTEM_SYNCHRONOUS"),
// 抖動調整,可設置為源同步、系統同步或0~15之間的任意整數
.DFS_FREQUENCY_MODE("LOW"),
// 數字頻率合成模式,可設置為LOW或HIGH 兩種頻率模式
.DLL_FREQUENCY_MODE("LOW"),
// DLL的頻率模式,可設置為LOW、HIGH或HIGH_SER
.DUTY_CYCLE_CORRECTION("TRUE"),
// 設置是否采用雙周期校正,可設為TRUE或FALSE
.FACTORY_JF(16'hf0f0),
// 16比特的JF因子參數
.PHASE_SHIFT(0),
// 固定相移的數值,可設置為 -255 ~ 1023之間的任意整數
.STARTUP_WAIT("FALSE")
// 等DCM鎖相后再延遲配置DONE管腳,可設置為TRUE/FALSE
) DCM_BASE_inst (
.CLK0(CLK0), // 0度移相的DCM時鐘輸出
.CLK180(CLK180), // 180度移相的DCM時鐘輸出
.CLK270(CLK270), // 270度移相的DCM時鐘輸出
.CLK2X(CLK2X), // DCM模塊的2倍頻輸出
.CLK2X180(CLK2X180), // 經過180度相移的DCM模塊2倍頻輸出
.CLK90(CLK90), // 90度移相的DCM時鐘輸出
.CLKDV(CLKDV), // DCM模塊的分頻輸出,分頻比為CLKDV_DIVIDE
.CLKFX(CLKFX), // DCM合成時鐘輸出,分頻比為(M/D)
.CLKFX180(CLKFX180), // 180度移相的DCM合成時鐘輸出
.LOCKED(LOCKED), // DCM鎖相狀態輸出信號
.CLKFB(CLKFB), // DCM模塊的反饋時鐘信號
.CLKIN(CLKIN), // DCM模塊的時鐘輸入信號
.RST(RST) // DCM 模塊的異步復位信號
);
// 結束DCM_BASE模塊的例化過程
在綜合結果分析時,DCM系列原語的RTL結構如圖3-36所示。
圖3-36 DCM模塊的RTL級結構示意圖
3.4.3 配置和檢測組件 ? 配置和檢測組件提供了FPGA內部邏輯和JTAG掃描電路之間的數據交換以及控制功能,只要由6個原語組成,如表3-9所示。
表3-9 配置和檢測原語列表
下面對BSCAN_VIRTEX4組件進行簡單介紹,其余組件的使用方法是類似的。? 1.BSCAN_VIRTEX4? 當JTAG USER1/2/3/4指令被加載后,BSCAN_VIRTEX4允許設計人員來檢測TCK、TMS以及TDI等專用JTAG管腳的數據,并且可以將用戶數據寫入到TDO管腳上,這樣可以在PC上通過JTAG鏈讀取芯片內部的用戶數據。? BSCAN_VIRTEX4的管腳信號說明如下:? CAPTURE:位寬為1的輸出信號,用于指示是否加載了用戶指令,當JTAG接口處于CAPTURE-DR狀態時,輸出為高。? DRCK:位寬為1的輸出信號,用于監測JTAG電路的TCK信號。當JTAG鏈路處于用戶指令模式或者JTAG接口為SHIFT-DR狀態時,才有信號輸出。? RESET:位寬為1的輸出信號,在加載用戶指令時有效。當JTAG接口控制器處于TEST-LOGIC-RESET狀態時置高。? SEL:位寬為1的輸出信號,高有效。用于指示USER1數據是否加載到JTAG指令寄存器中。在UPDATE-IR狀態時有效,直到加載新的指令之前,一直保持有效電平。? SHIFT:位寬為1的輸出信號,加載用戶指令時有效。當JTAG接口控制器處于SHIFT-DR狀態時置高。? TDI:位寬為1的輸出信號,用于檢測JTAG鏈的TDI信號。? UPDATE:位寬為1的輸出信號,加載USER1指令和USER2指令時有效。當JTAG接口控制器處于UPDATE-DR狀態時置高。? TDO:位寬為1的輸入信號,可以將外部JTAG鏈的TDO信號直接連到該管腳上。? 在Virtex-4芯片中,有4個BSCAN_VIRTEX4硬件原語可用。因此,其屬性JTAG_CHAIN的有效值為1~4,默認值為1。? BSCAN_VIRTEX4原語的例化代碼模板如下所示:?
// BSCAN_VIRETX4: 完成內部邏輯和JTAG接口連接的邊界掃描原語(Boundary Scan primitive for connecting internal logic to JTAG interface.)
// 適用芯片:Virtex-4/5
// Xilinx HDL庫向導版本,ISE 9.1
BSCAN_VIRETX4 #(
.JTAG_CHAIN(1)
// 指定JTAG鏈用戶指令,必須為1, 2, 3, 或4中的任何一個正整數
) BSCAN_VIRETX4_inst (
.CAPTURE(CAPTURE), // 捕獲到的從TAP控制器的輸出
.DRCK(DRCK), // 用戶函數服務的數據寄存器輸出
.RESET(RESET), // TAP控制器輸出的復位信號
.SEL(SEL), // 用戶激活輸出
.SHIFT(SHIFT), // TAP控制器的移位輸出
.TDI(TDI), // TAP控制器的TDI輸出信號
.UPDATE(UPDATE), // TAP控制器的UPDATE輸出信號
.TDO(TDO) // 用戶函數的數據輸入信號
);
// 結束BSCAN_VIRETX4:模塊的例化過程
在綜合結果分析時,BSCAN_VIRTEX4的RTL結構圖如圖3-37所示。
圖3-37?BSCAN_VIRTEX4原語的RTL圖
3.4.4 吉比特收發器組件 ? 吉比特收發器組件用于調用RocketIO千兆位級收發器,支持從622 Mbps 到 6.5 Gbps的多速率應用,符合最廣泛的芯片、背板和光學器件的標準及協議,具有高級Tx/Rx均衡技術,收發器最多可達24個,提供了完整的串行 I/O 解決方案。具體包括4個組件,如表3-10所示。
表3-10 吉比特收發器組件
?
由于吉比特收發器操作復雜,使用原語很容易出錯,不易配置,因此需要在ISE中通過結構向導完成。有關吉比特收發器的原理和使用方法,將在第11章詳細介紹。?3.4.5 I/O端口組件 ? I/O組件提供了本地時鐘緩存、標準單端I/O緩存、差分I/O信號緩存、DDR專用I/O信號緩存、可變抽頭延遲鏈、上拉、下拉以及單端信號和差分信號之間的相互轉換,具體包括了21個原語,如表3-11所示。
?表3-11 I/O端口組件?
下面對幾個常用I/O組件進行簡單介紹,其余組件的使用方法是類似的。 1. BUFIO? BUFIO是FPGA芯片內部簡單的時鐘輸入、輸出緩存器,其RTL結構如圖3-38所示。BUFIO使用獨立于全局時鐘網絡的專用時鐘網絡來驅動I/O列,因此非常適合用于源同步的數據采集。但要注意的是:BUFIO只能在單一的時鐘區域內使用,不能跨時鐘域操作。此外,BUFIO也不能用于驅動邏輯資源(CLB、塊RAM等),因此其只能到達I/O列。
圖3-38 BUFIO的RTL結構圖
2. IBUFDS? IBUFDS原語用于將差分輸入信號轉化成標準單端信號,且可加入可選延遲。在IBUFDS原語中,輸入信號為I、IB,一個為主,一個為從,二者相位相反。? IBUFDS的邏輯真值表如表3-12所列,其中“-*”表示輸出維持上一次的輸出值,保持不變。
表3-12 IBUFDS原語的輸入、輸出真值表?
BUFDS原語的例化代碼模板如下所示:? ?
// IBUFDS: 差分輸入緩沖器(Differential Input Buffer)
// 適用芯片:Virtex-II/II-Pro/4, Spartan-3/3E
// Xilinx HDL庫向導版本,ISE 9.1
IBUFDS #(
.DIFF_TERM("FALSE"),
// 差分終端,只有Virtex-4系列芯片才有,可設置為True/Flase
.IOSTANDARD("DEFAULT")
// 指定輸入端口的電平標準,如果不確定,可設為DEFAULT
) IBUFDS_inst (
.O(O), // 時鐘緩沖輸出
.I(I), // 差分時鐘的正端輸入,需要和頂層模塊的端口直接連接
.IB(IB) // 差分時鐘的負端輸入,需要和頂層模塊的端口直接連接
);
// 結束IBUFDS模塊的例化過程
在綜合結果分析時,IBUFDS的RTL結構如圖3-39所示。
圖3-39 IBUFDS原語的RTL結構圖
3. IDELAY? 在Virtex-4系列芯片中,每個用戶I/O管腳的輸入通路都有一個IDELAY模塊,可用于數據信號或時鐘信號,以使二者同步,準確采集輸入數據。IDELAY具有可控的64抽頭延遲線,每個抽頭的延遲都是經過精密校準的78ps,且與進程、電壓和溫度特性無關,其內部結構如圖3-40所示。
圖3-40 IDELAY模塊的RTL級結構圖
IDELAY原語的信號說明如下:? I:單比特輸入信號,來自于IOB的串行輸入數據;? C:單比特輸入信號,時鐘輸入信號;? INC:單比特輸入信號,用于增加或減少延遲抽頭數;? CE:單比特輸入信號,使能延遲抽頭數增加或減少的功能;? RST:單比特輸入信號,復位延遲鏈的延遲抽頭數,如果沒有編程輸入,則為0;? O:單比特輸出信號。? IDELAY原語的例化代碼模板如下所示:?
// IDELAY: 輸入延遲單元(Input Delay Element)
// 適用芯片:Virtex-II/II-Pro/4, Spartan-3/3E
// Xilinx HDL庫向導版本,ISE 9.1
IDELAY #(
.IOBDELAY_TYPE("DEFAULT"),
// 輸入延遲類型,可設置為 "DEFAULT", "FIXED" 或者 "VARIABLE"
.IOBDELAY_VALUE(0)
// 輸入延遲周期數,可設置為0~63之間的任意整數
) IDELAY_inst (
.O(O), //1比特輸出信號
.C(C), // 1比特時鐘輸入信號
.CE(CE), // 1比特時鐘使能信號
.I(I), // 1比特數據輸入信號
.INC(INC), // 1比特增量輸入信號
.RST(RST) //1比特復位輸入信號
);
// 結束IDELAY模塊的例化過程
在綜合結果分析時,IDELAY原語的RTL結構如圖3-41所示。
圖3-41 IDELAY原語的RTL結構圖
4. OBUFDS原語? OBUFDS將標準單端信號轉換成差分信號,輸出端口需要直接對應到頂層模塊的輸出信號,和IBUFDS為一對互逆操作。OBUFDS原語的真值表如表3-13所列。
表3-13 OBUFDS原語的真值表?
OBUFDS原語的例化代碼模板如下所示:? ?
// OBUFDS: 差分輸出緩沖器(Differential Output Buffer)
// 適用芯片:Virtex-II/II-Pro/4, Spartan-3/3E
// Xilinx HDL庫向導版本,ISE 9.1
OBUFDS #(
.IOSTANDARD("DEFAULT")
// 指名輸出端口的電平標準
) OBUFDS_inst (
.O(O), // 差分正端輸出,直接連接到頂層模塊端口
.OB(OB), // 差分負端輸出,直接連接到頂層模塊端口
.I(I) // 緩沖器輸入
);
// 結束OBUFDS模塊的例化過程
在綜合結果分析時,OBUFDS原語的RTL結構如圖3-42所示。
圖3-42 OBUFDS的RTL結構圖
5. IOBUF原語? IOBUF原語是單端雙向緩沖器,其I/O接口必須和指定的電平標準相對應,支持 LVTTL、LVCMOS15、LVCMOS18、LVCMOS25以及LVCMOS33等信號標準,同時還可通過DRIVE、 FAST 以及SLOW等約束來滿足的不同驅動和抖動速率的需求。默認的驅動能力為12mA,低抖動。IOBUF由IBUF和OBUFT兩個基本組件構成,當I/O端口為高阻時,其輸出端口O為不定態。IOBUF原語的功能也可以通過其組成組件的互聯來實現。? IOBUF原語的輸入輸出真值表如表3-14所列。
表3-14 IOBUF原語的真值表
IOBUF原語的例化代碼模板如下所示:? ?
// IOBUF: 單端雙向緩沖器(Single-ended Bi-directional Buffer)
// 適用芯片:所有芯片
// Xilinx HDL庫向導版本,ISE 9.1
IOBUF #(
.DRIVE(12),
// 指定輸出驅動的強度
.IOSTANDARD("DEFAULT"),
// 指定I/O電平的標準,不同的芯片支持的接口電平可能會有所不同
.SLEW("SLOW")
// 制定輸出抖動速率
) IOBUF_inst (
.O(O), // 緩沖器的單元輸出
.IO(IO), // 緩沖器的雙向輸出
.I(I), // 緩沖器的輸人
.T(T) // 3態使能輸入信號
);
// 結束IOBUF模塊的例化過程
在綜合結果分析時,IOBUF原語的RTL結構如圖3-43所示。
圖3-43 OBUFDS的RTL結構圖
6. PULLDOWN和PULLUP原語? 數字電路有三種狀態:高電平、低電平、和高阻狀態。有些應用場合不希望出現高阻狀態,可以通過上拉電阻或下拉電阻的方式使其處于穩定狀態,如圖3-44所示。FPGA的I/O端口,可以通過外接電阻上下拉,也可以在芯片內部,通過配置完成上下拉。上拉電阻是用來解決總線驅動能力不足時提供電流的,而下拉電阻是用來吸收電流。通過FPGA內部配置完成上下拉,能有效節約電路板面積,是設計的首選方案。
圖3-44 上、下拉電路示意圖
上、下拉的原語分別為PULLUP和PULLDOWN。? 1)PULLUP原語的例化代碼? ?
// PULLUP: 上拉原語(I/O Buffer Weak Pull-up)
// 適用芯片:所有芯片
// Xilinx HDL庫向導版本,ISE 9.1
PULLUP PULLUP_inst (
.O(O),
//上拉輸出,需要直接連接到設計的頂層模塊端口上);
// 結束PULLUP模塊的例化過程 2)PULLDOWN原語的例化代碼 // PULLDOWN:下拉原語( I/O Buffer Weak Pull-down)
// 適用芯片:所有芯片
// Xilinx HDL庫向導版本,ISE 9.1
PULLDOWN PULLDOWN_inst (
.O(O),
// 下拉輸出,需要直接連接到設計的頂層模塊端口上
);
// 結束PULLDOWN模塊的例化過程
3.4.6 處理器組件 ? 處理器組件主要包括高速以太網MAC控制器和PowerPC硬核,如表3-15所示。
表3-15處理器組件列表?
更過原語的介紹,可以參看官方文檔《FPGAs SelectIO Resources User Guide》。
推薦閱讀
例說七層OSI參考模型
TCP/IP模型
TCP和UDP
以太網遵循的IEEE?802.3?標準
媒體訪問控制(MAC,Media Access Control)
媒體獨立接口(MII,Meida Independent Interface)
GMII、SGMII和SerDes的區別和聯系
PHY(Physical Layer,PHY)通俗理解
FPGA實現網口通信的幾種方式
千兆網UDP通信
FPGA千兆網TCP通信分析
基于FPGA的網口通信實例設計
基于UDP/IP協議的電口通信(一) 一大波HLS設計資料來了
2020版深入淺出玩轉FPGA視頻教程
點擊上方字體即可跳轉閱讀喲
總結
以上是生活随笔 為你收集整理的Xilinx原语的用法 的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔 網站內容還不錯,歡迎將生活随笔 推薦給好友。