查看: 2342|回复: 0

“瑞苏盈科 水星XU5 开发套件试用活动”调试记录#4

[复制链接]
  • TA的每日心情
    开心
    2021-12-29 14:09
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    发表于 2022-1-23 18:04:03 | 显示全部楼层 |阅读模式
    分享到:
    PL端:基于上期的工程,通过观察PL端捕捉信号看出个axis_data_fifo的逻辑信号的时序关系。将其进行梳理,
    并建立一个fifo对DMA的双向数据进行缓冲,为后期逻辑设计建立基础。并引出PS端的AXI_EMIO对fifo进行控制。具体代码如下:
    1. `timescale 1ns / 1ps
    2. module top
    3.    (Clk100,
    4.     Clk50,
    5.     Rst_N,
    6.     DP_AUX_IN,
    7.     DP_AUX_OE,
    8.     DP_AUX_OUT,
    9.     DP_HPD );

    10.   output Rst_N;
    11.   output Clk100;
    12.   output Clk50;
    13.   input DP_AUX_IN;
    14.   output DP_AUX_OE;
    15.   output DP_AUX_OUT;
    16.   input DP_HPD;
    17.   
    18.   

    19.   wire Clk100;
    20.   wire Clk50;
    21.   wire DP_AUX_IN;
    22.   wire DP_AUX_OE;
    23.   wire DP_AUX_OUT;
    24.   wire DP_HPD;
    25.   wire [31:0]M_AXIS_MM2S_0_tdata;
    26.   wire [3:0]M_AXIS_MM2S_0_tkeep;
    27.   wire M_AXIS_MM2S_0_tlast;
    28.   wire M_AXIS_MM2S_0_tvalid;
    29.   wire Rst_N;
    30.   wire [31:0]S_AXIS_S2MM_0_tdata;
    31.   reg  S_AXIS_S2MM_0_tlast;
    32.   reg  S_AXIS_S2MM_0_tvalid;

    33.   wire [31:0] dout;
    34.   wire [9:0]  rd_data_count;
    35.   wire [9:0]  wr_data_count;
    36.   wire        rd_en;
    37.   reg [1:0] rd_en_f;
    38.   reg [1:0] empty_f;
    39.   wire [0:0]gpio_rtl_0_tri_o;
    40.   reg       fifo_rd_en;


    41.   Mercury_XU5 Mercury_XU5_i
    42.        (.Clk100(Clk100),
    43.         .Clk50(Clk50),
    44.         .DP_AUX_IN(DP_AUX_IN),
    45.         .DP_AUX_OE(DP_AUX_OE),
    46.         .DP_AUX_OUT(DP_AUX_OUT),
    47.         .DP_HPD(DP_HPD),
    48.         .gpio_rtl_0_tri_o(gpio_rtl_0_tri_o),        
    49.         .M_AXIS_MM2S_0_tdata(M_AXIS_MM2S_0_tdata),
    50.         .M_AXIS_MM2S_0_tkeep(M_AXIS_MM2S_0_tkeep),
    51.         .M_AXIS_MM2S_0_tlast(M_AXIS_MM2S_0_tlast),
    52.         .M_AXIS_MM2S_0_tready(1),
    53.         .M_AXIS_MM2S_0_tvalid(M_AXIS_MM2S_0_tvalid),
    54.         .Rst_N(Rst_N),
    55.         .S_AXIS_0_tdata(dout),
    56.         .S_AXIS_0_tkeep(4'b1111),
    57.         .S_AXIS_0_tlast(S_AXIS_S2MM_0_tlast),
    58.         .S_AXIS_0_tready(),
    59.         .S_AXIS_0_tvalid(S_AXIS_S2MM_0_tvalid)


    60. );







    61. fifo_generator_0 fifo_u0 (
    62.   .wr_clk(Clk100),                // input wire wr_clk
    63.   .rd_clk(Clk100),                // input wire rd_clk
    64.   .din(M_AXIS_MM2S_0_tdata),                      // input wire [31 : 0] din
    65.   .wr_en(M_AXIS_MM2S_0_tvalid),                  // input wire wr_en
    66.   .rd_en(fifo_rd_en),                  // input wire rd_en
    67.   .dout(dout),                    // output wire [31 : 0] dout
    68.   .full(),                    // output wire full
    69.   .empty(empty),                  // output wire empty
    70.   .rd_data_count(rd_data_count),  // output wire [9 : 0] rd_data_count
    71.   .wr_data_count(wr_data_count)  // output wire [9 : 0] wr_data_count
    72. );




    73. always @(posedge Clk100 or negedge Rst_N ) begin
    74.   if(!Rst_N) begin
    75.     rd_en_f <= 2'b11;
    76.   end else begin
    77.     rd_en_f[0] <= gpio_rtl_0_tri_o;
    78.     fifo_rd_en <= gpio_rtl_0_tri_o;
    79.     rd_en_f[1] <= rd_en_f[0];
    80.   end
    81. end

    82. always @(posedge Clk100 or negedge Rst_N ) begin
    83.   if(!Rst_N) begin
    84.     empty_f <= 2'b11;
    85.   end else begin
    86.     empty_f[0] <= empty;
    87.     empty_f[1] <= empty_f[0];
    88.   end
    89. end


    90. always @(posedge Clk100 or negedge Rst_N ) begin
    91.   if(!Rst_N) begin
    92.     S_AXIS_S2MM_0_tlast <= 1'b0;
    93.   end else begin
    94.     if(empty_f == 2'b01 ) begin
    95.     S_AXIS_S2MM_0_tlast <= 1'b1;
    96.     end else begin
    97.     S_AXIS_S2MM_0_tlast <= 1'b0;
    98.     end
    99.   end
    100. end


    101. always @(posedge Clk100 or negedge Rst_N ) begin
    102.   if(!Rst_N) begin
    103.     S_AXIS_S2MM_0_tvalid <= 1'b0;
    104.   end else begin
    105.     if(rd_en_f == 2'b01 ) begin
    106.     S_AXIS_S2MM_0_tvalid <= 1'b1;
    107.     end
    108.     if(empty_f == 2'b01 ) begin
    109.     S_AXIS_S2MM_0_tvalid <= 1'b0;
    110.     end
    111.   end
    112. end


    113. ila_0 ILA_U0 (
    114.         .clk(Clk100), // input wire clk


    115.         .probe0(rd_data_count), // input wire [9:0]  probe0  
    116.         .probe1(wr_data_count), // input wire [9:0]  probe1
    117.         .probe2(dout), // input wire [31:0]  probe2
    118.         .probe3(M_AXIS_MM2S_0_tdata), // input wire [31:0]  probe3
    119.         .probe4(M_AXIS_MM2S_0_tvalid), // input wire [0:0]  probe4
    120.         .probe5(gpio_rtl_0_tri_o), // input wire [0:0]  probe5
    121.         .probe6(rd_en_f), // input wire [0:0]  probe6
    122.         .probe7(S_AXIS_S2MM_0_tvalid), // input wire [0:0]  probe7
    123.         .probe8(fifo_rd_en), // input wire [0:0]  probe8
    124.         .probe9(S_AXIS_S2MM_0_tlast) // input wire [0:0]  probe9
    125. );
    复制代码

    PL部分逻辑框图:
    截图.png    
    PS端部分逻辑代码:
    memset((UINTPTR) TxBufferPtr, Value, MAX_PKT_LEN);                //生成发数据
    XAxiDma_send(&AxiDma,(UINTPTR) TxBufferPtr,MAX_PKT_LEN);         //向DMA数据交互缓冲区内写入MAX_PKT_LEN长度的数据。
                                                                     //此逻辑执行完后数据已经从DMA刷新至PL端建立的fifo中,PL端                //的逻辑可以对数据行进具体操作。                                                                    
    XGpio_DiscreteWrite(&Gpio, fifo_en, 1);                          //通过AXI_EMIO对PL端fifo进行控制,将数据读出至axis_data_fifo,将数据交付至A**线,由A**线进行处理
    XAxiDma_receive (&AxiDma,(UINTPTR) RxBufferPtr,MAX_PKT_LEN);     //将数据传输至DMA控制器,并刷新到PS端的内存之中,便于PS对数据进行处理。



    最终测试结果如下:
    PL 端数据FIFO的读写端信号:
    截图1.png    
    PL端axis_data_fifo数据流:

    截图2.png    
    PS端接收发送端memory:

    截图3.png 截图4.png    
    至此已完成PS_PL 的数据交互,并长期运行稳定。XSA文件与PS端代码可下载附。

    src.zip (1.17 MB, 下载次数: 1, 售价: 1 与非币)
    回复

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    手机版|小黑屋|与非网

    GMT+8, 2024-6-3 00:28 , Processed in 0.107642 second(s), 17 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.