S5443_3Top.v 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812
  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. #(
  23. parameter CMD_REG_WIDTH = 32,
  24. parameter ADDR_REG_WIDTH = 12,
  25. parameter STAGES = 3,
  26. parameter SPI_NUM = 7
  27. )
  28. (
  29. input Clk123_i,
  30. input [ADDR_REG_WIDTH-2:0] SmcAddr_i,
  31. inout [CMD_REG_WIDTH/2-1:0] SmcData_io,
  32. input SmcAwe_i,
  33. input SmcAmsN_i,
  34. input SmcAre_i,
  35. input [1:0] SmcBe_i,
  36. input SmcAoe_i,
  37. input [SPI_NUM-1:0] Ld_i,
  38. output Led_o,
  39. output [SPI_NUM-1:0] Mosi0_o,
  40. inout [SPI_NUM-1:0] Mosi1_io, //inout: when RSPI mode, input; when QSPI mode output;
  41. output [SPI_NUM-1:0] Mosi2_o,
  42. output [SPI_NUM-2:0] Mosi3_o,
  43. output [SPI_NUM-1:0] Ss_o,
  44. output [SPI_NUM-1:0] SsFlash_o,
  45. output [SPI_NUM-1:0] Sck_o,
  46. output [SPI_NUM-1:0] SpiRst_o,
  47. output [SPI_NUM-1:0] SpiDir_o,
  48. output LoCsReg_o,
  49. output LD_o
  50. );
  51. //================================================================================
  52. // REG/WIRE
  53. //================================================================================
  54. wire clk80;
  55. wire [ADDR_REG_WIDTH-1:0] addrExt;
  56. wire [SPI_NUM-1:0] mosi3;
  57. wire [SPI_NUM-1:0] txEn;
  58. wire initRst;
  59. wire gclk;
  60. wire [0:7] baudRate [SPI_NUM-1:0];
  61. wire [0:31] txFifoCtrlReg [SPI_NUM-1:0];
  62. wire [0:31] rxFifoCtrlReg [SPI_NUM-1:0];
  63. //InitRst
  64. wire rst80;
  65. //SPI0
  66. wire [CMD_REG_WIDTH-1:0] spi0Ctrl;
  67. wire [CMD_REG_WIDTH-1:0] spi0Clk;
  68. wire [CMD_REG_WIDTH-1:0] spi0CsDelay;
  69. wire [CMD_REG_WIDTH-1:0] spi0CsCtrl;
  70. wire [CMD_REG_WIDTH-1:0] spi0TxFifoCtrl;
  71. wire [CMD_REG_WIDTH-1:0] spi0RxFifoCtrl;
  72. wire [CMD_REG_WIDTH-1:0] spi0TxFifo;
  73. wire [CMD_REG_WIDTH-1:0] spi0RxFifo;
  74. wire [CMD_REG_WIDTH-1:0] spi0TxFifoCtrlReg;
  75. wire [CMD_REG_WIDTH-1:0] spi0RxFifoCtrlReg;
  76. wire [CMD_REG_WIDTH-1:0] spi0CtrlRR;
  77. wire [CMD_REG_WIDTH-1:0] spi0ClkRR;
  78. wire [CMD_REG_WIDTH-1:0] spi0CsDelayRR;
  79. wire [CMD_REG_WIDTH-1:0] spi0CsCtrlRR;
  80. wire [CMD_REG_WIDTH-1:0] spi0TxFifoCtrlRR;
  81. wire [CMD_REG_WIDTH-1:0] spi0RxFifoCtrlRR;
  82. //SPI1
  83. wire [CMD_REG_WIDTH-1:0] spi1Ctrl;
  84. wire [CMD_REG_WIDTH-1:0] spi1Clk;
  85. wire [CMD_REG_WIDTH-1:0] spi1CsDelay;
  86. wire [CMD_REG_WIDTH-1:0] spi1CsCtrl;
  87. wire [CMD_REG_WIDTH-1:0] spi1TxFifoCtrl;
  88. wire [CMD_REG_WIDTH-1:0] spi1RxFifoCtrl;
  89. wire [CMD_REG_WIDTH-1:0] spi1TxFifoCtrlReg;
  90. wire [CMD_REG_WIDTH-1:0] spi1RxFifoCtrlReg;
  91. wire [CMD_REG_WIDTH-1:0] spi1CtrlRR;
  92. wire [CMD_REG_WIDTH-1:0] spi1CsDelayRR;
  93. wire [CMD_REG_WIDTH-1:0] spi1CsCtrlRR;
  94. wire [CMD_REG_WIDTH-1:0] spi1TxFifoCtrlRR;
  95. wire [CMD_REG_WIDTH-1:0] spi1RxFifoCtrlRR;
  96. //SPI2
  97. wire [CMD_REG_WIDTH-1:0] spi2Ctrl;
  98. wire [CMD_REG_WIDTH-1:0] spi2Clk;
  99. wire [CMD_REG_WIDTH-1:0] spi2CsDelay;
  100. wire [CMD_REG_WIDTH-1:0] spi2CsCtrl;
  101. wire [CMD_REG_WIDTH-1:0] spi2TxFifoCtrl;
  102. wire [CMD_REG_WIDTH-1:0] spi2RxFifoCtrl;
  103. wire [CMD_REG_WIDTH-1:0] spi2TxFifoCtrlReg;
  104. wire [CMD_REG_WIDTH-1:0] spi2RxFifoCtrlReg;
  105. wire [CMD_REG_WIDTH-1:0] spi2CtrlRR;
  106. wire [CMD_REG_WIDTH-1:0] spi2CsDelayRR;
  107. wire [CMD_REG_WIDTH-1:0] spi2CsCtrlRR;
  108. wire [CMD_REG_WIDTH-1:0] spi2TxFifoCtrlRR;
  109. wire [CMD_REG_WIDTH-1:0] spi2RxFifoCtrlRR;
  110. //SPI3
  111. wire [CMD_REG_WIDTH-1:0] spi3Ctrl;
  112. wire [CMD_REG_WIDTH-1:0] spi3Clk;
  113. wire [CMD_REG_WIDTH-1:0] spi3CsDelay;
  114. wire [CMD_REG_WIDTH-1:0] spi3CsCtrl;
  115. wire [CMD_REG_WIDTH-1:0] spi3TxFifoCtrl;
  116. wire [CMD_REG_WIDTH-1:0] spi3RxFifoCtrl;
  117. wire [CMD_REG_WIDTH-1:0] spi3TxFifoCtrlReg;
  118. wire [CMD_REG_WIDTH-1:0] spi3RxFifoCtrlReg;
  119. wire [CMD_REG_WIDTH-1:0] spi3CtrlRR;
  120. wire [CMD_REG_WIDTH-1:0] spi3ClkRR;
  121. wire [CMD_REG_WIDTH-1:0] spi3CsDelayRR;
  122. wire [CMD_REG_WIDTH-1:0] spi3CsCtrlRR;
  123. wire [CMD_REG_WIDTH-1:0] spi3TxFifoCtrlRR;
  124. wire [CMD_REG_WIDTH-1:0] spi3RxFifoCtrlRR;
  125. //SPI4
  126. wire [CMD_REG_WIDTH-1:0] spi4Ctrl;
  127. wire [CMD_REG_WIDTH-1:0] spi4Clk;
  128. wire [CMD_REG_WIDTH-1:0] spi4CsDelay;
  129. wire [CMD_REG_WIDTH-1:0] spi4CsCtrl;
  130. wire [CMD_REG_WIDTH-1:0] spi4TxFifoCtrl;
  131. wire [CMD_REG_WIDTH-1:0] spi4RxFifoCtrl;
  132. wire [CMD_REG_WIDTH-1:0] spi4TxFifoCtrlReg;
  133. wire [CMD_REG_WIDTH-1:0] spi4RxFifoCtrlReg;
  134. wire [CMD_REG_WIDTH-1:0] spi4CtrlRR;
  135. wire [CMD_REG_WIDTH-1:0] spi4ClkRR;
  136. wire [CMD_REG_WIDTH-1:0] spi4CsDelayRR;
  137. wire [CMD_REG_WIDTH-1:0] spi4CsCtrlRR;
  138. wire [CMD_REG_WIDTH-1:0] spi4TxFifoCtrlRR;
  139. wire [CMD_REG_WIDTH-1:0] spi4RxFifoCtrlRR;
  140. //SPI5
  141. wire [CMD_REG_WIDTH-1:0] spi5Ctrl;
  142. wire [CMD_REG_WIDTH-1:0] spi5Clk;
  143. wire [CMD_REG_WIDTH-1:0] spi5CsDelay;
  144. wire [CMD_REG_WIDTH-1:0] spi5CsCtrl;
  145. wire [CMD_REG_WIDTH-1:0] spi5TxFifoCtrl;
  146. wire [CMD_REG_WIDTH-1:0] spi5RxFifoCtrl;
  147. wire [CMD_REG_WIDTH-1:0] spi5TxFifoCtrlReg;
  148. wire [CMD_REG_WIDTH-1:0] spi5RxFifoCtrlReg;
  149. wire [CMD_REG_WIDTH-1:0] spi5CtrlRR;
  150. wire [CMD_REG_WIDTH-1:0] spi5ClkRR;
  151. wire [CMD_REG_WIDTH-1:0] spi5CsDelayRR;
  152. wire [CMD_REG_WIDTH-1:0] spi5CsCtrlRR;
  153. wire [CMD_REG_WIDTH-1:0] spi5TxFifoCtrlRR;
  154. wire [CMD_REG_WIDTH-1:0] spi5RxFifoCtrlRR;
  155. //SPI6
  156. wire [CMD_REG_WIDTH-1:0] spi6Ctrl;
  157. wire [CMD_REG_WIDTH-1:0] spi6Clk;
  158. wire [CMD_REG_WIDTH-1:0] spi6CsDelay;
  159. wire [CMD_REG_WIDTH-1:0] spi6CsCtrl;
  160. wire [CMD_REG_WIDTH-1:0] spi6TxFifoCtrl;
  161. wire [CMD_REG_WIDTH-1:0] spi6RxFifoCtrl;
  162. wire [CMD_REG_WIDTH-1:0] spi6TxFifoCtrlReg;
  163. wire [CMD_REG_WIDTH-1:0] spi6RxFifoCtrlReg;
  164. wire [CMD_REG_WIDTH-1:0] spi6CtrlRR;
  165. wire [CMD_REG_WIDTH-1:0] spi6ClkRR;
  166. wire [CMD_REG_WIDTH-1:0] spi6CsDelayRR;
  167. wire [CMD_REG_WIDTH-1:0] spi6CsCtrlRR;
  168. wire [CMD_REG_WIDTH-1:0] spi6TxFifoCtrlRR;
  169. wire [CMD_REG_WIDTH-1:0] spi6RxFifoCtrlRR;
  170. wire [CMD_REG_WIDTH-1:0] spiTxRxEn;
  171. wire [CMD_REG_WIDTH-1:0] spiTxRxEnSet;
  172. wire [CMD_REG_WIDTH-1:0] spiTxRxEnClr;
  173. wire [CMD_REG_WIDTH-1:0] Gpio;
  174. wire [ADDR_REG_WIDTH-1:0] toRegMapAddr;
  175. wire [CMD_REG_WIDTH/2-1:0] toRegMapData;
  176. wire toRegMapVal;
  177. wire [SPI_NUM-1:0] toFifoVal;
  178. wire [CMD_REG_WIDTH*SPI_NUM-1:0] toFifoData;
  179. wire [SPI_NUM-1:0] toSpiVal;
  180. wire [0:31] toSpiData [SPI_NUM-1:0];
  181. wire [0:1] widthSel [SPI_NUM-1:0];
  182. wire [SPI_NUM-1:0] clockPol;
  183. wire [SPI_NUM-1:0] clockPhase;
  184. wire [SPI_NUM-1:0] endianSel;
  185. wire [SPI_NUM-1:0] selSt;
  186. wire [SPI_NUM-1:0] spiMode;
  187. wire [0:5] stopDelay [SPI_NUM-1:0];
  188. wire [SPI_NUM-1:0] leadx;
  189. wire [SPI_NUM-1:0] lag;
  190. wire [SPI_NUM-1:0] fifoRxRst;
  191. wire [SPI_NUM-1:0] fifoTxRst;
  192. wire [SPI_NUM-1:0] fifoRxRstRdPtr;
  193. wire [SPI_NUM-1:0] fifoTxRstWrPtr;
  194. wire [0:7] wordCntTx [SPI_NUM-1:0];
  195. wire [0:7] wordCntRx [SPI_NUM-1:0];
  196. wire [SPI_NUM-1:0] chipSelFpga;
  197. wire [SPI_NUM-1:0] chipSelFlash;
  198. wire [SPI_NUM-1:0] assel;
  199. wire [SPI_NUM-1:0] spiClkBus;
  200. //RxFifo
  201. wire [0:31] dataFromRxFifo [SPI_NUM-1:0];
  202. wire [CMD_REG_WIDTH/2-1:0] muxedData;
  203. wire smcValComb;
  204. wire [CMD_REG_WIDTH/2-1:0] ansData;
  205. wire requestToFifo;
  206. wire [SPI_NUM-1:0] spiEn;
  207. wire [SPI_NUM-1:0] ldReg;
  208. wire [SPI_NUM-1:0] ssW;
  209. //================================================================================
  210. // ASSIGNMENTS
  211. //================================================================================
  212. assign addrExt = {SmcAddr_i, 1'b0};
  213. assign smcValComb = (!SmcAmsN_i && !SmcAwe_i) ? 1'b1 : 1'b0;
  214. assign txEn = spiTxRxEn[6:0];
  215. assign Mosi3_o[0] = mosi3[0];
  216. assign Mosi3_o[1] = mosi3[1];
  217. assign Mosi3_o[2] = mosi3[2];
  218. assign Mosi3_o[3] = mosi3[3];
  219. assign Mosi3_o[4] = mosi3[4];
  220. // assign Mosi3_o[5] = mosi3[5];
  221. assign Mosi3_o[5] = mosi3[6];// Mosi6
  222. assign Ss_o = ssW;
  223. assign LoCsReg_o = ssW[5];
  224. assign widthSel[0] = spi0CtrlRR[6:5];
  225. assign widthSel[1] = spi1CtrlRR[6:5];
  226. assign widthSel[2] = spi2CtrlRR[6:5];
  227. assign widthSel[3] = spi3CtrlRR[6:5];
  228. assign widthSel[4] = spi4CtrlRR[6:5];
  229. assign widthSel[5] = spi5CtrlRR[6:5];
  230. assign widthSel[6] = spi6CtrlRR[6:5];
  231. assign spiEn[0] = spi0CtrlRR[0];
  232. assign spiEn[1] = spi1CtrlRR[0];
  233. assign spiEn[2] = spi2CtrlRR[0];
  234. assign spiEn[3] = spi3CtrlRR[0];
  235. assign spiEn[4] = spi4CtrlRR[0];
  236. assign spiEn[5] = spi5CtrlRR[0];
  237. assign spiEn[6] = spi6CtrlRR[0];
  238. assign spiMode[0] = spi0CtrlRR[7];
  239. assign spiMode[1] = spi1CtrlRR[7];
  240. assign spiMode[2] = spi2CtrlRR[7];
  241. assign spiMode[3] = spi3CtrlRR[7];
  242. assign spiMode[4] = spi4CtrlRR[7];
  243. assign spiMode[5] = spi5CtrlRR[7];
  244. assign spiMode[6] = spi6CtrlRR[7];
  245. assign clockPol[0] = spi0CtrlRR[2];
  246. assign clockPol[1] = spi1CtrlRR[2];
  247. assign clockPol[2] = spi2CtrlRR[2];
  248. assign clockPol[3] = spi3CtrlRR[2];
  249. assign clockPol[4] = spi4CtrlRR[2];
  250. assign clockPol[5] = spi5CtrlRR[2];
  251. assign clockPol[6] = spi6CtrlRR[2];
  252. assign clockPhase[0] = spi0CtrlRR[1];
  253. assign clockPhase[1] = spi1CtrlRR[1];
  254. assign clockPhase[2] = spi2CtrlRR[1];
  255. assign clockPhase[3] = spi3CtrlRR[1];
  256. assign clockPhase[4] = spi4CtrlRR[1];
  257. assign clockPhase[5] = spi5CtrlRR[1];
  258. assign clockPhase[6] = spi6CtrlRR[1];
  259. assign endianSel[0] = spi0CtrlRR[8];
  260. assign endianSel[1] = spi1CtrlRR[8];
  261. assign endianSel[2] = spi2CtrlRR[8];
  262. assign endianSel[3] = spi3CtrlRR[8];
  263. assign endianSel[4] = spi4CtrlRR[8];
  264. assign endianSel[5] = spi5CtrlRR[8];
  265. assign endianSel[6] = spi6CtrlRR[8];
  266. assign selSt[0] = spi0CtrlRR[4];
  267. assign selSt[1] = spi1CtrlRR[4];
  268. assign selSt[2] = spi2CtrlRR[4];
  269. assign selSt[3] = spi3CtrlRR[4];
  270. assign selSt[4] = spi4CtrlRR[4];
  271. assign selSt[5] = spi5CtrlRR[4];
  272. assign selSt[6] = spi6CtrlRR[4];
  273. assign assel[0] = spi0CtrlRR[3];
  274. assign assel[1] = spi1CtrlRR[3];
  275. assign assel[2] = spi2CtrlRR[3];
  276. assign assel[3] = spi3CtrlRR[3];
  277. assign assel[4] = spi4CtrlRR[3];
  278. assign assel[5] = spi5CtrlRR[3];
  279. assign assel[6] = spi6CtrlRR[3];
  280. assign stopDelay[0] = spi0CsDelayRR[7:2];
  281. assign stopDelay[1] = spi1CsDelayRR[7:2];
  282. assign stopDelay[2] = spi2CsDelayRR[7:2];
  283. assign stopDelay[3] = spi3CsDelayRR[7:2];
  284. assign stopDelay[4] = spi4CsDelayRR[7:2];
  285. assign stopDelay[5] = spi5CsDelayRR[7:2];
  286. assign stopDelay[6] = spi6CsDelayRR[7:2];
  287. assign leadx[0] = spi0CsDelayRR[1];
  288. assign leadx[1] = spi1CsDelayRR[1];
  289. assign leadx[2] = spi2CsDelayRR[1];
  290. assign leadx[3] = spi3CsDelayRR[1];
  291. assign leadx[4] = spi4CsDelayRR[1];
  292. assign leadx[5] = spi5CsDelayRR[1];
  293. assign leadx[6] = spi6CsDelayRR[1];
  294. assign lag[0] = spi0CsDelayRR[0];
  295. assign lag[1] = spi1CsDelayRR[0];
  296. assign lag[2] = spi2CsDelayRR[0];
  297. assign lag[3] = spi3CsDelayRR[0];
  298. assign lag[4] = spi4CsDelayRR[0];
  299. assign lag[5] = spi5CsDelayRR[0];
  300. assign lag[6] = spi6CsDelayRR[0];
  301. assign baudRate[0] = spi0Clk[7:0];
  302. assign baudRate[1] = spi1Clk[7:0];
  303. assign baudRate[2] = spi2Clk[7:0];
  304. assign baudRate[3] = spi3Clk[7:0];
  305. assign baudRate[4] = spi4Clk[7:0];
  306. assign baudRate[5] = spi5Clk[7:0];
  307. assign baudRate[6] = spi6Clk[7:0];
  308. assign SpiRst_o[0] = Gpio[0];
  309. assign SpiRst_o[1] = Gpio[1];
  310. assign SpiRst_o[2] = Gpio[2];
  311. assign SpiRst_o[3] = Gpio[3];
  312. assign SpiRst_o[4] = Gpio[4];
  313. assign SpiRst_o[5] = Gpio[5];
  314. assign SpiRst_o[6] = Gpio[6];
  315. assign fifoRxRstRdPtr[0] = spi0RxFifoCtrl[0];
  316. assign fifoRxRstRdPtr[1] = spi1RxFifoCtrl[0];
  317. assign fifoRxRstRdPtr[2] = spi2RxFifoCtrl[0];
  318. assign fifoRxRstRdPtr[3] = spi3RxFifoCtrl[0];
  319. assign fifoRxRstRdPtr[4] = spi4RxFifoCtrl[0];
  320. assign fifoRxRstRdPtr[5] = spi5RxFifoCtrl[0];
  321. assign fifoRxRstRdPtr[6] = spi6RxFifoCtrl[0];
  322. assign fifoRxRst[0] = spi0RxFifoCtrlRR[0];
  323. assign fifoRxRst[1] = spi1RxFifoCtrlRR[0];
  324. assign fifoRxRst[2] = spi2RxFifoCtrlRR[0];
  325. assign fifoRxRst[3] = spi3RxFifoCtrlRR[0];
  326. assign fifoRxRst[4] = spi4RxFifoCtrlRR[0];
  327. assign fifoRxRst[5] = spi5RxFifoCtrlRR[0];
  328. assign fifoRxRst[6] = spi6RxFifoCtrlRR[0];
  329. assign fifoTxRstWrPtr[0] = spi0TxFifoCtrl[0];
  330. assign fifoTxRstWrPtr[1] = spi1TxFifoCtrl[0];
  331. assign fifoTxRstWrPtr[2] = spi2TxFifoCtrl[0];
  332. assign fifoTxRstWrPtr[3] = spi3TxFifoCtrl[0];
  333. assign fifoTxRstWrPtr[4] = spi4TxFifoCtrl[0];
  334. assign fifoTxRstWrPtr[5] = spi5TxFifoCtrl[0];
  335. assign fifoTxRstWrPtr[6] = spi6TxFifoCtrl[0];
  336. assign fifoTxRst[0] = spi0TxFifoCtrlRR[0];
  337. assign fifoTxRst[1] = spi1TxFifoCtrlRR[0];
  338. assign fifoTxRst[2] = spi2TxFifoCtrlRR[0];
  339. assign fifoTxRst[3] = spi3TxFifoCtrlRR[0];
  340. assign fifoTxRst[4] = spi4TxFifoCtrlRR[0];
  341. assign fifoTxRst[5] = spi5TxFifoCtrlRR[0];
  342. assign fifoTxRst[6] = spi6TxFifoCtrlRR[0];
  343. assign LD_o = ldReg[0]&ldReg[1]&ldReg[2]&ldReg[3]&ldReg[4]&ldReg[5]&ldReg[6];
  344. assign wordCntRx[0] = spi0RxFifoCtrlRR[15:8];
  345. assign wordCntRx[1] = spi1RxFifoCtrlRR[15:8];
  346. assign wordCntRx[2] = spi2RxFifoCtrlRR[15:8];
  347. assign wordCntRx[3] = spi3RxFifoCtrlRR[15:8];
  348. assign wordCntRx[4] = spi4RxFifoCtrlRR[15:8];
  349. assign wordCntRx[5] = spi5RxFifoCtrlRR[15:8];
  350. assign wordCntRx[6] = spi6RxFifoCtrlRR[15:8];
  351. assign wordCntTx[0] = spi0TxFifoCtrlRR[15:8];
  352. assign wordCntTx[1] = spi1TxFifoCtrlRR[15:8];
  353. assign wordCntTx[2] = spi2TxFifoCtrlRR[15:8];
  354. assign wordCntTx[3] = spi3TxFifoCtrlRR[15:8];
  355. assign wordCntTx[4] = spi4TxFifoCtrlRR[15:8];
  356. assign wordCntTx[5] = spi5TxFifoCtrlRR[15:8];
  357. assign wordCntTx[6] = spi6TxFifoCtrlRR[15:8];
  358. assign chipSelFpga[0] = spi0CsCtrlRR[0];
  359. assign chipSelFpga[1] = spi1CsCtrlRR[0];
  360. assign chipSelFpga[2] = spi2CsCtrlRR[0];
  361. assign chipSelFpga[3] = spi3CsCtrlRR[0];
  362. assign chipSelFpga[4] = spi4CsCtrlRR[0];
  363. assign chipSelFpga[5] = spi5CsCtrlRR[0];
  364. assign chipSelFpga[6] = spi6CsCtrlRR[0];
  365. assign chipSelFlash[0] = spi0CsCtrlRR[1];
  366. assign chipSelFlash[1] = spi1CsCtrlRR[1];
  367. assign chipSelFlash[2] = spi2CsCtrlRR[1];
  368. assign chipSelFlash[3] = spi3CsCtrlRR[1];
  369. assign chipSelFlash[4] = spi4CsCtrlRR[1];
  370. assign chipSelFlash[5] = spi5CsCtrlRR[1];
  371. assign chipSelFlash[6] = spi6CsCtrlRR[1];
  372. assign SpiDir_o[0] = (spiMode[0]) ? 1'b1 : 1'b0 ;
  373. assign SpiDir_o[1] = (spiMode[1]) ? 1'b1 : 1'b0 ;
  374. assign SpiDir_o[2] = (spiMode[2]) ? 1'b1 : 1'b0 ;
  375. assign SpiDir_o[3] = (spiMode[3]) ? 1'b1 : 1'b0 ;
  376. assign SpiDir_o[4] = (spiMode[4]) ? 1'b1 : 1'b0 ;
  377. assign SpiDir_o[5] = 1'b1;
  378. assign SpiDir_o[6] = (spiMode[6]) ? 1'b1 : 1'b0 ;
  379. assign spi0TxFifoCtrlReg = txFifoCtrlReg[0];
  380. assign spi1TxFifoCtrlReg = txFifoCtrlReg[1];
  381. assign spi2TxFifoCtrlReg = txFifoCtrlReg[2];
  382. assign spi3TxFifoCtrlReg = txFifoCtrlReg[3];
  383. assign spi4TxFifoCtrlReg = txFifoCtrlReg[4];
  384. assign spi5TxFifoCtrlReg = txFifoCtrlReg[5];
  385. assign spi6TxFifoCtrlReg = txFifoCtrlReg[6];
  386. assign spi0RxFifoCtrlReg = rxFifoCtrlReg[0];
  387. assign spi1RxFifoCtrlReg = rxFifoCtrlReg[1];
  388. assign spi2RxFifoCtrlReg = rxFifoCtrlReg[2];
  389. assign spi3RxFifoCtrlReg = rxFifoCtrlReg[3];
  390. assign spi4RxFifoCtrlReg = rxFifoCtrlReg[4];
  391. assign spi5RxFifoCtrlReg = rxFifoCtrlReg[5];
  392. assign spi6RxFifoCtrlReg = rxFifoCtrlReg[6];
  393. assign SmcData_io = (!SmcAre_i && !SmcAoe_i) ? muxedData : 16'bz;
  394. //================================================================================
  395. // CODING
  396. //================================================================================
  397. SmcAnsMux SmcAnsMux
  398. (
  399. .Clk_i (gclk),
  400. .Addr_i (addrExt),
  401. .ToRegMapAddr_i (toRegMapAddr),
  402. .RequestToFifo_i (requestToFifo),
  403. .FifoRxRst_i (fifoRxRstRdPtr[0]),
  404. .SmcAre_i (SmcAre_i),
  405. .DataFromRegMap_i (ansData),
  406. .DataFromRxFifo1_i (dataFromRxFifo[0]),
  407. .DataFromRxFifo2_i (dataFromRxFifo[1]),
  408. .DataFromRxFifo3_i (dataFromRxFifo[2]),
  409. .DataFromRxFifo4_i (dataFromRxFifo[3]),
  410. .DataFromRxFifo5_i (dataFromRxFifo[4]),
  411. .DataFromRxFifo6_i (dataFromRxFifo[5]),
  412. .DataFromRxFifo7_i (dataFromRxFifo[6]),
  413. .AnsData_o (muxedData)
  414. );
  415. BUFG BUFG_inst (
  416. .O (gclk), // 1-bit output: Clock output
  417. .I (Clk123_i) // 1-bit input: Clock input
  418. );
  419. SmcInDataMux SmcInDataMux
  420. (
  421. .Clk_i (gclk),
  422. .Rst_i (initRst),
  423. .SmcVal_i (smcValComb),
  424. .SmcData_i (SmcData_io),
  425. .SmcAddr_i (addrExt),
  426. .RequestToFifo_o (requestToFifo),
  427. .ToRegMapVal_o (toRegMapVal),
  428. .ToRegMapData_o (toRegMapData),
  429. .ToRegMapAddr_o (toRegMapAddr),
  430. .ToFifoVal_o (toFifoVal),
  431. .ToFifoData_o (toFifoData)
  432. );
  433. CDC #(
  434. .WIDTH (CMD_REG_WIDTH),
  435. .STAGES (STAGES),
  436. .SPI_NUM (SPI_NUM)
  437. ) synchronizer(
  438. .ClkFast_i (gclk),
  439. .ClkSlow_i (spiClkBus),
  440. .Spi0Ctrl_i (spi0Ctrl),
  441. .Spi0CsCtrl_i (spi0CsCtrl),
  442. .Spi0CsDelay_i (spi0CsDelay),
  443. .Spi0TxFifoCtrl_i (spi0TxFifoCtrl),
  444. .Spi0RxFifoCtrl_i (spi0RxFifoCtrl),
  445. .Spi1Ctrl_i (spi1Ctrl),
  446. .Spi1CsCtrl_i (spi1CsCtrl),
  447. .Spi1CsDelay_i (spi1CsDelay),
  448. .Spi1TxFifoCtrl_i (spi1TxFifoCtrl),
  449. .Spi1RxFifoCtrl_i (spi1RxFifoCtrl),
  450. .Spi2Ctrl_i (spi2Ctrl),
  451. .Spi2CsCtrl_i (spi2CsCtrl),
  452. .Spi2CsDelay_i (spi2CsDelay),
  453. .Spi2TxFifoCtrl_i (spi2TxFifoCtrl),
  454. .Spi2RxFifoCtrl_i (spi2RxFifoCtrl),
  455. .Spi3Ctrl_i (spi3Ctrl),
  456. .Spi3CsCtrl_i (spi3CsCtrl),
  457. .Spi3CsDelay_i (spi3CsDelay),
  458. .Spi3TxFifoCtrl_i (spi3TxFifoCtrl),
  459. .Spi3RxFifoCtrl_i (spi3RxFifoCtrl),
  460. .Spi4Ctrl_i (spi4Ctrl),
  461. .Spi4CsCtrl_i (spi4CsCtrl),
  462. .Spi4CsDelay_i (spi4CsDelay),
  463. .Spi4TxFifoCtrl_i (spi4TxFifoCtrl),
  464. .Spi4RxFifoCtrl_i (spi4RxFifoCtrl),
  465. .Spi5Ctrl_i (spi5Ctrl),
  466. .Spi5CsCtrl_i (spi5CsCtrl),
  467. .Spi5CsDelay_i (spi5CsDelay),
  468. .Spi5TxFifoCtrl_i (spi5TxFifoCtrl),
  469. .Spi5RxFifoCtrl_i (spi5RxFifoCtrl),
  470. .Spi6Ctrl_i (spi6Ctrl),
  471. .Spi6CsCtrl_i (spi6CsCtrl),
  472. .Spi6CsDelay_i (spi6CsDelay),
  473. .Spi6TxFifoCtrl_i (spi6TxFifoCtrl),
  474. .Spi6RxFifoCtrl_i (spi6RxFifoCtrl),
  475. .Spi0Ctrl_o (spi0CtrlRR),
  476. .Spi0CsCtrl_o (spi0CsCtrlRR),
  477. .Spi0CsDelay_o (spi0CsDelayRR),
  478. .Spi0TxFifoCtrl_o (spi0TxFifoCtrlRR),
  479. .Spi0RxFifoCtrl_o (spi0RxFifoCtrlRR),
  480. .Spi1Ctrl_o (spi1CtrlRR),
  481. .Spi1CsCtrl_o (spi1CsCtrlRR),
  482. .Spi1CsDelay_o (spi1CsDelayRR),
  483. .Spi1TxFifoCtrl_o (spi1TxFifoCtrlRR),
  484. .Spi1RxFifoCtrl_o (spi1RxFifoCtrlRR),
  485. .Spi2Ctrl_o (spi2CtrlRR),
  486. .Spi2CsCtrl_o (spi2CsCtrlRR),
  487. .Spi2CsDelay_o (spi2CsDelayRR),
  488. .Spi2TxFifoCtrl_o (spi2TxFifoCtrlRR),
  489. .Spi2RxFifoCtrl_o (spi2RxFifoCtrlRR),
  490. .Spi3Ctrl_o (spi3CtrlRR),
  491. .Spi3CsCtrl_o (spi3CsCtrlRR),
  492. .Spi3CsDelay_o (spi3CsDelayRR),
  493. .Spi3TxFifoCtrl_o (spi3TxFifoCtrlRR),
  494. .Spi3RxFifoCtrl_o (spi3RxFifoCtrlRR),
  495. .Spi4Ctrl_o (spi4CtrlRR),
  496. .Spi4CsCtrl_o (spi4CsCtrlRR),
  497. .Spi4CsDelay_o (spi4CsDelayRR),
  498. .Spi4TxFifoCtrl_o (spi4TxFifoCtrlRR),
  499. .Spi4RxFifoCtrl_o (spi4RxFifoCtrlRR),
  500. .Spi5Ctrl_o (spi5CtrlRR),
  501. .Spi5CsCtrl_o (spi5CsCtrlRR),
  502. .Spi5CsDelay_o (spi5CsDelayRR),
  503. .Spi5TxFifoCtrl_o (spi5TxFifoCtrlRR),
  504. .Spi5RxFifoCtrl_o (spi5RxFifoCtrlRR),
  505. .Spi6Ctrl_o (spi6CtrlRR),
  506. .Spi6CsCtrl_o (spi6CsCtrlRR),
  507. .Spi6CsDelay_o (spi6CsDelayRR),
  508. .Spi6TxFifoCtrl_o (spi6TxFifoCtrlRR),
  509. .Spi6RxFifoCtrl_o (spi6RxFifoCtrlRR)
  510. );
  511. RegMap
  512. #(
  513. .CMD_REG_WIDTH(32),
  514. .ADDR_REG_WIDTH(12)
  515. )
  516. RegMap_inst
  517. (
  518. .Clk_i (gclk),
  519. .Rst_i (initRst),
  520. .SmcBe_i (SmcBe_i),
  521. .Data_i (toRegMapData),
  522. .Addr_i (toRegMapAddr),
  523. .Val_i (toRegMapVal),
  524. .TxFifoCtrlReg0_i (spi0TxFifoCtrlReg),
  525. .TxFifoCtrlReg1_i (spi1TxFifoCtrlReg),
  526. .TxFifoCtrlReg2_i (spi2TxFifoCtrlReg),
  527. .TxFifoCtrlReg3_i (spi3TxFifoCtrlReg),
  528. .TxFifoCtrlReg4_i (spi4TxFifoCtrlReg),
  529. .TxFifoCtrlReg5_i (spi5TxFifoCtrlReg),
  530. .TxFifoCtrlReg6_i (spi6TxFifoCtrlReg),
  531. .RxFifoCtrlReg0_i (spi0RxFifoCtrlReg),
  532. .RxFifoCtrlReg1_i (spi1RxFifoCtrlReg),
  533. .RxFifoCtrlReg2_i (spi2RxFifoCtrlReg),
  534. .RxFifoCtrlReg3_i (spi3RxFifoCtrlReg),
  535. .RxFifoCtrlReg4_i (spi4RxFifoCtrlReg),
  536. .RxFifoCtrlReg5_i (spi5RxFifoCtrlReg),
  537. .RxFifoCtrlReg6_i (spi6RxFifoCtrlReg),
  538. .LdReg_i (ldReg),
  539. //Spi0
  540. .Spi0CtrlReg_o (spi0Ctrl),
  541. .Spi0ClkReg_o (spi0Clk),
  542. .Spi0CsDelayReg_o (spi0CsDelay),
  543. .Spi0CsCtrlReg_o (spi0CsCtrl),
  544. .Spi0TxFifoCtrlReg_o (spi0TxFifoCtrl),
  545. .Spi0RxFifoCtrlReg_o (spi0RxFifoCtrl),
  546. //Spi1
  547. .Spi1CtrlReg_o (spi1Ctrl),
  548. .Spi1ClkReg_o (spi1Clk),
  549. .Spi1CsDelayReg_o (spi1CsDelay),
  550. .Spi1CsCtrlReg_o (spi1CsCtrl),
  551. .Spi1TxFifoCtrlReg_o (spi1TxFifoCtrl),
  552. .Spi1RxFifoCtrlReg_o (spi1RxFifoCtrl),
  553. //Spi2
  554. .Spi2CtrlReg_o (spi2Ctrl),
  555. .Spi2ClkReg_o (spi2Clk),
  556. .Spi2CsDelayReg_o (spi2CsDelay),
  557. .Spi2CsCtrlReg_o (spi2CsCtrl),
  558. .Spi2TxFifoCtrlReg_o (spi2TxFifoCtrl),
  559. .Spi2RxFifoCtrlReg_o (spi2RxFifoCtrl),
  560. //Spi3
  561. .Spi3CtrlReg_o (spi3Ctrl),
  562. .Spi3ClkReg_o (spi3Clk),
  563. .Spi3CsDelayReg_o (spi3CsDelay),
  564. .Spi3CsCtrlReg_o (spi3CsCtrl),
  565. .Spi3TxFifoCtrlReg_o (spi3TxFifoCtrl),
  566. .Spi3RxFifoCtrlReg_o (spi3RxFifoCtrl),
  567. //Spi4
  568. .Spi4CtrlReg_o (spi4Ctrl),
  569. .Spi4ClkReg_o (spi4Clk),
  570. .Spi4CsDelayReg_o (spi4CsDelay),
  571. .Spi4CsCtrlReg_o (spi4CsCtrl),
  572. .Spi4TxFifoCtrlReg_o (spi4TxFifoCtrl),
  573. .Spi4RxFifoCtrlReg_o (spi4RxFifoCtrl),
  574. //Spi5
  575. .Spi5CtrlReg_o (spi5Ctrl),
  576. .Spi5ClkReg_o (spi5Clk),
  577. .Spi5CsDelayReg_o (spi5CsDelay),
  578. .Spi5CsCtrlReg_o (spi5CsCtrl),
  579. .Spi5TxFifoCtrlReg_o (spi5TxFifoCtrl),
  580. .Spi5RxFifoCtrlReg_o (spi5RxFifoCtrl),
  581. //Spi6
  582. .Spi6CtrlReg_o (spi6Ctrl),
  583. .Spi6ClkReg_o (spi6Clk),
  584. .Spi6CsDelayReg_o (spi6CsDelay),
  585. .Spi6CsCtrlReg_o (spi6CsCtrl),
  586. .Spi6TxFifoCtrlReg_o (spi6TxFifoCtrl),
  587. .Spi6RxFifoCtrlReg_o (spi6RxFifoCtrl),
  588. .SpiTxRxEnReg_o (spiTxRxEn),
  589. .SpiTxRxEnSetReg_o (spiTxRxEnSet),
  590. .SpiTxRxEnClrReg_o (spiTxRxEnClr),
  591. .GPIOAReg_o (Gpio),
  592. .AnsDataReg_o (ansData),
  593. .Led_o (Led_o)
  594. );
  595. ClkManager #(
  596. .SPI_NUM(SPI_NUM),
  597. .STAGES(STAGES)
  598. ) ClkManager
  599. (
  600. .Clk_i (gclk),
  601. .Rst_i (initRst),
  602. .Rst80_i (rst80),
  603. .BaudRate0_i (baudRate[0]),
  604. .BaudRate1_i (baudRate[1]),
  605. .BaudRate2_i (baudRate[2]),
  606. .BaudRate3_i (baudRate[3]),
  607. .BaudRate4_i (baudRate[4]),
  608. .BaudRate5_i (baudRate[5]),
  609. .BaudRate6_i (baudRate[6]),
  610. .Clk80_o (clk80),
  611. .SpiClk_o (spiClkBus)
  612. );
  613. genvar i;
  614. generate
  615. for (i = 0; i < SPI_NUM; i = i + 1) begin : SpiSubSystem
  616. SpiSubSystem #(
  617. .STAGES (STAGES),
  618. .CMD_REG_WIDTH (CMD_REG_WIDTH),
  619. .ADDR_REG_WIDTH (ADDR_REG_WIDTH),
  620. .WIDTH (1),
  621. .FIFO_NUM (SPI_NUM)
  622. ) SpiSubSystem(
  623. .Clk123_i (gclk),
  624. .SpiClk_i (spiClkBus[i]),
  625. .TxEn_i (txEn[i]),
  626. .FifoRxRst_i (fifoRxRst[i]),
  627. .FifoTxRst_i (fifoTxRst[i]),
  628. .FifoRxRstRdPtr_i (fifoRxRstRdPtr[i]),
  629. .FifoTxRstWrPtr_i (fifoTxRstWrPtr[i]),
  630. .SmcAre_i (SmcAre_i),
  631. .SmcAwe_i (SmcAwe_i),
  632. .SmcAddr_i (addrExt),
  633. .ToFifoVal_i (toFifoVal[i]),
  634. .ToFifoData_i (toFifoData[32*i+:32]),
  635. .WidthSel_i (widthSel[i]),
  636. .PulsePol_i (clockPol[i]),
  637. .ClockPhase_i (clockPhase[i]),
  638. .EndianSel_i (endianSel[i]),
  639. .ChipSelFlash_i (chipSelFlash[i]),
  640. .ChipSelFpga_i (chipSelFpga[i]),
  641. .Assel_i (assel[i]),
  642. .Lag_i (lag[i]),
  643. .Lead_i (leadx[i]),
  644. .SelSt_i (selSt[i]),
  645. .Stop_i (stopDelay[i]),
  646. .SpiMode_i (spiMode[i]),
  647. .SpiEn_i (spiEn[i]),
  648. .TxFifoCtrlReg_o (txFifoCtrlReg[i]),
  649. .RxFifoCtrlReg_o (rxFifoCtrlReg[i]),
  650. .DataFromRxFifo_o (dataFromRxFifo[i]),
  651. .Sck_o (Sck_o[i]),
  652. .Ss_o (ssW[i]),
  653. .SsFlash_o (SsFlash_o[i]),
  654. .Mosi0_o (Mosi0_o[i]),
  655. .Mosi1_io (Mosi1_io[i]),
  656. .Mosi2_o (Mosi2_o[i]),
  657. .Mosi3_o (mosi3[i])
  658. );
  659. xpm_cdc_single #(
  660. .DEST_SYNC_FF (3),
  661. .INIT_SYNC_FF (0),
  662. .SIM_ASSERT_CHK (0),
  663. .SRC_INPUT_REG (1)
  664. )
  665. xpm_cdc_single_inst(
  666. .dest_out (ldReg[i]),
  667. .dest_clk (gclk),
  668. .src_clk (spiClkBus[i]),
  669. .src_in (Ld_i[i])
  670. );
  671. end
  672. endgenerate
  673. /////////////FOR DEBUG/////////////
  674. /* QuadSPIs QuadSPIs (
  675. .Clk_i(spiClkBus[0]),
  676. .Rst_i(initRstGen[0] | !spiMode[0]),
  677. .Sck_i(sckQ[0]),
  678. .Ss_i(ssQ[0]),
  679. .Mosi0_i(mosi0Q[0]),
  680. .Mosi1_i(mosi1[0]),
  681. .Mosi2_i(mosi2[0]),
  682. .Mosi3_i(mosi3[0]),
  683. .WidthSel_i(widthSel[0]),
  684. .SELST_i(selSt[0]),
  685. .EndianSel_i(endianSel[0])
  686. );*/
  687. InitRst InitRst_inst
  688. (
  689. .clk_i(gclk),
  690. .signal_o(initRst)
  691. );
  692. InitRst Rst80_inst
  693. (
  694. .clk_i(clk80),
  695. .signal_o(rst80)
  696. );
  697. endmodule