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   

About

No description or website provided.

Topics

Resources

Stars

Watchers

Forks

Contributors 3

  •  
  •  
  •