QuadSPIm.v 46 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219
  1. module QuadSPIm(
  2. input Clk_i,
  3. input Rst_i,
  4. input Start_i,
  5. input EmptyFlag_i,
  6. input ClockPhase_i,
  7. input [31:0] SpiData_i,
  8. input SelSt_i,
  9. input [1:0] WidthSel_i,
  10. input Lag_i,
  11. input Lead_i,
  12. input EndianSel_i,
  13. input [5:0] Stop_i,
  14. input PulsePol_i,
  15. output reg Mosi0_o,
  16. output reg Mosi1_o,
  17. output reg Mosi2_o,
  18. output reg Mosi3_o,
  19. output reg Sck_o,
  20. output reg Val_o,
  21. output Ss_o
  22. );
  23. //================================================================================
  24. // REG/WIRE
  25. //================================================================================
  26. reg startFlag;
  27. reg startR;
  28. reg [31:0] trCnt;
  29. reg valReg;
  30. reg lineBusy;
  31. reg [5:0] ssCnt;
  32. reg ss;
  33. reg ssR;
  34. reg [31:0] spiDataR;
  35. reg oldDataFlag;
  36. reg [7:0] mosiReg0;
  37. reg [7:0] mosiReg1;
  38. reg [7:0] mosiReg2;
  39. reg [7:0] mosiReg3;
  40. reg [3:0] ssNum;
  41. reg [2:0] delayCnt;
  42. reg stopFlag;
  43. //================================================================================
  44. // ASSIGNMENTS
  45. //================================================================================
  46. assign Ss_o = ss;
  47. //================================================================================
  48. // CODING
  49. //================================================================================
  50. always @(*) begin
  51. if (Start_i) begin
  52. Val_o = valReg;
  53. end
  54. else begin
  55. Val_o = 1'b0;
  56. end
  57. end
  58. always @(*) begin
  59. if (SelSt_i) begin
  60. if (!ss) begin
  61. lineBusy = 1'b1;
  62. end
  63. else begin
  64. lineBusy = 1'b0;
  65. end
  66. end
  67. else begin
  68. if (ss) begin
  69. lineBusy = 1'b1;
  70. end
  71. else begin
  72. lineBusy = 1'b0;
  73. end
  74. end
  75. end
  76. // always @(posedge Clk_i) begin
  77. // if (Rst_i) begin
  78. // trCnt <= 1'b0;
  79. // end
  80. // else begin
  81. // if ( ssCnt == (ssNum + Lead_i + Lag_i)) begin
  82. // trCnt <= trCnt + 1'b1;
  83. // end
  84. // else if (oldDataFlag) begin
  85. // trCnt <= 1'b0;
  86. // end
  87. // end
  88. // end
  89. always @(posedge Clk_i) begin
  90. if (Rst_i) begin
  91. delayCnt <= 1'b0;
  92. end
  93. else begin
  94. if (stopFlag &&delayCnt < Stop_i) begin
  95. delayCnt <= delayCnt + 1'b1;
  96. end
  97. else begin
  98. delayCnt <= 1'b0;
  99. end
  100. end
  101. end
  102. always @(posedge Clk_i) begin
  103. if (Rst_i) begin
  104. stopFlag <= 1'b0;
  105. end
  106. else begin
  107. if (SelSt_i) begin
  108. if (ss && !ssR) begin
  109. stopFlag <= 1'b1;
  110. end
  111. else if ( delayCnt == Stop_i) begin
  112. stopFlag <= 1'b0;
  113. end
  114. end
  115. else begin
  116. if (!ss && ssR) begin
  117. stopFlag <= 1'b1;
  118. end
  119. else if (delayCnt == Stop_i) begin
  120. stopFlag <= 1'b0;
  121. end
  122. end
  123. end
  124. end
  125. always @(*) begin
  126. if (SelSt_i) begin
  127. if (PulsePol_i) begin
  128. if (ClockPhase_i) begin
  129. if (Lead_i == 0) begin
  130. if (!ss && (ssCnt <= ssNum+Lag_i+Lead_i && ssCnt > Lag_i) ) begin
  131. Sck_o = ~(~Clk_i);
  132. end
  133. else begin
  134. Sck_o = 1'b0;
  135. end
  136. end
  137. else begin
  138. if (!ss && (ssCnt < ssNum+Lag_i+Lead_i && ssCnt > Lag_i)) begin
  139. Sck_o = ~(~Clk_i);
  140. end
  141. else begin
  142. Sck_o = 1'b0;
  143. end
  144. end
  145. end
  146. else begin
  147. if (Lead_i == 0) begin
  148. if (!ss && (ssCnt <= ssNum+Lag_i+Lead_i && ssCnt > Lag_i) ) begin
  149. Sck_o = ~(Clk_i);
  150. end
  151. else begin
  152. Sck_o = 1'b0;
  153. end
  154. end
  155. else begin
  156. if (!ss && (ssCnt < ssNum + Lag_i + Lead_i && ssCnt > Lag_i)) begin
  157. Sck_o = ~(Clk_i);
  158. end
  159. else begin
  160. Sck_o = 1'b0;
  161. end
  162. end
  163. end
  164. end
  165. else begin
  166. if (ClockPhase_i) begin
  167. if (Lead_i == 0) begin
  168. if (!ss && (ssCnt <= ssNum+Lag_i+Lead_i && ssCnt > Lag_i) ) begin
  169. Sck_o = ~(Clk_i);
  170. end
  171. else begin
  172. Sck_o = 1'b0;
  173. end
  174. end
  175. else begin
  176. if (!ss && (ssCnt <ssNum + Lag_i + Lag_i && ssCnt > Lag_i)) begin
  177. Sck_o = ~(Clk_i);
  178. end
  179. else begin
  180. Sck_o = 1'b0;
  181. end
  182. end
  183. end
  184. else begin
  185. if (Lead_i == 0) begin
  186. if (!ss && (ssCnt <= ssNum+Lag_i+Lead_i && ssCnt > Lag_i) ) begin
  187. Sck_o = ~(~Clk_i);
  188. end
  189. else begin
  190. Sck_o = 1'b0;
  191. end
  192. end
  193. else begin
  194. if (!ss && (ssCnt < ssNum + Lag_i + Lead_i && ssCnt > Lag_i)) begin
  195. Sck_o = ~(~Clk_i);
  196. end
  197. else begin
  198. Sck_o = 1'b0;
  199. end
  200. end
  201. end
  202. end
  203. end
  204. else begin
  205. if (PulsePol_i) begin
  206. if (ClockPhase_i) begin
  207. if (Lead_i == 0) begin
  208. if (ss && (ssCnt <= ssNum+Lag_i+Lead_i && ssCnt > Lag_i) ) begin
  209. Sck_o = ~(~Clk_i);
  210. end
  211. else begin
  212. Sck_o = 1'b0;
  213. end
  214. end
  215. else begin
  216. if (ss && (ssCnt < ssNum+Lag_i+Lead_i && ssCnt > Lag_i)) begin
  217. Sck_o = ~(~Clk_i);
  218. end
  219. else begin
  220. Sck_o = 1'b0;
  221. end
  222. end
  223. end
  224. else begin
  225. if (Lead_i == 0) begin
  226. if (ss && (ssCnt <= ssNum+Lag_i+Lead_i && ssCnt > Lag_i) ) begin
  227. Sck_o = ~(Clk_i);
  228. end
  229. else begin
  230. Sck_o = 1'b0;
  231. end
  232. end
  233. else begin
  234. if (ss && (ssCnt < ssNum + Lag_i + Lead_i && ssCnt > Lag_i)) begin
  235. Sck_o = ~(Clk_i);
  236. end
  237. else begin
  238. Sck_o = 1'b0;
  239. end
  240. end
  241. end
  242. end
  243. else begin
  244. if (ClockPhase_i) begin
  245. if (Lead_i == 0) begin
  246. if (ss && (ssCnt <= ssNum+Lag_i+Lead_i && ssCnt > Lag_i) ) begin
  247. Sck_o = ~(Clk_i);
  248. end
  249. else begin
  250. Sck_o = 1'b0;
  251. end
  252. end
  253. else begin
  254. if (ss && (ssCnt <ssNum + Lag_i + Lag_i && ssCnt > Lag_i)) begin
  255. Sck_o = ~(Clk_i);
  256. end
  257. else begin
  258. Sck_o = 1'b0;
  259. end
  260. end
  261. end
  262. else begin
  263. if (Lead_i == 0) begin
  264. if (ss && (ssCnt <= ssNum+Lag_i+Lead_i && ssCnt > Lag_i) ) begin
  265. Sck_o = ~(~Clk_i);
  266. end
  267. else begin
  268. Sck_o = 1'b0;
  269. end
  270. end
  271. else begin
  272. if (ss && (ssCnt < ssNum + Lag_i + Lead_i && ssCnt > Lag_i)) begin
  273. Sck_o = ~(~Clk_i);
  274. end
  275. else begin
  276. Sck_o = 1'b0;
  277. end
  278. end
  279. end
  280. end
  281. end
  282. end
  283. always @(*) begin
  284. if (SelSt_i) begin
  285. if (EndianSel_i) begin
  286. case (WidthSel_i)
  287. 0 : begin
  288. Mosi0_o = (!ss&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i) ) ? (mosiReg3[0]):1'b0;
  289. Mosi1_o = (!ss&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i)) ? (mosiReg3[0]):1'b0;
  290. Mosi2_o = (!ss&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i)) ? (mosiReg1[0]):1'b0;
  291. Mosi3_o = (!ss&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i)) ? (mosiReg0[0]):1'b0;
  292. end
  293. 1 : begin
  294. Mosi0_o = (!ss&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i)) ? (mosiReg3[0]):1'b0;
  295. Mosi1_o = (!ss&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i)) ? (mosiReg2[0]):1'b0;
  296. Mosi2_o = (!ss&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i)) ? (mosiReg1[0]):1'b0;
  297. Mosi3_o = (!ss&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i)) ? (mosiReg0[0]):1'b0;
  298. end
  299. 2 : begin
  300. Mosi0_o = (!ss&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i)) ? (mosiReg3[0]):1'b0;
  301. Mosi1_o = (!ss&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i)) ? (mosiReg2[0]):1'b0;
  302. Mosi2_o = (!ss&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i)) ? (mosiReg1[0]):1'b0;
  303. Mosi3_o = (!ss&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i)) ? (mosiReg0[0]):1'b0;
  304. end
  305. 3 : begin
  306. Mosi0_o = (!ss&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i)) ? (mosiReg3[0]):1'b0;
  307. Mosi1_o = (!ss&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i)) ? (mosiReg2[0]):1'b0;
  308. Mosi2_o = (!ss&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i)) ? (mosiReg1[0]):1'b0;
  309. Mosi3_o = (!ss&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i)) ? (mosiReg0[0]):1'b0;
  310. end
  311. endcase
  312. end
  313. else begin
  314. case (WidthSel_i)
  315. 0 : begin
  316. Mosi0_o = (!ss&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i))? (mosiReg0[1]):1'b0;
  317. Mosi1_o = (!ss&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i))? (mosiReg1[1]):1'b0;
  318. Mosi2_o = (!ss&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i))? (mosiReg2[1]):1'b0;
  319. Mosi3_o = (!ss&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i))? (mosiReg3[1]):1'b0;
  320. end
  321. 1 : begin
  322. Mosi0_o = (!ss&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i))? (mosiReg0[3]):1'b0;
  323. Mosi1_o = (!ss&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i))? (mosiReg1[3]):1'b0;
  324. Mosi2_o = (!ss&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i))? (mosiReg2[3]):1'b0;
  325. Mosi3_o = (!ss&& (ssCnt <= ssNum+Lag_i && ssCnt >Lag_i))? (mosiReg3[3]):1'b0;
  326. end
  327. 2 : begin
  328. Mosi0_o = (!ss&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i))? (mosiReg0[5]):1'b0;
  329. Mosi1_o = (!ss&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i))? (mosiReg1[5]):1'b0;
  330. Mosi2_o = (!ss&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i))? (mosiReg2[5]):1'b0;
  331. Mosi3_o = (!ss&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i))? (mosiReg3[5]):1'b0;
  332. end
  333. 3 : begin
  334. Mosi0_o = (!ss&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i))? (mosiReg0[7]):1'b0;
  335. Mosi1_o = (!ss&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i))? (mosiReg1[7]):1'b0;
  336. Mosi2_o = (!ss&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i))? (mosiReg2[7]):1'b0;
  337. Mosi3_o = (!ss&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i))? (mosiReg3[7]):1'b0;
  338. end
  339. endcase
  340. end
  341. end
  342. else begin
  343. if (EndianSel_i) begin
  344. case (WidthSel_i)
  345. 0 : begin
  346. Mosi0_o = (ss&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i) )?(mosiReg3[0]):1'b0;
  347. Mosi1_o = (ss&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i)) ? (mosiReg2[0]):1'b0;
  348. Mosi2_o = (ss&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i)) ? (mosiReg1[0]):1'b0;
  349. Mosi3_o = (ss&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i)) ? (mosiReg0[0]):1'b0;
  350. end
  351. 1 : begin
  352. Mosi0_o = (ss&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i)) ? (mosiReg3[0]):1'b0;
  353. Mosi1_o = (ss&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i)) ? (mosiReg2[0]):1'b0;
  354. Mosi2_o = (ss&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i)) ? (mosiReg1[0]):1'b0;
  355. Mosi3_o = (ss&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i)) ? (mosiReg0[0]):1'b0;
  356. end
  357. 2 : begin
  358. Mosi0_o = (ss && (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i)) ? (mosiReg3[0]):1'b0;
  359. Mosi1_o = (ss && (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i)) ? (mosiReg2[0]):1'b0;
  360. Mosi2_o = (ss && (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i)) ? (mosiReg1[0]):1'b0;
  361. Mosi3_o = (ss && (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i)) ? (mosiReg0[0]):1'b0;
  362. end
  363. 3 : begin
  364. Mosi0_o = (ss && (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i)) ? (mosiReg3[0]):1'b0;
  365. Mosi1_o = (ss && (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i)) ? (mosiReg2[0]):1'b0;
  366. Mosi2_o = (ss && (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i)) ? (mosiReg1[0]):1'b0;
  367. Mosi3_o = (ss && (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i)) ? (mosiReg0[0]):1'b0;
  368. end
  369. endcase
  370. end
  371. else begin
  372. case (WidthSel_i)
  373. 0 : begin
  374. Mosi0_o = (ss&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i))? (mosiReg0[1]):1'b0;
  375. Mosi1_o = (ss&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i))? (mosiReg1[1]):1'b0;
  376. Mosi2_o = (ss&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i))? (mosiReg2[1]):1'b0;
  377. Mosi3_o = (ss&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i))? (mosiReg3[1]):1'b0;
  378. end
  379. 1 : begin
  380. Mosi0_o = (ss&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i))? (mosiReg0[3]):1'b0;
  381. Mosi1_o = (ss&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i))? (mosiReg1[3]):1'b0;
  382. Mosi2_o = (ss&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i))? (mosiReg2[3]):1'b0;
  383. Mosi3_o = (ss&& (ssCnt <= ssNum+Lag_i && ssCnt >Lag_i))? (mosiReg3[3]):1'b0;
  384. end
  385. 2 : begin
  386. Mosi0_o = (ss&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i))? (mosiReg0[5]):1'b0;
  387. Mosi1_o = (ss&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i))? (mosiReg1[5]):1'b0;
  388. Mosi2_o = (ss&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i))? (mosiReg2[5]):1'b0;
  389. Mosi3_o = (ss&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i))? (mosiReg3[5]):1'b0;
  390. end
  391. 3 : begin
  392. Mosi0_o = (ss&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i))? (mosiReg0[7]):1'b0;
  393. Mosi1_o = (ss&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i))? (mosiReg1[7]):1'b0;
  394. Mosi2_o = (ss&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i))? (mosiReg2[7]):1'b0;
  395. Mosi3_o = (ss&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i))? (mosiReg3[7]):1'b0;
  396. end
  397. endcase
  398. end
  399. end
  400. end
  401. always @(posedge Clk_i) begin
  402. ssR <= ss;
  403. end
  404. always @(*) begin
  405. if (SelSt_i) begin
  406. if (ss && !ssR) begin
  407. valReg = 1'b1;
  408. end
  409. else begin
  410. valReg = 1'b0;
  411. end
  412. end
  413. else begin
  414. if (!ss&& ssR) begin
  415. valReg = 1'b1;
  416. end
  417. else begin
  418. valReg = 1'b0;
  419. end
  420. end
  421. end
  422. always @(posedge Clk_i) begin
  423. if (valReg) begin
  424. spiDataR <= SpiData_i;
  425. end
  426. end
  427. // always @(*) begin
  428. // if (Rst_i) begin
  429. // oldDataFlag = 1'b0;
  430. // end
  431. // else begin
  432. // if (spiDataR == SpiData_i && (SpiData_i != 0) || EmptyFlag_i ) begin
  433. // oldDataFlag = 1'b1;
  434. // end
  435. // else begin
  436. // oldDataFlag = 1'b0;
  437. // end
  438. // end
  439. // end
  440. always @(*) begin
  441. if (Rst_i) begin
  442. startFlag = 1'b0;
  443. end
  444. else begin
  445. if (Start_i && !stopFlag && !EmptyFlag_i ) begin
  446. startFlag = 1'b1;
  447. end
  448. else begin
  449. startFlag = 1'b0;
  450. end
  451. end
  452. end
  453. always @(*) begin
  454. if (Rst_i) begin
  455. ssNum = 1'b0;
  456. end
  457. else begin
  458. case (WidthSel_i)
  459. 0 : begin
  460. ssNum = 2;
  461. end
  462. 1 : begin
  463. ssNum = 4;
  464. end
  465. 2 : begin
  466. ssNum = 6;
  467. end
  468. 3 : begin
  469. ssNum = 8;
  470. end
  471. endcase
  472. end
  473. end
  474. always @(negedge Clk_i) begin
  475. if (Rst_i) begin
  476. ssCnt <= 1'b0;
  477. end
  478. else if (ssCnt < (ssNum+Lag_i+Lead_i) && startFlag ) begin
  479. ssCnt <= ssCnt + 1'b1;
  480. end
  481. else begin
  482. if (ssCnt == ssNum-1 || !startFlag) begin
  483. ssCnt <= 1'b0;
  484. end
  485. end
  486. end
  487. always @(negedge Clk_i) begin
  488. if (SelSt_i) begin
  489. if (Rst_i) begin
  490. ss <= 1'b1;
  491. end
  492. else begin
  493. if (ssCnt < (ssNum+Lag_i+Lead_i) && startFlag ) begin
  494. ss <= 1'b0;
  495. end
  496. else begin
  497. ss <= 1'b1;
  498. end
  499. end
  500. end
  501. else begin
  502. if (Rst_i) begin
  503. ss <= 1'b0;
  504. end
  505. else begin
  506. if (ssCnt < (ssNum+Lag_i+Lead_i) && startFlag ) begin
  507. ss <= 1'b1;
  508. end
  509. else begin
  510. ss <= 1'b0;
  511. end
  512. end
  513. end
  514. end
  515. always @(negedge Clk_i) begin
  516. if (Rst_i) begin
  517. mosiReg0 <= SpiData_i[31:24];
  518. end
  519. else begin
  520. case (WidthSel_i)
  521. 3: begin
  522. if (!EndianSel_i) begin
  523. if (SelSt_i) begin
  524. if (!ssR && (ssCnt > Lag_i && ssCnt < ssNum + Lag_i + Lead_i)) begin
  525. mosiReg0 <= { mosiReg0[6:0],1'b0 };
  526. end
  527. else begin
  528. mosiReg0 <= SpiData_i[31:24];
  529. end
  530. end
  531. else begin
  532. if (ssR&& (ssCnt > Lag_i && ssCnt < ssNum + Lag_i + Lead_i)) begin
  533. mosiReg0 <= { mosiReg0[6:0],1'b0 };
  534. end
  535. else begin
  536. mosiReg0 <= SpiData_i[31:24];
  537. end
  538. end
  539. end
  540. else begin
  541. if (SelSt_i) begin
  542. if (!ssR&& (ssCnt > Lag_i && ssCnt < ssNum + Lag_i + Lead_i)) begin
  543. mosiReg0 <= {1'b0, mosiReg0[7:1] };
  544. end
  545. else begin
  546. mosiReg0 <= SpiData_i[31:24];
  547. end
  548. end
  549. else begin
  550. if (ssR&& (ssCnt > Lag_i && ssCnt < ssNum + Lag_i + Lead_i)) begin
  551. mosiReg0 <= {1'b0, mosiReg0[7:1] };
  552. end
  553. else begin
  554. mosiReg0 <= SpiData_i[31:24];
  555. end
  556. end
  557. end
  558. end
  559. 2: begin
  560. if (!EndianSel_i) begin
  561. if (SelSt_i) begin
  562. if (!ssR&& (ssCnt > Lag_i && ssCnt < ssNum + Lag_i + Lead_i)) begin
  563. mosiReg0 <= { mosiReg0[4:0],1'b0 };
  564. end
  565. else begin
  566. mosiReg0 <= SpiData_i[23:18];
  567. end
  568. end
  569. else begin
  570. if (ssR&& (ssCnt > Lag_i && ssCnt < ssNum + Lag_i + Lead_i)) begin
  571. mosiReg0 <= { mosiReg0[4:0],1'b0 };
  572. end
  573. else begin
  574. mosiReg0 <= SpiData_i[23:18];
  575. end
  576. end
  577. end
  578. else begin
  579. if (SelSt_i) begin
  580. if (!ssR&& (ssCnt > Lag_i && ssCnt < ssNum + Lag_i + Lead_i)) begin
  581. mosiReg0 <= {1'b0, mosiReg0[5:1] };
  582. end
  583. else begin
  584. mosiReg0 <= SpiData_i[23:18];
  585. end
  586. end
  587. else begin
  588. if (ssR&& (ssCnt > Lag_i && ssCnt < ssNum + Lag_i + Lead_i)) begin
  589. mosiReg0 <= {1'b0, mosiReg0[5:1] };
  590. end
  591. else begin
  592. mosiReg0 <= SpiData_i[23:18];
  593. end
  594. end
  595. end
  596. end
  597. 1: begin
  598. if (!EndianSel_i) begin
  599. if (SelSt_i) begin
  600. if (!ssR&& (ssCnt > Lag_i && ssCnt < ssNum + Lag_i + Lead_i)) begin
  601. mosiReg0 <= { mosiReg0[2:0],1'b0 };
  602. end
  603. else begin
  604. mosiReg0 <= SpiData_i[15:12];
  605. end
  606. end
  607. else begin
  608. if (ssR&& (ssCnt > Lag_i && ssCnt < ssNum + Lag_i + Lead_i)) begin
  609. mosiReg0 <= { mosiReg0[2:0],1'b0 };
  610. end
  611. else begin
  612. mosiReg0 <= SpiData_i[15:12];
  613. end
  614. end
  615. end
  616. else begin
  617. if (SelSt_i) begin
  618. if (!ssR&& (ssCnt > Lag_i && ssCnt < ssNum + Lag_i + Lead_i)) begin
  619. mosiReg0 <= {1'b0, mosiReg0[3:1] };
  620. end
  621. else begin
  622. mosiReg0 <= SpiData_i[15:12];
  623. end
  624. end
  625. else begin
  626. if (ssR&& (ssCnt > Lag_i && ssCnt < ssNum + Lag_i + Lead_i)) begin
  627. mosiReg0 <= {1'b0, mosiReg0[3:1] };
  628. end
  629. else begin
  630. mosiReg0 <= SpiData_i[15:12];
  631. end
  632. end
  633. end
  634. end
  635. 0: begin
  636. if (!EndianSel_i) begin
  637. if (SelSt_i) begin
  638. if (!ssR&& (ssCnt > Lag_i && ssCnt < ssNum + Lag_i + Lead_i)) begin
  639. mosiReg0 <= { mosiReg0[0],1'b0 };
  640. end
  641. else begin
  642. mosiReg0 <= SpiData_i[7:6];
  643. end
  644. end
  645. else begin
  646. if (ssR&& (ssCnt > Lag_i && ssCnt < ssNum + Lag_i + Lead_i)) begin
  647. mosiReg0 <= { mosiReg0[0],1'b0 };
  648. end
  649. else begin
  650. mosiReg0 <= SpiData_i[7:6];
  651. end
  652. end
  653. end
  654. else begin
  655. if (SelSt_i) begin
  656. if (!ssR&& (ssCnt > Lag_i && ssCnt < ssNum + Lag_i + Lead_i)) begin
  657. mosiReg0 <= {1'b0, mosiReg0[1:1] };
  658. end
  659. else begin
  660. mosiReg0 <= SpiData_i[7:6];
  661. end
  662. end
  663. else begin
  664. if (ssR&& (ssCnt > Lag_i && ssCnt < ssNum + Lag_i + Lead_i)) begin
  665. mosiReg0 <= {1'b0, mosiReg0[1:1] };
  666. end
  667. else begin
  668. mosiReg0 <= SpiData_i[7:6];
  669. end
  670. end
  671. end
  672. end
  673. endcase
  674. end
  675. end
  676. always @(negedge Clk_i) begin
  677. if (Rst_i) begin
  678. mosiReg1 <= SpiData_i[23:16];
  679. end
  680. else begin
  681. case(WidthSel_i)
  682. 3: begin
  683. if (!EndianSel_i) begin
  684. if (SelSt_i) begin
  685. if (!ssR&& (ssCnt > Lag_i && ssCnt < ssNum + Lag_i + Lead_i)) begin
  686. mosiReg1 <= { mosiReg1[6:0],1'b0 };
  687. end
  688. else begin
  689. mosiReg1 <= SpiData_i[23:16];
  690. end
  691. end
  692. else begin
  693. if (ssR&& (ssCnt > Lag_i && ssCnt < ssNum + Lag_i + Lead_i)) begin
  694. mosiReg1 <= { mosiReg1[6:0],1'b0 };
  695. end
  696. else begin
  697. mosiReg1 <= SpiData_i[23:16];
  698. end
  699. end
  700. end
  701. else begin
  702. if (SelSt_i) begin
  703. if (!ssR&& (ssCnt > Lag_i && ssCnt < ssNum + Lag_i + Lead_i)) begin
  704. mosiReg1 <= {1'b0, mosiReg1[7:1] };
  705. end
  706. else begin
  707. mosiReg1 <= SpiData_i[23:16];
  708. end
  709. end
  710. else begin
  711. if (ssR&& (ssCnt > Lag_i && ssCnt < ssNum + Lag_i + Lead_i)) begin
  712. mosiReg1 <= {1'b0, mosiReg1[7:1] };
  713. end
  714. else begin
  715. mosiReg1 <= SpiData_i[23:16];
  716. end
  717. end
  718. end
  719. end
  720. 2: begin
  721. if (!EndianSel_i) begin
  722. if (SelSt_i) begin
  723. if (!ssR&& (ssCnt > Lag_i && ssCnt < ssNum + Lag_i + Lead_i)) begin
  724. mosiReg1 <= { mosiReg1[4:0],1'b0 };
  725. end
  726. else begin
  727. mosiReg1 <= SpiData_i[17:12];
  728. end
  729. end
  730. else begin
  731. if (ssR&& (ssCnt > Lag_i && ssCnt < ssNum + Lag_i + Lead_i)) begin
  732. mosiReg1 <= { mosiReg1[4:0],1'b0 };
  733. end
  734. else begin
  735. mosiReg1 <= SpiData_i[17:12];
  736. end
  737. end
  738. end
  739. else begin
  740. if (SelSt_i) begin
  741. if (!ssR&& (ssCnt > Lag_i && ssCnt < ssNum + Lag_i + Lead_i)) begin
  742. mosiReg1 <= {1'b0, mosiReg1[5:1] };
  743. end
  744. else begin
  745. mosiReg1 <= SpiData_i[17:12];
  746. end
  747. end
  748. else begin
  749. if (ssR&& (ssCnt > Lag_i && ssCnt < ssNum + Lag_i + Lead_i)) begin
  750. mosiReg1 <= {1'b0, mosiReg1[5:1] };
  751. end
  752. else begin
  753. mosiReg1 <= SpiData_i[17:12];
  754. end
  755. end
  756. end
  757. end
  758. 1: begin
  759. if (!EndianSel_i) begin
  760. if (SelSt_i) begin
  761. if (!ssR&& (ssCnt > Lag_i && ssCnt < ssNum + Lag_i + Lead_i)) begin
  762. mosiReg1 <= { mosiReg1[2:0],1'b0 };
  763. end
  764. else begin
  765. mosiReg1 <= SpiData_i[11:8];
  766. end
  767. end
  768. else begin
  769. if (ssR&& (ssCnt > Lag_i && ssCnt < ssNum + Lag_i + Lead_i)) begin
  770. mosiReg1 <= { mosiReg1[2:0],1'b0 };
  771. end
  772. else begin
  773. mosiReg1 <= SpiData_i[11:8];
  774. end
  775. end
  776. end
  777. else begin
  778. if (SelSt_i) begin
  779. if (!ssR&& (ssCnt > Lag_i && ssCnt < ssNum + Lag_i + Lead_i)) begin
  780. mosiReg1 <= {1'b0, mosiReg1[3:1] };
  781. end
  782. else begin
  783. mosiReg1 <= SpiData_i[11:8];
  784. end
  785. end
  786. else begin
  787. if (ssR&& (ssCnt > Lag_i && ssCnt < ssNum + Lag_i + Lead_i)) begin
  788. mosiReg1 <= {1'b0, mosiReg1[3:1] };
  789. end
  790. else begin
  791. mosiReg1 <= SpiData_i[11:8];
  792. end
  793. end
  794. end
  795. end
  796. 0: begin
  797. if (!EndianSel_i) begin
  798. if (SelSt_i) begin
  799. if (!ssR&& (ssCnt > Lag_i && ssCnt < ssNum + Lag_i + Lead_i)) begin
  800. mosiReg1 <= { mosiReg1[0],1'b0 };
  801. end
  802. else begin
  803. mosiReg1 <= SpiData_i[5:4];
  804. end
  805. end
  806. else begin
  807. if (ssR&& (ssCnt > Lag_i && ssCnt < ssNum + Lag_i + Lead_i)) begin
  808. mosiReg1 <= { mosiReg1[0],1'b0 };
  809. end
  810. else begin
  811. mosiReg1 <= SpiData_i[5:4];
  812. end
  813. end
  814. end
  815. else begin
  816. if (SelSt_i) begin
  817. if (!ssR&& (ssCnt > Lag_i && ssCnt < ssNum + Lag_i + Lead_i)) begin
  818. mosiReg1 <= {1'b0, mosiReg1[1:1] };
  819. end
  820. else begin
  821. mosiReg1 <= SpiData_i[5:4];
  822. end
  823. end
  824. else begin
  825. if (ssR&& (ssCnt > Lag_i && ssCnt < ssNum + Lag_i + Lead_i)) begin
  826. mosiReg1 <= {1'b0, mosiReg1[1:1] };
  827. end
  828. else begin
  829. mosiReg1 <= SpiData_i[5:4];
  830. end
  831. end
  832. end
  833. end
  834. endcase
  835. end
  836. end
  837. always @(negedge Clk_i) begin
  838. if (Rst_i) begin
  839. mosiReg2 <= SpiData_i[15:8];
  840. end
  841. else begin
  842. case(WidthSel_i)
  843. 3 : begin
  844. if (!EndianSel_i) begin
  845. if (SelSt_i) begin
  846. if (!ssR&& (ssCnt > Lag_i && ssCnt < ssNum + Lag_i + Lead_i)) begin
  847. mosiReg2 <= { mosiReg2[6:0],1'b0 };
  848. end
  849. else begin
  850. mosiReg2 <= SpiData_i[15:8];
  851. end
  852. end
  853. else begin
  854. if (ssR&& (ssCnt > Lag_i && ssCnt < ssNum + Lag_i + Lead_i)) begin
  855. mosiReg2 <= { mosiReg2[6:0],1'b0 };
  856. end
  857. else begin
  858. mosiReg2 <= SpiData_i[15:8];
  859. end
  860. end
  861. end
  862. else begin
  863. if (SelSt_i) begin
  864. if (!ssR&& (ssCnt > Lag_i && ssCnt < ssNum + Lag_i + Lead_i)) begin
  865. mosiReg2 <= {1'b0, mosiReg2[7:1] };
  866. end
  867. else begin
  868. mosiReg2 <= SpiData_i[15:8];
  869. end
  870. end
  871. else begin
  872. if (ssR&& (ssCnt > Lag_i && ssCnt < ssNum + Lag_i + Lead_i)) begin
  873. mosiReg2 <= {1'b0, mosiReg2[7:1] };
  874. end
  875. else begin
  876. mosiReg2 <= SpiData_i[15:8];
  877. end
  878. end
  879. end
  880. end
  881. 2 : begin
  882. if (!EndianSel_i) begin
  883. if (SelSt_i) begin
  884. if (!ssR&& (ssCnt > Lag_i && ssCnt < ssNum + Lag_i + Lead_i)) begin
  885. mosiReg2 <= { mosiReg2[4:0],1'b0 };
  886. end
  887. else begin
  888. mosiReg2 <= SpiData_i[11:6];
  889. end
  890. end
  891. else begin
  892. if (ssR&& (ssCnt > Lag_i && ssCnt < ssNum + Lag_i + Lead_i)) begin
  893. mosiReg2 <= { mosiReg2[4:0],1'b0 };
  894. end
  895. else begin
  896. mosiReg2 <= SpiData_i[11:6];
  897. end
  898. end
  899. end
  900. else begin
  901. if (SelSt_i) begin
  902. if (!ssR&& (ssCnt > Lag_i && ssCnt < ssNum + Lag_i + Lead_i)) begin
  903. mosiReg2 <= {1'b0, mosiReg2[5:1] };
  904. end
  905. else begin
  906. mosiReg2 <= SpiData_i[11:6];
  907. end
  908. end
  909. else begin
  910. if (ssR&& (ssCnt > Lag_i && ssCnt < ssNum + Lag_i + Lead_i)) begin
  911. mosiReg2 <= {1'b0, mosiReg2[5:1] };
  912. end
  913. else begin
  914. mosiReg2 <= SpiData_i[11:6];
  915. end
  916. end
  917. end
  918. end
  919. 1 : begin
  920. if (!EndianSel_i) begin
  921. if (SelSt_i) begin
  922. if (!ssR&& (ssCnt > Lag_i && ssCnt < ssNum + Lag_i + Lead_i)) begin
  923. mosiReg2 <= { mosiReg2[2:0],1'b0 };
  924. end
  925. else begin
  926. mosiReg2 <= SpiData_i[7:4];
  927. end
  928. end
  929. else begin
  930. if (ssR&& (ssCnt > Lag_i && ssCnt < ssNum + Lag_i + Lead_i)) begin
  931. mosiReg2 <= { mosiReg2[2:0],1'b0 };
  932. end
  933. else begin
  934. mosiReg2 <= SpiData_i[7:4];
  935. end
  936. end
  937. end
  938. else begin
  939. if (SelSt_i) begin
  940. if (!ssR&& (ssCnt > Lag_i && ssCnt < ssNum + Lag_i + Lead_i)) begin
  941. mosiReg2 <= {1'b0, mosiReg2[3:1] };
  942. end
  943. else begin
  944. mosiReg2 <= SpiData_i[7:4];
  945. end
  946. end
  947. else begin
  948. if (ssR&& (ssCnt > Lag_i && ssCnt < ssNum + Lag_i + Lead_i)) begin
  949. mosiReg2 <= {1'b0, mosiReg2[3:1] };
  950. end
  951. else begin
  952. mosiReg2 <= SpiData_i[7:4];
  953. end
  954. end
  955. end
  956. end
  957. 0 : begin
  958. if (!EndianSel_i) begin
  959. if (SelSt_i) begin
  960. if (!ssR&& (ssCnt > Lag_i && ssCnt < ssNum + Lag_i + Lead_i)) begin
  961. mosiReg2 <= { mosiReg2[0],1'b0 };
  962. end
  963. else begin
  964. mosiReg2 <= SpiData_i[3:2];
  965. end
  966. end
  967. else begin
  968. if (ssR&& (ssCnt > Lag_i && ssCnt < ssNum + Lag_i + Lead_i)) begin
  969. mosiReg2 <= { mosiReg2[0],1'b0 };
  970. end
  971. else begin
  972. mosiReg2 <= SpiData_i[3:2];
  973. end
  974. end
  975. end
  976. else begin
  977. if (SelSt_i) begin
  978. if (!ssR&& (ssCnt > Lag_i && ssCnt < ssNum + Lag_i + Lead_i)) begin
  979. mosiReg2 <= {1'b0, mosiReg2[1:1] };
  980. end
  981. else begin
  982. mosiReg2 <= SpiData_i[3:2];
  983. end
  984. end
  985. else begin
  986. if (ssR&& (ssCnt > Lag_i && ssCnt < ssNum + Lag_i + Lead_i)) begin
  987. mosiReg2 <= {1'b0, mosiReg2[1:1] };
  988. end
  989. else begin
  990. mosiReg2 <= SpiData_i[3:2];
  991. end
  992. end
  993. end
  994. end
  995. endcase
  996. end
  997. end
  998. always @(negedge Clk_i) begin
  999. if (Rst_i) begin
  1000. mosiReg3 <= SpiData_i[7:0];
  1001. end
  1002. else begin
  1003. case (WidthSel_i)
  1004. 3: begin
  1005. if (!EndianSel_i) begin
  1006. if (SelSt_i) begin
  1007. if (!ssR&& (ssCnt > Lag_i && ssCnt < ssNum + Lag_i + Lead_i)) begin
  1008. mosiReg3 <= { mosiReg3[6:0],1'b0 };
  1009. end
  1010. else begin
  1011. mosiReg3 <= SpiData_i[7:0];
  1012. end
  1013. end
  1014. else begin
  1015. if (ssR&& (ssCnt > Lag_i && ssCnt < ssNum + Lag_i + Lead_i)) begin
  1016. mosiReg3 <= { mosiReg3[6:0],1'b0 };
  1017. end
  1018. else begin
  1019. mosiReg3 <= SpiData_i[7:0];
  1020. end
  1021. end
  1022. end
  1023. else begin
  1024. if (SelSt_i) begin
  1025. if (!ssR&& (ssCnt > Lag_i && ssCnt < ssNum + Lag_i + Lead_i)) begin
  1026. mosiReg3 <= {1'b0, mosiReg3[7:1] };
  1027. end
  1028. else begin
  1029. mosiReg3 <= SpiData_i[7:0];
  1030. end
  1031. end
  1032. else begin
  1033. if (ssR&& (ssCnt > Lag_i && ssCnt < ssNum + Lag_i + Lead_i)) begin
  1034. mosiReg3 <= {1'b0, mosiReg3[7:1] };
  1035. end
  1036. else begin
  1037. mosiReg3 <= SpiData_i[7:0];
  1038. end
  1039. end
  1040. end
  1041. end
  1042. 2: begin
  1043. if (!EndianSel_i) begin
  1044. if (SelSt_i) begin
  1045. if (!ssR&& (ssCnt > Lag_i && ssCnt < ssNum + Lag_i + Lead_i)) begin
  1046. mosiReg3 <= { mosiReg3[4:0],1'b0 };
  1047. end
  1048. else begin
  1049. mosiReg3 <= SpiData_i[5:0];
  1050. end
  1051. end
  1052. else begin
  1053. if (ssR&& (ssCnt > Lag_i && ssCnt < ssNum + Lag_i + Lead_i)) begin
  1054. mosiReg3 <= { mosiReg3[4:0],1'b0 };
  1055. end
  1056. else begin
  1057. mosiReg3 <= SpiData_i[5:0];
  1058. end
  1059. end
  1060. end
  1061. else begin
  1062. if (SelSt_i) begin
  1063. if (!ssR&& (ssCnt > Lag_i && ssCnt < ssNum + Lag_i + Lead_i)) begin
  1064. mosiReg3 <= {1'b0, mosiReg3[5:1] };
  1065. end
  1066. else begin
  1067. mosiReg3 <= SpiData_i[5:0];
  1068. end
  1069. end
  1070. else begin
  1071. if (ssR&& (ssCnt > Lag_i && ssCnt < ssNum + Lag_i + Lead_i)) begin
  1072. mosiReg3 <= {1'b0, mosiReg3[5:1] };
  1073. end
  1074. else begin
  1075. mosiReg3 <= SpiData_i[5:0];
  1076. end
  1077. end
  1078. end
  1079. end
  1080. 1: begin
  1081. if (!EndianSel_i) begin
  1082. if (SelSt_i) begin
  1083. if (!ssR&& (ssCnt > Lag_i && ssCnt < ssNum + Lag_i + Lead_i)) begin
  1084. mosiReg3 <= { mosiReg3[2:0],1'b0 };
  1085. end
  1086. else begin
  1087. mosiReg3 <= SpiData_i[3:0];
  1088. end
  1089. end
  1090. else begin
  1091. if (ssR&& (ssCnt > Lag_i && ssCnt < ssNum + Lag_i + Lead_i)) begin
  1092. mosiReg3 <= { mosiReg3[2:0],1'b0 };
  1093. end
  1094. else begin
  1095. mosiReg3 <= SpiData_i[3:0];
  1096. end
  1097. end
  1098. end
  1099. else begin
  1100. if (SelSt_i) begin
  1101. if (!ssR&& (ssCnt > Lag_i && ssCnt < ssNum + Lag_i + Lead_i)) begin
  1102. mosiReg3 <= {1'b0, mosiReg3[3:1] };
  1103. end
  1104. else begin
  1105. mosiReg3 <= SpiData_i[3:0];
  1106. end
  1107. end
  1108. else begin
  1109. if (ssR&& (ssCnt > Lag_i && ssCnt < ssNum + Lag_i + Lead_i)) begin
  1110. mosiReg3 <= {1'b0, mosiReg3[3:1] };
  1111. end
  1112. else begin
  1113. mosiReg3 <= SpiData_i[3:0];
  1114. end
  1115. end
  1116. end
  1117. end
  1118. 0: begin
  1119. if (!EndianSel_i) begin
  1120. if (SelSt_i) begin
  1121. if (!ssR&& (ssCnt > Lag_i && ssCnt < ssNum + Lag_i + Lead_i)) begin
  1122. mosiReg3 <= { mosiReg3[0],1'b0 };
  1123. end
  1124. else begin
  1125. mosiReg3 <= SpiData_i[1:0];
  1126. end
  1127. end
  1128. else begin
  1129. if (ssR&& (ssCnt > Lag_i && ssCnt < ssNum + Lag_i + Lead_i)) begin
  1130. mosiReg3 <= { mosiReg3[0],1'b0 };
  1131. end
  1132. else begin
  1133. mosiReg3 <= SpiData_i[1:0];
  1134. end
  1135. end
  1136. end
  1137. else begin
  1138. if (SelSt_i) begin
  1139. if (!ssR&& (ssCnt > Lag_i && ssCnt < ssNum + Lag_i + Lead_i)) begin
  1140. mosiReg3 <= {1'b0, mosiReg3[1:1] };
  1141. end
  1142. else begin
  1143. mosiReg3 <= SpiData_i[1:0];
  1144. end
  1145. end
  1146. else begin
  1147. if (ssR&& (ssCnt > Lag_i && ssCnt < ssNum + Lag_i + Lead_i)) begin
  1148. mosiReg3 <= {1'b0, mosiReg3[1:1] };
  1149. end
  1150. else begin
  1151. mosiReg3 <= SpiData_i[1:0];
  1152. end
  1153. end
  1154. end
  1155. end
  1156. endcase
  1157. end
  1158. end
  1159. endmodule