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