Cdc.v 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357
  1. //////////////////////////////////////////////////////////////////////////////////
  2. // Company: TAIR
  3. // Engineer:
  4. //
  5. // Create Date: 10/30/2023 11:24:31 AM
  6. // Design Name:
  7. // Module Name: CDC
  8. // Project Name: S5443_V3_FPGA3
  9. // Target Devices: BOARD: BY5443v3. FPGA: xc7s25csga225-2
  10. // Tool Versions:
  11. // Description:
  12. //
  13. // Dependencies: This module synchronizes commands from RegMap to the
  14. // respective clock domain.
  15. //
  16. // Revision:
  17. // Revision 1.0 - File Created
  18. // Additional Comments:
  19. //
  20. //////////////////////////////////////////////////////////////////////////////////
  21. module CDC #(
  22. parameter WIDTH = 32,
  23. parameter STAGES = 3,
  24. parameter SPI_NUM = 7
  25. )
  26. (
  27. input ClkFast_i,
  28. input [SPI_NUM-1:0] ClkSlow_i,
  29. input [WIDTH-1:0] Spi0Ctrl_i,
  30. input [WIDTH-1:0] Spi0CsCtrl_i,
  31. input [WIDTH-1:0] Spi0CsDelay_i,
  32. input [WIDTH-1:0] Spi0TxFifoCtrl_i,
  33. input [WIDTH-1:0] Spi0RxFifoCtrl_i,
  34. input [WIDTH-1:0] Spi1Ctrl_i,
  35. input [WIDTH-1:0] Spi1CsCtrl_i,
  36. input [WIDTH-1:0] Spi1CsDelay_i,
  37. input [WIDTH-1:0] Spi1TxFifoCtrl_i,
  38. input [WIDTH-1:0] Spi1RxFifoCtrl_i,
  39. input [WIDTH-1:0] Spi2Ctrl_i,
  40. input [WIDTH-1:0] Spi2CsCtrl_i,
  41. input [WIDTH-1:0] Spi2CsDelay_i,
  42. input [WIDTH-1:0] Spi2TxFifoCtrl_i,
  43. input [WIDTH-1:0] Spi2RxFifoCtrl_i,
  44. input [WIDTH-1:0] Spi3Ctrl_i,
  45. input [WIDTH-1:0] Spi3CsCtrl_i,
  46. input [WIDTH-1:0] Spi3CsDelay_i,
  47. input [WIDTH-1:0] Spi3TxFifoCtrl_i,
  48. input [WIDTH-1:0] Spi3RxFifoCtrl_i,
  49. input [WIDTH-1:0] Spi4Ctrl_i,
  50. input [WIDTH-1:0] Spi4CsCtrl_i,
  51. input [WIDTH-1:0] Spi4CsDelay_i,
  52. input [WIDTH-1:0] Spi4TxFifoCtrl_i,
  53. input [WIDTH-1:0] Spi4RxFifoCtrl_i,
  54. input [WIDTH-1:0] Spi5Ctrl_i,
  55. input [WIDTH-1:0] Spi5CsCtrl_i,
  56. input [WIDTH-1:0] Spi5CsDelay_i,
  57. input [WIDTH-1:0] Spi5TxFifoCtrl_i,
  58. input [WIDTH-1:0] Spi5RxFifoCtrl_i,
  59. input [WIDTH-1:0] Spi6Ctrl_i,
  60. input [WIDTH-1:0] Spi6CsCtrl_i,
  61. input [WIDTH-1:0] Spi6CsDelay_i,
  62. input [WIDTH-1:0] Spi6TxFifoCtrl_i,
  63. input [WIDTH-1:0] Spi6RxFifoCtrl_i,
  64. output [WIDTH-1:0] Spi0Ctrl_o,
  65. output [WIDTH-1:0] Spi0CsCtrl_o,
  66. output [WIDTH-1:0] Spi0CsDelay_o,
  67. output [WIDTH-1:0] Spi0TxFifoCtrl_o,
  68. output [WIDTH-1:0] Spi0RxFifoCtrl_o,
  69. output [WIDTH-1:0] Spi1Ctrl_o,
  70. output [WIDTH-1:0] Spi1CsCtrl_o,
  71. output [WIDTH-1:0] Spi1CsDelay_o,
  72. output [WIDTH-1:0] Spi1TxFifoCtrl_o,
  73. output [WIDTH-1:0] Spi1RxFifoCtrl_o,
  74. output [WIDTH-1:0] Spi2Ctrl_o,
  75. output [WIDTH-1:0] Spi2CsCtrl_o,
  76. output [WIDTH-1:0] Spi2CsDelay_o,
  77. output [WIDTH-1:0] Spi2TxFifoCtrl_o,
  78. output [WIDTH-1:0] Spi2RxFifoCtrl_o,
  79. output [WIDTH-1:0] Spi3Ctrl_o,
  80. output [WIDTH-1:0] Spi3CsCtrl_o,
  81. output [WIDTH-1:0] Spi3CsDelay_o,
  82. output [WIDTH-1:0] Spi3TxFifoCtrl_o,
  83. output [WIDTH-1:0] Spi3RxFifoCtrl_o,
  84. output [WIDTH-1:0] Spi4Ctrl_o,
  85. output [WIDTH-1:0] Spi4CsCtrl_o,
  86. output [WIDTH-1:0] Spi4CsDelay_o,
  87. output [WIDTH-1:0] Spi4TxFifoCtrl_o,
  88. output [WIDTH-1:0] Spi4RxFifoCtrl_o,
  89. output [WIDTH-1:0] Spi5Ctrl_o,
  90. output [WIDTH-1:0] Spi5CsCtrl_o,
  91. output [WIDTH-1:0] Spi5CsDelay_o,
  92. output [WIDTH-1:0] Spi5TxFifoCtrl_o,
  93. output [WIDTH-1:0] Spi5RxFifoCtrl_o,
  94. output [WIDTH-1:0] Spi6Ctrl_o,
  95. output [WIDTH-1:0] Spi6CsCtrl_o,
  96. output [WIDTH-1:0] Spi6CsDelay_o,
  97. output [WIDTH-1:0] Spi6TxFifoCtrl_o,
  98. output [WIDTH-1:0] Spi6RxFifoCtrl_o
  99. );
  100. //================================================================================
  101. // REG/WIRE
  102. //================================================================================
  103. //lauch registers
  104. reg [WIDTH-1:0] spi0Ctrl;
  105. reg [WIDTH-1:0] spi0CsCtrl;
  106. reg [WIDTH-1:0] spi0CsDelay;
  107. reg [WIDTH-1:0] spi0TxFifoCtrl;
  108. reg [WIDTH-1:0] spi0RxFifoCtrl;
  109. reg [WIDTH-1:0] spi1Ctrl;
  110. reg [WIDTH-1:0] spi1CsCtrl;
  111. reg [WIDTH-1:0] spi1CsDelay;
  112. reg [WIDTH-1:0] spi1TxFifoCtrl;
  113. reg [WIDTH-1:0] spi1RxFifoCtrl;
  114. reg [WIDTH-1:0] spi2Ctrl;
  115. reg [WIDTH-1:0] spi2CsCtrl;
  116. reg [WIDTH-1:0] spi2CsDelay;
  117. reg [WIDTH-1:0] spi2TxFifoCtrl;
  118. reg [WIDTH-1:0] spi2RxFifoCtrl;
  119. reg [WIDTH-1:0] spi3Ctrl;
  120. reg [WIDTH-1:0] spi3CsCtrl;
  121. reg [WIDTH-1:0] spi3CsDelay;
  122. reg [WIDTH-1:0] spi3TxFifoCtrl;
  123. reg [WIDTH-1:0] spi3RxFifoCtrl;
  124. reg [WIDTH-1:0] spi4Ctrl;
  125. reg [WIDTH-1:0] spi4CsCtrl;
  126. reg [WIDTH-1:0] spi4CsDelay;
  127. reg [WIDTH-1:0] spi4TxFifoCtrl;
  128. reg [WIDTH-1:0] spi4RxFifoCtrl;
  129. reg [WIDTH-1:0] spi5Ctrl;
  130. reg [WIDTH-1:0] spi5CsCtrl;
  131. reg [WIDTH-1:0] spi5CsDelay;
  132. reg [WIDTH-1:0] spi5TxFifoCtrl;
  133. reg [WIDTH-1:0] spi5RxFifoCtrl;
  134. reg [WIDTH-1:0] spi6Ctrl;
  135. reg [WIDTH-1:0] spi6CsCtrl;
  136. reg [WIDTH-1:0] spi6CsDelay;
  137. reg [WIDTH-1:0] spi6TxFifoCtrl;
  138. reg [WIDTH-1:0] spi6RxFifoCtrl;
  139. // capture registers
  140. (* ASYNC_REG = "TRUE" *)reg [STAGES*WIDTH-1:0] spi0Ctrl_c;
  141. (* ASYNC_REG = "TRUE" *)reg [STAGES*WIDTH-1:0] spi0CsCtrl_c;
  142. (* ASYNC_REG = "TRUE" *)reg [STAGES*WIDTH-1:0] spi0CsDelay_c;
  143. (* ASYNC_REG = "TRUE" *)reg [STAGES*WIDTH-1:0] spi0TxFifoCtrl_c;
  144. (* ASYNC_REG = "TRUE" *)reg [STAGES*WIDTH-1:0] spi0RxFifoCtrl_c;
  145. (* ASYNC_REG = "TRUE" *)reg [STAGES*WIDTH-1:0] spi1Ctrl_c;
  146. (* ASYNC_REG = "TRUE" *)reg [STAGES*WIDTH-1:0] spi1CsCtrl_c;
  147. (* ASYNC_REG = "TRUE" *)reg [STAGES*WIDTH-1:0] spi1CsDelay_c;
  148. (* ASYNC_REG = "TRUE" *)reg [STAGES*WIDTH-1:0] spi1TxFifoCtrl_c;
  149. (* ASYNC_REG = "TRUE" *)reg [STAGES*WIDTH-1:0] spi1RxFifoCtrl_c;
  150. (* ASYNC_REG = "TRUE" *)reg [STAGES*WIDTH-1:0] spi2Ctrl_c;
  151. (* ASYNC_REG = "TRUE" *)reg [STAGES*WIDTH-1:0] spi2CsCtrl_c;
  152. (* ASYNC_REG = "TRUE" *)reg [STAGES*WIDTH-1:0] spi2CsDelay_c;
  153. (* ASYNC_REG = "TRUE" *)reg [STAGES*WIDTH-1:0] spi2TxFifoCtrl_c;
  154. (* ASYNC_REG = "TRUE" *)reg [STAGES*WIDTH-1:0] spi2RxFifoCtrl_c;
  155. (* ASYNC_REG = "TRUE" *)reg [STAGES*WIDTH-1:0] spi3Ctrl_c;
  156. (* ASYNC_REG = "TRUE" *)reg [STAGES*WIDTH-1:0] spi3CsCtrl_c;
  157. (* ASYNC_REG = "TRUE" *)reg [STAGES*WIDTH-1:0] spi3CsDelay_c;
  158. (* ASYNC_REG = "TRUE" *)reg [STAGES*WIDTH-1:0] spi3TxFifoCtrl_c;
  159. (* ASYNC_REG = "TRUE" *)reg [STAGES*WIDTH-1:0] spi3RxFifoCtrl_c;
  160. (* ASYNC_REG = "TRUE" *)reg [STAGES*WIDTH-1:0] spi4Ctrl_c;
  161. (* ASYNC_REG = "TRUE" *)reg [STAGES*WIDTH-1:0] spi4CsCtrl_c;
  162. (* ASYNC_REG = "TRUE" *)reg [STAGES*WIDTH-1:0] spi4CsDelay_c;
  163. (* ASYNC_REG = "TRUE" *)reg [STAGES*WIDTH-1:0] spi4TxFifoCtrl_c;
  164. (* ASYNC_REG = "TRUE" *)reg [STAGES*WIDTH-1:0] spi4RxFifoCtrl_c;
  165. (* ASYNC_REG = "TRUE" *)reg [STAGES*WIDTH-1:0] spi5Ctrl_c;
  166. (* ASYNC_REG = "TRUE" *)reg [STAGES*WIDTH-1:0] spi5CsCtrl_c;
  167. (* ASYNC_REG = "TRUE" *)reg [STAGES*WIDTH-1:0] spi5CsDelay_c;
  168. (* ASYNC_REG = "TRUE" *)reg [STAGES*WIDTH-1:0] spi5TxFifoCtrl_c;
  169. (* ASYNC_REG = "TRUE" *)reg [STAGES*WIDTH-1:0] spi5RxFifoCtrl_c;
  170. (* ASYNC_REG = "TRUE" *)reg [STAGES*WIDTH-1:0] spi6Ctrl_c;
  171. (* ASYNC_REG = "TRUE" *)reg [STAGES*WIDTH-1:0] spi6CsCtrl_c;
  172. (* ASYNC_REG = "TRUE" *)reg [STAGES*WIDTH-1:0] spi6CsDelay_c;
  173. (* ASYNC_REG = "TRUE" *)reg [STAGES*WIDTH-1:0] spi6TxFifoCtrl_c;
  174. (* ASYNC_REG = "TRUE" *)reg [STAGES*WIDTH-1:0] spi6RxFifoCtrl_c;
  175. //================================================================================
  176. // ASSIGNMENTS
  177. //================================================================================
  178. //SPI0
  179. assign Spi0Ctrl_o = spi0Ctrl_c[STAGES*WIDTH-1:(STAGES-1)*WIDTH];
  180. assign Spi0CsDelay_o = spi0CsDelay_c[STAGES*WIDTH-1:(STAGES-1)*WIDTH];
  181. assign Spi0CsCtrl_o = spi0CsCtrl_c[STAGES*WIDTH-1:(STAGES-1)*WIDTH];
  182. assign Spi0TxFifoCtrl_o = spi0TxFifoCtrl_c[STAGES*WIDTH-1:(STAGES-1)*WIDTH];
  183. assign Spi0RxFifoCtrl_o = spi0RxFifoCtrl_c[STAGES*WIDTH-1:(STAGES-1)*WIDTH];
  184. //SPI1
  185. assign Spi1Ctrl_o = spi1Ctrl_c[STAGES*WIDTH-1:(STAGES-1)*WIDTH];
  186. assign Spi1CsDelay_o = spi1CsDelay_c[STAGES*WIDTH-1:(STAGES-1)*WIDTH];
  187. assign Spi1CsCtrl_o = spi1CsCtrl_c[STAGES*WIDTH-1:(STAGES-1)*WIDTH];
  188. assign Spi1TxFifoCtrl_o = spi1TxFifoCtrl_c[STAGES*WIDTH-1:(STAGES-1)*WIDTH];
  189. assign Spi1RxFifoCtrl_o = spi1RxFifoCtrl_c[STAGES*WIDTH-1:(STAGES-1)*WIDTH];
  190. //SPI2
  191. assign Spi2Ctrl_o = spi2Ctrl_c[STAGES*WIDTH-1:(STAGES-1)*WIDTH];
  192. assign Spi2CsDelay_o = spi2CsDelay_c[STAGES*WIDTH-1:(STAGES-1)*WIDTH];
  193. assign Spi2CsCtrl_o = spi2CsCtrl_c[STAGES*WIDTH-1:(STAGES-1)*WIDTH];
  194. assign Spi2TxFifoCtrl_o = spi2TxFifoCtrl_c[STAGES*WIDTH-1:(STAGES-1)*WIDTH];
  195. assign Spi2RxFifoCtrl_o = spi2RxFifoCtrl_c[STAGES*WIDTH-1:(STAGES-1)*WIDTH];
  196. //SPI3
  197. assign Spi3Ctrl_o = spi3Ctrl_c[STAGES*WIDTH-1:(STAGES-1)*WIDTH];
  198. assign Spi3CsDelay_o = spi3CsDelay_c[STAGES*WIDTH-1:(STAGES-1)*WIDTH];
  199. assign Spi3CsCtrl_o = spi3CsCtrl_c[STAGES*WIDTH-1:(STAGES-1)*WIDTH];
  200. assign Spi3TxFifoCtrl_o = spi3TxFifoCtrl_c[STAGES*WIDTH-1:(STAGES-1)*WIDTH];
  201. assign Spi3RxFifoCtrl_o = spi3RxFifoCtrl_c[STAGES*WIDTH-1:(STAGES-1)*WIDTH];
  202. //SPI4
  203. assign Spi4Ctrl_o = spi4Ctrl_c[STAGES*WIDTH-1:(STAGES-1)*WIDTH];
  204. assign Spi4CsDelay_o = spi4CsDelay_c[STAGES*WIDTH-1:(STAGES-1)*WIDTH];
  205. assign Spi4CsCtrl_o = spi4CsCtrl_c[STAGES*WIDTH-1:(STAGES-1)*WIDTH];
  206. assign Spi4TxFifoCtrl_o = spi4TxFifoCtrl_c[STAGES*WIDTH-1:(STAGES-1)*WIDTH];
  207. assign Spi4RxFifoCtrl_o = spi4RxFifoCtrl_c[STAGES*WIDTH-1:(STAGES-1)*WIDTH];
  208. //SPI5
  209. assign Spi5Ctrl_o = spi5Ctrl_c[STAGES*WIDTH-1:(STAGES-1)*WIDTH];
  210. assign Spi5CsDelay_o = spi5CsDelay_c[STAGES*WIDTH-1:(STAGES-1)*WIDTH];
  211. assign Spi5CsCtrl_o = spi5CsCtrl_c[STAGES*WIDTH-1:(STAGES-1)*WIDTH];
  212. assign Spi5TxFifoCtrl_o = spi5TxFifoCtrl_c[STAGES*WIDTH-1:(STAGES-1)*WIDTH];
  213. assign Spi5RxFifoCtrl_o = spi5RxFifoCtrl_c[STAGES*WIDTH-1:(STAGES-1)*WIDTH];
  214. //SPI6
  215. assign Spi6Ctrl_o = spi6Ctrl_c[STAGES*WIDTH-1:(STAGES-1)*WIDTH];
  216. assign Spi6CsDelay_o = spi6CsDelay_c[STAGES*WIDTH-1:(STAGES-1)*WIDTH];
  217. assign Spi6CsCtrl_o = spi6CsCtrl_c[STAGES*WIDTH-1:(STAGES-1)*WIDTH];
  218. assign Spi6TxFifoCtrl_o = spi6TxFifoCtrl_c[STAGES*WIDTH-1:(STAGES-1)*WIDTH];
  219. assign Spi6RxFifoCtrl_o = spi6RxFifoCtrl_c[STAGES*WIDTH-1:(STAGES-1)*WIDTH];
  220. //================================================================================
  221. // LOCALPARAMS
  222. //================================================================================
  223. //================================================================================
  224. // CODING
  225. //================================================================================
  226. always @(posedge ClkFast_i) begin
  227. spi0Ctrl <= Spi0Ctrl_i;
  228. spi0CsDelay <= Spi0CsDelay_i;
  229. spi0CsCtrl <= Spi0CsCtrl_i;
  230. spi0TxFifoCtrl <= Spi0TxFifoCtrl_i;
  231. spi0RxFifoCtrl <= Spi0RxFifoCtrl_i;
  232. spi1Ctrl <= Spi1Ctrl_i;
  233. spi1CsDelay <= Spi1CsDelay_i;
  234. spi1CsCtrl <= Spi1CsCtrl_i;
  235. spi1TxFifoCtrl <= Spi1TxFifoCtrl_i;
  236. spi1RxFifoCtrl <= Spi1RxFifoCtrl_i;
  237. spi2Ctrl <= Spi2Ctrl_i;
  238. spi2CsDelay <= Spi2CsDelay_i;
  239. spi2CsCtrl <= Spi2CsCtrl_i;
  240. spi2TxFifoCtrl <= Spi2TxFifoCtrl_i;
  241. spi2RxFifoCtrl <= Spi2RxFifoCtrl_i;
  242. spi3Ctrl <= Spi3Ctrl_i;
  243. spi3CsDelay <= Spi3CsDelay_i;
  244. spi3CsCtrl <= Spi3CsCtrl_i;
  245. spi3TxFifoCtrl <= Spi3TxFifoCtrl_i;
  246. spi3RxFifoCtrl <= Spi3RxFifoCtrl_i;
  247. spi4Ctrl <= Spi4Ctrl_i;
  248. spi4CsDelay <= Spi4CsDelay_i;
  249. spi4CsCtrl <= Spi4CsCtrl_i;
  250. spi4TxFifoCtrl <= Spi4TxFifoCtrl_i;
  251. spi4RxFifoCtrl <= Spi4RxFifoCtrl_i;
  252. spi5Ctrl <= Spi5Ctrl_i;
  253. spi5CsDelay <= Spi5CsDelay_i;
  254. spi5CsCtrl <= Spi5CsCtrl_i;
  255. spi5TxFifoCtrl <= Spi5TxFifoCtrl_i;
  256. spi5RxFifoCtrl <= Spi5RxFifoCtrl_i;
  257. spi6Ctrl <= Spi6Ctrl_i;
  258. spi6CsDelay <= Spi6CsDelay_i;
  259. spi6CsCtrl <= Spi6CsCtrl_i;
  260. spi6TxFifoCtrl <= Spi6TxFifoCtrl_i;
  261. spi6RxFifoCtrl <= Spi6RxFifoCtrl_i;
  262. end
  263. always @(posedge ClkSlow_i[0]) begin
  264. spi0Ctrl_c <= {spi0Ctrl_c[(STAGES-1)*WIDTH-1:0], spi0Ctrl};
  265. spi0CsDelay_c <= {spi0CsDelay_c[(STAGES-1)*WIDTH-1:0], spi0CsDelay};
  266. spi0CsCtrl_c <= {spi0CsCtrl_c[(STAGES-1)*WIDTH-1:0], spi0CsCtrl};
  267. spi0TxFifoCtrl_c <= {spi0TxFifoCtrl_c[(STAGES-1)*WIDTH-1:0], spi0TxFifoCtrl};
  268. spi0RxFifoCtrl_c <= {spi0RxFifoCtrl_c[(STAGES-1)*WIDTH-1:0], spi0RxFifoCtrl};
  269. end
  270. always@(posedge ClkSlow_i[1]) begin
  271. spi1Ctrl_c <= {spi1Ctrl_c[(STAGES-1)*WIDTH-1:0], spi1Ctrl};
  272. spi1CsDelay_c <= {spi1CsDelay_c[(STAGES-1)*WIDTH-1:0], spi1CsDelay};
  273. spi1CsCtrl_c <= {spi1CsCtrl_c[(STAGES-1)*WIDTH-1:0], spi1CsCtrl};
  274. spi1TxFifoCtrl_c <= {spi1TxFifoCtrl_c[(STAGES-1)*WIDTH-1:0], spi1TxFifoCtrl};
  275. spi1RxFifoCtrl_c <= {spi1RxFifoCtrl_c[(STAGES-1)*WIDTH-1:0], spi1RxFifoCtrl};
  276. end
  277. always@(posedge ClkSlow_i[2]) begin
  278. spi2Ctrl_c <= {spi2Ctrl_c[(STAGES-1)*WIDTH-1:0], spi2Ctrl};
  279. spi2CsDelay_c <= {spi2CsDelay_c[(STAGES-1)*WIDTH-1:0], spi2CsDelay};
  280. spi2CsCtrl_c <= {spi2CsCtrl_c[(STAGES-1)*WIDTH-1:0], spi2CsCtrl};
  281. spi2TxFifoCtrl_c <= {spi2TxFifoCtrl_c[(STAGES-1)*WIDTH-1:0], spi2TxFifoCtrl};
  282. spi2RxFifoCtrl_c <= {spi2RxFifoCtrl_c[(STAGES-1)*WIDTH-1:0], spi2RxFifoCtrl};
  283. end
  284. always@(posedge ClkSlow_i[3]) begin
  285. spi3Ctrl_c <= {spi3Ctrl_c[(STAGES-1)*WIDTH-1:0], spi3Ctrl};
  286. spi3CsDelay_c <= {spi3CsDelay_c[(STAGES-1)*WIDTH-1:0], spi3CsDelay};
  287. spi3CsCtrl_c <= {spi3CsCtrl_c[(STAGES-1)*WIDTH-1:0], spi3CsCtrl};
  288. spi3TxFifoCtrl_c <= {spi3TxFifoCtrl_c[(STAGES-1)*WIDTH-1:0], spi3TxFifoCtrl};
  289. spi3RxFifoCtrl_c <= {spi3RxFifoCtrl_c[(STAGES-1)*WIDTH-1:0], spi3RxFifoCtrl};
  290. end
  291. always@(posedge ClkSlow_i[4]) begin
  292. spi4Ctrl_c <= {spi4Ctrl_c[(STAGES-1)*WIDTH-1:0], spi4Ctrl};
  293. spi4CsDelay_c <= {spi4CsDelay_c[(STAGES-1)*WIDTH-1:0], spi4CsDelay};
  294. spi4CsCtrl_c <= {spi4CsCtrl_c[(STAGES-1)*WIDTH-1:0], spi4CsCtrl};
  295. spi4TxFifoCtrl_c <= {spi4TxFifoCtrl_c[(STAGES-1)*WIDTH-1:0], spi4TxFifoCtrl};
  296. spi4RxFifoCtrl_c <= {spi4RxFifoCtrl_c[(STAGES-1)*WIDTH-1:0], spi4RxFifoCtrl};
  297. end
  298. always@(posedge ClkSlow_i[5]) begin
  299. spi5Ctrl_c <= {spi5Ctrl_c[(STAGES-1)*WIDTH-1:0], spi5Ctrl};
  300. spi5CsDelay_c <= {spi5CsDelay_c[(STAGES-1)*WIDTH-1:0], spi5CsDelay};
  301. spi5CsCtrl_c <= {spi5CsCtrl_c[(STAGES-1)*WIDTH-1:0], spi5CsCtrl};
  302. spi5TxFifoCtrl_c <= {spi5TxFifoCtrl_c[(STAGES-1)*WIDTH-1:0], spi5TxFifoCtrl};
  303. spi5RxFifoCtrl_c <= {spi5RxFifoCtrl_c[(STAGES-1)*WIDTH-1:0], spi5RxFifoCtrl};
  304. end
  305. always@(posedge ClkSlow_i[6]) begin
  306. spi6Ctrl_c <= {spi6Ctrl_c[(STAGES-1)*WIDTH-1:0], spi6Ctrl};
  307. spi6CsDelay_c <= {spi6CsDelay_c[(STAGES-1)*WIDTH-1:0], spi6CsDelay};
  308. spi6CsCtrl_c <= {spi6CsCtrl_c[(STAGES-1)*WIDTH-1:0], spi6CsCtrl};
  309. spi6TxFifoCtrl_c <= {spi6TxFifoCtrl_c[(STAGES-1)*WIDTH-1:0], spi6TxFifoCtrl};
  310. spi6RxFifoCtrl_c <= {spi6RxFifoCtrl_c[(STAGES-1)*WIDTH-1:0], spi6RxFifoCtrl};
  311. end
  312. endmodule