一、前言
ZYNQ开发,如果PL与PS的交互方式仅为AXI-Lite总线的话,在Linux下可以通过直接访问PL的寄存器物理地址来实现PS-PL的数据交互。
测试代码的PC开发平台为Ubuntu18.04,QT5。
ZYNQ为7020,并移植了Linux系统和Ubuntu16.04的最小系统。
二、PL的设计
将PL的程序封装成IP核,通过AXI-LITE与PS连接,对外是18个寄存器,每个寄存器为32位。
寄存器定义是:寄存器0-7用来接收数据,寄存器8的最高位代表数据到来,寄存器9-16用来发送数据,寄存器17的最高位代表发送使能。程序逻辑比较简单,检测到接收信号后,将数据回传回去。
xPAA
#(
.PL_GOLBAL_FREQ (PL_GOLBAL_FREQ)
)u_xPAA
(
.sys_clk (S_AXI_ACLK),
.sys_rst (S_AXI_ARESETN),
.pl_rx_data1 (slv_reg0),
.pl_rx_data2 (slv_reg1),
.pl_rx_data3 (slv_reg2),
.pl_rx_data4 (slv_reg3),
.pl_rx_data5 (slv_reg4),
.pl_rx_data6 (slv_reg5),
.pl_rx_data7 (slv_reg6),
.pl_rx_data8 (slv_reg7),
.pl_rx_en (slv_reg8[31]),
.ssr_none (slv_reg8[30:0]),
.pl_tx_data1 (slv_reg9),
.pl_tx_data2 (slv_reg10),
.pl_tx_data3 (slv_reg11),
.pl_tx_data4 (slv_reg12),
.pl_tx_data5 (slv_reg13),
.pl_tx_data6 (slv_reg14),
.pl_tx_data7 (slv_reg15),
.pl_tx_data8 (slv_reg16),
.pl_tx_en (slv_reg17[31]),
.sst_none (slv_reg17[30:0]),
.pl_led (pl_led)
);
module xPAA
#(
parameter PL_GOLBAL_FREQ = 120_000000
)
(
input sys_clk,
input sys_rst,
input [31:0] pl_rx_data1,
input [31:0] pl_rx_data2,
input [31:0] pl_rx_data3,
input [31:0] pl_rx_data4,
input [31:0] pl_rx_data5,
input [31:0] pl_rx_data6,
input [31:0] pl_rx_data7,
input [31:0] pl_rx_data8,
input pl_rx_en,
input [30:0] ssr_none,
output reg [31:0] pl_tx_data1,
output reg [31:0] pl_tx_data2,
output reg [31:0] pl_tx_data3,
output reg [31:0] pl_tx_data4,
output reg [31:0] pl_tx_data5,
output reg [31:0] pl_tx_data6,
output reg [31:0] pl_tx_data7,
output reg [31:0] pl_tx_data8,
output