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