QuadSPIm.v 46 KB

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