# SOC Design Study Journel NTHU EE5251 SOC Design 學號:112061619 姓名:王證皓 # Lab 1 ## 1.Introduction 此實驗目的為完成tool的虛擬機環境安裝,以及使用乘法器程式實現High-Level Synthesis,將C code 轉成RTL,並使用vivado進行整合ip與合成,最後輸出bitstream到PYNQ-Z2板上做驗證。 ## 2.注意事項 Directives Control在synthesis使用如下圖,但進行到Cosimulation時,須將ap_ctrl_none那行拿掉以防錯誤,Export IP階段時,則記得需還原成原本的directive並重新synthesis再匯出IP。  # Lab 2 ## 1.Introduction 此次實驗為使用FIR程式透過兩種不同interface來傳遞,第一種為AXI-Master,第二種為AXI-Stream,實驗步驟主要與上次大致相同,都會先使用HLS,不同的部分在於會使用插入兩種interface,引入IP後,Stream會使用到in跟out的DMA,最後驗證的部分MAXI我使用的是PYNQ的板子,Stream則是使用kv260做驗證。 ## 2.注意事項 此次實驗在設置directive時,須將AXI-master的depth設超過600,可參考下圖  # Lab 3 ## 1.Block Diagram Function:  ## 2.Operation ### (1) Tap Parameter in Tap parameter會透過AXI-Lite來輸入,並存放到Tap_RAM裡面,AXI-Lite由wvalid與wready的handshake來做Data的傳遞,address也為相同原理,且須確定Tap parameter的address為0x20-FF,此時tap_We與tap_EN皆須拉起,並從RAM的位址0從小到大依序存放到位址44。 ### (2) Access Tap Parameter 要存取Tap parameter時,tap_WE須關閉且tap_EN需打開,並依序輸入位址即可存取數值。 ### (3) Ap_ctrl 當存完tap parameter後,會輸入位址0x00並在資料的第0個bit拉起,也就是ap_start會啟動FIR engine,此時ap_idle會變為0,並在運算結束後拉起ap_done。 ### (4) AXI-Slave & AXI-Master 在ap_start啟動後,會透過AXI-Slave傳輸X的數值,即ss_tready會拉起以接收資料,並在運算結束後拉起sm_tvalid以輸出結果,並在最後一筆輸入輸出資料分別拉起ss_tlast與sm_tlast。 ### (5) Data-RAM 此處以bram實現shift ram的效果,首先會將ss_tready拉起後的下一個cycle將data_WE打開,並存放到最底層(位址44),下一次輸入會存到位址40,依此類推,直到存到位址0時,下一筆資料會從位址44繼續存放,當要存取時,會由counter控制位址從小到大存取。  Tap RAM的位址由counter從12’h28依序減4往下數即可,Data RAM則由兩組counter一起去控制輸出位址,一個counter在接收到ss_tready後將數值設為12’h28減去一個offset,並從這個數開始往上數,而這個offset則是由另一個counter,當接收到ss_tready時,會+4並維持,像圖中所示,data_A為紅框中12’h28時,offset為0,另一個data_A為12’h24時,offset則為4,以此類推即可得到shift RAM的效果。 # Lab 4-1 ## 1.Introduction 此次實驗需要的背景知識為wishbone的interface,主要需撰寫的部分為counter的部分,當wbs_adr_i為380開頭時開始數10個clk拉起wbs_ack_o,總共會延遲11個clk,至於11個clk的用途會於lab4-2詳細說明,而counter的主要用途為用來存firmware進入bram,之後會將firmware的fir拿出來使用,輸出結果可以下mprj的前16個bit,如下圖為FFE3。   # Lab 4-2 ## 1.Introduction 此次實驗在firmware的部分需fir的controller,負責將fir的input透過wishbone輸入至user project,而configuration register則需自行設計,如下圖範例,並透過lab3的verilog fir將資料根據address做decode並運算,最後由輸出由firmware端驗證以及觀察latency。  ## 2.Block Diagram  ## 3.FSM S0:將frimware 透過wishbone 存進exmem S1:當wbs_adr_i 為0x3000_0000 時,將11 筆tap parameter 存進bram11 及傳送data length 總共經過12 個clk S2:確認wbs_adr_i 為0x3000_0000 時,接收X[n] 並計算11 筆資料的乘積 S3:將計算結果回傳至wbs_dat_o S4:當計算至data length 時結束運算  # Lab 5 ## 1. Block diagram A. Object: 把Caravel SOC simulation環境放到FPGA上 B. Step: 1. Load firmware code 檔案參數給PS side DDR,要load進硬體裡面透過AXI-master protocol 藉由read_romcode硬體放到BRAM裡 2. Load完後,ResetControl硬體把Reset放掉 3. 透過Caravel_ps傳遞mprj反映在axilite   ## 2.注意事項 此次唯一需注意的地方為在load不同的hex時,需設置reset  最後可讀mprj pin  # Lab 6 ## 1.Introduction 此次實驗會將fir,matmul,qsort,uart整合到firmware上,前三個function每執行完成一個function時需輸入一組address至testbench來驗證,而testbench會在最後進行一個loop back test,loop back的意思是發生interrupt時將一組資料從外部寫入uart的rx端,接收到後會由uart的tx寫回testbench,而user project的部分則須將lab4-1的counter加進來以寫入bram,而configuration register的部分,0x380為counter,0x300為user profect uart,以此address進行decode。 ## 2.注意事項 此次實驗有需多細節須注意,像是我們這組在做decode時,我們這組因為一開始不小心有寫到這樣的架構  變成在執行FIR,QS,Matmul的位置為0x380時,而mprj[6]就會開始吃到錯誤的數值,而非使用uart的輸入輸出,進而產生亂碼,後來只讓uart單獨做控制就能成功解決 而在跑run_vivado時也有出現timing violation的問題可參考https://github.com/bol-edu/HLS-SOC-Discussions/discussions/158,非常感謝同學的幫助
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up