此專案來自中原大學湯松年教授所開設的硬體描述語言科目的Final Project,目的是設計一個2D Convolution Processor。2D Convolution Processor是一個可以對2D圖像進行卷積運算的硬體,透過卷積運算可以對圖像進行特徵提取,是影像處理中常用的技術之一。
- 依照TM依序拿取Data,並進行Convolution運算
- 透過Memory Controller來控制Memory,並透過DMA來取得Data,Data Access並進行Convolution運算
- 使用一般乘法 Signed(a*b)
- 使用two-cycle乘法
Final Project Grading (40 %)
-
基本work (沒有寫Verilog)(5~10分)
- Study 2D Conv.運算方式,以軟體(C, Python, Excel, 手算)做出一組2D Conv. (size如第一頁的規格)之運算結果(floating-point) 。(5%)
- 根據a.的floating-point運算內容,得出其fixed-point值的運算結果(8-bit -> 16-bit),並計算其SQNR(由36個output值做平均後計算SQNR,SQNR值需 > 30 dB)。(10%)
-
基於1. ,有寫Verilog Code,但Compile不過或無法執行模擬(e.g.輸出為X) (10~15分)
-
基於1., Verilog Code可以Compile與模擬(即有跑出值),但結果不正確。(15~25分)
- 以”架構1/乘法器1”的方式。(15分)
- 以”架構2/乘法器1”的方式。(20分)
- 以”架構2/乘法器2”的方式。(25分) PS: 倘若in_st或out_st沒有正確出現>>扣3分
-
基於1., Verilog Code可以Compile與模擬(即有跑出值),且結果正確。(25~35分)
- 以”架構1/乘法器1”的方式。(25分)
- 以”架構2/乘法器1”的方式。(30分)
- 以”架構2/乘法器2”的方式。(35分) “PS: 倘若in_st或out_st沒有正確出現>>扣3分”
-
基於4., 進階加上以下的設計內容。(+5分) (四選一,視成果加分)
- 完成一組Conv. “層”的運算(e.g., 兩個input feature maps;四個output feature maps)。
- 你的設計可以設定執行“3 x 3”或“5 x 5”兩種規格的kernel運算。
- 將你的設計進一步合成出電路做模擬或測試(FPGA Quartus/Vivado Tool或其他)。
- 提出你自己對設計優化的想法(找老師check)。
選擇第5點,在convolution的運算後,再加上一個maxpooling的運算,將convolution的結果進行maxpooling。
MaxPool: 2x2 (將整個map 切成4個小區塊,每個小區塊取最大值)
目的: 降低圖像的維度,並保留重要的特徵
convolution後的圖像大小: 6x6 (input: 8x8, kernel: 3x3)
maxpooling後的圖像大小: 2x2 (input: 6x6, 每9個pixel取一個最大值)
- 2-cycle 應該要分成兩個乘法,而不是一個乘法一個加法
- 硬體資源花費過多,可以參考sytolic array或是MAC array的架構