XDMA配置讲解

 xdma核各接口的含义:

pcie_cfg_mgmt接口:配置IP核内部信息的接口

sys_clk是从GT Bank上输入过来的时钟

sys_rst_n是由RC控制的冷复位,作用域更大,将核的所有逻辑都复位一遍     RC中还有另外两种复位:温复位、热复位

user_irq_req:中断请求,主要用MSI中断或MSI-X中断

与中断请求相对应的是user_irq_ack,它是一个由主机发送过来的应答信号,ack拉高主要表示主机已经接收到从机的中断请求,

M_AXI:PCIE数据输入输出的接口,可以接DDR或RAM或用户逻辑

pcie_mgt:pcie的引脚

user_lnk_up:是与电脑连接完成的指示信号

XDMA配置:

1、Basic     这部分细节后面讲,先配好

2、PCIE  ID 

部分1是Xilinx的厂商ID和设备ID,不能更改。如果更改了PCIE就不能正确识别了。也就是说你用不了人家官方提供的xdma驱动了。

部分2是自己可以修改的

部分3是ClassCode,主要表示这个PCIE是用来干啥的,比如这里是用来做简易通信控制器的

3、PCIE BAR空间配置

第三页这里是用来配置BAR空间的,XDMA的bar空间已经被Xilinx写好了,不能更改。如果想扩展一部分用户的BAR空间可以勾选红框

勾选了这个选项,就可以把一部分BAR空间的内容通过AXI Lite输出出来,可以设置BAR空间的大小。比如我这里BAR空间大小我选择了4K

这里需要注意下pcie to axi transiation,电脑的存储域地址都是从0开始的,PC的这个起始地址0和FPGA内bar空间的起始地址不一定是一样的,他的功能就是来设置映射关系的,就是“PC里面的0地址映射到FPGA BAR空间的哪个地址”。由Address Editor确定。

4、PCIE 中断配置

5、DMA通道设置

H:host(电脑) C:card(FPGA板卡)  这个界面可以设置FPGA与电脑数据传输的不同通道,比如FPGA要传给PC的数据有两股,图像数据、ADC采样数据,它们通过不同的通道把数据上传给PC,PC识别这两个通道来确定接收到的是哪类数据。

6、共享逻辑,一般不勾选,保持默认

附:

1、XDMA配置界面Basic中的DMA interface option,这里选择AXI Memort Mapped或AXi Stream有什么区别?哪种的性能要更好一点?

二者的使用场景不一样。

AXI Memort Mapped模式下DMA通道通过地址映射的方式访问内存。源地址和目标地址都是内存地址,数据通过标准的读写操作进行传输。这种适用于需要精确控制数据传输的应用,支持随机访问内存。但缺点是由于引入内存地址访问,会带一点延迟。

AXi Stream模式下数据以流的方式进行传输,没有地址的概念,传输过程简单,只需要控制流信号(如TREADY、TVALID、TLAST等)。优点就是低延迟,因为没有地址解析和内存访问的开销,适用于连续的大数据流传输,例如音视频数据传输。缺点是:灵活性较低。不适用于需要随机访问内存的场景。

资源消耗方面:AXI Memory Mapped 由于涉及地址映射和缓存管理,可能需要更多的硬件资源,而 AXI Stream 的实现相对简单,资源消耗较低。

2、那么AXI Interface下的AXI Data Width64bit与128bit有什么区别?为什么尽量使用64bit?

这里的数据位宽指的是单次可以传输的数据量。128bit就是16个字节,对于编程来讲太麻烦了,假如传输尾端只想传输12个字节,剩下4字节是无效的,那么这里还得做尾端掩码对齐。

3、AXI接口中的尾端对齐:在AXI协议中,“wstrb(写选通信号)”用于指示哪些字节是有效的。当进行数据传输时,wstrb信号可以通过掩码方式来指示哪些字节需要写入,哪些字节可以忽略。

尾端对齐的具体步骤:

1、数据传输准备:例如当有44字节数据需要传输时,可以分为2个128bit(16字节),和1个12字节。

2、传输16字节:在前两个传输周期中,每个周期传输16字节,wstrb信号设置为全高(0xffff),表示所有字节有效

3、传输12字节:在最后一个传输周期中,传输12字节,wstrb需设置为0X0FFF,表示仅前12个字节有效,后4个字节无效。

代码示例:展示了如何做尾端对齐

module axi_tail_alignment (
    input wire clk,
    input wire reset,
    input wire [127:0] data_in,
    input wire [3:0]   data_length, // 数据长度,单位为字节
    output reg [127:0] data_out,
    output reg [15:0]  wstrb_out
);

always @(posedge clk or posedge reset) begin
    if (reset) begin
        data_out <= 0;
        wstrb_out <= 0;
    end else begin
        // 默认情况下,所有字节都有效
        data_out <= data_in;
        wstrb_out <= 16'hFFFF;

        // 处理尾端对齐
        case (data_length)
            4'd1:  wstrb_out <= 16'h0001;
            4'd2:  wstrb_out <= 16'h0003;
            4'd3:  wstrb_out <= 16'h0007;
            4'd4:  wstrb_out <= 16'h000F;
            4'd5:  wstrb_out <= 16'h001F;
            4'd6:  wstrb_out <= 16'h003F;
            4'd7:  wstrb_out <= 16'h007F;
            4'd8:  wstrb_out <= 16'h00FF;
            4'd9:  wstrb_out <= 16'h01FF;
            4'd10: wstrb_out <= 16'h03FF;
            4'd11: wstrb_out <= 16'h07FF;
            4'd12: wstrb_out <= 16'h0FFF;
            4'd13: wstrb_out <= 16'h1FFF;
            4'd14: wstrb_out <= 16'h3FFF;
            4'd15: wstrb_out <= 16'h7FFF;
            4'd16: wstrb_out <= 16'hFFFF;
            default: wstrb_out <= 16'hFFFF;
        endcase
    end
end

endmodule

同样的,不论数据宽度是64bit还是128bit,在需要处理非整数倍数据长度时,都需要进行尾端对齐,只是64bit的做起来相对简单一些。所以,在数据量需求不大的情况下,64bit已经足够满足传输需求了,而且功耗和逻辑资源也比128bit低。

  • 16
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值