⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bmd_rd_tests.v

📁 已经在xilinx的ML555开发板上实现的PCIEx4的设计
💻 V
字号:
else if(testname == "BMD_Rd_DMA")
begin

  P_ADDRESS_2L = 32'h10000000;    

 //Lab 4, #3 

    TSK_SIMULATION_TIMEOUT(10050);
    TSK_USR_DATA_SETUP_SEQ;

    //System Initialization
    TSK_SYSTEM_INITIALIZATION;

    TSK_BAR_INIT;

$display("[%t] : Set up for a Read DMA operation.", $realtime); 
  // Read DMA Address

  DATA_STORE[0] = BMD_RD_ADDRESS_32[7:0];
  DATA_STORE[1] = BMD_RD_ADDRESS_32[15:8];
  DATA_STORE[2] = BMD_RD_ADDRESS_32[23:16];
  DATA_STORE[3] = BMD_RD_ADDRESS_32[31:24];
  
  $display("[%t] : Write the Read DMA starting address.", $realtime); 
  TSK_TX_MEMORY_WRITE_32(DEFAULT_TAG, DEFAULT_TC, 10'd1, P_ADDRESS_2L + 8'h1C, 4'h0, 4'hF, 1'b0);
  DEFAULT_TAG = DEFAULT_TAG + 1;

  // Read Length

  DATA_STORE[0] = BMD_RD_ADDR_INC[7:0];    
  DATA_STORE[1] = BMD_RD_ADDR_INC[15:8];   
  DATA_STORE[2] = BMD_RD_ADDR_INC[23:16];  
  DATA_STORE[3] = BMD_RD_ADDR_INC[31:24];  
  
  $display("[%t] : Write the Read DMA length.", $realtime);  
  TSK_TX_MEMORY_WRITE_32(DEFAULT_TAG, DEFAULT_TC, 10'd1, P_ADDRESS_2L + 8'h20, 4'h0, 4'hF, 1'b0);
  DEFAULT_TAG = DEFAULT_TAG + 1;

  // Read Count

  DATA_STORE[0] = BMD_RD_INC_NUM[7:0];   
  DATA_STORE[1] = BMD_RD_INC_NUM[15:8];  
  DATA_STORE[2] = BMD_RD_INC_NUM[23:16]; 
  DATA_STORE[3] = BMD_RD_INC_NUM[31:24]; 
  
  $display("[%t] : Write the Write DMA TLP count.", $realtime); 
  TSK_TX_MEMORY_WRITE_32(DEFAULT_TAG, DEFAULT_TC, 10'd1, P_ADDRESS_2L + 8'h24, 4'h0, 4'hF, 1'b0);
  DEFAULT_TAG = DEFAULT_TAG + 1;

  // Start Mem read DMA

  DATA_STORE[0] = 8'h00;
  DATA_STORE[1] = 8'h00;
  DATA_STORE[2] = 8'h01;
  DATA_STORE[3] = 8'h00;
  
  $display("[%t] : Start the memory read DMA operation.", $realtime);  
  TSK_TX_MEMORY_WRITE_32(DEFAULT_TAG, DEFAULT_TC, 10'd1, P_ADDRESS_2L + 8'h04, 4'h0, 4'hF, 1'b0);
  DEFAULT_TAG = DEFAULT_TAG + 1;
    
	// Expect MEMRD initiated by RD DMA, then send back cpld pkt
	//UG341 v1.5 page 126
  `BOARD.`XILINX_PCI_EXP_DOWNSTREAM_PORT_INST.com_usrapp.TSK_EXPECT_MEMRD( 
  DEFAULT_TC,   	//Traffic Class
  3'h0,						//TD
  1'b0,						//EP
  2'h0,						//Attributes
  BMD_RD_ADDR_INC, //Length
  16'h01a0,				//Requester Id
  8'h0,						//Tag
  4'h0,						//last_dw_be
  4'h0,						//first_dw_be
 	BMD_RD_CUR_ADDR,  //address  	 	
  expect_status);
	
  BMD_wait_for_next = 1'b1; 
  BMD_RD_CUR_ADDR = BMD_RD_ADDRESS_32;
  while(BMD_wait_for_next)
	begin  	
		TSK_TX_COMPLETION_DATA( 
	  DEFAULT_TAG,		//Tag
	  DEFAULT_TC,   	//Traffic Class
	  10'h20,					//Length
	  12'h20,					//byte_count
	  7'b0,						//lower_addr_
	  3'b0,						//comp_status  -- success 
	  1'b0);
	  
	  BMD_RD_CUR_ADDR = BMD_RD_CUR_ADDR + BMD_RD_ADDR_INC;
	  if (BMD_RD_CUR_ADDR == (BMD_RD_ADDRESS_32 + (BMD_RD_INC_NUM* BMD_RD_ADDR_INC)))
	  	BMD_wait_for_next = 1'b0;
	end  								        


	// Expect Interrupt coming
  `BOARD.`XILINX_PCI_EXP_DOWNSTREAM_PORT_INST.com_usrapp.TSK_EXPECT_INTR( 
  DEFAULT_TC,   	//Traffic Class
  1'b0,						//TD
  1'b0,						//EP
  2'h0,						//Attributes
  10'h0,					//Length
  16'h01a0,				//Requester Id
  8'h0,						//Tag
  3'h4,						//Message Type
  8'h20,					//Message Code
  expect_status);
     
  DATA_STORE[0] = 8'hFF;
  DATA_STORE[1] = 8'hAA;
  DATA_STORE[2] = 8'hBB;
  DATA_STORE[3] = 8'hCC;  
  $display("[%t] : Write Interrupt ACK Register.", $realtime);  
  TSK_TX_MEMORY_WRITE_32(DEFAULT_TAG, DEFAULT_TC, 10'd1, P_ADDRESS_2L + 8'h3c, 4'h0, 4'hF, 1'b0);
  DEFAULT_TAG = DEFAULT_TAG + 1;
  
  `BOARD.`XILINX_PCI_EXP_DOWNSTREAM_PORT_INST.com_usrapp.TSK_EXPECT_INTR( 
  DEFAULT_TC,   	//Traffic Class
  1'b0,						//TD
  1'b0,						//EP
  2'h0,						//Attributes
  10'h0,					//Length
  16'h01a0,				//Requester Id
  8'h0,						//Tag
  3'h4,						//Message Type
  8'h24,					//Message Code
  expect_status);
  
  TSK_TX_CLK_EAT(50);


  // Read Back all programming
//  $display("[%t] : Start Read Back all programming.", $realtime);  
//  TSK_TX_MEMORY_READ_32(DEFAULT_TAG, DEFAULT_TC, 10'd1, P_ADDRESS_2L + 8'h08, 4'h0, 4'hF);
//  DEFAULT_TAG = DEFAULT_TAG + 1;
//  TSK_TX_MEMORY_READ_32(DEFAULT_TAG, DEFAULT_TC, 10'd1, P_ADDRESS_2L + 8'h0C, 4'h0, 4'hF);
//  DEFAULT_TAG = DEFAULT_TAG + 1;
//  TSK_TX_MEMORY_READ_32(DEFAULT_TAG, DEFAULT_TC, 10'd1, P_ADDRESS_2L + 8'h10, 4'h0, 4'hF);
//  DEFAULT_TAG = DEFAULT_TAG + 1;
//  TSK_TX_MEMORY_READ_32(DEFAULT_TAG, DEFAULT_TC, 10'd1, P_ADDRESS_2L + 8'h14, 4'h0, 4'hF);
//  DEFAULT_TAG = DEFAULT_TAG + 1;
//
//  TSK_TX_MEMORY_READ_32(DEFAULT_TAG, DEFAULT_TC, 10'd1, P_ADDRESS_2L + 8'h1C, 4'h0, 4'hF);
//  DEFAULT_TAG = DEFAULT_TAG + 1;
//  TSK_TX_MEMORY_READ_32(DEFAULT_TAG, DEFAULT_TC, 10'd1, P_ADDRESS_2L + 8'h20, 4'h0, 4'hF);
//  DEFAULT_TAG = DEFAULT_TAG + 1;
//  TSK_TX_MEMORY_READ_32(DEFAULT_TAG, DEFAULT_TC, 10'd1, P_ADDRESS_2L + 8'h24, 4'h0, 4'hF);
//  DEFAULT_TAG = DEFAULT_TAG + 1;

  $finish;

end

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -