1、介紹
IBUFDS、和OBUFDS都是差分信號緩沖器,用于不同電平接口之間的緩沖和轉換。IBUFDS 用于差分輸入,OBUFDS用于差分輸出。
2、IBUFDS
2.1、理論
IBUFDS是差分輸入緩沖器,支持低壓差分信號(如LVCMOS、LVDS等)。在IBUFDS中,一個電平接口用兩個獨特的電平接口(I和IB)表示。一個可以認為是主信號,另一個可以認為是從信號。
IBUFDS原語示意圖如下所示:
![poYBAGIMo8CAALk3AAEdiqFyBeM912.png](https://file.elecfans.com/web2/M00/30/CC/poYBAGIMo8CAALk3AAEdiqFyBeM912.png)
端口說明如下表:
![pYYBAGIMo8KABdfrAABz27Hr64s722.jpg](https://file.elecfans.com/web2/M00/30/D3/pYYBAGIMo8KABdfrAABz27Hr64s722.jpg)
信號真值表如下:
![pYYBAGIMo8OAWS7NAAB_UX4wMsI250.jpg](https://file.elecfans.com/web2/M00/30/D3/pYYBAGIMo8OAWS7NAAB_UX4wMsI250.jpg)
2.2、仿真
打開VIvado--Tools--Language Templates,搜索“IBUFDS”,可以找到Xilinx提供的模板如下:
IBUFDS #(
.DIFF_TERM("FALSE"), // Differential Termination
.IBUF_LOW_PWR("TRUE"), // Low power="TRUE", Highest
.IOSTANDARD("DEFAULT") // Specify the input I/O standard
) IBUFDS_inst (
.O(O), // Buffer output
.I(I), // Diff_p buffer input (connect directly to top-level port)
.IB(IB) // Diff_n buffer input (connect directly to top-level port)
);
DIFF_TERM、IBUF_LOW_PWR分別指定差分終端和性能模式,IOSTANDARD指定你需要輸出的電平標準。
接下來例化一個IBUFDS原語進行測試,Verilog代碼如下:
//------------------------------------------------------------------------
//--IBUFDS測試模塊
//------------------------------------------------------------------------
//----------------------------------------------------
module IBUFDS_test(
input clk , //時鐘,50M
input rst_n , //復位,低電平有效
input data_p , //輸入數(shù)據,差分+
input data_n , //輸入數(shù)據,差分-
output out
);
//----------------------------------------------------
IBUFDS #(
.DIFF_TERM ("FALSE") , // Differential Termination
.IBUF_LOW_PWR ("TRUE") , // Low power="TRUE", Highest
.IOSTANDARD ("DEFAULT") // 選擇I/O電平標準,這里選擇默認
)
IBUFDS_inst (
.O (out) , // 輸出
.I (data_p) , // 差分輸入+(需要直接連接到頂層端口)
.IB (data_n) // 差分輸入-(需要直接連接到頂層端口)
);
endmodule
每隔20ns分別隨機生成2個1位2進制數(shù)據作為差分輸入,觀察輸出,Testbench如下:
//------------------------------------------------
//--IBUFDS原語仿真
//------------------------------------------------
`timescale 1ns/1ns //時間單位/精度
//----------------------------------------------------
module tb_IBUFDS_test();
reg clk ;
reg rst_n ;
reg data_p ;
reg data_n ;
wire out ;
//----------------------------------------------------
IBUFDS_test IBUFDS_test_inst(
.clk (clk) ,
.rst_n (rst_n) ,
.data_p (data_p) ,
.data_n (data_n) ,
.out (out)
);
//----------------------------------------------------
initial begin
clk = 1'b1; //初始時鐘為1
rst_n data_p data_n #60 //60個時鐘周期后
rst_n end
//----------------------------------------------------------
always #10 clk = ~clk; //系統(tǒng)時鐘周期20ns
always #20 data_p always #20 data_n
endmodule
仿真結果如下:
![poYBAGIMo8WAVpdHAABSPSP73JI139.png](https://file.elecfans.com/web2/M00/30/CC/poYBAGIMo8WAVpdHAABSPSP73JI139.png)
每隔20ns,2個差分輸入端口分別隨機生成2個1位2進制數(shù)據;輸出輸入符合上述的真值表。
3、OBUFDS
3.1、理論
OBUFDS 是一個差分輸出緩沖器,用于將來自 FPGA 內部邏輯的信號轉換成差分信號輸出,支持 TMDS、LVDS等電平標準。它的輸出用O和OB兩個獨立接口表示。一個可以認為是主信號,另一個可以認為是從信號。
OBUFDS原語示意圖如下所示:
![pYYBAGIMo8eAbDmlAAB2RftdfvY623.png](https://file.elecfans.com/web2/M00/30/D4/pYYBAGIMo8eAbDmlAAB2RftdfvY623.png)
端口說明如下表:
![pYYBAGIMo8iAURjGAABz9h5PcJg152.jpg](https://file.elecfans.com/web2/M00/30/D4/pYYBAGIMo8iAURjGAABz9h5PcJg152.jpg)
信號真值表如下:
![poYBAGIMo8qACBjeAABWnDTlHRQ858.jpg](https://file.elecfans.com/web2/M00/30/CC/poYBAGIMo8qACBjeAABWnDTlHRQ858.jpg)
可以看出,輸出+端與輸入一致,輸出-端與輸入相反。
3.2、仿真
打開VIvado--Tools--Language Templates,搜索“OBUFDS”,可以找到Xilinx提供的模板如下:
OBUFDS #(
.IOSTANDARD("DEFAULT"), // Specify the output I/O standard
.SLEW("SLOW") // Specify the output slew rate
) OBUFDS_inst (
.O(O), // Diff_p output (connect directly to top-level port)
.OB(OB), // Diff_n output (connect directly to top-level port)
.I(I) // Buffer input
);
其中IOSTANDARD指定你需要輸出的差分電平標準,SLEW根據你的要求輸出FAST或者SLOW。
接下來例化一個OBUFDS原語進行測試,Verilog代碼如下:
//------------------------------------------------------------------------
//--OBUFDS測試模塊
//------------------------------------------------------------------------
//----------------------------------------------------
module OBUFDS_test(
input clk , //時鐘,50M
input rst_n , //復位,低電平有效
input data , //輸入數(shù)據
output out_p , //輸出數(shù)據,差分+
output out_n //輸出數(shù)據,差分-
);
//----------------------------------------------------
OBUFDS #(
.IOSTANDARD ("DEFAULT") , // 選擇I/O電平標準,這里選擇默認
.SLEW ("SLOW") // 選擇輸出速率,這里選擇SLOW
)
OBUFDS_inst (
.O (out_p) , // 差分輸出+(需要直接連接到頂層端口)
.OB (out_n) , // 差分輸出-(需要直接連接到頂層端口)
.I (data) // 輸入
);
endmodule
每隔20ns隨機生成一個1位2進制數(shù)據,觀察差分輸出,Testbench如下:
//------------------------------------------------
//--OBUFDS原語仿真
//------------------------------------------------
`timescale 1ns/1ns //時間單位/精度
//----------------------------------------------------
module tb_OBUFDS_test();
reg clk ;
reg rst_n ;
reg data ;
wire out_p ;
wire out_n ;
//----------------------------------------------------
OBUFDS_test OBUFDS_test_inst(
.clk (clk),
.rst_n (rst_n),
.data (data),
.out_p (out_p),
.out_n (out_n)
);
//----------------------------------------------------
initial begin
clk = 1'b1; //初始時鐘為1
rst_n data #60 //60個時鐘周期后
rst_n end
//----------------------------------------------------------
always #10 clk = ~clk; //系統(tǒng)時鐘周期20ns
always #20 data
endmodule
仿真結果如下:
![pYYBAGIMo8yAeXMTAABKljcqjio357.png](https://file.elecfans.com/web2/M00/30/D4/pYYBAGIMo8yAeXMTAABKljcqjio357.png)
每隔20ns,data隨機生成0或者1,out_p與輸入一致,out_n與輸入相反;差分輸出信號符合上述的真值表。
審核編輯:符乾江
-
Xilinx
+關注
關注
71文章
2172瀏覽量
122266 -
仿真
+關注
關注
50文章
4130瀏覽量
134084
發(fā)布評論請先 登錄
相關推薦
調試Xilinx Zynq + ADS58C48,ADC使用的是LVDS模式,ADC不能正常工作怎么解決?
采用Xilinx FPGA的AFE79xx SPI啟動指南
![采用<b class='flag-5'>Xilinx</b> FPGA的AFE79xx SPI啟動指南](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
如何在ModelSim中添加Xilinx仿真庫
FPGA | Xilinx ISE14.7 LVDS應用
Trion DSP 原語使用問題 - 1
![Trion DSP <b class='flag-5'>原語</b>使用問題 - 1](https://file1.elecfans.com/web2/M00/E7/39/wKgZomZLC1iAfhI_AAA7SpUJ44c473.png)
Xilinx ISE14.7 LVDS的應用
![<b class='flag-5'>Xilinx</b> ISE14.7 LVDS的應用](https://file1.elecfans.com/web2/M00/E1/E4/wKgZomY58jWAUBNbAAAxSgxBW_4570.png)
電路仿真軟件有哪些類型 電路仿真接線app軟件哪個好
Xilinx SelectIO資源內部的IDELAYE2應用介紹
![<b class='flag-5'>Xilinx</b> SelectIO資源內部的IDELAYE2應用介紹](https://file1.elecfans.com/web2/M00/DB/DC/wKgaomYrIXOAWSeKAAAMaeHDBsc496.jpg)
評論