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
相关推荐
幻智星科技7 小时前
树形架构破解FPGA扇出瓶颈
fpga开发·硬件架构
FPGA小迷弟10 小时前
FPGA开发Vivado Block Design/Vitis/SDK/xlinx/开发教程,保姆级别,一看就会!
网络协议·tcp/ip·fpga开发·verilog·fpga
FPGA小迷弟10 小时前
基于FPGA实现智能网卡的概念,什么是智能网卡
网络协议·tcp/ip·fpga开发·verilog·fpga
好焊孙辉12 小时前
螺柱焊机哪家质量好
python·fpga开发
XMAIPC_Robot17 小时前
基于 i.MX95 平台在新一代工业控制器中的应用 — 工业车载平板、半导体设备主控方案解析
arm开发·人工智能·机器学习·fpga开发·rk3588+fpga·i.mx95
szxinmai主板定制专家18 小时前
基于 AM62x + Artix-7 的低功耗 ARM+FPGA 平台在轨道交通车门控制中的应用
arm开发·人工智能·fpga开发·zynq·am62x
幻智星科技18 小时前
我砍掉了FPGA里的ARM核项目反而提前交付了
arm开发·网络协议·fpga开发·硬件架构
逐光者93318 小时前
Verilog 三段式状态机:原理、模板与实战
fpga开发
XMAIPC_Robot18 小时前
NXP i.MX95 + FPGA 异构计算平台 — 工业多域融合 AI 加速嵌入式控制解决方案
人工智能·分布式·fpga开发·能源·rk3576+fpga
FPGA小迷弟1 天前
用 Claude Code 重构遗留系统:从评估到落地的完整指南
fpga开发·dsp开发·fpga·1024程序员节·sdr·无线电