Motion JPEG視頻壓縮IP核的設(shè)計與實現(xiàn)
階段3:消耗3個時鐘周期 完成9位有符號數(shù)的加減運算,結(jié)果為9位有符號數(shù)。一般的9位有符號數(shù)的加減的結(jié)果應(yīng)該用10位有符號數(shù)來表示,因為進位操作或借位操作導(dǎo)致結(jié)果的位數(shù)從9位增長到10位。但是階段3的輸入序列是由9位有符號數(shù)乘以固定系數(shù)得到的,且固定系數(shù)的值都小于0.5,所以序列之間的加減操作不會引起進位操作或借位操作,9位有符號數(shù)足夠表示加減操作的結(jié)果序列。
本文引用地址:http://www.ex-cimer.com/article/84771.htm階段4:消耗3個時鐘周期完成9位有符號數(shù)的加減運算,結(jié)果為10位有符號數(shù),也是第一級一維離散余弦變換的最終結(jié)果。
2.1.2并行矩陣轉(zhuǎn)置模塊
常用的8×8矩陣轉(zhuǎn)置的方法是,先把64個矩陣元素按行掃描的順序一個個串行輸入到一個RAM(64個存儲空間)中,然后按轉(zhuǎn)置后的矩陣的行掃描順序把 RAM中64個矩陣元素逐次輸出。這種方法最少需要128時鐘周期才能完成一個8×8矩陣的轉(zhuǎn)置??煞Q其為串行矩陣轉(zhuǎn)置。串行矩陣轉(zhuǎn)置一次接收一個輸入數(shù)據(jù)與一維離散余弦變換一次產(chǎn)生8個輸入數(shù)據(jù)在傳輸速率上不匹配,第一級一維離散余弦變換模塊需要在串行矩陣轉(zhuǎn)置工作期間等待,當串行矩陣轉(zhuǎn)置完成后再產(chǎn)生新的一維離散余弦變換系數(shù)并傳遞給串行矩陣轉(zhuǎn)置模塊。這也是二維離散余弦變換難以設(shè)計為全并行的原因。
本文提出了一種新的矩陣轉(zhuǎn)置方法,稱為其并行矩陣轉(zhuǎn)置。用8個RAM(每個RAM有8個存儲空間)代替一個RAM(有64個存儲空間),再增加兩個8通道的旋轉(zhuǎn)多路器,同時配合對8個RAM的變址讀操作。一次輸入原始矩陣的一列,20個周期后完成一個8×8矩陣的轉(zhuǎn)置。比串行矩陣轉(zhuǎn)置節(jié)省至少100個時鐘周期。
并行矩陣轉(zhuǎn)置模塊的寫操作:每個時鐘周期變換一次RAM_BANK的接入順序,每個RAM_BANK每次寫入地址隨時鐘周期而順序遞增從,0增加到7,每次增加1。
并行矩陣轉(zhuǎn)置模塊的讀操作:每個時鐘周期變換一次RAM_BANK的輸出順序,每個RAM_BANK每次讀出地址隨時鐘周期而變化,且同一時鐘周期內(nèi)不同的RAM_BANK有不同的讀出地址。
在實際設(shè)計時,通過接入旋轉(zhuǎn)多路器實現(xiàn)每個時鐘周期改變第一級一維離散余弦變換輸出端與RAM_BANK的接入順序,通過輸出旋轉(zhuǎn)多路器實現(xiàn)每個時鐘周期改變一次RAM_BANK與第二級一維離散余弦變換輸入端的接入順序。這兩個旋轉(zhuǎn)多路器,都是以8個時鐘周期為1個旋轉(zhuǎn)周期,在1個旋轉(zhuǎn)周期內(nèi)實現(xiàn)8個通道的旋轉(zhuǎn)接通。每個RAM_BANK的讀寫地址都依靠同一個地址產(chǎn)生器產(chǎn)生,在一個時鐘周期內(nèi)所有RAM_BANK的寫地址相同,讀地址不同。
在設(shè)計具體的硬件電路時,一個RAM_BANK就是一個雙端口RAM,為提高工作效率,每個RAM_BANK實際含有32個存儲單元而不是理論上的8個存儲單元。這樣一個RAM_BANK就可以分為4個區(qū)塊,每個區(qū)塊8個存儲單元,在寫入一個區(qū)塊的同時可以讀出前一個已經(jīng)寫入數(shù)據(jù)的區(qū)塊,形成一種乒乓緩沖的結(jié)構(gòu),用電路面積換取運行效率。整個矩陣轉(zhuǎn)置模塊是一個13階的流水線結(jié)構(gòu),每階流水耗用一個時鐘周期。
圖5是并行矩陣轉(zhuǎn)置模塊在ModelSim仿真軟件中的時序仿真結(jié)果,仿真的時鐘頻率設(shè)定為100Mhz。從輸入數(shù)據(jù)到開始得到結(jié)果,中間間隔了13個時鐘周期。
2.1.3第二級一維離散余弦變換模塊
第二級一維離散余弦變換模塊在計算結(jié)構(gòu)上與第一級一維離散余弦變換模塊一樣也分為4個階段,完成一次運算耗用13個時鐘周期,每個時鐘周期完成一個流水線操作,實際的電路結(jié)構(gòu)是13階的流水線結(jié)構(gòu)。
階段1:消耗3個時鐘周期,完成10位有符號數(shù)的加減運算,結(jié)果為11位有符號數(shù)。
階段2:消耗4個時鐘周期,完成11位有符號數(shù)的固定系數(shù)乘法。
這個階段與第一級一維離散余弦變換模塊的有所不同,沒有使用嵌入式乘法單元,因為完成一個11位有符號數(shù)的固定系數(shù)乘法需要2個嵌入式乘法單元并聯(lián),完成整個階段28個乘法操作需要56個嵌入式乘法單元,這占整個芯片嵌入式乘法單元的80%。一個模塊過多的耗用嵌入式乘法單元會造成Cyclone II芯片在布局布線時跨越區(qū)域過大,從而導(dǎo)致布線延時過大。
第二級一維離散余弦變換模塊在這個階段中采用Altera的Mega function中的PARALLEL_ADD模塊實現(xiàn)固定系數(shù)乘法操作。PARALLEL_ADD模塊可以在4個時鐘周期內(nèi)完成8個16位有符號數(shù)的加法操作。11位有符號數(shù)的乘法轉(zhuǎn)化為8個以內(nèi)的11位有符號數(shù)的加法。固定系數(shù)都小于0.5,所以PARALLEL_ADD模塊的結(jié)果可取11位。上述方法可理解為用并行加法來實現(xiàn)了一個簡單的陣列乘法器。
linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)
評論