📄 bmd_rd_wr_tests.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 + -