ZYNQ PS和PL交互

ZYNQ PS和PL交互


文章目录

  • [ZYNQ PS和PL交互](#ZYNQ PS和PL交互)
  • 前言
  • 一、交互方式
    • [1.1 GP接口](#1.1 GP接口)
    • [1.2 PS AXI_MASTER](#1.2 PS AXI_MASTER)
    • [1.3 PS AXI_SLAVE](#1.3 PS AXI_SLAVE)
    • [1.4 HP接口和ACP接口](#1.4 HP接口和ACP接口)
  • [二 GP接口应用](#二 GP接口应用)

前言


一、交互方式

1.1 GP接口

AXIM_GP:属于AXI-lite协议。适用于少量数据

一般不用AXI-FIFO作为数据交互,因为互联模块本身也有FIFO(但是空间小)。大量数据其实也就不用这种方式。

1.2 PS AXI_MASTER

1.3 PS AXI_SLAVE

1.4 HP接口和ACP接口

适用快速、大量数据传输交互

二 GP接口应用

使用一个GP接口实现对PL端的BRAM的读写
Vivado Block Memory Generator v8.4学习总结
GP接口
通过BRAM实现PS与PL数据交互

代码如下:

c 复制代码
`timescale 1ns / 1ps

module RAM_WR#(
    parameter       P_OPERATION_NUM = 40    ,
    parameter       P_DATA_WIDTH    = 32    ,
    parameter       P_WRITE_BASEADDR= 0     ,
    parameter       P_READ_BASEADDR = 40    
)(
    input           i_clk           ,
    input           i_rst           ,

    output [31:0]   o_bram_addr     ,
    output [31:0]   o_bram_data     ,
    output          o_bram_en       ,
    output          o_bram_wen      ,
    input  [31:0]   i_bram_data      
);

localparam          P_BURST_LEN = P_OPERATION_NUM/(P_DATA_WIDTH/8);

reg  [31:0]         ro_bram_addr    ;
reg  [31:0]         ro_bram_data    ;
reg                 ro_bram_en      ;
reg                 ro_bram_wen     ;
reg  [15:0]         r_cnt           ;

assign o_bram_addr = ro_bram_addr   ;
assign o_bram_data = ro_bram_data   ;
assign o_bram_en   = ro_bram_en     ;
assign o_bram_wen  = ro_bram_wen    ;

always@(posedge i_clk,posedge i_rst)
begin
    if(i_rst)
        r_cnt <= 'd0;
    else if(r_cnt == 1000)
        r_cnt <= 'd0;
    else 
        r_cnt <= r_cnt + 1;
end

always@(posedge i_clk,posedge i_rst)
begin
    if(i_rst) begin
        ro_bram_addr <= 'd0;
        ro_bram_data <= 'd0;
        ro_bram_en   <= 'd0;
        ro_bram_wen  <= 'd0;
    end else if(r_cnt >= 100 && r_cnt < 100 + P_BURST_LEN) begin
        ro_bram_addr <= P_WRITE_BASEADDR + ((r_cnt - 100) << 2);
        ro_bram_data <= r_cnt - 100;
        ro_bram_en   <= 'd1;
        ro_bram_wen  <= 'd1;
    end else if(r_cnt >= 800 && r_cnt < 800 + P_BURST_LEN) begin
        ro_bram_addr <= P_READ_BASEADDR + ((r_cnt - 800) << 2);
        ro_bram_data <= 'd0;
        ro_bram_en   <= 'd1;
        ro_bram_wen  <= 'd0;
    end else begin
        ro_bram_addr <= 'd0;
        ro_bram_data <= 'd0;
        ro_bram_en   <= 'd0;
        ro_bram_wen  <= 'd0;
    end
end

`ifdef RAM_WR_ILA
ILAx5_32_32_1_1_32 ILAx5_32_32_1_1_32_u0 (
	.clk            (i_clk          ),      
	.probe0         (ro_bram_addr   ),   
	.probe1         (ro_bram_data   ),   
	.probe2         (ro_bram_en     ),   
	.probe3         (ro_bram_wen    ),   
	.probe4         (i_bram_data    )    
);
`endif

endmodule
相关推荐
爱吃汽的小橘11 小时前
异步串口通信和逻辑分析仪
运维·服务器·网络·单片机·嵌入式硬件·fpga开发
bnsarocket16 小时前
Verilog和FPGA的自学笔记3——仿真文件Testbench的编写
笔记·fpga开发·verilog·自学
Eloudy1 天前
Verilog可综合电路设计:重要语法细节指南
fpga开发
ARM+FPGA+AI工业主板定制专家1 天前
基于ZYNQ FPGA+AI+ARM 的卷积神经网络加速器设计
人工智能·fpga开发·cnn·无人机·rk3588
szxinmai主板定制专家1 天前
基于 ZYNQ ARM+FPGA+AI YOLOV4 的电网悬垂绝缘子缺陷检测系统的研究
arm开发·人工智能·嵌入式硬件·yolo·fpga开发
ooo-p1 天前
FPGA学习篇——Verilog学习之计数器的实现
学习·fpga开发
bnsarocket2 天前
Verilog和FPGA的自学笔记1——FPGA
笔记·fpga开发·verilog·自学
最遥远的瞬间2 天前
一、通用的FPGA开发流程介绍
fpga开发
weixin_450907282 天前
第八章 FPGA 片内 FIFO 读写测试实验
fpga开发
cycf2 天前
以太网接口(一)
fpga开发