Mirror of my github hw-experiments repository

sim 10KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373
  1. #! /usr/local/Cellar/icarus-verilog/10.1.1/bin/vvp
  2. :ivl_version "10.1 (stable)" "(v10_1_1)";
  3. :ivl_delay_selection "TYPICAL";
  4. :vpi_time_precision + 0;
  5. :vpi_module "system";
  6. :vpi_module "vhdl_sys";
  7. :vpi_module "v2005_math";
  8. :vpi_module "va_math";
  9. S_0x7fa2f94081a0 .scope module, "fifo_tb" "fifo_tb" 2 1;
  10. .timescale 0 0;
  11. v0x7fa2f942c150_0 .var "clk", 0 0;
  12. v0x7fa2f942c210_0 .var "data_in", 15 0;
  13. v0x7fa2f942c2a0_0 .net "data_out", 15 0, v0x7fa2f942bb50_0; 1 drivers
  14. v0x7fa2f942c350_0 .net "empty", 0 0, v0x7fa2f942bbe0_0; 1 drivers
  15. v0x7fa2f942c400_0 .var "fifo_pop", 0 0;
  16. v0x7fa2f942c4d0_0 .var "fifo_push", 0 0;
  17. v0x7fa2f942c560_0 .net "full", 0 0, v0x7fa2f942bcb0_0; 1 drivers
  18. v0x7fa2f942c610_0 .var "reset_n", 0 0;
  19. v0x7fa2f942c6c0_0 .var "tmp", 15 0;
  20. E_0x7fa2f9415f70 .event negedge, v0x7fa2f9417170_0;
  21. E_0x7fa2f9415e20 .event negedge, v0x7fa2f942bf80_0;
  22. S_0x7fa2f941c480 .scope module, "dut" "simple_fifo" 2 9, 3 4 0, S_0x7fa2f94081a0;
  23. .timescale 0 0;
  24. .port_info 0 /INPUT 1 "clk"
  25. .port_info 1 /INPUT 1 "reset_n"
  26. .port_info 2 /INPUT 1 "push"
  27. .port_info 3 /INPUT 1 "pop"
  28. .port_info 4 /INPUT 16 "data_in"
  29. .port_info 5 /OUTPUT 16 "data_out"
  30. .port_info 6 /OUTPUT 1 "full"
  31. .port_info 7 /OUTPUT 1 "empty"
  32. P_0x7fa2f9403670 .param/l "DEPTH" 0 3 5, +C4<00000000000000000000000000001000>;
  33. P_0x7fa2f94036b0 .param/l "WIDTH" 0 3 6, +C4<00000000000000000000000000010000>;
  34. v0x7fa2f9417170_0 .net "clk", 0 0, v0x7fa2f942c150_0; 1 drivers
  35. v0x7fa2f942ba20 .array "data", 0 7, 15 0;
  36. v0x7fa2f942bac0_0 .net "data_in", 15 0, v0x7fa2f942c210_0; 1 drivers
  37. v0x7fa2f942bb50_0 .var "data_out", 15 0;
  38. v0x7fa2f942bbe0_0 .var "empty", 0 0;
  39. v0x7fa2f942bcb0_0 .var "full", 0 0;
  40. v0x7fa2f942bd40_0 .net "pop", 0 0, v0x7fa2f942c400_0; 1 drivers
  41. v0x7fa2f942bdd0_0 .net "push", 0 0, v0x7fa2f942c4d0_0; 1 drivers
  42. v0x7fa2f942be70_0 .var "rd_ptr", 2 0;
  43. v0x7fa2f942bf80_0 .net "reset_n", 0 0, v0x7fa2f942c610_0; 1 drivers
  44. v0x7fa2f942c020_0 .var "wr_ptr", 2 0;
  45. E_0x7fa2f9416e90 .event posedge, v0x7fa2f9417170_0;
  46. .scope S_0x7fa2f941c480;
  47. T_0 ;
  48. %wait E_0x7fa2f9416e90;
  49. %load/vec4 v0x7fa2f942bf80_0;
  50. %flag_set/vec4 8;
  51. %jmp/0xz T_0.0, 8;
  52. %pushi/vec4 0, 0, 3;
  53. %assign/vec4 v0x7fa2f942be70_0, 0;
  54. %pushi/vec4 0, 0, 3;
  55. %assign/vec4 v0x7fa2f942c020_0, 0;
  56. %pushi/vec4 0, 0, 1;
  57. %assign/vec4 v0x7fa2f942bcb0_0, 0;
  58. %pushi/vec4 1, 0, 1;
  59. %assign/vec4 v0x7fa2f942bbe0_0, 0;
  60. %jmp T_0.1;
  61. T_0.0 ;
  62. %load/vec4 v0x7fa2f942bdd0_0;
  63. %load/vec4 v0x7fa2f942bcb0_0;
  64. %inv;
  65. %and;
  66. %flag_set/vec4 8;
  67. %jmp/0xz T_0.2, 8;
  68. %load/vec4 v0x7fa2f942bac0_0;
  69. %load/vec4 v0x7fa2f942c020_0;
  70. %pad/u 5;
  71. %ix/vec4 3;
  72. %ix/load 4, 0, 0; Constant delay
  73. %assign/vec4/a/d v0x7fa2f942ba20, 0, 4;
  74. %load/vec4 v0x7fa2f942c020_0;
  75. %addi 1, 0, 3;
  76. %store/vec4 v0x7fa2f942c020_0, 0, 3;
  77. %load/vec4 v0x7fa2f942c020_0;
  78. %load/vec4 v0x7fa2f942be70_0;
  79. %cmp/e;
  80. %jmp/0xz T_0.4, 4;
  81. %pushi/vec4 1, 0, 1;
  82. %assign/vec4 v0x7fa2f942bcb0_0, 0;
  83. %pushi/vec4 0, 0, 1;
  84. %assign/vec4 v0x7fa2f942bbe0_0, 0;
  85. %jmp T_0.5;
  86. T_0.4 ;
  87. %pushi/vec4 0, 0, 1;
  88. %assign/vec4 v0x7fa2f942bcb0_0, 0;
  89. %pushi/vec4 0, 0, 1;
  90. %assign/vec4 v0x7fa2f942bbe0_0, 0;
  91. T_0.5 ;
  92. T_0.2 ;
  93. %load/vec4 v0x7fa2f942bd40_0;
  94. %load/vec4 v0x7fa2f942bbe0_0;
  95. %inv;
  96. %and;
  97. %flag_set/vec4 8;
  98. %jmp/0xz T_0.6, 8;
  99. %load/vec4 v0x7fa2f942be70_0;
  100. %pad/u 5;
  101. %ix/vec4 4;
  102. %load/vec4a v0x7fa2f942ba20, 4;
  103. %assign/vec4 v0x7fa2f942bb50_0, 0;
  104. %load/vec4 v0x7fa2f942be70_0;
  105. %addi 1, 0, 3;
  106. %store/vec4 v0x7fa2f942be70_0, 0, 3;
  107. %load/vec4 v0x7fa2f942c020_0;
  108. %load/vec4 v0x7fa2f942be70_0;
  109. %cmp/e;
  110. %jmp/0xz T_0.8, 4;
  111. %pushi/vec4 0, 0, 1;
  112. %assign/vec4 v0x7fa2f942bcb0_0, 0;
  113. %pushi/vec4 1, 0, 1;
  114. %assign/vec4 v0x7fa2f942bbe0_0, 0;
  115. %jmp T_0.9;
  116. T_0.8 ;
  117. %pushi/vec4 0, 0, 1;
  118. %assign/vec4 v0x7fa2f942bcb0_0, 0;
  119. %pushi/vec4 0, 0, 1;
  120. %assign/vec4 v0x7fa2f942bbe0_0, 0;
  121. T_0.9 ;
  122. T_0.6 ;
  123. T_0.1 ;
  124. %jmp T_0;
  125. .thread T_0;
  126. .scope S_0x7fa2f94081a0;
  127. T_1 ;
  128. %pushi/vec4 0, 0, 1;
  129. %store/vec4 v0x7fa2f942c150_0, 0, 1;
  130. %pushi/vec4 1, 0, 1;
  131. %store/vec4 v0x7fa2f942c610_0, 0, 1;
  132. %pushi/vec4 4, 0, 32;
  133. T_1.0 %dup/vec4;
  134. %pushi/vec4 0, 0, 32;
  135. %cmp/s;
  136. %jmp/1xz T_1.1, 5;
  137. %jmp/1 T_1.1, 4;
  138. %pushi/vec4 1, 0, 32;
  139. %sub;
  140. %delay 10, 0;
  141. %load/vec4 v0x7fa2f942c150_0;
  142. %inv;
  143. %store/vec4 v0x7fa2f942c150_0, 0, 1;
  144. %jmp T_1.0;
  145. T_1.1 ;
  146. %pop/vec4 1;
  147. %pushi/vec4 0, 0, 1;
  148. %store/vec4 v0x7fa2f942c610_0, 0, 1;
  149. T_1.2 ;
  150. %delay 10, 0;
  151. %load/vec4 v0x7fa2f942c150_0;
  152. %inv;
  153. %store/vec4 v0x7fa2f942c150_0, 0, 1;
  154. %jmp T_1.2;
  155. %end;
  156. .thread T_1;
  157. .scope S_0x7fa2f94081a0;
  158. T_2 ;
  159. %pushi/vec4 0, 0, 16;
  160. %store/vec4 v0x7fa2f942c210_0, 0, 16;
  161. %wait E_0x7fa2f9415e20;
  162. %pushi/vec4 65535, 0, 16;
  163. %store/vec4 v0x7fa2f942c210_0, 0, 16;
  164. %pushi/vec4 8, 0, 32;
  165. T_2.0 %dup/vec4;
  166. %pushi/vec4 0, 0, 32;
  167. %cmp/s;
  168. %jmp/1xz T_2.1, 5;
  169. %jmp/1 T_2.1, 4;
  170. %pushi/vec4 1, 0, 32;
  171. %sub;
  172. %wait E_0x7fa2f9416e90;
  173. %pushi/vec4 1, 0, 1;
  174. %store/vec4 v0x7fa2f942c4d0_0, 0, 1;
  175. %wait E_0x7fa2f9415f70;
  176. %pushi/vec4 0, 0, 1;
  177. %store/vec4 v0x7fa2f942c4d0_0, 0, 1;
  178. %load/vec4 v0x7fa2f942c210_0;
  179. %inv;
  180. %store/vec4 v0x7fa2f942c210_0, 0, 16;
  181. %jmp T_2.0;
  182. T_2.1 ;
  183. %pop/vec4 1;
  184. %load/vec4 v0x7fa2f942c560_0;
  185. %pad/u 32;
  186. %pushi/vec4 1, 0, 32;
  187. %cmp/e;
  188. %flag_get/vec4 4;
  189. %inv;
  190. %load/vec4 v0x7fa2f942c350_0;
  191. %pad/u 32;
  192. %pushi/vec4 0, 0, 32;
  193. %cmp/e;
  194. %flag_get/vec4 4;
  195. %inv;
  196. %and;
  197. %flag_set/vec4 8;
  198. %jmp/0xz T_2.2, 8;
  199. %vpi_call 2 43 "$display", "Test failed!" {0 0 0};
  200. T_2.2 ;
  201. %pushi/vec4 65535, 0, 16;
  202. %store/vec4 v0x7fa2f942c6c0_0, 0, 16;
  203. %pushi/vec4 8, 0, 32;
  204. T_2.4 %dup/vec4;
  205. %pushi/vec4 0, 0, 32;
  206. %cmp/s;
  207. %jmp/1xz T_2.5, 5;
  208. %jmp/1 T_2.5, 4;
  209. %pushi/vec4 1, 0, 32;
  210. %sub;
  211. %wait E_0x7fa2f9416e90;
  212. %pushi/vec4 1, 0, 1;
  213. %store/vec4 v0x7fa2f942c400_0, 0, 1;
  214. %wait E_0x7fa2f9415f70;
  215. %pushi/vec4 0, 0, 1;
  216. %store/vec4 v0x7fa2f942c400_0, 0, 1;
  217. %load/vec4 v0x7fa2f942c2a0_0;
  218. %load/vec4 v0x7fa2f942c6c0_0;
  219. %cmp/ne;
  220. %jmp/0xz T_2.6, 6;
  221. %vpi_call 2 52 "$display", "Test failed!" {0 0 0};
  222. T_2.6 ;
  223. %load/vec4 v0x7fa2f942c6c0_0;
  224. %inv;
  225. %store/vec4 v0x7fa2f942c6c0_0, 0, 16;
  226. %jmp T_2.4;
  227. T_2.5 ;
  228. %pop/vec4 1;
  229. %load/vec4 v0x7fa2f942c560_0;
  230. %pad/u 32;
  231. %pushi/vec4 0, 0, 32;
  232. %cmp/e;
  233. %flag_get/vec4 4;
  234. %inv;
  235. %load/vec4 v0x7fa2f942c350_0;
  236. %pad/u 32;
  237. %pushi/vec4 1, 0, 32;
  238. %cmp/e;
  239. %flag_get/vec4 4;
  240. %inv;
  241. %and;
  242. %flag_set/vec4 8;
  243. %jmp/0xz T_2.8, 8;
  244. %vpi_call 2 57 "$display", "Test failed!" {0 0 0};
  245. T_2.8 ;
  246. %pushi/vec4 5, 0, 32;
  247. T_2.10 %dup/vec4;
  248. %pushi/vec4 0, 0, 32;
  249. %cmp/s;
  250. %jmp/1xz T_2.11, 5;
  251. %jmp/1 T_2.11, 4;
  252. %pushi/vec4 1, 0, 32;
  253. %sub;
  254. %wait E_0x7fa2f9416e90;
  255. %jmp T_2.10;
  256. T_2.11 ;
  257. %pop/vec4 1;
  258. %pushi/vec4 4660, 0, 16;
  259. %store/vec4 v0x7fa2f942c210_0, 0, 16;
  260. %pushi/vec4 8, 0, 32;
  261. T_2.12 %dup/vec4;
  262. %pushi/vec4 0, 0, 32;
  263. %cmp/s;
  264. %jmp/1xz T_2.13, 5;
  265. %jmp/1 T_2.13, 4;
  266. %pushi/vec4 1, 0, 32;
  267. %sub;
  268. %wait E_0x7fa2f9416e90;
  269. %pushi/vec4 1, 0, 1;
  270. %store/vec4 v0x7fa2f942c4d0_0, 0, 1;
  271. %wait E_0x7fa2f9415f70;
  272. %pushi/vec4 0, 0, 1;
  273. %store/vec4 v0x7fa2f942c4d0_0, 0, 1;
  274. %load/vec4 v0x7fa2f942c210_0;
  275. %inv;
  276. %store/vec4 v0x7fa2f942c210_0, 0, 16;
  277. %jmp T_2.12;
  278. T_2.13 ;
  279. %pop/vec4 1;
  280. %load/vec4 v0x7fa2f942c560_0;
  281. %pad/u 32;
  282. %pushi/vec4 1, 0, 32;
  283. %cmp/e;
  284. %flag_get/vec4 4;
  285. %inv;
  286. %load/vec4 v0x7fa2f942c350_0;
  287. %pad/u 32;
  288. %pushi/vec4 0, 0, 32;
  289. %cmp/e;
  290. %flag_get/vec4 4;
  291. %inv;
  292. %and;
  293. %flag_set/vec4 8;
  294. %jmp/0xz T_2.14, 8;
  295. %vpi_call 2 69 "$display", "Test failed!" {0 0 0};
  296. T_2.14 ;
  297. %pushi/vec4 4660, 0, 16;
  298. %store/vec4 v0x7fa2f942c6c0_0, 0, 16;
  299. %pushi/vec4 8, 0, 32;
  300. T_2.16 %dup/vec4;
  301. %pushi/vec4 0, 0, 32;
  302. %cmp/s;
  303. %jmp/1xz T_2.17, 5;
  304. %jmp/1 T_2.17, 4;
  305. %pushi/vec4 1, 0, 32;
  306. %sub;
  307. %wait E_0x7fa2f9416e90;
  308. %pushi/vec4 1, 0, 1;
  309. %store/vec4 v0x7fa2f942c400_0, 0, 1;
  310. %wait E_0x7fa2f9415f70;
  311. %pushi/vec4 0, 0, 1;
  312. %store/vec4 v0x7fa2f942c400_0, 0, 1;
  313. %load/vec4 v0x7fa2f942c2a0_0;
  314. %load/vec4 v0x7fa2f942c6c0_0;
  315. %cmp/ne;
  316. %jmp/0xz T_2.18, 6;
  317. %vpi_call 2 78 "$display", "Test failed!" {0 0 0};
  318. T_2.18 ;
  319. %load/vec4 v0x7fa2f942c6c0_0;
  320. %inv;
  321. %store/vec4 v0x7fa2f942c6c0_0, 0, 16;
  322. %jmp T_2.16;
  323. T_2.17 ;
  324. %pop/vec4 1;
  325. %load/vec4 v0x7fa2f942c560_0;
  326. %pad/u 32;
  327. %pushi/vec4 0, 0, 32;
  328. %cmp/e;
  329. %flag_get/vec4 4;
  330. %inv;
  331. %load/vec4 v0x7fa2f942c350_0;
  332. %pad/u 32;
  333. %pushi/vec4 1, 0, 32;
  334. %cmp/e;
  335. %flag_get/vec4 4;
  336. %inv;
  337. %and;
  338. %flag_set/vec4 8;
  339. %jmp/0xz T_2.20, 8;
  340. %vpi_call 2 83 "$display", "Test failed!" {0 0 0};
  341. T_2.20 ;
  342. %vpi_call 2 85 "$finish" {0 0 0};
  343. %end;
  344. .thread T_2;
  345. .scope S_0x7fa2f94081a0;
  346. T_3 ;
  347. %vpi_func 2 89 "$test$plusargs" 32, "waves=1" {0 0 0};
  348. %cmpi/ne 0, 0, 32;
  349. %jmp/0xz T_3.0, 4;
  350. %vpi_call 2 90 "$dumpfile", "out/waves.vcd" {0 0 0};
  351. %vpi_call 2 91 "$dumpvars", 32'sb00000000000000000000000000000000, S_0x7fa2f94081a0 {0 0 0};
  352. %vpi_func 2 92 "$test$plusargs" 32, "dump_fifo=1" {0 0 0};
  353. %cmpi/ne 0, 0, 32;
  354. %jmp/0xz T_3.2, 4;
  355. %vpi_call 2 93 "$dumpvars", 32'sb00000000000000000000000000000000, &A<v0x7fa2f942ba20, 0> {0 0 0};
  356. %vpi_call 2 94 "$dumpvars", 32'sb00000000000000000000000000000000, &A<v0x7fa2f942ba20, 1> {0 0 0};
  357. %vpi_call 2 95 "$dumpvars", 32'sb00000000000000000000000000000000, &A<v0x7fa2f942ba20, 2> {0 0 0};
  358. %vpi_call 2 96 "$dumpvars", 32'sb00000000000000000000000000000000, &A<v0x7fa2f942ba20, 3> {0 0 0};
  359. %vpi_call 2 97 "$dumpvars", 32'sb00000000000000000000000000000000, &A<v0x7fa2f942ba20, 4> {0 0 0};
  360. %vpi_call 2 98 "$dumpvars", 32'sb00000000000000000000000000000000, &A<v0x7fa2f942ba20, 5> {0 0 0};
  361. %vpi_call 2 99 "$dumpvars", 32'sb00000000000000000000000000000000, &A<v0x7fa2f942ba20, 6> {0 0 0};
  362. %vpi_call 2 100 "$dumpvars", 32'sb00000000000000000000000000000000, &A<v0x7fa2f942ba20, 7> {0 0 0};
  363. T_3.2 ;
  364. T_3.0 ;
  365. %end;
  366. .thread T_3;
  367. # The file index is used to find the file name in the following table.
  368. :file_names 4;
  369. "N/A";
  370. "<interactive>";
  371. "fifo_tb.v";
  372. "simple_fifo.v";