09e4bc0fb19aaf25465a4de29b4bae8c82a7d11e
[debian/gnuradio] / usrp2 / fpga / opencores / sd_interface / bench / testCase0.v
1 // ---------------------------------- testcase0.v ----------------------------\r
2 `include "timescale.v"\r
3 `include "spiMaster_defines.v"\r
4 \r
5 module testCase0();\r
6 \r
7 reg ack;\r
8 reg [7:0] data;\r
9 reg [15:0] dataWord;\r
10 reg [7:0] dataRead;\r
11 reg [7:0] dataWrite;\r
12 integer i;\r
13 integer j;\r
14 \r
15 initial\r
16 begin\r
17   $write("\n\n");\r
18   //testHarness.reset;\r
19   #1000;\r
20 \r
21   //write to block addr reg, and read back\r
22   //testHarness.u_wb_master_model.wb_write(1, `CTRL_STS_REG_BASE+`TRANS_TYPE_REG , 8'h5a);\r
23   $write("Testing register read/write\n");\r
24   testHarness.u_wb_master_model.wb_write(1, `CTRL_STS_REG_BASE+`SPI_CLK_DEL_REG , 8'h10);\r
25   testHarness.u_wb_master_model.wb_cmp(1, `CTRL_STS_REG_BASE+`SPI_CLK_DEL_REG , 8'h10);\r
26   testHarness.u_wb_master_model.wb_write(1, `CTRL_STS_REG_BASE+`SD_ADDR_7_0_REG , 8'h78);\r
27   testHarness.u_wb_master_model.wb_write(1, `CTRL_STS_REG_BASE+`SD_ADDR_15_8_REG , 8'h56);\r
28   testHarness.u_wb_master_model.wb_write(1, `CTRL_STS_REG_BASE+`SD_ADDR_23_16_REG , 8'h34);\r
29   testHarness.u_wb_master_model.wb_write(1, `CTRL_STS_REG_BASE+`SD_ADDR_31_24_REG , 8'h12);\r
30   testHarness.u_wb_master_model.wb_cmp(1, `CTRL_STS_REG_BASE+`SD_ADDR_7_0_REG , 8'h78);\r
31   testHarness.u_wb_master_model.wb_cmp(1, `CTRL_STS_REG_BASE+`SD_ADDR_15_8_REG , 8'h56);\r
32   testHarness.u_wb_master_model.wb_cmp(1, `CTRL_STS_REG_BASE+`SD_ADDR_23_16_REG , 8'h34);\r
33   testHarness.u_wb_master_model.wb_cmp(1, `CTRL_STS_REG_BASE+`SD_ADDR_31_24_REG , 8'h12);\r
34 \r
35   //write one byte to spi bus, and wait for complete\r
36   $write("Testing SPI bus direct access\n");\r
37   testHarness.u_wb_master_model.wb_write(1, `CTRL_STS_REG_BASE+`TRANS_TYPE_REG , {6'b000000, `DIRECT_ACCESS});\r
38   testHarness.u_wb_master_model.wb_write(1, `CTRL_STS_REG_BASE+`DIRECT_ACCESS_DATA_REG , 8'h5f);\r
39   testHarness.u_wb_master_model.wb_write(1, `CTRL_STS_REG_BASE+`TRANS_CTRL_REG , {7'b0000000, `TRANS_START});\r
40   testHarness.u_wb_master_model.wb_read(1, `CTRL_STS_REG_BASE+`TRANS_STS_REG , dataRead);\r
41   while (dataRead[0] == `TRANS_BUSY) \r
42     testHarness.u_wb_master_model.wb_read(1, `CTRL_STS_REG_BASE+`TRANS_STS_REG , dataRead);\r
43 \r
44   //write one byte to spi bus, and wait for complete\r
45   testHarness.u_wb_master_model.wb_write(1, `CTRL_STS_REG_BASE+`DIRECT_ACCESS_DATA_REG , 8'haa);\r
46   testHarness.u_wb_master_model.wb_write(1, `CTRL_STS_REG_BASE+`TRANS_CTRL_REG , {7'b0000000, `TRANS_START});\r
47   testHarness.u_wb_master_model.wb_read(1, `CTRL_STS_REG_BASE+`TRANS_STS_REG , dataRead);\r
48   while (dataRead[0] == `TRANS_BUSY) \r
49     testHarness.u_wb_master_model.wb_read(1, `CTRL_STS_REG_BASE+`TRANS_STS_REG , dataRead);\r
50 \r
51   //init test\r
52   $write("Testing SD init\n");\r
53   testHarness.u_sdModel.setRespByte(8'h01);\r
54   testHarness.u_wb_master_model.wb_write(1, `CTRL_STS_REG_BASE+`TRANS_TYPE_REG , {6'b000000, `INIT_SD});\r
55   testHarness.u_wb_master_model.wb_write(1, `CTRL_STS_REG_BASE+`TRANS_CTRL_REG , {7'b0000000, `TRANS_START});\r
56   #60000;\r
57   testHarness.u_sdModel.setRespByte(8'h00);\r
58   testHarness.u_wb_master_model.wb_read(1, `CTRL_STS_REG_BASE+`TRANS_STS_REG , dataRead);\r
59   while (dataRead[0] == `TRANS_BUSY) \r
60     testHarness.u_wb_master_model.wb_read(1, `CTRL_STS_REG_BASE+`TRANS_STS_REG , dataRead);\r
61   testHarness.u_wb_master_model.wb_read(1, `CTRL_STS_REG_BASE+`TRANS_ERROR_REG , dataRead);\r
62   if (dataRead[1:0] == `INIT_NO_ERROR)\r
63     $write("SD init test passed\n");\r
64   else\r
65     $write("---- ERROR: SD init test failed. Error code = 0x%01x\n", dataRead[1:0] );\r
66 \r
67   //block write\r
68   $write("Testing block write\n");\r
69   dataWrite = 8'h00;\r
70   for (i=0; i<=511; i=i+1) begin\r
71     testHarness.u_wb_master_model.wb_write(1, `TX_FIFO_BASE+`FIFO_DATA_REG , dataWrite);\r
72     dataWrite = dataWrite + 1'b1;\r
73   end\r
74   testHarness.u_wb_master_model.wb_write(1, `CTRL_STS_REG_BASE+`TRANS_TYPE_REG , {6'b000000, `RW_WRITE_SD_BLOCK});\r
75   testHarness.u_wb_master_model.wb_write(1, `CTRL_STS_REG_BASE+`TRANS_CTRL_REG , {7'b0000000, `TRANS_START});\r
76   #100000;\r
77   testHarness.u_sdModel.setRespByte(8'h05); //write response\r
78   #8000000;\r
79   testHarness.u_wb_master_model.wb_read(1, `CTRL_STS_REG_BASE+`TRANS_STS_REG , dataRead);\r
80   if (dataRead[0] == `TRANS_BUSY) begin\r
81     $write("---- ERROR: SD block write failed to complete\n");\r
82   end\r
83   else begin\r
84     testHarness.u_wb_master_model.wb_read(1, `CTRL_STS_REG_BASE+`TRANS_ERROR_REG , dataRead);\r
85     if (dataRead[5:4] == `WRITE_NO_ERROR)\r
86       $write("SD block write passed\n");\r
87     else\r
88       $write("---- ERROR: SD block write failed. Error code = 0x%01x\n", dataRead[5:4] );\r
89   end\r
90 \r
91   //block read\r
92   $write("Testing block read\n");\r
93   testHarness.u_sdModel.setRespByte(8'h00); //cmd response\r
94   testHarness.u_wb_master_model.wb_write(1, `CTRL_STS_REG_BASE+`TRANS_TYPE_REG , {6'b000000, `RW_READ_SD_BLOCK});\r
95   testHarness.u_wb_master_model.wb_write(1, `CTRL_STS_REG_BASE+`TRANS_CTRL_REG , {7'b0000000, `TRANS_START});\r
96   #100000;\r
97   testHarness.u_sdModel.setRespByte(8'hfe); //read response\r
98   #8000000;\r
99   testHarness.u_wb_master_model.wb_read(1, `CTRL_STS_REG_BASE+`TRANS_STS_REG , dataRead);\r
100   if (dataRead[0] == `TRANS_BUSY) begin\r
101     $write("---- ERROR: SD block read failed to complete\n");\r
102   end\r
103   else begin\r
104     testHarness.u_wb_master_model.wb_read(1, `CTRL_STS_REG_BASE+`TRANS_ERROR_REG , dataRead);\r
105     if (dataRead[3:2] == `READ_NO_ERROR) begin\r
106       $write("SD block read passed\n");\r
107       for (j=0; j<=15; j=j+1) begin\r
108         $write("Data 0x%0x = ",j*32);\r
109         for (i=0; i<=31; i=i+1) begin\r
110           testHarness.u_wb_master_model.wb_read(1, `RX_FIFO_BASE+`FIFO_DATA_REG , dataRead);\r
111           $write("0x%0x ",dataRead);\r
112         end\r
113         $write("\n");\r
114       end\r
115     end\r
116     else\r
117       $write("---- ERROR: SD block read failed. Error code = 0x%01x\n", dataRead[3:2] );\r
118   end\r
119 \r
120   $write("Finished all tests\n");\r
121   $stop;        \r
122 \r
123 end\r
124 \r
125 endmodule\r
126 \r