S5443_3Top.v 9.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318
  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 [SpiNum-1:0];
  59. wire [19:0] baudRateexp;
  60. //SPI0
  61. wire [CmdRegWidth-1:0] Spi0Ctrl;
  62. wire [CmdRegWidth-1:0] Spi0Clk;
  63. wire [CmdRegWidth-1:0] Spi0CsDelay;
  64. wire [CmdRegWidth-1:0] Spi0CsCtrl;
  65. wire [CmdRegWidth-1:0] Spi0TxFifoCtrl;
  66. wire [CmdRegWidth-1:0] Spi0RxFifoCtrl;
  67. wire [CmdRegWidth-1:0] Spi0TxFifo;
  68. wire [CmdRegWidth-1:0] Spi0RxFifo;
  69. //SPI1
  70. wire [CmdRegWidth-1:0] Spi1Ctrl;
  71. wire [CmdRegWidth-1:0] Spi1Clk;
  72. wire [CmdRegWidth-1:0] Spi1CsDelay;
  73. wire [CmdRegWidth-1:0] Spi1CsCtrl;
  74. wire [CmdRegWidth-1:0] Spi1TxFifoCtrl;
  75. wire [CmdRegWidth-1:0] Spi1RxFifoCtrl;
  76. wire [CmdRegWidth-1:0] Spi1TxFifo;
  77. wire [CmdRegWidth-1:0] Spi1RxFifo;
  78. //SPI2
  79. wire [CmdRegWidth-1:0] Spi2Ctrl;
  80. wire [CmdRegWidth-1:0] Spi2Clk;
  81. wire [CmdRegWidth-1:0] Spi2CsDelay;
  82. wire [CmdRegWidth-1:0] Spi2CsCtrl;
  83. wire [CmdRegWidth-1:0] Spi2TxFifoCtrl;
  84. wire [CmdRegWidth-1:0] Spi2RxFifoCtrl;
  85. wire [CmdRegWidth-1:0] Spi2TxFifo;
  86. wire [CmdRegWidth-1:0] Spi2RxFifo;
  87. //SPI3
  88. wire [CmdRegWidth-1:0] Spi3Ctrl;
  89. wire [CmdRegWidth-1:0] Spi3Clk;
  90. wire [CmdRegWidth-1:0] Spi3CsDelay;
  91. wire [CmdRegWidth-1:0] Spi3CsCtrl;
  92. wire [CmdRegWidth-1:0] Spi3TxFifoCtrl;
  93. wire [CmdRegWidth-1:0] Spi3RxFifoCtrl;
  94. wire [CmdRegWidth-1:0] Spi3TxFifo;
  95. wire [CmdRegWidth-1:0] Spi3RxFifo;
  96. //SPI4
  97. wire [CmdRegWidth-1:0] Spi4Ctrl;
  98. wire [CmdRegWidth-1:0] Spi4Clk;
  99. wire [CmdRegWidth-1:0] Spi4CsDelay;
  100. wire [CmdRegWidth-1:0] Spi4CsCtrl;
  101. wire [CmdRegWidth-1:0] Spi4TxFifoCtrl;
  102. wire [CmdRegWidth-1:0] Spi4RxFifoCtrl;
  103. wire [CmdRegWidth-1:0] Spi4TxFifo;
  104. wire [CmdRegWidth-1:0] Spi4RxFifo;
  105. //SPI5
  106. wire [CmdRegWidth-1:0] Spi5Ctrl;
  107. wire [CmdRegWidth-1:0] Spi5Clk;
  108. wire [CmdRegWidth-1:0] Spi5CsDelay;
  109. wire [CmdRegWidth-1:0] Spi5CsCtrl;
  110. wire [CmdRegWidth-1:0] Spi5TxFifoCtrl;
  111. wire [CmdRegWidth-1:0] Spi5RxFifoCtrl;
  112. wire [CmdRegWidth-1:0] Spi5TxFifo;
  113. wire [CmdRegWidth-1:0] Spi5RxFifo;
  114. //SPI6
  115. wire [CmdRegWidth-1:0] Spi6Ctrl;
  116. wire [CmdRegWidth-1:0] Spi6Clk;
  117. wire [CmdRegWidth-1:0] Spi6CsDelay;
  118. wire [CmdRegWidth-1:0] Spi6CsCtrl;
  119. wire [CmdRegWidth-1:0] Spi6TxFifoCtrl;
  120. wire [CmdRegWidth-1:0] Spi6RxFifoCtrl;
  121. wire [CmdRegWidth-1:0] Spi6TxFifo;
  122. wire [CmdRegWidth-1:0] Spi6RxFifo;
  123. wire [CmdRegWidth-1:0] SpiTxRxEn;
  124. wire [CmdRegWidth-1:0] GPIOA;
  125. //================================================================================
  126. // ASSIGNMENTS
  127. //================================================================================
  128. assign addr = {Addr_i, 1'b0};
  129. assign Data_i = (!outputEn_i) ? data : 16'bz;
  130. assign ten = SpiTxRxEn[6:0];
  131. assign Mosi0_o = Mosi0;
  132. assign Mosi1_o = Mosi1;
  133. assign Mosi2_o = Mosi2;
  134. assign Mosi3_o = Mosi3;
  135. assign Ss_o = Ss;
  136. assign Sck_o = Sck;
  137. // assign baudRate[15:0][0] =Spi0Clk[15:0];
  138. // assign baudRate[15:0][1] =Spi1Clk[15:0];
  139. // assign baudRate[15:0][2] =Spi2Clk[15:0];
  140. // assign baudRate[15:0][3] =Spi3Clk[15:0];
  141. // assign baudRate[15:0][4] =Spi4Clk[15:0];
  142. // assign baudRate[15:0][5] =Spi5Clk[15:0];
  143. // assign baudRate[15:0][6] =Spi6Clk[15:0];
  144. //================================================================================
  145. // CODING
  146. //================================================================================
  147. BUFG BUFG_inst (
  148. .O(gclk), // 1-bit output: Clock output
  149. .I(Clk123_i) // 1-bit input: Clock input
  150. );
  151. clk_wiz_0 ClkGen
  152. (
  153. .s_axi_aclk (), // input s_axi_aclk
  154. .s_axi_aresetn (), // input s_axi_aresetn,
  155. .s_axi_awaddr (), // input [10 : 0] s_axi_awaddr,
  156. .s_axi_awvalid (), // input s_axi_awvalid,
  157. .s_axi_awready (), // output s_axi_awready,
  158. .s_axi_wdata (), // input [31 : 0] s_axi_wdata,
  159. .s_axi_wstrb (), // input [3 : 0] s_axi_wstrb,
  160. .s_axi_wvalid (), // input s_axi_wvalid,
  161. .s_axi_wready (), // output s_axi_wready,
  162. .s_axi_bresp (), // output [1 : 0] s_axi_bresp,
  163. .s_axi_bvalid (), // output s_axi_bvalid,
  164. .s_axi_bready (), // input s_axi_bready,
  165. .s_axi_araddr (), // input [10 : 0] s_axi_araddr,
  166. .s_axi_arvalid (), // input s_axi_arvalid,
  167. .s_axi_arready (), // output s_axi_arready,
  168. .s_axi_rdata (), // output [31 : 0] s_axi_rdata,
  169. .s_axi_rresp (), // output [1 : 0] s_axi_rresp,
  170. .s_axi_rvalid (), // output s_axi_rvalid,
  171. .s_axi_rready (), // input s_axi_rready,
  172. // Clock out ports
  173. .clk_out1(Clk100_i), // output clk_out1
  174. // Status and control signals
  175. .locked(), // output locked
  176. // Clock in ports
  177. .clk_in1(gclk)); // input clk_in1
  178. RegMap #(
  179. .CmdRegWidth(32),
  180. .AddrRegWidth(12)
  181. )
  182. RegMap_inst (
  183. .Clk_i(gclk),
  184. .Rst_i(Rst_i),
  185. .Data_i(Data_i),
  186. .Addr_i(addr),
  187. .wrEn_i(writeEn_i),
  188. .rdEn_i(readEn_i),
  189. .BE_i(BE_i),
  190. .Led_o(Led_o),
  191. .AnsDataReg_o(data),
  192. //Spi0
  193. .Spi0CtrlReg_o(Spi0Ctrl),
  194. .Spi0ClkReg_o(Spi0Clk),
  195. .Spi0CsDelayReg_o(Spi0CsDelay),
  196. .Spi0CsCtrlReg_o(Spi0CsCtrl),
  197. .Spi0TxFifoCtrlReg_o(Spi0TxFifoCtrl),
  198. .Spi0RxFifoCtrlReg_o(Spi0RxFifoCtrl),
  199. .Spi0TxFifoReg_o(Spi0TxFifo),
  200. .Spi0RxFifoReg_o(Spi0RxFifo),
  201. //Spi1
  202. .Spi1CtrlReg_o(Spi1Ctrl),
  203. .Spi1ClkReg_o(Spi1Clk),
  204. .Spi1CsDelayReg_o(Spi1CsDelay),
  205. .Spi1CsCtrlReg_o(Spi1CsCtrl),
  206. .Spi1TxFifoCtrlReg_o(Spi1TxFifoCtrl),
  207. .Spi1RxFifoCtrlReg_o(Spi1RxFifoCtrl),
  208. .Spi1TxFifoReg_o(Spi1TxFifo),
  209. .Spi1RxFifoReg_o(Spi1RxFifo),
  210. //Spi2
  211. .Spi2CtrlReg_o(Spi2Ctrl),
  212. .Spi2ClkReg_o(Spi2Clk),
  213. .Spi2CsDelayReg_o(Spi2CsDelay),
  214. .Spi2CsCtrlReg_o(Spi2CsCtrl),
  215. .Spi2TxFifoCtrlReg_o(Spi2TxFifoCtrl),
  216. .Spi2RxFifoCtrlReg_o(Spi2RxFifoCtrl),
  217. .Spi2TxFifoReg_o(Spi2TxFifo),
  218. .Spi2RxFifoReg_o(Spi2RxFifo),
  219. //Spi3
  220. .Spi3CtrlReg_o(Spi3Ctrl),
  221. .Spi3ClkReg_o(Spi3Clk),
  222. .Spi3CsDelayReg_o(Spi3CsDelay),
  223. .Spi3CsCtrlReg_o(Spi3CsCtrl),
  224. .Spi3TxFifoCtrlReg_o(Spi3TxFifoCtrl),
  225. .Spi3RxFifoCtrlReg_o(Spi3RxFifoCtrl),
  226. .Spi3TxFifoReg_o(Spi3TxFifo),
  227. .Spi3RxFifoReg_o(Spi3RxFifo),
  228. //Spi4
  229. .Spi4CtrlReg_o(Spi4Ctrl),
  230. .Spi4ClkReg_o(Spi4Clk),
  231. .Spi4CsDelayReg_o(Spi4CsDelay),
  232. .Spi4CsCtrlReg_o(Spi4CsCtrl),
  233. .Spi4TxFifoCtrlReg_o(Spi4TxFifoCtrl),
  234. .Spi4RxFifoCtrlReg_o(Spi4RxFifoCtrl),
  235. .Spi4TxFifoReg_o(Spi4TxFifo),
  236. .Spi4RxFifoReg_o(Spi4RxFifo),
  237. //Spi5
  238. .Spi5CtrlReg_o(Spi5Ctrl),
  239. .Spi5ClkReg_o(Spi5Clk),
  240. .Spi5CsDelayReg_o(Spi5CsDelay),
  241. .Spi5CsCtrlReg_o(Spi5CsCtrl),
  242. .Spi5TxFifoCtrlReg_o(Spi5TxFifoCtrl),
  243. .Spi5RxFifoCtrlReg_o(Spi5RxFifoCtrl),
  244. .Spi5TxFifoReg_o(Spi5TxFifo),
  245. .Spi5RxFifoReg_o(Spi5RxFifo),
  246. //Spi6
  247. .Spi6CtrlReg_o(Spi6Ctrl),
  248. .Spi6ClkReg_o(Spi6Clk),
  249. .Spi6CsDelayReg_o(Spi6CsDelay),
  250. .Spi6CsCtrlReg_o(Spi6CsCtrl),
  251. .Spi6TxFifoCtrlReg_o(Spi6TxFifoCtrl),
  252. .Spi6RxFifoCtrlReg_o(Spi6RxFifoCtrl),
  253. .Spi6TxFifoReg_o(Spi6TxFifo),
  254. .Spi6RxFifoReg_o(Spi6RxFifo),
  255. .SpiTxRxEnReg_o(SpiTxRxEn),
  256. .GPIOAReg_o(GPIOA)
  257. );
  258. genvar i;
  259. generate
  260. for (i = 0; i < SpiNum; i = i + 1) begin: SpiGen
  261. QuadSPIm QuadSPIm_inst (
  262. .Clk_i(Clk100_i),
  263. .Start_i(ten[i]),
  264. .Rst_i(Rst_i|SpiRst_i[i]),
  265. .SPIdata(32'h2aaa00aa),
  266. .Sck_o(Sck[i]),
  267. .Ss_o(Ss[i]),
  268. .Mosi0_i(Mosi0[i]),
  269. .Mosi1_i(Mosi1[i]),
  270. .Mosi2_i(Mosi2[i]),
  271. .Mosi3_i(Mosi3[i]),
  272. .WidthSel_i(3),
  273. .PulsePol_i(0),
  274. .EndianSel_i(1),
  275. .LAG_i(0),
  276. .LEAD_i(0),
  277. .SELST_i(1)
  278. );
  279. end
  280. endgenerate
  281. InitRst InitRst_inst (
  282. .clk_i(gclk),
  283. .signal_o(Rst_i)
  284. );
  285. endmodule