Skip to content

akira2963753/Neural-Network-Implementation-on-FPGA

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

95 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Neural Network Implementation on FPGA

Development Environment :

  • Vivado, version 2025

Lab :

  • Lab01 (PE)
  • Lab02 (Systolic_Array)
  • Lab03 (Input Register)
  • Lab04 (Max Pooling)
  • Lab05 (ReLU Function)
  • Lab06 (Moudle Integration)
  • Lab07 (Data-Path Design)

./Lab01/ ├── lab01_testbench/ │ └── test18_a.txt │ └── test18_b.txt ├── PE.sv └── tb_PE.sv 

目的 : 實現一個Processing Element (PE)

電路模塊與模擬結果如下圖所示 :

image image
./Lab02/ ├── Conv/ │ └── lab02_testbench/ # Test Pattern for Conv │ └── PE.sv │ └── PE_Array.sv │ └── tb_PE_Array.sv ├── Matrix/ │ └── lab02_testbench/ # Test Pattern for 4x4 Matrix Mul │ └── PE.sv │ └── PE_Array.sv │ └── tb_PE_Array.sv 

目的 : 根據 Output Satationary Data Flow 實現一個 N x N 的 Systolic Array

在這個Lab中,我們分別會去測試兩種運算,並且兩種測資皆會幫助我們做正45度角的Pipeline。

  • 捲積運算 : 我們將以3 x 3的Systolic Array為例,送入36筆資料來模擬捲積運算
  • 矩陣運算 : 我們會以4 x 4的Systolic Array為例,做一個4x4矩陣的相乘

由於我們的程式是參數化設計,因此皆可以擴展到 N X N 的 Systolic Array (包含TB),我們根據會每個對角線計算完的時間,從每個PE中取出答案存到TestBench中的Result_Matrix,當最後一個對角線計算完後,輸出Result_Matrix的結果出來,如下圖所示。

image image
image image
./Lab02/ ├── lab03_testbench/ ├── Input_Register.sv ├── Input_Register_Line.sv └── tb_Input_Register_Line.sv 

目的 : 實現一個 Input Register 來幫助系統將輸入的資料分流到正確的位置

Lab03的測資一共會輸入1024個資料,然後通過Input Register將資料分流到正確的位置,並且會做正45度Pipeline。

image image

目的 : 實現激活函數(Activation Function)進行非線性運算,讓神經網路能逼近更複雜的函數。ReLU的計算效率高且能改善梯度消失問題。

./Lab05/ ├── lab05_testbench/ │ └── input_data.txt │ └── generate_input_data.py ├── RELU.sv └── tb_RELU.sv