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