摘??要: 動態(tài)部分可重構方法應用于FPGA系統(tǒng)設計中,充分利用了FPGA芯片提供的可重配置功能,減小了FPGA芯片的配置時間。通過對可重構方法的研究,提出了基于模塊化動態(tài)可重構方法應用到SDRAM控制器設計中,給出了重構流程,并對實驗結果進行了分析。該方法提高了FPGA芯片的利用率,有效地提高了可重配置計算系統(tǒng)的整體性能。
關鍵詞: 動態(tài)部分可重構; FPGA; 模塊化; SDRAM控制器
?
動態(tài)部分可重構(Dynamic Partial Reconfigurable)配制結合了傳統(tǒng)的ASIC技術和通用處理器技術的特點,既具有通用處理器的靈活性,又具有ASIC的計算速度。隨著FPGA[1]應用領域的不斷擴大,即使采用百萬門級的FPGA,也很難一次容納所有的電路設計。動態(tài)部分可重構是將任務劃分成更細粒度的功能模塊,根據(jù)任務執(zhí)行的階段分別下載,動態(tài)地重配置相應的部分電路,而不需要重新配置的固定模塊部分則不受影響?;诖思夹g設計的可重構系統(tǒng)在高速數(shù)字濾波器、圖像壓縮、硬件演化計算、定值計算、嵌入式系統(tǒng)等方面,都有著廣泛的應用前景。
在系統(tǒng)分析研究現(xiàn)有各種動態(tài)部分可重構方法的基礎上,結合FPGA設計模塊化的特點,本文提出一種基于模塊化的動態(tài)部分可重構的SDRAM控制器設計方法,依靠強大的FPGA軟件工具生成相應的配制模塊,并通過了板級驗證。
1 基于模塊的動態(tài)部分可重構方法
在該方法中,任務被劃分為相互獨立的子模塊,這些子模塊的總大小一般要超過FPGA芯片的最大容量,運行時只需將當前任務執(zhí)行所需要的子模塊配置到芯片上。因此,這種方法不受硬件資源的限制,可以完成任意規(guī)模的任務。任務模塊之間的通信使用總線宏來完成,總線宏允許信號穿越模塊的邊界而保持正確通信。動態(tài)指令集計算機[2]就是利用基于模塊的動態(tài)重配置方法實現(xiàn)的,它是在FPGA中的二維配置邏輯單元按照行的方式構成一維線性硬件模型下實現(xiàn)的可重定位硬件的系統(tǒng)結構,提供了面向應用的指令集,每個指令都作為一個獨立的電路模塊實現(xiàn)。其中的重配置模塊按照水平方向布局,每個模塊的寬度等于芯片的寬度,由于模塊所占用的FPGA邏輯陣列的高度可以改變,因此,指令模塊庫中的各模塊可以按照其功能的需求被設計成不同的尺寸。靜態(tài)的全局控制器和通信網(wǎng)絡構成了一維線性模型上的全局上下文,在整個任務的執(zhí)行過程中保持不變。通信網(wǎng)絡起到了總線宏的作用,實現(xiàn)了重配置模塊之間以及重配置模塊與全局資源之間的通信。動態(tài)指令空間存放著完成特定任務的動態(tài)重配置模塊,可重定位硬件使得任意一個指令模塊都可以被配置到動態(tài)指令空間的任意部分,實現(xiàn)了“虛擬硬件”的概念,從而可以利用有限的資源完成更大規(guī)模的計算任務。而且,還實現(xiàn)了計算和指令模塊重配置的重疊,隱藏了配置時間,有效地提高了系統(tǒng)的整體性能。
2 基于高速數(shù)據(jù)采集卡的SDRAM控制器設計
該SDRAM控制器是基于高速數(shù)據(jù)采集卡所設計的。數(shù)據(jù)采集卡以FPGA為主控制芯片,外圍電路包括SDRAM存儲電路、時鐘電源電路、模擬電路以及上位機與板通信的UART接口、數(shù)據(jù)采集卡對數(shù)據(jù)采集目標進行數(shù)據(jù)通信的PCI總線接口。
在整個系統(tǒng)中,SDRAM電路能進行部分動態(tài)重構替換,以實現(xiàn)硬件電路與FPGA重構功能之間的相互適應。此系統(tǒng)采用Micron公司的32位SDRAM芯片,根據(jù)芯片的時序工作特點把SDRAM控制器分為3個模塊:控制接口模塊、命令模塊、數(shù)據(jù)模塊。SDRAM控制器的接口結構如圖1所示。
SDRAM 具有多種工作模式,內部操作是一個非常復雜的狀態(tài)機,本文設計的SDRAM控制器包括以下一些狀態(tài):模式寄存器設置狀態(tài)、激活狀態(tài)、預充電狀態(tài)、寫狀態(tài)、讀狀態(tài)、自動刷新狀態(tài)和空閑狀態(tài)。在本控制器中還設計了2個FIFO、2個狀態(tài)機(1個寫,另1個必定在讀),當寫FIFO寫滿1幀時就切換到讀FIFO[3];但由于讀寫的速度不同,這里需要對讀FIFO進行多次讀,當寫滿寫FIFO時自動切換狀態(tài)機,這樣可以保證數(shù)據(jù)采集系統(tǒng)大數(shù)據(jù)量的讀寫,也保證了數(shù)據(jù)采集板數(shù)據(jù)采集的連續(xù)性。
3 模塊化動態(tài)可重構方法的實現(xiàn)和驗證
本設計驗證所使用的高速數(shù)據(jù)采集板卡是基于Xilinx[4] Virtex-II XC2V500的芯片,該系列芯片是Xilinx公司生產(chǎn)的支持動態(tài)可重構的FPGA芯片。所采用的軟件是Xilinx ISE9.1i集成軟件包,其中包括用于確定模塊在FPGA芯片上的位置和形狀的Floorplanner軟件,iMPACT實現(xiàn)把動態(tài)部分可重構位流下載到開發(fā)板上。在該可重構設計過程中,總線宏起到重要的作用,保證了動態(tài)可重構模塊和靜態(tài)固定模塊之間的正確通信。
本設計是基于模塊化的動態(tài)可重構設計,在設計過程中采用如圖2的文件目錄結構,以便組織每個設計步驟所生成的文件,更好地體現(xiàn)了模塊化[5]的特點。
?
?
在SDRAM控制器程序中,SDRAM芯片的初始化程序模塊(sdram_initial.v)作為靜態(tài)固定模塊,數(shù)據(jù)模塊(sdram_data.v)和命令模塊 (sdram_cmd.v)作為動態(tài)部分可重構模塊。為了能體現(xiàn)可重構模塊在重配制過程中不影響靜態(tài)模塊的工作,在重配制時,SDRAM芯片仍然可以被初始化。
(1)頂層模塊設計與綜合
首先確定整個控制器的頂層模塊top.v,其中包括3個獨立的模塊sdram_initial.v、sdram_data.v、sdram_cmd.v、然后用XST工具對頂層設計進行綜合,生成top.ngc文件,并存放在Initial文件目錄下。
(2)總線宏[6]的設計
為了促進可重構模塊之間的通信,需要保證穿過可重構模塊邊界的布線資源是完全固定而且必須是靜態(tài)的,這就需要一種特殊的總線宏,它是模塊之間通信的“橋梁”。目前使用的總線宏由8個三態(tài)緩沖器組成,每個三態(tài)緩沖器傳輸1位信息。根據(jù)模塊設計劃分的要求,在FPGA Editor中設計總線宏,并保存在Initial文件目錄下,文件名為bus_macro.nmc。
(3)初始化預算
首先將top.ngc作為Ngdbuild命令的輸入,生成top.ngd文件,然后使用Floorplanner對其進行位置和面積約束,產(chǎn)生約束文件top.ucf,并手動增加對總線宏位置、重配置模塊和物理管腳的約束,該約束文件用于每個模塊的具體實現(xiàn)。如有需要,使用Constraint Editor對整個設計做全局時序限制。最后,使用Ngdbuild命令重新生成tog.ngd文件,用于每個模塊的具體實現(xiàn)。
(4)動態(tài)模塊的實現(xiàn)
靜態(tài)固定模塊和動態(tài)可重構模塊要通過頂層文件設計和約束來實現(xiàn)。首先將top.ucf和top.ngd文件拷貝到各模塊目錄下,并對每個模塊運行Ngdbuild、Map、Par和Pimcreate命令,操作完成后將生成已布局布線的模塊并放在Pims目錄下。對可重構模塊還要使用BitGen命令產(chǎn)生動態(tài)可重構位流sdram_data.bit和sdram_cmd.bit。
(5)可重構流的生成和驗證
首先將top.ngc、top.ucf、bus_macro.nmc復制到Assemble,運行Ngdbuild命令產(chǎn)生top.ngd,再運行Map、Par命令,然后使用FPGA Editor來觀察最后頂層模塊的布局布線結果。最后使用BitGen命令得到配置位流文件top.bit,再使用iMPACT軟件通過并口的電纜線top.bit,在下載過程中用JTAP模式配置Virtex-II FPGA芯片。運行SDRAM控制器的數(shù)據(jù)模塊和命令模塊的程序,用動態(tài)可重構位流sdram_data.bit和sdram_cmd.bit配置芯片的命令接收和數(shù)據(jù)讀寫過程,而在動態(tài)可重構配置過程中靜態(tài)固定模塊sdram_initial.v仍然能初始化SDRAM芯片,達到了動態(tài)部分可重構的設計目的。圖3~圖5為在FPGA Editor中設計的3種模塊的區(qū)域約束對比圖。
?
4 動態(tài)部分可重構配置與全局配置比較
傳統(tǒng)的全局配置在硬件電路升級時是把電路的所有模塊一起更新配置,這種配置方法在操作過程中把靜態(tài)的固定模塊又重新不變地配置了1次,使得在工程應用中顯得效率不高。
與全局配置方法相比,基于模塊化的動態(tài)部分可重構方法是一種高效率的FPGA配置方法。它將各模塊的公共部分和全局控制部分設計為靜態(tài)模塊,在重配置時可以將系統(tǒng)運行狀態(tài)和中間結果等存入該靜態(tài)電路中,既減少了相應的路由選擇和控制等外圍電路所需要的硬件資源,又節(jié)省了向外傳送這些數(shù)據(jù)所需要的時間。
使用普通的全局配制方法對SDRAM控制器進行設計,觀察實驗數(shù)據(jù)結果,得出2種方法的對比情況如表1所示。從表中可看出,使用動態(tài)部分可重構方法配置文件其容量減少,約為原來的1/4~1/3,配置時間大約為原來的3/5。
?
綜上所述,把基于模塊化的動態(tài)部分可重構方法應用到SDRAM控制器的設計里,在任務的執(zhí)行過程中根據(jù)需求動態(tài)地進行模塊替換,使得可重構配置計算不再受到硬件資源的限制,既能提高硬件電路的能量消耗,又能提高硬件資源的利用率,本方法在實際工程中有很高的應用價值。隨著FPGA技術和開發(fā)工具的不斷完善,必將更好地支持和推動可重構技術的發(fā)展。
參考文獻
[1] ?朱明程. FPGA 原理及應用設計. 北京: 電子工業(yè)出版社,1994.
[2] ?李麗, 辛勤, 楊樂平.基于FPGA的可重構系統(tǒng)的應用[J].微處理機,2001(3):11-13.
[3] ?張宇,時龍興,王學香,等.面向片上系統(tǒng)的高性能SDRAM控制器設計[J].固體電子學研究與進展,2007(3).
[4] 徐 欣, 于紅旗, 易 凡,等. 基于FPGA嵌入式系統(tǒng)設計(Xilinx?Edition). 北京: 機械工業(yè)出版社, 2005.
[5] 劉杰,周建華,黃子強. 基于SDRAM的視頻處理器設計與實現(xiàn)[J]. 電子元器件應用, 2006(7).
[6] Xilinx Inc. Two flows for partial?reconfiguration: module based or?difference based[EB/OL].? http://direct.xilinx.com/bvdocs/appnotes/xapp290.pdf, 2003.