S5443_3Top.v 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707
  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] SmcAddr_i,
  28. inout [CmdRegWidth/2-1:0] SmcData_i,
  29. input SmcAwe_i,
  30. input SmcAmsN_i,
  31. input SmcAre_i,
  32. input [1:0] SmcBe_i,
  33. input SmcAoe_i,
  34. output [SpiNum-1:0] Ld_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] SsFlash_o,
  42. output [SpiNum-1:0] Sck_o,
  43. output [SpiNum-1:0] SpiRst_o,
  44. output LD_o
  45. );
  46. //================================================================================
  47. // REG/WIRE
  48. //================================================================================
  49. wire Clk100_i;
  50. wire [SpiNum-1:0]Sck;
  51. wire [AddrRegWidth-1:0] addr;
  52. wire [SpiNum-1:0] Ss;
  53. wire [SpiNum-1:0]Mosi0;
  54. wire [SpiNum-1:0]Mosi1;
  55. wire [SpiNum-1:0]Mosi2;
  56. wire [SpiNum-1:0]Mosi3;
  57. wire [SpiNum-1:0] ten;
  58. wire clk80;
  59. wire clk61;
  60. wire initRst;
  61. wire gclk;
  62. wire [0:15] baudRate [SpiNum-1:0];
  63. //SPI0
  64. wire [CmdRegWidth-1:0] spi0Ctrl;
  65. wire [CmdRegWidth-1:0] spi0Clk;
  66. wire [CmdRegWidth-1:0] spi0CsDelay;
  67. wire [CmdRegWidth-1:0] spi0CsCtrl;
  68. wire [CmdRegWidth-1:0] spi0TxFifoCtrl;
  69. wire [CmdRegWidth-1:0] spi0RxFifoCtrl;
  70. wire [CmdRegWidth-1:0] spi0TxFifo;
  71. wire [CmdRegWidth-1:0] spi0RxFifo;
  72. //SPI1
  73. wire [CmdRegWidth-1:0] spi1Ctrl;
  74. wire [CmdRegWidth-1:0] spi1Clk;
  75. wire [CmdRegWidth-1:0] spi1CsDelay;
  76. wire [CmdRegWidth-1:0] spi1CsCtrl;
  77. wire [CmdRegWidth-1:0] spi1TxFifoCtrl;
  78. wire [CmdRegWidth-1:0] spi1RxFifoCtrl;
  79. wire [CmdRegWidth-1:0] spi1TxFifo;
  80. wire [CmdRegWidth-1:0] spi1RxFifo;
  81. //SPI2
  82. wire [CmdRegWidth-1:0] spi2Ctrl;
  83. wire [CmdRegWidth-1:0] spi2Clk;
  84. wire [CmdRegWidth-1:0] spi2CsDelay;
  85. wire [CmdRegWidth-1:0] spi2CsCtrl;
  86. wire [CmdRegWidth-1:0] spi2TxFifoCtrl;
  87. wire [CmdRegWidth-1:0] spi2RxFifoCtrl;
  88. wire [CmdRegWidth-1:0] spi2TxFifo;
  89. wire [CmdRegWidth-1:0] Spi2RxFifo;
  90. //SPI3
  91. wire [CmdRegWidth-1:0] spi3Ctrl;
  92. wire [CmdRegWidth-1:0] spi3Clk;
  93. wire [CmdRegWidth-1:0] spi3CsDelay;
  94. wire [CmdRegWidth-1:0] spi3CsCtrl;
  95. wire [CmdRegWidth-1:0] spi3TxFifoCtrl;
  96. wire [CmdRegWidth-1:0] spi3RxFifoCtrl;
  97. wire [CmdRegWidth-1:0] Spi3TxFifo;
  98. wire [CmdRegWidth-1:0] Spi3RxFifo;
  99. //SPI4
  100. wire [CmdRegWidth-1:0] spi4Ctrl;
  101. wire [CmdRegWidth-1:0] spi4Clk;
  102. wire [CmdRegWidth-1:0] spi4CsDelay;
  103. wire [CmdRegWidth-1:0] spi4CsCtrl;
  104. wire [CmdRegWidth-1:0] spi4TxFifoCtrl;
  105. wire [CmdRegWidth-1:0] spi4RxFifoCtrl;
  106. wire [CmdRegWidth-1:0] Spi4TxFifo;
  107. wire [CmdRegWidth-1:0] Spi4RxFifo;
  108. //SPI5
  109. wire [CmdRegWidth-1:0] spi5Ctrl;
  110. wire [CmdRegWidth-1:0] spi5Clk;
  111. wire [CmdRegWidth-1:0] spi5CsDelay;
  112. wire [CmdRegWidth-1:0] spi5CsCtrl;
  113. wire [CmdRegWidth-1:0] spi5TxFifoCtrl;
  114. wire [CmdRegWidth-1:0] spi5RxFifoCtrl;
  115. wire [CmdRegWidth-1:0] Spi5TxFifo;
  116. wire [CmdRegWidth-1:0] Spi5RxFifo;
  117. //SPI6
  118. wire [CmdRegWidth-1:0] spi6Ctrl;
  119. wire [CmdRegWidth-1:0] spi6Clk;
  120. wire [CmdRegWidth-1:0] spi6CsDelay;
  121. wire [CmdRegWidth-1:0] spi6CsCtrl;
  122. wire [CmdRegWidth-1:0] spi6TxFifoCtrl;
  123. wire [CmdRegWidth-1:0] spi6RxFifoCtrl;
  124. wire [CmdRegWidth-1:0] Spi6TxFifo;
  125. wire [CmdRegWidth-1:0] Spi6RxFifo;
  126. wire [CmdRegWidth-1:0] SpiTxRxEn;
  127. wire [CmdRegWidth-1:0] GPIOA;
  128. wire [AddrRegWidth-1:0] toRegMapAddr;
  129. wire [CmdRegWidth-1:0] toRegMapData;
  130. wire toRegMapVal;
  131. wire [SpiNum-1:0] toFifoVal;
  132. wire [CmdRegWidth*SpiNum-1:0] toFifoData;
  133. wire [SpiNum-1:0] toSpiVal;
  134. wire [CmdRegWidth-1:0] toSpiData;
  135. wire [0:1] widthSel [SpiNum-1:0];
  136. wire [SpiNum-1:0] CPOL;
  137. wire [SpiNum-1:0] CPHA;
  138. wire [SpiNum-1:0] endianSel;
  139. wire [SpiNum-1:0] selSt;
  140. wire [SpiNum-1:0] spiMode;
  141. wire [0:5] stopDelay [SpiNum-1:0];
  142. wire [SpiNum-1:0] leadx;
  143. wire [SpiNum-1:0] lag;
  144. wire [SpiNum-1:0] fifoRxRst;
  145. wire [SpiNum-1:0] fifoTxRst;
  146. wire [0:7] wordCntTx [SpiNum-1:0];
  147. wire [0:7] wordCntRx [SpiNum-1:0];
  148. wire [SpiNum-1:0] CS0;
  149. wire [SpiNum-1:0] CS1;
  150. wire [SpiNum-1:0] Assel;
  151. wire [SpiNum-1:0] spiClkBus;
  152. wire [SpiNum-1:0] spiSyncRst;
  153. wire [AddrRegWidth-1:0] smcAddr;
  154. wire [CmdRegWidth-1:0] smcData;
  155. wire smcVal;
  156. //RxFifo
  157. wire [0:23] dataToRxFifo [SpiNum-1:0];
  158. wire [0:7] addrToRxFifo [SpiNum-1:0];
  159. wire [SpiNum-1:0] valToRxFifo;
  160. wire [SpiNum-1:0] valToTxFifoRead;
  161. // SPI mode choice
  162. wire [SpiNum-1:0] SckR;
  163. wire [SpiNum-1:0] SsR;
  164. wire [SpiNum-1:0] Mosi0R;
  165. wire [SpiNum-1:0] valToTxR;
  166. wire [SpiNum-1:0] valToRxR;
  167. wire [0:31] dataToRxFifoR [SpiNum-1:0];
  168. wire [SpiNum-1:0] SckQ;
  169. wire [SpiNum-1:0] SsQ;
  170. wire [SpiNum-1:0] Mosi0Q;
  171. wire [SpiNum-1:0] valToTxQ;
  172. wire [SpiNum-1:0] valToRxQ;
  173. wire [0:31] dataToRxFifoQ [SpiNum-1:0];
  174. //================================================================================
  175. // ASSIGNMENTS
  176. //================================================================================
  177. assign addr = {SmcAddr_i, 1'b0};
  178. assign Data_i = (!SmcAoe_i) ? data : 16'bz;
  179. assign ten = SpiTxRxEn[6:0];
  180. assign Mosi0_o = Mosi0;
  181. assign Mosi1_o = Mosi1;
  182. assign Mosi2_o = Mosi2;
  183. assign Mosi3_o = Mosi3;
  184. assign Ss_o[0] = (Assel[0])? ((CS0[0])? Ss[0]:~Ss[0]):CS0[0];
  185. assign Ss_o[1] = (Assel[1])? ((CS0[1])? Ss[1]:~Ss[1]):CS0[1];
  186. assign Ss_o[2] = (Assel[2])? ((CS0[2])? Ss[2]:~Ss[2]):CS0[2];
  187. assign Ss_o[3] = (Assel[3])? ((CS0[3])? Ss[3]:~Ss[3]):CS0[3];
  188. assign Ss_o[4] = (Assel[4])? ((CS0[4])? Ss[4]:~Ss[4]):CS0[4];
  189. assign Ss_o[5] = (Assel[5])? ((CS0[5])? Ss[5]:~Ss[5]):CS0[5];
  190. assign Ss_o[6] = (Assel[6])? ((CS0[6])? Ss[6]:~Ss[6]):CS0[6];
  191. assign SsFlash_o[0] = (Assel[0])?(CS1[0]? Ss[0]:~Ss[0]):CS1[0];
  192. assign SsFlash_o[1] = (Assel[1])?(CS1[1]? Ss[1]:~Ss[1]):CS1[1];
  193. assign SsFlash_o[2] = (Assel[2])?(CS1[2]? Ss[2]:~Ss[2]):CS1[2];
  194. assign SsFlash_o[3] = (Assel[3])?(CS1[3]? Ss[3]:~Ss[3]):CS1[3];
  195. assign SsFlash_o[4] = (Assel[4])?(CS1[4]? Ss[4]:~Ss[4]):CS1[4];
  196. assign SsFlash_o[5] = (Assel[5])?(CS1[5]? Ss[5]:~Ss[5]):CS1[5];
  197. assign SsFlash_o[6] = (Assel[6])?(CS1[6]? Ss[6]:~Ss[6]):CS1[6];
  198. assign Sck_o = Sck;
  199. assign widthSel[0] = spi0Ctrl[6:5];
  200. assign widthSel[1] = spi1Ctrl[6:5];
  201. assign widthSel[2] = spi2Ctrl[6:5];
  202. assign widthSel[3] = spi3Ctrl[6:5];
  203. assign widthSel[4] = spi4Ctrl[6:5];
  204. assign widthSel[5] = spi5Ctrl[6:5];
  205. assign widthSel[6] = spi6Ctrl[6:5];
  206. assign spiMode[0] = spi0Ctrl[7];
  207. assign spiMode[1] = spi1Ctrl[7];
  208. assign spiMode[2] = spi2Ctrl[7];
  209. assign spiMode[3] = spi3Ctrl[7];
  210. assign spiMode[4] = spi4Ctrl[7];
  211. assign spiMode[5] = spi5Ctrl[7];
  212. assign spiMode[6] = spi6Ctrl[7];
  213. assign CPOL[0] = spi0Ctrl[2];
  214. assign CPOL[1] = spi1Ctrl[2];
  215. assign CPOL[2] = spi2Ctrl[2];
  216. assign CPOL[3] = spi3Ctrl[2];
  217. assign CPOL[4] = spi4Ctrl[2];
  218. assign CPOL[5] = spi5Ctrl[2];
  219. assign CPOL[6] = spi6Ctrl[2];
  220. assign CPHA[0] = spi0Ctrl[1];
  221. assign CPHA[1] = spi1Ctrl[1];
  222. assign CPHA[2] = spi2Ctrl[1];
  223. assign CPHA[3] = spi3Ctrl[1];
  224. assign CPHA[4] = spi4Ctrl[1];
  225. assign CPHA[5] = spi5Ctrl[1];
  226. assign CPHA[6] = spi6Ctrl[1];
  227. assign endianSel[0] = spi0Ctrl[8];
  228. assign endianSel[1] = spi1Ctrl[8];
  229. assign endianSel[2] = spi2Ctrl[8];
  230. assign endianSel[3] = spi3Ctrl[8];
  231. assign endianSel[4] = spi4Ctrl[8];
  232. assign endianSel[5] = spi5Ctrl[8];
  233. assign endianSel[6] = spi6Ctrl[8];
  234. assign selSt[0] = spi0Ctrl[4];
  235. assign selSt[1] = spi1Ctrl[4];
  236. assign selSt[2] = spi2Ctrl[4];
  237. assign selSt[3] = spi3Ctrl[4];
  238. assign selSt[4] = spi4Ctrl[4];
  239. assign selSt[5] = spi5Ctrl[4];
  240. assign selSt[6] = spi6Ctrl[4];
  241. assign Assel[0] = spi0Ctrl[3];
  242. assign Assel[1] = spi1Ctrl[3];
  243. assign Assel[2] = spi2Ctrl[3];
  244. assign Assel[3] = spi3Ctrl[3];
  245. assign Assel[4] = spi4Ctrl[3];
  246. assign Assel[5] = spi5Ctrl[3];
  247. assign Assel[6] = spi6Ctrl[3];
  248. assign stopDelay[0] = spi0CsDelay[7:2];
  249. assign stopDelay[1] = spi1CsDelay[7:2];
  250. assign stopDelay[2] = spi2CsDelay[7:2];
  251. assign stopDelay[3] = spi3CsDelay[7:2];
  252. assign stopDelay[4] = spi4CsDelay[7:2];
  253. assign stopDelay[5] = spi5CsDelay[7:2];
  254. assign stopDelay[6] = spi6CsDelay[7:2];
  255. assign leadx[0] = spi0CsDelay[1];
  256. assign leadx[1] = spi1CsDelay[1];
  257. assign leadx[2] = spi2CsDelay[1];
  258. assign leadx[3] = spi3CsDelay[1];
  259. assign leadx[4] = spi4CsDelay[1];
  260. assign leadx[5] = spi5CsDelay[1];
  261. assign leadx[6] = spi6CsDelay[1];
  262. assign lag[0] = spi0CsDelay[0];
  263. assign lag[1] = spi1CsDelay[0];
  264. assign lag[2] = spi2CsDelay[0];
  265. assign lag[3] = spi3CsDelay[0];
  266. assign lag[4] = spi4CsDelay[0];
  267. assign lag[5] = spi5CsDelay[0];
  268. assign lag[6] = spi6CsDelay[0];
  269. assign baudRate[0] = spi0Clk[15:0];
  270. assign baudRate[1] = spi1Clk[15:0];
  271. assign baudRate[2] = spi2Clk[15:0];
  272. assign baudRate[3] = spi3Clk[15:0];
  273. assign baudRate[4] = spi4Clk[15:0];
  274. assign baudRate[5] = spi5Clk[15:0];
  275. assign baudRate[6] = spi6Clk[15:0];
  276. assign SpiRst_o[0] = GPIOA[0];
  277. assign SpiRst_o[1] = GPIOA[1];
  278. assign SpiRst_o[2] = GPIOA[2];
  279. assign SpiRst_o[3] = GPIOA[3];
  280. assign SpiRst_o[4] = GPIOA[4];
  281. assign SpiRst_o[5] = GPIOA[5];
  282. assign SpiRst_o[6] = GPIOA[6];
  283. assign fifoRxRst[0] = spi0RxFifoCtrl[0];
  284. assign fifoRxRst[1] = spi1RxFifoCtrl[0];
  285. assign fifoRxRst[2] = spi2RxFifoCtrl[0];
  286. assign fifoRxRst[3] = spi3RxFifoCtrl[0];
  287. assign fifoRxRst[4] = spi4RxFifoCtrl[0];
  288. assign fifoRxRst[5] = spi5RxFifoCtrl[0];
  289. assign fifoRxRst[6] = spi6RxFifoCtrl[0];
  290. assign fifoTxRst[0] = spi0TxFifoCtrl[0];
  291. assign fifoTxRst[1] = spi1TxFifoCtrl[0];
  292. assign fifoTxRst[2] = spi2TxFifoCtrl[0];
  293. assign fifoTxRst[3] = spi3TxFifoCtrl[0];
  294. assign fifoTxRst[4] = spi4TxFifoCtrl[0];
  295. assign fifoTxRst[5] = spi5TxFifoCtrl[0];
  296. assign fifoTxRst[6] = spi6TxFifoCtrl[0];
  297. assign Ld_i[0] = GPIOA[16];
  298. assign Ld_i[1] = GPIOA[17];
  299. assign Ld_i[2] = GPIOA[18];
  300. assign Ld_i[3] = GPIOA[19];
  301. assign Ld_i[4] = GPIOA[20];
  302. assign Ld_i[5] = GPIOA[21];
  303. assign Ld_i[6] = GPIOA[22];
  304. assign LD_o = Ld_i[0]&Ld_i[1]&Ld_i[2]&Ld_i[3]&Ld_i[4]&Ld_i[5]&Ld_i[6];
  305. assign wordCntRx[0] = spi0RxFifoCtrl[15:8];
  306. assign wordCntRx[1] = spi1RxFifoCtrl[15:8];
  307. assign wordCntRx[2] = spi2RxFifoCtrl[15:8];
  308. assign wordCntRx[3] = spi3RxFifoCtrl[15:8];
  309. assign wordCntRx[4] = spi4RxFifoCtrl[15:8];
  310. assign wordCntRx[5] = spi5RxFifoCtrl[15:8];
  311. assign wordCntRx[6] = spi6RxFifoCtrl[15:8];
  312. assign wordCntTx[0] = spi0TxFifoCtrl[15:8];
  313. assign wordCntTx[1] = spi1TxFifoCtrl[15:8];
  314. assign wordCntTx[2] = spi2TxFifoCtrl[15:8];
  315. assign wordCntTx[3] = spi3TxFifoCtrl[15:8];
  316. assign wordCntTx[4] = spi4TxFifoCtrl[15:8];
  317. assign wordCntTx[5] = spi5TxFifoCtrl[15:8];
  318. assign wordCntTx[6] = spi6TxFifoCtrl[15:8];
  319. assign CS0[0] = spi0CsCtrl[0];
  320. assign CS0[1] = spi1CsCtrl[0];
  321. assign CS0[2] = spi2CsCtrl[0];
  322. assign CS0[3] = spi3CsCtrl[0];
  323. assign CS0[4] = spi4CsCtrl[0];
  324. assign CS0[5] = spi5CsCtrl[0];
  325. assign CS0[6] = spi6CsCtrl[0];
  326. assign CS1[0] = spi0CsCtrl[1];
  327. assign CS1[1] = spi1CsCtrl[1];
  328. assign CS1[2] = spi2CsCtrl[1];
  329. assign CS1[3] = spi3CsCtrl[1];
  330. assign CS1[4] = spi4CsCtrl[1];
  331. assign CS1[5] = spi5CsCtrl[1];
  332. assign CS1[6] = spi6CsCtrl[1];
  333. assign Ss[0] = (spiMode)? SsQ[0]:SsR[0];
  334. assign Ss[1] = (spiMode)? SsQ[1]:SsR[1];
  335. assign Ss[2] = (spiMode)? SsQ[2]:SsR[2];
  336. assign Ss[3] = (spiMode)? SsQ[3]:SsR[3];
  337. assign Ss[4] = (spiMode)? SsQ[4]:SsR[4];
  338. assign Ss[5] = (spiMode)? SsQ[5]:SsR[5];
  339. assign Ss[6] = (spiMode)? SsQ[6]:SsR[6];
  340. assign Sck[0] = (spiMode)? SckQ[0]:SckR[0];
  341. assign Sck[1] = (spiMode)? SckQ[1]:SckR[1];
  342. assign Sck[2] = (spiMode)? SckQ[2]:SckR[2];
  343. assign Sck[3] = (spiMode)? SckQ[3]:SckR[3];
  344. assign Sck[4] = (spiMode)? SckQ[4]:SckR[4];
  345. assign Sck[5] = (spiMode)? SckQ[5]:SckR[5];
  346. assign Sck[6] = (spiMode)? SckQ[6]:SckR[6];
  347. assign Mosi0[0] = (spiMode)? Mosi0Q[0]:Mosi0R[0];
  348. assign Mosi0[1] = (spiMode)? Mosi0Q[1]:Mosi0R[1];
  349. assign Mosi0[2] = (spiMode)? Mosi0Q[2]:Mosi0R[2];
  350. assign Mosi0[3] = (spiMode)? Mosi0Q[3]:Mosi0R[3];
  351. assign Mosi0[4] = (spiMode)? Mosi0Q[4]:Mosi0R[4];
  352. assign Mosi0[5] = (spiMode)? Mosi0Q[5]:Mosi0R[5];
  353. assign Mosi0[6] = (spiMode)? Mosi0Q[6]:Mosi0R[6];
  354. assign valToTxFifoRead[0] = (spiMode)? valToTxQ[0]:valToTxR[0];
  355. assign valToTxFifoRead[1] = (spiMode)? valToTxQ[1]:valToTxR[1];
  356. assign valToTxFifoRead[2] = (spiMode)? valToTxQ[2]:valToTxR[2];
  357. assign valToTxFifoRead[3] = (spiMode)? valToTxQ[3]:valToTxR[3];
  358. assign valToTxFifoRead[4] = (spiMode)? valToTxQ[4]:valToTxR[4];
  359. assign valToTxFifoRead[5] = (spiMode)? valToTxQ[5]:valToTxR[5];
  360. assign valToTxFifoRead[6] = (spiMode)? valToTxQ[6]:valToTxR[6];
  361. assign valToRxFifo[0] = (spiMode)? valToRxQ[0]:valToRxR[0];
  362. assign valToRxFifo[1] = (spiMode)? valToRxQ[1]:valToRxR[1];
  363. assign valToRxFifo[2] = (spiMode)? valToRxQ[2]:valToRxR[2];
  364. assign valToRxFifo[3] = (spiMode)? valToRxQ[3]:valToRxR[3];
  365. assign valToRxFifo[4] = (spiMode)? valToRxQ[4]:valToRxR[4];
  366. assign valToRxFifo[5] = (spiMode)? valToRxQ[5]:valToRxR[5];
  367. assign valToRxFifo[6] = (spiMode)? valToRxQ[6]:valToRxR[6];
  368. assign dataToRxFifo[0] = (spiMode)? dataToRxFifoQ[0]:dataToRxFifoR[0];
  369. assign dataToRxFifo[1] = (spiMode)? dataToRxFifoQ[1]:dataToRxFifoR[1];
  370. assign dataToRxFifo[2] = (spiMode)? dataToRxFifoQ[2]:dataToRxFifoR[2];
  371. assign dataToRxFifo[3] = (spiMode)? dataToRxFifoQ[3]:dataToRxFifoR[3];
  372. assign dataToRxFifo[4] = (spiMode)? dataToRxFifoQ[4]:dataToRxFifoR[4];
  373. assign dataToRxFifo[5] = (spiMode)? dataToRxFifoQ[5]:dataToRxFifoR[5];
  374. assign dataToRxFifo[6] = (spiMode)? dataToRxFifoQ[6]:dataToRxFifoR[6];
  375. //================================================================================
  376. // CODING
  377. //================================================================================
  378. BUFG BUFG_inst (
  379. .O(gclk), // 1-bit output: Clock output
  380. .I(Clk123_i) // 1-bit input: Clock input
  381. );
  382. SmcRx SmcRx
  383. (
  384. .Clk_i (gclk),
  385. .RstN_i (!initRst),
  386. .ForceRstN_i(1'b0),
  387. .SmcD_i (SmcData_i),
  388. .SmcA_i (addr),
  389. .SmcAwe_i (SmcAwe_i),
  390. .SmcAmsN_i (SmcAmsN_i),
  391. .SmcAoe_i (SmcAoe_i),
  392. .SmcAre_i (SmcAre_i),
  393. .SmcBe_i (SmcBe_i),
  394. .Data_o (smcData),
  395. .Addr_o (smcAddr),
  396. .Val_o (smcVal)
  397. );
  398. SmcDataMux SmcDataMuxer
  399. (
  400. .Clk_i (gclk),
  401. .Rst_i (initRst),
  402. .SmcVal_i (1'b1),
  403. .SmcData_i ({SmcData_i,SmcData_i}),
  404. .SmcAddr_i ({SmcAddr_i,1'b0}),
  405. .ToRegMapVal_o (toRegMapVal),
  406. .ToRegMapData_o (toRegMapData),
  407. .ToRegMapAddr_o (toRegMapAddr),
  408. .ToFifoVal_o (toFifoVal),
  409. .ToFifoData_o (toFifoData)
  410. );
  411. RegMap #(
  412. .CmdRegWidth(32),
  413. .AddrRegWidth(12)
  414. )
  415. RegMap_inst (
  416. .Clk_i(gclk),
  417. .Rst_i(initRst),
  418. .Data_i(toRegMapData),
  419. .Addr_i(toRegMapAddr),
  420. .wrEn_i(SmcAwe_i|toRegMapVal),
  421. .rdEn_i(SmcAre_i),
  422. .SmcBe_i(SmcBe_i),
  423. .Led_o(Led_o),
  424. .AnsDataReg_o(data),
  425. //Spi0
  426. .Spi0CtrlReg_o(spi0Ctrl),
  427. .Spi0ClkReg_o(spi0Clk),
  428. .Spi0CsDelayReg_o(spi0CsDelay),
  429. .Spi0CsCtrlReg_o(spi0CsCtrl),
  430. .Spi0TxFifoCtrlReg_o(spi0TxFifoCtrl),
  431. .Spi0RxFifoCtrlReg_o(spi0RxFifoCtrl),
  432. .Spi0TxFifoReg_o(spi0TxFifo),
  433. .Spi0RxFifoReg_o(spi0RxFifo),
  434. //Spi1
  435. .Spi1CtrlReg_o(spi1Ctrl),
  436. .Spi1ClkReg_o(spi1Clk),
  437. .Spi1CsDelayReg_o(spi1CsDelay),
  438. .Spi1CsCtrlReg_o(spi1CsCtrl),
  439. .Spi1TxFifoCtrlReg_o(spi1TxFifoCtrl),
  440. .Spi1RxFifoCtrlReg_o(spi1RxFifoCtrl),
  441. .Spi1TxFifoReg_o(spi1TxFifo),
  442. .Spi1RxFifoReg_o(spi1RxFifo),
  443. //Spi2
  444. .Spi2CtrlReg_o(spi2Ctrl),
  445. .Spi2ClkReg_o(spi2Clk),
  446. .Spi2CsDelayReg_o(spi2CsDelay),
  447. .Spi2CsCtrlReg_o(spi2CsCtrl),
  448. .Spi2TxFifoCtrlReg_o(spi2TxFifoCtrl),
  449. .Spi2RxFifoCtrlReg_o(spi2RxFifoCtrl),
  450. .Spi2TxFifoReg_o(spi2TxFifo),
  451. .Spi2RxFifoReg_o(Spi2RxFifo),
  452. //Spi3
  453. .Spi3CtrlReg_o(spi3Ctrl),
  454. .Spi3ClkReg_o(spi3Clk),
  455. .Spi3CsDelayReg_o(spi3CsDelay),
  456. .Spi3CsCtrlReg_o(spi3CsCtrl),
  457. .Spi3TxFifoCtrlReg_o(spi3TxFifoCtrl),
  458. .Spi3RxFifoCtrlReg_o(spi3RxFifoCtrl),
  459. .Spi3TxFifoReg_o(Spi3TxFifo),
  460. .Spi3RxFifoReg_o(Spi3RxFifo),
  461. //Spi4
  462. .Spi4CtrlReg_o(spi4Ctrl),
  463. .Spi4ClkReg_o(spi4Clk),
  464. .Spi4CsDelayReg_o(spi4CsDelay),
  465. .Spi4CsCtrlReg_o(spi4CsCtrl),
  466. .Spi4TxFifoCtrlReg_o(spi4TxFifoCtrl),
  467. .Spi4RxFifoCtrlReg_o(spi4RxFifoCtrl),
  468. .Spi4TxFifoReg_o(Spi4TxFifo),
  469. .Spi4RxFifoReg_o(Spi4RxFifo),
  470. //Spi5
  471. .Spi5CtrlReg_o(spi5Ctrl),
  472. .Spi5ClkReg_o(spi5Clk),
  473. .Spi5CsDelayReg_o(spi5CsDelay),
  474. .Spi5CsCtrlReg_o(spi5CsCtrl),
  475. .Spi5TxFifoCtrlReg_o(spi5TxFifoCtrl),
  476. .Spi5RxFifoCtrlReg_o(spi5RxFifoCtrl),
  477. .Spi5TxFifoReg_o(Spi5TxFifo),
  478. .Spi5RxFifoReg_o(Spi5RxFifo),
  479. //Spi6
  480. .Spi6CtrlReg_o(spi6Ctrl),
  481. .Spi6ClkReg_o(spi6Clk),
  482. .Spi6CsDelayReg_o(spi6CsDelay),
  483. .Spi6CsCtrlReg_o(spi6CsCtrl),
  484. .Spi6TxFifoCtrlReg_o(spi6TxFifoCtrl),
  485. .Spi6RxFifoCtrlReg_o(spi6RxFifoCtrl),
  486. .Spi6TxFifoReg_o(Spi6TxFifo),
  487. .Spi6RxFifoReg_o(Spi6RxFifo),
  488. .SpiTxRxEnReg_o(SpiTxRxEn),
  489. .GPIOAReg_o(GPIOA)
  490. );
  491. MmcmWrapper MainMmcm
  492. (
  493. .Clk_i (gclk),
  494. .Rst_i (initRst),
  495. .SpiCLk_o (spiClkBus)
  496. );
  497. genvar i;
  498. generate
  499. for (i = 0; i < SpiNum; i = i + 1) begin: SpiGen
  500. RstSync SpiRstSync
  501. (
  502. .Clk_i (spiClkBus[i]),
  503. .Rst_i (initRst),
  504. .Rst_o (spiSyncRst[i])
  505. );
  506. DataFifoWrapper DataFifoWrapper
  507. (
  508. .WrClk_i (gclk),
  509. .RdClk_i (spiClkBus[i]),
  510. // .Rst_i (initRst | fifoRxRst[i]),
  511. .Rst_i (spiSyncRst[i]),
  512. .SmcAre_i (SmcAre_i),
  513. .SmcAwe_i (SmcAwe_i),
  514. .ToFifoVal_i (toFifoVal[i]),
  515. .ToFifoRxData_i (dataToRxFifo[i]),
  516. .ToFifoRxWriteVal_i (valToRxFifo[i]),
  517. .ToFifoTxReadVal_i (valToTxFifoRead[i]),
  518. .ToFifoData_i (toFifoData[32*i+:32]),
  519. .ToSpiVal_o (toSpiVal[i]),
  520. .ToSpiData_o (toSpiData[i])
  521. );
  522. SPIm SPIm_inst (
  523. .Clk_i(spiClkBus[i]),
  524. .Start_i(ten[i]),
  525. .Rst_i(initRst| spiMode[i]),
  526. .SPIdata(toSpiData[i]),
  527. .Sck_o(SckR[i]),
  528. .Ss_o(SsR[i]),
  529. .Mosi0_o(Mosi0R[i]),
  530. .WidthSel_i(widthSel[i]),
  531. .PulsePol_i(CPOL[i]),
  532. .CPHA_i(CPHA[i]),
  533. .EndianSel_i(endianSel[i]),
  534. .LAG_i(lag[i]),
  535. .LEAD_i(leadx[i]),
  536. .Stop_i(stopDelay[i]),
  537. .SELST_i(selSt[i]),
  538. .Val_o(valToTxR[i])
  539. );
  540. SPIs SPIs_inst (
  541. .Clk_i(spiClkBus[i]),
  542. .Rst_i(initRst|SpiRst_o[i]| spiMode[i]),
  543. .Sck_i(SckR[i]),
  544. .Ss_i(SsR[i]),
  545. .Mosi0_i(Mosi0R[i]),
  546. .WidthSel_i(widthSel[i]),
  547. .SELST_i(selSt[i]),
  548. .DataToRxFifo_o(dataToRxFifoR[i]),
  549. .Val_o(valToRxR[i])
  550. );
  551. QuadSPIm QuadSPIm_inst (
  552. .Clk_i(spiClkBus[i]),
  553. .Start_i(ten[i]),
  554. .Rst_i(initRst| !spiMode[i]),
  555. .SpiDataVal_i (toSpiVal),
  556. // .SPIdata(32'h2aaa00aa),
  557. .SPIdata(toSpiData[i]),
  558. .Sck_o(Sck[i]),
  559. .Ss_o(Ss[i]),
  560. .Mosi0_i(Mosi0[i]),
  561. .Mosi1_i(Mosi1[i]),
  562. .Mosi2_i(Mosi2[i]),
  563. .Mosi3_i(Mosi3[i]),
  564. .WidthSel_i(widthSel[i]),
  565. .PulsePol_i(CPOL[i]),
  566. .CPHA_i(CPHA[i]),
  567. .EndianSel_i(endianSel[i]),
  568. .LAG_i(lag[i]),
  569. .LEAD_i(leadx[i]),
  570. .Stop_i(stopDelay[i]),
  571. .SELST_i(selSt[i]),
  572. .Val_o(valToTxQ[i])
  573. );
  574. QuadSPIs QuadSPIs_inst (
  575. .Clk_i(spiClkBus[i]),
  576. .Rst_i(initRst|SpiRst_o[i]| !spiMode[i]),
  577. .Sck_i(Sck[i]),
  578. .Ss_i(Ss[i]),
  579. .Mosi0_i(Mosi0[i]),
  580. .Mosi1_i(Mosi1[i]),
  581. .Mosi2_i(Mosi2[i]),
  582. .Mosi3_i(Mosi3[i]),
  583. .WidthSel_i(widthSel[i]),
  584. .SELST_i(selSt[i]),
  585. .DataToRxFifo_o(dataToRxFifoQ[i]),
  586. .Val_o(valToRxQ[i])
  587. );
  588. end
  589. endgenerate
  590. InitRst InitRst_inst (
  591. .clk_i(gclk),
  592. .signal_o(initRst)
  593. );
  594. endmodule