張 珂,李 濤,,邢立冬
(1.西安郵電大學(xué)計(jì)算機(jī)學(xué)院,陜西 西安 710121;2.西安郵電大學(xué)電子工程學(xué)院,陜西 西安 710121)
在數(shù)字系統(tǒng)中,微程序控制可以簡(jiǎn)化控制邏輯,具有控制電路規(guī)整、功能靈活可變和可升級(jí)維護(hù)的特點(diǎn),甚至在相近的系統(tǒng)之間具有可配置復(fù)用等優(yōu)點(diǎn)。微程序控制器作為整個(gè)系統(tǒng)控制邏輯的核心部件,制約著整個(gè)系統(tǒng)的性能,因此對(duì)其結(jié)構(gòu)進(jìn)行探討和優(yōu)化有著重要意義。基于OpenGL圖形標(biāo)準(zhǔn)的Khronos組織制訂了機(jī)器視覺(jué)處理的基本層標(biāo)準(zhǔn)OpenVX 1.3[1],設(shè)計(jì)了一款能夠?qū)崿F(xiàn)OpenVX 1.3中Kernel函數(shù)的通用并行可編程處理器,本文主要研究微控制器在OpenVX處理器上的應(yīng)用。
目前研究人員針對(duì)微控制器模塊設(shè)計(jì)問(wèn)題已做了大量研究。文獻(xiàn)[2]采用分組直接控制方法設(shè)計(jì)微程序控制器,減少了存儲(chǔ)容量,降低了微處理芯片的成本。文獻(xiàn)[3]提出頁(yè)式微程序ROM設(shè)計(jì),減少了微程序中ROM的位寬。文獻(xiàn)[4]通過(guò)隱含下址編碼、流水和預(yù)譯碼等設(shè)計(jì)技術(shù),提高了微碼的執(zhí)行效率。文獻(xiàn)[5]提出了“內(nèi)部計(jì)算機(jī)”采用電路邏輯,“外部計(jì)算機(jī)”采用程序邏輯觀點(diǎn)。文獻(xiàn)[6]提出了一個(gè)簡(jiǎn)單的“微程序化計(jì)算機(jī)”,給出了總體結(jié)構(gòu)和微指令格式,最后給出了“執(zhí)行機(jī)器語(yǔ)言指令的微程序”。文獻(xiàn)[7]采用了微指令預(yù)取的設(shè)計(jì),對(duì)微指令的執(zhí)行過(guò)程進(jìn)行了加速處理。
本文針對(duì)文獻(xiàn)[4]中微控制器解析命令過(guò)程導(dǎo)致內(nèi)部存儲(chǔ)量大的問(wèn)題和文獻(xiàn)[2,5-7]中轉(zhuǎn)移步驟復(fù)雜且功能不是很完善的問(wèn)題,首先基于相聯(lián)邏輯原理[8]設(shè)計(jì)了一種相聯(lián)存儲(chǔ)器,提高了控制存儲(chǔ)器CS(Control Storage)的利用率,減少了存儲(chǔ)器面積;然后基于判斷條件分組匹配的方法設(shè)計(jì)了轉(zhuǎn)移地址產(chǎn)生模塊,提高了轉(zhuǎn)移地址產(chǎn)生速度;最后基于OpenVX處理器映射標(biāo)準(zhǔn)Kernel算法,進(jìn)而優(yōu)化微指令。
本文設(shè)計(jì)的OpenVX處理器包含4×4個(gè)處理單元PE(Processing Element)、路由和微控制器MCU(Micro-program Controller Unit)??刂破鞯闹饕δ苁峭ㄟ^(guò)操作字段和順序控制字段產(chǎn)生控制信號(hào),實(shí)現(xiàn)對(duì)數(shù)據(jù)通路的控制。處理器總體結(jié)構(gòu)如圖1所示。
Figure 1 Overall architecture of processor OpenVX
處理圖像時(shí),MCU向PE發(fā)送指令,每個(gè)PE包含8個(gè)ALU、2個(gè)定點(diǎn)乘法器、2個(gè)浮點(diǎn)乘法器、1個(gè)定點(diǎn)除法器、1個(gè)浮點(diǎn)除法器、1個(gè)內(nèi)部交叉開(kāi)關(guān)、8個(gè)32×16的寄存器堆和寄存器堆的訪存模塊。PE之間的數(shù)據(jù)交互由控制信號(hào)和路由完成。其中,控制器發(fā)出控制指令從寄存器堆中讀取需要處理的像素信息,將數(shù)據(jù)發(fā)送給PE中的運(yùn)算單元進(jìn)行計(jì)算。通過(guò)控制運(yùn)算單元中邏輯運(yùn)算器的數(shù)據(jù)流向,完成在固定的硬件資源上實(shí)現(xiàn)復(fù)雜圖像處理的功能。
在數(shù)字系統(tǒng)中,相比于硬布線控制,微程序控制可以簡(jiǎn)化有規(guī)律的控制邏輯,便于檢查設(shè)計(jì)中的錯(cuò)誤,即使出現(xiàn)錯(cuò)誤,也易于增加和修改指令功能,靈活性較強(qiáng)。其基本思想是把操作控制信號(hào)編寫(xiě)成微指令,存放到一個(gè)只讀存儲(chǔ)器中,依次讀出這些微指令,從而產(chǎn)生整個(gè)處理器所需要的各種控制信號(hào),使相應(yīng)的部件執(zhí)行規(guī)定的操作[9,10]。
本文自主設(shè)計(jì)了OpenVX并行處理器微控制器,其結(jié)構(gòu)如圖2所示,主要包括:起始地址產(chǎn)生模塊、轉(zhuǎn)移地址生成模塊、轉(zhuǎn)移信號(hào)分組和微程序存儲(chǔ)器(包含數(shù)據(jù)通路控制信號(hào))。
相比于傳統(tǒng)的微控制器,本文設(shè)計(jì)的微控制器具有以下3個(gè)特點(diǎn):可編程程度高、模塊化程度高和適用性程度高。微程序提前存儲(chǔ)在控制存儲(chǔ)器CS中,機(jī)器啟動(dòng)后,給出控制存儲(chǔ)器的首地址。第1條微指令是取指微指令,當(dāng)取出一條指令時(shí),首先通過(guò)相聯(lián)存儲(chǔ)器得到該指令的微程序的起始地址,輸入給下地址選擇器,得到控制存儲(chǔ)器中相應(yīng)的微指令。接著根據(jù)條件組中條件信息選取轉(zhuǎn)移類(lèi)型字段中地址編號(hào),選擇一個(gè)地址做為下一條微指令的地址。最后將操作信號(hào)送往數(shù)據(jù)通路,從而控制整個(gè)系統(tǒng)。
Figure 2 Structure of MCU
Figure 3 Group field direct coding
微程序控制器除了結(jié)構(gòu)的設(shè)計(jì)和優(yōu)化,微指令的設(shè)計(jì)也是至關(guān)重要的,OpenVX處理器中微操作命令數(shù)在300個(gè)以內(nèi)。因此,盡可能地縮短控制字段長(zhǎng)度能有效減少控存容量,提高指令執(zhí)行效率。
本文遵循以下原則進(jìn)行微指令格式設(shè)計(jì):
(1)微指令字寧短勿長(zhǎng);
(2)微程序長(zhǎng)度寧短勿長(zhǎng);
(3)意義明確,便于修改;
(4)執(zhí)行速度快。
具體采用分組直接控制法中的分組思想與字段直接編碼法相結(jié)合的方式,格式如圖3所示。
假設(shè)將微指令分為5組,每組有10條微指令。在操作控制字段中,組選擇字段中用A~E表示5組不同的微指令位,1~10表示10個(gè)微命令位,A1~A10,B1~B10,…,E1~E10表示輸出的微操作。除了組選擇字段外,其余控制字段采用字段直接編碼方式。例如共有24個(gè)微命令,構(gòu)成了8個(gè)互斥類(lèi),即分為8段。每段中間有一個(gè)空位表示不做任何操作。條件組字段決定下一步執(zhí)行哪條微指令,以及要采取的操作,操作與微指令本身相關(guān);轉(zhuǎn)移類(lèi)型字段是當(dāng)微程序出現(xiàn)分支(即出現(xiàn)條件轉(zhuǎn)移)時(shí),通過(guò)條件判斷和狀態(tài)返回的信息修改微地址內(nèi)容;下地址字段給出了當(dāng)滿足轉(zhuǎn)移條件時(shí),接下來(lái)應(yīng)執(zhí)行的微指令地址,否則順序執(zhí)行。
本文根據(jù)OpenVX像素處理的5類(lèi)函數(shù):點(diǎn)函數(shù)、局部處理函數(shù)、全局參數(shù)抽象處理函數(shù)、迭代處理和跟蹤處理函數(shù),設(shè)計(jì)的操作操作指令格式。設(shè)計(jì)指令格式共18位,即5種類(lèi)型(3位)、31個(gè)函數(shù)(5位)和起始地址(10位)。在外部設(shè)置一個(gè)17×26的寄存器堆,用來(lái)存放儲(chǔ)操作碼及其對(duì)應(yīng)的起始地址。操作指令格式如圖4所示。
1715141090OpcodeTypeMainAddress
圖4中,OpcodeType表示5種函數(shù)類(lèi)型;Main表示具體的函數(shù)操作碼,比如Gaussian、Sobel和Canny等,Address表示對(duì)應(yīng)該指令的地址。
將函數(shù)映射到微程序的主要挑戰(zhàn)是微指令的設(shè)計(jì),總體的設(shè)計(jì)格式已在3.2節(jié)中進(jìn)行了說(shuō)明,本節(jié)詳細(xì)介紹每條微指令中各字段所代表的控制信號(hào),并通過(guò)設(shè)計(jì)舉例進(jìn)行驗(yàn)證。微指令字長(zhǎng)336位,具體意義如圖5所示。
309位21位4位2位操作控制字段條件控制字段轉(zhuǎn)移類(lèi)型字段下地址字段
操作控制字段包括GS、輸出配置OC(Output Configuration)、指令編碼IC(Instruction Coding)、寄存器堆編號(hào)RHN(Register Heap Number)、PE編號(hào)PE_NUM(PE Number)和移位信號(hào)SS(Shift Signal)。每個(gè)PE中設(shè)計(jì)了8個(gè)運(yùn)算單元,所以微指令設(shè)計(jì)8組操作控制信號(hào)。下面以操作控制字段為例,詳細(xì)介紹每個(gè)字段的定義,具體如表1所示。
Table 1 Format of operation control field
下面以Canny算法為例進(jìn)行分析,其流程如圖6所示。
Figure 6 Flow chart of Canny algorithm
Figure 7 Take number instruction types
接著采用Gaussian 5×5進(jìn)行濾波,以第1次取的數(shù)據(jù)為例,說(shuō)明Gaussian濾波處理流程。具體控制流如圖8所示。假設(shè)Xi(i=1,2,3,…)代表從寄存器堆中取出的像素?cái)?shù)據(jù)。將數(shù)據(jù)發(fā)送至PE1進(jìn)行運(yùn)算,X1和X5由ALU1進(jìn)行加法運(yùn)算,處理完的中間結(jié)果寫(xiě)回1號(hào)寄存器堆中的地址,此操作的微命令格式為:ADD(00011)RHN(001)PE_NUM(0001)R3(0011)R1(0001)R5(0101)。中間結(jié)果繼續(xù)發(fā)送到PE1中進(jìn)行運(yùn)算,其他像素處理方式相同。一組25個(gè)像素需要5行微指令,深度為16,則需要5×16=80條微指令。然后使用Sobel 5×5進(jìn)行邊緣檢測(cè),得到G1和G2。因都屬于卷積操作,控制流程相同,不再進(jìn)行說(shuō)明。
Figure 8 Control flow using Gaussian 5×5 filter
通過(guò)條件控制字段,當(dāng)且僅當(dāng)某一像素梯度大小大于或等于其垂直于邊緣處的像素梯度時(shí),將其保留為潛在的邊緣像素。例如,如果像素的方向是0度,只有當(dāng)它的梯度大小大于與它成90度和270度的像素的梯度大小時(shí),才會(huì)被保留。如果一個(gè)像素通過(guò)這個(gè)條件被抑制,那么它在最終的輸出圖像中一定不能作為邊緣像素出現(xiàn),即在最終的輸出圖像中它的值必須為0。
Table 2 Gradient size microcommands
Table 3 Comparison of microprogram optimization results
Figure 10 Structure of starting address generation module
輸出圖像中的最終邊緣像素通過(guò)雙閾值遲滯過(guò)程進(jìn)行識(shí)別。所有大于高閾值的保留像素在最終輸出圖像中被標(biāo)記為已知邊緣像素(值為非零),所有小于或等于低閾值的像素都不能在最終輸出圖像中標(biāo)記為邊緣像素。
OpenVX1.3中函數(shù)類(lèi)型較多,對(duì)像素的處理也不盡相同,比如卷積操作、逐像素操作等等。微程序的編寫(xiě)具有一定的復(fù)雜性,本文主要從硬件資源和指令優(yōu)化2方面進(jìn)行優(yōu)化,硬件資源優(yōu)化主要體現(xiàn)在起始地址產(chǎn)生模塊和轉(zhuǎn)移地址模塊,指令優(yōu)化從數(shù)據(jù)相關(guān)性、增加輔助操作字段和子程序設(shè)計(jì)等3方面進(jìn)行,如圖9所示。
Figure 9 Optimization contents
起始地址產(chǎn)生模塊優(yōu)化采用相聯(lián)存儲(chǔ)器加輔助電路設(shè)計(jì),如圖10所示。與指令碼嵌入方式相比,除了具有存儲(chǔ)功能外,還具有信息處理功能,它能根據(jù)內(nèi)容的特征并行查找存儲(chǔ)單元,顯著提高查找速度。
綜上所述,現(xiàn)如今,國(guó)民經(jīng)濟(jì)正在持續(xù)不斷的發(fā)展著,人們對(duì)于自己居住環(huán)境的要求也是更加嚴(yán)格了,特別是極為重視對(duì)建筑中的水電安裝這一工程。在對(duì)建筑工程進(jìn)行建設(shè)的過(guò)程中,水電安裝這一工程是非常重要的,在建筑工程中水電安裝這項(xiàng)技術(shù)決定著人們?cè)诰幼…h(huán)境上舒適的程度。本文對(duì)建筑水電安裝工程技術(shù)創(chuàng)新措施加以分析,指出工程技術(shù)之中存在著的問(wèn)題,然后并指出相應(yīng)創(chuàng)新的措施。使工程的質(zhì)量得到提升,使居民在生活上的水平得到有效的提升。
存儲(chǔ)體由寄存器堆構(gòu)成,檢索寄存器存儲(chǔ)輸入的操作碼,將寄存器的內(nèi)容和存儲(chǔ)體中每一單元的內(nèi)容進(jìn)行比較,將比較結(jié)果中的不關(guān)心位屏蔽掉,屏蔽之后的結(jié)果進(jìn)行按位與運(yùn)算。此時(shí),如果比較結(jié)果相同,那么按位與后的結(jié)果是1,否則是0。然后,對(duì)所有結(jié)果進(jìn)行編碼,編碼結(jié)果作為選擇器的選擇信號(hào),選擇器的輸入為存儲(chǔ)體每一個(gè)單元的內(nèi)容。最后對(duì)選擇器的輸出進(jìn)行截位,得到最終的微程序起始地址。
通過(guò)列舉Gaussian 3×3、Sobel 3×3、Gaussian 5×5、Sobel 5×5、閾值、色系變換、位深度變換、膨脹和仿射變換等函數(shù)分析控制存儲(chǔ)器利用率。9條指令分別對(duì)應(yīng)的微指令條數(shù)為1,1,5,5,48,16,16,23和33。公共操作的空指令和停機(jī)指令各需要1條微指令,取數(shù)指令需要64條微指令,間接地址判斷微程序需要2條微指令,取命令微程序需要3條微指令。
通過(guò)采用指令碼嵌入方式進(jìn)行測(cè)試,控制存儲(chǔ)器需要占用的大小為112 221 bits,由所有機(jī)器指令微程序與公共操作微程序組成。而起始地址產(chǎn)生模塊采用相聯(lián)存儲(chǔ)器設(shè)計(jì),12條指令,操作碼5 bits,微指令地址7 bits,則相聯(lián)存儲(chǔ)器所用的存儲(chǔ)體寬度為12 bits,深度為22,其占用空間大小為(5+7)×12=144 bits。此時(shí)微程序占用控制存儲(chǔ)器的大小為(1+1+5+5+48+16+16+23+33+1+64+2+3)×331=72158 bits,相比指令碼嵌入方式控制存儲(chǔ)器利用率提高了35.7%。
一般微程序控制器一次只能判斷一個(gè)條件,當(dāng)所有的條件判斷完成后發(fā)出控制信號(hào)。如果要產(chǎn)生正確的地址就需要一步一步進(jìn)行判斷,轉(zhuǎn)移速度很慢。本文采用條件分組的方式快速匹配出轉(zhuǎn)移地址,如圖11所示。具體做法是:在復(fù)雜數(shù)字系統(tǒng)的命令解析中,一個(gè)操作需要判斷的條件有很多,將所有的條件分為若干組,每組可分配2~6個(gè)條件,條件可分在同一組的原則是這幾個(gè)條件互斥;通過(guò)組選擇字段選擇出一個(gè)條件組,再與來(lái)自數(shù)據(jù)路徑的狀態(tài)寄存器進(jìn)行匹配,看條件是否滿足,選擇出2~6個(gè)地址中的一個(gè),使得在一條微指令里完成2~6個(gè)條件的判斷,減少轉(zhuǎn)移地址產(chǎn)生步數(shù)。
Figure 11 Logic of transition address generation module
采用上述方法,以公共微指令為例,接收到指令的可能是5種函數(shù)類(lèi)型,首先需要判斷當(dāng)前輸入的參數(shù)Cmd_In[14:10]代表的函數(shù)類(lèi)型。當(dāng)滿足Cmd_In==點(diǎn)函數(shù)(001),選擇微指令下地址字段中的地址AD1送往控制地址寄存器CAR,作為下一條微指令的地址,執(zhí)行相應(yīng)操作。如果都不滿足,則選擇順序取微指令,CAR+1作為下一條微指令的地址,該微指令執(zhí)行完后,就返回到取命令操作微程序,該命令的解析工作完成。該命令有5個(gè)操作,可以分為4個(gè)條件,采用傳統(tǒng)的微程序控制器,最多需要判斷4次才能轉(zhuǎn)到相應(yīng)的操作上,采用上述描述的條件分組方式,每組內(nèi)并行判斷,只需要1條微指令。
從數(shù)據(jù)依賴(lài)性方向進(jìn)行分析,微指令中發(fā)出的微命令可能同時(shí)對(duì)存儲(chǔ)在同一個(gè)寄存器中的數(shù)進(jìn)行操作,產(chǎn)生時(shí)延,減緩指令執(zhí)行速度。為了減少指令條數(shù),縮短微指令長(zhǎng)度,首先根據(jù)數(shù)據(jù)相關(guān)性,對(duì)指令進(jìn)行排序,提升運(yùn)算速率。以在高斯濾波函數(shù)設(shè)計(jì)為例,部分匯編程序指令如下所示:
1.ADDR26,R1,R5
2.ADDR32,R32,R33
3.ADDR27,R21,R25
4.ADDR26,R26,R27
5.ADDR28,R2,R4
6.ADDR2,R28,R29
7.ADDR29,R6,R10
8.ADDR28,R30,R32
9.ADDR30,R16,R20
10.ADDR29,R32,R33
11.ADDR31,R22,R24
12.ADDR30,R26,R27
13.ADDR33,R31,R32
14.ADDR31,R28,R30
15.ADDR32,R3,R3;SLLR3,2;SLLR3,1
16.ADDR33,R11,R11;SLLR11,2;SLLR11,1
上述指令按照序號(hào)順序執(zhí)行,每行微指令可以執(zhí)行8個(gè)操作指令,但是數(shù)據(jù)之間存在相關(guān)性,其中,第8條指令和第9條指令中都存在R30,只有第9條指令完成后才能執(zhí)行第8條。假設(shè)在t1和t2時(shí)刻完成上述指令運(yùn)行,根據(jù)本文設(shè)計(jì)的微指令格式,可對(duì)上述16條指令進(jìn)行排序,分為2組:(1,3,5,7,9,11,13,15),(2,4,6,8,10,12,14,16),分別在t1和t2時(shí)刻執(zhí)行,這樣減少了指令條數(shù),提高了執(zhí)行速率。
微指令格式的優(yōu)化方面,在微指令的基本功能外,增加輔助操作字段,采用組合型微指令,可進(jìn)一步提高微指令執(zhí)行的并行度,縮短微程序長(zhǎng)度。比如:原本每條微指令需要增加5位移位操作字段,本文設(shè)計(jì)將移位操作嵌入到加法操作中,使用1位就可完成移位操作。
最后運(yùn)用子程序設(shè)計(jì)方法對(duì)微指令進(jìn)行優(yōu)化。OpenVX函數(shù)中存在許多重復(fù)的操作,如從寄存器堆中取數(shù)操作、模板操作等,通過(guò)子程序設(shè)計(jì)方法實(shí)現(xiàn)這些函數(shù)。以Gaussian函數(shù)中取數(shù)操作為例,每條指令執(zhí)行完后,都有取數(shù)操作的微命令。通過(guò)設(shè)置取數(shù)操作子程序,使Gaussian 5×5函數(shù)微指令條數(shù)從9條優(yōu)化到5條。優(yōu)化前后對(duì)比結(jié)果如表3所示,微程序總體縮短31.7%。
本文采用XILINX公司的20 nm XCVU440芯片搭建FPGA板級(jí)驗(yàn)證平臺(tái)進(jìn)行驗(yàn)證,實(shí)驗(yàn)結(jié)果如圖12所示。
Figure 12 Comparison of image results
圖12a是原圖,圖12b為高斯處理處理后的圖像,圖12c為Sobel函數(shù)處理后的圖像,圖12d為Canny函數(shù)處理后的圖像。分別統(tǒng)計(jì)出部分函數(shù)每秒處理的圖像幀數(shù),可以達(dá)到像素快速刷新的效果,具體結(jié)果如表4所示。
Table 4 Number of image frames processed per second at different resolutions
對(duì)Gaussian 3×3、Sobel 3×3、Gaussian 5×5、Sobel 5×5、閾值、色系變換、位深度變換和仿射變換等函數(shù)的微程序轉(zhuǎn)移步數(shù)進(jìn)行統(tǒng)計(jì),結(jié)果如表5所示。與傳統(tǒng)的轉(zhuǎn)移地址產(chǎn)生模塊即單組判斷條件進(jìn)行對(duì)比,使用本文設(shè)計(jì)的轉(zhuǎn)移地址產(chǎn)生模塊,可以減少50%轉(zhuǎn)移步數(shù)。
Table 5 Comparison of transfer steps
通過(guò)優(yōu)化微指令,提高控制存儲(chǔ)器利用率,減少轉(zhuǎn)移步數(shù)等,使處理器整體性能得到了提高。以下對(duì)OpenVX并行處理器處理速度進(jìn)行分析,通過(guò)與文獻(xiàn)[11-13]設(shè)計(jì)的Sobel函數(shù)專(zhuān)用圖形處理器進(jìn)行對(duì)比,本文處理器所用時(shí)間較短,處理速度較快。對(duì)比結(jié)果如表6所示。
Table 6 Comparison of processing time
本文設(shè)計(jì)了OpenVX并行處理器的微程序控制器,基于傳統(tǒng)的微程序控制器,對(duì)起始地址和轉(zhuǎn)移地址產(chǎn)生模塊進(jìn)行優(yōu)化,使控制存儲(chǔ)器利用率提高了38.7%,平均轉(zhuǎn)移步數(shù)減少了50%。最后通過(guò)數(shù)據(jù)依賴(lài)性關(guān)系、增加輔助字段和設(shè)計(jì)子程序等對(duì)指令進(jìn)行優(yōu)化,提高了執(zhí)行效率。另外,通過(guò)手動(dòng)優(yōu)化微指令,出錯(cuò)率較高,今后的研究將重點(diǎn)考慮自動(dòng)優(yōu)化微指令工具設(shè)計(jì),以進(jìn)一步進(jìn)行指令優(yōu)化。