摘 要: 為了解決單核處理器系統(tǒng)的總線互連所帶來的互連延遲、存儲(chǔ)帶寬和功耗極限等性能提升的瓶頸問題,設(shè)計(jì)了基于NoC系統(tǒng)的實(shí)時(shí)圖像采集和處理系統(tǒng)。該系統(tǒng)采用FPGA實(shí)現(xiàn)圖像采集模塊、存儲(chǔ)、JPEG編解碼、資源節(jié)點(diǎn)、路由節(jié)點(diǎn)及VGA顯示等功能。實(shí)驗(yàn)結(jié)果表明,在NoC系統(tǒng)上使用多核技術(shù)代替?zhèn)鹘y(tǒng)的單處理器,在提高系統(tǒng)并行性方面顯示出了NoC的巨大優(yōu)勢(shì)。
關(guān)鍵詞: 片上網(wǎng)絡(luò);資源節(jié)點(diǎn);通信
NoC(Network on Chip)的核心思想[1]是將計(jì)算機(jī)網(wǎng)絡(luò)技術(shù)移植到集成電路設(shè)計(jì)中,從體系結(jié)構(gòu)上徹底解決片上通信的瓶頸問題及時(shí)鐘問題。它充分借鑒了分布式計(jì)算機(jī)系統(tǒng)的通信方式,用路由和分組交換技術(shù)替代傳統(tǒng)的總線通信方式。結(jié)構(gòu)化的網(wǎng)絡(luò)連線[1]可以更好地控制連線的電氣參數(shù),提供更高的帶寬,支持多重的并行通信等。此外,NoC還具備數(shù)據(jù)處理量大、多任務(wù)并行計(jì)算、架構(gòu)易擴(kuò)展及靈活性強(qiáng)等特點(diǎn)。
本設(shè)計(jì)是在NoC系統(tǒng)上實(shí)現(xiàn)實(shí)時(shí)圖像采集、壓縮、解壓縮、存儲(chǔ)和VGA顯示等功能,利用FPGA的內(nèi)部資源設(shè)計(jì)靈活的邏輯控制,完成高速大容量數(shù)據(jù)采集的存儲(chǔ)和傳輸。本文提出的設(shè)計(jì)方案可以在選用成本低、操作簡單的靜態(tài)RAM的情況下, 實(shí)現(xiàn)實(shí)時(shí)大容量數(shù)據(jù)存儲(chǔ)需求。在EDA(Electronic Design Automation)軟件中進(jìn)行了仿真驗(yàn)證,并在DE2開發(fā)板上實(shí)現(xiàn)高速實(shí)時(shí)圖像采集和處理。
1 系統(tǒng)總體方案設(shè)計(jì)
NoC系統(tǒng)借鑒并移植計(jì)算機(jī)網(wǎng)絡(luò)通信中的概念和方法[1],用于多個(gè)核或IP(Intellectual Property core)的集成。圖1是NoC的示意圖。
NoC系統(tǒng)由交換節(jié)點(diǎn)(Switch)、資源節(jié)點(diǎn)(Resource)和資源網(wǎng)絡(luò)接口(Resource-Network Interface)3個(gè)基本部分組成[1]。交換節(jié)點(diǎn)負(fù)責(zé)資源節(jié)點(diǎn)之間的信息交換,資源節(jié)點(diǎn)可以是處理器、存儲(chǔ)器、可編程邏輯器件、輸入輸出設(shè)備等。交換節(jié)點(diǎn)通過互連線按照拓?fù)浣Y(jié)構(gòu)組成網(wǎng)絡(luò)的物理架構(gòu),資源節(jié)點(diǎn)則通過RNI與交換節(jié)點(diǎn)相連。狹義的NoC指的就是僅由交換節(jié)點(diǎn)構(gòu)成的網(wǎng)絡(luò)。
本設(shè)計(jì)在NoC網(wǎng)絡(luò)上實(shí)現(xiàn)實(shí)時(shí)圖像采集系統(tǒng),在FPGA上利用2個(gè)NIOS Ⅱ核實(shí)現(xiàn)NoC系統(tǒng)上的2個(gè)資源節(jié)點(diǎn),實(shí)現(xiàn)圖像采集的基本功能。其中,1個(gè)NIOS Ⅱ?qū)崿F(xiàn)采集壓縮功能,1個(gè)NIOS Ⅱ核實(shí)現(xiàn)解壓顯示功能。系統(tǒng)由攝像頭、NIOS Ⅱ 1、資源節(jié)點(diǎn)1、路由節(jié)點(diǎn)1、路由節(jié)點(diǎn)2、資源節(jié)點(diǎn)2、NIOS Ⅱ 2、SDRAM乒乓存儲(chǔ)器和VGA顯示等模塊組成。系統(tǒng)的工作流程如圖2所示。
圖像采集系統(tǒng)工作流程是:先對(duì)OV9650的寄存器進(jìn)行配置,然后從攝像頭模塊中接收YUV422格式的數(shù)據(jù),由NIOS Ⅱ 1對(duì)接收的數(shù)據(jù)進(jìn)行JPEG壓縮,壓縮的數(shù)據(jù)發(fā)送到資源節(jié)點(diǎn)1,再發(fā)送到路由節(jié)點(diǎn)1上,由路由器把數(shù)據(jù)發(fā)送到目的路由節(jié)點(diǎn)2上,再經(jīng)資源節(jié)2發(fā)送到NIOS Ⅱ 2中,由NIOS Ⅱ 2進(jìn)行JPEG解壓縮,進(jìn)行VGA顯示,VGA顯示的緩存采用SDRAM乒乓緩存。
2 圖像采集系統(tǒng)的模塊設(shè)計(jì)
2.1 攝像頭控制模塊
攝像頭控制模塊的功能是采集圖像數(shù)據(jù)。OV9650攝像頭包括CMOS攝像頭和圖像處理芯片OV9650。用Verilog HDL硬件描述語言編寫SCCB總線控制器,OV9650是通過SCCB總線(SCCB總線的示意圖如圖3所示,SCL是時(shí)鐘信號(hào)線,SDA是數(shù)據(jù)線)對(duì)其寄存器進(jìn)行配置的。時(shí)鐘頻率設(shè)置為24 MHz,按照其時(shí)序完成對(duì)OV9650攝像頭的初始化配置工作。配置OV9650攝像頭的工作模式為VGA 640×480視頻格式,以YUV4:2:2數(shù)據(jù)流輸出,視頻速率為15 f/s。采集到的YUV4:2:2格式的數(shù)據(jù)送到JPEG編碼器中進(jìn)行編碼,把編碼的數(shù)據(jù)進(jìn)行打包,發(fā)送到緩沖器中,等待路由節(jié)點(diǎn)的信號(hào),通過路由器發(fā)送到目的資源節(jié)點(diǎn)。
2.2 NIOS Ⅱ 1模塊
NIOS Ⅱ 1模塊由SoPC構(gòu)建硬件框架[2],再在NIOS Ⅱ IDE中進(jìn)行軟件程序編寫。NIOS Ⅱ 1的功能是接收攝像頭的數(shù)據(jù),對(duì)圖像數(shù)據(jù)進(jìn)行JPEG壓縮。
JPEG編碼算法可以用失真的壓縮方式來處理圖像,但失真的程度卻是肉眼所無法辯認(rèn)的,這也就是為什么JPEG會(huì)有如此滿意的壓縮比例的原因。它的壓縮一般過程是:首先使用正向離散余弦變換FDCT(Forward Discrete Cosine Transform)把空間域表示的圖像變換成頻率域表示的圖像,然后使用加權(quán)函數(shù)(此加權(quán)函數(shù)對(duì)于人的視覺系統(tǒng)是最佳的)對(duì)DCT系數(shù)進(jìn)行量化,最后對(duì)量化系數(shù)進(jìn)行編碼。JPEG編碼器流程圖如圖4所示。
2.3 通信節(jié)點(diǎn)發(fā)送模塊
通信節(jié)點(diǎn)發(fā)送模塊有兩個(gè)作用,一是把4個(gè)8 bit數(shù)組成32 bit數(shù)輸出,二是對(duì)要發(fā)送的數(shù)據(jù)進(jìn)行組包。組包協(xié)議是:第一包僅包含要發(fā)送的包數(shù)、發(fā)送包的類型、數(shù)據(jù)發(fā)送的資源節(jié)點(diǎn)的地址和要接收數(shù)據(jù)的資源節(jié)點(diǎn)的地址、校驗(yàn)位;后面的包包含此包的包號(hào)、包的長度、要發(fā)送的數(shù)據(jù)、校驗(yàn)位。資源節(jié)點(diǎn)1的模塊圖如圖5所示。
clk_100M是輸入時(shí)鐘,clk_50M是輸出時(shí)鐘,reset是復(fù)位信號(hào)線,b[11..0]是應(yīng)用系統(tǒng)發(fā)送的數(shù)據(jù)信號(hào),port_av1是路由節(jié)點(diǎn)的請(qǐng)求信號(hào)線,ou是應(yīng)用的請(qǐng)求信號(hào)線,data_to_sin1[31..0]是輸出信號(hào)線,flit_head是頭flit信號(hào)線,wren寫信號(hào)線,readen是讀信號(hào)線。該模塊的功能是銜接應(yīng)用系統(tǒng)與路由節(jié)點(diǎn),使得它們之間可以進(jìn)行通信。
2.4 路由節(jié)點(diǎn)
路由單元包括交換開關(guān)以及東、南、西、北、本地5個(gè)方向的端口鏈路控制模塊。交換開關(guān)負(fù)責(zé)路由單元內(nèi)部各端口鏈路之間的數(shù)據(jù)交換。本地方向模塊與本地的資源節(jié)點(diǎn)相連,負(fù)責(zé)轉(zhuǎn)發(fā)本地資源節(jié)點(diǎn)發(fā)出以及接收的數(shù)據(jù),另外4個(gè)方向模塊與其他路由節(jié)點(diǎn)連接。由于2D-Mesh拓?fù)浣Y(jié)構(gòu)具有對(duì)稱特性,因此路由單元東、南、西和北這4個(gè)方向的端口具有相同的電路結(jié)構(gòu)。每個(gè)方向端口由輸入虛通道選擇模塊、輸入虛通道緩存模塊、路由控制模塊、請(qǐng)求仲裁模塊和輸出模塊幾部分組成。
2.5 通信節(jié)點(diǎn)接收模塊
通信節(jié)點(diǎn)接收模塊是通信節(jié)點(diǎn)發(fā)送模塊的逆過程,其有兩個(gè)作用,一是把一個(gè)32 bit數(shù)分解成8 bit數(shù)輸出,二是對(duì)要接收的數(shù)據(jù)進(jìn)行解包,解包協(xié)議是組包協(xié)議的逆過程。資源節(jié)點(diǎn)2實(shí)現(xiàn)如下:
Module receive(
clkin, //數(shù)據(jù)輸入時(shí)鐘
clkout,//數(shù)據(jù)輸出時(shí)鐘
reset, //復(fù)位信號(hào)
data_in,//數(shù)據(jù)輸入
data_out,//數(shù)據(jù)輸出
wren,//寫使能信號(hào)
readen, //讀使能信號(hào)
in_int, //路由節(jié)點(diǎn)給的信號(hào)線
reci_flit_head,//頭flit信號(hào)
dataout_flag //數(shù)據(jù)輸出標(biāo)志位
)
2.6 NIOS Ⅱ 2模塊
NIOS Ⅱ 2模塊由SoPC構(gòu)建硬件框架,再在NIOS II IDE中進(jìn)行軟件程序編寫。用Verilog HDL語言編寫VGA控制器和SDRAM控制器,再編寫一個(gè)接入到Avalon總線的接口文件,把VGA控制器和SDRAM外掛在NIOS Ⅱ 2上。該模塊的功能是接收資源節(jié)點(diǎn)的數(shù)據(jù),再送入JPEG解碼器解碼,解碼后的數(shù)據(jù)送入SDRAM乒乓存儲(chǔ)器,最后在VGA上顯示。
2.6.1 JPEG解碼器的設(shè)計(jì)
JPEG解壓縮是JPEG壓縮的逆過程,解碼流程的主要功能模塊包括:頭文件解析、熵解碼(包括直流系數(shù)解碼、交流系數(shù)解碼和差分解碼)、反量化與反Z變換(掃描)、IDCT變換和顏色空間轉(zhuǎn)換。在JPEG解碼模塊啟動(dòng)后,頭碼流解析單元首先讀入JPEG文件的包頭,根據(jù)JPEG文件數(shù)據(jù)的存儲(chǔ)方式依次檢測(cè)數(shù)據(jù)流中包含的各種段的標(biāo)識(shí)符,把要解碼的文件信息從數(shù)據(jù)流中解析出來并存儲(chǔ)到相應(yīng)的存儲(chǔ)單元,為后面壓縮數(shù)據(jù)的解碼作準(zhǔn)備。數(shù)據(jù)流后經(jīng)熵解碼單元(包括Huffman解碼、變長解碼和行程解碼)進(jìn)行解碼,解碼后的數(shù)據(jù)進(jìn)入反量化與反Z變換模塊,對(duì)量化過的像素進(jìn)行反Z變換,得到8×8的數(shù)據(jù)塊。圖像數(shù)據(jù)是編碼時(shí)通過正向離散余弦變換得到的結(jié)果,解碼時(shí)必須將其反向余弦變換,將數(shù)值向時(shí)域轉(zhuǎn)換。JPEG解碼器流程圖如圖6所示。
2.6.2 VGA控制模塊的設(shè)計(jì)
VGA顯示由FPGA根據(jù)VGA顯示時(shí)序,輸出相應(yīng)像素的RGB格式的數(shù)據(jù)、行同步信號(hào)和幀同步信號(hào),然后經(jīng)過D/A芯片轉(zhuǎn)換后顯示。實(shí)際系統(tǒng)采用的顯示分辨率為800×600,幀頻率為75 Hz。VGA控制模塊設(shè)計(jì)如下:
module VGA_SINK(
clk, //時(shí)鐘信號(hào)
reset_n,//復(fù)位信號(hào)
ready_out,
valid_in,
data_in,
sop_in,
eop_in,
empty_in,
vga_clk,
vga_hs,
vga_vs,
vga_de,
vga_r,
vga_g,
vga_b)
其中,ready_out、valid_in、data_in、sop_in、eop_in和empty_in是與Avalon總線連接的信號(hào),vga_clk、vga_hs、vga_vs、vga_de、vga_r、vga_g和vga_b信號(hào)是與VGA模塊連接的信號(hào)。VGA模塊的工作過程是:數(shù)據(jù)從SDRAM中讀入,送到VGA顯示,判斷是否已經(jīng)讀取了一行的數(shù)據(jù),即640個(gè)RGB信號(hào),如果讀取了一行數(shù)據(jù),則復(fù)位行信號(hào)H;判斷是否已經(jīng)讀取一幀圖像,如果讀取了一幀,則復(fù)位場信號(hào)V,至此VGA已經(jīng)完整顯示了一幀圖像。
2.6.3 SDRAM乒乓存儲(chǔ)器
SDRAM乒乓存儲(chǔ)器的作用是為VGA顯示作緩存,一片SDRAM的數(shù)據(jù)輸出給VGA時(shí),另一片SDRAM就接收數(shù)據(jù),2片SDRAM交叉進(jìn)行,保證了VGA實(shí)時(shí)顯示。
3 實(shí)驗(yàn)結(jié)果
3.1 系統(tǒng)資源測(cè)試
NoC應(yīng)用系統(tǒng)的功能子模塊設(shè)計(jì)完成之后,將各個(gè)功能子模塊組合、聯(lián)調(diào),由Quartus II 11.0自帶的綜合工具生成網(wǎng)表及.pof,通過as接口方式燒寫到epcs4中,系統(tǒng)綜合后的資源消耗圖如圖7所示。
結(jié)果表明,該系統(tǒng)能正確可靠地工作。在這個(gè)系統(tǒng)中,專用邏輯寄存器占1%,總的邏輯單元占2%,總的內(nèi)存位占5%,因此還有大量的資源可以用于硬件算法或者其他方面的應(yīng)用。
3.2 系統(tǒng)指標(biāo)測(cè)試
在整個(gè)NoC應(yīng)用系統(tǒng)的實(shí)現(xiàn)中,由于采用FPGA作為主控制器,基本上是由硬件完成了整個(gè)系統(tǒng),將圖像傳感器的幀頻設(shè)置為15 f/s(最高為30 f/s),JPEG壓縮比例為3.4%,SDRAM乒乓緩存為VGA實(shí)時(shí)顯示提供了條件。通過仿真調(diào)試,可以實(shí)現(xiàn)通過人機(jī)交互界面控制圖像采集、傳輸和VGA顯示等功能,并且各部分能同時(shí)工作,這也是NoC的優(yōu)勢(shì)所在。圖8是采集的一幀圖像。
本文設(shè)計(jì)的系統(tǒng)的各個(gè)模塊都在Modelsim中進(jìn)行了仿真,并在DE2-115開發(fā)板上調(diào)試成功,實(shí)現(xiàn)了圖像采集、JPEG編碼解碼、傳輸和VGA顯示等功能。在NoC系統(tǒng)上實(shí)現(xiàn)數(shù)據(jù)采集系統(tǒng),采用雙核進(jìn)行處理,通過路由進(jìn)行數(shù)據(jù)傳輸,克服了總線互連、存儲(chǔ)帶寬及功耗極限等性能提升的瓶頸問題。
參考文獻(xiàn)
[1] 阿克塞爾·詹奇,漢努·騰胡寧.網(wǎng)絡(luò)化芯片[M].王忠,孫繼銀,周國昌,等,譯.西安:西安交通大學(xué)出版社,2007.
[2] 孫春鳳,袁峰,丁振良.基于FPGA的多通道高速CMOS圖像采集系統(tǒng)[J].計(jì)算機(jī)工程與應(yīng)用,2008(21):46-48.
[3] Altera. Altera Cycone IV Device Hand-book [Z].http://www.altera.com,2010.
[4] 杜慧敏,李宥謀,趙全良.基于Verilog的FPGA設(shè)計(jì)基礎(chǔ)[M].西安:西安電子科技大學(xué)出版社,2006.
[5] 杜林奇,許開宇,張欣璐.基于FPGA和視頻解碼芯片的實(shí)畦圖像采集系統(tǒng)設(shè)計(jì)[J].電子元器件應(yīng)用,2008(05):56-60.