摘 要 在DSP+FPGA實現的級聯H橋型多電平逆變電路中,首要任務是實現DSP與FPGA的通信。本文設計了DSP+FPGA系統的硬件電路連接方式及通信軟件,由DSP作為上位機,FPGA作為下位機,使用外部接口XINTF將DSP與FPGA二者相連。設計了DSP側的主程序與中斷服務程序,在FPGA內構造FIFO儲存數據,編寫FIFO的讀寫接口邏輯單元代碼。最后用內嵌邏輯分析儀采集了XINTF各信號線及FIFO各引腳的數據,驗證了該并行通信方式的可行性。
【關鍵詞】DSP FPGA XINTF FIFO 并行通信
1 引言
級聯H橋型多電平逆變電路在高壓大功率變流及交流傳動系統中有十分廣泛的應用。但是在數字控制的實現中,單片DSP芯片提供的PWM路數有限。一個三相七電平級聯H橋型逆變電路就需要36路驅動脈沖,一片DSP上PWM脈沖數顯然不能滿足需要,而多片DSP并行工作又要考慮時鐘同步問題。因此多采用DSP+FPGA系統生成多路驅動脈沖,其中DSP負責采樣計算并定時發送多路脈寬數據到FPGA,FPGA產生多路三角載波并與脈寬數據實時比較生成SPWM波。實現該方法首要步驟是解決DSP與FPGA之間并行通信的問題。選用合適的DSP與FPGA芯片,構建實驗平臺并設計并行通信方式,通過外部接口XINTF進行通信,實現了DSP對FPGA內構造的FIFO中數據的讀寫,并為基于DSP+FPGA的多電平逆變器驅動脈沖生成系統設計提供了依據。
2 總體結構設計
采用TI公司的TMS320F28335型32位浮點數字信號處理器與Altera Cyclone III系列的EP3C5E144C8N型現場可編程門陣列,構建通信系統。因為DSP與FPGA使用不同的時鐘信號,選擇在FPGA內構造FIFO進行數據緩存,編寫FIFO讀寫程序,通過DSP的外部接口XINTF實現DSP與FPGA的并行通信,這一系統的硬件連接示意圖如圖1所示,各信號線的方向在圖中列出。DSP將區域0的片選信號線XZCS0、寫操作選通線XWE0、讀操作選通線XRD、19位地址總線XA0~XA18、16位雙向數據總線XD0~XD15等信號線與FPGA的通用I/O口建立起連接。同時將FPGA的一個I/O引腳定義為中斷信號線連接至DSP的通用輸入/輸出引腳GPIO0,作為XINT2的中斷源,觸發DSP中斷。
使用CPU計時器0每秒產生定時中斷,DSP響應該中斷,向FPGA中的FIFO中發送10個整型數,用來代表調制波脈寬等數據。FIFO寫滿10個數據后產生外部中斷信號XINT2給DSP,DSP響應這個外部中斷,將之前寫入的10個數據讀出并寫到外擴RAM存儲器,讀出外擴RAM存儲器內的數據,可以驗證DSP寫入數據的正確性,從而實現DSP與FPGA兩種芯片的雙向并行通信。
3 DSP與FPGA通信程序設計
掌握TMS320F28335型DSP外部接口XINTF的工作時序及FIFO存儲器IP核的訪問方式是實現DSP與FPGA通信的基礎。DSP的外部接口XINTF分為三個區域,分別是ZONE0、ZONE6、ZONE7。訪問這三個區域所指向的外部空間就像訪問DSP外擴RAM或FLASH存儲器一樣方便。三個區域對應三個不同范圍的地址,有各自獨立的片選信號線。對某一區域訪問時,將相應的地址送到地址線,該區域片選信號變為低電平,對該區域的訪問有效。每個XINTF區域的讀寫訪問時序都可以分成三個階段,建立(Lead)、有效(Active)、跟蹤(Trail),每個階段的時間都可以配置,以滿足不同速度外部設備的時序要求。對XZCS0區域進行寫操作時,XZCS0信號首先拉低,寫選通信號XWE0隨之拉低,數據送到數據總線XD上;進行讀操作時,XZCS0信號首先拉低,讀選通信號XRD隨之拉低,將數據從數據總線XD鎖存到DSP中。片選信號XZCS0在讀寫訪問時序的三個階段中均為低電平,但讀選通信號XRD與寫選通信號XWE0僅在有效(Active)階段時為低電平。
3.1 FPGA內FIFO與讀寫接口邏輯設計
為了實現預期的通信功能,需要結合FIFO存儲器IP核的使用方法編寫FPGA側讀寫接口邏輯代碼。FIFO即先進先出存儲器,特別適用于彼此異步的兩系統間進行數據緩存、傳輸等場合。FIFO不同于雙口RAM,它沒有地址線,只能對其順序地寫入和讀出數據,通過對內部的地址指針連續進行加減,依次訪問連續的數據。從而實現對FIFO的讀寫操作。使用Quartus II 13.1中的MegaWizard Plug-in Manager插件管理器,可以方便地例化FIFO存儲器IP核并配置其數據位寬、深度、空標志、滿標志、讀時鐘、寫時鐘信號等參數。選用雙時鐘FIFO(DCFIFO)作為數據存儲器,FIFO的位數設置為16bits×256words,表示可以儲存256個數據,每個數據長度為一字節。rdclk、wrclk分別為讀寫時鐘信號,均是上升沿觸發,data信號作為FIFO的數據輸入端口,q作為FIFO的數據輸出端口,rdreq、wrreq分別為讀寫操作請求確認信號。wrusedw、rdusedw顯示在FIFO內存儲的數據個數,初始狀態下為0。rdempty為FIFO空標記信號。data、wrreq、wrusedw等信號與wrclk同步;q、rdreq、rdusedw等信號與rdclk同步。
DSP讀寫數據接口邏輯代碼可以在Quartus II 13.1開發環境下使用Verilog HDL硬件描述語言設計編寫。DSP讀寫數據接口邏輯又可以分為DSP寫FIFO接口邏輯與DSP讀FIFO接口邏輯兩部分如圖2所示。
3.2 DSP程序設計
DSP程序由主程序、定時中斷子程序、外部中斷子程序三部分組成。DSP初始化后循環等待,定時響應CPU定時器0的中斷,該定時中斷子程序向一個固定地址連續寫入10個數據,DSP寫FIFO接口邏輯將這10個數據依次經過data端口存儲到FIFO中,在這個過程中DSP讀FIFO接口邏輯一直接收來自FIFO的rdusedw信號,并在該信號值為10的時刻,令信號dsp_int由1變為0,產生下降沿,表示FIFO已經寫滿10個數據,該信號連接至DSP的通用輸入/輸出端口GPIO0,作為外部中斷XINT2,觸發執行讀中斷子程序。讀中斷子程序主要實現DSP從FIFO中讀出10個數據的功能。每當XINTF的地址總線XA值為區別于定時中斷子程序中的另一個固定地址時,DSP讀FIFO接口邏輯順次從FIFO端口q讀出一個數據,置于XINTF的數據總線XD上,DSP將鎖存其并依次寫入DSP的外擴RAM內。完成了一個周期的操作。DSP的主程序流程如圖3所示。
4 實驗結果
將程序下載到DSP+FPGA開發板上,使用CCS6.0編寫調試DSP程序,使用Quartus II 13.1內置邏輯分析儀Signaltap II Logic Analyzer,采集XINTF接口的時序信號,對理論分析進行驗證,DSP寫、讀FIFO數據的采集結果如圖4、圖5所示。在圖4中,wrreq首次為高電平時,空FIFO開始寫入數據,rdempty信號產生下降沿,DSP依次向FIFO內寫入2Eh~37h共10個連續數據, rdusedw及wrusedw的值由0遞增到10,定時中斷子程序執行結束,dsp_int產生下降沿,觸發DSP的外部中斷子程序。
在圖5中,dsp_int恢復為高電平,rdreq首次為高電平時,開始從FIFO中讀出數據。DSP依次從FIFO中讀出10個連續數據2Eh~37h,與定時中斷子程序中寫入FIFO的數據相同,實現了先進先出功能。在這一過程中rdusedw及wrusedw的值由10遞減為0,最終rdempty信號由低電平變為高電平,代表FIFO中數據已全部讀出。同時,在外部中斷子程序執行過程中,通過CCS6.0的Memory Browser中讀取外擴RAM中的數據如圖6所示,該結果驗證了通信方式的正確性。
5 結論
為了解決DSP與FPGA的通信問題,本文分析了外部接口XINTF的工作原理,針對FIFO存儲器IP核的結構及參數,設計了DSP讀寫FIFO的接口邏輯代碼。編寫了DSP程序,實現了通過FIFO完成DSP與FPGA之間的通信,為基于DSP+FPGA的多路PWM驅動脈沖發生電路的設計提供了參考。
參考文獻
[1]丁凱,鄒云屏,張賢等.級聯多電平逆變器研究[J].電力電子技術,2002,36(02):16-19.
[2]戴珂,徐晨,丁玉峰等.載波輪換調制在級聯H橋型STATCOM中的應用[J].中國電機工程學報,2013,33(12):99-106.
[3]李建林,王立喬,李彩霞等.基于現場可編程門陣列的多路PWM波形發生器[J].中國電機工程學報,2005,25(10):55-59.
[4]周京華,李正熙.多載波水平調制策略的諧波分析及數字化實現[J].電氣傳動,2008,38(12):27-32.
[5]姜楠,馬迎建,馮翔.DSP和FPGA并行通信方法研究[J].電子測量技術,2008,31(10):146-148.
[6]陳林軍,劉鵬,姜智譯.DSP和FPGA的雙核并行通信方法設計與應用[J].單片機與嵌入式系統應用,2016,16(01):4-7.
[7]Texas Instruments.TMS320x2833x,2823x External Interface (XINTF) Reference Guide (Rev.D)[ EB/OL].2010.
[8]劉東華.Altera系列FPGA芯片IP核詳解[M].電子工業出版社,2014.
作者簡介
劉源康(1992-),男,河北省保定市人。碩士研究生。主要研究方向為大容量中頻逆變技術。
作者單位
華東交通大學電氣與自動化工程學院 江西省南昌市 330013