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

📄 bmd_rd_wr_tests.v

📁 基于xilinx vierex5得pci express dma设计实现。
💻 V
字号:
else if(testname == "BMD_Rd_n_Wr_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 Write DMA operation.", $realtime); 
  // Write DMA Address

  DATA_STORE[0] = 8'h00;
  DATA_STORE[1] = 8'h00;
  DATA_STORE[2] = 8'h00;
  DATA_STORE[3] = 8'hba;

  $display("[%t] : Write the Write DMA starting address.", $realtime);  
  TSK_TX_MEMORY_WRITE_32(DEFAULT_TAG, DEFAULT_TC, 10'd1, P_ADDRESS_2L + 8'h08, 4'h0, 4'hF, 1'b0);  
  DEFAULT_TAG = DEFAULT_TAG + 1;

  // Write Length

  //DATA_STORE[0] = 8'h40; // 256 Byte
  DATA_STORE[0] = 8'h20; // 128 Byte
  DATA_STORE[1] = 8'h00;
  DATA_STORE[2] = 8'h00;
  DATA_STORE[3] = 8'h00;
  
  $display("[%t] : Write the Write DMA length.", $realtime);  
  TSK_TX_MEMORY_WRITE_32(DEFAULT_TAG, DEFAULT_TC, 10'd1, P_ADDRESS_2L + 8'h0C, 4'h0, 4'hF, 1'b0);
  DEFAULT_TAG = DEFAULT_TAG + 1;

  // Write Count

  DATA_STORE[0] = 8'h14;
  DATA_STORE[1] = 8'h00;
  DATA_STORE[2] = 8'h00;
  DATA_STORE[3] = 8'h00;

  $display("[%t] : Write the Write DMA TLP count.", $realtime);  
  TSK_TX_MEMORY_WRITE_32(DEFAULT_TAG, DEFAULT_TC, 10'd1, P_ADDRESS_2L + 8'h10, 4'h0, 4'hF, 1'b0);
  DEFAULT_TAG = DEFAULT_TAG + 1;

  // Write Data

  DATA_STORE[0] = 8'hAA;
  DATA_STORE[1] = 8'h55;
  DATA_STORE[2] = 8'hAA;
  DATA_STORE[3] = 8'h55;


  $display("[%t] : Write the Write DMA Data Pattern.", $realtime);  
  TSK_TX_MEMORY_WRITE_32(DEFAULT_TAG, DEFAULT_TC, 10'd1, P_ADDRESS_2L + 8'h14, 4'h0, 4'hF, 1'b0);
  DEFAULT_TAG = DEFAULT_TAG + 1;


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

  DATA_STORE[0] = 8'h00;
  DATA_STORE[1] = 8'h00;
  DATA_STORE[2] = 8'h00;
  DATA_STORE[3] = 8'hbe;
  
  $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] = 8'h20;
  DATA_STORE[1] = 8'h00;
  DATA_STORE[2] = 8'h00;
  DATA_STORE[3] = 8'h00;
  
  $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] = 8'h08;
  DATA_STORE[1] = 8'h00;
  DATA_STORE[2] = 8'h00;
  DATA_STORE[3] = 8'h00;
  
  $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 and write DMA

  DATA_STORE[0] = 8'hFF;
  DATA_STORE[1] = 8'h00;
  DATA_STORE[2] = 8'hFF;
  DATA_STORE[3] = 8'h00;
  
  $display("[%t] : Start the memory read and write DMA operation simutaniously.", $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);  
  
  
  
//-----------
  `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);

  
  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;

 //********************************************************************************************
  //Reset the DMA for the next step 
  DATA_STORE[0] = 8'h01;
  DATA_STORE[1] = 8'h00;
  DATA_STORE[2] = 8'h00;
  DATA_STORE[3] = 8'h00;
   
  TSK_TX_MEMORY_WRITE_32(DEFAULT_TAG, DEFAULT_TC, 10'd1, P_ADDRESS_2L + 8'h00, 4'h0, 4'hF, 1'b0);  
  DEFAULT_TAG = DEFAULT_TAG + 1; 
  
  DATA_STORE[0] = 8'h00;
  DATA_STORE[1] = 8'h00;
  DATA_STORE[2] = 8'h00;
  DATA_STORE[3] = 8'h00;
 
  TSK_TX_MEMORY_WRITE_32(DEFAULT_TAG, DEFAULT_TC, 10'd1, P_ADDRESS_2L + 8'h00, 4'h0, 4'hF, 1'b0);  
  DEFAULT_TAG = DEFAULT_TAG + 1; 
  
  TSK_TX_CLK_EAT(50);  
 //******************************************************************************************* 


  $finish;

end

⌨️ 快捷键说明

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