Tải bản đầy đủ (.docx) (21 trang)

Bài tập lớn thiết kế số

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.27 MB, 21 trang )

ĐẠI HỌC QUỐC GIA HÀ NỘI
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ
KHOA ĐIỆN TỬ VIỄN THÔNG

BÁO CÁO BÀI TẬP LỚN
Thiết kế và thực hiện khối tính nhân chập 2-D dùng
cho CNN


MỤC LỤC
Document History .................................................................................................................... 3
Table of Contents ....................................................................... Error! Bookmark not defined.
1.

Giới thiệu ........................................................................................................................... 5

2.

Yêu cầu .............................................................................................................................. 6
2.1.

Yêu cầu đối với thiết kế: ............................................................................................. 6

2.2.

Định nghĩa giao diện vào/ra ...................................................................................... 7

3.

Thuật tốn ......................................................................................................................... 7


4.

Thiết kế mức RTL ............................................................................................................ 8
4.1.

Mơ hình máy FSMD ................................................................................................... 8

4.2.

Đơn vị xử lý dữ liệu (Datapath) ................................................................................. 8

4.3.

Đơn vị điều khiển (Control Unit) ............................................................................... 8

4.4.

Sơ đồ khối tổng thể ..................................................................................................... 8

5.

Mơ hình hóa bằng VHDL ................................................................................................ 8

6.

Mô phỏng và đánh giá ...................................................................................................... 8

7.

Kết luận ............................................................................................................................. 8


Appendix A: Schematic ........................................................................................................... 9
Appendix B: VHDL Code ...................................................................................................... 10
Appendix C: ............................................................................................................................ 11
List of Figures ......................................................................................................................... 12
List of Tables ........................................................................................................................... 13
References ............................................................................................................................... 14


1. Giới thiệu
Mục tiêu: Vận dụng các kiến thức, kỹ năng đã được học để thiết kế, mô phỏng và
thực thi một mơ-đun phần cứng thực hiện tính tích chập J = 2DConV(I, K) giữa hình
ảnh lối vài I với một ma trận kernel K ([1] ). Trong đó, mỗi pixel trong hình ảnh tích
phân J đại diện cho tổng tích lũy của tích điểm-điểm giữa ma trận K với một ma trận
cùng thước được trích xuất từ ma trận đầu vào I. Phép chuyển đổi hình ảnh được mơ
tả bằng ví dụ sau.
Ví dụ: nếu hình ảnh đầu vào I là ma trận có kích thước 5×5 như sau:

Và kernel có kích thước 3×3 như sau:

thì kết quả tính tốn của khối 2D-Convolution trả về hình ảnh J có kích thước 3×3
như sau:


Q trình tính tốn được minh họa trong Hình 1

Hình 1. Ví dụ minh họa phép tính tích chập 2D.

● Lưu ý rằng pixel có tọa độ (r,c) – (hàng, cột) – tronh ảnh lối ra được tính bằng
cách nhân chập điểm – điểm giữa ma trận kernel và ma trận 3×3 có tâm nằm ở

vị trí có tọa độ (r + 1, c + 1) trong ảnh lối vào

Yêu Cầu
2.1. Yêu cầu đối với thiết kế
-

Khối 2DConV có giao diện ghép nối tới CPU sao cho CPU kích hoạt q trình tính

tốn của khối 2DConV bằng các đặt tín hiệu Start = ‘1’.
-

Sau khi q trình tính hình ảnh tích phân hồn thành, khối 2DConV sẽ báo cho
CPU biết bằng cách đặt tín hiệu Done = ‘1’;

-

Khối 2DConV có 1 giao diện ghép nối tới tới bộ nhớ để đọc hình ảnh đầu vào

-

Khối 2DConV có 1 giao diện ghép nối tới tới bộ nhớ để ghi dữ liệu đầu ra


Start CLK Rst Done

WEn

REn
Input Image
Memory


2DConV

RAddr

Output Image
Memory

WAddr
Data_out

Data_in

Hình 2. Giao diện ghép nối I/O.

2.2 Định nghĩa giao diện vào ra
Bảng 1 : Mơ tả các tín hiệu vào ra
T
T

Port

Directio
n

Widt
h

Meaning


1

Clk

In

1bit

Tín hiệu xung nhịp hệ thống

2

Reset

In

1bit

Tín hiệu reset
-

3

Start

In

1bit

Khi reset = ‘1’, mạch điện

ở chế độ reset, các thanh
ghi được nạp giá trị mặc
định
Khi reset = ‘0’, mạch điện
ở chế độ hoạt động

Tín hiệu bắt đầu
-

-

Khi start = ‘0’, mạch điện ở
chế độ chờ, mọi thứ giữ
nguyên
Khi start = ‘1’ mạch điện
bắt đầu lấy dữ liệu để tính
tốn


4

Done

Out

1bit

Tín hiệu báo đã hồn thành

2. Thuật tốn

Ở đây bọn em sử dụng 2 vòng lặp lồng nhau convolution
Từ trên xuống dưới, từ trái qua phải dưới dịch chuyển cửa sổ có kích thước bằng với
kernel trên ma trận đầu vào, thực hiện phép nhân từng phần tử cùng vị trí ở ma trận
cửa số với kernel rồi tính tổng ra giá trị scalar điền vào ma trận kết quả. Đây gọi là dot
product
Ta có cơng thức tính tích chập

Do thuật toán nhân ma trận 2 chiều sẽ làm phức tạp trong quá trình thiết kế. Vì vậy để
tốt ưu, thuật toán nhân ma trận sẽ được xử lý dạng mảng 1 chiều, mạch điện bọn em
thiết kế sẽ xử lý 2 dữ liệu chính đó là dữ liệu địa chỉ, cụ thể là chuyển dữ liệu ở dạng
mảng 2 chiều về dạng mảng 1 chiều, và xử lí phép nhân chập để tính kết quả lối ra
Ma trận ảnh
Img_height : Chiều cao của cột (Số hàng) = 5
Img_width : Độ rộng của hàng (Số cột) = 5
Ma trận Kernel
Kernel_height : Chiều cao của cột (Số hàng) = 3
Kernel_width : Độ rộng của hàng (Số cột) = 3
Biến số
H = img_height – (kernel_height – 1) = 3
W = img_width – (kernel_width – 1) = 3
Hai biến số này chính là hai khoảng mà ma trận cửa sổ sẽ duyệt bao gồm H là số
hàng, W là số cột
Vòng lặp
Bọn em sử dụng vịng lặp để tính địa chỉ của các phần tử trong ma trận của ảnh và
kernel, sau đó lấy giá trị tại bộ nhớ để đưa vào bộ MAC, kết quả đầu ra sẽ được ghi
vào bộ nhớ của Ouput image memory theo địa chỉ được tính


Các biến đếm
Ic : Chạy cột để duyệt các giá trị trong cột của ma trận cửa sổ

Ir : Chạy hàng để duyển các cột của ma trận cửa sổ
Kc: Chạy cột để duyệt ma trận cửa sổ theo chiều dọc
Kr : Chạy hàng để duyệt các cột của ma trận cửa sổ
Imc : Chạy cột để duyệt ma trận của kết quả theo chiều dọc
Imr : Chạy hàng để duyệt từng cột của ma trận kết quả
Chạy vòng lặp để tính địa chỉ của dữ liệu đầu vào
Ic chạy trong khoảng 0 đến H – 1
Ir chạy trong khoảng 0 đến W – 1
Kc chạy trong khoảng 0 đến kernel_height -1
Kr chạy trong khoảng 0 đến kernel_width – 1
Các vòng lặp trên sẽ chạy lồng nhau theo thứ tự từ trên xuống để tính địa chỉ của pixel
trong ma trận ảnh và các phần tử của ma trận kernel theo địa chỉ tương ứng với thứ tự
của nhau
Công thức địa chỉ của từng pixel ảnh lối vào
Chuyển đổi địa chỉ mảng 2 chiều thành địa chỉ của mảng 1 chiều
Img_in_addr = img_width * (ic + kc) + (ir + kr)
Công thức địa chỉ của từng phần tử trong ma trận kernel ứng với ảnh
Chuyển đổi địa chỉ mảng 2 chiều thành địa chỉ của mảng 1 chiều
Kernel_addr = kernel_width * ic + ir
Chạy vịng lặp để tính địa chỉ của dữ liệu lối ra
Imc chạy trong khoảng 0 đến H - 1
Imr chạy trong khoảng 0 đến W – 1
Kích thước của ma trận lối ra chính là khoảng mà ma trận cửa sổ di chuyển
Hai vòng lặp trên chạy lồng nhau để tính địa chỉ của các product trong bộ nhớ chứa
ma trận ảnh lối ra
Công thức địa chỉ của từng product


Chuyển đổi địa chỉ mảng 2 chiều thành địa chỉ của mảng 1 chiều
Img_out_addr = img_out_width * imc + imr

Mã giả (Pseudo code) mơ tả thuật tốn tính địa chỉ
[initialize input data]
Beginning : wait for start = 1
Done = 0
For ic = 0 to (H – 1) do
For ir = 0 to (W -1) do
For kc = 0 to kernel_height -1 do
For kr = 0 to kernel_width – 1 do
Img_in_addr = img_width * (ic + kc) + (ir + kr)
Kernel_addr = kernel_width * ic + ir
End for
End for
End for
End for

Valid_out = 1
For imc = 0 to H – 1
For imr = 0 to W – 1
Img_out_addr = img_out_width * imc + imr
End for
End for
Product (img_out_width * imc) += Img_in (img_width * (ic + kc) + (ir + kr)) *
kernel (kernel_width * ic + ir)
Done = 1
Wait for start = 0


Go to the beginning
End


3. Thiết kế mức RTL
4.1 Mơ hình máy FSMD
Mơ hình của bộ xử lí ảnh bọn em làm sẽ gồm 3 phần
Phần dữ liệu đầu vào : Bao gồm
Input image memory : Chứa dữ liệu của ma trận ảnh cần xử lý
Kernel : Chứa dữ liệu của ma trận kernel
Phần điều khiển và xử lí : Bao gồm
Control unit : Tính tốn địa chỉ của các pixel ảnh, của phần tử trong ma trận
kernel, địa chỉ của product được lưu vào Output memory
MAC : Bộ nhân cộng tích lũy nhận dữ liệu từ ảnh và kernel sau đó tính ra product
để chuyển tới Output memory, đồng thời gửi ra tín hiệu Valid_out = 1 để bảo hiệu đã
tính xong 1 product ảnh lối ra
Phần lối ra : Bao gồm
Ouput memory : Để lưu trữ ảnh sau khi đã xử lý và tín hiệu báo đã xử lý xong
toàn bộ ảnh lối vào


Mơ hình máy trạng thái FSMD


Mơ hình hoạt động của bộ xử lý


Khi tín hiệu reset = 1, hệ thống ở trạng thái reset, khi reset = 0 và tín hiệu điều
khiển start = 1, hệ thống hoạt động, bộ xử lý bắt đầu tính tốn từng địa chỉ của lối
vào, gửi giá trị của địa chỉ từng lối vào và tín hiệu Ren để đọc dữ liệu, đưa thẳng dữ
liệu đến bộ MAC, sau đó bộ MAC tính tốn, và trả thẳng kết quả đến Ouput memory,
tín hiệu ghi sẽ được điều khiển bởi chính tín hiệu Valid_out của bộ MAC, sau khi
tính tốn xong tồn bộ ảnh, tín hiệu done ở Output memory sẽ chuyển từ 0 sang 1,
báo hiệu đã xử lý xong toàn bộ ảnh


4.2 Đơn vị xử lý dữ liệu Datapath

4.3 Đơn vị điều khiển (Control Unit)
Bọn em sử dụng mơ hình máy trạng thái với 3 trạng thái chính đó là
Trạng thái reset : Khi tín hiệu reset = 1, bộ xử lí ảnh ở trạng thái reset, địa chỉ của
các thanh ghi được nạp giá trị 0, các biến đếm ở giá trị 0
Trạng thái đọc : Khi tín hiệu reset = 0, đồng thời tín hiệu start = 1 thì bộ xử lí ảnh đi
vào trạng thái hoạt động
Trạng thái ghi : Khi bộ xử lí tính tốn xong 1 giá trị product thì tín hiệu Valid_out sẽ
từ 0 chuyển sang 1, kích thích tín hiệu để tính địa chỉ lưu giá trị product vào Ouput
memory, đồng thời kích thích tín hiệu ghi ở Ouput memory để lưu giá trị tính được
vào đó
4.4 Sơ đồ khối tổng thể


4. Mô phỏng và đánh giá
Input Image Memory
Code VHDL

Dữ liệu lưu sẵn ở trong memory sẽ được đọc ra theo địa chỉ


Kết quả sau khi chạy testbench

Kernel
Code VHDL

Dữ liệu lưu sẵn ở trong memory sẽ được đọc ra theo địa chỉ
Kết quả sau khi chạy testbench



Đơn vị điều khiển Control Unit
Phần code dài nên bọn em sẽ chỉ đưa vào phần chuyển trạng thái và tính tốn địa chỉ
Tính tốn địa chỉ


Chuyển trạng thái

Kết quả sau khi chạy testbench
Khi valid_out = 0 các địa chỉ của lối vào duyệt theo đúng thứ tự như thuật toán ban
đầu, duyệt trên xuống từng cột và duyệt các cột

Khi valid_out = 1 thì địa chỉ của lối ra cũng được duyệt theo đúng thự tự từ trên
xuống của mỗi cột và duyệt các cột


Bộ nhân cộng tích lũy (MAC)
Code VHDL

Kết quả sau khi chạy testbench


Ouput Image Memory

Code VHDL


Kết quả sau khi chạy testbench


Bộ xử lý ảnh Convolution

Chạy testbench để kiểm tra hoạt động
Kết quả tính tốn sau khi ma trận cửa sổ duyệt xong cột đầu tiên


Tại đây ta thấy các giá trị của địa chỉ ứng với giá trị của dữ liệu tại đó được đưa vào và
tính tốn, sau đó kết quả được lưu vào memory tại các thanh ghi tại cột đầu tiên xét theo
ma trận, địa chỉ của các thanh ghi đó là 0, 3, 6 với các giá trị được ghi vào tương ứng là
4, 2, 2
Kết quả tính tốn sau khi ma trận cửa sổ duyệt xong cột thứ hai

Tương tự như ở trên thì các giá trị sẽ được lưu vào các thanh ghi có địa chỉ là 1, 4,
7 với các giá trị là 3, 4, 3


Sau khi cột cuối cùng được duyệt và tính tốn xong, kết qua được lưu vào những
thanh ghi còn lại là 2, 5, 8 với các giá trị là 4, 3, 4 sau đó tín hiệu done = 1 để báo hiệu đã
xử lý xong ảnh lối vào

5. Kết luận
Xem kết quả được lưu vào mem_list

Kết quả đúng như tính toán
Kết luận rằng bộ xử lý ảnh đã hoạt động đúng như mong đợi



×