hub75_top_tb.v 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198
  1. /*
  2. * hub75_top_tb.v
  3. *
  4. * Copyright (C) 2019 Sylvain Munaut <tnt@246tNt.com>
  5. * All rights reserved.
  6. *
  7. * BSD 3-clause, see LICENSE.bsd
  8. *
  9. * Redistribution and use in source and binary forms, with or without
  10. * modification, are permitted provided that the following conditions are met:
  11. * * Redistributions of source code must retain the above copyright
  12. * notice, this list of conditions and the following disclaimer.
  13. * * Redistributions in binary form must reproduce the above copyright
  14. * notice, this list of conditions and the following disclaimer in the
  15. * documentation and/or other materials provided with the distribution.
  16. * * Neither the name of the <organization> nor the
  17. * names of its contributors may be used to endorse or promote products
  18. * derived from this software without specific prior written permission.
  19. *
  20. * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
  21. * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
  22. * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
  23. * DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY
  24. * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
  25. * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
  26. * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  27. * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
  28. * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
  29. * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  30. *
  31. * vim: ts=4 sw=4
  32. */
  33. `default_nettype none
  34. `timescale 1ns / 100ps
  35. module hub75_top_tb;
  36. // Params
  37. localparam integer N_BANKS = 2;
  38. localparam integer N_ROWS = 32;
  39. localparam integer N_COLS = 64;
  40. localparam integer N_CHANS = 3;
  41. localparam integer N_PLANES = 8;
  42. localparam integer BITDEPTH = 24;
  43. localparam integer LOG_N_BANKS = $clog2(N_BANKS);
  44. localparam integer LOG_N_ROWS = $clog2(N_ROWS);
  45. localparam integer LOG_N_COLS = $clog2(N_COLS);
  46. // Signals
  47. reg rst = 1'b1;
  48. reg clk = 1'b0;
  49. wire [$clog2(N_ROWS)-1:0] hub75_addr;
  50. wire [(N_BANKS*N_CHANS)-1:0] hub75_data;
  51. wire hub75_clk;
  52. wire hub75_le;
  53. wire hub75_blank;
  54. wire [LOG_N_BANKS-1:0] fbw_bank_addr;
  55. wire [LOG_N_ROWS-1:0] fbw_row_addr;
  56. wire fbw_row_store;
  57. wire fbw_row_rdy;
  58. wire fbw_row_swap;
  59. wire [BITDEPTH-1:0] fbw_data;
  60. wire [LOG_N_COLS-1:0] fbw_col_addr;
  61. wire fbw_wren;
  62. wire frame_swap;
  63. wire frame_rdy;
  64. // SPI Reader
  65. `ifndef PATTERN
  66. wire spi_mosi;
  67. wire spi_miso;
  68. wire spi_cs_n;
  69. wire spi_clk;
  70. wire [23:0] sr_addr;
  71. wire [15:0] sr_len;
  72. wire sr_go;
  73. wire sr_rdy;
  74. wire [7:0] sr_data;
  75. wire sr_valid;
  76. `endif
  77. // Setup recording
  78. initial begin
  79. $dumpfile("hub75_top_tb.vcd");
  80. $dumpvars(0,hub75_top_tb);
  81. end
  82. // Reset pulse
  83. initial begin
  84. # 200 rst = 0;
  85. # 10000000 $finish;
  86. end
  87. // Clocks
  88. always #33 clk = !clk; // ~ 30 MHz
  89. // DUT
  90. hub75_top #(
  91. .N_BANKS(N_BANKS),
  92. .N_ROWS(N_ROWS),
  93. .N_COLS(N_COLS),
  94. .N_CHANS(N_CHANS),
  95. .N_PLANES(N_PLANES),
  96. .BITDEPTH(BITDEPTH)
  97. ) dut_I (
  98. .hub75_addr(hub75_addr),
  99. .hub75_data(hub75_data),
  100. .hub75_clk(hub75_clk),
  101. .hub75_le(hub75_le),
  102. .hub75_blank(hub75_blank),
  103. .fbw_bank_addr(fbw_bank_addr),
  104. .fbw_row_addr(fbw_row_addr),
  105. .fbw_row_store(fbw_row_store),
  106. .fbw_row_rdy(fbw_row_rdy),
  107. .fbw_row_swap(fbw_row_swap),
  108. .fbw_data(fbw_data),
  109. .fbw_col_addr(fbw_col_addr),
  110. .fbw_wren(fbw_wren),
  111. .frame_swap(frame_swap),
  112. .frame_rdy(frame_rdy),
  113. .cfg_pre_latch_len(8'h80),
  114. .cfg_latch_len(8'h80),
  115. .cfg_post_latch_len(8'h80),
  116. .cfg_bcm_bit_len(8'h06),
  117. .clk(clk),
  118. .rst(rst)
  119. );
  120. `ifdef PATTERN
  121. pgen #(
  122. .N_ROWS(N_BANKS * N_ROWS),
  123. .N_COLS(N_COLS),
  124. .BITDEPTH(BITDEPTH)
  125. ) pgen_I (
  126. .fbw_row_addr({fbw_bank_addr, fbw_row_addr}),
  127. .fbw_row_store(fbw_row_store),
  128. .fbw_row_rdy(fbw_row_rdy),
  129. .fbw_row_swap(fbw_row_swap),
  130. .fbw_data(fbw_data),
  131. .fbw_col_addr(fbw_col_addr),
  132. .fbw_wren(fbw_wren),
  133. .frame_swap(frame_swap),
  134. .frame_rdy(frame_rdy),
  135. .clk(clk),
  136. .rst(rst)
  137. );
  138. `else
  139. vgen #(
  140. .ADDR_BASE(24'h040000),
  141. .N_FRAMES(30),
  142. .N_ROWS(N_BANKS * N_ROWS),
  143. .N_COLS(N_COLS),
  144. .BITDEPTH(BITDEPTH)
  145. ) vgen_I (
  146. .sr_addr(sr_addr),
  147. .sr_len(sr_len),
  148. .sr_go(sr_go),
  149. .sr_rdy(sr_rdy),
  150. .sr_data(sr_data),
  151. .sr_valid(sr_valid),
  152. .fbw_row_addr({fbw_bank_addr, fbw_row_addr}),
  153. .fbw_row_store(fbw_row_store),
  154. .fbw_row_rdy(fbw_row_rdy),
  155. .fbw_row_swap(fbw_row_swap),
  156. .fbw_data(fbw_data),
  157. .fbw_col_addr(fbw_col_addr),
  158. .fbw_wren(fbw_wren),
  159. .frame_swap(frame_swap),
  160. .frame_rdy(frame_rdy),
  161. .clk(clk),
  162. .rst(rst)
  163. );
  164. spi_flash_reader spi_reader_I (
  165. .spi_mosi(spi_mosi),
  166. .spi_miso(spi_miso),
  167. .spi_cs_n(spi_cs_n),
  168. .spi_clk(spi_clk),
  169. .addr(sr_addr),
  170. .len(sr_len),
  171. .go(sr_go),
  172. .rdy(sr_rdy),
  173. .data(sr_data),
  174. .valid(sr_valid),
  175. .clk(clk),
  176. .rst(rst)
  177. );
  178. `endif
  179. endmodule // hub75_top_tb