原创 收集一些自己对PCIe仿真Test Bench的理解

2019-8-2 13:39 4194 23 23 分类: FPGA/CPLD 文集: PCIE
1. board.RP.tx_usrapp.TSK_SIMULATION_TIMEOUT( XXX ) . 
这个函数在仿真的时候被调用, XXX 指定了仿真完成的时间,所以这个时间要设置的足够长,否则仿真结果还没出来,仿真就结束了。 Xilinx官网也有人推荐修改rx_usrapp模块(注释掉几行)来忽略掉这个仿真时间的限制问题:
  1. always @(trn_clk or trn_rsof_n or trn_rsrc_rdy_n) begin
  2. /*
  3. //Modification
  4. if (next_trn_rx_timeout == 0) begin
  5. if(!`EXPECT_FINISH_CHECK)
  6. $display("[%t] : TEST FAILED --- Haven't Received All Expected TLPs", $realtime);
  7. $finish(2);
  8. end
  9. */
  10. if ((trn_rsof_n == 1'b0) && (trn_rsrc_rdy_n == 1'b0)) begin
  11. next_trn_rx_timeout = sim_timeout;
  12. end else begin
  13. if (trn_lnk_up_n == 1'b0)
  14. next_trn_rx_timeout = next_trn_rx_timeout - 1'b1;
  15. end
  16. end


2. MPS,逛论坛对这个缩写疑惑了半天(新手啊),应该是maximum payload size吧。

3. xapp1052给的例子的Testbench里,所有操作应该都是RP发起的。所以如果想要从BMD获得一个MRD,并想要返回一个带数据的Completion的话,就必须修改例子里的测试文件。若要强制RP返回数据,用户必须自己写一个测试任务(task),该任务用于发送一个带返回数据的Completion,数据是在pci_exp_usrapp_tx.v中可以找到的(注意,通常在仿真中实现的RP都没有实现BRAM),当然前提是你发送之前必须对变量“DATA”进行赋值。但是,如果用户想要RP自动返回带数据的Completion(CPLD),想必用户还需要修改Rx,让其发送数据,并发送激励,同时在Tx里用户还需要创建一个新的模块,该模块仅在收到Rx发来的激励时运行。

  

4. 我们知道payload size取决于RP,我们在例化EP的时候,可能设置的payload长度是1024个字节,然后给出的RP仿真模型里可能只有128个字节,所以此时最大仿真的payload长度是128。若要修改,必须记住,不只是修改EP和RP的DEV_CAP_MAX_PAYLOAD,还要修改CFGDEVCONTROLMAXPAYLOAD[2:0],device control register里的值是由RP来设置的。根据以下步骤修改RP模型里的devcie control register:

   1)在系统初始化之后添加下列代码:

      board.RP.cfg_usrapp.TSK_READ_CFG_DW(32'h32);
      board.RP.cfg_usrapp.TSK_WRITE_CFG_DW(32'h32, 32'h7f, 4'h1);
      board.RP.cfg_usrapp.TSK_READ_CFG_DW(32'h32);

   2)然后RP可以使用TSK_TX_TYPE0_CONFIGURATION_WRITE任务来写EP,下面给出也给示例

     // increase MPS of the EP

      board.RP.tx_usrapp.TSK_TX_TYPE0_CONFIGURATION_WRITE(board.RP.tx_usrapp.DEFAULT_TAG, 32'h32, 32'h7f, 4'h1);





作者: coyoo, 来源:面包板社区

链接: https://mbb.eet-china.com/blog/uid-me-1010859.html

版权声明:本文为博主原创,未经本人允许,禁止转载!

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
23
关闭 站长推荐上一条 /3 下一条