Skip to content

kevin861222/SOC_FIR-AXI

Repository files navigation

SOC_lab3

題目:SOC_FIR-AXI 最後更新 : 2023.10.22

作者:王語

聲明:本專案接受任何理性評論與建議


簡介

小型練手專案,設計 FIR 計算單元,並通過 AXI-Lite 以及 AXI-stream 維護資料傳輸。 使用 vivado 合成並實現於 pynq-z2

Table of files

  • Code - 本專案原始程式碼

    內含一個README.md說明如何運行程式

  • Simulation_logs - 模擬結果與說明

  • Waveform - 波形圖

  • GitHubLink.txt - 本專案連結

  • LICENSE - MIT LICENSE

  • RTL_Viewer(schematic).pdf - 在vivado環境下合成出來的電路圖

  • fir_utilization_synth.rpt - 在pynq-z2中使用的資源統計

  • report.pdf - 完整的報告

  • timing_report.txt - 時序分析


Intro

設計一個FIR運算IP,並使用 axi 維護資料傳輸

  • FIR $$Y[n] = \sum{(a[n-11]*X[n])}$$

    n ∈ [0,599]

    • data_length = 600

    • Data_Width = 32

    • Tape_Num = 11

  • Hand Shake

    • AXI-Lite
    • AXI-Stream

FIR 運作機制

  1. 初始狀態為IDEL,指允許AXI-Lite傳輸。
  2. 接收11筆tap,同時在內部reset data RAM
  3. 接收length
  4. 接收ap_start,進入WORK狀態,允許AXI_Lite與AXI-Stream傳輸
  5. 接收x[n]並運算,再將y[n]輸出,接收資料、運算、傳出資料是平行任務 當counter=length時輸出y[n]會附帶tlast信號
  6. 結束運算ap_done = 1,等待該資訊傳遞成功
  7. ap_done 復位,發self_reset_n,將系統回復初始狀態,此self_reset_n不會重置data RAM以及tap RAM中的資料。

TestBench 驗證概述

  1. 透過axis_reset_n重置DUT
  2. 透過axi-lite(R)確認ap_idle = 1
  3. 傳輸length、11筆tap資訊
  4. 驗證tap資訊
  5. 傳輸ap_start資訊
  6. 準備傳輸x[n]與接收y[n]
  7. 比對golden_test
  8. 準備接收ap_done
  9. 準備接收ap_idle
  10. 比對ap_signals
  11. 重複步驟1~9兩次

Waveform

僅概要說明設計,詳見 report.pdf

  1. FIR運算過程

    截圖 2023-10-23 上午12 07 51

  2. FIR運作過程RAM Addr變化 (時間軸同上圖)

    截圖 2023-10-23 上午12 08 17

  3. AXI-Lite 讀取(AR/R Chennel)

    截圖 2023-10-23 上午12 08 57

  4. AXI-Lite 寫入 (AW/W Chennel)

    截圖 2023-10-23 上午12 09 26

  5. FIR狀態切換

    -IDLE -> WORK

    截圖 2023-10-23 上午12 09 51

    -WORK -> IDLE (在ap_done被順利接收後返回初始狀態)

    截圖 2023-10-23 上午12 10 04

About

FIR IP with AXI-Lite & AXI_stream

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages