基于FPGA和FLASH ROM的圖像信號(hào)發(fā)生器設(shè)計(jì)
2.2 FLASH ROM無(wú)效塊管理
選取 SAMSUNG 公司的 NAND 型的K9F1G16UOM-FLASH作為存儲(chǔ)芯片,單片容量為1 Gb、數(shù)據(jù)寬度為16 b。大容量的FLASH器件一般都是按塊(block)管理其存儲(chǔ)空間。FLASH芯片可能有包含一個(gè)或多個(gè)無(wú)效位的無(wú)效塊,這在NAND型FLASH中是不可避免的。無(wú)效塊出現(xiàn)的幾率很小,但影響很大。如果對(duì)FLASH中的無(wú)效塊進(jìn)行操作,無(wú)效塊會(huì)在數(shù)據(jù)記錄的過(guò)程中造成數(shù)據(jù)的丟失和誤碼,影響數(shù)據(jù)的有效性和完整性。由于無(wú)效塊和有效塊相互隔離,無(wú)效塊并不會(huì)影響有效塊的操作,因此只要在數(shù)據(jù)存儲(chǔ)前將FLASH中的無(wú)效塊剔除,就可有效避免數(shù)據(jù)的丟失和誤碼。
FLASH在出廠時(shí)會(huì)對(duì)無(wú)效塊進(jìn)行檢查,并將信息標(biāo)注在FLASH每一塊的第一頁(yè)和第二頁(yè)的第1 024個(gè)字,0xFFFF表示塊有效。非0xFFFF則表示無(wú)效塊。為避免破壞這些標(biāo)注信息,在對(duì)FLASH進(jìn)行任何擦除或?qū)懭氩僮髑?,要首先建立無(wú)效塊信息表。SAMSUNG公司保證其FLASH的第一塊一定是有效塊,并且在對(duì)其擦寫(xiě)1 000次以內(nèi)不會(huì)出任何錯(cuò)。所以本文使用該塊來(lái)保存整片F(xiàn)LASH的無(wú)效塊信息。FPGA遍歷訪問(wèn)FLASH中的每個(gè)塊的第一頁(yè)和第二頁(yè),判斷該塊是否滿足有效塊的要求,若不滿足則將其塊地址緩存到FPGA的RAM中;接下來(lái),將FLASH的無(wú)效塊數(shù)量和無(wú)效塊地址存入該片F(xiàn)LASH的第一塊的第一頁(yè)內(nèi)。在FLASH的使用過(guò)程中,仍然有可能產(chǎn)生新的無(wú)效塊,當(dāng)出現(xiàn)這種情況時(shí),則需要更新無(wú)效塊信息表。無(wú)效塊信息表用來(lái)供讀寫(xiě)地址產(chǎn)生器查詢時(shí)使用,這樣就可以避開(kāi)壞塊的影響。
2.3 數(shù)據(jù)寫(xiě)入管理
圖像數(shù)據(jù)寫(xiě)入時(shí),FPGA接收來(lái)自USB控制器的數(shù)據(jù),并產(chǎn)生控制時(shí)序?qū)?shù)據(jù)寫(xiě)入FLASH。由于高幀頻相機(jī)一般是多通道輸出,所以在模擬這類相機(jī)的時(shí)候要注意這個(gè)因素。對(duì)于某一幅目標(biāo)圖像,圖像數(shù)據(jù)寫(xiě)入首先是應(yīng)用程序獲取圖像數(shù)據(jù);然后將各個(gè)通道對(duì)應(yīng)位置的像素?cái)?shù)據(jù)按次序調(diào)整在一起;接著通過(guò)USB將數(shù)據(jù)傳輸至FPGA,F(xiàn)PGA將數(shù)據(jù)截?cái)喑? KB大小并依次將各分段數(shù)據(jù)塊寫(xiě)入8片F(xiàn)LASH中,數(shù)據(jù)分流如圖4所示。圖像數(shù)據(jù)按通道進(jìn)行調(diào)整可以使得系統(tǒng)輕松地實(shí)現(xiàn)多通道輸出。對(duì)數(shù)據(jù)的分流處理,使得系統(tǒng)的8片F(xiàn)LASH在讀出時(shí)可以真正實(shí)現(xiàn)并行讀取數(shù)據(jù)。本文引用地址:http://www.ex-cimer.com/article/190175.htm
FLASH的一頁(yè)(page)的大小為2 KB,也是它的基本瀆寫(xiě)單元。要想連續(xù)寫(xiě)入2 KB的數(shù)據(jù),需要將訪問(wèn)FLASH的頁(yè)地址都設(shè)為00H。當(dāng)FPGA需要向某一片F(xiàn)LASH寫(xiě)入數(shù)據(jù)時(shí),首先要查看該片F(xiàn)LASH的FPGA寫(xiě)入管理模塊是否處于ready狀態(tài);若處于busy狀態(tài),則應(yīng)用程序進(jìn)入傳輸?shù)却?,?dāng)寫(xiě)入管理進(jìn)入ready狀態(tài)后,則應(yīng)用程序發(fā)送數(shù)據(jù),一共2 KB數(shù)據(jù)緩沖到FLASH在FPGA中對(duì)應(yīng)的RAM;數(shù)據(jù)緩沖完成之后,該FLASH的寫(xiě)入管理模塊進(jìn)入busy狀態(tài)并開(kāi)始將RAM中的數(shù)據(jù)寫(xiě)入FLASH ROM的某一頁(yè)(page),同時(shí)FPGA轉(zhuǎn)向?qū)ο乱黄現(xiàn)LASH進(jìn)行傳輸訪問(wèn)。
2.4 數(shù)據(jù)讀出管理
數(shù)據(jù)讀取輸出是指FPGA模擬CCD相機(jī)輸出時(shí)序,將FLASH中的數(shù)據(jù)通過(guò)Camera Link接口進(jìn)行循環(huán)輸出。所選的FLASH的單片最大讀出速率可達(dá)25 MB/s,由于8片F(xiàn)LASH可以并行讀出,所以整個(gè)系統(tǒng)的數(shù)據(jù)讀出率可以達(dá)到200 MB/s。這樣有利于模擬出較高幀頻的CCD相機(jī)輸出。當(dāng)系統(tǒng)進(jìn)行圖像數(shù)據(jù)瀆取輸出時(shí),F(xiàn)PGA中設(shè)置了FIFO來(lái)緩沖數(shù)據(jù)。Camera Link輸出管理模塊產(chǎn)生相機(jī)時(shí)序,將FIFO中的數(shù)據(jù)按要求送到Cam era Link接口。對(duì)于從FLASH向FIFO轉(zhuǎn)移數(shù)據(jù),首先將各FLASH中的2 KB數(shù)據(jù)被讀入其在FPGA中對(duì)應(yīng)的RAM中;然后控制各RAM中的數(shù)據(jù)被按順序轉(zhuǎn)移至FIFO中,控制器通過(guò)FIFO的數(shù)據(jù)深度來(lái)判斷是否需要繼續(xù)讀入數(shù)據(jù),當(dāng)判斷FIFO中的數(shù)據(jù)快滿時(shí)暫停讀取,這時(shí)由于數(shù)據(jù)繼續(xù)被讀出,隨著FIFO中的數(shù)據(jù)減少到一定程度時(shí),啟動(dòng)將RAM中的數(shù)據(jù)繼續(xù)讀入FIFO;一旦一個(gè)RAM中的數(shù)據(jù)被轉(zhuǎn)移,則FLASH讀取管理模塊繼續(xù)將該FLASH中的后續(xù)數(shù)據(jù)寫(xiě)入該RAM。
在加載某種8位數(shù)據(jù)寬度、雙通道輸出的目標(biāo)圖像時(shí),使用Chipscope得到的Camera Link信號(hào)如圖5所示。其中,strobe為時(shí)鐘信號(hào),dval,lval,fval分別是數(shù)據(jù)有效、行有效、幀有效信號(hào)。觀測(cè)結(jié)果說(shuō)明輸出的數(shù)據(jù)與加載的數(shù)據(jù)保持一致,輸出控制時(shí)序也符合要求。
為了模擬出不同類型的CCD相機(jī),只需要修改FPGA程序中設(shè)定的strobe時(shí)鐘頻率、Line blanking時(shí)間、Frame blanking時(shí)間等必要參數(shù)即可。
評(píng)論