王升哲,唐中和,郭 航,2,劉書信,3,劉云峰,4,張承果,張 梟,鄭 杰
(1.北方激光研究院有限公司 控制與制導研究所, 成都 610011;2.四川大學 計算機學院,成都 610065; 3.重慶大學 光電工程學院, 重慶 400040;4.火箭軍裝備部駐成都地區第四軍事代表室, 成都 610052)
隨著人工智能的崛起,對深度學習、大數據、神經網絡芯片等相關技術成果的集成應用,人工智能的智能化水平進一步提升,對未來戰爭將產生全方位、顛覆性的影響[1]。彈載計算機SoC處理芯片作為制導武器的重要組成部分,采用高精度制導與控制系統,利用人工智能的訓練和推理,通過對各種傳感器獲取的目標信息,以及對信息分析和處理后實時修正、控制導彈的飛行軌跡,完成對目標的有效攻擊[2]。
目前,以卷積神經網絡為代表的深度學習算法在形式上模擬了人腦的學習過程,也就是重復訓練強化其智能思維,大大提升了人工智能系統的運行效率[3]。然而,深度學習算法需要專用硬件平臺才能發揮其性能[4]。現有的人工智能芯片的技術路線大致可以分為三類:1)通用型的CPU及GPU芯片;CPU的架構和指令對神經網絡計算的兼容度不夠,性價比與運算效率偏低;2)FPGA芯片;具有可定制、可編程的特點,且并行效率適應神經網絡運算。3)專用ASIC芯片;對特定計算的運行效率極高,不具備編程過程。
目前主流的方法是以FPGA和DSP作為智能圖像處理和外設控制的器件,即由FPGA實現圖像預處理功能,DSP實現圖像處理算法和外設控制。由于圖像數據量比較大,FPGA與DSP之間數據交互往往需要SRIO這種高速接口,這種高速接口對電路板設計要求高,而且DSP串行工作方式,導致對DSP性能要求比較高,從而成本高功耗大發熱嚴重[5]。本文提出了一種基于SOC架構的智能圖像處理和外設控制系統,所有圖像運算和外設控制都在FPGA內部實現,進而成本降低,而且不需要高速的通信接口,而FPGA并行特性可以使整個系統的工作頻率降低,從而發熱少。
實時圖像處理和外設控制系統包括5部分,即圖像輸入模塊、圖像輸出模塊、圖像存儲模塊、圖像運算模塊和外設控制模塊。各個主要模塊的功能如下:
1)圖像輸入模塊:將前級器件輸人的圖像數據按照協議進行解析產生內部可以處理的圖像時序和格式。
2)圖像輸出模塊:對處理后的數字圖像進行字符疊加,按照ITU-R BT.656協議顯示在屏幕上。
3)圖像存儲模塊:對圖像數據進行存儲,方便圖像的運算。
4)圖像運算模塊:對解析后的圖像進行預處理,并對目標檢測、識別和跟蹤等圖像處理運算,產生參數。
5)外設控制模塊:對外部器件進行初始化和控制,同時根據圖像運算模塊產生的參數對外設進行視野控制。
實時圖像處理和控制系統微結構如圖1所示。

圖1 實時圖像處理和控制系統微結構圖
如圖2所示,程序分為BOOT系統引導程序和APP應用程序兩種。上電以后根據模式選擇管腳跳到BOOT還是APP應用程序。BOOT分為兩級BOOT,當其中一級出現損壞時,會引起標志寄存器變化,從而能夠根據標志寄存器跳到另一級BOOT,保證在任何情況下都存在與主機通信的通道。當需要對APP程序升級時,跳轉到BOOT程序,對FLASH中APP應用程序的數據空間進行改寫。所有程序都存儲在同一塊FLASH上面,使用地址映射的方法實現不同地址的程序跳轉[6]。

圖2 工作流程圖
本部分主要介紹各部分的具體作用、工作方式和部件之間的配合,使得系統能夠正常工作,同時根據軟件配置滿足各種場景。
前級器件每隔一段時間產生一個數據包,該數據包協議符合CML協議[6]。圖像輸入模塊可以對多路視頻數據進行選擇解析,產生幀頭、行有效、圖像數據。CML協議如圖3所示。

圖3 CML協議輸入時序
CML協議的數據包分為包頭和包數據兩部分。根據有效信號的上升沿來判斷包頭起始,當HEAD_0、HEAD_1、HEAD_2都匹配時,該數據包有效,可以進行解析,狀態機如圖4所示。

圖4 CML協議解析狀態機
數據包有效后,包頭里面ATTR的屬性來識別不同種類的包數據,包數據主要分為標識和圖像兩種。軟件首先根據上報的標識信息,來配置不同的寄存器對圖像進行解析。比如有多路視頻輸入,可以根據軟件回讀的標識來配置寄存器選擇混合包解析方式還是純種數據包解析方式。
圖像輸出模塊會根據軟件配置值產生字符標識,該標識與圖像處理后的圖像數據合成形成PAL格式的視頻信號輸出到顯示器[7]。
OSD是字符標識疊加模塊,能夠可以軟件配置適應于不同的產品需求,如波門、虛十字等等。該模塊根據場景分為四大功能部分:圖形不變位置變化、圖形變化位置變化、圖形變化位置不變和圖形不變位置不變。該電路總體結構如圖5所示(深藍色加粗為主數據通路)。

圖5 OSD總體結構
上電以后,圖像不變位置變化功能塊和圖形不變位置不變功能塊圖形都只需配置一次即可,而圖形變化位置不變功能塊需要配置字符庫。計算開始以后,圖像不變位置變化功能塊根據軟件配置相應的坐標即可完成功能,圖像變化位置不變功能塊需要根據軟件配置的讀取字符庫的地址即可,圖像變化位置變化功能塊只需要給出坐標,邏輯即可計算出固定圖形[8]。
PAL_SND作為視頻信號輸出端,由于PAL制式視頻采用了隔行掃描方式,每幀圖像由奇場和偶場合成。對于偶場,有效數據行就是一幀圖像的所有偶數行,而對于奇場,有效數據行就是一幀圖像的所有奇數行[9]。在FPGA上實現時,內部需要兩個雙口RAM,一個用來存儲奇場有效數據,一個用來存儲偶場有效數據。等寫入一幀完畢以后,再根據ITU-R BT.656協議通過計數器選擇發送消影數據、奇場有效數據和偶場有效數據,合成為一幀完整的圖像。該電路總體結構如圖6所示。

圖6 PAL_SND總體結構
由于目前需要計算圖像數據使用FPGA片內的Block RAM即可滿足,暫時沒有用到FPGA片外的存儲單元(比如DDR RAM或者SDR RAM)[10],而且使用FPGA片內的存儲器可以減少存儲器管理控制邏輯和電路板布線。
在FPGA設計中,開發了基于綜合屬性的CBB(common building block)[11]。通過例化模板,改變參數即可實現初始化、不同位寬和深度的Block RAM,可以極大節約時間。以SP RAM為例,其模板如下所示:
module FPGA_SPRAM_1000
(
prarameter RAM_INIT = 0,
parameter BIN_NAME ="spram_ini.bin”,
parameter ADDR_WIDTH = 4,
rarameter DATA_WIDTH = 16
)(
Input clk,
Input ram_en,
Input wh_rl,
Input [ADDR_WIDTH-1;0] addr,
Input [DATA_WIDTH-1;0] din,
output reg [DATA_RIDTH-1:0] dout
);
reg [DATA_WIDTH-1:0] ram_mem[2**ADDR_WIDTH-1:0]
/*synthesis syn_ramstyle= “block_ram"**/;
Initial begin
if(RAM_INIT==0) begin
end
else begin
readmemh(BIN_NANME,ram_mem);
end
end
always @(posedge.clk).begin
if(ram_en=1,b1) begin
if(wh_rl = 1’b1) begin
ram_mem[addr] <=din;
end
end
end
always @(posedge.clk)begir
if(ram_en=I’b1 begin
if(wh_rl=1'b0) begin
dout <=ram_meml[addr]:
end
end
end
end module
綜合屬性格式是,syn_ramstyle屬于attribute,后面value可以是register、block_ram、select_ram。綜合工具根據這三種value選擇不同的存儲單元綜合電路。其中register用寄存器搭成存儲陣列,block_ram使用18Kbit或者36Kbit的塊RAM,select_ram使用32bit或者64bit的分散式RAM。有一點值得注意的是,不同工具的綜合屬性是不一樣的,需要查看工具手冊用以區分。
在FPGA中,readmemh函數能夠將RAM初始化。將軟件產生或者自己編寫的bin導入到FPGA電路中,對RAM進行初始化,上電以后RAM存在預期值,從而直接進行讀取RAM,而不需要先寫值再讀取[12]。
由于圖像預處理以及目標檢測、識別和追蹤大部分用verilog實現,而不是用C語言,所以在FPGA形成電路以后,工作頻率低,不必使用高性能的DSP,使用性能稍差的DSP軟核便可完成相應的計算功能。軟件可以根據場景改變圖像運算模塊的參數配置值,同時也能夠選擇數據通路的路徑和各子模塊的工作狀態。由于這部分內容復雜就不展開討論,本節僅僅以中值濾波的verilog實現為例[13]。
中值濾波是一種非線性數字濾波器,是圖像處理中一個常用的步驟,能夠有效地去除斑點噪聲和椒鹽噪聲,而且不模糊圖像的邊緣,保持圖像的清晰度。
中值濾波器算法需要對3×3方形窗的9個像素灰度值進行排序,然后找到中間值替換原始像素。本系統采用一種快速中值濾波的方法,采用二分法進行比較,逐級交叉二分比較,利用并行和流水線的處理方法,完成一次中值濾波器需要36次比較,經過9次比較后便可得出結果,大大加快了中值濾波的計算速度。可以根據FPGA的時序,選擇插入寄存器的級數,從而實現不同的運算速率[13]。
假設A>B>C>D>E>F>G>H>I,要求按照從左到有進行由小到大排序,考慮最惡劣場景即為A、B、C、D、E、F、G、H、I,先進行兩兩比較,最后得出計算結果。計算原理如圖7所示。

圖7 中值濾波器比較算法
上電時,FPGA對外設器件需要進行初始化,而且在正常工作時也需要與周邊器件交互獲取信息檢測狀態,所以需要設計CPU作為主控,I2C、UART、SPI等作為外設接口。
CPU作為主控單元,使用軟核在FPGA內部實現。UART模塊能夠用于與PC機通信,執行參數寫入以及向上位機發送數據等功能,能夠實現對系統的FLASH程序升級、程序調試、數據回讀。I2C總線是器件互聯中常用到的一種總線,用于對外設器件如視頻編解碼芯片進行初始化。SPI可以實現對符合SPI器件的讀寫控制,用于對SPI FLASH數據的改寫和讀取等[14]。
VIC(vector interrupter controller)是中斷向量控制器,是管理多個中斷請求的模塊,能實現每個中斷源優先級調整、使能和屏蔽等功能[15]。處理器配置這些中斷請求的優先級,VIC確認當前中斷請求的最高優先級,將其中最高的中斷請求提交處理器。當處理器響應此中斷請求以后,保護當前程序或者中斷的現場,進入其相應的中斷服務程序,在中斷服務程序運行結束以后,恢復現場。中斷向量控制器主要由中斷請求寄存器、中斷使能寄存器、中斷屏蔽寄存器、中斷服務寄存器以及控制邏輯組成,其結構如圖8所示。

圖8 VIC中斷框圖
PWM_CTRL是脈沖寬度調制的控制器,能夠根據圖像處理傳來的參數,利用PID算法計算出PWM的周期和脈寬,然后將該值傳遞給PWM模塊,從而PWM模塊產生PWM波對外部進行控制。
為了驗證本文基于SOC架構的智能圖像處理和外設控制系統的設計效果,本章將利用該平臺實現大尺度卷積運算,并對其資源消耗進行分析。同時,本文設計的硬件平臺的計算性能也將與DSP的計算性能進行比較。
卷積運算是圖像處理領域中非常常見的低層次處理算法。由于卷積操作在遍歷時非常耗時,這就使得嵌入式運算時卷積核的尺寸不易過大。然而,以卷積神經網絡為代表的深度學習含有大量的卷積操作。本實驗將在SOC平臺基礎上設計一種大尺度的二維卷積硬件模塊并對其性能進行分析。
二維卷積運算如式(1)所示。雖然原理很簡單,但二維卷積計算并不容易。對于M×N卷積核,單個點的卷積輸出不僅需要M×N次輸入數據的讀取,還需要M×N次乘法與M×N-1次加法。這意味著3×3卷積核需要超過1.35 GOP/S的吞吐量才能對1 280×720的圖像實時處理。隨著內核尺寸的增加,卷積操作的計算負載和內存訪問的復雜度呈指數增長。FPGA內部結構使其非常適合處理低層次像素級并行卷積操作。

(1)
目前,基于FPGA的卷積操作都是經過裁剪的快速卷積。為了便于相同運算流程下硬件平臺的性能分析,本實驗采用文獻[16]提出的快速卷積運算進行編碼。快速卷積的表達式允許估計配置所需的最大資源并評估每個參數的影響,但占用率結果最終取決于優化程度。根據這些性能評估值,就可以在設計的SOC平臺上對數據路徑進行配置,并且綜合和布局布線工具可以修剪不必要的邏輯。
表1展示了不同配置的占用資源平均值和最小時鐘周期。Post-place和Route計時結果表明,該方案具有較高的吞吐量。例如,30×30大小的8 bits卷積運算中每個像素的計算時間是14.65 ns,這意味著每秒產生超過1.15億的輸出數據;對于15×15的卷積核,計算一個數據只需要14.01 ns。這意味著在連續數據流和輸入數據帶寬沒有限制的情況下,并行性和流水線使得卷積核的大小對運算時間的影響不是比例增加,但代價是需要更高的資源。

表1 不同卷積尺寸下的資源配置
本文設計的實時SOC架構能夠實時處理大尺度二維卷積運算。由于在不同層次上設計并行運算,該平臺可以在低時鐘頻率下實現高性能。同時,該設計能夠實現分布式算法,即便采用FPGA通用資源也能實現復雜運算。由于采用模塊化卷積操作以及系數獨立,因此該平臺設計的卷積模塊可以實現任何內核大小的卷積操作。通過調整流水線深度和并行度,還可以在特定應用程序的處理數據速率和特定FPGA器件的可用資源之間達到平衡。
表2展示了不同卷積尺寸下DSP卷積運算與FPGA卷積運算的性能對比,其中DSP的芯片型號是TMS320C6678遍歷執行執行卷積操作,SOC架構下的卷積操作采用傳統的卷積運算,并不是采用文獻[16]的快速算法,便于性能比較算法一致性。可以看出,采用本文設計的SOC平臺可以將計算時間鎖定在微秒范圍內,具有非常高的實時性,而DSP運算即便開優化也在毫秒級的計算時間。時序分析結果也表明,該架構具有很高的吞吐量,能夠實時處理高清圖像。通過對不同尺寸的卷積處理結果也表明內核大小和數據分辨率的增加都不會影響處理性能。

表2 不同平臺下卷積運算性能對比
本文設計了基于SOC架構的智能圖像處理和外設控制系統,該系統可以在一片FPGA上實現,結構比較簡單,外設模塊功能清晰明了,而且可以根據需求的變化進行調整,同時在片上集成實現了圖像處理算法使得對DSP依賴程度下降成為可能。電路設計結構精簡,模塊化和參數化高,能夠根據場景配置不同的算法通路和參數,可推廣諸多圖像處理領域。通過對大尺寸卷積運算的驗證試驗結果表明本文設計的SOC架構具有通用性好、可靠性高、處理速度快和控制精準的特點,能夠完全適應高復雜的卷積運算。