SPIm_tb.v 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  1. `timescale 1ns/1ps
  2. module tb_SPIm;
  3. // Parameters
  4. parameter CLK_PERIOD = 8.13; // Clock period in ns
  5. // Inputs
  6. reg Clk_i;
  7. reg Rst_i;
  8. reg Start_i;
  9. reg CPHA_i;
  10. reg [31:0] SPIdata;
  11. reg SpiDataVal_i;
  12. reg SELST_i;
  13. reg [1:0] WidthSel_i;
  14. reg LAG_i;
  15. reg LEAD_i;
  16. reg EndianSel_i;
  17. reg [5:0] Stop_i;
  18. reg PulsePol_i;
  19. // Outputs
  20. wire Mosi0_o;
  21. wire Mosi1_o;
  22. wire Mosi2_o;
  23. wire Mosi3_o;
  24. wire Sck_o;
  25. wire Ss_o;
  26. wire Val_o;
  27. SPIm SPIm_inst (
  28. .Clk_i(Clk_i),
  29. .Rst_i(Rst_i),
  30. .Start_i(Start_i),
  31. .CPHA_i(CPHA_i),
  32. .SPIdata(SPIdata),
  33. .SELST_i(SELST_i),
  34. .WidthSel_i(WidthSel_i),
  35. .LAG_i(LAG_i),
  36. .LEAD_i(LEAD_i),
  37. .EndianSel_i(EndianSel_i),
  38. .Stop_i(Stop_i),
  39. .PulsePol_i(PulsePol_i),
  40. .Mosi0_o(Mosi0_o),
  41. .Sck_o(Sck_o),
  42. .Ss_o(Ss_o),
  43. .Val_o(Val_o)
  44. );
  45. SPIs SPIs_inst (
  46. .Clk_i(Clk_i),
  47. .Rst_i(Rst_i),
  48. .Sck_i(Sck_o),
  49. .Ss_i(Ss_o),
  50. .Mosi0_i(Mosi0_o),
  51. .WidthSel_i(WidthSel_i),
  52. .EndianSel_i(EndianSel_i),
  53. .SELST_i(SELST_i),
  54. .Data_o(),
  55. .Addr_o(),
  56. .DataToRxFifo_o(),
  57. .Val_o()
  58. );
  59. // QuadSPIm QuadSPIm_inst (
  60. // .Clk_i(Clk_i),
  61. // .Rst_i(Rst_i),
  62. // .Start_i(Start_i),
  63. // .CPHA_i(CPHA_i),
  64. // .SPIdata(SPIdata),
  65. // .SpiDataVal_i(SpiDataVal_i),
  66. // .SELST_i(SELST_i),
  67. // .WidthSel_i(WidthSel_i),
  68. // .LAG_i(LAG_i),
  69. // .LEAD_i(LEAD_i),
  70. // .EndianSel_i(EndianSel_i),
  71. // .Stop_i(Stop_i),
  72. // .PulsePol_i(PulsePol_i),
  73. // .Mosi0_i(Mosi0_o),
  74. // .Mosi1_i(Mosi1_o),
  75. // .Mosi2_i(Mosi2_o),
  76. // .Mosi3_i(Mosi3_o),
  77. // .Sck_o(Sck_o),
  78. // .Ss_o(Ss_o),
  79. // .Val_o(Val_o)
  80. // );
  81. // QuadSPIs QuadSPIs_inst (
  82. // .Clk_i(Clk_i),
  83. // .Rst_i(Rst_i),
  84. // .Sck_i(Sck_o),
  85. // .Ss_i(Ss_o),
  86. // .Mosi0_i(Mosi0_o),
  87. // .Mosi1_i(Mosi1_o),
  88. // .Mosi2_i(Mosi2_o),
  89. // .Mosi3_i(Mosi3_o),
  90. // .WidthSel_i(WidthSel_i),
  91. // .SELST_i(SELST_i),
  92. // .Data_o(),
  93. // .Addr_o(),
  94. // .DataToRxFifo_o(),
  95. // .Val_o()
  96. // );
  97. // Clock generation
  98. always #(CLK_PERIOD/2) Clk_i = ~Clk_i;
  99. // Initial setup and test sequence
  100. initial begin
  101. // Initialize Inputs
  102. Clk_i = 0;
  103. Rst_i = 1;
  104. Start_i = 0;
  105. CPHA_i = 0;
  106. SpiDataVal_i = 0;
  107. SPIdata = 32'h00000000;
  108. SELST_i = 1;//0:High, 1:Low
  109. WidthSel_i = 3; // Full 32-bit width
  110. LAG_i = 0;
  111. LEAD_i = 0;
  112. EndianSel_i = 1; // 0:MSB first, 1:lsb first
  113. Stop_i = 6'd0;
  114. PulsePol_i = 0;
  115. // Reset the system
  116. #(CLK_PERIOD*10) Rst_i = 0;
  117. #(CLK_PERIOD*2) Start_i = 1; // Start SPI transaction
  118. #(CLK_PERIOD*10)SPIdata = {1'h0, 7'h2a, 8'haa,8'h00,8'haa};
  119. // #(CLK_PERIOD*10)SPIdata = 32'haa;
  120. #(CLK_PERIOD*100);
  121. SPIdata = {1'h0, 7'h2a, 24'd10};
  122. // EndianSel_i = 1; // LSB first
  123. // SPIdata = {1'h0, 7'h2a, 8'haa,8'h00,8'haa};
  124. // #(CLK_PERIOD*2) Start_i = 0;
  125. // #(CLK_PERIOD) Start_i = 1;
  126. end
  127. endmodule