- Vivado, version 2025
- 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)
電路模塊與模擬結果如下圖所示 :
![]() |
![]() |
|---|
./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的結果出來,如下圖所示。
![]() |
![]() |
|---|
![]() |
![]() |
|---|
./Lab02/
├── lab03_testbench/
├── Input_Register.sv
├── Input_Register_Line.sv
└── tb_Input_Register_Line.sv
目的 : 實現一個 Input Register 來幫助系統將輸入的資料分流到正確的位置
Lab03的測資一共會輸入1024個資料,然後通過Input Register將資料分流到正確的位置,並且會做正45度Pipeline。
![]() |
![]() |
|---|
目的 : 實現激活函數(Activation Function)進行非線性運算,讓神經網路能逼近更複雜的函數。ReLU的計算效率高且能改善梯度消失問題。
./Lab05/
├── lab05_testbench/
│ └── input_data.txt
│ └── generate_input_data.py
├── RELU.sv
└── tb_RELU.sv







