S5443_3Top.v 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174
  1. `timescale 1ns / 1ps
  2. //////////////////////////////////////////////////////////////////////////////////
  3. // Company:
  4. // Engineer:
  5. //
  6. // Create Date: 10/30/2023 11:24:31 AM
  7. // Design Name:
  8. // Module Name: S5443_3Top
  9. // Project Name:
  10. // Target Devices:
  11. // Tool Versions:
  12. // Description:
  13. //
  14. // Dependencies:
  15. //
  16. // Revision:
  17. // Revision 0.01 - File Created
  18. // Additional Comments:
  19. //
  20. //////////////////////////////////////////////////////////////////////////////////
  21. module S5443_3Top #(
  22. parameter CmdRegWidth = 32,
  23. parameter AddrRegWidth = 12,
  24. parameter SpiNum = 7
  25. )(
  26. input Clk123_i,
  27. input [AddrRegWidth-2:0] Addr_i,
  28. inout [CmdRegWidth/2-1:0] Data_i,
  29. input [SpiNum-1:0] SpiRst_i,
  30. input writeEn_i,
  31. input readEn_i,
  32. // input DspRst_i,
  33. input [1:0] BE_i,
  34. input outputEn_i,
  35. output Led_o,
  36. output [SpiNum-1:0] Mosi0_o,
  37. output [SpiNum-1:0] Mosi1_o,
  38. output [SpiNum-1:0] Mosi2_o,
  39. output [SpiNum-1:0] Mosi3_o,
  40. output [SpiNum-1:0] Ss_o,
  41. output [SpiNum-1:0] Sck_o
  42. );
  43. //================================================================================
  44. // REG/WIRE
  45. //================================================================================
  46. wire Clk100_i;
  47. wire [SpiNum-1:0]Sck;
  48. wire [SpiNum-1:0] Ss;
  49. wire [SpiNum-1:0]Mosi0;
  50. wire [SpiNum-1:0]Mosi1;
  51. wire [SpiNum-1:0]Mosi2;
  52. wire [SpiNum-1:0]Mosi3;
  53. wire [SpiNum-1:0] ten;
  54. wire clk80;
  55. wire clk61;
  56. wire Rst_i;
  57. wire gclk;
  58. wire [15:0] baudRate;
  59. wire [19:0] baudRateexp;
  60. //================================================================================
  61. // ASSIGNMENTS
  62. //================================================================================
  63. assign addr = {Addr_i, 1'b0};
  64. assign Data_i = (!outputEn_i) ? data : 16'bz;
  65. assign ten = 8'b00000001;
  66. assign Mosi0_o = Mosi0;
  67. assign Mosi1_o = Mosi1;
  68. assign Mosi2_o = Mosi2;
  69. assign Mosi3_o = Mosi3;
  70. assign Ss_o = Ss;
  71. assign Sck_o = Sck;
  72. assign baudRate = 16'h4;
  73. assign baudRateexp = baudRate*13+1;
  74. //================================================================================
  75. // CODING
  76. //================================================================================
  77. BUFG BUFG_inst (
  78. .O(gclk), // 1-bit output: Clock output
  79. .I(Clk123_i) // 1-bit input: Clock input
  80. );
  81. clk_wiz_0 ClkGen
  82. (
  83. .s_axi_aclk (), // input s_axi_aclk
  84. .s_axi_aresetn (), // input s_axi_aresetn,
  85. .s_axi_awaddr (), // input [10 : 0] s_axi_awaddr,
  86. .s_axi_awvalid (), // input s_axi_awvalid,
  87. .s_axi_awready (), // output s_axi_awready,
  88. .s_axi_wdata (), // input [31 : 0] s_axi_wdata,
  89. .s_axi_wstrb (), // input [3 : 0] s_axi_wstrb,
  90. .s_axi_wvalid (), // input s_axi_wvalid,
  91. .s_axi_wready (), // output s_axi_wready,
  92. .s_axi_bresp (), // output [1 : 0] s_axi_bresp,
  93. .s_axi_bvalid (), // output s_axi_bvalid,
  94. .s_axi_bready (), // input s_axi_bready,
  95. .s_axi_araddr (), // input [10 : 0] s_axi_araddr,
  96. .s_axi_arvalid (), // input s_axi_arvalid,
  97. .s_axi_arready (), // output s_axi_arready,
  98. .s_axi_rdata (), // output [31 : 0] s_axi_rdata,
  99. .s_axi_rresp (), // output [1 : 0] s_axi_rresp,
  100. .s_axi_rvalid (), // output s_axi_rvalid,
  101. .s_axi_rready (), // input s_axi_rready,
  102. // Clock out ports
  103. .clk_out1(Clk100_i), // output clk_out1
  104. // Status and control signals
  105. .locked(), // output locked
  106. // Clock in ports
  107. .clk_in1(gclk)); // input clk_in1
  108. RegMap #(
  109. .CmdRegWidth(32),
  110. .AddrRegWidth(12)
  111. )
  112. RegMap_inst (
  113. .Clk_i(gclk),
  114. .Rst_i(Rst_i),
  115. .Data_i(Data_i),
  116. .Addr_i(addr),
  117. .wrEn_i(writeEn_i),
  118. .rdEn_i(readEn_i),
  119. .BE_i(BE_i),
  120. .Led_o(Led_o),
  121. .AnsDataReg_o(data)
  122. );
  123. genvar i;
  124. generate
  125. for (i = 0; i < SpiNum; i = i + 1) begin: SpiGen
  126. QuadSPIm QuadSPIm_inst (
  127. .Clk_i(Clk100_i),
  128. .Start_i(ten[i]),
  129. .Rst_i(Rst_i|SpiRst_i[i]),
  130. .SPIdata(32'h2aaa00aa),
  131. .Sck_o(Sck[i]),
  132. .Ss_o(Ss[i]),
  133. .Mosi0_i(Mosi0[i]),
  134. .Mosi1_i(Mosi1[i]),
  135. .Mosi2_i(Mosi2[i]),
  136. .Mosi3_i(Mosi3[i]),
  137. .WidthSel_i(3),
  138. .PulsePol_i(0),
  139. .EndianSel_i(1),
  140. .LAG_i(0),
  141. .LEAD_i(0),
  142. .SELST_i(1)
  143. );
  144. end
  145. endgenerate
  146. InitRst InitRst_inst (
  147. .clk_i(gclk),
  148. .signal_o(Rst_i)
  149. );
  150. endmodule