陳俊煜,孫斌,黃曉峰,盛慶華,賴昌材,金心宇
(1.浙江大學(xué) 工程師學(xué)院,浙江 杭州 310015;2.杭州電子科技大學(xué) 通信工程學(xué)院,浙江 杭州 310018;3.杭州電子科技大學(xué) 電子信息學(xué)院,浙江 杭州 310018)
新一代國際視頻編碼標(biāo)準(zhǔn)通用視頻編碼(versatile video coding, VVC)[1]相比前一代的高效視頻編碼(high efficiency video coding, HEVC)[2],在編碼效率上提高了大約1倍[3],計(jì)算復(fù)雜度也大幅度提高[4].變換編碼是視頻編解碼的關(guān)鍵部分[5].可以從以下3個(gè)方面概括VVC與變換相關(guān)的特性[6].1)VVC總共有3種變換類型:DCT-II、DSTVII和DCT-VIII.相比于HEVC,VVC將最大變換尺寸擴(kuò)展到64,采用變換尺寸為4、8、16、32、64的DCT-II和變換尺寸為4、8、16、32的DSTVII、DCT-VIII.VVC引入多變換核選擇技術(shù)(multiple transform selection, MTS)控制變換類型.2)VVC的高頻置零技術(shù)減少了大尺寸變換塊的計(jì)算量和存儲(chǔ)空間.當(dāng)采用DCT-II時(shí),長或?qū)挒?4的大尺寸變換塊在高頻置零后,只保持低頻32×32的有效數(shù)據(jù);當(dāng)采用DST-VII或DCTVIII時(shí),長或?qū)挒?2的大尺寸變換塊在高頻置零后,只保持低頻16×16的有效數(shù)據(jù).3)VVC的多類型樹劃分技術(shù)(multiple type tree, MTT)會(huì)產(chǎn)生非對(duì)稱變換塊.VVC在水平和垂直方向上可以采取不同的變換類型和尺寸.
研究者提出許多關(guān)于變換部分的硬件結(jié)構(gòu).在VVC編碼標(biāo)準(zhǔn)方面,1)Garrido等[7-9]基于通用乘法器提出二維變換的流水線結(jié)構(gòu),將雙端口靜態(tài)隨機(jī)存取存儲(chǔ)器(static random-access memory,SRAM)排列成矩陣形式實(shí)現(xiàn)轉(zhuǎn)置存儲(chǔ),利用先入先出隊(duì)列(first input first output, FIFO)緩存塊信息.Garrido等[7-9]使用的轉(zhuǎn)置存儲(chǔ)器占用面積較大.2)Fan等[10]提出的支持混合塊處理的DST-VII、DCT-VIII變換結(jié)構(gòu),主要基于RAG-n(n-dimensional reduced adder graph)算法[11]優(yōu)化后的多常量乘法(multiple constant multiplication, MCM)實(shí)現(xiàn),在轉(zhuǎn)置存儲(chǔ)器的流水線結(jié)構(gòu)設(shè)計(jì)上采用對(duì)角存儲(chǔ)和乒乓讀寫方式.Fan等[10]沒有實(shí)現(xiàn)DCT-II,也沒有結(jié)合高頻置零優(yōu)化轉(zhuǎn)置存儲(chǔ)器.3)Farhat等[12-13]基于通用乘法器提出輕量級(jí)的變換結(jié)構(gòu),雖然實(shí)現(xiàn)VVC所有的變換類型和尺寸,但不支持流水線處理,導(dǎo)致結(jié)構(gòu)的吞吐率低.4)Mert等[14]提出可重構(gòu)的數(shù)據(jù)路徑,具有比傳統(tǒng)使用分離的數(shù)據(jù)路徑更小的面積.5)Hao等[15-16]在轉(zhuǎn)置存儲(chǔ)器的設(shè)計(jì)中使用統(tǒng)一的數(shù)據(jù)映射方案,針對(duì)一維變換提出矩陣分解算法來減小面積.在HEVC編碼標(biāo)準(zhǔn)方面,Meher等[17]提出尺寸復(fù)用結(jié)構(gòu),大尺寸變換可以復(fù)用小尺寸變換從而提高資源利用率;Zheng等[18]提出可重構(gòu)的蝶形變換結(jié)構(gòu),解決了傳統(tǒng)結(jié)構(gòu)在運(yùn)算小塊時(shí)大塊計(jì)算資源閑置的問題.
本研究主要實(shí)現(xiàn)VVC的DCT-II、DST-VII、DCT-VIII變換類型.1)基于32個(gè)并行度實(shí)現(xiàn)全流水結(jié)構(gòu),支持混合塊的輸入.2)基于Hcub(heuristic cumulative benefit)算法[19]優(yōu)化后的MCM設(shè)計(jì)統(tǒng)一的結(jié)構(gòu)來實(shí)現(xiàn)不同變換類型和尺寸.3)在轉(zhuǎn)置存儲(chǔ)器的設(shè)計(jì)中引入讀寫指針,取代傳統(tǒng)的乒乓讀寫方案;采用對(duì)角線式存儲(chǔ)結(jié)構(gòu),并設(shè)計(jì)統(tǒng)一的數(shù)據(jù)映射方案.4)利用VVC變換過程中高頻置零的特性優(yōu)化SRAM存儲(chǔ)空間,以FIFO取代傳統(tǒng)的寄存器緩存塊信息.
DCT-II、DST-VII和DCT-VIII變換矩陣的數(shù)學(xué)定義式為
式中:T(i,j)為變換矩陣元素值;i為行索引,j為列索引,N為變換尺寸;i,j=0,1,···,N-1.對(duì)于所有的變換類型,N點(diǎn)一維變換的矩陣形式為
式中:X為像素殘差矩陣,TN為N點(diǎn)變換矩陣,Y1D為一維變換系數(shù)矩陣.任何像素塊二維變換的計(jì)算式為
式中:XM×N為寬度為M、高度為N的像素殘差矩陣,TM、TN分別為M、N點(diǎn)的變換矩陣,Y2D為二維變換系數(shù)矩陣.
直接進(jìn)行變換操作涉及浮點(diǎn)數(shù)運(yùn)算,浮點(diǎn)數(shù)的計(jì)算復(fù)雜度較高;在數(shù)字化處理過程中,舍入誤差不可避免,將導(dǎo)致編/解碼端出現(xiàn)失配的問題,因此從高級(jí)視頻編碼(advanced video coding,AVC)開始,采用整數(shù)變換.相比于浮點(diǎn)變換矩陣,整數(shù)變換的變換矩陣做了整數(shù)化處理,VVC對(duì)N點(diǎn)變換矩陣的每個(gè)元素標(biāo)量數(shù)乘一個(gè)較大的放大因子進(jìn)行整數(shù)化,從而在整數(shù)化過程中減小計(jì)算精度的損失.整數(shù)化后的矩陣仍然保持原本可以使用蝶形快速算法的規(guī)律.整數(shù)變換過程的表達(dá)式為
式中:E(N)為N點(diǎn)變換矩陣的放大因子,、分別為M、N點(diǎn)的整數(shù)變換矩陣,Yint為二維整數(shù)變換系數(shù)矩陣.
如圖1所示,本研究所提二維變換流水線結(jié)構(gòu)主要由3個(gè)部分組成:一維行變換模塊、轉(zhuǎn)置存儲(chǔ)器、一維列變換模塊,系統(tǒng)的并行度為每時(shí)鐘周期32個(gè)像素.一維行變換的輸入數(shù)據(jù)是預(yù)測(cè)得到的像素殘差,輸入位寬為9位,輸出位寬為16位,一維行變換得到的塊數(shù)據(jù)和塊信息(寬、高、類型等)將分別存入由SRAM實(shí)現(xiàn)的轉(zhuǎn)置存儲(chǔ)器中.完成整個(gè)矩陣的存儲(chǔ)后,數(shù)據(jù)和相應(yīng)的信息會(huì)流入一維列變換,一維列變換的內(nèi)部結(jié)構(gòu)與一維行變換幾乎一致,只是輸入、輸出位寬都為16位.
圖1 二維變換的流水線結(jié)構(gòu)Fig.1 Pipelined architecture of 2D transform
由于轉(zhuǎn)置存儲(chǔ)器處理非對(duì)稱小像素塊時(shí)讀寫速率不匹配,產(chǎn)生數(shù)據(jù)寫入碰撞問題,須將小塊的多行向量拼湊到同一并行度,使得讀寫速率匹配,進(jìn)而實(shí)現(xiàn)流水線處理.以8×32的像素塊為例,其高度為8、寬度為32,若單周期只處理1個(gè)向量,則輸入到一維行變換需要8個(gè)周期,即寫入轉(zhuǎn)置存儲(chǔ)器需要8個(gè)周期,輸入到一維列變換需要32個(gè)周期,即從轉(zhuǎn)置存儲(chǔ)器中讀出需要32個(gè)周期.由于寫入時(shí)間小于讀出時(shí)間,導(dǎo)致存儲(chǔ)器堵塞,在轉(zhuǎn)置存儲(chǔ)器存滿后就會(huì)造成寫入碰撞.將小塊的輸入拼湊到32個(gè)并行度,同時(shí)處理多個(gè)尺寸小于32的向量(8組大小為4的向量,4組大小為8的向量,2組大小為16的向量),就可以使寫入和讀出時(shí)間相同.由于64×64的像素塊存在高頻置零,讀出時(shí)間短于寫入時(shí)間,不會(huì)造成流水的堵塞.
DCT-II可以使用Chen等[20]提出的蝶形快速算法進(jìn)行計(jì)算,使計(jì)算量大大減少.如圖2所示,DCT-II8代表大小為8的變換矩陣,DCT-II4代表大小為4的變換矩陣,特點(diǎn)是1)偶數(shù)行偶對(duì)稱,奇數(shù)行奇對(duì)稱(首行是第0行);2) 4×4的變換矩陣由8×8矩陣的偶數(shù)行的前一半元素組成.其他尺寸的變換矩陣也有這2個(gè)特點(diǎn),因此可以設(shè)計(jì)基于蝶形快速算法的統(tǒng)一計(jì)算結(jié)構(gòu).
圖2 DCT-II的2種變換矩陣Fig.2 Two tgpes of transformation matrices for DCT-II
DST-VII和DCT-VIII沒有與DCT-II相同的蝶形特性,即便VTM (VVC 測(cè)試模型)為DST-VII和DCT-VIII提供快速算法,這樣的快速算法也難以用統(tǒng)一的結(jié)構(gòu)實(shí)現(xiàn).DST-VII、DCT-VIII的變換矩陣在數(shù)值上具有偶數(shù)行反序,奇數(shù)行反序且反號(hào)的特點(diǎn)(首行是第0行).如圖3所示,DST-VII4和DCT-VIII4分別代表大小為4的2種變換矩陣,二者可以共享1套計(jì)算資源,只要在輸入輸出端分別采用1組選擇器簡單處理輸入輸出數(shù)據(jù)即可實(shí)現(xiàn)2種變換類型.
圖3 DST-VII4與DCT-VIII4的變換關(guān)系Fig.3 Relationship between DST-VII4 and DCT-VIII4
本研究所提一維變換結(jié)構(gòu)基于MCM的方法實(shí)現(xiàn).MCM優(yōu)化問題將給定的1組常數(shù)生成僅用加法、減法和移位組成的常量乘法器塊,用以與輸入變量進(jìn)行相乘運(yùn)算,并通過算法來減少加法器、減法器、移位器的使用.在硬件設(shè)計(jì)中,加法器/減法器所需資源遠(yuǎn)遠(yuǎn)大于移位器,因此如何減少加法器/減法器的個(gè)數(shù)是硬件優(yōu)化的關(guān)鍵.Hcub算法[19]的提出正是為了減少加法器/減法器的個(gè)數(shù),尋找解決MCM問題的最優(yōu)解.在文獻(xiàn)[19]中,該算法找到的解決方案所需加法和減法數(shù)量比RAG-n算法少20%.當(dāng)常量個(gè)數(shù)和位寬不斷變大時(shí),Hcub算法的優(yōu)勢(shì)會(huì)更加明顯,其對(duì)中間計(jì)算結(jié)果的復(fù)用性更高.基于MCM實(shí)現(xiàn)的一維變換結(jié)構(gòu)如圖4所示.由于系統(tǒng)的并行度為每周期32個(gè)像素,最大塊的尺寸為64,為了能夠在后級(jí)使用蝶形快速算法減少計(jì)算量,在模塊的輸入級(jí)加入串轉(zhuǎn)并模塊,將尺寸為64的2個(gè)周期輸入數(shù)據(jù)合為1個(gè)周期.由于存在高頻置零,一維變換最大輸出32個(gè)有效數(shù)據(jù),因此無需在輸出端進(jìn)行處理.
圖4 基于MCM的一維變換統(tǒng)一結(jié)構(gòu)Fig.4 Unified architecture of 1D transform based on MCM
DCT-II可以采用蝶形快速算法進(jìn)行計(jì)算的特性,大大降低了乘法和加法操作的個(gè)數(shù),減少了后級(jí)MCM和加法樹中的資源消耗,DST-VII/DCT-VIII沒有相同的特性,采用直接計(jì)算的方法.如圖5所示的蝶形運(yùn)算模塊用于對(duì)變換類型為DCT-II的輸入數(shù)據(jù)生成蝶形運(yùn)算單元,對(duì)DST-VII、DCT-VIII的輸入數(shù)據(jù)僅進(jìn)行延時(shí)操作.圖中,x為經(jīng)過串轉(zhuǎn)并模塊后的向量,a為N點(diǎn)蝶形模塊的輸入向量,b為輸出向量,MUX為多路復(fù)用器,蝶形變換的輸入輸出關(guān)系為
圖5 蝶形運(yùn)算結(jié)構(gòu)Fig.5 Butterfly architecture
大尺寸的蝶形變換可以調(diào)用小尺寸的蝶形變換,從而提高資源利用率.小塊的多行向量須拼湊到同一并行度才能實(shí)現(xiàn)讀寫速率的匹配,因此例化2個(gè)16點(diǎn)蝶形模塊、4個(gè)8點(diǎn)蝶形模塊和8個(gè)4點(diǎn)蝶形模塊,在總體上實(shí)現(xiàn)32個(gè)并行度下的流水線結(jié)構(gòu).
如圖6所示,DST-VII和DCT-VIII可以共享1套計(jì)算資源,默認(rèn)輸入下輸出為DST-VII的系數(shù)結(jié)果,若當(dāng)前變換類型為DCT-VIII,則通過選擇器將輸入數(shù)據(jù)反序,輸出數(shù)據(jù)在奇數(shù)行添負(fù)號(hào),得到系數(shù)結(jié)果.圖中,DMUX為分路器.
圖6 DST-VII和DCT-VIII的統(tǒng)一結(jié)構(gòu)Fig.6 Unified architecture of DST-VII and DCT-VIII
基于MCM方法的結(jié)構(gòu)是設(shè)計(jì)多組移位加法單元(shift-addition unit, SAU)作為常量乘法的運(yùn)算單元.通過需要運(yùn)算的變換系數(shù)得到所有可能與某個(gè)輸入數(shù)據(jù)相乘的常量,根據(jù)Hcub算法生成對(duì)應(yīng)的SAU.本研究采用統(tǒng)一的計(jì)算結(jié)構(gòu),即生成的計(jì)算單元可以供所有的變換類型和變換尺寸使用.這樣的結(jié)構(gòu)可以最大化地復(fù)用中間計(jì)算結(jié)果,也可以復(fù)用后級(jí)加法樹的資源,在最大程度上共享資源并降低功耗.在MCM的計(jì)算模塊中,輸入總共有64個(gè)數(shù)據(jù),這64個(gè)輸入數(shù)據(jù)來自不同的數(shù)據(jù)路徑,因此可以根據(jù)所需要的變換矩陣系數(shù)為輸入數(shù)據(jù)設(shè)計(jì)相應(yīng)的SAU.如圖7所示為不同輸入數(shù)據(jù)對(duì)應(yīng)的SAU.圖中,c為輸入數(shù)據(jù),其中SAUc[0:1]和SAUc[2:3]共同處理來自第1個(gè)4點(diǎn)蝶形模塊的數(shù)據(jù),SAUc[4:5]和SAUc[6:7]共同處理來自第2個(gè)4點(diǎn)蝶形模塊或第1個(gè)8點(diǎn)蝶形模塊的數(shù)據(jù).例如,變換類型為DCT-II且尺寸為8,有效輸入數(shù)據(jù)為c[0:31],該輸入數(shù)據(jù)包含4組尺寸為8的輸入向量,分別由SAUc[0:7]、SAUc[8:15]、SAUc[16:23]、SAUc[24:31]處理.DST-VII/DCT-VIII與尺寸為64的DCT-II共同對(duì)應(yīng)的有效輸入數(shù)據(jù)為c[32:63],c[32:63]對(duì)應(yīng)的常量乘法放在SAUc[32:63]中生成.這樣的MCM計(jì)算模塊發(fā)揮了利用多常量乘法進(jìn)行優(yōu)化的特點(diǎn),常量越多,可以共用的中間計(jì)算單元也越多,因此功耗降低且邏輯資源的使用減少.經(jīng)過MCM的計(jì)算后,根據(jù)當(dāng)前變換的類型和大小對(duì)SAU輸出的結(jié)果進(jìn)行選擇,并輸入加法樹模塊對(duì)數(shù)據(jù)進(jìn)行累加求和.為了提高整體的時(shí)序,減少組合邏輯關(guān)鍵路徑的長度,整個(gè)加法樹劃分為3級(jí).應(yīng)限制一維變換的結(jié)果不超過16位,因此從加法樹模塊得到的數(shù)據(jù)須右移縮放,輸出的即為一維變換后的結(jié)果.
圖7 不同輸入數(shù)據(jù)對(duì)應(yīng)的移位加法單元Fig.7 Shift-addition units for different input data
實(shí)現(xiàn)二維變換的流水線結(jié)構(gòu)須存儲(chǔ)一維行變換的結(jié)果,待完成1個(gè)矩陣的計(jì)算后再開始一維列變換,為此須設(shè)計(jì)滿足流水線處理要求的轉(zhuǎn)置存儲(chǔ)器.如圖8所示,本研究提出的轉(zhuǎn)置存儲(chǔ)器基于雙口SRAM實(shí)現(xiàn),使用對(duì)角線存儲(chǔ)方案并設(shè)計(jì)統(tǒng)一的數(shù)據(jù)映射方案,同時(shí)配合讀寫指針進(jìn)行操作,利用FIFO來緩存塊信息.圖中,y1為一維行變換輸出數(shù)據(jù),y2為轉(zhuǎn)置存儲(chǔ)器輸出數(shù)據(jù).雙口SRAM由32塊存儲(chǔ)體(Bank)組成,由此實(shí)現(xiàn)32個(gè)數(shù)據(jù)的并入、并出.經(jīng)過高頻置零優(yōu)化后的轉(zhuǎn)置存儲(chǔ)器深度計(jì)算式為
圖8 轉(zhuǎn)置存儲(chǔ)器結(jié)構(gòu)Fig.8 Transpose memory architecture
式中:VY為一維行變換后最大輸出塊的有效數(shù)據(jù)個(gè)數(shù),H為系統(tǒng)的并行度,D為每個(gè)存儲(chǔ)體的深度.VVC中最大的變換塊為64×64,但其具有高頻置零的特性,在一維行變換后輸出的最大有效塊數(shù)據(jù)個(gè)數(shù)為64×32個(gè).系統(tǒng)的并行度為32,因此可以計(jì)算出每個(gè)Bank的深度為128,需要7根地址線.圖8中的FIFO用來緩存包括變換尺寸、變換類型在內(nèi)的塊信息.由于最大塊的讀出需要64個(gè)周期,F(xiàn)IFO的深度不超過讀時(shí)鐘的最大值,本研究中的FIFO深度為64.
為了實(shí)現(xiàn)數(shù)據(jù)的并入并出,考慮到SRAM在1個(gè)時(shí)鐘內(nèi)只能在1個(gè)特定地址讀寫的特性,本研究在存儲(chǔ)上采用對(duì)角存儲(chǔ)的方案.實(shí)現(xiàn)思路為將32個(gè)并行數(shù)據(jù)經(jīng)過移位操作后斜向?qū)懭氩煌鎯?chǔ)體的不同地址內(nèi),在讀取時(shí)只需對(duì)存儲(chǔ)在不同存儲(chǔ)體同個(gè)地址的數(shù)據(jù)進(jìn)行移位后便可獲得轉(zhuǎn)置后的向量.以4×32的輸入矩陣為例,該矩陣是一維行變換的輸出結(jié)果,如圖9(a)所示,數(shù)字0~31代表每周期處理的32個(gè)數(shù)據(jù),不同的灰度色彩代表不同的周期,該矩陣須分4個(gè)周期進(jìn)行存儲(chǔ).由于在讀操作開始的時(shí)候,要在1個(gè)時(shí)鐘內(nèi)讀出輸入矩陣1列所有的數(shù)據(jù),并進(jìn)行多向量的拼湊,轉(zhuǎn)置存儲(chǔ)器存儲(chǔ)結(jié)構(gòu)的設(shè)計(jì)如圖9(b)所示.其中32個(gè)并行數(shù)據(jù)被對(duì)角寫入不同存儲(chǔ)體中,讀出時(shí)按照地址順序依次讀出并進(jìn)行移位操作即可.為了避免讀寫碰撞的產(chǎn)生,在轉(zhuǎn)置存儲(chǔ)器結(jié)構(gòu)上加入讀寫指針,寫指針指向一維變換中的向量存儲(chǔ)的地址,讀指針指向轉(zhuǎn)置存儲(chǔ)完畢的上一個(gè)矩陣的起始地址.
圖9 輸入矩陣與存儲(chǔ)結(jié)構(gòu)Fig.9 Input matrix and storage structure
由于存在高頻置零,轉(zhuǎn)置存儲(chǔ)器的延遲(latency)是不固定的.對(duì)非64×64的變換塊來說,1個(gè)完整變換塊的讀寫周期均不超過64個(gè)時(shí)鐘;當(dāng)64×64的變換塊進(jìn)入時(shí),高頻置零使得1個(gè)完整變換塊的寫入周期為128個(gè)時(shí)鐘,讀出周期只需64個(gè)時(shí)鐘.為了確保讀寫不發(fā)生碰撞,當(dāng)64×64的變換塊進(jìn)入時(shí),讀出操作須等待64個(gè)時(shí)鐘才能進(jìn)行.若64×64的變換塊后續(xù)讀出的為非64×64的變換塊時(shí),可以直接進(jìn)行讀出操作,從而縮短小塊的延遲.如圖10所示,在1個(gè)完整的二維變換過程中,非64×64的變換塊的延遲為81個(gè)時(shí)鐘周期,64×64的變換塊的延遲為145個(gè)時(shí)鐘周期.
圖10 二維變換流水線結(jié)構(gòu)時(shí)序圖Fig.10 Timing diagram of pipelined 2D transform architecture
使用Verilog HDL實(shí)現(xiàn)提出的結(jié)構(gòu),并使用Design Compiler在UMC 28 nm工藝庫下進(jìn)行綜合實(shí)現(xiàn).綜合實(shí)現(xiàn)的總面積為0.669 759 mm2(SRAM的面積為0.052 924 mm2,邏輯資源的面積為0.616 835 mm2).為了進(jìn)行不同工藝下的面積對(duì)比,將邏輯資源的面積換算成等效邏輯門的數(shù)量(本實(shí)驗(yàn)綜合環(huán)境下單位邏輯門的面積為0.55 μm2),換算后的等效邏輯門數(shù)量(gate count,GC)計(jì)算式為
綜合得到的最大頻率為724 MHz,功耗為48.2 mW.作為對(duì)比,本研究同時(shí)實(shí)現(xiàn)分離MCM結(jié)構(gòu),該結(jié)構(gòu)在Fan等[10]研究的基礎(chǔ)上增加DCT-II變換類型,將DCT-II與DST-VII/DCT-VIII變換核分離實(shí)現(xiàn),并將最大尺寸擴(kuò)展到64,同樣采用所提轉(zhuǎn)置存儲(chǔ)器,將時(shí)鐘頻率約束在724 MHz,在同一環(huán)境下進(jìn)行綜合.綜合得到的NGC=1 135.7 ×103,功耗為95.4 mW.可見,相比分離的MCM計(jì)算結(jié)構(gòu),本研究的統(tǒng)一結(jié)構(gòu)在同條件下可以減少1.3%的面積和49.5%的功耗.因?yàn)榻y(tǒng)一的計(jì)算結(jié)構(gòu)可以發(fā)揮MCM的優(yōu)勢(shì),最大化的共享中間計(jì)算結(jié)果,并且共享一部分寄存器,所以在功耗上得到比較大的改善;又因?yàn)榻y(tǒng)一結(jié)構(gòu)需要額外生成一些選擇邏輯,所以在面積上的改善并不明顯.
如表1所示為基于ASIC設(shè)計(jì)的關(guān)鍵參數(shù),將本研究的實(shí)驗(yàn)結(jié)果與其他相關(guān)文獻(xiàn)的實(shí)驗(yàn)結(jié)果進(jìn)行比對(duì),包括HEVC標(biāo)準(zhǔn)和VVC標(biāo)準(zhǔn)的相關(guān)研究成果.表中,F(xiàn)為最大頻率,H為該系統(tǒng)的并行度,P為功耗.文獻(xiàn)[10]實(shí)現(xiàn)DST-VII/DCT-VIII變換核,得出結(jié)論:基于MCM實(shí)現(xiàn)的結(jié)構(gòu)相比直接使用乘法器的結(jié)構(gòu)在面積上節(jié)省了11.4%,在功耗上節(jié)省了9.9%.在相同并行度下,本研究的NGC是文獻(xiàn)[10]的2.26倍,原因是文獻(xiàn)[10]沒有實(shí)現(xiàn)最大尺寸為64的DCT-II變換核,DCT-II變換核的面積大約為DST-VII/DCT-VIII變換核的1.30倍,因此文獻(xiàn)[10]的面積與本研究對(duì)照實(shí)現(xiàn)的分離MCM結(jié)構(gòu)基本一致.本研究實(shí)現(xiàn)的統(tǒng)一結(jié)構(gòu)在功耗上得到比較大的改善.文獻(xiàn)[13]與本研究都實(shí)現(xiàn)了3種變換類型,F(xiàn)arhat等[13]提出的結(jié)構(gòu)基于通用乘法器實(shí)現(xiàn),文獻(xiàn)[13]的計(jì)算邏輯是根據(jù)不同的變換類型和尺寸來選擇送入乘法器的變換矩陣與輸入數(shù)據(jù)進(jìn)行計(jì)算.文獻(xiàn)[13]的并行度為1 像素/周期,資源的利用率很高,面積也較小.從吞吐率的角度分析,文獻(xiàn)[13]不支持流水線處理,因此在吞吐率上低于本研究.在28 nm的工藝下,本研究實(shí)現(xiàn)結(jié)構(gòu)的最大頻率高于文獻(xiàn)[13].文獻(xiàn)[14]同樣實(shí)現(xiàn)3種變換類型并改進(jìn)傳統(tǒng)MCM的結(jié)構(gòu),通過選擇器對(duì)MCM結(jié)構(gòu)進(jìn)行重配置從而復(fù)用部分計(jì)算資源.文獻(xiàn)[14]沒有實(shí)現(xiàn)最大尺寸為64的變換塊,且在并行度為8 像素/周期的前提下實(shí)現(xiàn)面積僅略低于文獻(xiàn)[10].文獻(xiàn)[17]、[21]的實(shí)驗(yàn)結(jié)果基于HEVC得出.Meher等[17]提出的DCT-II變換核是尺寸復(fù)用的蝶形結(jié)構(gòu),本研究對(duì)于DCT-II變換核的實(shí)現(xiàn)也采用這樣的方法,并結(jié)合DST-VII/DCT-VIII變換核的特性進(jìn)行統(tǒng)一設(shè)計(jì).Shabani等[21]提出的一維變化結(jié)構(gòu)改進(jìn)傳統(tǒng)MCM方法,采用Muxed-MCM結(jié)構(gòu),生成的SAU具有一定的可重用性和可擴(kuò)展性,但該結(jié)構(gòu)隨著常量的增加難以通過算法進(jìn)行優(yōu)化.
表1 基于ASIC實(shí)現(xiàn)的二維變換硬件設(shè)計(jì)對(duì)比Tab.1 Comparison of 2D transform hardware designs based on ASIC
轉(zhuǎn)置存儲(chǔ)器硬件設(shè)計(jì)的對(duì)比如表2所示.表中,NB為存儲(chǔ)體個(gè)數(shù),D為每個(gè)存儲(chǔ)體的深度,W為每個(gè)存儲(chǔ)體的位寬.本研究所提轉(zhuǎn)置存儲(chǔ)器結(jié)構(gòu)基于雙口SRAM實(shí)現(xiàn).Garrido等[8]提出的結(jié)構(gòu)將轉(zhuǎn)置存儲(chǔ)器排列成1個(gè)矩陣的形式,在4個(gè)并行度下使用16個(gè)存儲(chǔ)體,本研究所提結(jié)構(gòu)采用對(duì)角線式的存儲(chǔ)結(jié)構(gòu)實(shí)現(xiàn)并入、并出,使用4個(gè)存儲(chǔ)體就可以實(shí)現(xiàn)4個(gè)并行度的設(shè)計(jì).文獻(xiàn)[8]沒有對(duì)高頻置零進(jìn)行優(yōu)化,按照本研究設(shè)計(jì)方法深度為256.Fan等[10]提出的轉(zhuǎn)置存儲(chǔ)器結(jié)構(gòu)基于乒乓讀寫的方式實(shí)現(xiàn),該結(jié)構(gòu)將32×32的矩陣組成1組輸入實(shí)現(xiàn)流水.DST-VII、DCT-VIII中大小為32的變換存在高頻置零,實(shí)際上最大的中間結(jié)果只有32×16個(gè)有效數(shù)據(jù),因此采用本研究所提讀寫指針的方式根據(jù)式(5)計(jì)算深度為32即可實(shí)現(xiàn)流水.
表2 轉(zhuǎn)置存儲(chǔ)器硬件設(shè)計(jì)對(duì)比Tab.2 Comparison of transpose memory hardware designs
本研究提出統(tǒng)一的二維變換硬件結(jié)構(gòu),支持VVC的DCT-II、DST-VII、DCT-VIII變換類型以及所有大小的變換尺寸.該結(jié)構(gòu)基于Hcub算法優(yōu)化后的MCM實(shí)現(xiàn),對(duì)所有變換類型和尺寸設(shè)計(jì)共用的MCM計(jì)算單元,相比直接使用乘法器的方案和使用分離的MCM計(jì)算結(jié)構(gòu)的方案可以節(jié)省面積和功耗.在二維變換的流水線設(shè)計(jì)上,基于32個(gè)并行度實(shí)現(xiàn)全流水結(jié)構(gòu),設(shè)計(jì)支持流水線處理的轉(zhuǎn)置存儲(chǔ)器,支持混合塊的流水輸入,結(jié)合高頻置零對(duì)轉(zhuǎn)置存儲(chǔ)器的大小與處理時(shí)間進(jìn)行優(yōu)化,在一定的初始延時(shí)后每個(gè)周期都會(huì)得到32個(gè)變換結(jié)果.對(duì)于整個(gè)二維變換而言,非64×64的變換塊的延遲為81個(gè)時(shí)鐘周期,64×64的變換塊的延遲為145個(gè)時(shí)鐘周期.本研究所提轉(zhuǎn)置存儲(chǔ)器基于雙口SRAM實(shí)現(xiàn),使用對(duì)角線存儲(chǔ)方式并設(shè)計(jì)統(tǒng)一的數(shù)據(jù)映射方案,采用讀寫指針的方式并配合存儲(chǔ)塊信息的FIFO來實(shí)現(xiàn)轉(zhuǎn)置存儲(chǔ).相比于乒乓存儲(chǔ)的結(jié)構(gòu),本研究的方案能夠結(jié)合VVC高頻置零的特性減少一半的存儲(chǔ)空間.本研究所提結(jié)構(gòu)可以滿足VVC硬件編碼高性能的需求,比傳統(tǒng)方案的面積和功耗更小.由于VVC變換核與變換尺寸的增加,計(jì)算邏輯需要的資源也大幅度增加,若想追求更小的面積,可以考慮使用通用乘法器的結(jié)構(gòu)并降低并行度滿足輕量化的需求.