TopBochV3Tb.sv 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533
  1. `timescale 1ns/1ns
  2. module TopBochV3Tb;
  3. parameter CLK_PERIOD = 8.13; // Clock period in ns
  4. //***********************************************
  5. // INPUTS
  6. //***********************************************
  7. logic Clk_i;
  8. logic Clk100;
  9. logic Clk200;
  10. logic Clk125;
  11. logic Clk60;
  12. logic Clk20;
  13. logic Clk80;
  14. logic Clk50;
  15. logic Clk24;
  16. logic Clk10;
  17. logic Rst_i;
  18. logic Start_i;
  19. logic CPHA_i;
  20. logic [23:0] SPIdata;
  21. logic SpiDataVal_i;
  22. logic SELST_i;
  23. logic [1:0] WidthSel_i;
  24. logic LAG_i;
  25. logic LEAD_i;
  26. logic EndianSel_i;
  27. logic [5:0] Stop_i;
  28. logic PulsePol_i;
  29. logic MisoLdLmx_i;
  30. //***********************************************
  31. // OUTPUTS
  32. //***********************************************
  33. wire Mosi0_o;
  34. wire Mosi1_o;
  35. wire Mosi2_o;
  36. wire Mosi3_o;
  37. wire Sck_o;
  38. wire Ss_o;
  39. wire SsFlash_o;
  40. wire Val_o;
  41. wire anyFlag;
  42. wire valR;
  43. wire valQ;
  44. wire SckR;
  45. wire SckQ;
  46. wire SsR;
  47. wire SsQ;
  48. wire mosi0R;
  49. wire mosi0Q;
  50. wire locked;
  51. wire rstInit;
  52. logic mosi1Reg;
  53. logic [16:0] trCnt;
  54. logic [4:0] trCntSync;
  55. logic modeSel;
  56. logic [23:0] randData;
  57. logic [31:0] randData32;
  58. logic [5:0] QSPITotalWordNum;
  59. logic [5:0] QSpiBochv3TotalWordNum;
  60. logic [5:0] QSpiCtrlCp2444v1TotalWordNum;
  61. logic Stop;
  62. logic [31:0] stopCnt;
  63. logic rstForFPGA;
  64. //***********************************************
  65. // Lines From RF Top
  66. //***********************************************
  67. logic [7:0] sckFromRFTop;
  68. logic [7:0] mosiFromRFTop;
  69. logic [7:0] ssFromRFTop;
  70. logic [23:0] dataFromSPItb;
  71. logic valFromSPItb;
  72. //***********************************************
  73. // CLASSES
  74. //***********************************************
  75. class Packet;
  76. rand bit [23:0] data;
  77. rand bit [31:0] data32;
  78. endclass
  79. Packet pkt;
  80. //***********************************************
  81. // HEADERS FOR DEVICES - SB_TMSG
  82. //***********************************************
  83. localparam [4:0] DeviceIdLmx2594 = 5'h0;
  84. localparam [4:0] DeviceIdDDS = 5'h1;
  85. localparam [4:0] DeviceIdPot = 5'h2;
  86. localparam [4:0] DeviceIdDac = 5'h3;
  87. localparam [4:0] DeviceIdAtt = 5'h4;
  88. localparam [4:0] DeviceIdShReg = 5'h5;
  89. localparam [4:0] DeviceIdMax2870 = 5'h6;
  90. localparam [4:0] DeviceIdGpio1 = 5'h7;
  91. localparam [4:0] DeviceIdTemp = 5'h8;
  92. localparam [4:0] DeviceIdGpio2 = 5'h9;
  93. localparam [16:0] Gpio1InitWordNum = 17'd1;
  94. localparam [16:0] Gpio2InitWordNum = 17'd1;
  95. localparam [16:0] PotWordInitNum = 17'd1;
  96. localparam [16:0] DacWordInitNum = 17'd1;
  97. localparam [16:0] AttWordInitNum = 17'd1;
  98. localparam [16:0] ShRegWordInitNum = 17'd1;
  99. localparam [16:0] Lmx2594InitWordNum = 17'd13;
  100. localparam [16:0] DDSInitWordNum = 17'd7;
  101. localparam [16:0] MaxInitWordNum = 17'd6;
  102. localparam [16:0] TempSensWordNum = 17'd1;
  103. localparam [23:0] InitGpio1Header = {1'h0, DeviceIdGpio1, Gpio1InitWordNum, 1'h1};
  104. localparam [23:0] InitGpio2Header = {1'b0, DeviceIdGpio2,Gpio2InitWordNum,1'h1 };
  105. localparam [23:0] TempSensHeader = {1'h0, DeviceIdTemp, TempSensWordNum, 1'h1};
  106. localparam [23:0] InitLMX2594Header = {1'h0, DeviceIdLmx2594, Lmx2594InitWordNum, 1'h1};
  107. localparam [23:0] InitDDSHeader = {1'h0, DeviceIdDDS, DDSInitWordNum, 1'h1};
  108. localparam [23:0] InitMAX2870Header = {1'h0, DeviceIdMax2870, MaxInitWordNum, 1'h1};
  109. localparam [23:0] InitPotHeader = {1'h0, DeviceIdPot, PotWordInitNum, 1'h1};
  110. localparam [23:0] InitDacHeader = {1'h0, DeviceIdDac, DacWordInitNum, 1'h1};
  111. localparam [23:0] InitAttHeader = {1'h0, DeviceIdAtt, AttWordInitNum, 1'h1};
  112. localparam [23:0] InitShRegHeader = {1'h0, DeviceIdShReg, ShRegWordInitNum, 1'h1};
  113. localparam [3:0] LMXWordNum = 4'd14;
  114. localparam [2:0] DDSWordNum = 3'd4;
  115. localparam POTWordNum = 2'd2;
  116. localparam DACWordNum = 1'd1;
  117. localparam ATTWordNum = 1'd1;
  118. localparam [1:0] ShRegWordNum = 2'd1;
  119. localparam [1:0] MaxWordNum = 2'd2;
  120. localparam [1:0] GPIOWordNum = 2'd1;
  121. //***********************************************
  122. // GPIO 1 REG
  123. //***********************************************
  124. localparam [0:0] RF_SW1 = 1'h0;
  125. localparam [0:0] RF_SW2 = 1'h0;
  126. localparam [0:0] CTRL_AM_SW3 = 1'h0;
  127. localparam [0:0] DDS_SYNC_CTRL_FPGA = 1'h0;
  128. localparam [0:0] DDS_RESET_FPGA = 1'h0;
  129. localparam [0:0] DDS_SYNC_FPGA = 1'h0;
  130. localparam [0:0] SW_CAP4 = 1'h0;
  131. localparam [0:0] AM_ALC_SW = 1'h0;
  132. localparam [0:0] SW_CAP3 = 1'h0;
  133. localparam [0:0] SW_CAP2 = 1'h0;
  134. localparam [0:0] SW_CAP1 = 1'h0;
  135. localparam [0:0] AM_ALC_1_FIX = 1'h0;
  136. localparam [0:0] PLL_VTUNE_CTRL = 1'h0;
  137. localparam [0:0] PLL_SYNC_CTRL = 1'h0;
  138. localparam [0:0] PLL_SYNC = 1'h0;
  139. localparam [0:0] PLL_LOOP_CTRL = 1'h0;
  140. localparam [0:0] DDS_X2_FPGA = 1'h0;
  141. localparam [0:0] DDS_SAW2_FPGA = 1'h0;
  142. localparam [0:0] REF_OFFSET_CTRL_FPGA = 1'h0;
  143. localparam [0:0] GPIO_ADRF_V1 = 1'h0;
  144. localparam [0:0] GPIO_ADRF_V2 = 1'h0;
  145. localparam [0:0] DDS_SAW1_FPGA = 1'h0;
  146. localparam [23:0] GPIO_REG = {DDS_SAW1_FPGA,GPIO_ADRF_V2,GPIO_ADRF_V1,REF_OFFSET_CTRL_FPGA,DDS_SAW2_FPGA,DDS_X2_FPGA,PLL_LOOP_CTRL,PLL_SYNC,PLL_SYNC_CTRL,PLL_VTUNE_CTRL,AM_ALC_1_FIX,SW_CAP1,SW_CAP2,SW_CAP3,AM_ALC_SW,SW_CAP4,DDS_SYNC_FPGA,DDS_RESET_FPGA,DDS_SYNC_CTRL_FPGA,CTRL_AM_SW3,RF_SW2,RF_SW1};
  147. //***********************************************
  148. // localparam [23:0] AllDevQSPIHeader = {1'h1, LMXWordNum, DDSWordNum, POTWordNum, DACWordNum,ATTWordNum, ShRegWordNum,MaxWordNum, GPIOWordNum, 7'h1};
  149. localparam [23:0] AllDevQSPIHeader = {1'h1, 1'h0,DDSWordNum,1'h0,GPIOWordNum, LMXWordNum,1'h0,MaxWordNum,1'h0,ShRegWordNum,1'h0,POTWordNum,DACWordNum,ATTWordNum,1'h1};
  150. //***********************************************
  151. // HEADERS FOR DEVICES - BOCHv3
  152. //***********************************************
  153. /* Device ID's for 1 MOSI */
  154. localparam [4:0] DeviceIdLmkA = 5'h0;
  155. localparam [4:0] DeviceIdLmkB = 5'h1;
  156. localparam [4:0] DeviceIdTfeHub = 5'h3;
  157. localparam [4:0] DeviceIdFlash = 5'h4;
  158. /* Init Word Numbers */
  159. localparam [16:0] LmkAInitWordNum = 17'd129;
  160. localparam [16:0] LmkBInitWordNum = 17'd129;
  161. localparam [16:0] TfeHubInitWordNum = 17'd3;
  162. localparam [16:0] FlashInitWordNum = 17'd1;
  163. /* Headers */
  164. localparam [23:0] InitLmkAHeader = {1'h0, DeviceIdLmkA, LmkAInitWordNum, 1'h1};
  165. localparam [23:0] InitLmkBHeader = {1'h0, DeviceIdLmkB, LmkBInitWordNum, 1'h1};
  166. localparam [23:0] InitFlashHeader = {1'h0, DeviceIdFlash, FlashInitWordNum, 1'h1};
  167. /* Word Numbers 4-MOSI */
  168. localparam [3:0] CtrlColdPartWordNum = 4'd7;
  169. localparam [0:0] Tfe2bWordNum = 1'd1;
  170. localparam [1:0] Tfe4bWordNum= 2'd2;
  171. localparam [1:0] Tfe7bWordNum= 2'd3;
  172. localparam [1:0] Tfe6bWordNum= 2'd2;
  173. /* Headers 4-MOSI */
  174. localparam [23:0] CtrlColdPartHeader = {1'h1, 1'h0, CtrlColdPartWordNum, 1'h0, 2'h0, 2'h0, 2'h0, 10'h0, 1'h1};
  175. localparam [23:0] Tfe2bHeader = {1'h1, 1'h0, 4'h0, Tfe2bWordNum, 2'h0, 2'h0, 2'h0, 10'h0, 1'h1};
  176. localparam [23:0] Tfe4bHeader = {1'h1, 1'h0, 4'h0, 1'h0, Tfe4bWordNum, 2'h0, 2'h0, 10'h0, 1'h1};
  177. localparam [23:0] Tfe7bHeader = {1'h1, 1'h0, 4'h0, 1'h0, 1'h0, Tfe7bWordNum, 2'h0, 10'h0, 1'h1};
  178. localparam [23:0] Tfe6bHeader = {1'h1, 1'h0, 4'h0, 1'h0, 1'h0, 1'h0, Tfe6bWordNum, 10'h0, 1'h1};
  179. /* All Devices Header */
  180. localparam [23:0] AllDevBochv3QSpiHeader = {1'h1, 1'h0, CtrlColdPartWordNum, Tfe2bWordNum, Tfe4bWordNum, Tfe7bWordNum, Tfe6bWordNum, 10'h0, 1'h1};
  181. //***********************************************
  182. // HEADERS FOR DEVICES - CTRL_CP2444v1
  183. //***********************************************
  184. localparam [4:0] DeviceIdSwCtrlP1 = 5'h0;
  185. localparam [4:0] DeviceIdAttCtrlP1 = 5'h1;
  186. localparam [4:0] DeviceIdAttCtrlP2 = 5'h2;
  187. localparam [4:0] DeviceIdAttCtrlP3 = 5'h3;
  188. localparam [4:0] DeviceIdAttCtrlP4 = 5'h4;
  189. localparam [4:0] DeviceIdCtrlCp2444v1Gpio = 5'h5;
  190. /* Init Word Numbers */
  191. localparam [16:0] SwCtrlP1WordNum = 17'd1;
  192. localparam [16:0] AttCtrlP1WordNum = 17'd1;
  193. localparam [16:0] AttCtrlP2WordNum = 17'd1;
  194. localparam [16:0] AttCtrlP3WordNum = 17'd1;
  195. localparam [16:0] AttCtrlP4WordNum = 17'd1;
  196. localparam [16:0] CtrlCp2444v1GpioWordNum = 17'd1;
  197. /* Headers */
  198. localparam [23:0] SwCtrlP1Header = {1'h0, DeviceIdSwCtrlP1, SwCtrlP1WordNum, 1'h1};
  199. localparam [23:0] AttCtrlP1Header = {1'h0, DeviceIdAttCtrlP1, AttCtrlP1WordNum, 1'h1};
  200. localparam [23:0] AttCtrlP2Header = {1'h0, DeviceIdAttCtrlP2, AttCtrlP2WordNum, 1'h1};
  201. localparam [23:0] AttCtrlP3Header = {1'h0, DeviceIdAttCtrlP3, AttCtrlP3WordNum, 1'h1};
  202. localparam [23:0] AttCtrlP4Header = {1'h0, DeviceIdAttCtrlP4, AttCtrlP4WordNum, 1'h1};
  203. localparam [23:0] CtrlCp2444v1GpioHeader = {1'h0, DeviceIdCtrlCp2444v1Gpio, CtrlCp2444v1GpioWordNum, 1'h1};
  204. /* Word Numbers */
  205. localparam SwCtrlP1QSpiWordNum = 1'd1;
  206. localparam AttCtrlP1QSpiWordNum = 1'd1;
  207. localparam AttCtrlP2QSpiWordNum = 1'd1;
  208. localparam AttCtrlP3QSpiWordNum = 1'd1;
  209. localparam AttCtrlP4QSpiWordNum = 1'd1;
  210. localparam CtrlCp2444v1GpioQSpiWordNum = 1'd1;
  211. /* QSpi Headers */
  212. localparam [23:0] CtrlCp2444v1GpioQSpiHeader = {1'h1, CtrlCp2444v1GpioQSpiWordNum, 1'h0,1'h0,1'h0,1'h0,1'h0, 15'h0, 1'h1};
  213. localparam [23:0] SwCtrlP1QSpiHeader = {1'h1, 1'h0, SwCtrlP1QSpiWordNum, 1'h0, 1'h0, 1'h0, 1'h0, 15'h0, 1'h1};
  214. localparam [23:0] AttCtrlP1QSpiHeader = {1'h1, 1'h0, 1'h0, AttCtrlP1QSpiWordNum, 1'h0, 1'h0, 1'h0, 15'h0, 1'h1};
  215. localparam [23:0] AttCtrlP2QSpiHeader = {1'h1, 1'h0, 1'h0, 1'h0, AttCtrlP2QSpiWordNum, 1'h0, 1'h0, 15'h0, 1'h1};
  216. localparam [23:0] AttCtrlP3QSpiHeader = {1'h1, 1'h0, 1'h0, 1'h0, 1'h0, AttCtrlP3QSpiWordNum, 1'h0, 15'h0, 1'h1};
  217. localparam [23:0] AttCtrlP4QSpiHeader = {1'h1, 1'h0, 1'h0, 1'h0, 1'h0, 1'h0, AttCtrlP4QSpiWordNum, 15'h0, 1'h1};
  218. localparam [23:0] AllDevCtrlCp2444v1QSpiHeader = {1'h1,CtrlCp2444v1GpioQSpiWordNum, SwCtrlP1QSpiWordNum, AttCtrlP1QSpiWordNum, AttCtrlP2QSpiWordNum, AttCtrlP3QSpiWordNum, AttCtrlP4QSpiWordNum, 16'h0, 1'h1};
  219. //***********************************************
  220. // ASSIGNS
  221. //***********************************************
  222. assign Val_o = (modeSel) ? valQ : valR;
  223. assign Sck_o = (modeSel) ? SckQ : SckR;
  224. /* If the counter is 261 then the SsFlash should be active instead of Ss_o */
  225. assign Ss_o = (trCnt == 261) ? 1'b1 : (modeSel) ? SsQ : SsR;
  226. /* SsFlash_o should be active instead of Ss_o during the Flash transaction */
  227. assign SsFlash_o = (trCnt == 261 ) ? 1'b0 : 1'b1;
  228. assign Mosi0_o = (modeSel) ? mosi0Q : mosi0R;
  229. assign Mosi1_io = (anyFlag) ? 1'bz : Mosi1_o;
  230. assign MisoLdLmx_i = 1'b1;
  231. assign emptyFlagTx = (trCnt > 262 + QSpiBochv3TotalWordNum) ? 1'b1 : 1'b0;
  232. assign QSPITotalWordNum = LMXWordNum + DDSWordNum + POTWordNum + DACWordNum + ATTWordNum + ShRegWordNum + MaxWordNum + GPIOWordNum;
  233. assign QSpiBochv3TotalWordNum = CtrlColdPartWordNum + Tfe2bWordNum + Tfe4bWordNum + Tfe7bWordNum + Tfe6bWordNum;
  234. assign QSpiCtrlCp2444v1TotalWordNum = CtrlCp2444v1GpioWordNum + SwCtrlP1WordNum + AttCtrlP1WordNum + AttCtrlP2WordNum + AttCtrlP3WordNum + AttCtrlP4WordNum;
  235. assign currClk = (modeSel) ? Clk60 : Clk10;
  236. //***********************************************
  237. // CLOCK GENERATION
  238. //***********************************************
  239. always #(CLK_PERIOD/2) Clk_i = ~Clk_i;
  240. always #(10/2) Clk100 = ~Clk100;
  241. always #(5/2) Clk200 = ~Clk200;
  242. always #(8/2) Clk125 = ~Clk125;
  243. always #(16.67/2) Clk60 = ~Clk60;
  244. always #(20/2) Clk50 = ~Clk50;
  245. always #(12.5/2) Clk80 = ~Clk80;
  246. always #(41.67/2) Clk24 = ~Clk24;
  247. always #(50/2) Clk20 = ~Clk20;
  248. always #(50) Clk10 = ~Clk10;
  249. //***********************************************
  250. // INITIALIZATION
  251. //***********************************************
  252. initial begin
  253. // Initialize Inputs
  254. Clk_i = 1;
  255. Clk100= 1;
  256. Clk200 = 1;
  257. Clk125 = 1;
  258. Clk60 = 1;
  259. Clk20 = 1;
  260. Clk50 = 1;
  261. Clk80 = 1;
  262. Clk24 = 1;
  263. rstForFPGA = 0;
  264. Clk10 = 1;
  265. pkt = new();
  266. Rst_i = 1;
  267. Start_i = 0;
  268. CPHA_i = 0; SpiDataVal_i = 0;
  269. SELST_i = 1;//0:High, 1:Low
  270. WidthSel_i = 2; // 3-32bit, 2-24bit, 1-16bit, 0-8bit
  271. LAG_i = 0;
  272. LEAD_i = 0;
  273. EndianSel_i = 0; // 0:MSB first, 1:lsb first
  274. PulsePol_i = 0;
  275. // Reset the system
  276. #(CLK_PERIOD*10) Rst_i = 0;
  277. #(700000-60) rstForFPGA = 1;
  278. #(CLK_PERIOD*74) rstForFPGA = 0;
  279. #(165000) Start_i = 1; // Start SPI transaction
  280. wait (trCnt == 262) begin
  281. Start_i = 0;
  282. end
  283. #(CLK_PERIOD*100)
  284. Start_i = 1; // Start SPI transaction
  285. // wait (trCnt == 70) begin
  286. // Start_i = 0;
  287. // end
  288. // #(CLK_PERIOD*1000)
  289. // Start_i = 1; // Start SPI transaction
  290. end
  291. //***********************************************
  292. always_ff @(posedge currClk) begin
  293. if (Rst_i) begin
  294. trCnt <= 0;
  295. end
  296. else begin
  297. if (Val_o) begin
  298. trCnt <= trCnt + 1;
  299. end
  300. end
  301. end
  302. always_comb begin
  303. if (Rst_i) begin
  304. mosi1Reg = 0;
  305. end
  306. else begin
  307. mosi1Reg = Mosi1_io;
  308. end
  309. end
  310. genvar i;
  311. // always_comb begin
  312. // if (Rst_i) begin
  313. // WidthSel_i = 2'd0;
  314. // end
  315. // else begin
  316. // if (trCnt == 1 || trCnt == 3 ) begin
  317. // WidthSel_i = 2'd0;
  318. // end
  319. // else if (trCnt > 36 && trCnt < 43) begin
  320. // WidthSel_i = 2'd3;
  321. // end
  322. // else begin
  323. // WidthSel_i = 2'd2;
  324. // end
  325. // end
  326. // end
  327. always_comb begin
  328. if (Rst_i) begin
  329. modeSel = 0;
  330. end
  331. else begin
  332. if (trCnt == 262) begin
  333. modeSel = 1;
  334. end
  335. end
  336. end
  337. always_comb begin
  338. if (Rst_i) begin
  339. Stop_i = 6'd0;
  340. end
  341. else begin
  342. if (trCnt == 158) begin
  343. Stop_i = 6'h0;
  344. end
  345. else begin
  346. Stop_i = 6'd0;
  347. end
  348. end
  349. end
  350. always_ff @(posedge currClk) begin
  351. if (Rst_i) begin
  352. randData<=0;
  353. randData32 <= 0;
  354. end
  355. else begin
  356. randData <= pkt.randomize(data);
  357. randData32 <= pkt.randomize(data32);
  358. end
  359. end
  360. /* Data generation for SPI */
  361. always_comb begin
  362. if (Rst_i) begin
  363. SPIdata = 0;
  364. end
  365. else begin
  366. /* Firstly the header for LMK_A */
  367. if (trCnt == 0) begin
  368. SPIdata = InitLmkAHeader;
  369. end
  370. /* Then the data for LMK_A */
  371. else if (trCnt > 0 && trCnt < 130) begin
  372. SPIdata = 24'haaaaaa;
  373. end
  374. /* Then the header for LMK_B */
  375. else if (trCnt == 130) begin
  376. SPIdata = InitLmkBHeader;
  377. end
  378. /* Then the data for LMK_B */
  379. else if (trCnt > 130 && trCnt < 260) begin
  380. SPIdata = 24'haaaaaa;
  381. end
  382. /* Then the header for the Flash */
  383. else if (trCnt == 260) begin
  384. SPIdata = InitFlashHeader;
  385. end
  386. /* Then the data for the Flash but the SsFlash should be active instead of Ss_o */
  387. else if (trCnt == 261) begin
  388. SPIdata = 24'haaaaaa;
  389. end
  390. /* Then the header for QSpi header */
  391. else if (trCnt == 262) begin
  392. SPIdata = AllDevBochv3QSpiHeader;
  393. end
  394. /* First word after is a header for CtrlCp2444v1 */
  395. else if (trCnt == 263) begin
  396. SPIdata = AllDevCtrlCp2444v1QSpiHeader;
  397. end
  398. /* Then the data for QSpi */
  399. else if (trCnt > 263 && trCnt < 263+QSpiBochv3TotalWordNum) begin
  400. SPIdata = 24'haaaaaa;
  401. end
  402. end
  403. end
  404. //***********************************************
  405. // DUT INSTANTIATION
  406. //***********************************************
  407. GSR GSR(.GSRI(1'b1));
  408. ExtSpiMEmul ExtSpiMEmul_inst (
  409. .Clk_i(currClk),
  410. .Rst_i(Rst_i || modeSel),
  411. .Start_i(Start_i),
  412. .ClockPhase_i(CPHA_i),
  413. .EmptyFlag_i(emptyFlagTx),
  414. .SpiData_i(SPIdata),
  415. .SelSt_i(SELST_i),
  416. .WidthSel_i(WidthSel_i),
  417. .Lag_i(LAG_i),
  418. .Lead_i(LEAD_i),
  419. .EndianSel_i(EndianSel_i),
  420. .Stop_i(6'h0),
  421. .PulsePol_i(PulsePol_i),
  422. .Mosi0_o(mosi0R),
  423. .Sck_o(SckR),
  424. .Ss_o(SsR),
  425. .Val_o(valR)
  426. );
  427. ExtQspiMEmul ExtQspiMEmul_inst (
  428. .Clk_i(currClk),
  429. .Rst_i(Rst_i || !modeSel),
  430. .Start_i(Start_i),
  431. .ClockPhase_i(CPHA_i),
  432. .EmptyFlag_i(emptyFlagTx),
  433. .SpiData_i(SPIdata),
  434. .SelSt_i(SELST_i),
  435. .WidthSel_i(WidthSel_i),
  436. .Lag_i(LAG_i),
  437. .Lead_i(LEAD_i),
  438. .EndianSel_i(EndianSel_i),
  439. .Stop_i(6'h0),
  440. .PulsePol_i(PulsePol_i),
  441. .Mosi0_o(mosi0Q),
  442. .Mosi1_o(Mosi1_o),
  443. .Mosi2_o(Mosi2_o),
  444. .Mosi3_o(Mosi3_o),
  445. .Sck_o(SckQ),
  446. .Ss_o(SsQ),
  447. .Val_o(valQ)
  448. );
  449. TopBochv3 TopBochV3_inst (
  450. .Rst_i(rstForFPGA),
  451. .Sck_i(Sck_o),
  452. .Ss_i(Ss_o),
  453. .SsFlash_i(SsFlash_o),
  454. .Mosi0_i(Mosi0_o),
  455. .Mosi1_io(Mosi1_o),
  456. .Mosi2_i(Mosi2_o),
  457. .Mosi3_i(Mosi3_o),
  458. /* LMK_A */
  459. .LmkAMosi_o(),
  460. .LmkACs_o(),
  461. .LmkASck_o(),
  462. .LmkAMiso_i(),
  463. /* LMK_B */
  464. .LmkBMosi_o(),
  465. .LmkBCs_o(),
  466. .LmkBSck_o(),
  467. .LmkBMiso_i(),
  468. /* CtrlCp2444v1 */
  469. .CtrlCp2444v1Mosi0_o(),
  470. .CtrlCp2444v1Mosi1_o(),
  471. .CtrlCp2444v1Mosi2_o(),
  472. .CtrlCp2444v1Mosi3_o(),
  473. .CtrlCp2444v1Sck_o(),
  474. .CtrlCp2444v1Cs_o(),
  475. .CtrlCp2444v1Rst_o(),
  476. .CtrlCp2444v1Ld_i(),
  477. /* HUB-1854 */
  478. .TfeClk_o(),
  479. .TfeCs_o(),
  480. .TfeMosi_o(),
  481. .TfeMiso_i()
  482. );
  483. endmodule