FPGA vivado裡的microblaze怎麼和FPGA裡的資料互傳?he lao2018-11-21 09:46:11

300bit。。

分成幾個32bit的用ram

ps端用bram controller控制,最簡單的就用

xil_out32 xil_in32

這種函式來讀寫。當然還有其他的方式,也就是對相應的地址進行讀寫。

pl端直接讀寫。

FPGA vivado裡的microblaze怎麼和FPGA裡的資料互傳?LogicJitterGibbs2018-11-26 10:27:01

暫時沒有在 vivado 裡實現過此類操作,但是在 ISE 上做過類似的事情。

在軟核和邏輯之間通訊,總的有兩種方式:

以軟核為主,把邏輯部分封裝成 IP 核,在軟體中呼叫

以邏輯為主,軟核在邏輯工程中作為一個 IP 核使用。

以上兩種方式,軟核和邏輯之間都透過 AXI4 匯流排進行通訊,在 ISE 時代還允許使用過去的匯流排,在 Vivado 上實際上只能使用 AXI4 匯流排。

在我的專案中,AXI4 通訊分為配置暫存器和資料通訊兩種型別:

資料

資料通訊透過外部 DDR 中轉實現。

在軟核中例項化 DDR 控制器 MIG,例項化一個 AXI4 擴充套件匯流排。軟核透過 MIG 寫入讀取 DDR中的資料。

邏輯部分使用一個 DataMover IP 掛載到 AXI4 擴充套件匯流排,和 DDR 控制器通訊,完成 DDR 的讀寫操作。

這樣一來,軟核和邏輯可以以外部 DDR 為媒介進行資料通訊,再搭配一組 req/finish 訊號進行資料通訊中 請求/儲存完成 的操作。

我的專案中使用的是 DDR 完成資料中轉,使用 AXI 介面的 BRAM 應該也能實現類似的操作。應該和 @he lao 說的類似。

——————————————-

暫存器配置

暫存器配置使用 AXI4-Lite 匯流排實現,每個暫存器固定為 32 位。

軟核中例項化一個 AXI4-Lite 匯流排,在邏輯工程中例項化一個 slave_register 模組連線到軟核的 Lite 匯流排,對總線上的操作進行處理和響應。該模組輸入輸出暫存器資料到其他邏輯模組,實現軟核暫存器到邏輯訊號的轉換。

AXI4-Lite 位寬固定為 32 位,上述資料通訊中的 req/finish 訊號也是透過暫存器實現。

總的來說, 300 bit 的資料應該透過資料通訊的方式實現,因為資料量比較小,可以使用 BRAM 而不是外部 DDR。我沒有使用過 BRAM,但大概的操作應該是在軟核中例項化一個 AXI 介面的 BRAM,對映一個 AXI 地址空間,透過一個 AXI interconnect 連線到軟核輸出的 AXI 總線上;邏輯中例項化軟核,並將訊號連線到軟核的 AXI 匯流排,透過 BRAM 對應的地址訪問 BRAM。

以上是我的個人理解,可能存在問題,歡迎探討。另外推薦自己關於 AXI 匯流排的文章,同樣也是個人理解,歡迎討論。

ljgibbs:深入 AXI4 匯流排(一)握手機制

FPGA vivado裡的microblaze怎麼和FPGA裡的資料互傳?xiaoyang2018-11-26 12:58:56

資料量很小,用bram ctrl就可以了

FPGA vivado裡的microblaze怎麼和FPGA裡的資料互傳?我還想說點啥2018-12-04 10:57:42

microblaze的AXI4_lite是32位的。

如果要傳300bit的話,可以用兩個fifo。第一個fifo用來寫入300bit+20bit(無效)資料,傳出32bit*10資料給microblaze。microblaze做完處理後,再將這300bit資料分成32bit*10傳送給第二個fifo。第二個fifo的wr_data是32bit,rd_data是320bit,得到這320bit的資料後,FPGA只取其中的300bit就可以了。

FPGA vivado裡的microblaze怎麼和FPGA裡的資料互傳?菜鳥中的鶸2019-01-06 10:04:25

這個問題嘛,emmm

軟核為中心,邏輯部分封裝成ip核掛在總線上,300bit的資料存在邏輯部分的fifo裡,給fifo的埠分配一個匯流排地址,直接讀/寫這個地址