概述
外部存儲(chǔ)器接口( EMIF )通信常用于FPGA和DSP之間的數(shù)據(jù)傳輸,即將FPGA作為DSP的外部SRAM、或者協(xié)同處理器等。Xilinx提供了AXI-EMC IP核,將其掛載到AXI總線用于EMIF通信,也可方便地實(shí)現(xiàn) PL (FPGA)和 PS (MicroBlaze或者ARM)之間的數(shù)據(jù)交互功能。
本文主要介紹一下該IP核的使用,以及創(chuàng)建Vivado工程對(duì)EMIF通信功能進(jìn)行板上測(cè)試。
軟硬件平臺(tái)
軟件平臺(tái) :Vivado 2017.4;
硬件平臺(tái) :xc7a35tftg256-1;
AXI-EMC
功能特性
AXI-EMC IP核是一種可以支持各種型號(hào)內(nèi)存的控制器,和EMIF接口類似,利用它可以實(shí)現(xiàn)數(shù)據(jù)的交互和通信。該IP核有以下功能特性:
- 接口采用AXI4 Slave Memory Map,位寬支持32、64bits;
- 支持AXI4增量和包傳輸,支持窄帶和非對(duì)其傳輸;
- 最多支持4個(gè)外部存儲(chǔ)器;
- 支持奇偶校驗(yàn)和流水線級(jí)同步SRAM等;
參數(shù)配置
- AXI Data Width:AXI總線位寬選擇32位;
- Number of Memory Banks:存儲(chǔ)器個(gè)數(shù)這里選擇1即可;
- AXI ID位寬和存儲(chǔ)空間地址選擇默認(rèn)配置;
- Memory Type:內(nèi)存型號(hào)選擇異步SRAM;
- Data Width:數(shù)據(jù)位寬選擇32位,與AXI總線位寬保持一致;
- Timing Parameters參數(shù)默認(rèn)是100MHZ AXI時(shí)鐘下的配置;
- Advanced Configuration:高級(jí)配置選項(xiàng)保持默認(rèn),不用配置IP核內(nèi)部寄存器;
Vivado工程創(chuàng)建
本工程是在MicroBlaze最小系統(tǒng)工程基礎(chǔ)上進(jìn)行創(chuàng)建,利用AXI-EMC在MicroBlaze軟核端對(duì)FPGA端進(jìn)行EMIF數(shù)據(jù)讀寫,進(jìn)而實(shí)現(xiàn)PS和PL端數(shù)據(jù)交互功能。
搭建Block Design
- 在MicroBlaze最小系統(tǒng)的Block Design工程中添加AXI-EMC IP核,并對(duì)參數(shù)進(jìn)行配置;
- 將IP核的 rdclk 接口以及 s_axi_aclk 接口與MIG IP提供的100MHZ用戶時(shí)鐘接口 ui_clk 進(jìn)行連接;
- 將 mem_a (地址)、 mem_cen (片選)、 mem_dq_o (輸出數(shù)據(jù))、 mem_dq_i (輸入數(shù)據(jù))、 mem_oen (讀使能)、 mem_wen (寫使能)接口引出,在頂層文件中會(huì)進(jìn)行調(diào)用。
最終搭建完成的Block Design如下圖所示:
修改頂層文件
在生成的頂層文件中添加以下代碼,用于實(shí)現(xiàn)FPGA端基本的EMIF通信功能,以及添加ILA模塊實(shí)現(xiàn)對(duì)EMIF接口信號(hào)的實(shí)時(shí)觀察。
reg [31:0] data_reg,mem_dq_i_reg;
reg [2:0] mem_wen_r,mem_oen_r;
assign mem_dq_i = mem_dq_i_reg;
always@(posedge ui_clk) begin
mem_wen_r <= {mem_wen_r[1:0],mem_wen};
mem_oen_r <= {mem_oen_r[1:0],mem_oen};
end
always@(posedge ui_clk)
if(mem_wen_r[2:1] == 2'b10) begin
case(mem_a[17:2])
16'h5555:
data_reg <= mem_dq_o;
default:
data_reg <= data_reg;
endcase
end
always@(posedge ui_clk)
if(mem_oen_r[2:1] == 2'b10) begin
case(mem_a[17:2])
16'haaaa:
mem_dq_i_reg <= data_reg;
default:
mem_dq_i_reg <= mem_dq_i_reg;
endcase
end
ila_0 ila_0_u0
(
.clk (ui_clk),
.probe0 (mem_a),
.probe1 (mem_cen),
.probe2 (mem_dq_i),
.probe3 (mem_dq_o),
.probe4 (mem_oen),
.probe5 (mem_wen),
.probe6 (uart_rtl_0_txd)
);
創(chuàng)建SDK工程
在SDK軟件中,采用Xilinx提供的Hello World工程,在helloworld.c文件中添加以下代碼,用于實(shí)現(xiàn)MicroBlaze軟核每隔一定時(shí)間在FPGA端0x55554地址下寫入32位十進(jìn)制數(shù)據(jù):111,并從0xaaaa4地址將該數(shù)據(jù)讀出。
#include < stdio.h >
#include "platform.h"
#include "xil_io.h"
#include "xparameters.h"
#include "xuartlite.h"
#include "xuartlite_l.h"
int ii,data;
int main()
{
init_platform();
print("EMIF TESTnr");
while(1)
{
Xil_Out32(XPAR_EMC_0_S_AXI_MEM0_BASEADDR+0x5555*4,111);
data=Xil_In32(XPAR_EMC_0_S_AXI_MEM0_BASEADDR+0xaaaa*4);
for(ii=0;ii< 100;ii++);
}
cleanup_platform();
return 0;
}
功能測(cè)試
該Vivado工程利用AXI-EMC IP核實(shí)現(xiàn)異步SRAM接口,在MicroBlaze軟核CPU和FPGA之間進(jìn)行基礎(chǔ)的EMIF通信。該工程為實(shí)現(xiàn)PS和PL之間的數(shù)據(jù)交互功能提供一種很好的思路。
FPGA板上測(cè)試結(jié)果如上圖所示,MicroBlaze軟核往FPGA 0x55554地址下寫入32位十進(jìn)制數(shù)據(jù)111,F(xiàn)PGA將該數(shù)據(jù)進(jìn)行寄存,供軟核從0xaaaa4地址下讀出。
-
處理器
+關(guān)注
關(guān)注
68文章
19259瀏覽量
229651 -
dsp
+關(guān)注
關(guān)注
553文章
7987瀏覽量
348745 -
FPGA
+關(guān)注
關(guān)注
1629文章
21729瀏覽量
602986 -
存儲(chǔ)器
+關(guān)注
關(guān)注
38文章
7484瀏覽量
163762 -
通信
+關(guān)注
關(guān)注
18文章
6024瀏覽量
135950 -
Xilinx
+關(guān)注
關(guān)注
71文章
2167瀏覽量
121302
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論