- 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 






