SRAM_tb.v 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208
  1. `timescale 1ns / 1ps
  2. module SRAM_tb;
  3. reg Clk123;
  4. reg Clk50;
  5. wire Rst_i;
  6. reg writeEn_i;
  7. reg readEn_i;
  8. reg Start_i;
  9. reg [27:0] sramData;
  10. wire [15:0] sramDataOut;
  11. wire [11:0] sramAddrOut;
  12. wire fullFlag;
  13. wire emptyFlag;
  14. reg [4:0] cnt;
  15. reg [2:0] trCnt;
  16. reg SS;
  17. reg outputEn_i;
  18. assign sramDataOut =sramData[15:0];
  19. // assign sramDataOut = (!outputEn_i)?16'bz:sramData[15:0];
  20. assign sramAddrOut = sramData[27:16];
  21. always #(4.065) Clk123 = ~Clk123;
  22. always #(10) Clk50 = ~Clk50;
  23. initial begin
  24. Clk123 = 1'b1;
  25. Clk50 = 1'b1;
  26. Start_i = 1'b0;
  27. #1500 Start_i = 1'b1;
  28. #500 Start_i = 1'b0;
  29. end
  30. always @(posedge Clk123) begin
  31. if (Rst_i) begin
  32. cnt <= 1'b0;
  33. end
  34. else begin
  35. if (cnt < 20 ) begin
  36. cnt <= cnt + 1'b1;
  37. end
  38. else begin
  39. cnt <= 1'b0;
  40. end
  41. end
  42. end
  43. always @(posedge Clk123) begin
  44. if (Rst_i) begin
  45. trCnt <= 1'b0;
  46. end
  47. else begin
  48. if (cnt == 20 ) begin
  49. trCnt <= trCnt + 1'b1;
  50. end
  51. end
  52. end
  53. always @(posedge Clk123) begin
  54. if (Rst_i) begin
  55. sramData <= 28'h00000000;
  56. end
  57. else begin
  58. case (trCnt)
  59. 0 : begin
  60. sramData <= {11'h0, 16'h01};
  61. end
  62. 1 : begin
  63. sramData <= {11'h02, 16'h00};
  64. end
  65. endcase
  66. end
  67. end
  68. always @(negedge Clk123) begin
  69. if (Rst_i) begin
  70. SS <= 1'b1;
  71. end
  72. else begin
  73. if ( cnt >= 0 && cnt !== 9 ) begin
  74. SS <= 1'b0;
  75. end
  76. else begin
  77. SS <= 1'b1;
  78. end
  79. end
  80. end
  81. always @(negedge Clk123) begin
  82. if (Rst_i) begin
  83. writeEn_i <= 1'b1;
  84. end
  85. else begin
  86. if (cnt >= 2 && cnt <= 6 ) begin
  87. writeEn_i <= 1'b0;
  88. end
  89. else begin
  90. writeEn_i <= 1'b1;
  91. end
  92. end
  93. end
  94. always @(negedge Clk123) begin
  95. if (Rst_i) begin
  96. outputEn_i <= 1'b1;
  97. end
  98. else begin
  99. if (cnt >= 10 && cnt <= 19 ) begin
  100. outputEn_i <= 1'b0;
  101. end
  102. else begin
  103. outputEn_i <= 1'b1;
  104. end
  105. end
  106. end
  107. always @(negedge Clk123) begin
  108. if (Rst_i) begin
  109. readEn_i <= 1'b1;
  110. end
  111. else begin
  112. if ((cnt >= 13 && cnt <= 18) ) begin
  113. readEn_i <= 1'b0;
  114. end
  115. else begin
  116. readEn_i <= 1'b1;
  117. end
  118. end
  119. end
  120. // always @(posedge Clk_i) begin
  121. // if (Rst_i) begin
  122. // CE_i <= 1'b0;
  123. // end
  124. // else begin
  125. // if (!fullFlag && ) begin
  126. // CE_i <= 1'b1;
  127. // end
  128. // else begin
  129. // CE_i <= 1'b0;
  130. // end
  131. // end
  132. // end
  133. SRAMr SRAMr_inst (
  134. .Clk123_i(Clk123),
  135. // .Clk50_i(Clk50),
  136. // .Rst_i(Rst_i),
  137. // .Start_i(Start_i),
  138. .Addr_i(sramAddrOut),
  139. .Data_i(),
  140. .writeEn_i(writeEn_i),
  141. .readEn_i(readEn_i)
  142. // .fullFlag(fullFlag),
  143. // .emptyFlag(emptyFlag),
  144. );
  145. InitRst InitRst_inst (
  146. .clk_i(Clk123),
  147. .signal_o(Rst_i)
  148. );
  149. endmodule