S5443_3_tb.v 6.8 KB

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