日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Vivado中使用IP核SelectIO配置LVDS学习笔记

發布時間:2024/1/18 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Vivado中使用IP核SelectIO配置LVDS学习笔记 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

????????使用轉串器OSERDESE與解串器ISERDESE實現自加數回環(數據不匹配)功能仿真。

????????仿真圖如下:

????????仿真代碼如下:

`timescale 1ns / 1psmodule lvds_loop_tb();reg clk_50M; reg rst_n; reg bitslip; wire [7:0]data_o;lvds_loop lvds_loop_0(clk_50M,rst_n,bitslip,data_o);initial clk_50M=1; always #10 clk_50M=~clk_50M;initial begin rst_n=0; bitslip=0; #1000; rst_n=1; bitslip=1; #20; bitslip=0; #20000; $stop; endendmodule

????????Ps.1:起初將PLL、OSERDESE、ISERDESE的復位都接系統復位,但是由于PLL初始化需要一段時間導致data異常,將PLL復位取消后data正常(且系統復位要在PLL初始化完成之后)。

?????????Ps.2:bitslip不使能時,ISERDESE不能解串。

?????????頂層模塊代碼如下:

module lvds_loop(clk_50M,rst_n,bitslip,data_o);input clk_50M; input rst_n; input bitslip; output [7:0]data_o;wire clk_6M; reg [7:0]data_i; always@(posedge clk_6M or negedge rst_n) if(~rst_n)data_i<='d0; elsedata_i<=data_i+'d1;pll pll_0(// Clock out ports.clk_6M(clk_6M), // output clk_6M// Status and control signals.resetn(), // input resetn// Clock in ports.clk_in1(clk_50M)); // input clk_in1wire data_p; wire data_n; lvds_oserdese lvds_oserdese_0(.data_out_from_device(data_i), // input [7:0] data_out_from_device.data_out_to_pins_p(data_p), // output [0:0] data_out_to_pins_p.data_out_to_pins_n(data_n), // output [0:0] data_out_to_pins_n.clk_in(clk_50M), // input clk_in .clk_div_in(clk_6M), // input clk_div_in .io_reset(~rst_n) // input io_reset ); lvds_iserdese lvds_iserdese_0(.data_in_from_pins_p(data_p), // input [0:0] data_in_from_pins_p.data_in_from_pins_n(data_n), // input [0:0] data_in_from_pins_n.data_in_to_device(data_o), // output [7:0] data_in_to_device.bitslip(bitslip), // input bitslip .clk_in(clk_50M), // input clk_in .clk_div_in(clk_6M), // input clk_div_in .io_reset(~rst_n) // input io_reset ); endmodule

?????????收獲一:搭建LVDS數據環回工程功能仿真通過。

????????Ps.3:差分信號兩根線但I/O?Planning里只能分配p端引腳,因為p/n是一一對應的關系,分配的p端引腳其n端必須與原理圖對應。

???????

????????Ps.4:設計實現時報錯([DRC REQP-1712] Input clock driver: Unsupported PLLE2_ADV connectivity. The signal u0_pll/inst/clk_in1 on the u0_pll/inst/plle2_adv_inst/CLKIN1 pin of u0_pll/inst/plle2_adv_inst with COMPENSATION mode ZHOLD must be driven by a clock capable IO.) ,將鎖相環IP中輸入時鐘源設置為Global?buffer即可解決。

????????

????????Ps.5:設計實現時報錯([DRC BIVC-1] Bank IO standard Vcc: Conflicting Vcc voltages in bank 16. For example, the following two ports in this bank have conflicting VCCOs: rst_n (LVCMOS33, requiring VCCO=3.300) and tx_data_p (LVDS_25, requiring VCCO=2.500)
),FPGA為了同時能和多種不同的電平標準接口芯片通信,Vcco通常以BANK為界,互相之間相互獨立,也就是說在一顆FPGA芯片上同時存在幾種不同的I/O電壓。當然同一個BANK只能存在1種I/O電壓。

?? ? ? ? Ps.6:板級驗證如下圖所示:

? ? ? ? ?如上圖所示,lvds_rx模塊不能正確接收lvds_tx模塊在空閑時持續發送的數據0xa6,使得位對齊模塊位對齊移位信號rx_data_bit_align持續拉高且位對齊完成信號rx_bit_align_done不能拉高,初步推斷rx_data為誤碼的原因是lvds_tx模塊發送的差分信號有誤,使用示波器抓取tx_data_p(藍)、tx_data_n(黃)的波形如下:

? ? ? ? 如上圖所示,差分信號異常。

? ? ? ? 差分信號在FPGA內部環回時功能仿真圖如下:

? ? ? ? 如上圖所示,差分信號無異常?。

? ? ? ??Ps.7:Vivado中不能debug差分信號?

????????????????([Chipscope 16-3] Cannot debug net 'tx_data_n'; it is not accessible from the fabric routing.無法調試網絡'tx_data_n';無法從結構路由訪問它。)

? ? ? ??Ps.8:Vivado一直處于 initialiazing design:重啟電腦解決。

? ? ? ? Ps.9:管腳配置中off-chip termination和IN TERM \ OUT TERM分別指什么啊?

????????????????Xilinx FPGA可以選擇端接電阻是在FPGA內實現還是外部實現,一般都是采用在FPGA內實現可以省卻PCB上布板的不便,對接口速率較低的來說,有時候不端接也看不出問題來,但是速率一高問題就容易出現了,會影響到FPGA接收數據的準確性,就是信號完整性方面的內容。

????????????????Off-Chip Termination:顯示每個I/O標準的默認端接。比如FP_VTT_50表示遠端并聯50Ω的VTT端接類型;HSTL_1表示遠端并聯40Ω的VTT端口類型。具體的端接類型可以在ug471(7系列)和ug571(UltraScale系列)中查看。

????????????????端接方法:LVDS電平在接收端增加100Ω并聯電阻來實現端接。相比于LVPECL,端接方法更簡單。端接電阻的作用:實現電流向電壓的轉化;實現阻抗匹配。

? ? ? ? Ps.10:什么是阻抗匹配,有什么作用,具體在那些電路?

????????【阻抗匹配】是指信號源或者傳輸線跟負載之間的一種合適的搭配方式。阻抗匹配分為【低頻】和【高頻】兩種情況討論。

????????【低頻】我們先從直流電壓源驅動一個負載入手。由于實際的電壓源,總是有內阻的,我們可以把一個實際電壓源,等效成一個理想的電壓源跟一個電阻r串聯的模型。假設負載電阻為R,電源電動勢為U,內阻為r,那么我們可以計算出流過電阻R的電流為:I=U/(R+r),可以看出,負載電阻R越小,則輸出電流越大。負載R上的電壓為:Uo=IR=U*[1+(r/R)],可以看出,負載電阻R越大,則輸出電壓Uo越高。再來計算一下電阻R消耗的功率為:
????????P=I*I*R=[U/(R+r)]*[U/(R+r)]*R=U*U*R/(R*R+2*R*r+r*r)=U*U*R/[(R-r)*(R-r)+4*R*r]=U*U/{[(R-r)*(R-r)/R]+4*r}
????????

????????對于一個給定的信號源,其內阻r是固定的,而負載電阻R則是由我們來選擇的。注意式中[(R-r)*(R-r)/R],當R=r時,[(R-r)*(R-r)/R]可取得最小值0,這時負載電阻R上可獲得最大輸出功率Pmax=U*U/(4*r)。即,當負載電阻跟信號源內阻相等時,負載可獲得最大輸出功率,這就是我們常說的阻抗匹配之一。對于純電阻電路,此結論同樣適用于低頻電路及高頻電路。當交流電路中含有容性或感性阻抗時,結論有所改變,就是需要信號源與負載阻抗的的實部相等,虛部互為相反數,這叫做共厄匹配。在低頻電路中,我們一般不考慮傳輸線的匹配問題,只考慮信號源跟負載之間的情況,因為低頻信號的波長相對于傳輸線來說很長,傳輸線可以看成是“短線”,反射可以不考慮(可以這么理解:因為線短,即使反射回來,跟原信號還是一樣的)。

????????從以上分析我們可以得出結論:
????????如果我們需要輸出電流大,則選擇小的負載R;
????????如果我們需要輸出電壓大,則選擇大的負載R;
????????如果我們需要輸出功率最大,則選擇跟信號源內阻匹配的電阻R。
????????有時阻抗不匹配還有另外一層意思,例如一些儀器輸出端是在特定的負載條件下設計的,如果負載條件改變了,則可能達不到原來的性能,這時我們也會叫做阻抗失配。

????????【高頻、微波】在高頻電路中,我們還必須考慮反射的問題。當信號的頻率很高時,則信號的波長就很短,當波長短得跟傳輸線長度可以比擬時,反射信號疊加在原信號上將會改變原信號的形狀。如果傳輸線的特征阻抗跟負載阻抗不匹配(相等)時,在負載端就會產生反射。為什么阻抗不匹配時會產生反射以及特征阻抗的求解方法,牽涉到二階偏微分方程的求解,有興趣的可參看電磁場與微波方面書籍中的傳輸線理論。

????????傳輸線的【特征阻抗】(也叫做特性阻抗)是由傳輸線的結構以及材料決定的,而與傳輸線的長度,以及信號的幅度、頻率等均無關。例如,常用的閉路電視同軸電纜特性阻抗為75歐,而一些射頻設備上則常用特征阻抗為50歐的同軸電纜。另外還有一種常見的傳輸線是特性阻抗為300歐的扁平平行線,這在農村使用的電視天線架上比較常見,用來做八木天線的饋線。因為電視機的射頻輸入端輸入阻抗為75歐,所以300歐的饋線將與其不能匹配。實際中是如何解決這個問題的呢?不知道大家有沒有留意到,電視機的附件中,有一個300歐到75歐的阻抗轉換器(一個塑料包裝的,一端有一個圓形的插頭的那個東東,大概有兩個大拇指那么大的)?它里面其實就是一個傳輸線變壓器,將300歐的阻抗,變換成75歐的,這樣就可以匹配起來了。

????????這里需要強調一點的是,特性阻抗跟我們通常理解的電阻不是一個概念,它與傳輸線的長度無關,也不能通過使用歐姆表來測量。為了不產生反射,負載阻抗跟傳輸線的特征阻抗應該相等,這就是傳輸線的阻抗匹配。如果阻抗不匹配會有什么不良后果呢?如果不匹配,則會形成反射,能量傳遞不過去,降低效率;會在傳輸線上形成駐波(簡單的理解,就是有些地方信號強,有些地方信號弱),導致傳輸線的有效功率容量降低;功率發射不出去,甚至會損壞發射設備。如果是電路板上的高速信號線與負載阻抗不匹配時,會產生震蕩,輻射干擾等。

????????當阻抗不匹配時,有哪些辦法讓它匹配呢?
????????第一,可以考慮使用變壓器來做阻抗轉換,就像上面所說的電視機中的那個例子那樣。
????????第二,可以考慮使用串聯/并聯電容或電感的辦法,這在調試射頻電路時常使用。
????????第三,可以考慮使用串聯/并聯電阻的辦法。一些驅動器的阻抗比較低,可以串聯一個合適的電阻來跟傳輸線匹配,例如高速信號線,有時會串聯一個幾十歐的電阻。而一些接收器的輸入阻抗則比較高,可以使用并聯電阻的方法,來跟傳輸線匹配,例如,485總線接收器,常在數據線終端并聯120歐的匹配電阻。

? ? ? ? Ps.11:為什么lvds的終端電阻為100歐姆?

????????由于lvds接收器的輸入阻抗很大和傳輸線阻抗不匹配,這里的終端電阻時做阻抗匹配消除或減少反射,至于為什么是100歐姆,我想這個是經典值不是絕對值,我們知道lvds傳輸線是差分線。

????????一般控制差分阻抗為90-100歐姆,并且有時這個100歐姆電阻時集成在接收端ic芯片里了,個人這樣理解的。

????????高頻信號傳輸時,信號波長相對傳輸線較短,信號在傳輸線終端會形成反射波,干擾原信號,所以需要在傳輸線末端加終端電阻,使信號到達傳輸線末端后不反射。

????????對于低頻信號則不用。在長線信號傳輸時,一般為了避免信號的反射和回波,也需要在接收端接入終端匹配電阻。

?? ? ? ? Ps.12:400M傳輸速率下將LVDS的串行時鐘由lvds_tx輸出,輸入lvds_rx后,lvds_rx不能接收到tx_data異常,板級驗證分析如下:

? ? ? ? Ps.13:50M傳輸速率下,lvds_rx可以正常接收lvds_tx發出的tx_data差分信號,推測400M下傳輸異常的原因為支持該回環實驗所用的杜邦線不能支持400M傳輸,百度這么說:

????????板級驗證分析如下:

????????Ps.14:為什么無論rx_data_p接到F18還是F19都不影響數據的正常傳輸?

? ? ? ? Ps.15:將轉化因子由8改為4,通道數由1改為2,結果只有板子重新上電時才能正常傳輸,無論復位還是重新下載比特流均不能正常傳輸,正常傳輸如下圖一,異常傳輸如下圖二。

????????Ps.16:將PLL輸出一端設為800M時顯示:WARNING : clk _out1 output frequencies are out of range for the corresponding buffers. Timing violations may be present.

? ? ? ? 譯為:警告:clk _out1輸出頻率超出相應緩沖區的范圍。可能存在時間違例的情況。

? ? ? ? 但在之后板極驗證沒能發現此處警告產生的影響。

? ? ? ? Ps.17:將串并轉換器的輸入輸出時鐘調整為100M,800M后板極驗證在邏輯分析儀由于用50M的抓取時鐘所以只顯示奇數數,一個50M時鐘傳輸兩個8位數速率達到800Mbps。

? ? ? ? Ps.18:Vivado中OSERDESE的差分時鐘從外部輸入所以限制了單通道的傳輸速率最高為PLL能生成的最大速率800Mbps,所以要達到1.6Gbps則至少需要兩通道?而Quartus中OSERDESE的差分時鐘是IP內部產生的,其速率=內部時鐘*串化因子,只需要200M內部時鐘即可?

? ? ? ? ?Ps.19:我總結出的關于Vivado中使用SelectIO配置LVDS接口頻率關系如下:

? ? ? ? LVDS傳輸速率=單通道傳輸速率(clk_in)*通道數;

????????單通道傳輸速率(clk_in)=clk_div_in*串化因子;

? ? ? ? 并行數據位數=串化因子*通道數;

? ? ? ? ex:800MbpsLVDS傳輸[7:0]數據時,如果單通道傳輸則串化因子為8,clk_in=800M,clk_div_in=100M;如果四通道傳輸則串化因子為2,clk_in=200M,clk_div_in=100M。

? ? ? ? Quartus中使用ALTLVDS配置LVDS時接口頻率關系如下:

? ? ? ? LVDS數據速率=LVDS時鐘頻率*串化因子;

? ? ? ? ex:LVDS時鐘頻率為50M,串化因子為8時,LVDS數據速率為400Mbps。

? ? ? ? Ps.20:通過用示波器抓取數據,時鐘差分線信號對比不帶端接電阻的信號可以得出XILINX的XC7A35TFGG484-2芯片差分線端接電阻在TX輸出端,與Vivado中引腳分配時顯示的Off-Chip Termination一致。

?

總結

以上是生活随笔為你收集整理的Vivado中使用IP核SelectIO配置LVDS学习笔记的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。