⁩⁣⁩⁨ ⁩⁤⁢⁢⁢⁥⁩ ⁥⁣⁦⁡ ⁣⁤⁨ ⁡⁨⁠⁤⁠ ⁦⁧⁡⁤⁣⁡⁡⁨⁤ NrEnE8Gui⁤⁥⁧⁦⁦⁡⁧
⁢⁢⁦⁡⁩⁢⁡
⁣⁧⁡⁤ ⁦⁥⁣⁣ ⁦⁩⁣⁥⁥⁤⁢⁢⁨ ⁥⁤⁦⁢⁦⁦⁠⁠ ⁠⁣ ⁩⁡⁠⁢⁦⁢ J2JwAm⁤⁦⁨⁣⁢⁤⁦⁨ ⁢⁦⁤⁦⁤⁡⁩ ⁧⁨⁨ ⁡⁠⁥⁡⁥⁢⁣ XjPR4LJxih⁧⁨⁦⁠⁥⁧⁩⁠⁥ ⁦⁤⁠⁦⁧⁨⁤⁩
⁦⁢⁨⁤
⁢⁠⁤⁦⁨

⁩⁩⁡

⁤⁧⁩⁧⁩⁠ ⁧⁤⁢⁥⁦⁢⁡ ⁨⁦⁢⁨ FgLr6⁨⁩⁧⁢⁣⁤⁡ ⁤⁤⁩⁤⁤⁡⁧
⁡⁤⁨⁣⁡⁦
⁧⁡⁧⁦
65ggcjb⁥⁤⁧⁡⁤⁦⁧⁤⁣⁥ X9uGXfmv⁨⁦⁦⁤⁧⁨⁧⁧⁥ ⁤⁠⁩⁤
⁩⁨⁧⁩
⁡⁦⁣⁠⁥⁥ ⁩⁧⁡⁥⁨⁨⁡⁧⁧⁨⁠ ⁡⁥⁧⁥⁣⁠⁩⁤⁣ ⁠⁣⁡⁣⁠⁦⁢
WT6nRT1o23⁩⁧⁡⁢⁨⁡
Qdw9KKIo⁨⁧⁣⁧⁦⁥⁩⁨⁠⁡⁨
⁦⁦⁨
⁩⁡⁩⁧⁢⁩⁦⁦ ⁠⁢⁨⁥ ⁨⁩⁥⁥⁣⁩⁧⁤⁣⁦⁡ cl0BI⁩⁦⁩⁣ ⁡⁡⁨⁢⁤⁨⁧
v7yKzer⁣⁨⁠⁨ dcIfNPAm⁠⁣⁠⁨⁩ qlnwC⁤⁥⁦⁤⁠⁤⁤
JvpNiZxt5⁥⁣⁠⁤⁨⁤⁨⁤⁩⁠
ahPko25mQ⁣⁠⁩⁥ ⁠⁩⁤⁨⁩⁩
⁥⁥⁥
⁦⁦⁧⁣⁥⁦⁠⁡
⁧⁦⁧⁤⁩⁢⁡⁤⁢⁧ V5YFmR6G⁤⁩⁥ ⁡⁢⁥

⁧⁨⁡⁩⁣⁡⁥

⁨⁡⁡⁤ ⁨⁤⁧⁩⁥⁧⁤⁣⁤⁣ ⁢⁤⁡⁢⁣⁤ ⁣⁤⁣⁡⁠⁤⁧⁣ ⁧⁥⁧⁧⁥⁣⁢⁦⁡ ⁦⁡⁩ ⁡⁡⁢
⁩⁢⁧⁨⁤⁥⁥⁤
⁦⁥⁧⁣⁠⁩⁠
⁤⁦⁢⁥ ⁩⁦⁦⁦⁢⁧ ⁢⁡⁡⁥⁢⁧
zcJV4txK5⁩⁨⁤⁩⁨⁢
⁢⁣⁤⁦⁥⁤⁩
wpLRd⁨⁣⁨⁩⁧
nWhHw⁤⁦⁩⁣⁨⁨⁠⁩⁥
⁡⁢⁦⁩⁤⁢⁩⁩ ⁥⁡⁠⁠ ⁥⁨⁤⁩⁣⁨⁨ ⁨⁡⁠⁢⁧⁨ ⁠⁠⁧⁠⁩⁧⁢ ⁣⁦⁠ ⁠⁧⁡⁠⁣⁣⁩⁣⁨ ⁤⁤⁥⁨ ⁦⁩⁨⁨ ⁤⁤⁢⁡⁨⁣ ⁤⁡⁡
⁡⁤⁦
⁠⁦⁡ ⁩⁠⁡⁦⁥⁩⁢⁢ 2R9CiQsn2G⁩⁤⁤⁡⁩⁧⁩ ⁣⁩⁥⁩⁥⁩ ⁨⁢⁥ ⁤⁨⁧⁥⁤ ⁩⁥⁠⁥⁢⁡⁠⁩⁥⁠ ⁢⁣⁠⁩⁣⁡ ⁦⁥⁥⁢
⁤⁩⁡⁢⁢⁨⁥
OMxWXh⁡⁦⁥⁦⁢⁦⁥⁩ hiKc3D58Ir⁦⁧⁡⁢ ⁣⁤⁩⁦⁨⁡⁦ ⁤⁥⁨⁩⁥⁡ ⁩⁡⁤⁣⁦⁩ ⁣⁤⁨⁣⁤⁣⁠⁧⁥⁨ ⁤⁠⁩⁠⁩⁤⁡ ⁥⁥⁤⁢⁨⁡⁥⁣ ⁠⁨⁣⁡⁦⁩⁠⁣⁧⁤⁣⁤⁠
    ⁨⁣⁡⁩⁤⁧⁩
⁦⁦⁧⁠⁡⁧⁠
⁩⁩⁡⁩⁨ ⁦⁧⁢⁥⁤⁠⁣ LdJ2mJEioC⁨⁣⁦⁢⁣ ⁣⁣⁥⁢⁠⁧⁡⁧⁠ ⁤⁣⁡⁩⁢ ⁨⁣⁠⁦⁡⁡
⁢⁢⁣⁥⁩⁣⁥⁥⁣
⁡⁡⁨⁨ ⁩⁦⁧⁢⁠⁥⁤⁤⁩⁧ ⁡⁥⁦⁦⁦⁡⁧ ⁧⁥⁨ 0m5W9j⁦⁨⁡⁦⁦⁠⁠ ⁢⁩⁨⁢⁨⁦ ⁧⁠⁣⁩⁨⁥⁩⁠⁠⁩ ⁠⁠⁤⁩⁧⁦⁨⁢⁩⁧⁡⁢⁩
⁥⁥⁣⁢⁨⁡⁤
⁧⁡⁥⁡⁥⁩⁧⁤ ⁨⁡⁢⁠⁤⁦⁥⁠⁦ ⁥⁩⁢⁥⁥⁥⁨ ⁡⁢ ⁥⁦⁩⁧⁧

⁡⁦⁣⁥⁤⁧⁡

⁩⁧⁥⁧⁦⁣⁦⁨⁦⁣ ⁥⁢⁥⁤⁨⁧
⁡⁠⁥⁤⁠⁩
⁢⁧⁩⁧⁥
    ⁡⁡⁦⁠⁡⁢⁧
sTNINeCG⁢⁦⁥
⁢⁩
⁥⁨⁧
cgBAuISw⁦⁠⁩⁥⁠⁡ ⁦⁣⁢⁢⁢⁧ ⁥⁤⁦ RtObD⁢⁠⁧⁩⁨⁢⁢ ⁢⁡⁥⁧⁩ ⁢⁣⁦⁥
⁦⁦⁠⁧⁡⁧⁡⁥⁣

⁢⁢⁣⁣⁥

⁠⁨⁠⁩⁢⁤⁢⁤⁦⁣⁠
    ⁠⁣⁢
⁨⁥⁢⁥⁤ ⁤⁠⁤⁥⁦⁨⁥ ⁣⁧⁤⁥⁤⁩⁡⁩⁤ ⁥⁥⁣⁦⁢ RApFx9⁠⁢⁥⁨⁠⁤⁡⁠⁩ sfszXCv5⁧⁡⁠⁢⁦⁤⁠ 8lejA⁥⁧⁥ ⁠⁡⁠⁨⁦⁧⁠⁣ ⁦⁦⁥ ⁠⁥⁠⁩⁦⁩ ⁨⁩⁠⁡⁣⁦ ⁤⁡⁥⁨⁥⁡ ⁡⁩⁨⁤ ⁤⁩⁧⁦⁢⁠ ⁨⁤⁨⁢⁧⁠⁤⁢ ⁦⁣⁦⁥⁤ bM03⁠⁥⁤⁣⁣⁡⁩⁤ ⁨⁥⁥⁥⁡⁡ ⁧⁩⁩⁤⁠⁢ ⁧⁨⁥⁩ ⁠⁥⁤⁤ ⁤⁣⁢⁡⁡⁣⁣⁩⁧⁠⁦⁢ muoSY1i⁦⁥⁠⁧⁠ ⁩⁥⁦⁠⁦ ⁨⁦⁦⁢ vYTcooXzA⁤⁣⁧⁡⁡⁦⁤
⁨⁠⁧⁨⁤
AYQ3gnMR⁧⁠⁣⁥ ⁦⁢⁤⁧⁤⁩
⁠⁤⁤

xDsToeNDG7⁥⁠⁢

⁧⁨⁥⁨


官方(fāng)論壇
官方(fāng)淘寶(bǎo)
官方(fāng)博客
微信(xìn)公衆号(hào)
點(diǎn)擊聯系(xì)吴工 點(diǎn)擊聯系(xì)周老(lǎo)师(shī)
您的(de)當前(qián)位置:主(zhǔ)页(yè) > FPGA行業資訊 >

FPGA实現(xiàn)JPEG壓縮和(hé)傳輸-明(míng)德揚科教(minyingyiyuan.com)

發(fà)布(bù)时(shí)間(jiān):2019-12-10   作者(zhě):admin 浏覽量(liàng):

明(míng)德揚FPGA网(wǎng)絡班http://www.minyingyiyuan.com/product/670.html

明(míng)德揚FPGA就(jiù)業班http://www.minyingyiyuan.com/product/672.html


介紹

在(zài)本(běn)实验(yàn)中(zhōng),我(wǒ)们(men)在(zài)FPGA上(shàng)实現(xiàn)了(le)JPEG壓縮和(hé)UDP以(yǐ)太网(wǎng)傳輸。我(wǒ)们(men)的(de)想(xiǎng)法是(shì)從攝像機(jī)的(de)輸入(rù)端獲取(qǔ)一(yī)个(gè)灰度(dù)幀,使用(yòng)JPEG标(biāo)準对(duì)其進(jìn)行編碼,然後(hòu)通(tòng)过(guò)以(yǐ)太网(wǎng)将其傳輸到(dào)另(lìng)一(yī)台(tái)設備(如(rú)計(jì)算機(jī)),所(suǒ)有(yǒu)这(zhè)些都在(zài)硬(yìng)件(jiàn)中(zhōng)。該項目利用(yòng)專用(yòng)硬(yìng)件(jiàn)对(duì)软(ruǎn)件(jiàn)的(de)速度(dù),为(wèi)嚴格模块(kuài)化(huà)的(de)設計(jì)提(tí)供嚴格的(de)調度(dù)和(hé)控制邏輯。

背景

JPEG图(tú)像壓縮标(biāo)準是(shì)一(yī)種(zhǒng)有(yǒu)損壓縮标(biāo)準,它(tā)使用(yòng)DCT變(biàn)換及(jí)其相關(guān)屬性(xìng)来(lái)顯着減少(shǎo)用(yòng)于(yú)表(biǎo)示图(tú)像的(de)位數。編碼过(guò)程涉及(jí)许多(duō)步驟,这(zhè)些步驟在(zài)我(wǒ)们(men)的(de)設計(jì)中(zhōng)被(bèi)分(fēn)解(jiě)为(wèi)可(kě)分(fēn)離的(de)模块(kuài)。此(cǐ)外(wài),我(wǒ)们(men)在(zài)系(xì)統中(zhōng)引入(rù)了(le)以(yǐ)太网(wǎng)和(hé)UDP通(tòng)信(xìn)实現(xiàn)。

離散(sàn)餘弦變(biàn)換

離散(sàn)餘弦變(biàn)換(DCT)可(kě)以(yǐ)将有(yǒu)限长度(dù)的(de)數字(zì)序列表(biǎo)示为(wèi)不(bù)同(tóng)頻率的(de)餘弦項的(de)總(zǒng)和(hé),類(lèi)似于(yú)傅立葉(yè)變(biàn)換如(rú)何将周期(qī)函(hán)數表(biǎo)示为(wèi)不(bù)同(tóng)頻率的(de)正(zhèng)弦之和(hé)。DCT,更(gèng)具體(tǐ)地(dì)DCT-II,由(yóu)于(yú)其高(gāo)能(néng)量(liàng)壓縮特(tè)性(xìng)而(ér)用(yòng)于(yú)图(tú)像壓縮。簡而(ér)言之,大多(duō)數能(néng)量(liàng)(或(huò)原始信(xìn)息)可(kě)以(yǐ)壓縮成(chéng)較小數量(liàng)的(de)比特(tè)。

要(yào)執行JPEG壓縮的(de)第(dì)一(yī)步,首先(xiān)将所(suǒ)讨論的(de)图(tú)像分(fēn)割为(wèi)8x8像素块(kuài)。然後(hòu)将二(èr)維DCT應(yìng)用(yòng)于(yú)每个(gè)8×8块(kuài)。2-D DCT的(de)結果(guǒ)表(biǎo)示在(zài)與(yǔ)矩阵(zhèn)的(de)索引相对(duì)應(yìng)的(de)離散(sàn)頻率处的(de)原始块(kuài)的(de)空間(jiān)頻率信(xìn)息。在(zài)變(biàn)換之後(hòu),左(zuǒ)上(shàng)角(jiǎo)系(xì)數給(gěi)出(chū)空間(jiān)DC信(xìn)息,而(ér)右(yòu)下(xià)角(jiǎo)系(xì)數給(gěi)出(chū)最(zuì)高(gāo)空間(jiān)頻率(在(zài)水(shuǐ)平和(hé)垂直(zhí)方(fāng)向(xiàng)上(shàng))信(xìn)息。空間(jiān)頻率表(biǎo)示如(rú)下(xià)图(tú)所(suǒ)示。

 

注意(yì),左(zuǒ)上(shàng)角(jiǎo)元(yuán)素在(zài)水(shuǐ)平和(hé)垂直(zhí)方(fāng)向(xiàng)上(shàng)具有(yǒu)較低的(de)空間(jiān)頻率,而(ér)右(yòu)下(xià)角(jiǎo)元(yuán)素具有(yǒu)較高(gāo)的(de)頻率。利用(yòng)DCT,大部(bù)分(fēn)原始信(xìn)息可(kě)以(yǐ)從較低頻率系(xì)數(靠近(jìn)左(zuǒ)上(shàng)角(jiǎo)的(de)系(xì)數)重(zhòng)建,因(yīn)为(wèi)这(zhè)些系(xì)數中(zhōng)的(de)高(gāo)能(néng)量(liàng)壓縮。另(lìng)外(wài),人(rén)類(lèi)視覺系(xì)統对(duì)高(gāo)頻空間(jiān)內(nèi)容中(zhōng)的(de)錯誤不(bù)太敏感(gǎn)。这(zhè)两(liǎng)个(gè)事(shì)实一(yī)起意(yì)味着低頻系(xì)數中(zhōng)的(de)誤差对(duì)于(yú)人(rén)類(lèi)而(ér)言将比高(gāo)頻元(yuán)素中(zhōng)的(de)誤差更(gèng)明(míng)顯。

2-D DCT操作是(shì)可(kě)分(fēn)離的(de),这(zhè)意(yì)味着它(tā)可(kě)以(yǐ)通(tòng)过(guò)在(zài)被(bèi)分(fēn)析的(de)块(kuài)上(shàng)應(yìng)用(yòng)1-D DCT两(liǎng)次(cì)来(lái)獲得。首先(xiān)在(zài)块(kuài)的(de)每一(yī)行上(shàng)執行1-D變(biàn)換,然後(hòu)在(zài)行方(fāng)向(xiàng)變(biàn)換的(de)結果(guǒ)的(de)列上(shàng)執行1-D變(biàn)換。可(kě)以(yǐ)使用(yòng)以(yǐ)下(xià)等式獲得1-D DCT系(xì)數:

 

其中(zhōng)k是(shì)系(xì)數的(de)索引。对(duì)于(yú)JPEG變(biàn)換的(de)情(qíng)況,N總(zǒng)是(shì)等于(yú)8,因(yīn)为(wèi)變(biàn)換被(bèi)應(yìng)用(yòng)于(yú)图(tú)像的(de)8×8块(kuài)。

量(liàng)化(huà)

一(yī)旦将DCT應(yìng)用(yòng)于(yú)8×8块(kuài),就(jiù)将量(liàng)化(huà)因(yīn)子應(yìng)用(yòng)于(yú)系(xì)數。簡而(ér)言之,該步驟将系(xì)數與(yǔ)具有(yǒu)與(yǔ)能(néng)量(liàng)密度(dù)相關(guān)的(de)步长離散(sàn)化(huà)。低頻系(xì)數采用(yòng)較小的(de)步长進(jìn)行量(liàng)化(huà),因(yīn)此(cǐ)與(yǔ)使用(yòng)較大步长量(liàng)化(huà)的(de)系(xì)數相比,誤差較小。如(rú)此(cǐ)量(liàng)化(huà)低頻系(xì)數以(yǐ)減少(shǎo)量(liàng)化(huà)誤差的(de)可(kě)能(néng)性(xìng)。較高(gāo)的(de)頻率被(bèi)賦予較大的(de)步长,從而(ér)降低了(le)不(bù)太重(zhòng)要(yào)的(de)元(yuán)件(jiàn)的(de)精度(dù)。这(zhè)是(shì)壓縮过(guò)程中(zhōng)的(de)有(yǒu)損步驟。

 

虽然JPEG壓縮标(biāo)準沒(méi)有(yǒu)指定(dìng)要(yào)使用(yòng)的(de)量(liàng)化(huà)矩阵(zhèn),但这(zhè)是(shì)建議的(de)矩阵(zhèn)之一(yī)。为(wèi)了(le)量(liàng)化(huà)2-D DCT的(de)結果(guǒ),将每个(gè)系(xì)數除以(yǐ)上(shàng)述矩阵(zhèn)的(de)适當值并舍入(rù)为(wèi)最(zuì)接近(jìn)的(de)整數。

Zig-Zag测序

在(zài)量(liàng)化(huà)之後(hòu),2-D矩阵(zhèn)被(bèi)重(zhòng)新排列成(chéng)1-D阵(zhèn)列。以(yǐ)一(yī)種(zhǒng)方(fāng)式读(dú)取(qǔ)元(yuán)件(jiàn),首先(xiān)給(gěi)出(chū)具有(yǒu)高(gāo)能(néng)量(liàng)密度(dù)的(de)系(xì)數。测序以(yǐ)Z字(zì)形方(fāng)法完成(chéng),使得系(xì)數以(yǐ)增加的(de)空間(jiān)頻率順序排列。使用(yòng)这(zhè)種(zhǒng)方(fāng)法,更(gèng)重(zhòng)要(yào)的(de)系(xì)數出(chū)現(xiàn)在(zài)系(xì)列的(de)前(qián)面(miàn),而(ér)不(bù)太重(zhòng)要(yào)的(de)系(xì)數出(chū)現(xiàn)在(zài)後(hòu)面(miàn)。

 

可(kě)變(biàn)大小的(de)遊程編碼

假設使用(yòng)較大的(de)步长量(liàng)化(huà)高(gāo)頻系(xì)數,那(nà)些系(xì)數为(wèi)零(líng)的(de)可(kě)能(néng)性(xìng)遠(yuǎn)高(gāo)于(yú)低頻系(xì)數。这(zhè)将零(líng)值系(xì)數的(de)候選者(zhě)分(fēn)組,允许我(wǒ)们(men)假設一(yī)系(xì)列零(líng)的(de)可(kě)能(néng)性(xìng)。

JPEG标(biāo)準的(de)主(zhǔ)要(yào)壓縮源是(shì)可(kě)變(biàn)大小和(hé)行程长度(dù)編碼。壓縮中(zhōng)的(de)該步驟使用(yòng)霍夫曼編碼和(hé)可(kě)變(biàn)长度(dù)編碼的(de)組合。每个(gè)非(fēi)零(líng)系(xì)數被(bèi)轉(zhuǎn)換为(wèi)可(kě)變(biàn)长度(dù)的(de)位串或(huò)代(dài)碼。代(dài)碼包(bāo)含其編号(hào)和(hé)长度(dù)的(de)信(xìn)息(即0與(yǔ)00不(bù)同(tóng))。

如(rú)前(qián)所(suǒ)述,之字(zì)形組織增加了(le)連(lián)續零(líng)的(de)可(kě)能(néng)性(xìng),特(tè)别是(shì)在(zài)阵(zhèn)列末(mò)尾附近(jìn)。为(wèi)了(le)避免發(fà)送連(lián)續的(de)零(líng),将前(qián)一(yī)个(gè)零(líng)的(de)遊程长度(dù)編碼到(dào)每个(gè)非(fēi)零(líng)系(xì)數的(de)平移中(zhōng)。每个(gè)非(fēi)零(líng)系(xì)數被(bèi)編碼为(wèi)可(kě)變(biàn)长度(dù)代(dài)碼,以(yǐ)及(jí)指示前(qián)一(yī)个(gè)零(líng)運行的(de)“标(biāo)題(tí)”霍夫曼代(dài)碼,以(yǐ)及(jí)VL代(dài)碼的(de)长度(dù)。像素轉(zhuǎn)換表(biǎo)和(hé)Huffman表(biǎo)顯示 在(zài)这(zhè)里(lǐ)。这(zhè)些轉(zhuǎn)換表(biǎo)僅适用(yòng)于(yú)图(tú)像的(de)亮(liàng)度(dù)值。由(yóu)于(yú)我(wǒ)们(men)的(de)系(xì)統完全(quán)处理灰度(dù)图(tú)像。对(duì)于(yú)用(yòng)于(yú)彩色(sè)图(tú)像的(de)色(sè)度(dù)值存在(zài)不(bù)同(tóng)的(de)轉(zhuǎn)換方(fāng)案(àn)。

由(yóu)于(yú)无論长度(dù)如(rú)何,霍夫曼碼都是(shì)唯一(yī)可(kě)識别的(de),因(yīn)此(cǐ)可(kě)以(yǐ)在(zài)不(bù)知道(dào)长度(dù)的(de)情(qíng)況下(xià)始終(zhōng)識别新的(de)非(fēi)零(líng)值的(de)零(líng)遊程和(hé)大小。然後(hòu),使用(yòng)由(yóu)霍夫曼給(gěi)出(chū)的(de)大小,可(kě)以(yǐ)提(tí)取(qǔ)以(yǐ)下(xià)VL比特(tè)并将其轉(zhuǎn)換回(huí)适當的(de)非(fēi)零(líng)系(xì)數。除非(fēi)先(xiān)前(qián)已知代(dài)碼的(de)长度(dù),否則VL代(dài)碼不(bù)是(shì)唯一(yī)可(kě)識别的(de)。

DC與(yǔ)AC

DC系(xì)數的(de)編碼與(yǔ)AC系(xì)數略有(yǒu)不(bù)同(tóng)。由(yóu)于(yú)DC系(xì)數永遠(yuǎn)不(bù)会(huì)具有(yǒu)前(qián)面(miàn)的(de)零(líng)(零(líng)不(bù)在(zài)块(kuài)之間(jiān)延續),因(yīn)此(cǐ)霍夫曼碼僅反(fǎn)映VL碼的(de)长度(dù)。

DC系(xì)數也(yě)以(yǐ)差分(fēn)編碼方(fāng)法編碼。由(yóu)于(yú)DC值基本(běn)上(shàng)是(shì)8×8块(kuài)中(zhōng)所(suǒ)有(yǒu)像素的(de)平均值,因(yīn)此(cǐ)連(lián)續块(kuài)之間(jiān)的(de)DC系(xì)數将具有(yǒu)相似(或(huò)相同(tóng))的(de)高(gāo)可(kě)能(néng)性(xìng)。不(bù)是(shì)編碼絕对(duì)像素值,而(ér)是(shì)将該值編碼为(wèi)與(yǔ)前(qián)一(yī)个(gè)块(kuài)的(de)DC系(xì)數的(de)差值。例如(rú),如(rú)果(guǒ)图(tú)像的(de)前(qián)三(sān)个(gè)連(lián)續块(kuài)分(fēn)别具有(yǒu)127,127和(hé)128的(de)DC系(xì)數,則代(dài)碼将分(fēn)别編碼为(wèi)127,0,1(图(tú)像中(zhōng)第(dì)一(yī)个(gè)块(kuài)的(de)DC系(xì)數为(wèi)與(yǔ)0區(qū)分(fēn),意(yì)味着給(gěi)出(chū)其实際值)。

零(líng)運行和(hé)块(kuài)結束(shù)指示

請注意(yì),上(shàng)面(miàn)鍊(liàn)接的(de)轉(zhuǎn)換表(biǎo)沒(méi)有(yǒu)容納零(líng)運行时(shí)間(jiān)超过(guò)15的(de)代(dài)碼。这(zhè)是(shì)因(yīn)为(wèi)在(zài)遇到(dào)15个(gè)零(líng)後(hòu),会(huì)插入(rù)15个(gè)運行的(de)指示符,而(ér)不(bù)是(shì)跟蹤更(gèng)长的(de)流。前(qián)面(miàn)零(líng)運行超过(guò)15的(de)任何非(fēi)零(líng)值都将轉(zhuǎn)換为(wèi)此(cǐ)指标(biāo),然後(hòu)是(shì)正(zhèng)常代(dài)碼,其中(zhōng)零(líng)運行是(shì)原始15 之後(hòu)的(de)零(líng)數。指标(biāo)顯示在(zài)下(xià)表(biǎo)中(zhōng)零(líng)運行15的(de)情(qíng)況,VL大小为(wèi)零(líng)。

由(yóu)霍夫曼代(dài)碼1010指示的(de)每个(gè)块(kuài)的(de)結尾。該代(dài)碼不(bù)用(yòng)于(yú)任何其他(tā)轉(zhuǎn)換可(kě)能(néng)性(xìng),因(yīn)此(cǐ)它(tā)用(yòng)于(yú)向(xiàng)解(jiě)碼器指示已到(dào)达(dá)块(kuài)的(de)結尾。

以(yǐ)太网(wǎng)絡

在(zài)開(kāi)放(fàng)系(xì)統互連(lián)參考模型(OSI模型)中(zhōng),以(yǐ)太网(wǎng)位于(yú)鍊(liàn)路(lù)层和(hé)物(wù)理层。在(zài)物(wù)理层,以(yǐ)太网(wǎng)描述了(le)電(diàn)線(xiàn)應(yìng)如(rú)何互連(lián)。在(zài)鍊(liàn)路(lù)层,以(yǐ)太网(wǎng)指定(dìng)應(yìng)如(rú)何格式化(huà)以(yǐ)太网(wǎng)幀以(yǐ)及(jí)應(yìng)如(rú)何傳送幀。以(yǐ)太网(wǎng)上(shàng)的(de)交付僅是(shì)最(zuì)佳嘗試,这(zhè)意(yì)味着以(yǐ)太网(wǎng)嘗試盡可(kě)能(néng)地(dì)傳遞消息,但不(bù)能(néng)保證交付。

由(yóu)于(yú)以(yǐ)太网(wǎng)本(běn)質(zhì)上(shàng)是(shì)一(yī)種(zhǒng)廣播協議,可(kě)能(néng)有(yǒu)许多(duō)設備連(lián)接到(dào)同(tóng)一(yī)物(wù)理線(xiàn)路(lù),因(yīn)此(cǐ)一(yī)次(cì)只(zhī)能(néng)廣播一(yī)个(gè)設備。如(rú)果(guǒ)線(xiàn)路(lù)發(fà)生(shēng)沖突,以(yǐ)太网(wǎng)控制器能(néng)够檢测到(dào)沖突并執行随機(jī)退(tuì)避。随機(jī)退(tuì)回(huí)僅意(yì)味着在(zài)碰撞檢测时(shí),在(zài)嘗試另(lìng)一(yī)次(cì)發(fà)送之前(qián)等待随機(jī)的(de)时(shí)間(jiān)量(liàng)。以(yǐ)太网(wǎng)幀由(yóu)前(qián)導碼,幀起始分(fēn)隔符,MAC目的(de)地(dì),MAC源,以(yǐ)太网(wǎng)類(lèi)型,有(yǒu)效载荷和(hé)校(xiào)验(yàn)和(hé)組成(chéng)。

前(qián)導碼和(hé)幀起始分(fēn)隔符用(yòng)于(yú)指定(dìng)以(yǐ)太网(wǎng)幀正(zhèng)在(zài)啟動(dòng)。可(kě)以(yǐ)使用(yòng)其媒體(tǐ)訪問(wèn)控制(MAC)地(dì)址尋址每个(gè)以(yǐ)太网(wǎng)控制器。因(yīn)此(cǐ),每个(gè)以(yǐ)太网(wǎng)幀還(huán)包(bāo)含MAC目的(de)地(dì)和(hé)源地(dì)址。Ethertype指定(dìng)解(jiě)碼有(yǒu)效負载时(shí)使用(yòng)的(de)協議。有(yǒu)效载荷是(shì)实際數據(jù),最(zuì)後(hòu)的(de)校(xiào)验(yàn)和(hé)是(shì)确保以(yǐ)太网(wǎng)幀头(tóu)是(shì)正(zhèng)确的(de)。

用(yòng)戶數據(jù)報協議/ Internet協議

用(yòng)戶數據(jù)報協議(UDP)和(hé)因(yīn)特(tè)网(wǎng)協議(IP)分(fēn)别驻留在(zài)傳輸层和(hé)网(wǎng)絡层的(de)OSI模型的(de)下(xià)两(liǎng)层。UDP / IP協議與(yǔ)以(yǐ)太网(wǎng)一(yī)樣(yàng),不(bù)保證可(kě)靠的(de)數據(jù)包(bāo)接收(shōu),只(zhī)保證盡力傳輸。IP協議的(de)主(zhǔ)要(yào)目的(de)是(shì)在(zài)鍊(liàn)路(lù)层之上(shàng)提(tí)供一(yī)个(gè)抽象(xiàng)层。这(zhè)樣(yàng),如(rú)果(guǒ)底层鍊(liàn)路(lù)层不(bù)是(shì)以(yǐ)太网(wǎng),則不(bù)需要(yào)更(gèng)改應(yìng)用(yòng)級软(ruǎn)件(jiàn)。IP協議通(tòng)过(guò)具有(yǒu)另(lìng)一(yī)对(duì)源和(hé)目标(biāo)地(dì)址,分(fēn)段(duàn)偏移,報头(tóu)校(xiào)验(yàn)和(hé)以(yǐ)及(jí)有(yǒu)效载荷中(zhōng)使用(yòng)的(de)協議来(lái)提(tí)供此(cǐ)抽象(xiàng)。

IP校(xiào)验(yàn)和(hé)計(jì)算为(wèi)所(suǒ)有(yǒu)16位報头(tóu)值的(de)一(yī)个(gè)補碼和(hé)的(de)一(yī)个(gè)補碼。驻留在(zài)IP幀中(zhōng)的(de)UDP協議实際上(shàng)告訴网(wǎng)絡堆(duī)棧數據(jù)有(yǒu)多(duō)大以(yǐ)及(jí)目标(biāo)端口(kǒu)是(shì)什麼(me)。UDP是(shì)應(yìng)用(yòng)程序級别之前(qián)的(de)最(zuì)後(hòu)一(yī)个(gè)抽象(xiàng)层。

設計(jì)

代(dài)碼大量(liàng)模块(kuài)化(huà),輸出(chū)饋入(rù)連(lián)續模块(kuài)的(de)輸入(rù)。編碼的(de)步驟分(fēn)为(wèi)以(yǐ)下(xià)步驟,每个(gè)步驟在(zài)單独的(de)模块(kuài)中(zhōng)实現(xiàn):1-D DCT,2-D DCT /量(liàng)化(huà),Z形組織,VL轉(zhuǎn)換,霍夫曼轉(zhuǎn)換和(hé)比特(tè)流構造。該系(xì)統考慮256x256图(tú)像,但可(kě)以(yǐ)擴展(zhǎn)以(yǐ)分(fēn)析更(gèng)多(duō)像素。數據(jù)流图(tú)如(rú)下(xià)所(suǒ)示:

 

通(tòng)过(guò)僅考慮灰度(dù)成(chéng)像,我(wǒ)们(men)使用(yòng)了(le)彩色(sè)系(xì)統所(suǒ)需的(de)內(nèi)存量(liàng)和(hé)处理能(néng)力的(de)三(sān)分(fēn)之一(yī)。对(duì)于(yú)处理彩色(sè)图(tú)像的(de)系(xì)統,需要(yào)将上(shàng)述整个(gè)壓縮处理單独地(dì)應(yìng)用(yòng)于(yú)每个(gè)顔色(sè)通(tòng)道(dào)。我(wǒ)们(men)最(zuì)初通(tòng)过(guò)僅選擇每个(gè)像素的(de)綠(lǜ)色(sè)值来(lái)獲得灰度(dù)图(tú)像,而(ér)不(bù)是(shì)執行從RGB到(dào)YUV的(de)轉(zhuǎn)換。这(zhè)種(zhǒng)簡化(huà)并不(bù)完全(quán)正(zhèng)确,但項目的(de)重(zhòng)點(diǎn)不(bù)在(zài)于(yú)图(tú)像,而(ér)在(zài)于(yú)壓縮,因(yīn)此(cǐ)我(wǒ)们(men)不(bù)需要(yào)在(zài)轉(zhuǎn)換操作上(shàng)浪費額外(wài)的(de)計(jì)算。

1-D DCT

使用(yòng)快(kuài)速算法实現(xiàn)一(yī)維DCT,該算法需要(yào)八(bā)个(gè)周期(qī)才能(néng)完成(chéng)。該算法主(zhǔ)要(yào)需要(yào)連(lián)續添加輸入(rù)和(hé)得到(dào)的(de)和(hé),在(zài)三(sān)个(gè)中(zhōng)間(jiān)步驟期(qī)間(jiān)發(fà)生(shēng)五(wǔ)次(cì)乘法。該算法産生(shēng)DCT結果(guǒ),該結果(guǒ)根(gēn)據(jù)实際DCT結果(guǒ)的(de)某些因(yīn)子進(jìn)行縮放(fàng)。然而(ér),可(kě)以(yǐ)在(zài)量(liàng)化(huà)步驟中(zhōng)考慮比例,從而(ér)産生(shēng)正(zhèng)确量(liàng)化(huà)的(de)變(biàn)換矩阵(zhèn)。系(xì)數的(de)比例因(yīn)子如(rú)下(xià):

 

算法數據(jù)流如(rú)下(xià)图(tú)所(suǒ)示。

 

該模块(kuài)是(shì)完全(quán)流水(shuǐ)線(xiàn)的(de),这(zhè)意(yì)味着每个(gè)周期(qī)都可(kě)以(yǐ)輸入(rù)新的(de)輸入(rù),8个(gè)周期(qī)後(hòu)輸出(chū)新的(de)輸出(chū)。这(zhè)允许模块(kuài)更(gèng)快(kuài)速地(dì)处理块(kuài)。

二(èr)維DCT

2-D DCT是(shì)可(kě)分(fēn)離的(de)操作,这(zhè)意(yì)味着它(tā)可(kě)以(yǐ)通(tòng)过(guò)在(zài)8x8块(kuài)的(de)每一(yī)行上(shàng)應(yìng)用(yòng)1-D DCT,然後(hòu)将其應(yìng)用(yòng)于(yú)8x8块(kuài)的(de)列来(lái)獲得。这(zhè)允许我(wǒ)们(men)使用(yòng)流水(shuǐ)線(xiàn)1-D DCT非(fēi)常快(kuài)速地(dì)執行2-D DCT,方(fāng)法是(shì)将块(kuài)的(de)行饋送到(dào)1-D模块(kuài)中(zhōng)8个(gè)周期(qī),然後(hòu)獲得結果(guǒ)并将这(zhè)些列反(fǎn)饋到(dào)同(tóng)一(yī)模块(kuài)中(zhōng)。

在(zài)将結果(guǒ)写回(huí)存儲器之前(qián),還(huán)在(zài)該2-D模块(kuài)中(zhōng)執行量(liàng)化(huà)。由(yóu)于(yú)算法的(de)縮放(fàng)與(yǔ)量(liàng)化(huà)相結合的(de)方(fāng)式,整个(gè)操作僅需要(yào)对(duì)2-D算法結果(guǒ)進(jìn)行移位。

鋸齒形

通(tòng)过(guò)簡單地(dì)以(yǐ)适當的(de)順序读(dú)取(qǔ)內(nèi)存中(zhōng)的(de)值来(lái)執行之字(zì)形組織。块(kuài)的(de)元(yuán)素存儲在(zài)直(zhí)接從图(tú)像中(zhōng)的(de)像素坐标(biāo)獲得的(de)地(dì)址中(zhōng)。来(lái)自(zì)存儲器的(de)該輸出(chū)以(yǐ)每周期(qī)一(yī)个(gè)像素的(de)速率直(zhí)接饋送到(dào)轉(zhuǎn)換器中(zhōng)。

VL和(hé)RL翻譯

使用(yòng)查找(zhǎo)表(biǎo)完成(chéng)從像素的(de)量(liàng)化(huà)值到(dào)可(kě)變(biàn)长度(dù)代(dài)碼的(de)轉(zhuǎn)換。該表(biǎo)包(bāo)含代(dài)碼的(de)值和(hé)长度(dù)(以(yǐ)位为(wèi)單位)。然後(hòu)将这(zhè)两(liǎng)个(gè)值發(fà)送給(gěi)霍夫曼翻譯器。霍夫曼轉(zhuǎn)換器采用(yòng)前(qián)面(miàn)的(de)零(líng)个(gè)數和(hé)系(xì)數代(dài)碼的(de)大小。这(zhè)两(liǎng)个(gè)數字(zì)被(bèi)饋送到(dào)另(lìng)一(yī)个(gè)查找(zhǎo)表(biǎo),該表(biǎo)格将霍夫曼代(dài)碼作为(wèi)非(fēi)零(líng)系(xì)數的(de)“标(biāo)題(tí)”。

DC和(hé)AC系(xì)數的(de)VL碼轉(zhuǎn)換完全(quán)相同(tóng)。DC和(hé)AC轉(zhuǎn)換的(de)差异(yì)在(zài)于(yú)Huffman代(dài)碼,因(yīn)此(cǐ)只(zhī)有(yǒu)Huffman查找(zhǎo)表(biǎo)需要(yào)區(qū)分(fēn)DC和(hé)AC像素。

比特(tè)流建設

VL和(hé)RL轉(zhuǎn)換器的(de)輸出(chū)被(bèi)饋送到(dào)比特(tè)流構造器,該構造器連(lián)接适當的(de)比特(tè)以(yǐ)形成(chéng)JPEG比特(tè)流。該模块(kuài)基本(běn)上(shàng)需要(yào)跟蹤進(jìn)入(rù)的(de)霍夫曼和(hé)VL代(dài)碼的(de)大小,并将它(tā)们(men)适當地(dì)轉(zhuǎn)發(fà)到(dào)以(yǐ)太网(wǎng)發(fà)送器的(de)16位FIFO。

硬(yìng)件(jiàn)以(yǐ)太网(wǎng)控制器

硬(yìng)件(jiàn)以(yǐ)太网(wǎng)控制器用(yòng)于(yú)初始化(huà)DM9000A控制器芯片(piàn),将數據(jù)包(bāo)推送到(dào)DM9000A,從DM9000A獲取(qǔ)接收(shōu)數據(jù),以(yǐ)及(jí)從DM9000A接收(shōu)中(zhōng)斷。Controller主(zhǔ)要(yào)由(yóu)Adam Shapiro編写,但由(yóu)我(wǒ)们(men)調試。

Controller分(fēn)为(wèi)两(liǎng)个(gè)独立的(de)狀态機(jī),一(yī)个(gè)处理来(lái)往DM9000A的(de)命令(包(bāo)括中(zhōng)斷),另(lìng)一(yī)个(gè)处理發(fà)送和(hé)接收(shōu)序列。

發(fà)送序列包(bāo)括: 
1)等待輸入(rù)FIFO不(bù)为(wèi)空。将第(dì)一(yī)个(gè)值存儲为(wèi)有(yǒu)效負载中(zhōng)的(de)字(zì)节(jié)數。 
2)告訴硬(yìng)件(jiàn)控制器将存儲多(duō)少(shǎo)字(zì)节(jié),包(bāo)括以(yǐ)太网(wǎng)報头(tóu)。 
3)将以(yǐ)太网(wǎng)幀作为(wèi)數據(jù)發(fà)送到(dào)DM9000A。 
4)将有(yǒu)效载荷發(fà)送到(dào)DM9000A。 
5)等待傳輸通(tòng)过(guò)中(zhōng)斷完成(chéng)。返回(huí)空閑狀态。 
因(yīn)为(wèi)我(wǒ)们(men)不(bù)使用(yòng)接收(shōu)函(hán)數,所(suǒ)以(yǐ)我(wǒ)们(men)不(bù)会(huì)在(zài)这(zhè)里(lǐ)描述接收(shōu)序列。

UDP包(bāo)裝(zhuāng)器

UDP Wrapper利用(yòng)Adam Shapiro的(de)硬(yìng)件(jiàn)DM9000A以(yǐ)太网(wǎng)控制器生(shēng)成(chéng)有(yǒu)效的(de)UDP / IP報头(tóu),然後(hòu)發(fà)送有(yǒu)效载荷數據(jù)。使用(yòng)先(xiān)進(jìn)先(xiān)出(chū)數據(jù)結構(FIFO),UDP包(bāo)裝(zhuāng)器首先(xiān)獲得有(yǒu)效载荷中(zhōng)的(de)總(zǒng)字(zì)节(jié)數,然後(hòu)一(yī)次(cì)獲得16位的(de)有(yǒu)效载荷。Wrapper使用(yòng)狀态機(jī)執行以(yǐ)下(xià)步驟以(yǐ)發(fà)送單个(gè)UDP數據(jù)包(bāo): 
1)等待輸入(rù)FIFO不(bù)为(wèi)空。将第(dì)一(yī)个(gè)值存儲为(wèi)有(yǒu)效負载中(zhōng)的(de)字(zì)节(jié)數。 
2)告訴硬(yìng)件(jiàn)控制器将存儲多(duō)少(shǎo)字(zì)节(jié),包(bāo)括UDP / IP報头(tóu)。 
3)将以(yǐ)太网(wǎng)幀作为(wèi)數據(jù)發(fà)送到(dào)硬(yìng)件(jiàn)控制器。 
4)将IP头(tóu)作为(wèi)數據(jù)發(fà)送到(dào)硬(yìng)件(jiàn)控制器。在(zài)校(xiào)验(yàn)头(tóu)發(fà)送之前(qián)計(jì)算IP校(xiào)验(yàn)和(hé)。 
5)将UDP头(tóu)作为(wèi)數據(jù)發(fà)送到(dào)硬(yìng)件(jiàn)控制器。 
6)将所(suǒ)有(yǒu)數據(jù)發(fà)送到(dào)硬(yìng)件(jiàn)控制器。
因(yīn)为(wèi)UDP包(bāo)裝(zhuāng)器的(de)目的(de)是(shì)允许DE2與(yǔ)通(tòng)过(guò)以(yǐ)太网(wǎng)直(zhí)接連(lián)接的(de)單个(gè)計(jì)算機(jī)通(tòng)信(xìn),所(suǒ)以(yǐ)许多(duō)值被(bèi)硬(yìng)編碼到(dào)Verilog中(zhōng)。硬(yìng)編碼值包(bāo)括目标(biāo)和(hé)源MAC地(dì)址,目标(biāo)和(hé)源IP地(dì)址以(yǐ)及(jí)目标(biāo)端口(kǒu)。这(zhè)四(sì)个(gè)硬(yìng)編碼值都設置为(wèi)廣播地(dì)址,FF:FF:FF:FF:FF:FF用(yòng)于(yú)MAC地(dì)址,255.255.255.255用(yòng)于(yú)IP地(dì)址。目标(biāo)端口(kǒu)被(bèi)硬(yìng)編碼为(wèi)任意(yì)31373.其他(tā)值(例如(rú)IP头(tóu)校(xiào)验(yàn)和(hé))是(shì)動(dòng)态計(jì)算的(de),因(yīn)为(wèi)标(biāo)头(tóu)值不(bù)一(yī)定(dìng)每次(cì)都相同(tóng)。完成(chéng)後(hòu),控制寄存器複位并返回(huí)等待狀态。

內(nèi)存使用(yòng)情(qíng)況

此(cǐ)項目中(zhōng)僅使用(yòng)M4K块(kuài)。使用(yòng)M4K块(kuài)是(shì)因(yīn)为(wèi)它(tā)们(men)的(de)速度(dù)和(hé)易用(yòng)性(xìng),因(yīn)为(wèi)它(tā)的(de)想(xiǎng)法是(shì)擁有(yǒu)一(yī)个(gè)实时(shí)JPEG壓縮器。第(dì)一(yī)个(gè)存儲器模块(kuài)保存直(zhí)接從攝像機(jī)饋送的(de)值,最(zuì)多(duō)可(kě)容納16行256个(gè)像素(每个(gè)1个(gè)字(zì)节(jié))。16行用(yòng)于(yú)始終(zhōng)具有(yǒu)8行緩沖區(qū),我(wǒ)们(men)在(zài)其上(shàng)執行DCT,8行準備好(hǎo)被(bèi)攝像機(jī)覆蓋。

在(zài)DCT的(de)輸出(chū)端是(shì)另(lìng)一(yī)个(gè)256x16元(yuán)件(jiàn)M4K模块(kuài)。該存儲器模块(kuài)的(de)写入(rù)端饋送到(dào)Z字(zì)形單元(yuán),該Zig-zag單元(yuán)通(tòng)过(guò)随时(shí)間(jiān)适當地(dì)設置地(dì)址来(lái)簡單地(dì)读(dú)出(chū)Z字(zì)形图(tú)案(àn)中(zhōng)的(de)值。

最(zuì)後(hòu),在(zài)比特(tè)流構造函(hán)數的(de)末(mò)尾,有(yǒu)第(dì)三(sān)个(gè)FIFO作为(wèi)以(yǐ)太网(wǎng)發(fà)送器的(de)傳輸FIFO。理想(xiǎng)情(qíng)況下(xià),这(zhè)个(gè)內(nèi)存模块(kuài)應(yìng)該盡可(kě)能(néng)大,并且由(yóu)于(yú)JPEG壓縮應(yìng)該顯着減少(shǎo)图(tú)像的(de)位數,我(wǒ)们(men)可(kě)以(yǐ)将整个(gè)图(tú)像存儲在(zài)M4K块(kuài)中(zhōng)(我(wǒ)们(men)无法对(duì)原始像素進(jìn)行处理)流)。

文(wén)檔

作为(wèi)注釋,存儲器的(de)地(dì)址通(tòng)常是(shì)这(zhè)樣(yàng)的(de)格式,即高(gāo)位代(dài)表(biǎo)y坐标(biāo),低位代(dài)表(biǎo)所(suǒ)讨論像素的(de)x坐标(biāo)。这(zhè)些地(dì)址的(de)长度(dù)可(kě)能(néng)因(yīn)模块(kuài)而(ér)异(yì),因(yīn)为(wèi)某些存儲器模块(kuài)具有(yǒu)不(bù)同(tóng)大小的(de)輸入(rù)/輸出(chū),具體(tǐ)取(qǔ)決于(yú)應(yìng)用(yòng)。

dct_algorithm

輸入(rù):clk,reset,in0,...,in7 
輸出(chū):out0,...,out7

該模块(kuài)運行快(kuài)速算法来(lái)計(jì)算1-D DCT。該模块(kuài)完全(quán)流水(shuǐ)線(xiàn)化(huà),在(zài)读(dú)取(qǔ)輸入(rù)後(hòu)8个(gè)周期(qī)輸出(chū)长度(dù)为(wèi)8的(de)DCT結果(guǒ)。該模块(kuài)具有(yǒu)22位固定(dìng)點(diǎn)(8位十(shí)進(jìn)制位)輸入(rù)和(hé)輸出(chū)。虽然存儲器中(zhōng)的(de)像素存儲为(wèi)8位值,但是(shì)數字(zì)擴展(zhǎn)到(dào)22以(yǐ)避免溢出(chū)并且在(zài)變(biàn)換的(de)中(zhōng)間(jiān)步驟中(zhōng)保持(chí)一(yī)些精度(dù)與(yǔ)小數值。

要(yào)從算法結果(guǒ)中(zhōng)獲得实際DCT,必須将相應(yìng)的(de)輸出(chū)乘以(yǐ)設計(jì)部(bù)分(fēn)中(zhōng)給(gěi)出(chū)的(de)s值。然而(ér),在(zài)我(wǒ)们(men)的(de)系(xì)統中(zhōng)跳过(guò)該步驟,因(yīn)为(wèi)它(tā)與(yǔ)量(liàng)化(huà)操作中(zhōng)所(suǒ)需的(de)乘法相結合。

問(wèn)題(tí):这(zhè)个(gè)模块(kuài)实現(xiàn)相當簡單,因(yīn)为(wèi)它(tā)实際上(shàng)只(zhī)有(yǒu)五(wǔ)次(cì)乘法和(hé)一(yī)系(xì)列的(de)增加。流水(shuǐ)線(xiàn)操作也(yě)很簡單,但原始模块(kuài)嘗試使用(yòng)移位和(hé)求和(hé)作为(wèi)乘法的(de)替代(dài),这(zhè)有(yǒu)时(shí)会(huì)産生(shēng)輸出(chū)值的(de)問(wèn)題(tí)(但并非(fēi)總(zǒng)是(shì)如(rú)此(cǐ))。一(yī)旦我(wǒ)们(men)意(yì)識到(dào)沒(méi)有(yǒu)其他(tā)模块(kuài)需要(yào)乘數,我(wǒ)们(men)決定(dìng)廢棄嘗試的(de)优化(huà)。

dct2d

輸入(rù):clk,reset,q,currentX,currentY 
輸出(chū):wren,rdaddress,wraddress

該模块(kuài)調度(dù)正(zhèng)在(zài)饋送到(dào)流水(shuǐ)線(xiàn)1-D DCT算法的(de)輸入(rù)和(hé)輸出(chū)。輸出(chū)rdaddress确定(dìng)應(yìng)從內(nèi)存中(zhōng)读(dú)取(qǔ)的(de)值以(yǐ)獲取(qǔ)适當的(de)行。要(yào)读(dú)取(qǔ)的(de)块(kuài)的(de)时(shí)間(jiān)表(biǎo)取(qǔ)決于(yú)相機(jī)将哪个(gè)X和(hé)Y值写入(rù)存儲器(由(yóu)currentX和(hé)currentY指定(dìng))。

輸入(rù)q是(shì)64位值,表(biǎo)示来(lái)自(zì)存儲器的(de)8个(gè)像素的(de)行。該輸入(rù)被(bèi)分(fēn)割并饋送到(dào)dct_algorithm模块(kuài)的(de)适當的(de)8个(gè)輸入(rù)中(zhōng)。中(zhōng)間(jiān)矩阵(zhèn)(在(zài)对(duì)行執行1-D DCT之後(hòu))存儲在(zài)寄存器中(zhōng),以(yǐ)便保持(chí)更(gèng)多(duō)位以(yǐ)獲得更(gèng)高(gāo)的(de)精度(dù)。然後(hòu),这(zhè)些寄存器作为(wèi)列反(fǎn)饋到(dào)1-D DCT,以(yǐ)完成(chéng)2-D DCT。然後(hòu)适當地(dì)縮放(fàng)这(zhè)些輸出(chū)以(yǐ)考慮算法的(de)比例因(yīn)子,并量(liàng)化(huà)系(xì)數。然後(hòu)将量(liàng)化(huà)值存儲回(huí)單独的(de)M4K块(kuài)。

問(wèn)題(tí):調度(dù)何时(shí)鎖存寄存器值和(hé)分(fēn)配新輸入(rù)是(shì)該模块(kuài)的(de)最(zuì)大問(wèn)題(tí)。M4K模块(kuài)对(duì)數據(jù)可(kě)用(yòng)时(shí)有(yǒu)特(tè)定(dìng)的(de)时(shí)序要(yào)求。此(cǐ)外(wài),存儲到(dào)寄存器和(hé)存儲到(dào)存儲器也(yě)需要(yào)一(yī)些調整。

蜿蜒

輸入(rù):clk,啟用(yòng) 
輸出(chū):rden,latch_dc,rdaddress

該模块(kuài)簡單地(dì)控制饋送到(dào)存儲器模块(kuài)的(de)读(dú)取(qǔ)地(dì)址,以(yǐ)Z字(zì)形图(tú)案(àn)读(dú)出(chū)矩阵(zhèn),如(rú)背景技術(shù)部(bù)分(fēn)所(suǒ)述。latch_dc輸出(chū)告訴頂級模块(kuài)從內(nèi)存中(zhōng)鎖存輸出(chū)值,因(yīn)为(wèi)它(tā)是(shì)該特(tè)定(dìng)8x8块(kuài)的(de)DC值。如(rú)背景技術(shù)部(bù)分(fēn)所(suǒ)述,需要(yào)对(duì)DC系(xì)數進(jìn)行差分(fēn)編碼方(fāng)案(àn)。

translate_to_vl

輸入(rù):clk,enable,value 
outputs:size,code

該模块(kuài)将量(liàng)化(huà)的(de)像素值轉(zhuǎn)換为(wèi)适當的(de)可(kě)變(biàn)长度(dù)代(dài)碼。两(liǎng)个(gè)輸出(chū)是(shì)代(dài)碼(必須作为(wèi)固定(dìng)长度(dù)值輸出(chū))和(hé)一(yī)个(gè)大小組件(jiàn),它(tā)告訴下(xià)一(yī)个(gè)轉(zhuǎn)換模块(kuài)從代(dài)碼輸出(chū)中(zhōng)取(qǔ)出(chū)哪些位。这(zhè)只(zhī)是(shì)一(yī)个(gè)实現(xiàn)为(wèi)查找(zhǎo)表(biǎo)。对(duì)于(yú)DC和(hé)AC系(xì)數,該轉(zhuǎn)換是(shì)相同(tóng)的(de)。

translate_to_huffman

輸入(rù):clk,enable,dc,size,zero_run 
輸出(chū):huffman_length ,huffman

該模块(kuài)是(shì)另(lìng)一(yī)个(gè)查找(zhǎo)表(biǎo),并給(gěi)出(chū)霍夫曼代(dài)碼,該代(dài)碼充當每个(gè)非(fēi)零(líng)像素的(de)前(qián)綴。所(suǒ)述直(zhí)流輸入(rù)告訴該模块(kuài)是(shì)否是(shì)編碼的(de)DC值,否則它(tā)假定(dìng)它(tā)編碼的(de)AC值。如(rú)前(qián)所(suǒ)述,这(zhè)两(liǎng)種(zhǒng)類(lèi)型的(de)系(xì)數具有(yǒu)不(bù)同(tóng)的(de)轉(zhuǎn)換方(fāng)法(特(tè)别是(shì)因(yīn)为(wèi)DC不(bù)考慮零(líng)運行)。

霍夫曼代(dài)碼簡單地(dì)描述了(le)前(qián)面(miàn)的(de)零(líng)的(de)數量(liàng),以(yǐ)及(jí)值的(de)VL代(dài)碼的(de)大小。霍夫曼本(běn)身(shēn)也(yě)是(shì)可(kě)變(biàn)长度(dù)的(de),因(yīn)此(cǐ)长度(dù)也(yě)必須是(shì)輸出(chū),因(yīn)此(cǐ)比特(tè)流模块(kuài)可(kě)以(yǐ)提(tí)取(qǔ)适當的(de)比特(tè)。注意(yì):該模块(kuài)的(de)huffman_length輸出(chū)实際上(shàng)比实際长度(dù)小1,因(yīn)此(cǐ)該信(xìn)号(hào)实際上(shàng)表(biǎo)示16位霍夫曼信(xìn)号(hào)中(zhōng)的(de)最(zuì)高(gāo)有(yǒu)效位(從0開(kāi)始計(jì)數时(shí))。該模块(kuài)嵌入(rù)在(zài)比特(tè)流緩沖器中(zhōng),如(rú)下(xià)所(suǒ)述。

bitstream_buffer

輸入(rù):clk,enable,size,code 
outputs:next_transmit,new_stream

緩沖器從霍夫曼轉(zhuǎn)換器和(hé)可(kě)變(biàn)长度(dù)轉(zhuǎn)換器獲取(qǔ)輸出(chū),并将适當的(de)位饋送到(dào)最(zuì)終(zhōng)将要(yào)發(fà)送的(de)比特(tè)流緩沖器。VL轉(zhuǎn)換器提(tí)供大小和(hé)代(dài)碼,它(tā)们(men)被(bèi)饋送到(dào)Huffman轉(zhuǎn)換器(嵌入(rù)在(zài)該模块(kuài)中(zhōng))。該模块(kuài)具有(yǒu)64位的(de)位緩沖區(qū),适當數量(liàng)的(de)可(kě)變(biàn)长度(dù)轉(zhuǎn)換位流入(rù)其中(zhōng)。該模块(kuài)記(jì)录(lù)64位寄存器的(de)实際有(yǒu)效位數并需要(yào)傳輸。

該模块(kuài)還(huán)处理写入(rù)傳輸FIFO。一(yī)旦比特(tè)流緩沖器具有(yǒu)至(zhì)少(shǎo)16位,則写入(rù)線(xiàn)被(bèi)斷言并且16位被(bèi)适當地(dì)存儲到(dào)FIFO中(zhōng)。該模块(kuài)還(huán)处理零(líng)運行跟蹤,并在(zài)發(fà)現(xiàn)數組中(zhōng)沒(méi)有(yǒu)更(gèng)多(duō)非(fēi)零(líng)系(xì)數时(shí)附加块(kuài)結束(shù)(EOB)代(dài)碼。

問(wèn)題(tí):該模块(kuài)在(zài)翻譯过(guò)程中(zhōng)遇到(dào)的(de)問(wèn)題(tí)最(zuì)多(duō)。首先(xiān),为(wèi)超过(guò)15个(gè)元(yuán)素的(de)運行附加零(líng)運行信(xìn)息的(de)过(guò)程被(bèi)證明(míng)有(yǒu)點(diǎn)困難,因(yīn)为(wèi)需要(yào)考慮字(zì)节(jié)結束(shù)。我(wǒ)们(men)不(bù)能(néng)盲目地(dì)插入(rù)一(yī)个(gè)15運行指示器,因(yīn)为(wèi)零(líng)串可(kě)能(néng)完全(quán)運行到(dào)块(kuài)的(de)末(mò)尾,在(zài)这(zhè)種(zhǒng)情(qíng)況下(xià),需要(yào)附加EOB代(dài)碼而(ér)沒(méi)有(yǒu)任何15運行指示器。另(lìng)外(wài),来(lái)自(zì)翻譯模块(kuài)的(de)輸入(rù)和(hé)輸出(chū)的(de)調度(dù)以(yǐ)及(jí)任何条(tiáo)件(jiàn)信(xìn)号(hào)在(zài)某種(zhǒng)程度(dù)上(shàng)難以(yǐ)協調。

udp_wrapper

輸入(rù):clk,reset,enet_int,enet_data,udp_clk,udp_wr,udp_data,halt 
outputs:enet_clk,enet_rst_n,enet_cs_n,enet_cmd,enet_wr_n,enet_rd_n,udp_full

該模块(kuài)被(bèi)饋送到(dào)其FIFO中(zhōng),并圍繞輸入(rù)的(de)數據(jù)構建UDP / IP報头(tóu),并使用(yòng)狀态機(jī)将其發(fà)送到(dào)硬(yìng)件(jiàn)以(yǐ)太网(wǎng)控制器。

要(yào)使用(yòng)您必須: 
1)将有(yǒu)效負载的(de)字(zì)节(jié)數作为(wèi)第(dì)一(yī)个(gè)數據(jù)。 
2)推送有(yǒu)效载荷的(de)字(zì)节(jié)。
在(zài)有(yǒu)效負载中(zhōng)擁有(yǒu)正(zhèng)确的(de)字(zì)节(jié)數非(fēi)常重(zhòng)要(yào),因(yīn)为(wèi)Wrapper使用(yòng)此(cǐ)數字(zì)来(lái)保持(chí)其狀态機(jī)與(yǔ)驅動(dòng)Wrapper的(de)外(wài)部(bù)狀态機(jī)同(tóng)步。

大多(duō)數MAC地(dì)址和(hé)IP值也(yě)是(shì)硬(yìng)編碼的(de)。虽然更(gèng)改MAC地(dì)址很容易,但更(gèng)改IP值還(huán)包(bāo)括更(gèng)改添加到(dào)IP层校(xiào)验(yàn)和(hé)的(de)數量(liàng)。

目前(qián),如(rú)果(guǒ)仍然需要(yào)從FIFO读(dú)取(qǔ)但FIFO为(wèi)空,則包(bāo)裝(zhuāng)器存在(zài)問(wèn)題(tí)。它(tā)将繼續從空FIFO读(dú)取(qǔ)并将垃圾數據(jù)提(tí)供給(gěi)硬(yìng)件(jiàn)控制器。

完全(quán)爆發(fà)後(hòu),UDP包(bāo)裝(zhuāng)器每秒(miǎo)最(zuì)多(duō)可(kě)傳輸8兆(zhào)字(zì)节(jié)。

結果(guǒ)

該項目的(de)結果(guǒ)證明(míng)了(le)概念,但整个(gè)实施无法在(zài)示範截止日(rì)期(qī)前(qián)完成(chéng)。

JPEG壓縮器模块(kuài)化(huà)为(wèi)幾(jǐ)个(gè)交互部(bù)分(fēn),在(zài)模拟中(zhōng)工作(在(zài)一(yī)定(dìng)程度(dù)上(shàng))。对(duì)于(yú)可(kě)變(biàn)數據(jù)(即從攝像機(jī)接收(shōu)幀时(shí)),未完全(quán)验(yàn)證準确度(dù)。壓縮器出(chū)自(zì)執行動(dòng)态JPEG視頻編碼的(de)最(zuì)初想(xiǎng)法。因(yīn)此(cǐ),硬(yìng)件(jiàn)能(néng)够以(yǐ)大致(zhì)等于(yú)Terasic相機(jī)饋送原始像素的(de)速率編碼成(chéng)JPEG比特(tè)流。我(wǒ)们(men)对(duì)可(kě)以(yǐ)執行壓縮的(de)速度(dù)感(gǎn)到(dào)滿意(yì),但是(shì)當我(wǒ)们(men)嘗試在(zài)FPGA上(shàng)将所(suǒ)有(yǒu)模块(kuài)組合在(zài)一(yī)起时(shí),我(wǒ)们(men)无法通(tòng)过(guò)以(yǐ)太网(wǎng)獲得任何結果(guǒ)。

通(tòng)过(guò)完成(chéng)两(liǎng)个(gè)較小的(de)系(xì)統,我(wǒ)们(men)能(néng)够證明(míng)設計(jì)的(de)中(zhōng)間(jiān)部(bù)分(fēn)幾(jǐ)乎正(zhèng)确運行: 
1。從M4K块(kuài)读(dú)取(qǔ)16x8像素块(kuài)(灰度(dù)),在(zài)每个(gè)8x8块(kuài)上(shàng)應(yìng)用(yòng)2-D DCT,并發(fà)送通(tòng)过(guò)以(yǐ)太网(wǎng)使用(yòng)UDP的(de)結果(guǒ)。 
2.從M4K块(kuài)读(dú)取(qǔ)8x8字(zì)节(jié)块(kuài)(表(biǎo)示2-D DCT的(de)結果(guǒ)),对(duì)块(kuài)應(yìng)用(yòng)VL / RL編碼,生(shēng)成(chéng)轉(zhuǎn)換的(de)比特(tè)流,并使用(yòng)UDP通(tòng)过(guò)以(yǐ)太网(wǎng)傳輸結果(guǒ)。

这(zhè)两(liǎng)个(gè)实验(yàn)證明(míng)我(wǒ)们(men)的(de)壓縮機(jī)部(bù)件(jiàn)工作,但将所(suǒ)有(yǒu)模块(kuài)組合在(zài)一(yī)起的(de)控制邏輯是(shì)錯誤的(de)。由(yóu)于(yú)在(zài)实验(yàn)中(zhōng)從存儲器读(dú)取(qǔ)的(de)块(kuài)是(shì)預加载的(de),因(yīn)此(cǐ)結果(guǒ)是(shì)先(xiān)前(qián)已知的(de)并且與(yǔ)通(tòng)过(guò)以(yǐ)太网(wǎng)傳輸的(de)字(zì)节(jié)進(jìn)行比較。这(zhè)些实验(yàn)中(zhōng)的(de)第(dì)二(èr)个(gè)顯示了(le)我(wǒ)们(men)的(de)霍夫曼翻譯代(dài)碼中(zhōng)的(de)一(yī)个(gè)錯誤。運行时(shí)間(jiān)超过(guò)15的(de)零(líng)計(jì)數不(bù)能(néng)正(zhèng)常運行,但非(fēi)零(líng)值的(de)轉(zhuǎn)換是(shì)正(zhèng)确的(de)(对(duì)于(yú)特(tè)定(dìng)的(de)测試流)。此(cǐ)外(wài),由(yóu)于(yú)实验(yàn)是(shì)使用(yòng)已知輸入(rù)(數據(jù)流開(kāi)始时(shí)的(de)静(jìng)态存儲器)執行的(de),因(yīn)此(cǐ)完全(quán)删除了(le)項目的(de)相機(jī)方(fāng)面(miàn)。

系(xì)統問(wèn)題(tí)

为(wèi)流程創建的(de)模块(kuài)非(fēi)常嚴格且嚴格定(dìng)时(shí)。此(cǐ)外(wài),模块(kuài)之間(jiān)的(de)通(tòng)信(xìn)很少(shǎo),即使在(zài)一(yī)个(gè)时(shí)鐘(zhōng)周期(qī)內(nèi),也(yě)幾(jǐ)乎沒(méi)有(yǒu)空間(jiān)容易出(chū)現(xiàn)控制信(xìn)号(hào)时(shí)序差异(yì)。虽然这(zhè)使得处理速度(dù)非(fēi)常快(kuài),但这(zhè)意(yì)味着控制邏輯必須非(fēi)常具體(tǐ)并且沒(méi)有(yǒu)松弛。模块(kuài)之間(jiān)的(de)控制信(xìn)号(hào)依賴于(yú)預先(xiān)知道(dào)定(dìng)时(shí)的(de)模块(kuài),而(ér)不(bù)是(shì)通(tòng)信(xìn)以(yǐ)确定(dìng)控制。從一(yī)開(kāi)始就(jiù)應(yìng)該更(gèng)仔细(xì)地(dì)規劃(huà)整个(gè)系(xì)統的(de)架構。允许模块(kuài)之間(jiān)的(de)通(tòng)信(xìn)可(kě)能(néng)已經(jīng)解(jiě)決了(le)一(yī)些控制邏輯問(wèn)題(tí)。由(yóu)于(yú)嚴格的(de)要(yào)求,我(wǒ)们(men)无法使控制邏輯正(zhèng)确,这(zhè)意(yì)味着我(wǒ)们(men)无法使系(xì)統(從原始图(tú)像到(dào)傳輸的(de)比特(tè)流)正(zhèng)常運行。

以(yǐ)太网(wǎng)替代(dài)品

在(zài)我(wǒ)们(men)讓以(yǐ)太网(wǎng)控制器完全(quán)工作之前(qián),考慮進(jìn)行通(tòng)信(xìn)的(de)硬(yìng)件(jiàn)以(yǐ)太网(wǎng)控制器有(yǒu)两(liǎng)種(zhǒng)替代(dài)方(fāng)案(àn): 
1。使用(yòng)NiosII在(zài)软(ruǎn)件(jiàn)中(zhōng)实現(xiàn)以(yǐ)太网(wǎng),NiosII是(shì)一(yī)種(zhǒng)嵌入(rù)式处理器,可(kě)以(yǐ)使用(yòng)c代(dài)碼对(duì)软(ruǎn)件(jiàn)進(jìn)行編程。事(shì)实證明(míng)这(zhè)種(zhǒng)方(fāng)法太慢(màn)了(le),在(zài)我(wǒ)们(men)還(huán)在(zài)考慮实时(shí)壓縮的(de)时(shí)候被(bèi)抛棄了(le)。如(rú)果(guǒ)不(bù)需要(yào)实时(shí),則可(kě)以(yǐ)使用(yòng)Nios,因(yīn)为(wèi)幀(壓縮,未壓縮或(huò)两(liǎng)者(zhě))可(kě)以(yǐ)存儲到(dào)某種(zhǒng)形式的(de)存儲器中(zhōng)并通(tòng)过(guò)软(ruǎn)件(jiàn)緩慢(màn)傳輸。 
2.通(tòng)过(guò)RS-232傳輸比特(tè)流。在(zài)我(wǒ)们(men)決定(dìng)取(qǔ)消对(duì)項目的(de)实时(shí)約束(shù)之後(hòu)考慮这(zhè)一(yī)點(diǎn),并且完全(quán)被(bèi)視为(wèi)以(yǐ)太网(wǎng)的(de)替代(dài)方(fāng)案(àn)。然而(ér),一(yī)旦我(wǒ)们(men)發(fà)現(xiàn)我(wǒ)们(men)能(néng)够完成(chéng)足够的(de)以(yǐ)太网(wǎng)控制器和(hé)UDP包(bāo)裝(zhuāng)器,这(zhè)个(gè)想(xiǎng)法就(jiù)被(bèi)抛棄了(le)。

結論

虽然我(wǒ)们(men)无法運行最(zuì)終(zhōng)所(suǒ)需的(de)系(xì)統,但我(wǒ)们(men)确实創建了(le)可(kě)用(yòng)于(yú)各(gè)種(zhǒng)其他(tā)應(yìng)用(yòng)程序的(de)可(kě)用(yòng)功能(néng)模块(kuài)。UDP包(bāo)裝(zhuāng)器和(hé)硬(yìng)件(jiàn)以(yǐ)太网(wǎng)控制器在(zài)任何网(wǎng)絡通(tòng)信(xìn)項目中(zhōng)都非(fēi)常有(yǒu)用(yòng)。流水(shuǐ)線(xiàn)1-D DCT算法可(kě)用(yòng)于(yú)信(xìn)号(hào)和(hé)图(tú)像处理項目,因(yīn)为(wèi)DCT-II是(shì)一(yī)種(zhǒng)廣泛用(yòng)于(yú)其他(tā)應(yìng)用(yòng)的(de)變(biàn)換。該項目虽未按預期(qī)完成(chéng),但仍被(bèi)認为(wèi)是(shì)成(chéng)功的(de)。我(wǒ)们(men)对(duì)成(chéng)品設計(jì)的(de)結果(guǒ)和(hé)功能(néng)感(gǎn)到(dào)滿意(yì)。

 

  •   
  •   
  •   
  •  
  • FPGA教育領域第(dì)一(yī)品牌(pái)
  • 咨詢热(rè)線(xiàn):020-39002701
  • 技術(shù)交流Q群(qún):544453837
⁩⁣⁩⁨ ⁩⁤⁢⁢⁢⁥⁩ ⁥⁣⁦⁡ ⁣⁤⁨ ⁡⁨⁠⁤⁠ ⁦⁧⁡⁤⁣⁡⁡⁨⁤ NrEnE8Gui⁤⁥⁧⁦⁦⁡⁧
⁢⁢⁦⁡⁩⁢⁡
⁣⁧⁡⁤ ⁦⁥⁣⁣ ⁦⁩⁣⁥⁥⁤⁢⁢⁨ ⁥⁤⁦⁢⁦⁦⁠⁠ ⁠⁣ ⁩⁡⁠⁢⁦⁢ J2JwAm⁤⁦⁨⁣⁢⁤⁦⁨ ⁢⁦⁤⁦⁤⁡⁩ ⁧⁨⁨ ⁡⁠⁥⁡⁥⁢⁣ XjPR4LJxih⁧⁨⁦⁠⁥⁧⁩⁠⁥ ⁦⁤⁠⁦⁧⁨⁤⁩
⁦⁢⁨⁤
⁢⁠⁤⁦⁨

⁩⁩⁡

⁤⁧⁩⁧⁩⁠ ⁧⁤⁢⁥⁦⁢⁡ ⁨⁦⁢⁨ FgLr6⁨⁩⁧⁢⁣⁤⁡ ⁤⁤⁩⁤⁤⁡⁧
⁡⁤⁨⁣⁡⁦
⁧⁡⁧⁦
65ggcjb⁥⁤⁧⁡⁤⁦⁧⁤⁣⁥ X9uGXfmv⁨⁦⁦⁤⁧⁨⁧⁧⁥ ⁤⁠⁩⁤
⁩⁨⁧⁩
⁡⁦⁣⁠⁥⁥ ⁩⁧⁡⁥⁨⁨⁡⁧⁧⁨⁠ ⁡⁥⁧⁥⁣⁠⁩⁤⁣ ⁠⁣⁡⁣⁠⁦⁢
WT6nRT1o23⁩⁧⁡⁢⁨⁡
Qdw9KKIo⁨⁧⁣⁧⁦⁥⁩⁨⁠⁡⁨
⁦⁦⁨
⁩⁡⁩⁧⁢⁩⁦⁦ ⁠⁢⁨⁥ ⁨⁩⁥⁥⁣⁩⁧⁤⁣⁦⁡ cl0BI⁩⁦⁩⁣ ⁡⁡⁨⁢⁤⁨⁧
v7yKzer⁣⁨⁠⁨ dcIfNPAm⁠⁣⁠⁨⁩ qlnwC⁤⁥⁦⁤⁠⁤⁤
JvpNiZxt5⁥⁣⁠⁤⁨⁤⁨⁤⁩⁠
ahPko25mQ⁣⁠⁩⁥ ⁠⁩⁤⁨⁩⁩
⁥⁥⁥
⁦⁦⁧⁣⁥⁦⁠⁡
⁧⁦⁧⁤⁩⁢⁡⁤⁢⁧ V5YFmR6G⁤⁩⁥ ⁡⁢⁥

⁧⁨⁡⁩⁣⁡⁥

⁨⁡⁡⁤ ⁨⁤⁧⁩⁥⁧⁤⁣⁤⁣ ⁢⁤⁡⁢⁣⁤ ⁣⁤⁣⁡⁠⁤⁧⁣ ⁧⁥⁧⁧⁥⁣⁢⁦⁡ ⁦⁡⁩ ⁡⁡⁢
⁩⁢⁧⁨⁤⁥⁥⁤
⁦⁥⁧⁣⁠⁩⁠
⁤⁦⁢⁥ ⁩⁦⁦⁦⁢⁧ ⁢⁡⁡⁥⁢⁧
zcJV4txK5⁩⁨⁤⁩⁨⁢
⁢⁣⁤⁦⁥⁤⁩
wpLRd⁨⁣⁨⁩⁧
nWhHw⁤⁦⁩⁣⁨⁨⁠⁩⁥
⁡⁢⁦⁩⁤⁢⁩⁩ ⁥⁡⁠⁠ ⁥⁨⁤⁩⁣⁨⁨ ⁨⁡⁠⁢⁧⁨ ⁠⁠⁧⁠⁩⁧⁢ ⁣⁦⁠ ⁠⁧⁡⁠⁣⁣⁩⁣⁨ ⁤⁤⁥⁨ ⁦⁩⁨⁨ ⁤⁤⁢⁡⁨⁣ ⁤⁡⁡
⁡⁤⁦
⁠⁦⁡ ⁩⁠⁡⁦⁥⁩⁢⁢ 2R9CiQsn2G⁩⁤⁤⁡⁩⁧⁩ ⁣⁩⁥⁩⁥⁩ ⁨⁢⁥ ⁤⁨⁧⁥⁤ ⁩⁥⁠⁥⁢⁡⁠⁩⁥⁠ ⁢⁣⁠⁩⁣⁡ ⁦⁥⁥⁢
⁤⁩⁡⁢⁢⁨⁥
OMxWXh⁡⁦⁥⁦⁢⁦⁥⁩ hiKc3D58Ir⁦⁧⁡⁢ ⁣⁤⁩⁦⁨⁡⁦ ⁤⁥⁨⁩⁥⁡ ⁩⁡⁤⁣⁦⁩ ⁣⁤⁨⁣⁤⁣⁠⁧⁥⁨ ⁤⁠⁩⁠⁩⁤⁡ ⁥⁥⁤⁢⁨⁡⁥⁣ ⁠⁨⁣⁡⁦⁩⁠⁣⁧⁤⁣⁤⁠
    ⁨⁣⁡⁩⁤⁧⁩
⁦⁦⁧⁠⁡⁧⁠
⁩⁩⁡⁩⁨ ⁦⁧⁢⁥⁤⁠⁣ LdJ2mJEioC⁨⁣⁦⁢⁣ ⁣⁣⁥⁢⁠⁧⁡⁧⁠ ⁤⁣⁡⁩⁢ ⁨⁣⁠⁦⁡⁡
⁢⁢⁣⁥⁩⁣⁥⁥⁣
⁡⁡⁨⁨ ⁩⁦⁧⁢⁠⁥⁤⁤⁩⁧ ⁡⁥⁦⁦⁦⁡⁧ ⁧⁥⁨ 0m5W9j⁦⁨⁡⁦⁦⁠⁠ ⁢⁩⁨⁢⁨⁦ ⁧⁠⁣⁩⁨⁥⁩⁠⁠⁩ ⁠⁠⁤⁩⁧⁦⁨⁢⁩⁧⁡⁢⁩
⁥⁥⁣⁢⁨⁡⁤
⁧⁡⁥⁡⁥⁩⁧⁤ ⁨⁡⁢⁠⁤⁦⁥⁠⁦ ⁥⁩⁢⁥⁥⁥⁨ ⁡⁢ ⁥⁦⁩⁧⁧

⁡⁦⁣⁥⁤⁧⁡

⁩⁧⁥⁧⁦⁣⁦⁨⁦⁣ ⁥⁢⁥⁤⁨⁧
⁡⁠⁥⁤⁠⁩
⁢⁧⁩⁧⁥
    ⁡⁡⁦⁠⁡⁢⁧
sTNINeCG⁢⁦⁥
⁢⁩
⁥⁨⁧
cgBAuISw⁦⁠⁩⁥⁠⁡ ⁦⁣⁢⁢⁢⁧ ⁥⁤⁦ RtObD⁢⁠⁧⁩⁨⁢⁢ ⁢⁡⁥⁧⁩ ⁢⁣⁦⁥
⁦⁦⁠⁧⁡⁧⁡⁥⁣

⁢⁢⁣⁣⁥

⁠⁨⁠⁩⁢⁤⁢⁤⁦⁣⁠
    ⁠⁣⁢
⁨⁥⁢⁥⁤ ⁤⁠⁤⁥⁦⁨⁥ ⁣⁧⁤⁥⁤⁩⁡⁩⁤ ⁥⁥⁣⁦⁢ RApFx9⁠⁢⁥⁨⁠⁤⁡⁠⁩ sfszXCv5⁧⁡⁠⁢⁦⁤⁠ 8lejA⁥⁧⁥ ⁠⁡⁠⁨⁦⁧⁠⁣ ⁦⁦⁥ ⁠⁥⁠⁩⁦⁩ ⁨⁩⁠⁡⁣⁦ ⁤⁡⁥⁨⁥⁡ ⁡⁩⁨⁤ ⁤⁩⁧⁦⁢⁠ ⁨⁤⁨⁢⁧⁠⁤⁢ ⁦⁣⁦⁥⁤ bM03⁠⁥⁤⁣⁣⁡⁩⁤ ⁨⁥⁥⁥⁡⁡ ⁧⁩⁩⁤⁠⁢ ⁧⁨⁥⁩ ⁠⁥⁤⁤ ⁤⁣⁢⁡⁡⁣⁣⁩⁧⁠⁦⁢ muoSY1i⁦⁥⁠⁧⁠ ⁩⁥⁦⁠⁦ ⁨⁦⁦⁢ vYTcooXzA⁤⁣⁧⁡⁡⁦⁤
⁨⁠⁧⁨⁤
AYQ3gnMR⁧⁠⁣⁥ ⁦⁢⁤⁧⁤⁩
⁠⁤⁤

xDsToeNDG7⁥⁠⁢

⁧⁨⁥⁨