朱 鵬,夏際金(中國電子科技集團第三十八研究所,合肥 230000)
基于FPGA和BWDSP100 Link口的源同步時序約束
朱 鵬,夏際金
(中國電子科技集團第三十八研究所,合肥 230000)
FPGA與BWDSP100高速鏈路口數(shù)據(jù)傳輸,在300MB/s的速率下,FPGA則需要進行SDC時序約束,來確保時序準確無誤, FPGA與BWDSP100的Link口屬于源同步接口,本文利用TimeQuest時序分析工具對FPGA的LINK口邏輯進行約束,工程應(yīng)用中6路LINK口能穩(wěn)定工作在300MB/s的傳輸速率下。
Link口;時序約束;BWDSP100;FPGA
BWDSP100處理器是一款32位高性能數(shù)字信號處理器,是38所自主設(shè)計和研發(fā),面向雷達信號處理、精確制導(dǎo)武器、電子對抗、通信等領(lǐng)域。在于FPGA實現(xiàn)點對點通信時,采用LINK口實現(xiàn)高速數(shù)傳。LINK口是一種雙速率,源同步接口。在FPGA高速傳輸?shù)腖INK口邏輯設(shè)計過程中, SDC約束環(huán)節(jié)必不可少[1]。FPGA使用的是Altera公司器件,該公司的靜態(tài)時序分析工具Time Quest功能強大,支持業(yè)界標準的SDC約束,能夠提供復(fù)雜的時序約束和詳盡的分析報告。本文所做的約束是在該工具下完成的。
FPGA設(shè)計平臺中的靜態(tài)時序分析工具(STA)可以獲得映射或布局布線后的時序分析報告,通過報告可以明確系統(tǒng)運行的頻率。當(dāng)系統(tǒng)設(shè)計簡單且頻率較低時,可以不加任何時序約束。當(dāng)設(shè)計不能滿足運行頻率的要求時,根據(jù)STA的結(jié)果更改設(shè)計,添加必要的時序約束條件或者選用更高速度的器件,從而提高運行的最高頻率。通過必要的時序約束可以控制邏輯的綜合、映射、布局和布線,以減少邏輯和布線延時,實現(xiàn)工作頻率的提高。時序約束SDC文件是標準的約束文件,添加約束主要有時鐘約束、I/O約束、偏移約束、時序例外約束、多周期約束等[2]。
BWDSP100有8個鏈路口,分為4個發(fā)送和4個接收鏈路口,每個鏈路口由8對LVDS(8bits)數(shù)據(jù)線和3對LVDS控制線構(gòu)成。鏈路口在傳輸數(shù)據(jù)時,DMA啟動信號發(fā)出,當(dāng)正確配置LINK口接收端DMA控制器時,LxACKOUT拉低,通過LxIRQOUT發(fā)送“110011”的DMA請求信號,接收端收到來自LxDATOUT[0]32bit控制字,隨后LxACKOUT拉高,接收數(shù)據(jù)。當(dāng)緩存填滿,乒緩存切到乓緩存時,LxIRQOUT信號拉低,兵緩存數(shù)據(jù)進行并串轉(zhuǎn)換,并發(fā)送數(shù)據(jù)。所有的并串/串并轉(zhuǎn)換、發(fā)送與接收工作都嚴格按照LxIRQOUT/ LxIRQIN信號的下降沿同步。在一次接收完成時,LxACKOUT為高則繼續(xù)接收數(shù)據(jù),為低則暫停接收。
(1)發(fā)送端邏輯功能及時序約束。在進行約束時,首先對基礎(chǔ)時鐘進行約束,進入FPGA內(nèi)部的是150M的DSPCLK隨路時鐘,LINK口數(shù)據(jù)率300MΗz,時鐘周期是6.666ns。約束如下:create_clcok period 6.666–name{DSPCLK}[get_ports {DSPCLK}].DSPCLK經(jīng)PLL產(chǎn)生150M的L0CLKOUT和TXCLK時鐘,分別作為隨路時鐘和發(fā)送端模塊主時鐘。由于發(fā)送數(shù)據(jù)是中心對齊,所以L0CLKOUT頻移90度。其約束為:create_generated_clock –name TXCLK -source[get_pins pll|inclk[0]] [get_pins pll|clk[0]
create_generated_clock -name shifted -phase 90 –source [get_pins pll|inclk[0]] [get_pinspll|clk[1]]
create_generated_clock –name L0CLKOUT-source [get_pins pll|clk[1]] [get_ports L0CLKOUT]
當(dāng)然也可以使用derive_pll_clocks自動識別并約束時鐘。對時鐘抖動不確定進行約束:set_clock_uncertainty -from {DSP1L0CLKIN} -setup 1.2。也可以使用deriver_clock_uncertainty對時鐘不確定進行約束。但是set_clock_uncertainty優(yōu)先級高,并且同時使用時鐘不確定值將疊加。之后對IO延遲進行約束,有兩種方式,一種是以FPGA為中心(FPGA Centric),一種是以系統(tǒng)為中心(System Centric)。當(dāng)FPGA為中心進行約束時需要知道FPGA在數(shù)據(jù)輸入或輸出的Skew,而以系統(tǒng)為中心時則需要知道器件的Tsu、Th和板級延遲等信息。本文以FPGA為中心進行討論約束,在對IO延遲約束前,Altera時序分析工具TimeQuest對FPGA的Tco進行分析,在Slow mode下和Fast mode 下Tco分別為1.507和0.938ns。所以取skew取兩值平均值為1.2ns。所以對數(shù)據(jù)端口約束為:set_output_delay -max[expr 3.3 - 1.2] -clock [get_ clocks L0CLKOUT] [get_ports L0CLKOUT*]
set_output_delay -min[expr -3.3 + 1.2] -clock [get_clocks L0CLKOUT] [get_ports L0CLKOUT*]-add delay
其中,對同一個端口進行約束時,要添加-add_delay,約束才生效。對下降沿同時進行相同約束,需要添加-clock_fall進行約束。
set_output_delay -max [expr 3.3-1.2] -clock [get_clocks L0CLKOUT] -clock_fall [get_ports.L0DATOUT*] -add_delay
set_output_delay -min [expr-3.3-1.2] -clock [get_clocks L0CLKOUT] -clock_fall [get_ports L0CLKOUT*] -add delay
輸入數(shù)據(jù)是雙沿觸發(fā),在進行建立時間和保持時間分析時也是對雙沿進行分析,但是雙沿觸發(fā)的數(shù)據(jù)使用的不同寄存器,相互之間不需要進行建立和保持時間的分析,所以對時鐘的上升沿和下降沿做例外約束。告訴工具放寬該路徑的約束。
set_false_path -setup -rise_from [get_clocks data_clock] -fall_to [get_ clocks output_clock]
set_false_path -setup -fall_from [get_clocks data_clock] -rise_to [get_ clocks output_clock]
set_false_path -hold -rise_from [get_clocks data_clock] -fall_to [get_ clocks output_clock]
set_false_path -hold -fall_from [get_clocks data_clock] -rise_to[get_ clocks output_clock]
(2)接收端邏輯功能及時序約束。接收端的時鐘約束,可以采用輸入時鐘作為參考,也可以創(chuàng)建虛擬時鐘進行約束,前者約束方法直觀,但是需要考慮板級延遲信息。后者虛擬時鐘是跟設(shè)計沒有直接關(guān)系的一個時鐘,可以準確的給出數(shù)據(jù)信號和時鐘的相對關(guān)系。Altera公司也推薦對源同步約束采用虛擬時鐘。本文創(chuàng)建一個頻率為150M的虛擬時鐘create_clock -name virt_clk -period 6.666。創(chuàng)建150M的輸入時鐘,時鐘相位與虛擬時鐘相比延遲90度。
create_clock -name L0CLKIN -period 6.666 -waveform { 1.666 5.000 } [get_ports DSP1L0CLKIN ]
對輸入數(shù)據(jù)的輸入延遲做約束,以虛擬時鐘的上升沿作為參考沿,因為虛擬時鐘與數(shù)據(jù)沿同相位,所以約束如下:set_input_delay -clock [get_clocks virt_clk] -max 0.05 [get_ports data_in*] -add_delay
set_input_delay -clock [get_clocks virt_clk] -min -0.05 [get_ports data_ in*] -add_delay
其中0.05ns是設(shè)計中的skew。由于LINK口是雙沿傳輸,所以對虛
擬時鐘的下降沿做參考時鐘,對輸入數(shù)據(jù)進行約束。添加-clock_fall指令。
set_input_delay -clock [get_clocks virt_clk] -max 0.05[get_ports data_ in*] -clock_fall -add_delay
set_input_delay -clock [get_clocks virt_clk] -min -0.05[get_ports data_ in*] -clock_fall -add_delay
對于高速口數(shù)據(jù)傳輸,時序分析是個反復(fù)修改和迭代過程,最終才能達到要求,圖1是Timequest對約束后LINK口端輸入延遲的分析,可以看到關(guān)鍵路徑的余量為0.778ns,時序報告滿足要求。實際工程中,F(xiàn)PGA使用的是altera公司EP4SE530F43I3,與兩片BWDSP100 的LINK口連接,共有6路300MB/s的LINK口收發(fā),為了驗證時序約束的的效果和正確性,兩片BWDSP100分別向FPGA發(fā)送相同數(shù)據(jù),數(shù)據(jù)為AA55AA55,AA550000,AA550001……,LINK1是按照本文約束的方法進行約束,而第二個LINK口邏輯則是簡單的進行了時鐘的約束,而未添加相關(guān)的其它約束,采用SignalTap抓取兩路數(shù)據(jù),結(jié)果如圖2所示,可以看到LINK1口收到正確數(shù)據(jù),而LINK2口則會出現(xiàn)錯誤數(shù)據(jù),無法正常接收數(shù)據(jù)。
本文詳細介紹了BWDSP100的LINK口的約束方法,以FPGA為中心進行約束,約束包括輸入輸出延遲,例外約束等,并在工程中實現(xiàn)6路全雙工、傳輸速度300MB/s的link口傳輸。
圖1 Time Quest對Link接收端的時序報告
圖2 SignalTap抓取的結(jié)果對比
[1]BWDSP100高速鏈路口模塊的設(shè)計[J].中國集成電路,2012,03 (154):60-64.
[2]Altera Corparation. AN433:constraining and analyzing sourcesynchronous interface. [EB/OL].www.altera. com/literature/an/an433.pdf,2007.
[3]BWDSP100 軟件用戶手冊[S].中電38所,2011. [4]BWDSP100 硬件用戶手冊[S].中電38 所,2011.
朱鵬(1987-),男,河南商丘人,碩士,助理工程師,研究方向:為FPGA軟件設(shè)計。
10.16640/j.cnki.37-1222/t.2015.21.215