陳慶旭,朱明浩,余華武
(1.南京國電南自自動化有限公司,南京 211153;2.南京依維柯汽車有限公司)
?
一種CPU和FPGA的快速交換數(shù)據(jù)方法
陳慶旭1,朱明浩2,余華武1
(1.南京國電南自自動化有限公司,南京 211153;2.南京依維柯汽車有限公司)
為了提高CPU讀寫FPGA的速度,提出了一種基于Burst方式的CPU和FPGA快速交換數(shù)據(jù)的方法。CPU在完成第一次讀寫之后,F(xiàn)PGA會記錄該地址,并使雙口RAM的地址自動遞增,不需要CPU再給出地址,這樣CPU可以操作多個連續(xù)地址中雙口RAM的數(shù)據(jù)。經(jīng)過測試,該方法可以大大提高CPU和FPGA進行數(shù)據(jù)交換的速度。
CPU;FPGA;Burst;快速數(shù)據(jù)交換
隨著可編程邏輯控制器(Field Programmable Gate Array,F(xiàn)PGA)的應用日漸廣泛,很多系統(tǒng)采用了中央處理器(Central Processing Unit,CPU)+FPGA的架構(gòu)方式。由于FPGA可以并行運算,所以大量的運算工作可由FPGA完成,CPU從FPGA中直接讀取計算結(jié)果,這種方式可以減少CPU的運算時間,降低了對CPU的要求。
目前,F(xiàn)PGA一般通過雙口RAM和CPU進行交互,通過雙口隨機存取存儲器(Random Access Memory,RAM)的緩沖解決FPGA和CPU的速度和并行性等問題。在CPU和FPGA之間有大量的數(shù)據(jù)需要進行交互的場合,這種方式CPU讀寫數(shù)據(jù)過程需要占用大量的時間,如何提高CPU讀寫FPGA的效率已經(jīng)成為很多應用中的一個瓶頸問題。在數(shù)據(jù)量較大的電力系統(tǒng)濾波、圖像處理等應用場合,CPU讀取數(shù)據(jù)的時間是無法忽略的,甚至會造成系統(tǒng)的響應時間無法滿足要求。
盡管目前可以采用PCI-E、SRIO等方式實現(xiàn)CPU和FPGA之間的快速數(shù)據(jù)交換,但是這些方式對CPU和FPGA具有較高的要求,在某些成本比較敏感的場合是無法使用的。
本文提出了一種不需要增加額外成本,采用Burst方式對FPGA進行讀寫的方法。在CPU和FPGA有大量數(shù)據(jù)進行交互的場合,采用這種方式大大降低了CPU讀寫FPGA所需要的時間,提高了CPU讀寫FPGA的效率。
目前很多CPU都支持Burst讀寫模式,通過該模式可以快速連續(xù)地完成多次讀寫。目前該模式一般僅用在了DRAM的讀寫操作中。圖1是DRAM芯片的讀時序。
圖1 DRAM的Burst時序
當DRAM芯片收到讀命令后,需要等待一段時間后才可以輸出數(shù)據(jù),該值稱為CAS Latency。CPU給出讀命令后,等待CAS Latency時間后,DRAM就可以連續(xù)輸出后續(xù)地址的數(shù)據(jù)傳送給CPU,數(shù)據(jù)的數(shù)量可以由Burst Length進行設置。
在DRAM內(nèi)部維護了一個地址寄存器,每當輸出一個數(shù)據(jù)后,內(nèi)部地址寄存器自動加1,讀取下一個地址中的數(shù)據(jù),由于每次讀取數(shù)據(jù)都經(jīng)過了CAS Latency的延時,在第一個輸出后,在下一個周期的時候,下一個地址的數(shù)據(jù)進行輸出,這樣在外部CPU看來,等待CAS Latency時間后,每個時鐘周期都可以讀到DRAM的數(shù)據(jù)。采用這種方式后,可以大大提高CPU和DRAM交換數(shù)據(jù)的效率。
參考DRAM的讀寫過程,把Burst模式應用到CPU和FPGA之間進行數(shù)據(jù)交換。FPGA內(nèi)部的雙口RAM地址不再由CPU給出的地址直接控制,而是使用FPGA內(nèi)部維護的地址寄存器進行設置。
圖2 CPU和FPGA的連接
另外,為了實現(xiàn)以上工作方式,還需要CPU和FPGA的工作時鐘是同步的,只有這樣,CPU和FPGA才可以按照同樣的步調(diào)進行工作,為了實現(xiàn)這種功能,需要CPU和FPGA使用同一個外部時鐘。CPU和FPGA的連接如圖2所示。
另外,CPU需要能夠支持Burst功能,在Freescale的MPC82XX系列CPU中,每個片選輸出都可以靈活地配置Burst的長度、等待周期等,其他的CPU、DSP也有類似的功能。
當CPU開始對FPGA進行讀寫操作的時候,F(xiàn)PGA會把CPU給出的地址存儲到內(nèi)部地址寄存器,同時雙口RAM開始輸出該地址的數(shù)據(jù)。在下一個時鐘周期到來時,F(xiàn)PGA會把內(nèi)部地址寄存器的值加1,內(nèi)部雙口RAM開始輸出下一個地址中的數(shù)據(jù),依此類推,CPU便可以連續(xù)地從FPGA內(nèi)部讀取到雙口RAM中的數(shù)據(jù)。圖3給出Burst長度等于8時,CPU讀取FPGA內(nèi)部雙口RAM的時序圖。
圖3 FPGA的Burst時序
CPU給出/CS和/RD信號的同時,也給出了雙口RAM讀地址,在FPGA內(nèi)部鎖存該地址并把其送到雙口RAM的地址端,在之后的每個時鐘周期內(nèi),F(xiàn)PGA會自動把雙口RAM的輸入地址加1,輸出下一個地址雙口RAM中的數(shù)據(jù)。在圖3中,假定FPGA雙口RAM的輸出延時是2個時鐘周期,那么CPU將會在/RD信號2個周期后讀到地址Addr0中的數(shù)據(jù)Dout0,第3個周期讀到地址Addr0+1中的數(shù)據(jù)Dout1,依此類推,在此之后的每個時鐘周期,CPU都可以讀到FPGA中的一個數(shù)據(jù)。
采用Burst模式要求數(shù)據(jù)線的各位輸出延時必須基本一致,只有這樣才可以保證各位數(shù)據(jù)同時到達CPU。表1是FPGA編譯報告中所給出的數(shù)據(jù)輸出延時的報告。
表1 FPGA的數(shù)據(jù)輸出延時(單位:ns)
可以看到,16位數(shù)據(jù)線的輸出延時均為10~20 ns。以100 MHz外頻的MPC8247為例,由于CPU的每個時鐘周期是10 ns,所以數(shù)據(jù)輸出延時取為2個時鐘周期,此時建立時間最短的是DATA[11]信號,等于3.746 ns;保持時間最短的是DATA[13]信號,等于3.799 ns。查閱MPC8247的手冊,CPU要求的建立時間不小于3.5 ns,保持時間不小于0.5 ns,時序上是可以滿足要求的。當不同數(shù)據(jù)線之間的延時差異比較大時,可以通過時序約束來保證不同數(shù)據(jù)線之間延時的一致性。
對于外頻是100 MHz的CPU,每讀一次至少需要4個時鐘周期,那么讀8次共需要32個時鐘周期,而采用上面的方式后,在10個時鐘周期內(nèi)就可以讀到8個數(shù)據(jù),讀寫速度至少提高了3.2倍。表2是MPC8247在關閉中斷的情況下,實際測試得到的1 s內(nèi)CPU讀寫FPGA的次數(shù)和吞吐率(數(shù)據(jù)位寬按照16位計算)。
表2 是否采用Burst方式的性能對比
可以看到,采用Burst方式后,CPU讀數(shù)據(jù)的速度大約提高了3.7倍左右,與理論上基本相符。該方案在產(chǎn)品中經(jīng)過長期應用,可靠性良好。
[1] 夏宇聞.Verilog數(shù)字系統(tǒng)設計教程[M].北京:北京航空航天大學出版社,2009.
[2] 閻石.數(shù)字電子技術基礎[M].4版.北京:高等教育出版社,2004.
[3] 羅苑棠.CPLD/FPGA常用模塊與綜合系統(tǒng)設計實例精講[M].北京:電子工業(yè)出版社,2007.
[4] Micron Inc.MT48LC4M32 User’s guide,2001.
[5] Freescale Inc.MPC8272 PowerQUICC II Family Reference Manual,2005.
陳慶旭(工程師)、余華武(高級工程師),主要研究方向為繼電保護平臺;朱明浩(助理工程師),主要研究方向為自動化控制。
Method of Exchange Data Quickly Between CPU and FPGA
Chen Qingxu1,Zhu Minghao2,Yu Huawu1
(1.Nanjing SAC Automation Co.,Ltd.,Nanjing 211153,China;2.Nanjing IVECO Co.,Ltd.)
To improve the reading and writing speed of the CPU for FPGA,a method of exchange data quickly between CPU and FPGA based on the Burst mode is proposed.There is a base address register in FPGA.After the CPU finished the first reading command,FPGA can record the address and increase the dual-port RAM address automatically without the address provided by CPU.So the CPU can operate multiple data of the consecutive address.The test results show that the method can improve the data exchanging speed between CPU and FPGA.
CPU;FPGA;Burst;exchange data quickly
TP368.1
A
(責任編輯:薛士然2016-02-29)