QuadSPIm.v 46 KB

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