# LAB 2-AXI-Master Interface 實作範例遇到的問題 ### 下載從windows來的檔案之後導入ubuntu無法閱讀 : 要使用 dos2unix 指令將其轉換成 linux 系統有辦法閱讀的檔案。原因是因為在 windows 系統中的換行符號為\r\n。但是在 linux 系統之中的換行符號\n。dos2unix就是用來將\r\n換成\n。相反來說,要將 linux 系統之中的檔案轉換到 windows 系統就可以使用 unix2dos 指令。 ### 加入directives的方式 在開始 Synthesis 之前必須先加入 directive 描述。加入directive 有兩種方式,一種是 inline 方式(使用#pragma),另一種是以directives.tcl 來控制。 ### 執行c sim時遇到的許多error ``` ERROR: [HLS 207-812] 'fir.h' file not found (AXI-Master_lab2/FIR.cpp:2:10) ERROR: [SIM 211-100] 'csim_design' failed: compilation error(s). ERROR: [HLS 200-627] Cannot find C test bench. Please specify test bench files using 'add_files -tb'. fatal error: fir.h: No such file or directory #include "fir.h" . . . ``` 以上錯誤都是執行c sim時候一直遇到的,最後我把資料都整理好統一放在HLS project的folder裡面就解決了(之前design、testbench和其他一些需要在c sim時讀取的檔案都分散在不同的folder之中。)  ### 找不到c sim以及co sim紀錄檔的檔案位置   ### .bit檔以及.hwh檔的位置 ``` /home/ubuntu/course_lab-2/stream/Stream_vivado_lab2/Stream_vivado_lab2.runs/impl_1/design_1_wrapper.bit /home/ubuntu/course_lab-2/stream/Stream_vivado_lab2/Stream_vivado_lab2.gen/sources_1/bd/design_1/hw_handoff/design_1.hwh ``` 這兩個檔案都是去vivado專案所儲存的資料夾裡面尋找。 * .bit檔去後綴為.run的資料夾,再進impl_1資料夾就可以找到。 * .hwh檔去後綴為.gen的資料夾,再進hw_handoff資料夾就可以找到。 # LAB 3 FIR ## BRAM * BRAM的定義: RAM是Random Access Memory,也就是**隨機訪問數據記憶體**,RAM的內部是一個一個小記憶體單元(可以看成是一個小格子)組成。每個記憶體單元都對應一個位址編號。當我們需要讀寫數據時,就訪問對應的記憶體單元位址,很快地把數據寫入或者讀取出來。BRAM是Block RAM,也就是FPGA中專用RAM資源,固定分佈在FPGA內部的特定位置。而分散式RAM(Distributed RAM或DRAM)是由FPGA的LUT邏輯資源組合而成。 * BRAM的組成 BRAM在FPGA實際對應的資源是RAMB36E1和RAMB18E1。 (1)RAMB36E1 RAMB36E1是一種具有36KB容量的Block RAM,**由兩個獨立的18KB BRAM(Block RAM,RAMB18E1)組成。** 一個36K的Block Memory可以配置成4種情形: 全部用於配置成36KB的BRAM; 全部用於配置成36KB的FIFO; 配置成18KB的BRAM和18KB的BRAM; 配置成18KB的BRAM和18KB的FIFO。 這裡需要注意的是,不能配置成兩個18KB的FIFO,因為一個Block Memory中間有一個FIFO Logic結構,它用於生成FIFO控制信號,包括讀/寫位址等,由於它只有1個且不能共用,所以最多只能配置一個FIFO。 (2)RAMB18E1 RAMB18E1是一種具有18KB容量的Block RAM,是Xilinx FPGA重要的內置Block RAM配置模組,**提供高速的同步存儲訪問能力。** (3)FPGA的BRAM數量 BRAM資源是FPGA中非常重要的資源,不同型號FPGA晶元的BRAM數量不一樣 --- DRAM是組合邏輯直接輸出,BRAM則是時序邏輯輸出。BRAM把位址送進去的時候是要過寄存器,所以數據也是要有時鍾才能輸出。  --- BRAM IP的基本選項:  左邊的IP SYMBOL(省略末尾的a/b): * addr:埠地址輸入 * clk :埠時鐘輸入 * din : 連接埠資料輸入 * dout: 埠資料輸出 * ena: 埠使能輸入,高有效 * rst : 埠複位輸入,高有效 * wea:寫使能/Byte 寫使能輸入,高有效 ### BRAM的三種模式 第一種,WRITE_FIRST(寫先於讀)  紅線以前,WE=0 ,即埠做的是讀操作。 在CLK上升沿后,位址aa里的數據打到DO。 在紅線后,WE=1,即埠做的是寫操作。 在CLK上升沿后,**DI的數據存入到位址bb里,與此同時輸入的數據DI直接打到去輸出DO。原先存在bb里的數據嘛還沒出來就被衝掉。** 第二種,READ_FIRST(讀先於寫)  紅線以前,WE=0 ,即埠做的是讀操作。 在CLK上升沿后,位址aa里的數據打到DO。 在紅線后,WE=1,即埠做的是寫操作。 在CLK上升沿后,DI的數據存入到位址bb里,與此同時原先存放在位址bb的數據輸出到DO。 第三種,NO_CHANGE  紅線以前,WE=0 ,即埠做的是讀操作。 在CLK上升沿后,位址aa里的數據打到DO。 在紅線后,WE=1,即埠做的是寫操作。 在CLK上升沿后,DI的數據存入到位址bb里,與此同時輸出DO的數據保持不變(依舊是位址aa里的數據)
×
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