S5443_3_tb.v 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338
  1. `timescale 1ns / 1ps
  2. module S5443_3_tb;
  3. parameter CLK_PERIOD = 8.13; // Clock period in ns
  4. reg Clk_i;
  5. reg Rst_i;
  6. reg [10:0] SmcAddr_i;
  7. reg [15:0]SmcData_i;
  8. reg SmcAre_i;
  9. reg SmcAwe_i;
  10. wire SmcAmsN_i;
  11. wire [1:0] SmcBe_i;
  12. reg SmcAoe_i;
  13. reg [31:0] tb_cnt;
  14. wire [15:0] smcData;
  15. assign SmcBe_i = (tb_cnt >0 && tb_cnt <=44) ? 2'b00 : 2'b11;
  16. assign SmcAmsN_i = (tb_cnt > 0 && tb_cnt <= 44) ? 1'b0 : 1'b1;
  17. assign smcData = SmcData_i;
  18. always #(CLK_PERIOD/2) Clk_i = ~Clk_i;
  19. S5443_3Top uut (
  20. .Clk123_i(Clk_i),
  21. .SmcAddr_i(SmcAddr_i),
  22. .SmcData_i(smcData),
  23. .SmcAwe_i(SmcAwe_i),
  24. .SmcAmsN_i(SmcAmsN_i),
  25. .SmcAre_i(SmcAre_i),
  26. .SmcBe_i(SmcBe_i),
  27. .SmcAoe_i(SmcAoe_i),
  28. .Ld_i(Ld_i),
  29. .Led_o(),
  30. .Mosi0_o(),
  31. .Mosi1_o(),
  32. .Mosi2_o(),
  33. .Mosi3_o(),
  34. .Ss_o(),
  35. .SsFlash_o(),
  36. .Sck_o(),
  37. .SpiRst_o(),
  38. .LD_o()
  39. );
  40. always @(posedge Clk_i) begin
  41. if (Rst_i) begin
  42. SmcAwe_i <= 1'b1;
  43. end
  44. else begin
  45. case (tb_cnt)
  46. 0: begin
  47. SmcAwe_i <= 1'b1;
  48. end
  49. 1: begin
  50. SmcAwe_i <= 1'b1;
  51. end
  52. 2: begin
  53. SmcAwe_i <= 1'b1;
  54. end
  55. 3: begin
  56. SmcAwe_i <= 1'b0;
  57. end
  58. 4: begin
  59. SmcAwe_i <= 1'b1;
  60. end
  61. 5: begin
  62. SmcAwe_i <= 1'b0;
  63. end
  64. 6: begin
  65. SmcAwe_i <= 1'b1;
  66. end
  67. 7: begin
  68. SmcAwe_i <= 1'b0;
  69. end
  70. 8: begin
  71. SmcAwe_i <= 1'b1;
  72. end
  73. 9: begin
  74. SmcAwe_i <= 1'b0;
  75. end
  76. 10: begin
  77. SmcAwe_i <= 1'b1;
  78. end
  79. 11: begin
  80. SmcAwe_i <= 1'b0;
  81. end
  82. 12: begin
  83. SmcAwe_i <= 1'b1;
  84. end
  85. 13: begin
  86. SmcAwe_i <= 1'b0;
  87. end
  88. 14: begin
  89. SmcAwe_i <= 1'b1;
  90. end
  91. 15: begin
  92. SmcAwe_i <= 1'b0;
  93. end
  94. 16: begin
  95. SmcAwe_i <= 1'b1;
  96. end
  97. 17: begin
  98. SmcAwe_i <= 1'b0;
  99. end
  100. 18: begin
  101. SmcAwe_i <= 1'b1;
  102. end
  103. 19: begin
  104. SmcAwe_i <= 1'b0;
  105. end
  106. 20: begin
  107. SmcAwe_i <= 1'b1;
  108. end
  109. 21: begin
  110. SmcAwe_i <= 1'b0;
  111. end
  112. 22: begin
  113. SmcAwe_i <= 1'b1;
  114. end
  115. 23: begin
  116. SmcAwe_i <= 1'b0;
  117. end
  118. 24: begin
  119. SmcAwe_i <= 1'b1;
  120. end
  121. 25: begin
  122. SmcAwe_i <= 1'b0;
  123. end
  124. 26: begin
  125. SmcAwe_i <= 1'b1;
  126. end
  127. 27: begin
  128. SmcAwe_i <= 1'b0;
  129. end
  130. 28: begin
  131. SmcAwe_i <= 1'b1;
  132. end
  133. 29: begin
  134. SmcAwe_i <= 1'b0;
  135. end
  136. 30: begin
  137. SmcAwe_i <= 1'b1;
  138. end
  139. 31: begin
  140. SmcAwe_i <= 1'b0;
  141. end
  142. 32: begin
  143. SmcAwe_i <= 1'b1;
  144. end
  145. 33: begin
  146. SmcAwe_i <= 1'b0;
  147. end
  148. 34: begin
  149. SmcAwe_i <= 1'b1;
  150. end
  151. 35: begin
  152. SmcAwe_i <= 1'b0;
  153. end
  154. 36: begin
  155. SmcAwe_i <= 1'b1;
  156. end
  157. 37: begin
  158. SmcAwe_i <= 1'b0;
  159. end
  160. 38: begin
  161. SmcAwe_i <= 1'b1;
  162. end
  163. 39: begin
  164. SmcAwe_i <= 1'b0;
  165. end
  166. 40: begin
  167. SmcAwe_i <= 1'b1;
  168. end
  169. 41: begin
  170. SmcAwe_i <= 1'b0;
  171. end
  172. 42: begin
  173. SmcAwe_i <= 1'b1;
  174. end
  175. 43: begin
  176. SmcAwe_i <= 1'b0;
  177. end
  178. 44: begin
  179. SmcAwe_i <= 1'b1;
  180. end
  181. endcase
  182. end
  183. end
  184. always @(posedge Clk_i) begin
  185. if (Rst_i) begin
  186. SmcAddr_i <= 0;
  187. SmcData_i <= 0;
  188. end
  189. else begin
  190. case (tb_cnt)
  191. 0: begin
  192. SmcAddr_i <= 12'h00f;
  193. SmcData_i <= 16'h0000;
  194. end
  195. 2: begin
  196. SmcAddr_i <= 12'h7fc;
  197. SmcData_i <= 16'h0001;
  198. end
  199. 4: begin
  200. SmcAddr_i <= 12'h7fd;
  201. SmcData_i <= 16'h0000;
  202. end
  203. 6: begin
  204. SmcAddr_i <= 12'h7fe;
  205. end
  206. 8: begin
  207. SmcAddr_i <= 12'h0;
  208. SmcData_i <= 16'he7;
  209. end
  210. 10: begin
  211. SmcAddr_i <= 12'h1;
  212. end
  213. 12: begin
  214. SmcAddr_i <= 12'h2;
  215. end
  216. 14: begin
  217. SmcAddr_i <= 12'h3;
  218. end
  219. 16: begin
  220. SmcAddr_i <= 12'h4;
  221. SmcData_i <= 16'hc;
  222. end
  223. 18: begin
  224. SmcAddr_i <= 12'h5;
  225. end
  226. 20: begin
  227. SmcAddr_i <= 12'h6;
  228. end
  229. 22: begin
  230. SmcAddr_i <= 12'h7;
  231. end
  232. 24: begin
  233. SmcAddr_i <= 12'h8;
  234. SmcData_i <= 16'h0;
  235. end
  236. 26: begin
  237. SmcAddr_i <= 12'h9;
  238. end
  239. 28: begin
  240. SmcAddr_i <= 12'ha;
  241. end
  242. 30: begin
  243. SmcAddr_i <= 12'hb;
  244. end
  245. 32: begin
  246. SmcAddr_i <= 12'h780;
  247. SmcData_i <= 16'h1;
  248. end
  249. 34: begin
  250. SmcAddr_i <= 12'h781;
  251. SmcData_i <= 16'h0;
  252. end
  253. 36: begin
  254. SmcAddr_i <= 12'h7f8;
  255. SmcData_i <= 16'h0;
  256. end
  257. 38: begin
  258. SmcAddr_i <= 12'h7f9;
  259. SmcData_i <= 16'h0;
  260. end
  261. 40: begin
  262. SmcAddr_i <= 12'h00c;
  263. SmcData_i <= 16'h1;
  264. end
  265. 42: begin
  266. SmcAddr_i <= 12'h00d;
  267. SmcData_i <= 16'h0;
  268. end
  269. endcase
  270. end
  271. end
  272. always @(posedge Clk_i) begin
  273. if (Rst_i) begin
  274. tb_cnt <= 0;
  275. end
  276. else begin
  277. tb_cnt <= tb_cnt + 1;
  278. end
  279. end
  280. // always @(*) begin
  281. // txNextState = IDLE;
  282. // case(txCurrState)
  283. // IDLE : begin
  284. // if (txWork) begin
  285. // txNextState = CMD;
  286. // end
  287. // else begin
  288. // txNextState = IDLE;
  289. // end
  290. // end
  291. // WRITE : begin
  292. // if () begin
  293. // txNextState = WRITE;
  294. // end
  295. // else begin
  296. // txNextState = IDLE;
  297. // end
  298. // end
  299. initial begin
  300. Clk_i = 1'b0;
  301. Rst_i = 1'b1;
  302. SmcAre_i = 1'b1;
  303. SmcAoe_i = 1'b1;
  304. #(CLK_PERIOD*10) Rst_i = 1'b0;
  305. end
  306. endmodule