E3--FPGA实现LVDS收发实例和原理2022-12-03
1.什么是LVDS
一個新東西來的時候,人們總是希望能夠宏觀的定性的認(rèn)識它。一個問題是,手機(jī)上用的“軟件”該如何定義呢?來自百度百科的定義是,軟件是指一系列按照特定順序組織的計算機(jī)數(shù)據(jù)和指令的集合,如果你是非專業(yè)人員,第一次聽說“軟件”并聽到這樣的定義應(yīng)該不會有好的感知。另外一種回答是,類似手機(jī)里“微信”的就是一個軟件,雖然仍然不知道軟件如何標(biāo)準(zhǔn)定義,但這個回答顯然能讓更容易的感知“軟件”這個名詞。生活中往往需要從另外一個事物A認(rèn)識事物B,這個A可能和B存在某種關(guān)系,由于A很簡單從而對B有了宏觀的感知。生活如此,學(xué)習(xí)一個新的技術(shù)也是如此,或者說,學(xué)技術(shù)如此,生活也是如此。那該如何宏觀感知LVDS呢?
LVDS的標(biāo)準(zhǔn)定義是Low-Voltage Diffferential Signaling低電壓差分信號,為了克服以TTL電平方式傳輸寬帶高碼率數(shù)據(jù)時功耗大,電磁干擾大等缺點出現(xiàn)了LVDS技術(shù),它具有低功耗、低誤碼率、低串?dāng)_和低輻射等特點。LVDS接口使用1.2V 偏置電壓作為基準(zhǔn)(共模直流電壓),其正負(fù)端的擺幅大約為350mV,即所謂的差模電壓。在網(wǎng)絡(luò)上檢索LVDS會出現(xiàn)各種說法,LVDS接口、LVDS電平、LVDS協(xié)議、LVDS技術(shù),到底該如何理解呢?從電氣標(biāo)準(zhǔn)的角度,LVDS是一種電平標(biāo)準(zhǔn),其他常見的電平標(biāo)準(zhǔn)還有TTL、LVTTL、SSTL、LVCMOS、RS232、RS485等,不同電平標(biāo)準(zhǔn)有不同的場景應(yīng)用。在Xilinx的FPGA中,支持這個電平標(biāo)準(zhǔn),并且有LVDS_25\LVDS\LVDS33等,后續(xù)會介紹xilinx LVDS使用注意事項。從接口的角度看,LVDS可以稱作接口,俠義的接口例如USB接口,千兆網(wǎng)口,麥克接口都是指某個物理硬件,可以連接起來。而廣義的接口包括API、Sockets、弱函數(shù)、虛函數(shù)等軟件上的接口,二者有一個共同的特點就是要在接口兩端實現(xiàn)信息的傳遞,從這個意義上講,LVDS是一個俠義的硬件接口。關(guān)于LVDS技術(shù),這個說法主要是指LVDS接收器和收發(fā)器的硬件上的組成部分,大多數(shù)低速數(shù)字邏輯電平(如TTL、CMOS)是以電壓對參考地的幅值來判斷是高電平還是低電平, LVDS卻完全不一樣,它是通過數(shù)據(jù)接收器同相端與反相端的電壓相對大小判斷高低電平的,而不是通過同相端或反相端對公共地(GND)。通過恒流源和全橋開關(guān)電路不同晶體管的通斷形成電壓擺幅。關(guān)于LVDS協(xié)議,這種說法應(yīng)該是不對的,通常協(xié)議是指規(guī)定兩個或多個通信實體之間進(jìn)行交換的報文格式和次序,LVDS并沒有做這些規(guī)定。因此當(dāng)設(shè)備與控制芯片(如FPGA)通過LVDS接口相連時,如何正確傳輸數(shù)據(jù),這是控制芯片去適配設(shè)備接口屬性的,這也是本篇要解決的問題,即實現(xiàn)FPGA上的LVDS與外部設(shè)備通信,實例中用到的外部設(shè)備也是FPGA。同樣這也是LVDS的本質(zhì)意義,即如何通過硬件電路LVDS接口實現(xiàn)通信。文末附本例源碼。
2.LVDS傳輸模型
?如上圖所示,LVDS是典型的源同步傳輸模型,除此以外還有即將被淘汰的系統(tǒng)同步模型和現(xiàn)在應(yīng)用廣泛的自同步模型。源同步模型由數(shù)據(jù)線和時鐘線組成,LVDS傳輸支持速率一般在155Mbps(大約為77MHZ)以上,推薦最大速率為655Mbps,理論極限速率為1.923Gbps。這里的時鐘通常稱之為隨路時鐘,并沒有規(guī)定這個隨路時鐘的時鐘頻率是多少,但通常是并行時鐘或者串行時鐘(SDR)或串行時鐘除以2(DDR模式)。它存在的意義便是幫助接收端恢復(fù)數(shù)據(jù)。恢復(fù)的過程是同步于隨路時鐘,發(fā)送一個雙方約定好的Pattern,當(dāng)接收端恢復(fù)出pattern時,認(rèn)為通道可以傳輸有效數(shù)據(jù)。當(dāng)通信速率較小的源同步模型,例如cypressUSB3.0方案中,可以通過將隨路時鐘相移的方法滿足cypress芯片的時序參數(shù)要求。但LVDS的線速度是比較高的,需要通過邏輯代碼中微調(diào)來找到數(shù)據(jù)采樣的中心點。
關(guān)于LVDS接口通信的其他概念結(jié)合上圖闡釋,截圖出自xapp585-lvds-source-synch-serdes-clock-multiplication.pdf,可以看到隨路時鐘采用的是并行時鐘,一共有五個LVDS傳輸線同步于此時鐘,此外還有通道的概念,通常是一個通道有一個單獨的隨路時鐘,通道內(nèi)有幾個LVDS傳輸線。圖中隨路時鐘的占空比并不均勻,在一個傳輸線高電平期間傳輸3bit,在低電平期間傳輸4bit,一個并行時鐘周期單個傳輸線上傳輸?shù)腷it個數(shù)稱為串化因子,圖中串化因子是7。SDR模式和DDR模式是相對于串行時鐘說的,DDR就是在串行時鐘的上升沿和下降沿都發(fā)出數(shù)據(jù)。因此,一個并行周期將傳輸 7bit*5lines=35bit數(shù)據(jù)。上述提及的各個LVDS通信中的概念應(yīng)該是通信雙方已知的,就像串口傳輸通信雙方應(yīng)該協(xié)調(diào)好波特率等參數(shù)。
LVDS傳輸模型常用于液晶屏的信號接收端口,ADC轉(zhuǎn)接芯片的數(shù)據(jù)輸出端口,CMOS圖像數(shù)據(jù)輸出接口等場景。
3.LVDS硬件設(shè)計注意事項
1.不同型號的FPGA對于LVDS的速度支持是不同的,選型時需要注意。以下截圖出自xilinx A7 datasheet。
2.應(yīng)該確認(rèn)Bank類型,HR bank只有在供電電壓是2.5V的時候才可以使用內(nèi)部電阻,當(dāng)bank電壓為其他值時,此時只能作為輸入管腳且不能使用內(nèi)部電阻。對于HP bank標(biāo)準(zhǔn)電壓是1.8v,當(dāng)bank電壓是1.8v時可以使用內(nèi)部電阻,當(dāng)bank電壓為其他值時,此時只能作為輸入管腳且不能使用內(nèi)部電阻。可在UG475中查看當(dāng)前Bank是HR還是HP。
3.LVDS_25和LVDS(指1.8V)是可以互相通信的,這是因為他倆的直流特性是一樣的。即設(shè)備之間通信也是,LVDS與LVDS_25可以相互通信,但要確保Vdiff和Vcm是兼容的。以下截圖來自于xilinx官方回復(fù),HR bank使用內(nèi)部的終端電阻的時候,必須配置為LVDS_25,即bank電壓為2.5v;當(dāng)作為輸入管腳,且不使用內(nèi)部電阻,可以配置成其他電壓;LVDS與LVDS_25可以相互通信,但要確保Vdiff和Vcm是兼容的(可在Datasheet中查看該屬性)。第二張圖是為了更好的說明了LVDS使用的問題。
4.最后是7系列不在支持LVDS_33,原因如圖所示。?
4.發(fā)送端LVDS程序設(shè)計
根據(jù)前三節(jié)的描述,搭建LVDS發(fā)送端程序首先要明確以下三個事項,①明確屬性,包括通道個數(shù),LVDS傳輸線個數(shù),串化因子的大小,訓(xùn)練數(shù)據(jù)pattern值,以及SDR或DDR模式,隨路時鐘的大小;②明確當(dāng)前硬件環(huán)境,隨路時鐘應(yīng)該接MRCC或者SRCC管腳,否則vivado編譯會不通過;差分?jǐn)?shù)據(jù)管腳應(yīng)該連接在FPGA上的PN差分對,并要確認(rèn)好管腳所在bank的供電電壓;還應(yīng)該查看FPGA芯片數(shù)據(jù)手冊判斷是否支持需求的傳輸速率。③根據(jù)應(yīng)用場景,例如LVDS發(fā)送端發(fā)送數(shù)據(jù)到LVDS液晶顯示屏,則要遵守液晶顯示屏?xí)r序的相關(guān)要求。在上述事項明確的前提下,LVDS發(fā)送端要解決的問題便是,將來自其他模塊的應(yīng)用數(shù)據(jù)按照既定的傳輸模型并轉(zhuǎn)串后,接入到FPGA內(nèi)部的LVDS發(fā)送器完成數(shù)據(jù)的發(fā)送。為此,xilinx 7系列提供了OBUFDS原語實現(xiàn)單端信號轉(zhuǎn)LVDS差分信號的轉(zhuǎn)換(可理解為該原語指向FPGA內(nèi)部的LVDS發(fā)送器),提供了OSERDES2原語實現(xiàn)邏輯中應(yīng)用并行數(shù)據(jù)的串行化處理。
本次實例擬8位傳化因子,1個通道,2個LVDS,DDR模式,隨路時鐘為200MHz,并行時鐘為50MHz,pattern值為0xe9,LVDS相關(guān)引腳連接某A7芯片Bank16,bank電壓為2.5V。所發(fā)送的應(yīng)用數(shù)據(jù)為測試數(shù)據(jù)為1-255自增,發(fā)送端邏輯框圖如下
?
5.接收端LVDS程序設(shè)計
5.1接收端概述
接收端的傳輸模型各個屬性應(yīng)該與LVDS發(fā)送端各屬性一致,例如,如果用于接收CMOS圖像傳感器的圖像數(shù)據(jù),則接收端程序的串化因子、通道個數(shù)等將要與設(shè)備一致。在硬件設(shè)計上,LVDS時鐘線和LVDS數(shù)據(jù)線應(yīng)該等長設(shè)計,但由于布線制板工藝的影響,難免數(shù)據(jù)線和時鐘線無法同時到達(dá)接收端,在傳輸速度快時,微乎其微的偏差都可能讓數(shù)據(jù)出錯,這就是LVDS接收端要解決的問題,即在數(shù)據(jù)穩(wěn)定窗口的中心采樣,保持?jǐn)?shù)據(jù)的穩(wěn)定,這個動作稱之為位對齊。此外,當(dāng)在數(shù)據(jù)線上重復(fù)發(fā)送ABCDEFGH(假設(shè)一個字母代表一個bit),有可能接收到的是BCDEFGHA產(chǎn)生字偏移,通過ISERDES2的bitslip可以完成數(shù)據(jù)的平移,這個動作稱之為“字對齊”。接收端通過IBUFDS進(jìn)行差分轉(zhuǎn)單端信號便于邏輯處理,將lvds傳輸線上的串行數(shù)據(jù)經(jīng)過IDELAY2進(jìn)行位對齊操作,隨后利用ISERDES2將該串行數(shù)據(jù)并行化即字對齊操作,將發(fā)送端的數(shù)據(jù)恢復(fù)。其難點就在于如何實現(xiàn)字對齊和位對齊操作。Xilinx提供了多個例程適用于不同系列的FPGA,如xapp860和xapp855適于V5,xapp585適用于7系列,還有適用于ultrascale的例程。本例程基于xapp855修改使之適配7系列并滿足既定傳輸模型屬性要求。
5.2邏輯框圖
?????? 以下框圖截取自xapp855,與示例程序并不一致。數(shù)據(jù)差分信號經(jīng)IBUFDS轉(zhuǎn)化為單端信號,進(jìn)入IDELAY2(由于xapp855適用于V5,而當(dāng)前程序適用于7系列,因此原語的名稱有所不同)將數(shù)據(jù)位對齊后進(jìn)入ISEDERS2轉(zhuǎn)換成并行數(shù)據(jù);時鐘差分信號經(jīng)過IBUFDS轉(zhuǎn)化成單端信號,進(jìn)入IDELAY2(此處為0,以時鐘到達(dá)為基準(zhǔn))由BUFR倍頻出并行時鐘,經(jīng)BUFIO產(chǎn)生串行時鐘。此外,使用IDELAY必須要使用IDELAYCTRL,輸入200MHz作為參考時鐘。還有兩個邏輯模塊一個是Bit Align Machine實現(xiàn)位對齊字對齊,產(chǎn)生ISERDES2和IDELAY2所需的信號,完成當(dāng)前LVDS傳輸線的對齊操作。Resource sharing control實現(xiàn)通道切換,和訓(xùn)練完成的指示。
5.3xapp855訓(xùn)練代碼解讀
?????? 通道選擇模塊較為簡單,主要介紹Bit Align Machine模塊是如何完成單通道的數(shù)據(jù)訓(xùn)練操作。將ISERDES2模塊傳入的并行數(shù)據(jù)A打一拍得到B,當(dāng)A不等于B的時候,認(rèn)為此時遇到了亞穩(wěn)態(tài),即建立時間或者保持時間不滿足要求的情況。當(dāng)連續(xù)幾個周期B等于pattern數(shù)據(jù)時,認(rèn)為此時的采樣點可用,字對齊也完成。完成數(shù)據(jù)訓(xùn)練的主要思路是,先使用IDEALY延遲直到找見一個亞穩(wěn)態(tài)的點,未找見就延遲加1,然后繼續(xù)增加延遲并加入字節(jié)對齊的判斷直到找到Pattern數(shù)據(jù),認(rèn)為此時找到了數(shù)據(jù)窗口的左值,繼續(xù)增加延時值,直到找見下一個亞穩(wěn)態(tài)的采樣點。從第一個pattern數(shù)據(jù)出現(xiàn),增加延時值到下一個亞穩(wěn)態(tài)的出現(xiàn)之間就是數(shù)據(jù)有效窗口,然后通過減去延遲值找到采樣中心點,此后再次判斷字對齊的情況,當(dāng)字對齊結(jié)束后認(rèn)為此LVDS傳輸線數(shù)據(jù)訓(xùn)練完成。由Resource sharing control控制開始訓(xùn)練下一個LVDS傳輸線。?
?
以上截圖出自xapp855的解釋說明,步驟①即是假定數(shù)據(jù)和時鐘到達(dá)時二者的相對位置關(guān)系。步驟②是經(jīng)過延時找到了第一個亞穩(wěn)態(tài)窗口(Transition),圖中斜線部分代表此時數(shù)據(jù)采樣不穩(wěn)定。步驟③是通過延時和bitslip尋找到數(shù)據(jù)有效窗口的左值(Eye)。步驟④是通過延時找到下一個亞穩(wěn)態(tài)窗口,由此在③和④之間便是數(shù)據(jù)有效的窗口。步驟⑤是將采樣點控制到數(shù)據(jù)有效窗口的中心位置。需要注意,IDELAY2總共只有32個階,當(dāng)參考時鐘是200MHz時,每一階延時78ps,即總共可延時32*78=2496ps=2.5ns。因此數(shù)據(jù)傳輸?shù)木€速率不能太低,線速率太低時需要采用別的方法或者調(diào)整該狀態(tài)機(jī),否則會錯誤的找到最佳采樣點,出現(xiàn)不穩(wěn)定的情況,因此使用該程序,其線數(shù)據(jù)傳輸速率建議大于400Mbps。
?????? 下面對該模塊中狀態(tài)機(jī)簡單分析便于理解。?
6. 接收端發(fā)送端聯(lián)調(diào)
將發(fā)送端和接收端寫在一個工程里,驗證LVDS的收發(fā),其結(jié)果如下,可以看到發(fā)送端發(fā)送的數(shù)據(jù)與接收的數(shù)據(jù)一致,data_aglin信號拉高,代表數(shù)據(jù)訓(xùn)練完成。
?
?
7.總結(jié)
本例源碼,參考資料
①本文只是提供了眾多實現(xiàn)lvds收發(fā)方法中的一種,例如,可以使用ODDR原語產(chǎn)生差分信號;IDELAY有四種模式,本文使用VARIABLE模式,還可以嘗試VAR_LOAD模式;xilinx提供了一個名為SelectIO Interface Wizard的ip核其中涵蓋了LVDS收發(fā)使用的全部selectio資源,在領(lǐng)悟本例精神后可以用其練手。
②尋找數(shù)據(jù)中心的方式也是可以靈活多變的。
③xapp855的代碼結(jié)構(gòu)以及代碼風(fēng)格可以提供一種新的思考,包括通道與訓(xùn)練的管理,計數(shù)器的服用,以及狀態(tài)指示訓(xùn)練完成的寫法都值得學(xué)習(xí)和總結(jié)。
④Xapp585提供了基于7系列的原語設(shè)計,便于工程的移植和擴(kuò)展,另外其位對齊和字對齊分開實現(xiàn),是數(shù)據(jù)訓(xùn)練的另外一種思路。
⑤關(guān)于文中提到的原語的使用可返回目錄查看對應(yīng)文章。
⑥7系列的iserdes2原語要求bitslip后三個周期才能下一次bitslip,因此在LVDS收發(fā)程序中加入了這里的控制。
總結(jié)
以上是生活随笔為你收集整理的E3--FPGA实现LVDS收发实例和原理2022-12-03的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql 从句_MySQL selec
- 下一篇: 华为和H3C--VRP基础和基本的操作