QuadSPImTb.v 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. `timescale 1ns / 1ps
  2. module QuadSPImTb ();
  3. parameter CLK_PERIOD = 8.13; // Clock period in ns
  4. //================================================================================
  5. // REG/WIRE
  6. //================================================================================
  7. reg rst;
  8. reg clk;
  9. // localparam [31:0] startData = 32'h1;
  10. localparam [31:0] startData = 32'h0A0B0C0D;
  11. reg [31:0] data;
  12. wire [1:0] widthSel = 2'h3;
  13. wire clockPol = 1'b0;
  14. wire clockPhase = 1'b0;
  15. wire endianSel = 1'b0;
  16. wire lag = 1'b0;
  17. wire leadx = 1'b0;
  18. wire [5:0] stopDelay = 6'h1;
  19. wire selSt = 1'b1;
  20. wire val;
  21. reg [31:0] tbCnt;
  22. wire start = (tbCnt>=100);
  23. wire fifoEmpty = (tbCnt >= 500);
  24. //================================================================================
  25. // ASSIGNMENTS
  26. //================================================================================
  27. //================================================================================
  28. // CODING
  29. //================================================================================
  30. always #(CLK_PERIOD/2) clk = ~clk;
  31. initial begin
  32. clk = 0;
  33. rst = 0;
  34. #40
  35. rst = 1;
  36. #100
  37. rst = 0;
  38. end
  39. always @(posedge clk) begin
  40. if (rst) begin
  41. tbCnt <= 0;
  42. end else begin
  43. tbCnt <= tbCnt+1;
  44. end
  45. end
  46. always @(posedge clk) begin
  47. if (rst) begin
  48. data <= startData;
  49. end else if (val) begin
  50. // data <= data+32'h1000;
  51. data <= data;
  52. end
  53. end
  54. QuadSPIm QuadSPIm
  55. (
  56. .Clk_i(clk),
  57. .Start_i(start),
  58. .Rst_i(rst),
  59. .EmptyFlag_i(fifoEmpty),
  60. .SpiData_i(data),
  61. .Sck_o(),
  62. .Ss_o(),
  63. .Mosi0_o(),
  64. .Mosi1_o(),
  65. .Mosi2_o(),
  66. .Mosi3_o(),
  67. .WidthSel_i(widthSel),
  68. .PulsePol_i(clockPol),
  69. .ClockPhase_i(clockPhase),
  70. .EndianSel_i(endianSel),
  71. .Lag_i(lag),
  72. .Lead_i(leadx),
  73. .Stop_i(stopDelay),
  74. .SelSt_i(selSt),
  75. .Val_o(val)
  76. );
  77. endmodule