Ngoài ra nhóm cung cấp các cách thức dé người dùng có thékiểm soát được tài nguyên sử dụng của từng tầng trong mô hình học sâu giúp cho thiết kế có thể sử dụng trên nhiều dòng FPGA.. Hìn
Board Kria KV260 Vision AI Starter Kit Applications
Khác với các board thuần FPGA khác, board Kria KV260 được tích hợp một chip SoC và có nhiều hướng tiếp cận khác nhau đối với quy trình hiện thực phần cứng trên board được biểu diễn dưới Hình 2-2.
Hình 2-2: Phân cấp giữa các hướng tiếp cận khi hiện thực trên board Kria [7]. Đối với sự phân cấp của giữa các hướng tiếp cận thì các quy trình phân cấp càng thấp sẽ có độ phức tạp càng lớn và khả năng tuy chỉnh càng cao Trong đó: © Vitis Accelerator: quy trình dành cho các nhà phát triển sử dung platform
Vitis SOM Starter Kit do Xilinx cung cấp làm cơ sở từ đó tích hợp các thiết kế phần cứng của riêng họ vào thành phan PL. ¢ Vitis Platform: quy trình dành các nhà phát triển muốn tạo một nền tảng
Vitis tùy chỉnh khi họ yêu cầu một bộ thiết bị ngoại vi I/O PL vật lý khác với thiết kế có sẵn trong các nền tảng do Xilinx tạo ra. e Vivado Extensible design: quy trình dành cho các nhà phát triển ưu tiên thiết kế phần cứng theo phương thức truyền thống trên Vivado. everaging Vitis
Hình 2-3: Cây quyết định dé chon hướng tiếp cận phù hợp [7].
Bản thân công cụ Vitis hỗ trợ các thư viện nền tảng hỗ trợ cho quá trình xây dựng các ứng dụng phần mềm trên nền tảng Linux một cách nhanh chóng Do đó, trong quy trình sử dụng công cụ này, các nhà phát triển có thể tận dụng platform có sẵn trong các thiết kế mẫu và chuyển trực tiếp sang quy trình “Vitis Accelerator” hoặc bản thân họ cần phải tùy biến lại Platform của Vitis trước khi chuyền sang quy trình “Vitis Accelerator” Ngoài ra, nếu không cần sử dụng các tính năng này hay muốn tự xây dựng mọi thứ từ đầu thì các nhà phát triển có thể chọn hướng tiếp cận
Với giới han đề tài là tập trung vào hiện thực một mạng CNN trên FPGA thì nhóm ưu tiên việc triển khai phần cứng trên FPGA thay vì tùy chỉnh hay xây dựng lại hoàn toàn Platform của Kria Do đó, nhóm chọn hướng tiếp cận “Vitis Accelerator” với việc sử dụng các Vivado Extensible Platform (.xsa), cây thiết bị (.dtbo) do Xillinx cung cấp và tích hợp các accelerator (được hiểu là thiết kế phan cứng của người dùng) vào bên trong (Hình 2-4).
Vitis Linker/Packager bin xclbin
Hình 2-4: Quy trình thiết kế dựa trên Vitis Accelerator [7].
Như trong Hình 2-5 là kiến trúc phần cứng của một Platform sẵn có bao gồm bốn luồng pipeline: ¢ Capture/Input pipeline là các luồng đầu vào dữ liệu bao gồm USB, MIPI
CSI-2, I2S Audio receive. ¢ Display/Output pipeline là các luồng đầu ra dữ liệu bao gồm DisplayPort,
Ethernet, I2S Audio transmit. ¢ Video proccesing pipeline gồm các bộ mã hóa va giải mã dữ liệu video
(VCU - Video Control Unit). ¢ Accelerator pipeline gồm các bộ accelerator mẫu là bộ DPU (Deep
Learning Processor UniÐ và Pre Process Trong quá trình hiện đồ án, nhóm sẽ thay thế thiết kế mạng CNN vào vị trí này.
Hình 2-5: Kiến trúc phan cứng của Platform KV260 SOM [7].
Thiết kế phần mềm § 2.3 Thiết kế phần cứng -.-¿ 22¿2222+2+t222Evvrtrrrkrrrerrree II Chương 3 HIỆN THỰC THIẾT KÉ 3.1 Lượng tử hóa (Quantization) c5 svesrevseeeeeeeree 17 3.2 Khối tích chập 3.2.1 Khối điều khiển .¿-c222++22EEvvreecvrvrrerrrrrrrrrr 24 3 Thiết kế bộ đệm dữ liệu ¿¿-©++++22vvce+cvvscrecrx 26 3.2.3 Thiết kế bộ pe_conv_ mạc -c::¿+22cvvvc++++t2vvvvreercee 27 3.2.3.1 Thiết kế khối pe_conv_mac_buffer_in
Thiết kế khối pe_conv_ mac_ datapath Ú 3.2.3.3 Thiết kế khối pe_conv_buffer_out
Phép nhân là thành phan quan trọng nhất trong thiết kế của nhóm Bởi vì đây là thành phan tốn nhiều tài nguyên và thời gian xử lý nhất Trong dé tài này nhóm đề xuất sử dụng các hard macro DSP (Digital Signal Processing) của Xilinx đề thực hiện phép nhân.
DSP là các khối logic được tích hợp sẵn trong các chip FPGA, chúng được thiết kế dé tối ưu khả năng xử lý xử lý tín hiệu số Các DSP có thé câu hình để triển khai các thuật toán tùy chỉnh, các khối xử lý trong DSP hoàn toàn chạy song song, tần số hoạt động của nó có thé lên đến 891MHz [11], [12] Số lượng các DSP có thể từ vài trăm đến vài nghìn tùy theo dòng chip Mỗi khối DSP bao gồm một bộ nhân 27x18 (đối với DSP48E2), một khối ALU, các thanh ghi pipeline và nhiều mạch logic khác Tổng quan một khối DSP48E2 như Hình 3-12.
Hình 3-12: Cấu trúc co bản của DSP48E2 [11].
Có thể thấy trong DSP có một bộ nhân 27x18 được tích hợp sẵn, tuy nhiên dữ liệu đầu vào chỉ có 8 bit nên ta có thé tận dụng nó bằng cách cải tiến một khối
DSP thành một bộ nhân 2 [13].
Giả sử ta có 3 số a, b, c là số nguyên biểu diễn ở dạng 8 bit, ta có thé sử dụng khối DSP48E2 dé thực hiện 2 phép nhân ac và be bằng các bước như Hình 3-13: e Dịch trái a 18 bit lúc này ta có giá tri mới với là 26°b{a, 18’b0} đưa vào cổng A của khối DSP Đồng thời thêm 19 bit b[7] lên trước biến b ta được giá trị mới 27'b{{19{b[7]}}, b} đưa vào cổng D của khối DSP. ©_ Tiếp theo thực hiện phép cộng A + D, kết quả được đưa vào khối nhân và thực hiện phép nhân với giá trị c. e_ Kết quả đầu ra là một số có độ rộng 34 bit dsp_out va ta lay kết quả bằng
Hình 3-13: Các bước thực hiện 2 phép nhân ac va be [13].
Bộ nhân 2 của nhóm dùng để nhân 2 số a, b với một số c, vì thế nhóm áp dụng nó để thực hiện phép tính giữa 1 kênh đầu vào nhân với 2 trọng số kernel dé có giá tri của 2 kênh dau ra Lúc này bộ nhân 0 sẽ tính giá trị cho kênh đầu ra 0, | và bộ nhân 1 sẽ tính giá trị cho kênh đầu ra 2, 3, Vì vậy số lượng bộ nhân thay vì pIN_CHANNEL x pOUTPUT_PARALLEL nay chỉ còn một nửa Bộ nhân được tích hợp với 2 bộ cộng và 2 thanh ghi để tạo thành một khối cộng dồn như Hình 3-14 Kết quả của bộ nhân được cộng dồn vào một thanh ghi Gía trị của thanh ghi nay được cộng dén tới khi toàn bộ đặc trưng đầu vào được nhân với toàn bộ trọng số, sau đó ta lấy giá trị của thanh ghi cộng dồn này đưa tới các khối phía sau Lúc giá trị của các thanh ghi cộng dồn được reset về 0 bởi tín hiệu clr và sẵn sàng cho các đặc trưng tiếp theo.
Hình 3-14: Thiết kế khối cộng dồn.
Sau khi tính toán xong các kênh đầu ra, ta đặt tín hiệu clr ở mức cao để xóa hết dữ liệu và sau đó tiếp tục tính toán các kênh đầu ra tiếp theo.
Kernel Ram Dequantize Scale Blas (ottra/Block RAM) XLUTRAM)— (Block/LUTRAM)
Hình 3-15: Thiết kế khối pe_conv_mac_datapath. Để khối pe_conv_mac_datapath có thể hoạt động, ta cần phải lưu trữ các trọng số kernel, bias và hệ sé dequantize Mỗi lần tính toán ta có pIN_CHANNEL x pOUTPUT_PARALLEL phép tính vì vậy khối Kernel Ram phải có độ rộng dữ liệu là pIN_CHANNEL x pOUTPUT_PARALLEL x 8 Khối Kernel Ram được nhóm triển khai bằng 2 loại hard macro của Xilinx là Ultra RAM và Block RAM (tùy thuộc vào loại phần cứng sử dụng), nhóm ưu tiên sử dụng Ultra RAM bởi vì nó có
=> dequantize => + =”> activation > quantize =*>|ss.sswessrssseeesss)
32 độ rộng dữ liệu lên với 64 bit gấp đôi Block RAM và có thể lưu trữ lên đến 288KBits trong khi Block RAM chỉ có thé lưu trữ 36KBits [14]. Đối với trọng số Bias, mỗi lần thực hiện phép tính ta cần giá trị của pOUTPUT_PARALLEL trọng số, vì vậy độ rộng của Bias RAM là pOUTPUT_PARALLEL x 32 Các trọng số của Bias có thé lưu trữ trong Block RAM hoặc LUTRAM, tuy nhiên nhóm khuyến nghị nên lưu trong LUTRAM do thiết kế không sử dụng LUTRAM nhiều và ưu tiên sử dụng Block RAM dé lưu trọng số kernel do kernel chiếm phan lớn dung lượng Mỗi khối tích chập chỉ có 1 hệ số dequantize nên nó được lưu trong LUTRAM và sử dụng trong khối dequantize.
Kết quả của các bộ MAC được đưa vào khối Adder Tree để tính ra kết quả của kênh đầu ra, khối Adder Tree bao gồm các bộ cộng kết nối với nhau đề tìm ra tổng của các dữ liệu đầu vào như Hình 3-16 Thiết kế Adder Tree của nhóm có hỗ trợ Pipeline và số tầng là loga(pINPUT_NUM).
"_ data_in{pINPUT_NUM*pDATA_WIDTH-1:0] > +
; > pINPUT_NUM =3} > eata_outtppara_wiore-1:0)
Hình 3-16: Thiết kế khối Adder Tree.
Kết quả đầu ra tiếp tục được đưa qua khối dequantize, lúc này giá trị của kênh đầu ra là một số thực (fixed point 16 bit), giá tri này được cộng với trọng số Bias tương ứng với kênh đầu ra và sau đó qua hàm kích hoạt Cuối cùng giá trị được đưa qua khối dequantize dé chuyền về số 8 bit và đưa tới tang tiếp theo.
Trong khối pe_con_mac_datapath với mỗi khối tính toán đều có một tín hiệu cho phép hoạt động riêng, các tín hiệu này giúp cho thiết kế tiết kiệm năng lượng hon bằng cách chỉ cho phép các khối đó hoạt động khi cần thiết và các tín hiệu này được điều khiển bởi khối pe_conv_mac_ controller.
3.2.3.3 Thiết kế khối pe_conv_buffer_out
Bởi vì dữ liệu đầu ra của khối pe_conv_mac_datapath có dang pOUTPUT PARALLEL x 8 nhưng đầu ra của khối pe_conv_mac có dang pOUT_CHANNEL x 8 nên ta cần có một khối để đệm dữ liệu đầu ra của pe_conv_mac_ datapath Tín hiệu buffer_idx dùng dé sắp xếp dit liệu vào đúng vị trí của nó, giá trị của buffer idx chạy từ 0 đến pOUT_CHANNEL / pOUTPUT_PARALLEL và được điều khiển bởi khối pe_conv_mac_controller.
LSclog2(pOUT_CHANNEL/pOUTPUT PARAULEL)-1:0] os pe_conv_mac_buffer- out
' ° ' ata_in{pOUTPUT_PARALLEL“S-1:0}} >| ° {7 POUT_CHANNEL/pOUTPUT_PARALLEL
Hình 3-17: Thiết kế khối pe_conv_mac_buffer_out.
Khối pe conv mac buferin bao gồm pOUT CHANNEL / pOUTPUT_PARALLEL thanh ghi có độ rộng pOUTPUT_PARALLEL x 8 và một bộ demux điều khiển bằng tín hiệu buffer_idx dé đưa dữ liệu vào đúng thanh ghi Vì vậy độ rộng của dữ liệu đầu ra là pOUT_CHANNEL x 8.
3.2.3.4 Thiết kế khối pe_cony_mac_controller
Khối pe_conv_mac_controller đảm nhận nhiệm vụ đồng bộ hóa hoạt động giữa các thành phần trong pe_conv_mac Trong khối pe_conv_mac_controller bao gồm các bộ đếm pixel, kernel_addr, bias_addr và buffer_idx.
Gia trị của bộ đếm pixel được đưa vào khối pe_conv mac buffer ¡in dé đưa từng điểm ảnh vào khối pe_conv_mac_datapath Hai thanh ghi kernel_addr va bias addr dùng để lấy trọng số từ Kernel Ram và Bias Ram cho khối pe_conv_mac_datapath để xử lý dữ liệu Như đã trình bày ở trên, khối pe_conv_mac_datapath cần các tín hiệu cho phép hoạt động tại mỗi phép tính và các tín hiệu đó được điều khién bởi khối pe_conv_mac_controller Các tín hiệu này được thiết kế như một thanh ghi pipeline, số lượng thanh ghi giữa mỗi tín hiệu phụ thuộc vào khối đó cần bao nhiêu chu kỳ đề thực hiện phép tính.
Khối pooling thực hiện chức năng của tầng pooling trong mạng mô hình học sâu Khối pooling của nhóm bao gồm những tín hiệu sau:
Bảng 3.3: Các port của khối tích chập.