Advertisement
Guest User

Untitled

a guest
Mar 18th, 2019
70
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 12.45 KB | None | 0 0
  1.  
  2.  
  3.  
  4.  
  5.  
  6.  
  7.  
  8.  
  9.  
  10.  
  11.  
  12.  
  13.  
  14.  
  15. import "DPI-C" context function void read_ROB_ENTRY(ROB_ENTRY i);
  16. import "DPI-C" context function void check_ROB_ENTRY(ROB_ENTRY i);
  17. import "DPI-C" context function void step_ROB_ENTRY(ROB_ENTRY i);
  18. import "DPI-C" context function void print_ROB_ENTRY(ROB_ENTRY i);
  19.  
  20.  
  21.  
  22. import "DPI-C" context function void read_BRANCH_PACKET(BRANCH_PACKET i);
  23. import "DPI-C" context function void check_BRANCH_PACKET(BRANCH_PACKET i);
  24. import "DPI-C" context function void step_BRANCH_PACKET(BRANCH_PACKET i);
  25. import "DPI-C" context function void print_BRANCH_PACKET(BRANCH_PACKET i);
  26.  
  27.  
  28.  
  29. import "DPI-C" context function void read_DECODE_MT_PACKET(DECODE_MT_PACKET i);
  30. import "DPI-C" context function void check_DECODE_MT_PACKET(DECODE_MT_PACKET i);
  31. import "DPI-C" context function void step_DECODE_MT_PACKET(DECODE_MT_PACKET i);
  32. import "DPI-C" context function void print_DECODE_MT_PACKET(DECODE_MT_PACKET i);
  33.  
  34.  
  35.  
  36. import "DPI-C" context function void read_DECODE_RS_PACKET(DECODE_RS_PACKET i);
  37. import "DPI-C" context function void check_DECODE_RS_PACKET(DECODE_RS_PACKET i);
  38. import "DPI-C" context function void step_DECODE_RS_PACKET(DECODE_RS_PACKET i);
  39. import "DPI-C" context function void print_DECODE_RS_PACKET(DECODE_RS_PACKET i);
  40.  
  41.  
  42.  
  43. import "DPI-C" context function void read_ROB_MT_PACKET(ROB_MT_PACKET i);
  44. import "DPI-C" context function void check_ROB_MT_PACKET(ROB_MT_PACKET i);
  45. import "DPI-C" context function void step_ROB_MT_PACKET(ROB_MT_PACKET i);
  46. import "DPI-C" context function void print_ROB_MT_PACKET(ROB_MT_PACKET i);
  47.  
  48.  
  49.  
  50. import "DPI-C" context function void read_MT_ROB_PACKET(MT_ROB_PACKET i);
  51. import "DPI-C" context function void check_MT_ROB_PACKET(MT_ROB_PACKET i);
  52. import "DPI-C" context function void step_MT_ROB_PACKET(MT_ROB_PACKET i);
  53. import "DPI-C" context function void print_MT_ROB_PACKET(MT_ROB_PACKET i);
  54.  
  55.  
  56.  
  57. import "DPI-C" context function void read_MT_ENTRY(MT_ENTRY i);
  58. import "DPI-C" context function void check_MT_ENTRY(MT_ENTRY i);
  59. import "DPI-C" context function void step_MT_ENTRY(MT_ENTRY i);
  60. import "DPI-C" context function void print_MT_ENTRY(MT_ENTRY i);
  61.  
  62.  
  63.  
  64. import "DPI-C" context function void read_MT_RS_PACKET(MT_RS_PACKET i);
  65. import "DPI-C" context function void check_MT_RS_PACKET(MT_RS_PACKET i);
  66. import "DPI-C" context function void step_MT_RS_PACKET(MT_RS_PACKET i);
  67. import "DPI-C" context function void print_MT_RS_PACKET(MT_RS_PACKET i);
  68.  
  69.  
  70.  
  71. import "DPI-C" context function void read_CDB_PACKET(CDB_PACKET i);
  72. import "DPI-C" context function void check_CDB_PACKET(CDB_PACKET i);
  73. import "DPI-C" context function void step_CDB_PACKET(CDB_PACKET i);
  74. import "DPI-C" context function void print_CDB_PACKET(CDB_PACKET i);
  75.  
  76.  
  77.  
  78. import "DPI-C" context function void read_RS_ENTRY(RS_ENTRY i);
  79. import "DPI-C" context function void check_RS_ENTRY(RS_ENTRY i);
  80. import "DPI-C" context function void step_RS_ENTRY(RS_ENTRY i);
  81. import "DPI-C" context function void print_RS_ENTRY(RS_ENTRY i);
  82.  
  83.  
  84.  
  85. import "DPI-C" context function void read_IF_DECODE_PACKET(IF_DECODE_PACKET i);
  86. import "DPI-C" context function void check_IF_DECODE_PACKET(IF_DECODE_PACKET i);
  87. import "DPI-C" context function void step_IF_DECODE_PACKET(IF_DECODE_PACKET i);
  88. import "DPI-C" context function void print_IF_DECODE_PACKET(IF_DECODE_PACKET i);
  89.  
  90.  
  91.  
  92. import "DPI-C" context function void read_DECODE_ROB_PACKET(DECODE_ROB_PACKET i);
  93. import "DPI-C" context function void check_DECODE_ROB_PACKET(DECODE_ROB_PACKET i);
  94. import "DPI-C" context function void step_DECODE_ROB_PACKET(DECODE_ROB_PACKET i);
  95. import "DPI-C" context function void print_DECODE_ROB_PACKET(DECODE_ROB_PACKET i);
  96.  
  97.  
  98.  
  99. import "DPI-C" context function void read_FU_ISSUE_PACKET(FU_ISSUE_PACKET i);
  100. import "DPI-C" context function void check_FU_ISSUE_PACKET(FU_ISSUE_PACKET i);
  101. import "DPI-C" context function void step_FU_ISSUE_PACKET(FU_ISSUE_PACKET i);
  102. import "DPI-C" context function void print_FU_ISSUE_PACKET(FU_ISSUE_PACKET i);
  103.  
  104.  
  105.  
  106. import "DPI-C" context function void read_FU_COMPLETE_PACKET(FU_COMPLETE_PACKET i);
  107. import "DPI-C" context function void check_FU_COMPLETE_PACKET(FU_COMPLETE_PACKET i);
  108. import "DPI-C" context function void step_FU_COMPLETE_PACKET(FU_COMPLETE_PACKET i);
  109. import "DPI-C" context function void print_FU_COMPLETE_PACKET(FU_COMPLETE_PACKET i);
  110.  
  111.  
  112.  
  113. import "DPI-C" context function void read_COMPLETE_REGFILE_PACKET(COMPLETE_REGFILE_PACKET i);
  114. import "DPI-C" context function void check_COMPLETE_REGFILE_PACKET(COMPLETE_REGFILE_PACKET i);
  115. import "DPI-C" context function void step_COMPLETE_REGFILE_PACKET(COMPLETE_REGFILE_PACKET i);
  116. import "DPI-C" context function void print_COMPLETE_REGFILE_PACKET(COMPLETE_REGFILE_PACKET i);
  117.  
  118.  
  119.  
  120. import "DPI-C" context function void read_PS_OUT(PS_OUT i);
  121. import "DPI-C" context function void check_PS_OUT(PS_OUT i);
  122. import "DPI-C" context function void step_PS_OUT(PS_OUT i);
  123. import "DPI-C" context function void print_PS_OUT(PS_OUT i);
  124.  
  125.  
  126.  
  127.  
  128.  
  129. typedef struct packed {
  130.  
  131. FU_COMPLETE_PACKET [2:0] alu_result;
  132.  
  133. FU_COMPLETE_PACKET [1:0] ld_result;
  134.  
  135. FU_COMPLETE_PACKET [0:0] st_result;
  136.  
  137. FU_COMPLETE_PACKET [1:0] mul_result;
  138.  
  139. } c_stage_IN_P;
  140.  
  141. typedef struct packed {
  142.  
  143. CDB_PACKET [2:0] cdb;
  144.  
  145. } c_stage_OUT_P;
  146.  
  147.  
  148. import "DPI-C" context function void read_c_stage_IN_P(c_stage_IN_P i);
  149. import "DPI-C" context function void check_c_stage_IN_P(c_stage_IN_P i);
  150. import "DPI-C" context function void step_c_stage_IN_P(c_stage_IN_P i);
  151. import "DPI-C" context function void print_c_stage_IN_P(c_stage_IN_P i);
  152.  
  153.  
  154.  
  155. import "DPI-C" context function void read_c_stage_OUT_P(c_stage_OUT_P i);
  156. import "DPI-C" context function void check_c_stage_OUT_P(c_stage_OUT_P i);
  157. import "DPI-C" context function void step_c_stage_OUT_P(c_stage_OUT_P i);
  158. import "DPI-C" context function void print_c_stage_OUT_P(c_stage_OUT_P i);
  159.  
  160.  
  161. import "DPI-C" context function void read_c_stage_TB_IN(c_stage_IN_P i);
  162. import "DPI-C" context function void read_c_stage_TB_OUT(c_stage_OUT_P i);
  163. import "DPI-C" context function void step_c_stage_TB();
  164. import "DPI-C" context function int check_c_stage_TB();
  165. import "DPI-C" context function void print_c_stage_TB();
  166.  
  167.  
  168.  
  169.  
  170. module testbench;
  171.  
  172. logic clock, reset;
  173. int check;
  174.  
  175. always begin
  176. #5;
  177. clock = ~clock;
  178. end
  179.  
  180. task exit_on_error;
  181. #1;
  182. $display("@@@Failed at time %f", $time);
  183. $finish;
  184. endtask
  185.  
  186.  
  187.  
  188. task clear_in;
  189. in = '0;
  190. endtask
  191.  
  192. c_stage_IN_P in;
  193. c_stage_OUT_P out;
  194.  
  195. c_stage c_stage_0 (
  196.  
  197.  
  198.  
  199. .alu_result(in.alu_result),
  200.  
  201. .ld_result(in.ld_result),
  202.  
  203. .st_result(in.st_result),
  204.  
  205. .mul_result(in.mul_result),
  206.  
  207.  
  208.  
  209. .cdb(out.cdb)
  210.  
  211. );
  212.  
  213.  
  214.  
  215.  
  216.  
  217.  
  218.  
  219.  
  220.  
  221.  
  222.  
  223.  
  224.  
  225.  
  226.  
  227.  
  228.  
  229. task fill_ROB_ENTRY;
  230. output ROB_ENTRY p;
  231. input longint told_idx_, t_idx_, dest_reg_idx_, complete_, branch_, branch_target_, rollback_, halt_;
  232. p.told_idx = told_idx_;
  233. p.t_idx = t_idx_;
  234. p.dest_reg_idx = dest_reg_idx_;
  235. p.complete = complete_;
  236. p.branch = branch_;
  237. p.branch_target = branch_target_;
  238. p.rollback = rollback_;
  239. p.halt = halt_;
  240. endtask
  241.  
  242. task clear_ROB_ENTRY;
  243. output ROB_ENTRY p;
  244. p.told_idx = 0;
  245. p.t_idx = 0;
  246. p.dest_reg_idx = 0;
  247. p.complete = 0;
  248. p.branch = 0;
  249. p.branch_target = 0;
  250. p.rollback = 0;
  251. p.halt = 0;
  252. endtask
  253.  
  254.  
  255.  
  256. task fill_BRANCH_PACKET;
  257. output BRANCH_PACKET p;
  258. input longint valid_, branch_target_, branch_address_;
  259. p.valid = valid_;
  260. p.branch_target = branch_target_;
  261. p.branch_address = branch_address_;
  262. endtask
  263.  
  264. task clear_BRANCH_PACKET;
  265. output BRANCH_PACKET p;
  266. p.valid = 0;
  267. p.branch_target = 0;
  268. p.branch_address = 0;
  269. endtask
  270.  
  271.  
  272.  
  273. task fill_DECODE_MT_PACKET;
  274. output DECODE_MT_PACKET p;
  275. input longint valid_, rs1_idx_, rs2_idx_, dest_reg_idx_;
  276. p.valid = valid_;
  277. p.rs1_idx = rs1_idx_;
  278. p.rs2_idx = rs2_idx_;
  279. p.dest_reg_idx = dest_reg_idx_;
  280. endtask
  281.  
  282. task clear_DECODE_MT_PACKET;
  283. output DECODE_MT_PACKET p;
  284. p.valid = 0;
  285. p.rs1_idx = 0;
  286. p.rs2_idx = 0;
  287. p.dest_reg_idx = 0;
  288. endtask
  289.  
  290.  
  291.  
  292. task fill_DECODE_RS_PACKET;
  293. output DECODE_RS_PACKET p;
  294. input longint NPC_, PC_, opa_select_, opb_select_, inst_, alu_func_, fu_;
  295. p.NPC = NPC_;
  296. p.PC = PC_;
  297. p.opa_select = opa_select_;
  298. p.opb_select = opb_select_;
  299. p.inst = inst_;
  300. p.alu_func = alu_func_;
  301. p.fu = fu_;
  302. endtask
  303.  
  304. task clear_DECODE_RS_PACKET;
  305. output DECODE_RS_PACKET p;
  306. p.NPC = 0;
  307. p.PC = 0;
  308. p.opa_select = 0;
  309. p.opb_select = 0;
  310. p.inst = 0;
  311. p.alu_func = 0;
  312. p.fu = 0;
  313. endtask
  314.  
  315.  
  316.  
  317. task fill_ROB_MT_PACKET;
  318. output ROB_MT_PACKET p;
  319. input longint valid_, retire_told_idx_, retire_t_idx_, dest_reg_idx_;
  320. p.valid = valid_;
  321. p.retire_told_idx = retire_told_idx_;
  322. p.retire_t_idx = retire_t_idx_;
  323. p.dest_reg_idx = dest_reg_idx_;
  324. endtask
  325.  
  326. task clear_ROB_MT_PACKET;
  327. output ROB_MT_PACKET p;
  328. p.valid = 0;
  329. p.retire_told_idx = 0;
  330. p.retire_t_idx = 0;
  331. p.dest_reg_idx = 0;
  332. endtask
  333.  
  334.  
  335.  
  336. task fill_MT_ROB_PACKET;
  337. output MT_ROB_PACKET p;
  338. input longint told_idx_, t_idx_, dest_reg_idx_;
  339. p.told_idx = told_idx_;
  340. p.t_idx = t_idx_;
  341. p.dest_reg_idx = dest_reg_idx_;
  342. endtask
  343.  
  344. task clear_MT_ROB_PACKET;
  345. output MT_ROB_PACKET p;
  346. p.told_idx = 0;
  347. p.t_idx = 0;
  348. p.dest_reg_idx = 0;
  349. endtask
  350.  
  351.  
  352.  
  353. task fill_MT_ENTRY;
  354. output MT_ENTRY p;
  355. input longint t_idx_, ready_;
  356. p.t_idx = t_idx_;
  357. p.ready = ready_;
  358. endtask
  359.  
  360. task clear_MT_ENTRY;
  361. output MT_ENTRY p;
  362. p.t_idx = 0;
  363. p.ready = 0;
  364. endtask
  365.  
  366.  
  367.  
  368.  
  369.  
  370. task fill_CDB_PACKET;
  371. output CDB_PACKET p;
  372. input longint valid_, rob_num_, t_idx_, branch_target_;
  373. p.valid = valid_;
  374. p.rob_num = rob_num_;
  375. p.t_idx = t_idx_;
  376. p.branch_target = branch_target_;
  377. endtask
  378.  
  379. task clear_CDB_PACKET;
  380. output CDB_PACKET p;
  381. p.valid = 0;
  382. p.rob_num = 0;
  383. p.t_idx = 0;
  384. p.branch_target = 0;
  385. endtask
  386.  
  387.  
  388.  
  389.  
  390.  
  391. task fill_IF_DECODE_PACKET;
  392. output IF_DECODE_PACKET p;
  393. input longint valid_, inst_, NPC_, PC_, branch_address_;
  394. p.valid = valid_;
  395. p.inst = inst_;
  396. p.NPC = NPC_;
  397. p.PC = PC_;
  398. p.branch_address = branch_address_;
  399. endtask
  400.  
  401. task clear_IF_DECODE_PACKET;
  402. output IF_DECODE_PACKET p;
  403. p.valid = 0;
  404. p.inst = 0;
  405. p.NPC = 0;
  406. p.PC = 0;
  407. p.branch_address = 0;
  408. endtask
  409.  
  410.  
  411.  
  412.  
  413.  
  414. task fill_FU_ISSUE_PACKET;
  415. output FU_ISSUE_PACKET p;
  416. input longint ALU_free_spaces_, ST_free_spaces_, LD_free_spaces_, MUL_free_spaces_;
  417. p.ALU_free_spaces = ALU_free_spaces_;
  418. p.ST_free_spaces = ST_free_spaces_;
  419. p.LD_free_spaces = LD_free_spaces_;
  420. p.MUL_free_spaces = MUL_free_spaces_;
  421. endtask
  422.  
  423. task clear_FU_ISSUE_PACKET;
  424. output FU_ISSUE_PACKET p;
  425. p.ALU_free_spaces = 0;
  426. p.ST_free_spaces = 0;
  427. p.LD_free_spaces = 0;
  428. p.MUL_free_spaces = 0;
  429. endtask
  430.  
  431.  
  432.  
  433. task fill_FU_COMPLETE_PACKET;
  434. output FU_COMPLETE_PACKET p;
  435. input longint valid_, complete_priority_, rob_num_, value_, t_idx_;
  436. p.valid = valid_;
  437. p.complete_priority = complete_priority_;
  438. p.rob_num = rob_num_;
  439. p.value = value_;
  440. p.t_idx = t_idx_;
  441. endtask
  442.  
  443. task clear_FU_COMPLETE_PACKET;
  444. output FU_COMPLETE_PACKET p;
  445. p.valid = 0;
  446. p.complete_priority = 0;
  447. p.rob_num = 0;
  448. p.value = 0;
  449. p.t_idx = 0;
  450. endtask
  451.  
  452.  
  453.  
  454. task fill_COMPLETE_REGFILE_PACKET;
  455. output COMPLETE_REGFILE_PACKET p;
  456. input longint t_idx_, value_;
  457. p.t_idx = t_idx_;
  458. p.value = value_;
  459. endtask
  460.  
  461. task clear_COMPLETE_REGFILE_PACKET;
  462. output COMPLETE_REGFILE_PACKET p;
  463. p.t_idx = 0;
  464. p.value = 0;
  465. endtask
  466.  
  467.  
  468.  
  469. task fill_PS_OUT;
  470. output PS_OUT p;
  471. input longint select_, p_;
  472. p.select = select_;
  473. p.p = p_;
  474. endtask
  475.  
  476. task clear_PS_OUT;
  477. output PS_OUT p;
  478. p.select = 0;
  479. p.p = 0;
  480. endtask
  481.  
  482.  
  483.  
  484.  
  485. initial begin
  486. clock = 1'b0;
  487. reset = 1'b0;
  488.  
  489.  
  490. clear_in();
  491.  
  492.  
  493. @(negedge clock)
  494. @(negedge clock)
  495. reset = 1'b1;
  496. @(negedge clock)
  497. @(negedge clock)
  498. reset = 1'b0;
  499. @(negedge clock)
  500.  
  501.  
  502. #1 read_c_stage_TB_IN(in);
  503. #1 step_c_stage_TB();
  504. #1 print_c_stage_TB();
  505. #1 read_c_stage_TB_OUT(out);
  506. #1 check = check_c_stage_TB();
  507. if (!check)
  508. exit_on_error();
  509.  
  510.  
  511.  
  512. $finish;
  513. end
  514.  
  515. endmodule
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement