為了兼具可擴(kuò)展性和數(shù)據(jù)處理速度,對(duì)于各種應(yīng)用,如圖像數(shù)據(jù)偵錯(cuò)、視頻數(shù)據(jù)壓縮、音頻數(shù)據(jù)增益、馬達(dá)控制等,可編程數(shù)據(jù)處理模塊(Programmable Data Processing Module)是時(shí)勢所需。
在處理的數(shù)據(jù)量越來越大的情況下,所需的內(nèi)存容量隨之增大,以往的先進(jìn)先出隊(duì)列(First-In-First-Out, FIFO)無法滿足其高速度與大容量的需求,許多硬件工程師開始考慮使用DRAM的可能性。
DRAM具備可快速存取、可依照設(shè)計(jì)者規(guī)劃使用空間、大容量等優(yōu)點(diǎn),但是內(nèi)存數(shù)組需要重新充電,而雙倍數(shù)據(jù)速率同步動(dòng)態(tài)隨機(jī)存取內(nèi)存( DDR SDRAM)有數(shù)據(jù)相位同步等不易控制的問題,不如FIFO使用方便。因此,在使用FPGA進(jìn)行設(shè)計(jì)時(shí),搭配其供貨商所提供的RAM控制IP,再加上硬件工程師所開發(fā)的控制邏輯,是當(dāng)前數(shù)據(jù)控制存取的發(fā)展趨勢。
本文的構(gòu)想是在此DRAM控制IP上增加一層包裝(Wrapper),使之擁有FIFO接口,具有多端口內(nèi)存存取控制(MPMA: Multi-Port Memory Access)功能。既可以保持大容量、存取速度快等優(yōu)點(diǎn),也可增添FIFO接口容易的優(yōu)點(diǎn)。在設(shè)計(jì)過程中,DRAM空間可隨設(shè)計(jì)師的定義而擁有更高的彈性。如圖1所示,此DRAM擁有兩個(gè)寫入端口和兩個(gè)讀出端口。對(duì)于每個(gè)寫入端口,其數(shù)據(jù)可以從起始地址連續(xù)寫入,直到結(jié)束地址之后,再從起始地址繼續(xù)寫入,形成循環(huán)式(Circular)寫入方式。對(duì)于每個(gè)讀出端口,其數(shù)據(jù)的讀出可使用類似于循環(huán)寫入的方式,而且只要寫入到內(nèi)存的數(shù)據(jù)數(shù)量比讀出的數(shù)據(jù)數(shù)量多,即是合理的類FIFO存取方式。
圖1 有兩個(gè)寫端口和兩個(gè)讀端口的DRAM控制槽
MPMA如何應(yīng)用于數(shù)據(jù)處理模塊
在許多需要對(duì)大量信息進(jìn)行運(yùn)算處理的應(yīng)用中,需要極大的緩存,與一個(gè)4KB FIFO的價(jià)格相比,買一個(gè)32Mb的DRAM更合適些。不過,其復(fù)雜的存取控制是一大問題。所以在編寫FPGA的HDL算法時(shí),可利用FPGA供貨商所提供的IP構(gòu)成解決方案。
對(duì)于所需處理的數(shù)據(jù)量重復(fù)性較高的應(yīng)用,例如圖2所示的圖像原始數(shù)據(jù)用圖像偵錯(cuò)處理算法來偵測P4點(diǎn)是否錯(cuò)誤,需要將它周圍的8個(gè)點(diǎn)當(dāng)作參考數(shù)據(jù)來對(duì)比,若使用FIFO,可能無法同時(shí)存取到此三條線(Line)的數(shù)據(jù),所以使用DRAM存取大量的數(shù)據(jù)。
圖2 圖像原始數(shù)據(jù)點(diǎn)數(shù)組
由于DRAM的控制方式比較復(fù)雜,每存取一次就要重新計(jì)算其欲存取的數(shù)據(jù)地址,根據(jù)其數(shù)據(jù)地址的連續(xù)性,可在圖像原始數(shù)據(jù)寫入后,分為三個(gè)端口以連續(xù)地址的方式讀出。如圖2所示,第一端口連續(xù)讀出P0、P1、P2,第二端口連續(xù)讀出P4、P5、P6,第三端口連續(xù)讀出P8、P9、P10,則可以完成P5點(diǎn)偵錯(cuò)的計(jì)算;而在計(jì)算P6點(diǎn)是否出錯(cuò)時(shí),第一端口只要再讀出P3,第二端口讀出P7,第三端口讀出P11,就可以完成計(jì)算前數(shù)據(jù)的完備,大大提高了數(shù)據(jù)的使用率,采用連續(xù)讀取的機(jī)制,不用在每次計(jì)算前計(jì)算數(shù)據(jù)地址,只要每一端口均先連續(xù)讀取數(shù)據(jù)即可完成,也降低了DRAM控制的復(fù)雜度。
MPMA的實(shí)現(xiàn)
下面以Altera MegaCore IP Generator產(chǎn)生的DDR DRAM控制器為例,再加上自創(chuàng)的Wrapper邏輯,構(gòu)建一進(jìn)(32位進(jìn))一出(8位出)的MPMA存取端口,圖3為其方塊架構(gòu)圖。
圖3 一進(jìn)一出的MPMA存取端口
在此架構(gòu)中,Altera DDR DRAM 控制與寫/讀wrapper間的數(shù)據(jù)帶寬為64位,而通過wrapper邏輯,更可自由地編寫輸入與輸出帶寬。在寫/讀wrapper中,數(shù)據(jù)的地址計(jì)算采用累進(jìn)式累加方式,其存取接口類似于FIFO的存取,因而更容易實(shí)現(xiàn)大容量數(shù)據(jù)的存取。
每個(gè)wrapper中有一個(gè)小容量的FIFO、封裝(packing)/反封裝(un-packing)機(jī)制以及地址累進(jìn)計(jì)數(shù)器。FIFO用于調(diào)節(jié)使用者接口與DRAM頻域的差異;封裝/反封裝機(jī)制用于將輸入/輸出接口數(shù)據(jù)總線寬度調(diào)整至與DRAM控制IP接口相同的水平,以利于提高寫入/讀出DRAM數(shù)據(jù)的效率。地址累進(jìn)計(jì)數(shù)器是每個(gè)wrapper的DRAM地址產(chǎn)生器,只要寫入wrapper里的計(jì)數(shù)器數(shù)字大于讀出wrapper里的計(jì)數(shù)器,則所讀出的必為先前已經(jīng)寫入DRAM里的合法數(shù)據(jù),不會(huì)存取到錯(cuò)誤地址的數(shù)據(jù)。
MPMA提高效率
以圖2的點(diǎn)P5為例,若不使用wrapper,則此點(diǎn)數(shù)據(jù)會(huì)被寫入1次,而在運(yùn)算的時(shí)候被讀出1(當(dāng)作主要運(yùn)算點(diǎn))+8(當(dāng)作參考數(shù)據(jù)點(diǎn))次。當(dāng)一幅有n點(diǎn)數(shù)據(jù)的圖像需要做偵錯(cuò)處理時(shí),則需要n*(1+1+8)次的數(shù)據(jù)存取,還不包括地址計(jì)算所造成的延遲。
當(dāng)使用一進(jìn)三出的MPMA wrapper時(shí),P5點(diǎn)只需要被寫入1次,而在運(yùn)算的時(shí)候被讀出3(3個(gè)讀wrapper各需要讀取1次)次,則同樣的n點(diǎn)數(shù)據(jù)作完偵錯(cuò)處理只需要n*(1+3)次的數(shù)據(jù)存取,并且采用累進(jìn)式的DRAM地址計(jì)算,不需要花費(fèi)額外的延遲時(shí)間。由此可知,MPMA設(shè)計(jì)可提高2倍以上的數(shù)據(jù)存取效率。
結(jié)語
本文提出一種架構(gòu),在FPGA供貨商所提供的IP核上添加寫入/讀出wrapper,具有數(shù)據(jù)的高度重復(fù)使用率與容易操作的類FIFO接口等優(yōu)點(diǎn)。設(shè)計(jì)師更可自行定義MPMA wrapper輸入/輸出端口的個(gè)數(shù)與數(shù)據(jù)總線寬度,以提高數(shù)據(jù)使用率。
凌華科技已將此技術(shù)應(yīng)用于大數(shù)據(jù)量的圖像采集/處理/傳輸模塊,尤其是線陣掃描(Line-Scan)圖像采集系統(tǒng),因?yàn)樵跈z測時(shí),需要在FPGA上執(zhí)行圖像數(shù)據(jù)計(jì)算的算法,一方面需要大容量的圖像數(shù)據(jù)緩存,另一方面需要反復(fù)讀取圖像數(shù)據(jù),則此技術(shù)是必需的。