KET QUÁ MO PHONG CHỨC NĂNG

Một phần của tài liệu Khóa luận tốt nghiệp Kỹ thuật máy tính: Hiện thực hóa kỹ thuật nén ảnh Dynamic Huffman Coding (Trang 50 - 59)

TOM TAT KHÓA LUẬN

Chuong 4. KET QUÁ MO PHONG CHỨC NĂNG

4.1. Phuong phap danh gia

Ở phan này, nhóm sé trình bay quy trình tiến hành đánh giá hệ thống nhóm

đã đề xuất, quy trình được mô phỏng như Hình 4.1.

Hình ảnh đầu vào được chuyền đổi sang pixel dưới file lưu trữ dạng txt trên ngôn ngữ python. Hệ thống nén phần cứng được thực hiện bang ngôn ngữ mô ta phần cứng — verilog dé thu được tài nguyên phần cứng và được mô phỏng trên phan mềm Vivado dé thu được tần số hoạt động của hệ thống nén.

Sau khi thực hiện việc nén ảnh trên hệ thống phần cứng, thu được kết quả dưới dạng mã nhị phân. Kết quả này sẽ được nhóm phân tích và so sánh với hệ thống nén trên phần mềm. Nếu đúng nhóm sẽ tiến hành đưa vào hệ thống giải nén trên phần mềm, xây dựng lại hình ảnh giống với ảnh gốc sau khi thực hiện việc giải nén. Ở đề tài khóa luận này, nhóm sử dụng tập dữ liệu hình ảnh bao gồm ảnh với

các size khác nhau (256 x 256, 512 x 512), với các đuôi là .tif, .pgm được tac giả

cung cấp trong bài báo [13] và [14].

Pe lee CP ees I

| Testbench Enviroment

| Original !

| Image

! 1|

! 1

ompression Module in

! 1

| Ị

| Decompressed H

ị Image |

L I

Hình 4.1. Mô tả quy trình mô phỏng hệ thống

40

4.2. Mô phỏng khối Linear Prediction

Hình 4.2 mô tả dạng sóng mô phỏng thiết kế của khối Linear Prediction.

Khôi thực hiện việc tính toán giá tri error dựa vào giá tri pixel đang xét và giá trị

pixel dự đoán được lưu trữ trong reg_pixel_out. Kết quả của giá trị error được lưu trữ trong reg_symbol_out. Tín hiệu hstart cho biết giá trị pixel đầu tiên và tín hiệu hend cho biết pixel ở vị trí cuối cùng. Giá trị tại tín hiệu symbol sẽ là input đầu vào của khối tiếp theo và được lựa chọn bởi tín hiệu select (với select = 0 giá tri tại 4bit MSB sẽ được đọc và select = 1 giá trị 4bit LSB sẽ được đọc ra). Gia tri pixel đầu tiên sẽ được giữ nguyên, các giá trị pixel tiếp theo sẽ được sử dụng để tính giá trị error. Khối Linear Prediction thực hiện tính toán với chu kỳ xung clock là 2 latency

ở pixel đầu tiên. Với kiến trúc pipeline các pixel tiếp theo sẽ chỉ mat 1 latency dé cho kết qua output. Kết quả output của khối Linear Prediction được thé hiện ở tín

hiệu symbol với độ rộng là 4bit.

Name Value

18 clk 1

18 reset_n 1

f#' position_in[19:0] 00001

@ pixel_in[7:0] 3b

lỗ hstart 1

l1 en_pixel 1

fớ reg_pixel_out[7:C 1a

l1 en_symbol 0

lớ reg_symb...ut[7:0 00

20 ps 40 ps 60 ps

———

00000

la

00001 } 00002 00003

j _ El

Cs 1m { 5 Xe )

aL x _

ơ | RKk=oÊ 3

13 pixel_sign 0

1 select 1

fới symbol([3:0] 0 (xX X2 Xa Xo ke X 3 }

Hình 4.2. Dang song mô phỏng khối Linear Prediction

41

4.3. Mô phỏng khối Tree Register File

Hình 4.3 mô tả dạng sóng mô phỏng thiết kế của khối Tree Register File.

Khối này thực hiện việc lưu trữ giá trị đại diện cho giá trị của các node trong cây

nhị phân. Trong đó, node gốc được lưu trữ ở một thanh ghi riêng biệt là Root

Register dé tối đa việc sử dụng các bit trong một thanh ghi. Giá trị các node còn lại

được lưu trữ trong khối Tree Register File. Khôi Tree Register File sử dung 32

thanh ghi với độ rộng 41bit dé lưu trữ 32 node trong cây (gồm 16 node chứa ký tự

và 16 node NYT). Dạng sóng dưới đây mô phỏng việc đọc và ghi vào thanh ghi tại

cùng một thời điểm xung clock. Tín hiệu điều kién việc đọc và ghi lần lượt là

en read và en_write. Tín hiệu địa chỉ đọc và ghi lần lượt là addr_read và

addr_write. Giá trị đầu ra của khôi Tree Register File là tree_out với độ rộng là

41bit, trong đó sẽ được chia ra từng đoạn bịt riêng biệt sử dụng để lưu trữ các

trường giá trị khác nhau đại diện cho các node trong cây. Quá trình đọc và ghi ở

khối Tree Register File mat tối da 1 chy kỳ xung clock.

we =O |

18 reset_n 1 x

]Ä en_read 1 Ƒ

l3 en write 1 P

®! addr_write[4:0] 02 (00 1 Ao i 03 04 05 0i

tới tree_in[40:0] 11 0 Ẳ 1 ho ho 21 31 | 41 5: R# addr_read[4:0] 01 00 tod 02 3 | 04 0.

F#'tree_out[40:0] 1 0 1 11 21 31

Hình 4.3. Dạng sóng mô phỏng khối Tree Register File

4.4, Mô phỏng khối Check Tree

Hình 4.4 mô tả dạng sóng mô phỏng thiết kế của khối Check Tree. Khối thực hiện kiểm tra xem ký tự symbol đưa vào nằm ở vị trí thứ mấy của cây để xuất

đường đi từ root đến vị trí đó. Cụ thể đường thăng màu vàng chi ra việc bắt đầu

kiểm tra ký tự symbol đưa vào đầu tiên. Quá trình mô phỏng giả sử vị trí của symbol

42

này nam ở vị trí thứ 4 của cây, vì vậy sau 4 chu kỳ thì tín hiệu check_out bật lên 1

và giá trị của indexnode_out bang 4 cho biết vị trí của node này trong cây. Đường thăng màu xanh chỉ điểm bắt đầu check của symbol thứ 2 đưa vào, vi trí của symbol nay nam ở ví trí thứ 31- node ở vị trí cuối cùng của cây nên sau 31 chu kỳ thì tin

hiệu check_out bật lên 1 (tại vòng tròn mau xanh dương) va giá tri indexnode_out

bang 31 cho biết vị trí của symbol này nằm ở vi trí node này trong cây. Quá trình tìm kiếm vị tri node trong cây trong trường hợp xấu nhất với latency tối đa là 31

cycle.

Name Value

a

Ÿ reset_n

7-2) size[4:0]

#-3/ tree[40:0]

#'-8# symbol(3:0]

3l-34 indexnod_out{4:0] 00001

lÄ check_out 0

4.5. Mô phỏng khối Output Block

Hình 4.5 mô tả dạng sóng mô phỏng thiết kế của khối Output Block. Khối này thực hiện việc kiểm tra node trong cây năm ở bên trái hay bên phải dé thực hiện xuất đường đi node đó từ vị trí node đang xét đến vị trí node gốc. Thanh ghi node_out dùng dé lưu trữ giá trị của node đang xét với độ rộng là 4lbit (out [4:0]

chỉ đoạn gia tri node_out [9:5] lưu trữ địa chỉ node cha của node hiện tại). Thanh

ghi addrRO_out được sử dụng dé lưu trữ địa chỉ của node đang xét. Ở vòng màu đỏ, tại chu kỳ xung clock đầu tiên, tín hiệu select bang 0 dé chọn giá trị được lưu vào addrRO_out là gia trị đầu vào addr_node (addr_node chính là địa chỉ node cần xuất

đường di trong cây trong trường hợp node đó đã có trong cây, hoặc addr_node

chính là node NYT hiện tại trong cây trong trường hợp node đó chưa có trong cây).

Các chu kỳ tiếp theo ở vòng màu đen, select được bật 1 để lưu giá trị trong

43

addrRO_out là giá trị node cha của node_out (out [4:0]). Giá tri compare sẽ bằng 1 trong trường hợp addrRO_out bằng với tree_in [14:10] (được đại diện bang out_compare [4:0]) tức là node đang xét nằm ở vị trí bên trái, ngược lại compare sẽ băng 0 trong trường hợp node năm ở bên phải. Giá trị compare sẽ được lưu trữ vào thanh ghi reg_LIFO, sau mỗi lần reg_LIFO lưu giá trị compare, counter sẽ đếm lên. Cho đến khi node đang xét bằng với giá trị tại node root thì tín hiệu empty sẽ bật lên

1 để xuất reg_LIFO ra output là tín hiệu dir_out (chính là đường đi của node trong cây). Quá trình duyệt node từ node đang xét đến gốc dé xuất đường đi mat tối đa 31 latency trong trường hợp node đang xét là node lá và cây có tối đa số node trong

cây.

1 clk

l reset_n

WG select

Tới tree_in[40:0]

1 en R0

f# node_out[40:0]

@ out[4:0]

f#' addr_node[4:0]

l1 en_addrR0

fới addrRO_out[4:0]

=

8 compare

lS en_LIFO

Value

1

1

0 00012153524

1

00012153524 09

01

1

01

t out_compare[4:0 Od

15 ps

O ps Bo, 60 BS 80 BS

ia FT

0001215.|. {IEE8484... {1ffbif0... {00006b9... Ä00046df...

Sor. 0001215... ÁJEE8484... X1EFblf0... (00006b8... À000

V C

- Ä 00

Od Ắ

: _] =m_=_= _|

0000 am 0000

n

Hình 4.5. Dạng sóng mô phỏng khối Output Block

4.6. Mô phỏng khối Run Modify

Hình 4.6 mô ta dạng sóng của khối Run Modify. Khối thực hiện việc kiểm tra điều kiện trước khi cập nhật lại cây. Quá trình cập nhật lại cây bao gồm việc đôi chỗ reg2_out và reg3_out trong Tree Register File, việc này được thực hiện ở khối

44

Swap node. Ngoài ra, việc cập nhật lai cây sẽ bao gôm việc tăng trọng sô cua node.

Khối Run Modify thực hiện việc kiểm tra node trong cây (reg3_out) thỏa các điều kiện không phải là node cha (thông số khối Check Parent) và có trọng số nhỏ hơn node cần cập nhật hay không (reg2_out). Ở chu kỳ 25ns, giá trị từ Tree Register

File được đọc vào reg2_out khi có tín hiệu en_reg2, tại day giá trị reg2_out [19:10]

được so sánh với root đê kiêm tra xem reg2_out có khác node root hay không,

thông qua tín hiệu check_root (check_root = 1 khi reg2_out khác root). Chu ky tiép

theo thanh ghi reg3_out sẽ nhận giá tri từ Tree Register File với địa chi từ tín hiệu

index_out = 0. Tai thời điểm 65ns, đường màu xanh cho thấy khi reg2_out =

reg3_out tín hiệu check _node sẽ được bật. Ngoài ra, tín hiệu addrparent_out,

index_out lần lượt là địa chỉ của 2 node cần đổi chỗ, chính là tín hiệu input cho khối

Swap Node.

18 clk

18 reset_n

18 reset_cnt

tới tree[40:0]

1 en_reg2

f#' addrparent_out[4:0]

8# reg2_out[40:0]

11 en_reg3

8# reg3_out[40:0]

1# check node

fỉ root[9:0]

18 check_root

R# size[4:0]

® index_out{4:0]

18 check size

18 check_out

18 is_parent

Value

303379748 1

9 303379748 0

0 0 0000000000

1

05 00

40.000 ns . 100.00

bititisit

Hình 4.6. Dang sóng mô phỏng khối Run Modify

45

4.7. Mô phỏng khối Check Parent

Nane | le

)rstn 1

jen 1

#8 tree[40:0] 00000

#-84 reg3_out[40:0]! 0000000

ứ-84rot[+0] |000000:

Uy check parent |0

\done_check |0

Hình 4.7. Dang sóng mô phỏng khối Check Parent

Hình trên là mô phỏng thiết kế của khối Check Parent. Khôi thực hiện kiểm

tra xem node đang cần tìm có phải là node parent của node hiện tại hay không

(tree), sau khi kiểm tra, kết quả của khối này được sử dụng làm điều kiện dé khối

Run Modify thực hiện việc Swap Node (reg3_out) — node trong cây với node dang

xét. Nếu node dang kiêm tra không phải là node Parent thì tiếp tục kiểm tra node parent của node hiện tại đến khi nào đến node root kết quả van trả về là không phải parent thì kết luận là node không phải là parent của node tree. Cụ thể trong vùng

khoanh màu đỏ khi tín hiệu của node tree liên tục được cập nhập lên giá tri parent

của node tree đến khi tìm thấy node bằng với node reg3_out thì tín hiệu

check_parent va tín hiệu done bật lên 1 báo hiệu là node reg3_out là parent của

node tree đưa vào. Ở vùng mau xanh dương khi tín hiệu tree liên tục cập nhập lên parent của tree nhưng đi đến node root nhưng van không bang node reg3_out thì tín hiệu done bật lên một báo hiệu là reg3_out không phải là root của node hiện tại. Ở vùng màu vàng khi tín hiệu en của khối tắt thì khối không hoạt động.

46

4.8. Mô phỏng khối Swap Node

Hình 4.8 mô tả dang sóng mô phỏng thiết kế khối Swap Node. Khối thực

hiện swap hai node a và b cho nhau (parent của a sé gan cho parent của b, node con

trái, con phải của a sẽ là node con trái con phải của b và ngược lại). Cụ thé ở đường thắng màu đỏ đầu tiên khi đọc tree của reg2 vào, addr_parentR2 sẽ mang giá trị địa chi parent của reg2. chu kỳ tiếp theo ghi vào tree của reg2 giá tri parent của reg2 gan bằng giá tri parent của reg6. Ở đường thăng màu vàng xuất ra giá trị của reg2

ra reg5_out sau khi đã đôi parent thành công. Ở đường thằng màu xanh dương tiến hành bật khối register addr_reg2 dé lay giá trị địa chi của reg2 so sánh với dia chỉ node con phải của parent reg2. Ở đường thang màu tím kiểm tra giá is_right sau khi

so sánh với địa chỉ con phải cua parent reg2, reg2 ở bên phải giá trị is_right bật lên

1. Chu kỳ sau đó là gan giá trị con phải của parent reg2 cho reg6 hiện tại. Ở đường thang màu trang sau khi đã cập nhập con cho parent reg2 xuất ra giá trị mới ra reg5_out. Tiếp theo tiên hành đọc giá trị reg6 vào, chu kỳ tiếp theo ghi ra reg6 giá

tri parent của reg6, reg6 sẽ được gan thành giá tri addr_parentR2 và địa chỉ reg6

mới vào reg5_ out. Ở đường thang số 6 tiền hành doc register reg6 lên dé lấy giá tri địa chỉ của reg6 so với giá trị con trái của parent reg6, sau khi kiểm tra thì reg6 nam

ở bên trái parent regó. Chu kỳ tiếp theo tiễn hành đổi lại giá trị địa chỉ trái của parent reg6 thành reg2 và xuất ra reg5_out. Cudi cùng ở vùng màu vàng tắt tín hiệu rst_n dé reset toàn bộ khối về giá trị ban dau và tiết tục với các ký tự tiếp theo. Khối này thực hiện tối đa với 12 latency chu kỳ xung clock.

Sau khi khối Swap Node tiễn hành hoán đổi vi trí hai node cho nhau, các giá trị thanh ghi reg5_out sẽ lần lượt được lưu trữ vào Tree Register File. Kết thúc quá trình chuyên đổi, tín hiệu Done sẽ được bật trong trường hợp tất cả các pixel đã

được nén, ngược lại sẽ trở về tiếp tục quá trình khối Check Memory đọc giá trị pixel

từ khối Linear Prediction đã được tín trước đó.

47

ion Vaue lo ns 100 ns

8) tree[ 40:0] 0000000(| (0000000000000000000 00000000000000 `. 000000 | 0000000)000000000000210. 000000 )X000000000000000 X 000000) 000008 3{.00030000000000000000011001101010 )

#ì-8 mux_index[4:0] 10101 | 00000

#'-86 index[4:0] 01010 |Ệ 00000. X

›ủ mm == _ELE

Wrst 1 ã =

}3 en_R2 0

1ÿ en_R6 0

1} en_parentR6 0 —————]|

1} en_parentR2 1

Ì3 en _is_right 0

l3 en_RS 0 |

Wis_right 0 [—__———

)-3Đ reg5_out{40:0] 0000000(| (000000000000000000009000000000000000 `Ê0000000)000C00000000000000000000 ẽ( 00000000000000000000000_X(0000000/00000000 3 000000 X (0000000000000000000030_}

lŠ Select 1 [

#-3ý addr_parentR2[4:0] | 11111 00000.

#i-3ý addr_parentR6[4:0] | 00000

Hình 4.8. Dạng sóng mô phỏng khối Swap node 4.9. Mô phỏng khối Top module

È [tb compresson/ck

> [b.compressonfteset

È [h_compressionfeset vr

È compresson/start

( [tb compressonhend

> (compress jvend

È It _compressonpiel_in

È !b engessolald in

[tb_compresson bitstream

È lb_cmpressonjbistean length

ỳ [tb.compressonsbimage_index

0 0

0

(> [compression start 0

0

0, 1

Hình 4.9 mô tả dạng sóng của khối Compression Core, chỉ tiết kiến trúc được

mô tả ở Hình 3.4 chương 3. Ở vị trí pixel đầu tiên, tín hiệu hstart sẽ được bật lên 1, cho biết pixel đầu tiên được đọc vào và giá tri pixel sẽ được đọc vao khi tín hiệu vstart được bật lên. Ngoài ra, gia tri đầu vào được đọc thông qua chân tín hiệu pixel_in. Tín hiệu hend cho biết pIxel cuối cùng sẽ được đọc và xử lý. Giá trị đầu ra được biểu thị thông qua chan bitstream ( đường di của node trong cây nhị phân) chính là mã entropy của từng pixel sau quá trình nén). Giá trị bitstream_length biểu

thị độ dai của chuoi nén.

Một phần của tài liệu Khóa luận tốt nghiệp Kỹ thuật máy tính: Hiện thực hóa kỹ thuật nén ảnh Dynamic Huffman Coding (Trang 50 - 59)

Tải bản đầy đủ (PDF)

(72 trang)