1. 程式人生 > >(Xilinx)FPGA中LVDS差分高速傳輸的實現

(Xilinx)FPGA中LVDS差分高速傳輸的實現

低壓差分傳送技術是基於低壓差分訊號(Low Volt-agc Differential signaling)的傳送技術,從一個電路板系統內的高速訊號傳送到不同電路系統之間的快速資料傳送都可以應用低壓差分傳送技術來實現,其應用正變得越來越重要。低壓差分訊號相對於單端的傳送具有較高的噪聲抑制功能,其較低的電壓擺幅允許差分對線具有較高的資料傳輸速率,消耗較小的功率以及產生更低的電磁輻射。



LVDSLow Voltage Differential Signaling,低電壓差分訊號。


LVDS傳輸支援速率一般在155Mbps(大約為77MHZ)以上。


LVDS是一種低擺幅的差分訊號技術,它使得訊號能在差分

PCB線對或平衡電纜上以幾百Mbps的速率傳輸,其低壓幅和低電流驅動輸出實現了低噪聲和低功耗。



差分訊號抗噪特性


從差分訊號傳輸線路上可以看出,若是理想狀況,線路沒有干擾時,


在傳送側,可以形象理解為:


IN= IN+  IN-


在接收側,可以理解為:


IN+  IN- =OUT


所以:


OUT = IN


在實際線路傳輸中,線路存在干擾,並且同時出現在差分線對上,


在傳送側,仍然是:


IN = IN+  IN-


線路傳輸干擾同時存在於差分對上,假設干擾為q,則接收則:


(IN+ + q)  (IN- + q) = IN+  IN- = OUT


所以:


OUT = IN



噪聲被抑止掉。

上述可以形象理解差分方式抑止噪聲的能力。



欲瞭解更多LVDS,可以參考《LVDS原理與應用簡介》pdf




點選看大圖


From: 美國國家半導體的《LVDS使用者手冊》P9



FPGA中的差分管腳


為了適用於高速通訊的場合,現在的FPGA都提供了數目眾多的LVDS介面。如Spartan-3E系列FPGA提供了下列差分標準:


? LVDS


? Bus LVDS


? mini-LVDS


? RSDS


? Differential HSTL (1.8V, Types I and III)


? Differential SSTL (2.5V and 1.8V, Type I)


? 2.5V LVPECL inputs



所擁有的差分I/O管腳數目如下




點選看大圖


From:Spartan-3E FPGA Family:Complete Data Sheet   p5



I/O管腳的命名方式:




點選看大圖


From:Spartan-3E FPGA Family:Complete Data Sheet    p164





From:Spartan-3E FPGA Family:Complete Data Sheet    p18



Spartan-3E系列FPGA器件差分I/O介面輸入工作的特性引數:






點選看大圖


From:Spartan-3E FPGA Family:Complete Data Sheet    p126



Spartan-3E系列FPGA器件差分I/O介面輸出工作的特性引數:






點選看大圖


From:Spartan-3E FPGA Family:Complete Data Sheet    p127



Xilinx公司差分原語的使用


(原語,其英文名字為Primitive,是Xilinx針對其器件特徵開發的一系列常用模組的名字,使用者可以將其看成Xilinx公司為使用者提供的庫函式,類似於C++中的“cout”等關鍵字,是晶片中的基本元件,代表FPGA中實際擁有的硬體邏輯單元,如LUT,D觸發器,RAM等,相當於軟體中的機器語言。在實現過程中的翻譯步驟時,要將所有的設計單元都轉譯為目標器件中的基本元件,否則就是不可實現的。原語在設計中可以直接例化使用,是最直接的程式碼輸入方式,其和HDL語言的關係,類似於組合語言和C語言的關係。)



關於Xilinx原語的詳細介紹,可以參考下面文章


1)FPGA開發實用教程  第4節 Xilinx公司原語的使用方法



2)ISE的Help—sofeware Manuals




點選看大圖 



差分I/O埠元件


1)           IBUFDS 


IBUFDS原語用於將差分輸入訊號轉化成標準單端訊號,且可加入可選延遲。在IBUFDS原語中,輸入訊號為IIB,一個為主,一個為從,二者相位相反。 

IBUFDS的邏輯真值表所列,其中“-*”表示輸出維持上一次的輸出值,保持不變。


IBUFDS原語的輸入、輸出真值表 

點選看大圖


IBUFDS原語的例化程式碼模板如下所示: 

// 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模組的例化過程



Verilog Instantiation Template


IBUFDS instance_name (.O (user_O),


 .I (user_I),


.IB (user_IB));



在綜合結果分析時,IBUFDSRTL結構如圖所示。



IBUFDS原語的RTL結構圖


 2)        OBUFDS


OBUFDS將標準單端訊號轉換成差分訊號,輸出埠需要直接對應到頂層模組的輸出訊號,和IBUFDS為一對互逆操作。OBUFDS原語的真值表如表所列。


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模組的例化過程



Verilog Instantiation Template


OBUFDS instance_name (.O (user_O),


  .OB (user_OB),


   .I (user_I));


 在綜合結果分析時,OBUFDS原語的RTL結構如圖所示。



OBUFDSRTL結構圖



3) IOBUFDS


IOBUFDS原語真值表




點選看大圖 



IOBUFDS的RTL結構圖






Verilog Instantiation Template


// IOBUFDS: Differential Bi-directional Buffer


// Virtex-II/II-Pro/4/5, Spartan-3/3E/3A


// Xilinx HDL Libraries Guide, version 9.1i


IOBUFDS #(


.IBUF_DELAY_VALUE("0"),


// Specify the amount of added input delay for the buffer, "0"-"16" (Spartan-


3E only)


.IFD_DELAY_VALUE("AUTO"),


// Specify the amount of added delay for input register, "AUTO", "0"-"8"


(Spartan-3E only)


.IOSTANDARD("DEFAULT")// Specify the I/O standard


) IOBUFDS_inst (


.O(O), // Buffer output


.IO(IO), // Diff_p inout (connect directly to top-level port)


.IOB(IOB),// Diff_n inout (connect directly to top-level port)


.I(I),// Buffer input


.T(T) // 3-state enable input


);


// End of IOBUFDS_inst instantiation



差分時鐘元件


1IBUFGDS


與全域性時鐘資源相關的原語常用的與全域性時鐘資源相關的Xilinx器件原語包括:IBUFGIBUFGDSBUFGBUFGPBUFGCE BUFGMUXBUFGDLLDCM等,如圖1所示。


IBUFGDSIBUFG的差分形式,當訊號從一對差分全域性時鐘管腳輸入時,必須使用IBUFGDS作為全域性時鐘輸入緩衝。IBUFG支援BLVDSLDTLVDSEXTLVDSLVPECLULVDS等多種格式的IO標準。




   IBUFGDS原語真值表






IBUFGDS的RTL結構圖






Verilog Instantiation Template


IBUFGDS instance_name (.O (user_O),


  .I (user_I),


   .IB (user_IB));



LVDS差分的在FPGA中的應用


     在高速傳輸的過程中,經常會受到干擾而誤碼,因此有時候時鐘輸入採用差分輸入的辦法來提高抗干擾的能力。下面已一個二分頻為例子:



二分頻Verilog程式碼如下:


`timescale 1ns / 1ps



module div2(clk, div2_clk, rst_n);


input clk;


input rst_n;



 output div2_clk;


 reg div2_clk;



[email protected](posedge clk or negedge rst_n)


begin 


if(!rst_n)


     div2_clk<=0;


else div2_clk<=~div2_clk;


 end



endmodule



佈線佈局的模擬(Post-Route Simulation)波形如下:




點選看大圖 



        現在對時鐘clk訊號進行差分處理,對div2 module進行例化(Create Schematic Symbol)


        新建一個div2_diff.sch。新增div2的module在sch上。通過搜尋,把時鐘緩衝差分元件IBUFGDS也放在div2_diff.sch上。






    設定好clk的差分管腳,(按照Verilog命名規範)正的命名為clk_p,負的命名為clk_n。




點選看大圖




       在新增波形測試檔案時要注意,Clock Information選擇Multiple Clocks(因為時鐘變為兩個clk_p、clk_n)




點選看大圖 



下一步,把clk_p和clk_n都選上:



點選看大圖




可以看到模擬的clk_p和clk_n都變為差分輸入的了。




點選看大圖



還要對div2_diff.sch進行管腳約束。div2_diff.ucf約束檔案如下:


NET "clk_p"  LOC = "C9" | IOSTANDARD = LVDS_25 ;


NET "clk_n"  LOC = "D9" | IOSTANDARD = LVDS_25 ;


NET "div2_clk"  LOC = "A10" | IOSTANDARD = LVCMOS33 ;


NET "rst_n"  LOC = "H13" | IOSTANDARD = LVCMOS33 ;



要注意:


clk_n和clk_p都要設定在差分管腳對上,


clk_n——C9——IO_L14P


clk_p——D9——IO_L14N


並且邏輯電平標準設定為LVDS_25。Spartan-3E支援下面的差分邏輯電平標準。


? LVDS


? Bus LVDS


? mini-LVDS


? RSDS


? Differential HSTL (1.8V, Types I and III)


? Differential SSTL (2.5V and 1.8V, Type I)


? 2.5V LVPECL inputs



     綜合、翻譯、對映和佈線佈局後,執行佈線佈局模擬,可以看到時鐘clk已經變為差分時鐘了。




點選看大圖



本文工程檔案下載 http://space.ednchina.com/Upload/2009/2/24/a4512f43-eb90-4ef6-b038-a058b0869625.rar



    看div2_diff.sch的HDL檔案(View HDL Functional Model)。可以看到其實sch呼叫了IBUFGDS原語。






在差分設計中,經常會因為配置錯誤而使得綜合出錯,最常見的錯誤分析如下:



ERROR:Place:332 - This design contains an LVDS IO pair. The pair of IOs must be placed in a specific relative structure.


The two IOs can not be placed in this specific structure.


The reason for this issue:


All of the logic associated with this structure is locked and the relative placement of the logic violates the


structure. The problem was found between the relative placement of IBUF clk_p at site PAD27 and IBUF clk_n at site


IPAD28.  The following components are part of this structure:


IBUF   clk_p


IBUF   clk_n



        這個錯誤出錯是因為差分管腳clk_p和clk_n沒有約束到晶片的差分對管腳上。需要修改.ucf檔案。至於晶片哪個管腳是差分對,可以參考相應晶片的Datasheet。XC3S500E-FG320(Spartan-3E fpga)有92個I/O差分管腳和12個輸入差分管腳。




ERROR:Pack:946 - The I/O component "clk_p" has an illegal IOSTANDARD value.


Components of type DIFFMI do not support IOSTANDARD LVCMOS33.  Please correct


the IOSTANDARD property value.



這個錯誤出錯是因為差分管腳設定的邏輯電平標準不對,設定成LVCMOS33,應該設定為晶片支援的LVDS邏輯電平標準。





參考資料:


1)基於LVDS技術與FPGA的高速通訊應用研究,韓黨群,唐徵兵,張慶玲



2)LVDS原理與應用簡介



3) 美國國家半導體的《LVDS使用者手冊》






Xilinx FPGA 如何使用LVDS





無論使用HDL flow還是schematic flow,只需要例化IBUFDS,OBUFDS之類的差分緩衝器,就可以使用LVDS了。



    例化之後,要定位Pin位置,使用PACE,在IO


    Standard中選擇LVDS33或者LVDS25,還能選擇有DCI的版本。定埠時,注意看Datasheet中Pin名字分P/N,這P也要對應buffer中的P,N也要對應N。而且注意同一個bank只能有一個電壓標準。



    如果用FPGA Editor觀察佈局佈線後的情況,就會發現,FPGA


    Editor中沒有IBUFDS這個Component,這個Buffer是藏在IOB裡的,點選到Pin的圖塊中,可以看到裡面有一個Buffer,就起到了IBUFDS這個作用。

相關推薦

XilinxFPGALVDS高速傳輸實現

低壓差分傳送技術是基於低壓差分訊號(Low Volt-agc Differential signaling)的傳送技術,從一個電路板系統內的高速訊號傳送到不同電路系統之間的快速資料傳送都可以應用低壓差分傳送技術來實現,其應用正變得越來越重要。低壓差分訊號相對於單端的傳送具有

[轉]FPGA使用LVDS信號的一些註意事項

iii alter src 情況 -1 mage ip核 verilog img 最近在調試一個LVDS的屏顯功能,涉及到了一些LVDS的東東,簡單地整理如下,後續會再補充。 (1)對於altera FPGA(CYCLONE III) 1、對於作為LVDS傳輸的BANK必須

【BZOJ4538】網路HNOI2016-整體二分+樹上+樹狀陣列

測試地址:網路 做法: 本題需要用到整體二分+樹上差分+樹狀陣列。 各位大佬想的都是用一些樹鏈剖分+線段樹套堆這種詭異操作,O(mlog⁡3n)O(m\log^3n)O(mlog3n)卡進去的,然而像我這種常數爆大選手根本不敢寫…於是發現還有222個log⁡\l

IISFTP設定使用者和密碼 實現多使用者管理

  測試一下:這裡以IP為192.168.0.16為例,輸入FTP://192.168.0.16,回車,提示輸入使用者和密碼,輸入FTP01及其密碼,順利進入,這時進入的只能是FTP01虛擬目錄,可以上傳一個檔案,然後在伺服器上檢視一下是放置在哪個目錄下就可判定了。同樣,以FTP02登入,就進入了FTP02目

SQL Server 2005區表:添加一個

eat 查詢 sch 另一個 rom 原創 查看 copyto art 所謂天下大事,分久必合,合久必分,對於分區表而言也一樣。前面我們介紹過如何刪除(合並)分區表中的一個分區,下面我們介紹一下如何為分區表添加一個分區。 為分區表添加一個分區,這種情況是時常會

SQL Server 2005區表:什麽是區表?為什麽要用區表?如何創建區表?

ima 查詢條件 出錯 數據的操作 之間 方便 如何 oar 意思 如果你的數據庫中某一個表中的數據滿足以下幾個條件,那麽你就要考慮創建分區表了。 1、數據庫中某個表中的數據很多。很多是什麽概念?一萬條?兩萬條?還是十萬條、一百萬條?這個,我覺得是仁者見仁、智者

FPGA小白學習之路4PLL的locked信號解析

count 功能 style use doc 分享圖片 tar cte cal ALTPLL中的areset,locked的使用   轉自:http://www.360doc.com/content/13/0509/20/9072830_284220258.shtml   

Xilinx Altera FPGA的邏輯資源Slices VS LE)比較

經常有朋友會問我,“我這個方案是用A家的FPGA還是X家的FPGA呢?他們的容量夠不夠呢?他們的容量怎麼比較呢?”當然,在大部分時候,我在給客戶做設計的時候,直接會用到最高容量的產品,因為我們的產品對成本不敏感。不過,在此還是比較一下兩家的產品,簡單寫寫一些自己的想法

2018.11.05【NOIP2015】【洛谷2680】【UOJ#150】運輸計劃二分答案+DFS序+樹上複雜度並不對也不能過的樹鏈剖

洛谷傳送門 解析: UOJ上的資料很強,複雜度不對過不了的,但是LCALCALCA如果是用倍增求的話也過不了(已經加了上界優化)。。。畢竟樹剖常數小,複雜度還不滿。。。 思路: 首先,不要試圖化邊為點,每條邊的資訊可以存在它所指向的兒子中。 解法1:UOJ上

Nginx學習之路NginX的記憶體管理之---Nginx的記憶體對齊和記憶體

Nginx由於極高的效能受到大家的追捧,而Nginx的高效能與它優秀的記憶體管理方式是分不開的,今天就來聊一聊Nginx中的記憶體對齊和記憶體分頁。先說下Nginx中的記憶體對齊,Nginx中的記憶體對齊機制是它高效能的關鍵因素之一,先說點基礎的東西,什麼是記憶體對齊呢? 記

Bzoj1202/洛谷P2294 [HNOI2005]狡猾的商人帶權並查集/約束系統

pen ems http type 判斷 put .com 就是 algo 題面 Bzoj 洛谷 題解 考慮帶權並查集,設\(f[i]\)表示\(i\)的父親(\(\forall f[i]<i\)),\(sum[i]\)表示\(\sum\limits_{j=fa[i]

Hibernate使用JDBC

alt work 方法 代碼 cep cti 一個 sdm admin 在hibernate中獲取connection數據庫連接有兩種方法:(操作數據庫常用這種方法) 1. session.doReturningWork 返回一個對象,適用於查詢方法 2. ses

我是初學者第一次項目開發開發遇到的問題和註意事項

持久層 數據庫 認識 碼代碼 操作 出錯 排序 文檔 項目 這周正式開始做項目練習,這才發現實際去做的時候會遇到和出現很多的問題 在這裏說一說我的體會,請指正 首先,實體類 1、實體類中有哪些屬性,類型是什麽,並根據屬性建立sql的相應表格, 2、哪些屬性需要在寫在實體

OL2設置鼠標的樣式

format csdn 移動 初始 pbo led doc 代碼 detail http://blog.csdn.net/gisshixisheng/article/details/49496289 概述: 在OL2中,鼠標默認是箭頭,地圖移動時,鼠標樣式是移動樣式;很

Scala協變(+)、逆變(-)、上界(<:)、下界(>:)簡單介紹

定義類 word ref 一個 pla 而不是 關系 repl 協變 看源碼的時候看到: trait ExtensionId[T <: Extension] {沒見過這個符號啊<: Scala上界(<:)和下界(>:) 1) U >: T

一口一口吃掉Hibernate——Hibernateinverse的用法

設置 XML 示例代碼 映射文件 代碼 參加 property 如果 people 一、Inverse是hibernate雙向關系中的基本概念。inverse的真正作用就是指定由哪一方來維護之間的關聯關系。當一方中指定了“inverse=false”(默認),那麽那

【OpenGL】Shader實例分析- AngryBots的主角受傷特效

spa 2.7 imp ttext pro tint shader 作用 負責 轉發請保持地址:http://blog.csdn.net/stalendp/article/details/40859441 AngryBots是Unity官方的一個非常棒的樣例。非常有研究

轉載Eclipse使用SVN

cli clip fill mar org 不同的 mod 一個 href 為了方便個人使用,轉載過來的,如需查閱,請前往原文地址:http://www.cnblogs.com/wvqusrtg/p/4993849.html 1.在Eclipse裏下載Subclipse插

國內物聯網平臺初探移物聯網開放平臺OneNet

nco 國內 聯網 申請 nonce 行數 即時通信 不同 初始 平臺定位 OneNET是中移物聯網有限公司搭建的開放、共贏設備雲平臺,為各種跨平臺物聯網應用、行業解決方案,提供簡便的雲端接入、存儲、計算和展現,快速打造物聯網產品應用,降低開發成本。 IoT PaaS

Maven的倉庫

setting back wid csdn esp strong itl nexus 知識 一、分類 maven的倉庫只有兩大類:   1.本地倉庫 2.遠程倉庫,在遠程倉庫中又分成了3種:   2.1 中央倉庫 2.2 私服 2.3