4 `include "display_16bit_cmd_data_bus_v1_0_tb_include.vh"
6 // lite_response Type Defines
7 `define RESPONSE_OKAY 2'b00
8 `define RESPONSE_EXOKAY 2'b01
9 `define RESP_BUS_WIDTH 2
10 `define BURST_TYPE_INCR 2'b01
11 `define BURST_TYPE_WRAP 2'b10
13 // AMBA AXI4 Lite Range Constants
14 `define S00_AXI_MAX_BURST_LENGTH 1
15 `define S00_AXI_DATA_BUS_WIDTH 32
16 `define S00_AXI_ADDRESS_BUS_WIDTH 32
17 `define S00_AXI_MAX_DATA_SIZE (`S00_AXI_DATA_BUS_WIDTH*`S00_AXI_MAX_BURST_LENGTH)/8
19 module display_16bit_cmd_data_bus_v1_0_tb;
23 reg M00_AXI_INIT_AXI_TXN;
24 wire M00_AXI_TXN_DONE;
27 // Create an instance of the example tb
28 `BD_WRAPPER dut (.ACLK(tb_ACLK),
30 .M00_AXI_TXN_DONE(M00_AXI_TXN_DONE),
31 .M00_AXI_ERROR(M00_AXI_ERROR),
32 .M00_AXI_INIT_AXI_TXN(M00_AXI_INIT_AXI_TXN));
36 // AMBA S00_AXI AXI4 Lite Local Reg
37 reg [`S00_AXI_DATA_BUS_WIDTH-1:0] S00_AXI_rd_data_lite;
38 reg [`S00_AXI_DATA_BUS_WIDTH-1:0] S00_AXI_test_data_lite [3:0];
39 reg [`RESP_BUS_WIDTH-1:0] S00_AXI_lite_response;
40 reg [`S00_AXI_ADDRESS_BUS_WIDTH-1:0] S00_AXI_mtestAddress;
41 reg [3-1:0] S00_AXI_mtestProtection_lite;
42 integer S00_AXI_mtestvectorlite; // Master side testvector
43 integer S00_AXI_mtestdatasizelite;
44 integer result_slave_lite;
47 // Simple Reset Generator and test
51 // Release the reset on the posedge of the clk.
57 // Simple Clock Generator
58 initial tb_ACLK = 1'b0;
59 always #10 tb_ACLK = !tb_ACLK;
61 //------------------------------------------------------------------------
62 // TEST LEVEL API: CHECK_RESPONSE_OKAY
63 //------------------------------------------------------------------------
65 // CHECK_RESPONSE_OKAY(lite_response)
66 // This task checks if the return lite_response is equal to OKAY
67 //------------------------------------------------------------------------
68 task automatic CHECK_RESPONSE_OKAY;
69 input [`RESP_BUS_WIDTH-1:0] response;
71 if (response !== `RESPONSE_OKAY) begin
72 $display("TESTBENCH ERROR! lite_response is not OKAY",
73 "\n expected = 0x%h",`RESPONSE_OKAY,
74 "\n actual = 0x%h",response);
80 //------------------------------------------------------------------------
81 // TEST LEVEL API: COMPARE_LITE_DATA
82 //------------------------------------------------------------------------
84 // COMPARE_LITE_DATA(expected,actual)
85 // This task checks if the actual data is equal to the expected data.
86 // X is used as don't care but it is not permitted for the full vector
88 //------------------------------------------------------------------------
89 `define S_AXI_DATA_BUS_WIDTH 32
90 task automatic COMPARE_LITE_DATA;
91 input [`S_AXI_DATA_BUS_WIDTH-1:0]expected;
92 input [`S_AXI_DATA_BUS_WIDTH-1:0]actual;
94 if (expected === 'hx || actual === 'hx) begin
95 $display("TESTBENCH ERROR! COMPARE_LITE_DATA cannot be performed with an expected or actual vector that is all 'x'!");
96 result_slave_lite = 0;
100 if (actual != expected) begin
101 $display("TESTBENCH ERROR! Data expected is not equal to actual.",
102 "\nexpected = 0x%h",expected,
103 "\nactual = 0x%h",actual);
104 result_slave_lite = 0;
109 $display("TESTBENCH Passed! Data expected is equal to actual.",
110 "\n expected = 0x%h",expected,
111 "\n actual = 0x%h",actual);
116 task automatic S00_AXI_TEST;
118 $display("---------------------------------------------------------");
119 $display("EXAMPLE TEST : S00_AXI");
120 $display("Simple register write and read example");
121 $display("---------------------------------------------------------");
123 S00_AXI_mtestvectorlite = 0;
124 S00_AXI_mtestAddress = `S00_AXI_SLAVE_ADDRESS;
125 S00_AXI_mtestProtection_lite = 0;
126 S00_AXI_mtestdatasizelite = `S00_AXI_MAX_DATA_SIZE;
128 result_slave_lite = 1;
130 for (S00_AXI_mtestvectorlite = 0; S00_AXI_mtestvectorlite <= 3; S00_AXI_mtestvectorlite = S00_AXI_mtestvectorlite + 1)
132 dut.`BD_INST_NAME.master_0.cdn_axi4_lite_master_bfm_inst.WRITE_BURST_CONCURRENT( S00_AXI_mtestAddress,
133 S00_AXI_mtestProtection_lite,
134 S00_AXI_test_data_lite[S00_AXI_mtestvectorlite],
135 S00_AXI_mtestdatasizelite,
136 S00_AXI_lite_response);
137 $display("EXAMPLE TEST %d write : DATA = 0x%h, lite_response = 0x%h",S00_AXI_mtestvectorlite,S00_AXI_test_data_lite[S00_AXI_mtestvectorlite],S00_AXI_lite_response);
138 CHECK_RESPONSE_OKAY(S00_AXI_lite_response);
139 dut.`BD_INST_NAME.master_0.cdn_axi4_lite_master_bfm_inst.READ_BURST(S00_AXI_mtestAddress,
140 S00_AXI_mtestProtection_lite,
141 S00_AXI_rd_data_lite,
142 S00_AXI_lite_response);
143 $display("EXAMPLE TEST %d read : DATA = 0x%h, lite_response = 0x%h",S00_AXI_mtestvectorlite,S00_AXI_rd_data_lite,S00_AXI_lite_response);
144 CHECK_RESPONSE_OKAY(S00_AXI_lite_response);
145 COMPARE_LITE_DATA(S00_AXI_test_data_lite[S00_AXI_mtestvectorlite],S00_AXI_rd_data_lite);
146 $display("EXAMPLE TEST %d : Sequential write and read burst transfers complete from the master side. %d",S00_AXI_mtestvectorlite,S00_AXI_mtestvectorlite);
147 S00_AXI_mtestAddress = S00_AXI_mtestAddress + 32'h00000004;
150 $display("---------------------------------------------------------");
151 $display("EXAMPLE TEST S00_AXI: PTGEN_TEST_FINISHED!");
152 if ( result_slave_lite ) begin
153 $display("PTGEN_TEST: PASSED!");
155 $display("PTGEN_TEST: FAILED!");
157 $display("---------------------------------------------------------");
161 // Create the test vectors
163 // When performing debug enable all levels of INFO messages.
164 wait(tb_ARESETn === 0) @(posedge tb_ACLK);
165 wait(tb_ARESETn === 1) @(posedge tb_ACLK);
166 wait(tb_ARESETn === 1) @(posedge tb_ACLK);
167 wait(tb_ARESETn === 1) @(posedge tb_ACLK);
168 wait(tb_ARESETn === 1) @(posedge tb_ACLK);
170 dut.`BD_INST_NAME.master_0.cdn_axi4_lite_master_bfm_inst.set_channel_level_info(1);
172 // Create test data vectors
173 S00_AXI_test_data_lite[0] = 32'h0101FFFF;
174 S00_AXI_test_data_lite[1] = 32'habcd0001;
175 S00_AXI_test_data_lite[2] = 32'hdead0011;
176 S00_AXI_test_data_lite[3] = 32'hbeef0011;
181 // Wait for end of reset
182 wait(tb_ARESETn === 0) @(posedge tb_ACLK);
183 wait(tb_ARESETn === 1) @(posedge tb_ACLK);
184 wait(tb_ARESETn === 1) @(posedge tb_ACLK);
185 wait(tb_ARESETn === 1) @(posedge tb_ACLK);
186 wait(tb_ARESETn === 1) @(posedge tb_ACLK);
194 // Wait for end of reset
195 wait(tb_ARESETn === 0) @(posedge tb_ACLK);
196 wait(tb_ARESETn === 1) @(posedge tb_ACLK);
197 wait(tb_ARESETn === 1) @(posedge tb_ACLK);
198 wait(tb_ARESETn === 1) @(posedge tb_ACLK);
199 wait(tb_ARESETn === 1) @(posedge tb_ACLK);
201 M00_AXI_INIT_AXI_TXN = 1'b0;
202 #500 M00_AXI_INIT_AXI_TXN = 1'b1;
204 $display("EXAMPLE TEST M00_AXI:");
205 wait( M00_AXI_TXN_DONE == 1'b1);
206 $display("M00_AXI: PTGEN_TEST_FINISHED!");
207 if ( M00_AXI_ERROR ) begin
208 $display("PTGEN_TEST: FAILED!");
210 $display("PTGEN_TEST: PASSED!");