S5443_3Top.v 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544
  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 writeEn_i,
  30. input readEn_i,
  31. input [1:0] BE_i,
  32. input outputEn_i,
  33. output [SpiNum-1:0] LD_i,
  34. output Led_o,
  35. output [SpiNum-1:0] Mosi0_o,
  36. output [SpiNum-1:0] Mosi1_o,
  37. output [SpiNum-1:0] Mosi2_o,
  38. output [SpiNum-1:0] Mosi3_o,
  39. output [SpiNum-1:0] Ss_o,
  40. output [SpiNum-1:0] SsFlash_o,
  41. output [SpiNum-1:0] Sck_o,
  42. output [SpiNum-1:0] SpiRst_o,
  43. output LD_o
  44. );
  45. //================================================================================
  46. // REG/WIRE
  47. //================================================================================
  48. wire Clk100_i;
  49. wire [SpiNum-1:0]Sck;
  50. wire [SpiNum-1:0] Ss;
  51. wire [SpiNum-1:0]Mosi0;
  52. wire [SpiNum-1:0]Mosi1;
  53. wire [SpiNum-1:0]Mosi2;
  54. wire [SpiNum-1:0]Mosi3;
  55. wire [SpiNum-1:0] ten;
  56. wire clk80;
  57. wire clk61;
  58. wire initRst;
  59. wire gclk;
  60. wire [0:15] baudRate [SpiNum-1:0];
  61. //SPI0
  62. wire [CmdRegWidth-1:0] Spi0Ctrl;
  63. wire [CmdRegWidth-1:0] Spi0Clk;
  64. wire [CmdRegWidth-1:0] Spi0CsDelay;
  65. wire [CmdRegWidth-1:0] Spi0CsCtrl;
  66. wire [CmdRegWidth-1:0] Spi0TxFifoCtrl;
  67. wire [CmdRegWidth-1:0] Spi0RxFifoCtrl;
  68. wire [CmdRegWidth-1:0] Spi0TxFifo;
  69. wire [CmdRegWidth-1:0] Spi0RxFifo;
  70. //SPI1
  71. wire [CmdRegWidth-1:0] Spi1Ctrl;
  72. wire [CmdRegWidth-1:0] Spi1Clk;
  73. wire [CmdRegWidth-1:0] Spi1CsDelay;
  74. wire [CmdRegWidth-1:0] Spi1CsCtrl;
  75. wire [CmdRegWidth-1:0] Spi1TxFifoCtrl;
  76. wire [CmdRegWidth-1:0] Spi1RxFifoCtrl;
  77. wire [CmdRegWidth-1:0] Spi1TxFifo;
  78. wire [CmdRegWidth-1:0] Spi1RxFifo;
  79. //SPI2
  80. wire [CmdRegWidth-1:0] Spi2Ctrl;
  81. wire [CmdRegWidth-1:0] Spi2Clk;
  82. wire [CmdRegWidth-1:0] Spi2CsDelay;
  83. wire [CmdRegWidth-1:0] Spi2CsCtrl;
  84. wire [CmdRegWidth-1:0] Spi2TxFifoCtrl;
  85. wire [CmdRegWidth-1:0] Spi2RxFifoCtrl;
  86. wire [CmdRegWidth-1:0] Spi2TxFifo;
  87. wire [CmdRegWidth-1:0] Spi2RxFifo;
  88. //SPI3
  89. wire [CmdRegWidth-1:0] Spi3Ctrl;
  90. wire [CmdRegWidth-1:0] Spi3Clk;
  91. wire [CmdRegWidth-1:0] Spi3CsDelay;
  92. wire [CmdRegWidth-1:0] Spi3CsCtrl;
  93. wire [CmdRegWidth-1:0] Spi3TxFifoCtrl;
  94. wire [CmdRegWidth-1:0] Spi3RxFifoCtrl;
  95. wire [CmdRegWidth-1:0] Spi3TxFifo;
  96. wire [CmdRegWidth-1:0] Spi3RxFifo;
  97. //SPI4
  98. wire [CmdRegWidth-1:0] Spi4Ctrl;
  99. wire [CmdRegWidth-1:0] Spi4Clk;
  100. wire [CmdRegWidth-1:0] Spi4CsDelay;
  101. wire [CmdRegWidth-1:0] Spi4CsCtrl;
  102. wire [CmdRegWidth-1:0] Spi4TxFifoCtrl;
  103. wire [CmdRegWidth-1:0] Spi4RxFifoCtrl;
  104. wire [CmdRegWidth-1:0] Spi4TxFifo;
  105. wire [CmdRegWidth-1:0] Spi4RxFifo;
  106. //SPI5
  107. wire [CmdRegWidth-1:0] Spi5Ctrl;
  108. wire [CmdRegWidth-1:0] Spi5Clk;
  109. wire [CmdRegWidth-1:0] Spi5CsDelay;
  110. wire [CmdRegWidth-1:0] Spi5CsCtrl;
  111. wire [CmdRegWidth-1:0] Spi5TxFifoCtrl;
  112. wire [CmdRegWidth-1:0] Spi5RxFifoCtrl;
  113. wire [CmdRegWidth-1:0] Spi5TxFifo;
  114. wire [CmdRegWidth-1:0] Spi5RxFifo;
  115. //SPI6
  116. wire [CmdRegWidth-1:0] Spi6Ctrl;
  117. wire [CmdRegWidth-1:0] Spi6Clk;
  118. wire [CmdRegWidth-1:0] Spi6CsDelay;
  119. wire [CmdRegWidth-1:0] Spi6CsCtrl;
  120. wire [CmdRegWidth-1:0] Spi6TxFifoCtrl;
  121. wire [CmdRegWidth-1:0] Spi6RxFifoCtrl;
  122. wire [CmdRegWidth-1:0] Spi6TxFifo;
  123. wire [CmdRegWidth-1:0] Spi6RxFifo;
  124. wire [CmdRegWidth-1:0] SpiTxRxEn;
  125. wire [CmdRegWidth-1:0] GPIOA;
  126. wire [AddrRegWidth-1:0] toRegMapAddr;
  127. wire [CmdRegWidth-1:0] toRegMapData;
  128. wire toRegMapVal;
  129. wire [SpiNum-1:0] toFifoVal;
  130. wire [CmdRegWidth*SpiNum-1:0] toFifoData;
  131. wire [SpiNum-1:0] toSpiVal;
  132. wire [CmdRegWidth-1:0] toSpiData;
  133. wire [0:1] widthSel [SpiNum-1:0];
  134. wire [SpiNum-1:0] CPOL;
  135. wire [SpiNum-1:0] CPHA;
  136. wire [SpiNum-1:0] endianSel;
  137. wire [SpiNum-1:0] selSt;
  138. wire [0:5] stopDelay [SpiNum-1:0];
  139. wire [SpiNum-1:0] leadx;
  140. wire [SpiNum-1:0] lagx;
  141. wire [SpiNum-1:0] FifoRxRst;
  142. wire [SpiNum-1:0] FifoTxRst;
  143. wire [0:7] WordCntTx [SpiNum-1:0];
  144. wire [0:7] WordCntRx [SpiNum-1:0];
  145. wire [SpiNum-1:0] CS0;
  146. wire [SpiNum-1:0] CS1;
  147. wire [SpiNum-1:0] Assel;
  148. //================================================================================
  149. // ASSIGNMENTS
  150. //================================================================================
  151. assign addr = {Addr_i, 1'b0};
  152. assign Data_i = (!outputEn_i) ? data : 16'bz;
  153. assign ten = SpiTxRxEn[6:0];
  154. assign Mosi0_o = Mosi0;
  155. assign Mosi1_o = Mosi1;
  156. assign Mosi2_o = Mosi2;
  157. assign Mosi3_o = Mosi3;
  158. assign Ss_o[0] = (Assel[0])? ((CS0[0])? Ss[0]:~Ss[0]):CS0[0];
  159. assign Ss_o[1] = (Assel[1])? ((CS0[1])? Ss[1]:~Ss[1]):CS0[1];
  160. assign Ss_o[2] = (Assel[2])? ((CS0[2])? Ss[2]:~Ss[2]):CS0[2];
  161. assign Ss_o[3] = (Assel[3])? ((CS0[3])? Ss[3]:~Ss[3]):CS0[3];
  162. assign Ss_o[4] = (Assel[4])? ((CS0[4])? Ss[4]:~Ss[4]):CS0[4];
  163. assign Ss_o[5] = (Assel[5])? ((CS0[5])? Ss[5]:~Ss[5]):CS0[5];
  164. assign Ss_o[6] = (Assel[6])? ((CS0[6])? Ss[6]:~Ss[6]):CS0[6];
  165. assign SsFlash_o[0] = (Assel[0])?(CS1[0]? Ss[0]:~Ss[0]):CS1[0];
  166. assign SsFlash_o[1] = (Assel[1])?(CS1[1]? Ss[1]:~Ss[1]):CS1[1];
  167. assign SsFlash_o[2] = (Assel[2])?(CS1[2]? Ss[2]:~Ss[2]):CS1[2];
  168. assign SsFlash_o[3] = (Assel[3])?(CS1[3]? Ss[3]:~Ss[3]):CS1[3];
  169. assign SsFlash_o[4] = (Assel[4])?(CS1[4]? Ss[4]:~Ss[4]):CS1[4];
  170. assign SsFlash_o[5] = (Assel[5])?(CS1[5]? Ss[5]:~Ss[5]):CS1[5];
  171. assign SsFlash_o[6] = (Assel[6])?(CS1[6]? Ss[6]:~Ss[6]):CS1[6];
  172. assign Sck_o = Sck;
  173. assign widthSel[0] = Spi0Ctrl[6:5];
  174. assign widthSel[1] = Spi1Ctrl[6:5];
  175. assign widthSel[2] = Spi2Ctrl[6:5];
  176. assign widthSel[3] = Spi3Ctrl[6:5];
  177. assign widthSel[4] = Spi4Ctrl[6:5];
  178. assign widthSel[5] = Spi5Ctrl[6:5];
  179. assign widthSel[6] = Spi6Ctrl[6:5];
  180. assign CPOL[0] = Spi0Ctrl[2];
  181. assign CPOL[1] = Spi1Ctrl[2];
  182. assign CPOL[2] = Spi2Ctrl[2];
  183. assign CPOL[3] = Spi3Ctrl[2];
  184. assign CPOL[4] = Spi4Ctrl[2];
  185. assign CPOL[5] = Spi5Ctrl[2];
  186. assign CPOL[6] = Spi6Ctrl[2];
  187. assign CPHA[0] = Spi0Ctrl[1];
  188. assign CPHA[1] = Spi1Ctrl[1];
  189. assign CPHA[2] = Spi2Ctrl[1];
  190. assign CPHA[3] = Spi3Ctrl[1];
  191. assign CPHA[4] = Spi4Ctrl[1];
  192. assign CPHA[5] = Spi5Ctrl[1];
  193. assign CPHA[6] = Spi6Ctrl[1];
  194. assign endianSel[0] = Spi0Ctrl[8];
  195. assign endianSel[1] = Spi1Ctrl[8];
  196. assign endianSel[2] = Spi2Ctrl[8];
  197. assign endianSel[3] = Spi3Ctrl[8];
  198. assign endianSel[4] = Spi4Ctrl[8];
  199. assign endianSel[5] = Spi5Ctrl[8];
  200. assign endianSel[6] = Spi6Ctrl[8];
  201. assign selSt[0] = Spi0Ctrl[4];
  202. assign selSt[1] = Spi1Ctrl[4];
  203. assign selSt[2] = Spi2Ctrl[4];
  204. assign selSt[3] = Spi3Ctrl[4];
  205. assign selSt[4] = Spi4Ctrl[4];
  206. assign selSt[5] = Spi5Ctrl[4];
  207. assign selSt[6] = Spi6Ctrl[4];
  208. assign Assel[0] = Spi0Ctrl[3];
  209. assign Assel[1] = Spi1Ctrl[3];
  210. assign Assel[2] = Spi2Ctrl[3];
  211. assign Assel[3] = Spi3Ctrl[3];
  212. assign Assel[4] = Spi4Ctrl[3];
  213. assign Assel[5] = Spi5Ctrl[3];
  214. assign Assel[6] = Spi6Ctrl[3];
  215. assign stopDelay[0] = Spi0CsDelay[7:2];
  216. assign stopDelay[1] = Spi1CsDelay[7:2];
  217. assign stopDelay[2] = Spi2CsDelay[7:2];
  218. assign stopDelay[3] = Spi3CsDelay[7:2];
  219. assign stopDelay[4] = Spi4CsDelay[7:2];
  220. assign stopDelay[5] = Spi5CsDelay[7:2];
  221. assign stopDelay[6] = Spi6CsDelay[7:2];
  222. assign leadx[0] = Spi0CsDelay[1];
  223. assign leadx[1] = Spi1CsDelay[1];
  224. assign leadx[2] = Spi2CsDelay[1];
  225. assign leadx[3] = Spi3CsDelay[1];
  226. assign leadx[4] = Spi4CsDelay[1];
  227. assign leadx[5] = Spi5CsDelay[1];
  228. assign leadx[6] = Spi6CsDelay[1];
  229. assign lagx[0] = Spi0CsDelay[0];
  230. assign lagx[1] = Spi1CsDelay[0];
  231. assign lagx[2] = Spi2CsDelay[0];
  232. assign lagx[3] = Spi3CsDelay[0];
  233. assign lagx[4] = Spi4CsDelay[0];
  234. assign lagx[5] = Spi5CsDelay[0];
  235. assign lagx[6] = Spi6CsDelay[0];
  236. assign baudRate[0] = Spi0Clk[15:0];
  237. assign baudRate[1] = Spi1Clk[15:0];
  238. assign baudRate[2] = Spi2Clk[15:0];
  239. assign baudRate[3] = Spi3Clk[15:0];
  240. assign baudRate[4] = Spi4Clk[15:0];
  241. assign baudRate[5] = Spi5Clk[15:0];
  242. assign baudRate[6] = Spi6Clk[15:0];
  243. assign SpiRst_o[0] = GPIOA[0];
  244. assign SpiRst_o[1] = GPIOA[1];
  245. assign SpiRst_o[2] = GPIOA[2];
  246. assign SpiRst_o[3] = GPIOA[3];
  247. assign SpiRst_o[4] = GPIOA[4];
  248. assign SpiRst_o[5] = GPIOA[5];
  249. assign SpiRst_o[6] = GPIOA[6];
  250. assign FifoRxRst[0] = Spi0RxFifoCtrl[0];
  251. assign FifoRxRst[1] = Spi1RxFifoCtrl[0];
  252. assign FifoRxRst[2] = Spi2RxFifoCtrl[0];
  253. assign FifoRxRst[3] = Spi3RxFifoCtrl[0];
  254. assign FifoRxRst[4] = Spi4RxFifoCtrl[0];
  255. assign FifoRxRst[5] = Spi5RxFifoCtrl[0];
  256. assign FifoRxRst[6] = Spi6RxFifoCtrl[0];
  257. assign FifoTxRst[0] = Spi0TxFifoCtrl[0];
  258. assign FifoTxRst[1] = Spi1TxFifoCtrl[0];
  259. assign FifoTxRst[2] = Spi2TxFifoCtrl[0];
  260. assign FifoTxRst[3] = Spi3TxFifoCtrl[0];
  261. assign FifoTxRst[4] = Spi4TxFifoCtrl[0];
  262. assign FifoTxRst[5] = Spi5TxFifoCtrl[0];
  263. assign FifoTxRst[6] = Spi6TxFifoCtrl[0];
  264. assign LD_i[0] = GPIOA[16];
  265. assign LD_i[1] = GPIOA[17];
  266. assign LD_i[2] = GPIOA[18];
  267. assign LD_i[3] = GPIOA[19];
  268. assign LD_i[4] = GPIOA[20];
  269. assign LD_i[5] = GPIOA[21];
  270. assign LD_i[6] = GPIOA[22];
  271. assign LD_o = LD_i[0]&LD_i[1]&LD_i[2]&LD_i[3]&LD_i[4]&LD_i[5]&LD_i[6];
  272. assign WordCntRx[0] = Spi0RxFifoCtrl[15:8];
  273. assign WordCntRx[1] = Spi1RxFifoCtrl[15:8];
  274. assign WordCntRx[2] = Spi2RxFifoCtrl[15:8];
  275. assign WordCntRx[3] = Spi3RxFifoCtrl[15:8];
  276. assign WordCntRx[4] = Spi4RxFifoCtrl[15:8];
  277. assign WordCntRx[5] = Spi5RxFifoCtrl[15:8];
  278. assign WordCntRx[6] = Spi6RxFifoCtrl[15:8];
  279. assign WordCntTx[0] = Spi0TxFifoCtrl[15:8];
  280. assign WordCntTx[1] = Spi1TxFifoCtrl[15:8];
  281. assign WordCntTx[2] = Spi2TxFifoCtrl[15:8];
  282. assign WordCntTx[3] = Spi3TxFifoCtrl[15:8];
  283. assign WordCntTx[4] = Spi4TxFifoCtrl[15:8];
  284. assign WordCntTx[5] = Spi5TxFifoCtrl[15:8];
  285. assign WordCntTx[6] = Spi6TxFifoCtrl[15:8];
  286. assign CS0[0] = Spi0CsCtrl[0];
  287. assign CS0[1] = Spi1CsCtrl[0];
  288. assign CS0[2] = Spi2CsCtrl[0];
  289. assign CS0[3] = Spi3CsCtrl[0];
  290. assign CS0[4] = Spi4CsCtrl[0];
  291. assign CS0[5] = Spi5CsCtrl[0];
  292. assign CS0[6] = Spi6CsCtrl[0];
  293. assign CS1[0] = Spi0CsCtrl[1];
  294. assign CS1[1] = Spi1CsCtrl[1];
  295. assign CS1[2] = Spi2CsCtrl[1];
  296. assign CS1[3] = Spi3CsCtrl[1];
  297. assign CS1[4] = Spi4CsCtrl[1];
  298. assign CS1[5] = Spi5CsCtrl[1];
  299. assign CS1[6] = Spi6CsCtrl[1];
  300. //================================================================================
  301. // CODING
  302. //================================================================================
  303. BUFG BUFG_inst (
  304. .O(gclk), // 1-bit output: Clock output
  305. .I(Clk123_i) // 1-bit input: Clock input
  306. );
  307. clk_wiz_0 ClkGen
  308. (
  309. .s_axi_aclk (), // input s_axi_aclk
  310. .s_axi_aresetn (), // input s_axi_aresetn,
  311. .s_axi_awaddr (), // input [10 : 0] s_axi_awaddr,
  312. .s_axi_awvalid (), // input s_axi_awvalid,
  313. .s_axi_awready (), // output s_axi_awready,
  314. .s_axi_wdata (), // input [31 : 0] s_axi_wdata,
  315. .s_axi_wstrb (), // input [3 : 0] s_axi_wstrb,
  316. .s_axi_wvalid (), // input s_axi_wvalid,
  317. .s_axi_wready (), // output s_axi_wready,
  318. .s_axi_bresp (), // output [1 : 0] s_axi_bresp,
  319. .s_axi_bvalid (), // output s_axi_bvalid,
  320. .s_axi_bready (), // input s_axi_bready,
  321. .s_axi_araddr (), // input [10 : 0] s_axi_araddr,
  322. .s_axi_arvalid (), // input s_axi_arvalid,
  323. .s_axi_arready (), // output s_axi_arready,
  324. .s_axi_rdata (), // output [31 : 0] s_axi_rdata,
  325. .s_axi_rresp (), // output [1 : 0] s_axi_rresp,
  326. .s_axi_rvalid (), // output s_axi_rvalid,
  327. .s_axi_rready (), // input s_axi_rready,
  328. // Clock out ports
  329. .clk_out1(Clk100_i), // output clk_out1
  330. // .clk_out2(clk61), // output clk_out2
  331. // Status and control signals
  332. .locked(), // output locked
  333. // Clock in ports
  334. .clk_in1(gclk)); // input clk_in1
  335. SmcDataMux SmcDataMuxer
  336. (
  337. .Clk_i (gclk),
  338. .Rst_i (initRst),
  339. .SmcVal_i (1'b1),
  340. .SmcData_i ({Data_i,Data_i}),
  341. .SmcAddr_i ({Addr_i,1'b0}),
  342. .ToRegMapVal_o (toRegMapVal),
  343. .ToRegMapData_o (toRegMapData),
  344. .ToRegMapAddr_o (toRegMapAddr),
  345. .ToFifoVal_o (toFifoVal),
  346. .ToFifoData_o (toFifoData)
  347. );
  348. RegMap #(
  349. .CmdRegWidth(32),
  350. .AddrRegWidth(12)
  351. )
  352. RegMap_inst (
  353. .Clk_i(gclk),
  354. .Rst_i(initRst),
  355. .Data_i(toRegMapData),
  356. .Addr_i(toRegMapAddr),
  357. .wrEn_i(writeEn_i|toRegMapVal),
  358. .rdEn_i(readEn_i),
  359. .BE_i(BE_i),
  360. .Led_o(Led_o),
  361. .AnsDataReg_o(data),
  362. //Spi0
  363. .Spi0CtrlReg_o(Spi0Ctrl),
  364. .Spi0ClkReg_o(Spi0Clk),
  365. .Spi0CsDelayReg_o(Spi0CsDelay),
  366. .Spi0CsCtrlReg_o(Spi0CsCtrl),
  367. .Spi0TxFifoCtrlReg_o(Spi0TxFifoCtrl),
  368. .Spi0RxFifoCtrlReg_o(Spi0RxFifoCtrl),
  369. .Spi0TxFifoReg_o(Spi0TxFifo),
  370. .Spi0RxFifoReg_o(Spi0RxFifo),
  371. //Spi1
  372. .Spi1CtrlReg_o(Spi1Ctrl),
  373. .Spi1ClkReg_o(Spi1Clk),
  374. .Spi1CsDelayReg_o(Spi1CsDelay),
  375. .Spi1CsCtrlReg_o(Spi1CsCtrl),
  376. .Spi1TxFifoCtrlReg_o(Spi1TxFifoCtrl),
  377. .Spi1RxFifoCtrlReg_o(Spi1RxFifoCtrl),
  378. .Spi1TxFifoReg_o(Spi1TxFifo),
  379. .Spi1RxFifoReg_o(Spi1RxFifo),
  380. //Spi2
  381. .Spi2CtrlReg_o(Spi2Ctrl),
  382. .Spi2ClkReg_o(Spi2Clk),
  383. .Spi2CsDelayReg_o(Spi2CsDelay),
  384. .Spi2CsCtrlReg_o(Spi2CsCtrl),
  385. .Spi2TxFifoCtrlReg_o(Spi2TxFifoCtrl),
  386. .Spi2RxFifoCtrlReg_o(Spi2RxFifoCtrl),
  387. .Spi2TxFifoReg_o(Spi2TxFifo),
  388. .Spi2RxFifoReg_o(Spi2RxFifo),
  389. //Spi3
  390. .Spi3CtrlReg_o(Spi3Ctrl),
  391. .Spi3ClkReg_o(Spi3Clk),
  392. .Spi3CsDelayReg_o(Spi3CsDelay),
  393. .Spi3CsCtrlReg_o(Spi3CsCtrl),
  394. .Spi3TxFifoCtrlReg_o(Spi3TxFifoCtrl),
  395. .Spi3RxFifoCtrlReg_o(Spi3RxFifoCtrl),
  396. .Spi3TxFifoReg_o(Spi3TxFifo),
  397. .Spi3RxFifoReg_o(Spi3RxFifo),
  398. //Spi4
  399. .Spi4CtrlReg_o(Spi4Ctrl),
  400. .Spi4ClkReg_o(Spi4Clk),
  401. .Spi4CsDelayReg_o(Spi4CsDelay),
  402. .Spi4CsCtrlReg_o(Spi4CsCtrl),
  403. .Spi4TxFifoCtrlReg_o(Spi4TxFifoCtrl),
  404. .Spi4RxFifoCtrlReg_o(Spi4RxFifoCtrl),
  405. .Spi4TxFifoReg_o(Spi4TxFifo),
  406. .Spi4RxFifoReg_o(Spi4RxFifo),
  407. //Spi5
  408. .Spi5CtrlReg_o(Spi5Ctrl),
  409. .Spi5ClkReg_o(Spi5Clk),
  410. .Spi5CsDelayReg_o(Spi5CsDelay),
  411. .Spi5CsCtrlReg_o(Spi5CsCtrl),
  412. .Spi5TxFifoCtrlReg_o(Spi5TxFifoCtrl),
  413. .Spi5RxFifoCtrlReg_o(Spi5RxFifoCtrl),
  414. .Spi5TxFifoReg_o(Spi5TxFifo),
  415. .Spi5RxFifoReg_o(Spi5RxFifo),
  416. //Spi6
  417. .Spi6CtrlReg_o(Spi6Ctrl),
  418. .Spi6ClkReg_o(Spi6Clk),
  419. .Spi6CsDelayReg_o(Spi6CsDelay),
  420. .Spi6CsCtrlReg_o(Spi6CsCtrl),
  421. .Spi6TxFifoCtrlReg_o(Spi6TxFifoCtrl),
  422. .Spi6RxFifoCtrlReg_o(Spi6RxFifoCtrl),
  423. .Spi6TxFifoReg_o(Spi6TxFifo),
  424. .Spi6RxFifoReg_o(Spi6RxFifo),
  425. .SpiTxRxEnReg_o(SpiTxRxEn),
  426. .GPIOAReg_o(GPIOA)
  427. );
  428. genvar i;
  429. generate
  430. for (i = 0; i < SpiNum; i = i + 1) begin: SpiGen
  431. DataFifoWrapper DataFifoWrapepr
  432. (
  433. .WrClk_i (gclk),
  434. .RdClk_i (Clk100_i),
  435. .Rst_i (initRst | FifoRxRst[i]),
  436. .readEn_i (readEn_i),
  437. .ToFifoVal_i (toFifoVal[i]),
  438. .ToFifoData_i (toFifoData[32*i+:32]),
  439. .ToSpiVal_o (toSpiVal[i]),
  440. .ToSpiData_o (toSpiData[i])
  441. );
  442. QuadSPIm QuadSPIm_inst (
  443. .Clk_i(Clk100_i),
  444. .Start_i(ten[i]),
  445. .Rst_i(initRst),
  446. .SpiDataVal_i (toSpiVal),
  447. // .SPIdata(32'h2aaa00aa),
  448. .SPIdata(toSpiData[i]),
  449. .Sck_o(Sck[i]),
  450. .Ss_o(Ss[i]),
  451. .Mosi0_i(Mosi0[i]),
  452. .Mosi1_i(Mosi1[i]),
  453. .Mosi2_i(Mosi2[i]),
  454. .Mosi3_i(Mosi3[i]),
  455. .WidthSel_i(widthSel[i]),
  456. .PulsePol_i(CPOL[i]),
  457. .CPHA_i(CPHA[i]),
  458. .EndianSel_i(endianSel[i]),
  459. .LAG_i(lagx[i]),
  460. .LEAD_i(leadx[i]),
  461. .Stop_i(stopDelay[i]),
  462. .SELST_i(selSt[i])
  463. );
  464. end
  465. endgenerate
  466. InitRst InitRst_inst (
  467. .clk_i(gclk),
  468. .signal_o(initRst)
  469. );
  470. endmodule