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