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