儀器儀表商情網(wǎng) 技術(shù)分析 雖然SerDes接口在很多應(yīng)用中很流行,但是對于不少高速系統(tǒng),源同步的LVDS接口也依然存在。FPGA經(jīng)常涉及到LVDS(LowVoltageDifferentialSignaling)信號的接收,比如說FPGA與一些采樣率較高的ADC,或者一些高清顯示屏的接口通常都是LVDS接口。這些信號有著一個共性,就是采用LVDS電平標(biāo)準(zhǔn),采用源同步方式傳輸。由于這些信號速率一般很高,因此如何保證接收的這些信號的正確性,是一個FPGA設(shè)計者經(jīng)常會遇到的難題。本文旨在提供一種簡單方便的方法來穩(wěn)定的接收該種方式的信號。 1.1什么是LVDS信號? LVDS的全稱是LowVoltageDifferentialSignaling,即低壓差分信號。這是一種高速的,低擺幅,差分,低功耗的傳輸方式。最早該信號標(biāo)準(zhǔn)由美國國家半導(dǎo)體公司提出,后來被廣泛用于各種高速接口,如LVDS液晶顯示屏,高速ADC的數(shù)據(jù)接口,以及一些視頻傳輸應(yīng)用。 LVDS電平標(biāo)準(zhǔn)的電壓擺幅是350mV,由于其擺幅很低,因此上升時間很短,因此比起LVCMOS,LVTTL等電平標(biāo)準(zhǔn)具有更高的傳輸速度。理論上LVDS的傳輸最高速率可以達(dá)到1.9Gb/s的水平。 LVDS有一個特點,就是采用電流傳輸驅(qū)動模式,電流標(biāo)準(zhǔn)值通常為3.5mA。LVDS接收器由于具有很高的輸入阻抗,所以LVDS的接收端需要端接一個100歐的電阻以對驅(qū)動電流進(jìn)行接收。其識別邏輯’1’和邏輯’0’是根據(jù)電流的方向來識別,如圖1所示,LVDS差分信號在輸出端接有串行匹配50歐電阻,以CycloneIVFPGA為例,F(xiàn)PGA的rxin+和rxin-端,并有一個100歐的電阻,該電阻即是LVDS驅(qū)動電流的取樣電阻。當(dāng)電流方向由txout+到txout–時,此時rxin+和rxin-端會產(chǎn)生350mV的壓降,此時被認(rèn)定為邏輯’1’,當(dāng)電流方向由txout-到txout+時,此時rxin+和rxin-端會產(chǎn)生-350mV的壓降,因此被認(rèn)定為邏輯’0’。 圖1 1.2帶LVDS輸出接口的一個高速ADC 在很多高速器件里,比如說高采樣率的ADC,很多都帶有LVDS電平標(biāo)準(zhǔn)源同步的輸出接口,所謂的源同步,就是數(shù)據(jù)和同步時鐘并行傳輸?shù)囊馑肌_@里以TI(德州儀器)公司的ADS62P49為例,講述FPGA接收LVDS信號的例子。 ADS62P49是一款具有較高采樣頻率的雙通道ADC(即一個芯片有2個ADC),每個ADC采樣頻率達(dá)到250MHZ,量化比特位寬為14比特,因此每個子ADC數(shù)據(jù)速率達(dá)到250Mx14=3.5Gbps。每個子ADC采用了7對LVDS差分信號來傳輸數(shù)據(jù)以及一對LVDS同步時鐘。其輸出接口采用雙沿模式(DDR,DoubleDataRate),即在每個同步時鐘周期內(nèi),數(shù)據(jù)速率為同步時鐘的兩倍,即數(shù)據(jù)在上升沿和下降沿都會產(chǎn)生變化。第一對LVDS傳輸量化14比特中的第0位和第1位,第二對LVDS傳輸量化14比特中的第2位和第3位,第三對LVDS傳輸量化14比特中的第4位和第5位,第四對LVDS傳輸量化14比特中的第6位和第7位,第五對LVDS傳輸量化14比特中的第8位和第9位,第六對LVDS傳輸量化12比特中的第10位和第11位,第七對LVDS傳輸量化14比特中的第12位和第13位,因此只需要七對信號即可傳輸14比特的量化值。每對LVDS接口的速率為250*2=500Mbps。該接口框圖如圖2所示: 圖2 如圖2所示,CLKOUTP/M即為LVDS信號中的同步時鐘信號,DA0_P/M到D12_P/M即為數(shù)據(jù)差分信號,DA0_P/M表示為同一對差分信號,該信號傳輸?shù)?和第1比特,以此類推。 該ADC的LVDS接口輸出時序如圖3所示: 圖3 如圖3所示,可以清楚的看到,數(shù)據(jù)信號的偶比特和奇比特的有效時刻基本上以輸出時鐘CLKOUTM/P的上升沿和下降沿的中心。 那么問題來了,在FPGA里是否可以直接使用該同步時鐘直接寄存器鎖存信號不就可以了嗎?事實上通常的做法都是這樣的(該通常的做法跟FPGA的源同步LVDSI/O性能有關(guān)),但是必須加接口約束。為什么呢?因為ADC的LVDS輸出的時鐘和數(shù)據(jù)的相位關(guān)系是會隨著工作環(huán)境,芯片的批次而變化的,因此不同工作環(huán)境,不同批次的芯片時鐘和數(shù)據(jù)的相位關(guān)系可能會有變化,如果不加接口約束直接用源同步時鐘鎖存數(shù)據(jù)有可能會造成建立時間或保持時間不滿足,進(jìn)而造成接收數(shù)據(jù)錯誤。因此,必須加入接口時序約束以保證輸入接口的寄存器滿足建立時間和保持時間。如下圖所示: 圖4 基于該ADC的源同步傳輸特性,對于該種ADC的LVDS信號的接收通常采用源同步接收再加時序約束來保證接收的過程能夠滿足接收數(shù)據(jù)的建立時間和保持時間,進(jìn)而保證接收信號的正確性。依照tsu和th的值進(jìn)行inputdelay約束,如果時序滿足,那么可以肯定FPGA的接收將是正確無誤的。Tsu和th的值說明如圖5所示: 圖5 圖6 圖6為ADS62P49數(shù)據(jù)手冊提到的tsu和th的變化范圍,這兩個值必須用在FPGA的接口時序約束中,以保證輸入的穩(wěn)定性。 1.3采用inputdelay約束保證源同步接收的正確性 由于ADC基本上是帶有LVDS電平的隨路時鐘,因此采用該時鐘作為數(shù)據(jù)接收寄存器的工作時鐘來接收ADC的輸出LVDS數(shù)據(jù)信號。 源同步方式主要是使用ADC輸出隨路時鐘(數(shù)據(jù)同步時鐘)來采樣ADC輸出數(shù)據(jù),其框圖如圖7所示: 圖7 如上圖所示,數(shù)據(jù)由ADC輸出,差分時鐘和差分?jǐn)?shù)據(jù)經(jīng)過FPGA的I/Obuffer后變成單端信號,由于數(shù)據(jù)跟隨路時鐘clk的關(guān)系為DDR方式,因此讓數(shù)據(jù)同時進(jìn)入FPGA的兩個寄存器DIL和DIH,DIL工作于時鐘上升沿,DIH工作于時鐘下降沿,最終出來兩個工作于clk速率下的并行信號(可使用FPGAI/O資源里的DDIO)。該種方法簡單有效,F(xiàn)PGAI/O寄存器直接采用clk上升沿和下降沿鎖存ADC的輸出數(shù)據(jù)。 我們知道,電子元器件在不同的溫度和不同的電壓下,其表現(xiàn)出來的時序特性不一樣。因此,為了保證在各種不同的條件下都能正確的接收該信號,我們必須對這種接收方式進(jìn)行輸入時序約束,然后查看最終的布局布線結(jié)果是否在各種工作條件下時序都能得到滿足。所以,在做這項工作前,設(shè)計者需要知道在電路板上ADC輸出隨路時鐘到達(dá)FPGA管腳以及數(shù)據(jù)到達(dá)FPGA管腳之間的時間差,即skew值。另外還需要知道在ADC的輸出管腳處,其輸出數(shù)據(jù)和輸出時鐘之間的關(guān)系的極限值,在ADC的數(shù)據(jù)手冊里,一般用Tsetup和Thold來表示這個關(guān)系,根據(jù)這個關(guān)系設(shè)計者可以輕易的估算出該數(shù)據(jù)的有效采樣窗口。ADS62P49的Tsetup和Thold與采樣有效窗口的關(guān)系可根據(jù)圖5計算出來,為Tsumin+Thmin=1.1ns。如圖8所示: 圖8 如圖9所示,根據(jù)ADS62P49的數(shù)據(jù)手冊,隨路時鐘clk與數(shù)據(jù)為中心對齊方式,即clk的邊沿(上升沿或者下降沿)在數(shù)據(jù)有效期的中間。數(shù)據(jù)從有效到到達(dá)clk上升沿的邊沿被定義為Tsetup,數(shù)據(jù)從上升沿到本次輸出數(shù)據(jù)無效的時間被定義為Thold。因此整個數(shù)據(jù)的有效時間即為Tsetup+Thold,在這個時間內(nèi)時鐘采樣到的數(shù)據(jù)都是正確的,這也就是所謂的采樣窗口。在設(shè)計中,我們一般會努力的讓寄存器的時鐘采樣點在中間,這樣能夠保證setup和hold的裕量都一樣,而不是一個大一個小的方式。時鐘采樣位置的變化對裕量的影響如圖9所示: 圖9 如圖9所示,在該種方式下,采樣時鐘點往左移,setup余量變小,hold余量變大。而圖10中則是采樣時鐘點往右移,此時的setup余量變大,hold余量將會變小。其實在不同的工作條件下,采樣時鐘很難保證一直在數(shù)據(jù)有效的中心點,甚至在某些工作條件下,采樣時鐘會跑出數(shù)據(jù)有效窗口,如此即會導(dǎo)致接收數(shù)據(jù)錯誤。這也是為什么要做輸入時序約束保證時序正確性的原因,其目的就是保證數(shù)據(jù)時鐘能一直在數(shù)據(jù)有效窗口內(nèi)。 圖10 以ADS62P49為例,說明如何對LVDS數(shù)據(jù)信號的接收做時序約束。如前所述,ADS62P49輸出為雙沿模式,其時鐘為250MHZ,在其輸出管腳處,其時鐘管腳和數(shù)據(jù)管腳的最小Tsetup和最小Thold分別為0.55ns和0.55ns,因此可知其數(shù)據(jù)采樣窗口為0.55+0.55=1.1ns。對于此類高速源同步接口,一般要求在PCB布線上時鐘信號和數(shù)據(jù)信號做等長處理,因此依托于這個條件,我們可算出最大的maxdelay為: 1/((250M)*2)-Tsetup=2-0.55=1.45ns mindelay為Thold=0.55ns 之所以maxdelay計算法則如此,可以認(rèn)為ADC上升沿打出數(shù)據(jù),F(xiàn)PGA采用下降沿接收,或者是下降沿打出數(shù)據(jù),F(xiàn)PGA在上升沿接收,因為做inputdelay的約束即為告訴時序分析工具其數(shù)據(jù)到達(dá)I/O管腳時和其源同步時鐘的最大和最小延時關(guān)系,按照數(shù)據(jù)手冊上的Tsetup的圖示,即數(shù)據(jù)和時鐘沿的最小setup關(guān)系可以認(rèn)為是ADC上升沿/下降沿輸出的最大延時,同理最小hold關(guān)系可以認(rèn)為是ADS4122上升沿/下降沿輸出的最小延時。 時序分析的關(guān)系如圖11所示: 圖11 如圖11所示,vir_clk為虛擬時鐘,作為對外部輸入數(shù)據(jù)同步時鐘的聲明,可以認(rèn)為該時 鐘就是ADC的同步輸出時鐘。clk為FPGA鎖存輸入數(shù)據(jù)的時鐘,來自于外部時鐘(與虛擬時鐘等效)。其setup關(guān)系為vir_clk上升沿打出數(shù)據(jù),clk下降沿接收或者是vir_clk下降沿打出數(shù)據(jù),clk上升沿接收。hold關(guān)系為vir_clk上升沿與clk上升沿或者是vir_clk下降沿與clk下降沿。 該源同步為雙沿模式,因此還應(yīng)該針對此情況對set_input_delay做時鐘雙沿的說明,約束 語句如下(設(shè)6路LVDS數(shù)據(jù)名為in,源同步時鐘為clk): create_clock-name{clk}-period5.000-waveform{0.0002.500}[get_ports{clk}] create_clock-name{vir_clk}-period5.000-waveform{0.0002.500} 如上兩條語句為建立一個外部的輸入數(shù)據(jù)同步的虛擬時鐘以及跟該虛擬時鐘一致的FPGA的輸入數(shù)據(jù)同步時鐘。 set_input_delay-max1.450-clock[get_clocks{vir_clk}][get_ports{in[*]}] set_input_delay-min0.55-clock[get_clocks{vir_clk}][get_ports{in[*]}] set_input_delay-clock_fall-max1.45-clock[get_clocks{vir_clk}][get_ports{in[*]}]-add_delay set_input_delay-clock_fall-min0.55-clock[get_clocks{vir_clk}][get_ports{in[*]}]-add_delay 由于該源同步方式為DDR模式,因此上述第一條和第二條語句聲明的是上升沿打出,下降沿鎖存的inputmaxdelay和inputmindelay約束,第三條語句和第四條語句聲明的是下降沿打出,上升沿鎖存的inputmaxdelay和inputmindelay約束。由于相對于同一個虛擬時鐘有兩個一樣的inputmaxdelay和inputmindelay約束,因此需在后面兩條語句加上-add_delay表示此兩條語句不被上面兩條語句所覆蓋。 另外,由于時序分析工具會覆蓋整個時鐘周期,但是實際上本設(shè)計的時鐘關(guān)系為半個周期,因此還需要告訴時序分析工具不需要對整個時鐘周期進(jìn)行分析,因此加入了falsepath語句: set_false_path-setup-rise_from[get_clocks{vir_clk}]-rise_to[get_clocks{clk}] set_false_path-setup-fall_from[get_clocks{vir_clk}]-fall_to[get_clocks{clk}] set_false_path-hold-rise_from[get_clocks{vir_clk}]-fall_to[get_clocks{clk}] set_false_path-hold-fall_from[get_clocks{vir_clk}]-rise_to[get_clocks{clk}] 此四條語句分別表示,在做setup分析的時候,不需要對兩個相隔一個周期的上升沿進(jìn)行分析和下降沿進(jìn)行時序分析,在做hold分析的時候,不需要對兩個相隔半個周期的上升沿和下降沿進(jìn)行時序分析。 以CycloneIVFPGA為樣本,時序分析得到Slack為正,可以說明采用該方式接受LVDS信號是可以保證FPGA的采樣是滿足建立時間和保持時間,即為在外部硬件設(shè)計合理的情況下,F(xiàn)PGA可以保證在芯片的工作環(huán)境內(nèi)能夠正確穩(wěn)定的接收該速率的LVDS信號。 結(jié)束語 高速器件輸出LVDS信號給FPGA或者FPGA輸出LVDS信號給外部高速器件是一個在很多場合都會應(yīng)用到的場景,當(dāng)LVDS信號速率在FPGA采用源同步接收的LVDSI/O能力支持的情況下,F(xiàn)PGA可以使用源同步+輸入約束的方式進(jìn)行接收,這樣可以簡化設(shè)計,同時節(jié)省邏輯資源,讓設(shè)計更加簡單易懂。 發(fā)布時間: 來源:儀器儀表商情網(wǎng) 作者:匿名
|
|
來自: 海鯀 > 《電子技術(shù)》