Nhận dạng chữ số viết tay với FPGA. Bài toán nhận diện chữ số viết tay được xuất hiện trên nhiều bài báo khi lĩnh vực học sâu mới bùng nổ. Nó được sử dụng để so sánh mức độ thành công của học sâu so với các thuật toán thị giác máy tính thông thường (xử lý ảnh), và cũng là cơ sở để phát triển các mạng tích chập phức tạp.
TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI VIỆN ĐIỆN TỬ - VIỄN THƠNG BÁO CÁO CUỐI KỲ TRÍ TUỆ NHÂN TẠO VÀ ỨNG DỤNG Đề tài: HANDWRITTEN DIGIT RECONITION ON FPGA Nhóm thực hiện: Sinh viên thực hiện: Giảng viên hướng dẫn: TS VÕ LÊ CƯỜNG LỜI NÓI ĐẦU Trí tuệ nhân tạo ứng dụng nhiều lĩnh vực sống ngưởi Nó phần cách mạng công nghệ 4.0 Trong kì học 20212, chúng em tìm hiểu mơn học Trí tuệ nhân tạo ứng dụng với hướng dẫn Thầy giáo TS Võ Lê Cường anh chị bạn TA Nhờ tham gia mơn học, sau kì học, chúng em trang bị cho khái niệm trí tuệ nhân tạo, tác nhân mơi trường trí tuệ nhân tạo Đặc biệt chúng em tìm hiểu thuật tốn Tìm kiếm, thuật tốn Machine learning hồi quy tuyến tính, định, hồi quy logic, SVM, vv Điều giúp cho chúng em hiểu rõ Trí tuệ nhân tạo nào, thuật tốn Machine learning huấn luyện mơ hình học máy Song song với trình tìm hiểu lý thuyết, chúng em hướng dẫn làm tập lớn mơn học Nhóm chúng em chọn đề tài: “Handwritten Digit Recognition on FPGA”, qua giúp chúng em tìm hiểu lĩnh vực học sâu thị giác máy tính, đặc biệt thực phần cứng Trong trình học tập, với hướng dẫn nhiệt tình Thầy anh chị, bạn TA, chúng em tích lũy kiến thức sở Deep learning, huấn luyện model phần mềm triển khai ngôn ngữ miêu tả phần cứng verilog Dù chúng em cố gắng thực thời gian cuối thực đề tài vào lúc dịch Covid -19 diễn biến phức tạp nên chúng em thực Kit DE-0 kế hoạch ban đầu kì học chúng em tiếp cận với kiến thức huấn luyện mơ hình, lập trình verilog nên gặp nhiều khó khăn, chắn có nhiều chỗ chưa hồn chỉnh, chúng em mong nhận đánh giá, góp ý Thầy anh để chúng em tích lũy thêm kiến thức, trao dồi kinh nghiệm để phục vụ cho công việc tới Chúng em xin gửi đến Thầy TS Võ Lê Cường, anh Phạm Văn Mười, anh Đặng Sơn Tùng, anh Nguyễn Mạnh Tuân, bạn Nguyễn Duy Tường anh chị khác lời cảm ơn chân thành tham gia hướng dẫn hỗ trợ chúng em lớp trình làm tập lớn MỤC LỤC PHÂN CHIA CÔNG VIỆC i DANH MỤC HÌNH VẼ ii DANH MỤC BẢNG BIỂU .iv DANH MỤC TỪ VIẾT TẮT vi TÓM TẮT BÁO CÁO vii CHƯƠNG TỔNG QUAN ĐỀ TÀI .1 1.1 Giới thiệu chung 1.1.1 Lý chọn đề tài 1.1.2 Ý nghĩa đề tài 1.1.3 Kế hoạch chi tiết .3 1.2 Yêu cầu phần cứng đề tài 1.2.1 FPGA board 1.2.2 Camera 1.2.3 LCD 1.3 Các kiến thức Deeplearning 1.3.1 Tìm hiểu chung mạng tích chập 1.3.2 Lớp tích chập (CONV) 1.3.3 Lớp Pooling (POOL) 10 1.3.4 Lớp Fully connected .10 1.4 Các kiến thức lập trình Verilog 10 1.4.1 Định nghĩa 10 1.4.2 Cấu trúc lập trình verilog 11 1.4.3 Các toán tử verilog 13 1.4.4 Verilog number .13 1.4.5 Testbench 14 1.4.6 So sánh Wire reg 14 CHƯƠNG HUẤN LUYỆN MẠNG TRÊN PHẦN MỀM .16 2.1 Nén mạng CNN 16 2.1.1 Tại cần nén .16 2.1.2 Các phương pháp nén 16 2.2 Xây dựng đánh giá kiến trúc mạng CNN .17 2.2.1 Kiến trúc model CNN sử dụng .17 2.2.2 Đánh giá .19 2.2.3 Kết 19 2.3 Tối ưu trọng số 20 2.3.1 Phương pháp giảm kích thước trọng số 20 2.3.2 Kết đánh giá 21 CHƯƠNG TRIỂN KHAI MẠNG TRÊN PHẦN CỨNG 22 3.1 Mô tả hệ thống 22 3.2 Mô tả chức khối 24 3.2.1 Khối RAM 24 3.2.2 Khối database .27 3.2.3 Khối tích chập 30 3.2.4 Khối border 32 3.2.5 Khối addressRAM 35 3.2.6 Khối Maxpooling 37 3.2.7 Khối Dense 39 3.2.8 Khối Result 42 3.2.9 Khối MemmoryWork 43 3.2.10 Khối conv_TOP 45 3.2.11 TOP Layer 48 3.3 Thực kiểm tra liệu 52 KẾT LUẬN 53 TÀI LIỆU THAM KHẢO 54 PHỤ LỤC 55 PHÂN CHIA CÔNG VIỆC DANH MỤC HÌNH Hình 1 Các đầu việc kết đạt Hình Board De0-Nano Hình Board FPGA thiết bị ngoại viCamera .4 Hình Camera OV7670 Hình Sơ đồ chân TFT 3,2” ILI9341 .6 Hình Kiến trúc chung mạng CNN Hình Hoạt động lớp tích chập Hình Input output mạng CNN Hình Fully connected layer 10 Hình 10 Triển khai mạch số với Verilog 11 Hình 11 Cấu trúc Module Verilog 11 Hình 12 Các toán tử verilog 13 Hình 13 Ví dụ mơ testbench 14 Y Hình Kiến trúc Model CNN LWDD 18 Hình 2 Các tham số mạng .19 Hình Loss model 20 Hình Độ xác model .20 Hình Sơ đồ khối hệ thống 22 Hình Sơ đồ triển khai phần cứng 23 Hình 3 Khối RAM 24 Hình Kết testbench khối RAM .27 Hình Khối Database 28 Hình Kết testbench khối Database .29 Hình Khối tích chập 30 Hình Kết testbench khối tích chập 32 Hình Khối Border .33 Hình 10 Kết testbench khối Border 34 Hình 11 Khối addressRAM 35 Hình 12 Kết testbench khối addressRAM .36 Hình 13 Khối Maxpooling .37 Hình 14 Kết testbench khối Maxpooling 39 Hình 15 Khối Dense 39 Hình 16 Kết testbench khối Dense 41 Hình 17 Khối Result 42 Hình 18 Kết testbench khối Result 43 Hình 19 Khối Memmory work .44 Hình 20 Kết mơ khối con_TOP 48 Hình 21 Khối TOP 48 Hình 22 Kết testbench khối TOP step 1-2-3 50 Hình 23 Kết testbench khối TOP step 3-4-5 50 Hình 24 Kết testbench khối TOP step 7-8-9 51 Hình 25 Kết testbench khối TOP step 10 -11-12-13 51 Hình 26 Kết testbench khối TOP step 14-15 51 Hình 27 Kết testbench khối TOP step 16 52 DANH MỤC BẢNG BI Bảng 1 Ý nghĩa chân giao tiếp Camera OV76702 Bảng Ý nghĩa chân giao tiếp LCD Y Bảng Bảng tín hiệu đầu vào khối RAM 24 Bảng Bảng tín hiệu đầu khối RAM 26 Bảng 3 Bảng đánh giá khối RAM 26 Bảng Bảng tín hiệu đầu vào khối Database 28 Bảng Bảng tín hiệu đầu khối Database 28 Bảng Bảng đánh giá khối database .29 Bảng Bảng tín hiệu đầu vào khối tích chập 30 Bảng Bảng tín hiệu đầu khối tích chập 31 Bảng Bảng đánh giá khối tích chập .31 Bảng 10 Bảng tín hiệu đầu vào khối Border 33 Bảng 11 Bảng tín hiệu đầu khối Border .33 Bảng 12 Bảng đánh giá khối border .34 Bảng 13 Bảng tín hiệu đầu vào khối addressRAM 35 Bảng 14 Bảng tín hiệu đầu khối addressRAM 35 Bảng 15 Bảng đánh giá khối addressRAM 36 Bảng 16 Bảng tín hiệu đầu vào khối Maxpooling 37 Bảng 17 Bảng tín hiệu đầu khối pooling 37 Bảng 18 Bảng đánh giá khối Maxpooling 38 Bảng 19 Bảng tín hiệu đầu vào khối Dense 39 Bảng 20 Bảng tín hiệu đầu khối Dense 40 Bảng 21 Bảng tín hiệu đầu vào khối Result 42 Bảng 22 Bảng tín hiệu đầu khối Result 42 Bảng 23 Bảng tín hiệu đầu vào khối Memmory work 44 Bảng 24 Bảng tín hiệu đầu khối Memmory work 45 Bảng 25 Bảng tín hiệu đầu vào khối convTOP 45 Bảng 26 Bảng tín hiệu đầu khối convTOP 47 Bảng 27 Bảng tín hiệu đầo vào khối TOP 48 Bảng 28 Bảng tín hiệu đầu khối TOP 49 storage[251] = 11'b10100000000; // [0.625] storage[252] = 11'b10011100000; // [0.609375] storage[253] = 11'b10011100000; // [0.609375] storage[254] = 11'b10001111000; // [0.55859375] storage[255] = 11'b01011111000; // [0.37109375] storage[256] = 11'b01001000000; // [0.28125] storage[257] = 11'b01101101000; // [0.42578125] storage[258] = 11'b10011011000; // [0.60546875] storage[259] = 11'b10100111000; // [0.65234375] storage[260] = 11'b10101101000; // [0.67578125] storage[261] = 11'b10110000000; // [0.6875] storage[262] = 11'b10110000000; // [0.6875] storage[263] = 11'b10110000000; // [0.6875] storage[264] = 11'b10110000000; // [0.6875] storage[265] = 11'b10110000000; // [0.6875] storage[266] = 11'b10101110000; // [0.6796875] storage[267] = 11'b10101000000; // [0.65625] storage[268] = 11'b10001100000; // [0.546875] storage[269] = 11'b01100110000; // [0.3984375] storage[270] = 11'b01011100000; // [0.359375] storage[271] = 11'b10000110000; // [0.5234375] storage[272] = 11'b10011111000; // [0.62109375] storage[273] = 11'b10101000000; // [0.65625] storage[274] = 11'b10101010000; // [0.6640625] storage[275] = 11'b10101001000; // [0.66015625] storage[276] = 11'b10101000000; // [0.65625] storage[277] = 11'b10100110000; // [0.6484375] storage[278] = 11'b10100010000; // [0.6328125] storage[279] = 11'b10100001000; // [0.62890625] storage[280] = 11'b10011100000; // [0.609375] storage[281] = 11'b10011010000; // [0.6015625] storage[282] = 11'b10000110000; // [0.5234375] storage[283] = 11'b01010011000; // [0.32421875] storage[284] = 11'b01001101000; // [0.30078125] storage[285] = 11'b01111010000; // [0.4765625] storage[286] = 11'b10100000000; // [0.625] storage[287] = 11'b10101000000; // [0.65625] 78 79 storage[288] = 11'b10101110000; // [0.6796875] storage[289] = 11'b10101111000; // [0.68359375] storage[290] = 11'b10110000000; // [0.6875] storage[291] = 11'b10110000000; // [0.6875] storage[292] = 11'b10110001000; // [0.69140625] storage[293] = 11'b10110000000; // [0.6875] storage[294] = 11'b10101110000; // [0.6796875] storage[295] = 11'b10101001000; // [0.66015625] storage[296] = 11'b10001111000; // [0.55859375] storage[297] = 11'b01101000000; // [0.40625] storage[298] = 11'b01010111000; // [0.33984375] storage[299] = 11'b10000010000; // [0.5078125] storage[300] = 11'b10011110000; // [0.6171875] storage[301] = 11'b10100111000; // [0.65234375] storage[302] = 11'b10101010000; // [0.6640625] storage[303] = 11'b10101001000; // [0.66015625] storage[304] = 11'b10100111000; // [0.65234375] storage[305] = 11'b10100110000; // [0.6484375] storage[306] = 11'b10100010000; // [0.6328125] storage[307] = 11'b10100000000; // [0.625] storage[308] = 11'b10011101000; // [0.61328125] storage[309] = 11'b10011000000; // [0.59375] storage[310] = 11'b01111100000; // [0.484375] storage[311] = 11'b01001100000; // [0.296875] storage[312] = 11'b01010011000; // [0.32421875] storage[313] = 11'b10001001000; // [0.53515625] storage[314] = 11'b10100010000; // [0.6328125] storage[315] = 11'b10101010000; // [0.6640625] storage[316] = 11'b10101101000; // [0.67578125] storage[317] = 11'b10101110000; // [0.6796875] storage[318] = 11'b10101110000; // [0.6796875] storage[319] = 11'b10110000000; // [0.6875] storage[320] = 11'b10110000000; // [0.6875] storage[321] = 11'b10110000000; // [0.6875] storage[322] = 11'b10101110000; // [0.6796875] storage[323] = 11'b10101001000; // [0.66015625] storage[324] = 11'b10001110000; // [0.5546875] storage[325] = 11'b01101000000; // [0.40625] storage[326] = 11'b01010110000; // [0.3359375] storage[327] = 11'b10000000000; // [0.5] storage[328] = 11'b10011101000; // [0.61328125] storage[329] = 11'b10100110000; // [0.6484375] storage[330] = 11'b10101000000; // [0.65625] storage[331] = 11'b10101000000; // [0.65625] storage[332] = 11'b10100111000; // [0.65234375] storage[333] = 11'b10100100000; // [0.640625] storage[334] = 11'b10100001000; // [0.62890625] storage[335] = 11'b10011111000; // [0.62109375] storage[336] = 11'b10011100000; // [0.609375] storage[337] = 11'b10010100000; // [0.578125] storage[338] = 11'b01101111000; // [0.43359375] storage[339] = 11'b01000111000; // [0.27734375] storage[340] = 11'b01011100000; // [0.359375] storage[341] = 11'b10001111000; // [0.55859375] storage[342] = 11'b10100100000; // [0.640625] storage[343] = 11'b10101001000; // [0.66015625] storage[344] = 11'b10101100000; // [0.671875] storage[345] = 11'b10101100000; // [0.671875] storage[346] = 11'b10101101000; // [0.67578125] storage[347] = 11'b10101110000; // [0.6796875] storage[348] = 11'b10101110000; // [0.6796875] storage[349] = 11'b10101110000; // [0.6796875] storage[350] = 11'b10101011000; // [0.66796875] storage[351] = 11'b10100110000; // [0.6484375] storage[352] = 11'b10001101000; // [0.55078125] storage[353] = 11'b01100110000; // [0.3984375] storage[354] = 11'b01010101000; // [0.33203125] storage[355] = 11'b10000010000; // [0.5078125] storage[356] = 11'b10011101000; // [0.61328125] storage[357] = 11'b10100100000; // [0.640625] storage[358] = 11'b10101000000; // [0.65625] storage[359] = 11'b10100111000; // [0.65234375] storage[360] = 11'b10100101000; // [0.64453125] storage[361] = 11'b10100011000; // [0.63671875] 80 81 storage[362] = 11'b10100001000; // [0.62890625] storage[363] = 11'b10011110000; // [0.6171875] storage[364] = 11'b10011010000; // [0.6015625] storage[365] = 11'b10010000000; // [0.5625] storage[366] = 11'b01100100000; // [0.390625] storage[367] = 11'b01000111000; // [0.27734375] storage[368] = 11'b01100110000; // [0.3984375] storage[369] = 11'b10010101000; // [0.58203125] storage[370] = 11'b10100011000; // [0.63671875] storage[371] = 11'b10101000000; // [0.65625] storage[372] = 11'b10101011000; // [0.66796875] storage[373] = 11'b10101011000; // [0.66796875] storage[374] = 11'b10101011000; // [0.66796875] storage[375] = 11'b10101100000; // [0.671875] storage[376] = 11'b10101101000; // [0.67578125] storage[377] = 11'b10101011000; // [0.66796875] storage[378] = 11'b10101001000; // [0.66015625] storage[379] = 11'b10100011000; // [0.63671875] storage[380] = 11'b10001010000; // [0.5390625] storage[381] = 11'b01100010000; // [0.3828125] storage[382] = 11'b01010111000; // [0.33984375] storage[383] = 11'b10000110000; // [0.5234375] storage[384] = 11'b10011110000; // [0.6171875] storage[385] = 11'b10100101000; // [0.64453125] storage[386] = 11'b10100101000; // [0.64453125] storage[387] = 11'b10100101000; // [0.64453125] storage[388] = 11'b10100100000; // [0.640625] storage[389] = 11'b10100010000; // [0.6328125] storage[390] = 11'b10100000000; // [0.625] storage[391] = 11'b10011110000; // [0.6171875] storage[392] = 11'b10011001000; // [0.59765625] storage[393] = 11'b10001100000; // [0.546875] storage[394] = 11'b01011111000; // [0.37109375] storage[395] = 11'b01000111000; // [0.27734375] storage[396] = 11'b01101100000; // [0.421875] storage[397] = 11'b10011000000; // [0.59375] storage[398] = 11'b10100100000; // [0.640625] storage[399] = 11'b10100111000; // [0.65234375] storage[400] = 11'b10101001000; // [0.66015625] storage[401] = 11'b10101010000; // [0.6640625] storage[402] = 11'b10101100000; // [0.671875] storage[403] = 11'b10101100000; // [0.671875] storage[404] = 11'b10101100000; // [0.671875] storage[405] = 11'b10101011000; // [0.66796875] storage[406] = 11'b10101001000; // [0.66015625] storage[407] = 11'b10011111000; // [0.62109375] storage[408] = 11'b10000000000; // [0.5] storage[409] = 11'b01010111000; // [0.33984375] storage[410] = 11'b01011010000; // [0.3515625] storage[411] = 11'b10001010000; // [0.5390625] storage[412] = 11'b10011111000; // [0.62109375] storage[413] = 11'b10100101000; // [0.64453125] storage[414] = 11'b10100101000; // [0.64453125] storage[415] = 11'b10100101000; // [0.64453125] storage[416] = 11'b10100011000; // [0.63671875] storage[417] = 11'b10100001000; // [0.62890625] storage[418] = 11'b10011111000; // [0.62109375] storage[419] = 11'b10011101000; // [0.61328125] storage[420] = 11'b10011001000; // [0.59765625] storage[421] = 11'b10001010000; // [0.5390625] storage[422] = 11'b01011111000; // [0.37109375] storage[423] = 11'b01001010000; // [0.2890625] storage[424] = 11'b01101101000; // [0.42578125] storage[425] = 11'b10011001000; // [0.59765625] storage[426] = 11'b10100011000; // [0.63671875] storage[427] = 11'b10100111000; // [0.65234375] storage[428] = 11'b10101000000; // [0.65625] storage[429] = 11'b10101001000; // [0.66015625] storage[430] = 11'b10101010000; // [0.6640625] storage[431] = 11'b10101010000; // [0.6640625] storage[432] = 11'b10101011000; // [0.66796875] storage[433] = 11'b10101011000; // [0.66796875] storage[434] = 11'b10101001000; // [0.66015625] storage[435] = 11'b10011010000; // [0.6015625] 82 83 storage[436] = 11'b01110100000; // [0.453125] storage[437] = 11'b01001100000; // [0.296875] storage[438] = 11'b01011100000; // [0.359375] storage[439] = 11'b10001101000; // [0.55078125] storage[440] = 11'b10100000000; // [0.625] storage[441] = 11'b10100100000; // [0.640625] storage[442] = 11'b10100100000; // [0.640625] storage[443] = 11'b10100100000; // [0.640625] storage[444] = 11'b10100010000; // [0.6328125] storage[445] = 11'b10100000000; // [0.625] storage[446] = 11'b10011110000; // [0.6171875] storage[447] = 11'b10011101000; // [0.61328125] storage[448] = 11'b10011000000; // [0.59375] storage[449] = 11'b10001100000; // [0.546875] storage[450] = 11'b01100100000; // [0.390625] storage[451] = 11'b01001010000; // [0.2890625] storage[452] = 11'b01101001000; // [0.41015625] storage[453] = 11'b10010100000; // [0.578125] storage[454] = 11'b10100010000; // [0.6328125] storage[455] = 11'b10100100000; // [0.640625] storage[456] = 11'b10100111000; // [0.65234375] storage[457] = 11'b10100110000; // [0.6484375] storage[458] = 11'b10100111000; // [0.65234375] storage[459] = 11'b10101010000; // [0.6640625] storage[460] = 11'b10101010000; // [0.6640625] storage[461] = 11'b10101010000; // [0.6640625] storage[462] = 11'b10100111000; // [0.65234375] storage[463] = 11'b10001111000; // [0.55859375] storage[464] = 11'b01100010000; // [0.3828125] storage[465] = 11'b01000110000; // [0.2734375] storage[466] = 11'b01100010000; // [0.3828125] storage[467] = 11'b10010000000; // [0.5625] storage[468] = 11'b10100000000; // [0.625] storage[469] = 11'b10100011000; // [0.63671875] storage[470] = 11'b10100011000; // [0.63671875] storage[471] = 11'b10100010000; // [0.6328125] storage[472] = 11'b10100000000; // [0.625] storage[473] = 11'b10011111000; // [0.62109375] storage[474] = 11'b10011110000; // [0.6171875] storage[475] = 11'b10011100000; // [0.609375] storage[476] = 11'b10011010000; // [0.6015625] storage[477] = 11'b10010001000; // [0.56640625] storage[478] = 11'b01110001000; // [0.44140625] storage[479] = 11'b01001100000; // [0.296875] storage[480] = 11'b01100110000; // [0.3984375] storage[481] = 11'b10010010000; // [0.5703125] storage[482] = 11'b10100000000; // [0.625] storage[483] = 11'b10100101000; // [0.64453125] storage[484] = 11'b10100101000; // [0.64453125] storage[485] = 11'b10100111000; // [0.65234375] storage[486] = 11'b10101000000; // [0.65625] storage[487] = 11'b10101010000; // [0.6640625] storage[488] = 11'b10101011000; // [0.66796875] storage[489] = 11'b10101001000; // [0.66015625] storage[490] = 11'b10011110000; // [0.6171875] storage[491] = 11'b01111001000; // [0.47265625] storage[492] = 11'b01001101000; // [0.30078125] storage[493] = 11'b01000100000; // [0.265625] storage[494] = 11'b01110010000; // [0.4453125] storage[495] = 11'b10011000000; // [0.59375] storage[496] = 11'b10100011000; // [0.63671875] storage[497] = 11'b10100100000; // [0.640625] storage[498] = 11'b10100101000; // [0.64453125] storage[499] = 11'b10100011000; // [0.63671875] storage[500] = 11'b10100001000; // [0.62890625] storage[501] = 11'b10011111000; // [0.62109375] storage[502] = 11'b10011110000; // [0.6171875] storage[503] = 11'b10011101000; // [0.61328125] storage[504] = 11'b10011011000; // [0.60546875] storage[505] = 11'b10010100000; // [0.578125] storage[506] = 11'b01111101000; // [0.48828125] storage[507] = 11'b01010010000; // [0.3203125] storage[508] = 11'b01100010000; // [0.3828125] storage[509] = 11'b10001110000; // [0.5546875] 84 85 storage[510] = 11'b10011111000; // [0.62109375] storage[511] = 11'b10100011000; // [0.63671875] storage[512] = 11'b10100101000; // [0.64453125] storage[513] = 11'b10100110000; // [0.6484375] storage[514] = 11'b10101000000; // [0.65625] storage[515] = 11'b10101010000; // [0.6640625] storage[516] = 11'b10101010000; // [0.6640625] storage[517] = 11'b10101000000; // [0.65625] storage[518] = 11'b10001101000; // [0.55078125] storage[519] = 11'b01011111000; // [0.37109375] storage[520] = 11'b01000000000; // [0.25] storage[521] = 11'b01001000000; // [0.28125] storage[522] = 11'b10000011000; // [0.51171875] storage[523] = 11'b10011101000; // [0.61328125] storage[524] = 11'b10100100000; // [0.640625] storage[525] = 11'b10100110000; // [0.6484375] storage[526] = 11'b10100011000; // [0.63671875] storage[527] = 11'b10100011000; // [0.63671875] storage[528] = 11'b10100001000; // [0.62890625] storage[529] = 11'b10011111000; // [0.62109375] storage[530] = 11'b10011110000; // [0.6171875] storage[531] = 11'b10011100000; // [0.609375] storage[532] = 11'b10011001000; // [0.59765625] storage[533] = 11'b10010101000; // [0.58203125] storage[534] = 11'b10000110000; // [0.5234375] storage[535] = 11'b01011110000; // [0.3671875] storage[536] = 11'b01010111000; // [0.33984375] storage[537] = 11'b10000010000; // [0.5078125] storage[538] = 11'b10011100000; // [0.609375] storage[539] = 11'b10100001000; // [0.62890625] storage[540] = 11'b10100011000; // [0.63671875] storage[541] = 11'b10100101000; // [0.64453125] storage[542] = 11'b10100110000; // [0.6484375] storage[543] = 11'b10101001000; // [0.66015625] storage[544] = 11'b10101001000; // [0.66015625] storage[545] = 11'b10011111000; // [0.62109375] storage[546] = 11'b01111100000; // [0.484375] storage[547] = 11'b01001011000; // [0.29296875] storage[548] = 11'b00111010000; // [0.2265625] storage[549] = 11'b01010010000; // [0.3203125] storage[550] = 11'b10001011000; // [0.54296875] storage[551] = 11'b10011111000; // [0.62109375] storage[552] = 11'b10100101000; // [0.64453125] storage[553] = 11'b10100011000; // [0.63671875] storage[554] = 11'b10100010000; // [0.6328125] storage[555] = 11'b10100000000; // [0.625] storage[556] = 11'b10011110000; // [0.6171875] storage[557] = 11'b10011101000; // [0.61328125] storage[558] = 11'b10011100000; // [0.609375] storage[559] = 11'b10011011000; // [0.60546875] storage[560] = 11'b10010111000; // [0.58984375] storage[561] = 11'b10010110000; // [0.5859375] storage[562] = 11'b10001101000; // [0.55078125] storage[563] = 11'b01101111000; // [0.43359375] storage[564] = 11'b01010100000; // [0.328125] storage[565] = 11'b01110010000; // [0.4453125] storage[566] = 11'b10010111000; // [0.58984375] storage[567] = 11'b10011111000; // [0.62109375] storage[568] = 11'b10100010000; // [0.6328125] storage[569] = 11'b10100011000; // [0.63671875] storage[570] = 11'b10100111000; // [0.65234375] storage[571] = 11'b10100111000; // [0.65234375] storage[572] = 11'b10101000000; // [0.65625] storage[573] = 11'b10010111000; // [0.58984375] storage[574] = 11'b01101101000; // [0.42578125] storage[575] = 11'b01000010000; // [0.2578125] storage[576] = 11'b00111010000; // [0.2265625] storage[577] = 11'b01100001000; // [0.37890625] storage[578] = 11'b10010011000; // [0.57421875] storage[579] = 11'b10100001000; // [0.62890625] storage[580] = 11'b10100101000; // [0.64453125] storage[581] = 11'b10100010000; // [0.6328125] storage[582] = 11'b10100000000; // [0.625] storage[583] = 11'b10011111000; // [0.62109375] 86 87 storage[584] = 11'b10011110000; // [0.6171875] storage[585] = 11'b10011100000; // [0.609375] storage[586] = 11'b10011010000; // [0.6015625] storage[587] = 11'b10011001000; // [0.59765625] storage[588] = 11'b10010111000; // [0.58984375] storage[589] = 11'b10010111000; // [0.58984375] storage[590] = 11'b10010011000; // [0.57421875] storage[591] = 11'b10000010000; // [0.5078125] storage[592] = 11'b01011100000; // [0.359375] storage[593] = 11'b01100011000; // [0.38671875] storage[594] = 11'b10001010000; // [0.5390625] storage[595] = 11'b10011101000; // [0.61328125] storage[596] = 11'b10100001000; // [0.62890625] storage[597] = 11'b10100011000; // [0.63671875] storage[598] = 11'b10100100000; // [0.640625] storage[599] = 11'b10100101000; // [0.64453125] storage[600] = 11'b10011111000; // [0.62109375] storage[601] = 11'b10000000000; // [0.5] storage[602] = 11'b01010010000; // [0.3203125] storage[603] = 11'b00111001000; // [0.22265625] storage[604] = 11'b01000000000; // [0.25] storage[605] = 11'b01110110000; // [0.4609375] storage[606] = 11'b10011010000; // [0.6015625] storage[607] = 11'b10100010000; // [0.6328125] storage[608] = 11'b10100011000; // [0.63671875] storage[609] = 11'b10100001000; // [0.62890625] storage[610] = 11'b10100000000; // [0.625] storage[611] = 11'b10011111000; // [0.62109375] storage[612] = 11'b10011101000; // [0.61328125] storage[613] = 11'b10011011000; // [0.60546875] storage[614] = 11'b10011001000; // [0.59765625] storage[615] = 11'b10010111000; // [0.58984375] storage[616] = 11'b10010110000; // [0.5859375] storage[617] = 11'b10010110000; // [0.5859375] storage[618] = 11'b10010110000; // [0.5859375] storage[619] = 11'b10001101000; // [0.55078125] storage[620] = 11'b01110011000; // [0.44921875] storage[621] = 11'b01010101000; // [0.33203125] storage[622] = 11'b01101110000; // [0.4296875] storage[623] = 11'b10010000000; // [0.5625] storage[624] = 11'b10011100000; // [0.609375] storage[625] = 11'b10100000000; // [0.625] storage[626] = 11'b10100000000; // [0.625] storage[627] = 11'b10011110000; // [0.6171875] storage[628] = 11'b10001000000; // [0.53125] storage[629] = 11'b01011001000; // [0.34765625] storage[630] = 11'b00111010000; // [0.2265625] storage[631] = 11'b00111010000; // [0.2265625] storage[632] = 11'b01010101000; // [0.33203125] storage[633] = 11'b10001000000; // [0.53125] storage[634] = 11'b10011100000; // [0.609375] storage[635] = 11'b10100000000; // [0.625] storage[636] = 11'b10100000000; // [0.625] storage[637] = 11'b10011111000; // [0.62109375] storage[638] = 11'b10011101000; // [0.61328125] storage[639] = 11'b10011100000; // [0.609375] storage[640] = 11'b10011010000; // [0.6015625] storage[641] = 11'b10010111000; // [0.58984375] storage[642] = 11'b10010110000; // [0.5859375] storage[643] = 11'b10010101000; // [0.58203125] storage[644] = 11'b10010100000; // [0.578125] storage[645] = 11'b10010100000; // [0.578125] storage[646] = 11'b10010110000; // [0.5859375] storage[647] = 11'b10010011000; // [0.57421875] storage[648] = 11'b10000100000; // [0.515625] storage[649] = 11'b01011100000; // [0.359375] storage[650] = 11'b01001100000; // [0.296875] storage[651] = 11'b01100000000; // [0.375] storage[652] = 11'b01111110000; // [0.4921875] storage[653] = 11'b10010001000; // [0.56640625] storage[654] = 11'b10010011000; // [0.57421875] storage[655] = 11'b10000100000; // [0.515625] storage[656] = 11'b01011111000; // [0.37109375] storage[657] = 11'b00111110000; // [0.2421875] 88 89 storage[658] = 11'b00111001000; // [0.22265625] storage[659] = 11'b01001101000; // [0.30078125] storage[660] = 11'b01111010000; // [0.4765625] storage[661] = 11'b10011000000; // [0.59375] storage[662] = 11'b10011110000; // [0.6171875] storage[663] = 11'b10011110000; // [0.6171875] storage[664] = 11'b10011110000; // [0.6171875] storage[665] = 11'b10011101000; // [0.61328125] storage[666] = 11'b10011100000; // [0.609375] storage[667] = 11'b10011010000; // [0.6015625] storage[668] = 11'b10011000000; // [0.59375] storage[669] = 11'b10010111000; // [0.58984375] storage[670] = 11'b10010110000; // [0.5859375] storage[671] = 11'b10010011000; // [0.57421875] storage[672] = 11'b10010011000; // [0.57421875] storage[673] = 11'b10010101000; // [0.58203125] storage[674] = 11'b10010110000; // [0.5859375] storage[675] = 11'b10010110000; // [0.5859375] storage[676] = 11'b10001111000; // [0.55859375] storage[677] = 11'b01110111000; // [0.46484375] storage[678] = 11'b01001011000; // [0.29296875] storage[679] = 11'b00111101000; // [0.23828125] storage[680] = 11'b01001000000; // [0.28125] storage[681] = 11'b01010100000; // [0.328125] storage[682] = 11'b01010101000; // [0.33203125] storage[683] = 11'b01001000000; // [0.28125] storage[684] = 11'b00111100000; // [0.234375] storage[685] = 11'b00111101000; // [0.23828125] storage[686] = 11'b01010010000; // [0.3203125] storage[687] = 11'b01111010000; // [0.4765625] storage[688] = 11'b10010111000; // [0.58984375] storage[689] = 11'b10011101000; // [0.61328125] storage[690] = 11'b10011110000; // [0.6171875] storage[691] = 11'b10011100000; // [0.609375] storage[692] = 11'b10011101000; // [0.61328125] storage[693] = 11'b10011100000; // [0.609375] storage[694] = 11'b10011010000; // [0.6015625] storage[695] = 11'b10011001000; // [0.59765625] storage[696] = 11'b10010111000; // [0.58984375] storage[697] = 11'b10010110000; // [0.5859375] storage[698] = 11'b10010101000; // [0.58203125] storage[699] = 11'b10010010000; // [0.5703125] storage[700] = 11'b10010001000; // [0.56640625] storage[701] = 11'b10010011000; // [0.57421875] storage[702] = 11'b10010101000; // [0.58203125] storage[703] = 11'b10010110000; // [0.5859375] storage[704] = 11'b10010100000; // [0.578125] storage[705] = 11'b10001100000; // [0.546875] storage[706] = 11'b01110000000; // [0.4375] storage[707] = 11'b01001000000; // [0.28125] storage[708] = 11'b00110111000; // [0.21484375] storage[709] = 11'b00110101000; // [0.20703125] storage[710] = 11'b00110110000; // [0.2109375] storage[711] = 11'b00111100000; // [0.234375] storage[712] = 11'b01001000000; // [0.28125] storage[713] = 11'b01100100000; // [0.390625] storage[714] = 11'b10000100000; // [0.515625] storage[715] = 11'b10011000000; // [0.59375] storage[716] = 11'b10011100000; // [0.609375] storage[717] = 11'b10011100000; // [0.609375] storage[718] = 11'b10011100000; // [0.609375] storage[719] = 11'b10011011000; // [0.60546875] storage[720] = 11'b10011011000; // [0.60546875] storage[721] = 11'b10011010000; // [0.6015625] storage[722] = 11'b10011001000; // [0.59765625] storage[723] = 11'b10010111000; // [0.58984375] storage[724] = 11'b10010101000; // [0.58203125] storage[725] = 11'b10010100000; // [0.578125] storage[726] = 11'b10010011000; // [0.57421875] storage[727] = 11'b10010000000; // [0.5625] storage[728] = 11'b10001111000; // [0.55859375] storage[729] = 11'b10010010000; // [0.5703125] storage[730] = 11'b10010011000; // [0.57421875] storage[731] = 11'b10010100000; // [0.578125] 90 91 storage[732] = 11'b10010101000; // [0.58203125] storage[733] = 11'b10010100000; // [0.578125] storage[734] = 11'b10001100000; // [0.546875] storage[735] = 11'b01110111000; // [0.46484375] storage[736] = 11'b01011010000; // [0.3515625] storage[737] = 11'b01001010000; // [0.2890625] storage[738] = 11'b01001111000; // [0.30859375] storage[739] = 11'b01100101000; // [0.39453125] storage[740] = 11'b10000001000; // [0.50390625] storage[741] = 11'b10010011000; // [0.57421875] storage[742] = 11'b10011011000; // [0.60546875] storage[743] = 11'b10011100000; // [0.609375] storage[744] = 11'b10011011000; // [0.60546875] storage[745] = 11'b10011011000; // [0.60546875] storage[746] = 11'b10011010000; // [0.6015625] storage[747] = 11'b10011010000; // [0.6015625] storage[748] = 11'b10011010000; // [0.6015625] storage[749] = 11'b10011001000; // [0.59765625] storage[750] = 11'b10010111000; // [0.58984375] storage[751] = 11'b10010101000; // [0.58203125] storage[752] = 11'b10010100000; // [0.578125] storage[753] = 11'b10010011000; // [0.57421875] storage[754] = 11'b10010001000; // [0.56640625] storage[755] = 11'b10001110000; // [0.5546875] storage[756] = 11'b10001101000; // [0.55078125] storage[757] = 11'b10001111000; // [0.55859375] storage[758] = 11'b10010010000; // [0.5703125] storage[759] = 11'b10010100000; // [0.578125] storage[760] = 11'b10010110000; // [0.5859375] storage[761] = 11'b10010111000; // [0.58984375] storage[762] = 11'b10011000000; // [0.59375] storage[763] = 11'b10010100000; // [0.578125] storage[764] = 11'b10001100000; // [0.546875] storage[765] = 11'b10000110000; // [0.5234375] storage[766] = 11'b10001010000; // [0.5390625] storage[767] = 11'b10010100000; // [0.578125] storage[768] = 11'b10011010000; // [0.6015625] storage[769] = 11'b10011100000; // [0.609375] storage[770] = 11'b10011100000; // [0.609375] storage[771] = 11'b10011011000; // [0.60546875] storage[772] = 11'b10011010000; // [0.6015625] storage[773] = 11'b10011001000; // [0.59765625] storage[774] = 11'b10011001000; // [0.59765625] storage[775] = 11'b10011001000; // [0.59765625] storage[776] = 11'b10011000000; // [0.59375] storage[777] = 11'b10010111000; // [0.58984375] storage[778] = 11'b10010101000; // [0.58203125] storage[779] = 11'b10010100000; // [0.578125] storage[780] = 11'b10010011000; // [0.57421875] storage[781] = 11'b10010010000; // [0.5703125] storage[782] = 11'b10010000000; // [0.5625] storage[783] = 11'b10001101000; // [0.55078125] end endmodule 92 ... Wieght Digital Detection CNN Convolutional Neural Network FPGA Field Programmable Gate Arrays TÓM TẮT BÁO CÁO Trong báo cáo tập lớn này, chúng em trình bày nội dung thực đề tài: ? ?Handwritten digital... lớp convolution, liệu từ RAM module thông qua Control module đưa đến khối Convolution layers module Khối tiếp tục gọi tới hàm border khối Border control module hàm tích chập khối Convolution blocks... huấn luyện mơ hình học máy Song song với q trình tìm hiểu lý thuyết, chúng em hướng dẫn làm tập lớn mơn học Nhóm chúng em chọn đề tài: ? ?Handwritten Digit Recognition on FPGA? ??, qua giúp chúng em