ruby-vpi 20.0.0 → 21.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (686) hide show
  1. data/LICENSE +2 -2
  2. data/Rakefile +2 -3
  3. data/bin/generate/runner.rake +1 -1
  4. data/doc/README +9 -0
  5. data/doc/Rakefile +21 -0
  6. data/doc/api/c/annotated.html +1 -1
  7. data/doc/api/c/binding_8c.html +76 -0
  8. data/doc/api/c/binding_8h.html +76 -0
  9. data/doc/api/c/files.html +9 -8
  10. data/doc/api/c/functions.html +1 -1
  11. data/doc/api/c/functions_vars.html +1 -1
  12. data/doc/api/c/globals.html +61 -11
  13. data/doc/api/c/globals_0x65.html +2 -8
  14. data/doc/api/c/globals_0x70.html +2 -8
  15. data/doc/api/c/globals_0x72.html +45 -25
  16. data/doc/api/c/globals_0x76.html +6 -35
  17. data/doc/api/c/globals_0x78.html +2 -8
  18. data/doc/api/c/globals_defs.html +2 -9
  19. data/doc/api/c/globals_defs_0x65.html +2 -3
  20. data/doc/api/c/globals_defs_0x70.html +2 -3
  21. data/doc/api/c/{globals_enum.html → globals_defs_0x72.html} +25 -7
  22. data/doc/api/c/globals_defs_0x76.html +4 -19
  23. data/doc/api/c/globals_defs_0x78.html +2 -3
  24. data/doc/api/c/globals_func.html +32 -37
  25. data/doc/api/c/globals_type.html +1 -3
  26. data/doc/api/c/globals_vars.html +5 -13
  27. data/doc/api/c/host_8c.html +93 -0
  28. data/doc/api/c/host_8h.html +69 -0
  29. data/doc/api/c/index.html +1 -1
  30. data/doc/api/c/main_8c.html +35 -33
  31. data/doc/api/c/structs__cb__data.html +1 -1
  32. data/doc/api/c/structs__vpi__delay.html +1 -1
  33. data/doc/api/c/structs__vpi__error__info.html +1 -1
  34. data/doc/api/c/structs__vpi__strengthval.html +1 -1
  35. data/doc/api/c/structs__vpi__systf__data.html +1 -1
  36. data/doc/api/c/structs__vpi__time.html +1 -1
  37. data/doc/api/c/structs__vpi__value.html +1 -1
  38. data/doc/api/c/structs__vpi__vecval.html +1 -1
  39. data/doc/api/c/structs__vpi__vlog__info.html +1 -1
  40. data/doc/api/c/user_8c.html +170 -0
  41. data/doc/api/c/user_8h.html +98 -0
  42. data/doc/api/c/util_8h.html +171 -0
  43. data/doc/api/c/verilog_8h.html +2 -158
  44. data/doc/api/c/vpi__user_8h.html +1 -1
  45. data/doc/api/ruby/classes/ERB.html +5 -5
  46. data/doc/api/ruby/classes/ERB.src/{M000025.html → M000026.html} +0 -0
  47. data/doc/api/ruby/classes/FileUtils.html +6 -6
  48. data/doc/api/ruby/classes/FileUtils.src/{M000026.html → M000027.html} +0 -0
  49. data/doc/api/ruby/classes/Float.html +6 -6
  50. data/doc/api/ruby/classes/Float.src/{M000020.html → M000021.html} +0 -0
  51. data/doc/api/ruby/classes/Integer.html +65 -65
  52. data/doc/api/ruby/classes/Integer.src/M000009.html +11 -4
  53. data/doc/api/ruby/classes/Integer.src/M000010.html +4 -4
  54. data/doc/api/ruby/classes/Integer.src/M000011.html +4 -4
  55. data/doc/api/ruby/classes/Integer.src/M000012.html +4 -4
  56. data/doc/api/ruby/classes/Integer.src/M000013.html +4 -4
  57. data/doc/api/ruby/classes/Integer.src/M000014.html +18 -0
  58. data/doc/api/ruby/classes/Integer.src/M000017.html +5 -11
  59. data/doc/api/ruby/classes/Integer.src/M000018.html +14 -8
  60. data/doc/api/ruby/classes/Integer.src/M000019.html +8 -13
  61. data/doc/api/ruby/classes/Integer.src/M000020.html +30 -0
  62. data/doc/api/ruby/classes/Kernel.html +143 -0
  63. data/doc/api/ruby/classes/Object.html +5 -0
  64. data/doc/api/ruby/classes/RDoc.html +5 -5
  65. data/doc/api/ruby/classes/RDoc.src/{M000541.html → M000546.html} +0 -0
  66. data/doc/api/ruby/classes/RubyVPI.html +148 -17
  67. data/doc/api/ruby/classes/RubyVPI.src/M000028.html +19 -0
  68. data/doc/api/ruby/classes/RubyVPI.src/M000029.html +19 -0
  69. data/doc/api/ruby/classes/RubyVPI.src/M000030.html +18 -0
  70. data/doc/api/ruby/classes/RubyVPI.src/M000031.html +18 -0
  71. data/doc/api/ruby/classes/RubyVPI.src/{M000027.html → M000032.html} +9 -1
  72. data/doc/api/ruby/classes/RubyVPI/SIMULATORS.html +5 -5
  73. data/doc/api/ruby/classes/RubyVPI/SIMULATORS.src/{M000028.html → M000033.html} +0 -0
  74. data/doc/api/ruby/classes/String.html +20 -20
  75. data/doc/api/ruby/classes/String.src/M000022.html +22 -4
  76. data/doc/api/ruby/classes/String.src/M000023.html +4 -4
  77. data/doc/api/ruby/classes/String.src/M000024.html +4 -27
  78. data/doc/api/ruby/classes/String.src/M000025.html +41 -0
  79. data/doc/api/ruby/classes/VPI.html +2066 -2066
  80. data/doc/api/ruby/classes/VPI.src/M000034.html +5 -12
  81. data/doc/api/ruby/classes/VPI.src/{M000030.html → M000035.html} +1 -1
  82. data/doc/api/ruby/classes/VPI.src/M000036.html +6 -3
  83. data/doc/api/ruby/classes/VPI.src/M000038.html +12 -3
  84. data/doc/api/ruby/classes/VPI.src/M000039.html +13 -3
  85. data/doc/api/ruby/classes/VPI.src/M000041.html +3 -3
  86. data/doc/api/ruby/classes/VPI.src/M000042.html +3 -3
  87. data/doc/api/ruby/classes/VPI.src/M000043.html +3 -3
  88. data/doc/api/ruby/classes/VPI.src/M000044.html +3 -3
  89. data/doc/api/ruby/classes/VPI.src/M000045.html +3 -3
  90. data/doc/api/ruby/classes/VPI.src/M000046.html +3 -3
  91. data/doc/api/ruby/classes/VPI.src/M000047.html +3 -3
  92. data/doc/api/ruby/classes/VPI.src/M000048.html +3 -3
  93. data/doc/api/ruby/classes/VPI.src/M000049.html +3 -3
  94. data/doc/api/ruby/classes/VPI.src/M000050.html +3 -3
  95. data/doc/api/ruby/classes/VPI.src/M000051.html +3 -3
  96. data/doc/api/ruby/classes/VPI.src/M000052.html +3 -3
  97. data/doc/api/ruby/classes/VPI.src/M000053.html +3 -3
  98. data/doc/api/ruby/classes/VPI.src/M000054.html +3 -3
  99. data/doc/api/ruby/classes/VPI.src/M000055.html +3 -3
  100. data/doc/api/ruby/classes/VPI.src/M000056.html +3 -3
  101. data/doc/api/ruby/classes/VPI.src/M000057.html +3 -3
  102. data/doc/api/ruby/classes/VPI.src/M000058.html +3 -3
  103. data/doc/api/ruby/classes/VPI.src/M000059.html +3 -3
  104. data/doc/api/ruby/classes/VPI.src/M000060.html +3 -3
  105. data/doc/api/ruby/classes/VPI.src/M000061.html +3 -3
  106. data/doc/api/ruby/classes/VPI.src/M000062.html +3 -3
  107. data/doc/api/ruby/classes/VPI.src/M000063.html +3 -3
  108. data/doc/api/ruby/classes/VPI.src/M000064.html +3 -3
  109. data/doc/api/ruby/classes/VPI.src/M000065.html +3 -3
  110. data/doc/api/ruby/classes/VPI.src/M000066.html +3 -3
  111. data/doc/api/ruby/classes/VPI.src/M000067.html +3 -3
  112. data/doc/api/ruby/classes/VPI.src/M000068.html +3 -3
  113. data/doc/api/ruby/classes/VPI.src/M000069.html +3 -3
  114. data/doc/api/ruby/classes/VPI.src/M000070.html +3 -3
  115. data/doc/api/ruby/classes/VPI.src/M000071.html +3 -3
  116. data/doc/api/ruby/classes/VPI.src/M000072.html +3 -3
  117. data/doc/api/ruby/classes/VPI.src/M000073.html +3 -3
  118. data/doc/api/ruby/classes/VPI.src/M000074.html +3 -3
  119. data/doc/api/ruby/classes/VPI.src/M000075.html +3 -3
  120. data/doc/api/ruby/classes/VPI.src/M000076.html +3 -3
  121. data/doc/api/ruby/classes/VPI.src/M000077.html +3 -3
  122. data/doc/api/ruby/classes/VPI.src/M000078.html +3 -3
  123. data/doc/api/ruby/classes/VPI.src/M000079.html +3 -3
  124. data/doc/api/ruby/classes/VPI.src/M000080.html +3 -3
  125. data/doc/api/ruby/classes/VPI.src/M000081.html +3 -3
  126. data/doc/api/ruby/classes/VPI.src/M000082.html +3 -3
  127. data/doc/api/ruby/classes/VPI.src/M000083.html +3 -3
  128. data/doc/api/ruby/classes/VPI.src/M000084.html +3 -3
  129. data/doc/api/ruby/classes/VPI.src/M000085.html +3 -3
  130. data/doc/api/ruby/classes/VPI.src/M000086.html +3 -3
  131. data/doc/api/ruby/classes/VPI.src/M000087.html +3 -3
  132. data/doc/api/ruby/classes/VPI.src/M000088.html +3 -3
  133. data/doc/api/ruby/classes/VPI.src/M000089.html +3 -3
  134. data/doc/api/ruby/classes/VPI.src/M000090.html +3 -3
  135. data/doc/api/ruby/classes/VPI.src/M000091.html +3 -3
  136. data/doc/api/ruby/classes/VPI.src/M000092.html +3 -3
  137. data/doc/api/ruby/classes/VPI.src/M000093.html +3 -3
  138. data/doc/api/ruby/classes/VPI.src/M000094.html +3 -3
  139. data/doc/api/ruby/classes/VPI.src/M000095.html +3 -3
  140. data/doc/api/ruby/classes/VPI.src/M000096.html +3 -3
  141. data/doc/api/ruby/classes/VPI.src/M000097.html +3 -3
  142. data/doc/api/ruby/classes/VPI.src/M000098.html +3 -3
  143. data/doc/api/ruby/classes/VPI.src/M000099.html +3 -3
  144. data/doc/api/ruby/classes/VPI.src/M000100.html +3 -3
  145. data/doc/api/ruby/classes/VPI.src/M000101.html +3 -3
  146. data/doc/api/ruby/classes/VPI.src/M000102.html +3 -3
  147. data/doc/api/ruby/classes/VPI.src/M000103.html +3 -3
  148. data/doc/api/ruby/classes/VPI.src/M000104.html +3 -3
  149. data/doc/api/ruby/classes/VPI.src/M000105.html +3 -3
  150. data/doc/api/ruby/classes/VPI.src/M000106.html +3 -3
  151. data/doc/api/ruby/classes/VPI.src/M000107.html +3 -3
  152. data/doc/api/ruby/classes/VPI.src/M000108.html +3 -3
  153. data/doc/api/ruby/classes/VPI.src/M000109.html +3 -3
  154. data/doc/api/ruby/classes/VPI.src/M000110.html +3 -3
  155. data/doc/api/ruby/classes/VPI.src/M000111.html +3 -3
  156. data/doc/api/ruby/classes/VPI.src/M000112.html +3 -3
  157. data/doc/api/ruby/classes/VPI.src/M000113.html +3 -3
  158. data/doc/api/ruby/classes/VPI.src/M000114.html +3 -3
  159. data/doc/api/ruby/classes/VPI.src/M000115.html +3 -3
  160. data/doc/api/ruby/classes/VPI.src/M000116.html +3 -3
  161. data/doc/api/ruby/classes/VPI.src/M000117.html +3 -3
  162. data/doc/api/ruby/classes/VPI.src/M000118.html +3 -3
  163. data/doc/api/ruby/classes/VPI.src/M000119.html +3 -3
  164. data/doc/api/ruby/classes/VPI.src/M000120.html +3 -3
  165. data/doc/api/ruby/classes/VPI.src/M000121.html +3 -3
  166. data/doc/api/ruby/classes/VPI.src/M000122.html +3 -3
  167. data/doc/api/ruby/classes/VPI.src/M000123.html +3 -3
  168. data/doc/api/ruby/classes/VPI.src/M000124.html +3 -3
  169. data/doc/api/ruby/classes/VPI.src/M000125.html +3 -3
  170. data/doc/api/ruby/classes/VPI.src/M000126.html +3 -3
  171. data/doc/api/ruby/classes/VPI.src/M000127.html +3 -3
  172. data/doc/api/ruby/classes/VPI.src/M000128.html +3 -3
  173. data/doc/api/ruby/classes/VPI.src/M000129.html +3 -3
  174. data/doc/api/ruby/classes/VPI.src/M000130.html +3 -3
  175. data/doc/api/ruby/classes/VPI.src/M000131.html +3 -3
  176. data/doc/api/ruby/classes/VPI.src/M000132.html +3 -3
  177. data/doc/api/ruby/classes/VPI.src/M000133.html +3 -3
  178. data/doc/api/ruby/classes/VPI.src/M000134.html +3 -3
  179. data/doc/api/ruby/classes/VPI.src/M000135.html +3 -3
  180. data/doc/api/ruby/classes/VPI.src/M000136.html +3 -3
  181. data/doc/api/ruby/classes/VPI.src/M000137.html +3 -3
  182. data/doc/api/ruby/classes/VPI.src/M000138.html +3 -3
  183. data/doc/api/ruby/classes/VPI.src/M000139.html +3 -3
  184. data/doc/api/ruby/classes/VPI.src/M000140.html +3 -3
  185. data/doc/api/ruby/classes/VPI.src/M000141.html +3 -3
  186. data/doc/api/ruby/classes/VPI.src/M000142.html +3 -3
  187. data/doc/api/ruby/classes/VPI.src/M000143.html +3 -3
  188. data/doc/api/ruby/classes/VPI.src/M000144.html +3 -3
  189. data/doc/api/ruby/classes/VPI.src/M000145.html +3 -3
  190. data/doc/api/ruby/classes/VPI.src/M000146.html +3 -3
  191. data/doc/api/ruby/classes/VPI.src/M000147.html +3 -3
  192. data/doc/api/ruby/classes/VPI.src/M000148.html +3 -3
  193. data/doc/api/ruby/classes/VPI.src/M000149.html +3 -3
  194. data/doc/api/ruby/classes/VPI.src/M000150.html +3 -3
  195. data/doc/api/ruby/classes/VPI.src/M000151.html +3 -3
  196. data/doc/api/ruby/classes/VPI.src/M000152.html +3 -3
  197. data/doc/api/ruby/classes/VPI.src/M000153.html +3 -3
  198. data/doc/api/ruby/classes/VPI.src/M000154.html +3 -3
  199. data/doc/api/ruby/classes/VPI.src/M000155.html +3 -3
  200. data/doc/api/ruby/classes/VPI.src/M000156.html +3 -3
  201. data/doc/api/ruby/classes/VPI.src/M000157.html +3 -3
  202. data/doc/api/ruby/classes/VPI.src/M000158.html +3 -3
  203. data/doc/api/ruby/classes/VPI.src/M000159.html +3 -3
  204. data/doc/api/ruby/classes/VPI.src/M000160.html +3 -3
  205. data/doc/api/ruby/classes/VPI.src/M000161.html +3 -3
  206. data/doc/api/ruby/classes/VPI.src/M000162.html +3 -3
  207. data/doc/api/ruby/classes/VPI.src/M000163.html +3 -3
  208. data/doc/api/ruby/classes/VPI.src/M000164.html +3 -3
  209. data/doc/api/ruby/classes/VPI.src/M000165.html +3 -3
  210. data/doc/api/ruby/classes/VPI.src/M000166.html +3 -3
  211. data/doc/api/ruby/classes/VPI.src/M000167.html +3 -3
  212. data/doc/api/ruby/classes/VPI.src/M000168.html +3 -3
  213. data/doc/api/ruby/classes/VPI.src/M000169.html +3 -3
  214. data/doc/api/ruby/classes/VPI.src/M000170.html +3 -3
  215. data/doc/api/ruby/classes/VPI.src/M000171.html +3 -3
  216. data/doc/api/ruby/classes/VPI.src/M000172.html +3 -3
  217. data/doc/api/ruby/classes/VPI.src/M000173.html +3 -3
  218. data/doc/api/ruby/classes/VPI.src/M000174.html +3 -3
  219. data/doc/api/ruby/classes/VPI.src/M000175.html +3 -3
  220. data/doc/api/ruby/classes/VPI.src/M000176.html +3 -3
  221. data/doc/api/ruby/classes/VPI.src/M000177.html +3 -3
  222. data/doc/api/ruby/classes/VPI.src/M000178.html +3 -3
  223. data/doc/api/ruby/classes/VPI.src/M000179.html +3 -3
  224. data/doc/api/ruby/classes/VPI.src/M000180.html +3 -3
  225. data/doc/api/ruby/classes/VPI.src/M000181.html +3 -3
  226. data/doc/api/ruby/classes/VPI.src/M000182.html +3 -3
  227. data/doc/api/ruby/classes/VPI.src/M000183.html +3 -3
  228. data/doc/api/ruby/classes/VPI.src/M000184.html +3 -3
  229. data/doc/api/ruby/classes/VPI.src/M000185.html +3 -3
  230. data/doc/api/ruby/classes/VPI.src/M000186.html +3 -3
  231. data/doc/api/ruby/classes/VPI.src/M000187.html +3 -3
  232. data/doc/api/ruby/classes/VPI.src/M000188.html +3 -3
  233. data/doc/api/ruby/classes/VPI.src/M000189.html +3 -3
  234. data/doc/api/ruby/classes/VPI.src/M000190.html +3 -3
  235. data/doc/api/ruby/classes/VPI.src/M000191.html +3 -3
  236. data/doc/api/ruby/classes/VPI.src/M000192.html +3 -3
  237. data/doc/api/ruby/classes/VPI.src/M000193.html +3 -3
  238. data/doc/api/ruby/classes/VPI.src/M000194.html +3 -3
  239. data/doc/api/ruby/classes/VPI.src/M000195.html +3 -3
  240. data/doc/api/ruby/classes/VPI.src/M000196.html +3 -3
  241. data/doc/api/ruby/classes/VPI.src/M000197.html +3 -3
  242. data/doc/api/ruby/classes/VPI.src/M000198.html +3 -3
  243. data/doc/api/ruby/classes/VPI.src/M000199.html +3 -3
  244. data/doc/api/ruby/classes/VPI.src/M000200.html +3 -3
  245. data/doc/api/ruby/classes/VPI.src/M000201.html +3 -3
  246. data/doc/api/ruby/classes/VPI.src/M000202.html +3 -3
  247. data/doc/api/ruby/classes/VPI.src/M000203.html +3 -3
  248. data/doc/api/ruby/classes/VPI.src/M000204.html +3 -3
  249. data/doc/api/ruby/classes/VPI.src/M000205.html +3 -3
  250. data/doc/api/ruby/classes/VPI.src/M000206.html +3 -3
  251. data/doc/api/ruby/classes/VPI.src/M000207.html +3 -3
  252. data/doc/api/ruby/classes/VPI.src/M000208.html +3 -3
  253. data/doc/api/ruby/classes/VPI.src/M000209.html +3 -3
  254. data/doc/api/ruby/classes/VPI.src/M000210.html +3 -3
  255. data/doc/api/ruby/classes/VPI.src/M000211.html +3 -3
  256. data/doc/api/ruby/classes/VPI.src/M000212.html +3 -3
  257. data/doc/api/ruby/classes/VPI.src/M000213.html +3 -3
  258. data/doc/api/ruby/classes/VPI.src/M000214.html +3 -3
  259. data/doc/api/ruby/classes/VPI.src/M000215.html +3 -3
  260. data/doc/api/ruby/classes/VPI.src/M000216.html +3 -3
  261. data/doc/api/ruby/classes/VPI.src/M000217.html +3 -3
  262. data/doc/api/ruby/classes/VPI.src/M000218.html +3 -3
  263. data/doc/api/ruby/classes/VPI.src/M000219.html +3 -3
  264. data/doc/api/ruby/classes/VPI.src/M000220.html +3 -3
  265. data/doc/api/ruby/classes/VPI.src/M000221.html +3 -3
  266. data/doc/api/ruby/classes/VPI.src/M000222.html +3 -3
  267. data/doc/api/ruby/classes/VPI.src/M000223.html +3 -3
  268. data/doc/api/ruby/classes/VPI.src/M000224.html +3 -3
  269. data/doc/api/ruby/classes/VPI.src/M000225.html +3 -3
  270. data/doc/api/ruby/classes/VPI.src/M000226.html +3 -3
  271. data/doc/api/ruby/classes/VPI.src/M000227.html +3 -3
  272. data/doc/api/ruby/classes/VPI.src/M000228.html +3 -3
  273. data/doc/api/ruby/classes/VPI.src/M000229.html +3 -3
  274. data/doc/api/ruby/classes/VPI.src/M000230.html +3 -3
  275. data/doc/api/ruby/classes/VPI.src/M000231.html +3 -3
  276. data/doc/api/ruby/classes/VPI.src/M000232.html +3 -3
  277. data/doc/api/ruby/classes/VPI.src/M000233.html +3 -3
  278. data/doc/api/ruby/classes/VPI.src/M000234.html +3 -3
  279. data/doc/api/ruby/classes/VPI.src/M000235.html +3 -3
  280. data/doc/api/ruby/classes/VPI.src/M000236.html +3 -3
  281. data/doc/api/ruby/classes/VPI.src/M000237.html +3 -3
  282. data/doc/api/ruby/classes/VPI.src/M000238.html +3 -3
  283. data/doc/api/ruby/classes/VPI.src/M000239.html +3 -3
  284. data/doc/api/ruby/classes/VPI.src/M000240.html +3 -3
  285. data/doc/api/ruby/classes/VPI.src/M000241.html +3 -3
  286. data/doc/api/ruby/classes/VPI.src/M000242.html +3 -3
  287. data/doc/api/ruby/classes/VPI.src/M000243.html +3 -3
  288. data/doc/api/ruby/classes/VPI.src/M000244.html +3 -3
  289. data/doc/api/ruby/classes/VPI.src/M000245.html +3 -3
  290. data/doc/api/ruby/classes/VPI.src/M000246.html +3 -3
  291. data/doc/api/ruby/classes/VPI.src/M000247.html +3 -3
  292. data/doc/api/ruby/classes/VPI.src/M000248.html +3 -3
  293. data/doc/api/ruby/classes/VPI.src/M000249.html +3 -3
  294. data/doc/api/ruby/classes/VPI.src/M000250.html +3 -3
  295. data/doc/api/ruby/classes/VPI.src/M000251.html +3 -3
  296. data/doc/api/ruby/classes/VPI.src/M000252.html +3 -3
  297. data/doc/api/ruby/classes/VPI.src/M000253.html +3 -3
  298. data/doc/api/ruby/classes/VPI.src/M000254.html +3 -3
  299. data/doc/api/ruby/classes/VPI.src/M000255.html +3 -3
  300. data/doc/api/ruby/classes/VPI.src/M000256.html +3 -3
  301. data/doc/api/ruby/classes/VPI.src/M000257.html +3 -3
  302. data/doc/api/ruby/classes/VPI.src/M000258.html +3 -3
  303. data/doc/api/ruby/classes/VPI.src/M000259.html +3 -3
  304. data/doc/api/ruby/classes/VPI.src/M000260.html +3 -3
  305. data/doc/api/ruby/classes/VPI.src/M000261.html +3 -3
  306. data/doc/api/ruby/classes/VPI.src/M000262.html +3 -3
  307. data/doc/api/ruby/classes/VPI.src/M000263.html +3 -3
  308. data/doc/api/ruby/classes/VPI.src/M000264.html +3 -3
  309. data/doc/api/ruby/classes/VPI.src/M000265.html +3 -3
  310. data/doc/api/ruby/classes/VPI.src/M000266.html +3 -3
  311. data/doc/api/ruby/classes/VPI.src/M000267.html +3 -3
  312. data/doc/api/ruby/classes/VPI.src/M000268.html +3 -3
  313. data/doc/api/ruby/classes/VPI.src/M000269.html +3 -3
  314. data/doc/api/ruby/classes/VPI.src/M000270.html +3 -3
  315. data/doc/api/ruby/classes/VPI.src/M000271.html +3 -3
  316. data/doc/api/ruby/classes/VPI.src/M000272.html +3 -3
  317. data/doc/api/ruby/classes/VPI.src/M000273.html +3 -3
  318. data/doc/api/ruby/classes/VPI.src/M000274.html +3 -3
  319. data/doc/api/ruby/classes/VPI.src/M000275.html +3 -3
  320. data/doc/api/ruby/classes/VPI.src/M000276.html +3 -3
  321. data/doc/api/ruby/classes/VPI.src/M000277.html +3 -3
  322. data/doc/api/ruby/classes/VPI.src/M000278.html +3 -3
  323. data/doc/api/ruby/classes/VPI.src/M000279.html +3 -3
  324. data/doc/api/ruby/classes/VPI.src/M000280.html +3 -3
  325. data/doc/api/ruby/classes/VPI.src/M000281.html +3 -3
  326. data/doc/api/ruby/classes/VPI.src/M000282.html +3 -3
  327. data/doc/api/ruby/classes/VPI.src/M000283.html +3 -3
  328. data/doc/api/ruby/classes/VPI.src/M000284.html +3 -3
  329. data/doc/api/ruby/classes/VPI.src/M000285.html +3 -3
  330. data/doc/api/ruby/classes/VPI.src/M000286.html +3 -3
  331. data/doc/api/ruby/classes/VPI.src/M000287.html +3 -3
  332. data/doc/api/ruby/classes/VPI.src/M000288.html +3 -3
  333. data/doc/api/ruby/classes/VPI.src/M000289.html +3 -3
  334. data/doc/api/ruby/classes/VPI.src/M000290.html +3 -3
  335. data/doc/api/ruby/classes/VPI.src/M000291.html +3 -3
  336. data/doc/api/ruby/classes/VPI.src/M000292.html +3 -3
  337. data/doc/api/ruby/classes/VPI.src/M000293.html +3 -3
  338. data/doc/api/ruby/classes/VPI.src/M000294.html +3 -3
  339. data/doc/api/ruby/classes/VPI.src/M000295.html +3 -3
  340. data/doc/api/ruby/classes/VPI.src/M000296.html +3 -3
  341. data/doc/api/ruby/classes/VPI.src/M000297.html +3 -3
  342. data/doc/api/ruby/classes/VPI.src/M000298.html +3 -3
  343. data/doc/api/ruby/classes/VPI.src/M000299.html +3 -3
  344. data/doc/api/ruby/classes/VPI.src/M000300.html +3 -3
  345. data/doc/api/ruby/classes/VPI.src/M000301.html +3 -3
  346. data/doc/api/ruby/classes/VPI.src/M000302.html +3 -3
  347. data/doc/api/ruby/classes/VPI.src/M000303.html +3 -3
  348. data/doc/api/ruby/classes/VPI.src/M000304.html +3 -3
  349. data/doc/api/ruby/classes/VPI.src/M000305.html +3 -3
  350. data/doc/api/ruby/classes/VPI.src/M000306.html +3 -3
  351. data/doc/api/ruby/classes/VPI.src/M000307.html +3 -3
  352. data/doc/api/ruby/classes/VPI.src/M000308.html +3 -3
  353. data/doc/api/ruby/classes/VPI.src/M000309.html +3 -3
  354. data/doc/api/ruby/classes/VPI.src/M000310.html +3 -3
  355. data/doc/api/ruby/classes/VPI.src/M000311.html +3 -3
  356. data/doc/api/ruby/classes/VPI.src/M000312.html +3 -3
  357. data/doc/api/ruby/classes/VPI.src/M000313.html +3 -3
  358. data/doc/api/ruby/classes/VPI.src/M000314.html +3 -3
  359. data/doc/api/ruby/classes/VPI.src/M000315.html +3 -3
  360. data/doc/api/ruby/classes/VPI.src/M000316.html +3 -3
  361. data/doc/api/ruby/classes/VPI.src/M000317.html +3 -3
  362. data/doc/api/ruby/classes/VPI.src/M000318.html +3 -3
  363. data/doc/api/ruby/classes/VPI.src/M000319.html +3 -3
  364. data/doc/api/ruby/classes/VPI.src/M000320.html +3 -3
  365. data/doc/api/ruby/classes/VPI.src/M000321.html +3 -3
  366. data/doc/api/ruby/classes/VPI.src/M000322.html +3 -3
  367. data/doc/api/ruby/classes/VPI.src/M000323.html +3 -3
  368. data/doc/api/ruby/classes/VPI.src/M000324.html +3 -3
  369. data/doc/api/ruby/classes/VPI.src/M000325.html +3 -3
  370. data/doc/api/ruby/classes/VPI.src/M000326.html +3 -3
  371. data/doc/api/ruby/classes/VPI.src/M000327.html +3 -3
  372. data/doc/api/ruby/classes/VPI.src/M000328.html +3 -3
  373. data/doc/api/ruby/classes/VPI.src/M000329.html +3 -3
  374. data/doc/api/ruby/classes/VPI.src/M000330.html +3 -3
  375. data/doc/api/ruby/classes/VPI.src/M000331.html +3 -3
  376. data/doc/api/ruby/classes/VPI.src/M000332.html +3 -3
  377. data/doc/api/ruby/classes/VPI.src/M000333.html +3 -3
  378. data/doc/api/ruby/classes/VPI.src/M000334.html +3 -3
  379. data/doc/api/ruby/classes/VPI.src/M000335.html +3 -3
  380. data/doc/api/ruby/classes/VPI.src/M000336.html +3 -3
  381. data/doc/api/ruby/classes/VPI.src/M000337.html +3 -3
  382. data/doc/api/ruby/classes/VPI.src/M000338.html +3 -3
  383. data/doc/api/ruby/classes/VPI.src/M000339.html +3 -3
  384. data/doc/api/ruby/classes/VPI.src/M000340.html +3 -3
  385. data/doc/api/ruby/classes/VPI.src/M000341.html +3 -3
  386. data/doc/api/ruby/classes/VPI.src/M000342.html +3 -3
  387. data/doc/api/ruby/classes/VPI.src/M000343.html +3 -3
  388. data/doc/api/ruby/classes/VPI.src/M000344.html +3 -3
  389. data/doc/api/ruby/classes/VPI.src/M000345.html +3 -3
  390. data/doc/api/ruby/classes/VPI.src/M000346.html +3 -3
  391. data/doc/api/ruby/classes/VPI.src/M000347.html +3 -3
  392. data/doc/api/ruby/classes/VPI.src/M000348.html +3 -3
  393. data/doc/api/ruby/classes/VPI.src/M000349.html +3 -3
  394. data/doc/api/ruby/classes/VPI.src/M000350.html +3 -3
  395. data/doc/api/ruby/classes/VPI.src/M000351.html +3 -3
  396. data/doc/api/ruby/classes/VPI.src/M000352.html +3 -3
  397. data/doc/api/ruby/classes/VPI.src/M000353.html +3 -3
  398. data/doc/api/ruby/classes/VPI.src/M000354.html +3 -3
  399. data/doc/api/ruby/classes/VPI.src/M000355.html +3 -3
  400. data/doc/api/ruby/classes/VPI.src/M000356.html +3 -3
  401. data/doc/api/ruby/classes/VPI.src/M000357.html +3 -3
  402. data/doc/api/ruby/classes/VPI.src/M000358.html +3 -3
  403. data/doc/api/ruby/classes/VPI.src/M000359.html +3 -3
  404. data/doc/api/ruby/classes/VPI.src/M000360.html +3 -3
  405. data/doc/api/ruby/classes/VPI.src/M000361.html +3 -3
  406. data/doc/api/ruby/classes/VPI.src/M000362.html +3 -3
  407. data/doc/api/ruby/classes/VPI.src/M000363.html +3 -3
  408. data/doc/api/ruby/classes/VPI.src/M000364.html +3 -3
  409. data/doc/api/ruby/classes/VPI.src/M000365.html +3 -3
  410. data/doc/api/ruby/classes/VPI.src/M000366.html +3 -3
  411. data/doc/api/ruby/classes/VPI.src/M000367.html +3 -3
  412. data/doc/api/ruby/classes/VPI.src/M000368.html +3 -3
  413. data/doc/api/ruby/classes/VPI.src/M000369.html +3 -3
  414. data/doc/api/ruby/classes/VPI.src/M000370.html +3 -3
  415. data/doc/api/ruby/classes/VPI.src/M000371.html +3 -3
  416. data/doc/api/ruby/classes/VPI.src/M000372.html +3 -3
  417. data/doc/api/ruby/classes/VPI.src/M000373.html +3 -3
  418. data/doc/api/ruby/classes/VPI.src/M000374.html +3 -3
  419. data/doc/api/ruby/classes/VPI.src/M000375.html +3 -3
  420. data/doc/api/ruby/classes/VPI.src/M000376.html +3 -3
  421. data/doc/api/ruby/classes/VPI.src/M000377.html +3 -3
  422. data/doc/api/ruby/classes/VPI.src/M000378.html +3 -3
  423. data/doc/api/ruby/classes/VPI.src/M000379.html +3 -3
  424. data/doc/api/ruby/classes/VPI.src/M000380.html +3 -3
  425. data/doc/api/ruby/classes/VPI.src/M000381.html +3 -3
  426. data/doc/api/ruby/classes/VPI.src/M000382.html +3 -3
  427. data/doc/api/ruby/classes/VPI.src/M000383.html +3 -3
  428. data/doc/api/ruby/classes/VPI.src/M000384.html +3 -3
  429. data/doc/api/ruby/classes/VPI.src/M000385.html +3 -3
  430. data/doc/api/ruby/classes/VPI.src/M000386.html +3 -3
  431. data/doc/api/ruby/classes/VPI.src/M000387.html +3 -3
  432. data/doc/api/ruby/classes/VPI.src/M000388.html +3 -3
  433. data/doc/api/ruby/classes/VPI.src/M000389.html +3 -3
  434. data/doc/api/ruby/classes/VPI.src/M000390.html +3 -3
  435. data/doc/api/ruby/classes/VPI.src/M000391.html +3 -3
  436. data/doc/api/ruby/classes/VPI.src/M000392.html +3 -3
  437. data/doc/api/ruby/classes/VPI.src/M000393.html +3 -3
  438. data/doc/api/ruby/classes/VPI.src/M000394.html +3 -3
  439. data/doc/api/ruby/classes/VPI.src/M000395.html +3 -3
  440. data/doc/api/ruby/classes/VPI.src/M000396.html +3 -3
  441. data/doc/api/ruby/classes/VPI.src/M000397.html +3 -3
  442. data/doc/api/ruby/classes/VPI.src/M000398.html +3 -3
  443. data/doc/api/ruby/classes/VPI.src/M000399.html +3 -3
  444. data/doc/api/ruby/classes/VPI.src/M000400.html +3 -3
  445. data/doc/api/ruby/classes/VPI.src/M000401.html +3 -3
  446. data/doc/api/ruby/classes/VPI.src/M000402.html +3 -3
  447. data/doc/api/ruby/classes/VPI.src/M000403.html +3 -3
  448. data/doc/api/ruby/classes/VPI.src/M000404.html +3 -3
  449. data/doc/api/ruby/classes/VPI.src/M000405.html +3 -3
  450. data/doc/api/ruby/classes/VPI.src/M000406.html +3 -3
  451. data/doc/api/ruby/classes/VPI.src/M000407.html +3 -3
  452. data/doc/api/ruby/classes/VPI.src/M000408.html +3 -3
  453. data/doc/api/ruby/classes/VPI.src/M000409.html +3 -3
  454. data/doc/api/ruby/classes/VPI.src/M000410.html +3 -3
  455. data/doc/api/ruby/classes/VPI.src/M000411.html +3 -3
  456. data/doc/api/ruby/classes/VPI.src/M000412.html +3 -3
  457. data/doc/api/ruby/classes/VPI.src/M000413.html +3 -3
  458. data/doc/api/ruby/classes/VPI.src/M000414.html +3 -3
  459. data/doc/api/ruby/classes/VPI.src/M000415.html +3 -3
  460. data/doc/api/ruby/classes/VPI.src/M000416.html +3 -3
  461. data/doc/api/ruby/classes/VPI.src/M000417.html +3 -3
  462. data/doc/api/ruby/classes/VPI.src/M000418.html +3 -3
  463. data/doc/api/ruby/classes/VPI.src/M000419.html +3 -3
  464. data/doc/api/ruby/classes/VPI.src/M000420.html +3 -3
  465. data/doc/api/ruby/classes/VPI.src/M000421.html +3 -3
  466. data/doc/api/ruby/classes/VPI.src/M000422.html +3 -3
  467. data/doc/api/ruby/classes/VPI.src/M000423.html +3 -3
  468. data/doc/api/ruby/classes/VPI.src/M000424.html +3 -3
  469. data/doc/api/ruby/classes/VPI.src/M000425.html +3 -3
  470. data/doc/api/ruby/classes/VPI.src/M000426.html +3 -3
  471. data/doc/api/ruby/classes/VPI.src/M000427.html +3 -3
  472. data/doc/api/ruby/classes/VPI.src/M000428.html +3 -3
  473. data/doc/api/ruby/classes/VPI.src/M000429.html +3 -3
  474. data/doc/api/ruby/classes/VPI.src/M000430.html +3 -3
  475. data/doc/api/ruby/classes/VPI.src/M000431.html +16 -0
  476. data/doc/api/ruby/classes/VPI.src/{M000040.html → M000432.html} +3 -3
  477. data/doc/api/ruby/classes/VPI.src/{M000037.html → M000433.html} +3 -3
  478. data/doc/api/ruby/classes/VPI.src/M000434.html +16 -0
  479. data/doc/api/ruby/classes/VPI.src/M000435.html +16 -0
  480. data/doc/api/ruby/classes/VPI/Handle.html +498 -498
  481. data/doc/api/ruby/classes/VPI/Handle.src/M000439.html +17 -4
  482. data/doc/api/ruby/classes/VPI/Handle.src/M000440.html +4 -4
  483. data/doc/api/ruby/classes/VPI/Handle.src/{M000436.html → M000441.html} +0 -0
  484. data/doc/api/ruby/classes/VPI/Handle.src/M000444.html +4 -4
  485. data/doc/api/ruby/classes/VPI/Handle.src/{M000435.html → M000445.html} +4 -4
  486. data/doc/api/ruby/classes/VPI/Handle.src/M000448.html +4 -4
  487. data/doc/api/ruby/classes/VPI/Handle.src/{M000443.html → M000449.html} +4 -4
  488. data/doc/api/ruby/classes/VPI/Handle.src/M000452.html +4 -4
  489. data/doc/api/ruby/classes/VPI/Handle.src/{M000447.html → M000453.html} +4 -4
  490. data/doc/api/ruby/classes/VPI/Handle.src/M000456.html +4 -4
  491. data/doc/api/ruby/classes/VPI/Handle.src/M000457.html +18 -0
  492. data/doc/api/ruby/classes/VPI/Handle.src/{M000455.html → M000460.html} +0 -0
  493. data/doc/api/ruby/classes/VPI/Handle.src/M000461.html +4 -7
  494. data/doc/api/ruby/classes/VPI/Handle.src/M000464.html +10 -5
  495. data/doc/api/ruby/classes/VPI/Handle.src/M000466.html +7 -4
  496. data/doc/api/ruby/classes/VPI/Handle.src/M000467.html +14 -4
  497. data/doc/api/ruby/classes/VPI/Handle.src/M000468.html +31 -11
  498. data/doc/api/ruby/classes/VPI/Handle.src/M000469.html +5 -4
  499. data/doc/api/ruby/classes/VPI/Handle.src/M000470.html +5 -4
  500. data/doc/api/ruby/classes/VPI/Handle.src/M000471.html +4 -26
  501. data/doc/api/ruby/classes/VPI/Handle.src/M000472.html +4 -4
  502. data/doc/api/ruby/classes/VPI/Handle.src/M000473.html +15 -6
  503. data/doc/api/ruby/classes/VPI/Handle.src/M000474.html +5 -3
  504. data/doc/api/ruby/classes/VPI/Handle.src/M000475.html +5 -3
  505. data/doc/api/ruby/classes/VPI/Handle.src/M000476.html +27 -3
  506. data/doc/api/ruby/classes/VPI/Handle.src/M000477.html +5 -3
  507. data/doc/api/ruby/classes/VPI/Handle.src/M000478.html +8 -3
  508. data/doc/api/ruby/classes/VPI/Handle.src/M000479.html +3 -3
  509. data/doc/api/ruby/classes/VPI/Handle.src/M000480.html +3 -3
  510. data/doc/api/ruby/classes/VPI/Handle.src/M000481.html +3 -3
  511. data/doc/api/ruby/classes/VPI/Handle.src/M000482.html +3 -3
  512. data/doc/api/ruby/classes/VPI/Handle.src/M000483.html +3 -3
  513. data/doc/api/ruby/classes/VPI/Handle.src/M000484.html +3 -3
  514. data/doc/api/ruby/classes/VPI/Handle.src/M000485.html +3 -3
  515. data/doc/api/ruby/classes/VPI/Handle.src/M000486.html +3 -3
  516. data/doc/api/ruby/classes/VPI/Handle.src/M000487.html +3 -3
  517. data/doc/api/ruby/classes/VPI/Handle.src/M000488.html +3 -3
  518. data/doc/api/ruby/classes/VPI/Handle.src/M000489.html +3 -3
  519. data/doc/api/ruby/classes/VPI/Handle.src/M000490.html +3 -3
  520. data/doc/api/ruby/classes/VPI/Handle.src/M000491.html +3 -3
  521. data/doc/api/ruby/classes/VPI/Handle.src/M000492.html +3 -3
  522. data/doc/api/ruby/classes/VPI/Handle.src/M000493.html +3 -3
  523. data/doc/api/ruby/classes/VPI/Handle.src/M000494.html +3 -3
  524. data/doc/api/ruby/classes/VPI/Handle.src/M000495.html +3 -3
  525. data/doc/api/ruby/classes/VPI/Handle.src/M000496.html +3 -3
  526. data/doc/api/ruby/classes/VPI/Handle.src/M000497.html +3 -3
  527. data/doc/api/ruby/classes/VPI/Handle.src/M000498.html +3 -3
  528. data/doc/api/ruby/classes/VPI/Handle.src/M000499.html +3 -3
  529. data/doc/api/ruby/classes/VPI/Handle.src/M000500.html +3 -3
  530. data/doc/api/ruby/classes/VPI/Handle.src/M000501.html +3 -3
  531. data/doc/api/ruby/classes/VPI/Handle.src/M000502.html +3 -3
  532. data/doc/api/ruby/classes/VPI/Handle.src/M000503.html +3 -3
  533. data/doc/api/ruby/classes/VPI/Handle.src/M000504.html +3 -3
  534. data/doc/api/ruby/classes/VPI/Handle.src/M000505.html +3 -3
  535. data/doc/api/ruby/classes/VPI/Handle.src/M000506.html +3 -3
  536. data/doc/api/ruby/classes/VPI/Handle.src/M000507.html +3 -3
  537. data/doc/api/ruby/classes/VPI/Handle.src/M000508.html +3 -3
  538. data/doc/api/ruby/classes/VPI/Handle.src/M000509.html +3 -3
  539. data/doc/api/ruby/classes/VPI/Handle.src/M000510.html +3 -3
  540. data/doc/api/ruby/classes/VPI/Handle.src/M000511.html +3 -3
  541. data/doc/api/ruby/classes/VPI/Handle.src/M000512.html +3 -3
  542. data/doc/api/ruby/classes/VPI/Handle.src/M000513.html +3 -3
  543. data/doc/api/ruby/classes/VPI/Handle.src/M000514.html +3 -3
  544. data/doc/api/ruby/classes/VPI/Handle.src/M000515.html +3 -3
  545. data/doc/api/ruby/classes/VPI/Handle.src/M000516.html +3 -3
  546. data/doc/api/ruby/classes/VPI/Handle.src/M000517.html +3 -3
  547. data/doc/api/ruby/classes/VPI/Handle.src/M000518.html +3 -3
  548. data/doc/api/ruby/classes/VPI/Handle.src/M000519.html +3 -3
  549. data/doc/api/ruby/classes/VPI/Handle.src/M000520.html +3 -3
  550. data/doc/api/ruby/classes/VPI/Handle.src/M000521.html +3 -3
  551. data/doc/api/ruby/classes/VPI/Handle.src/M000522.html +3 -3
  552. data/doc/api/ruby/classes/VPI/Handle.src/M000523.html +3 -3
  553. data/doc/api/ruby/classes/VPI/Handle.src/M000524.html +3 -3
  554. data/doc/api/ruby/classes/VPI/Handle.src/M000525.html +3 -3
  555. data/doc/api/ruby/classes/VPI/Handle.src/M000526.html +3 -3
  556. data/doc/api/ruby/classes/VPI/Handle.src/M000527.html +3 -3
  557. data/doc/api/ruby/classes/VPI/Handle.src/M000528.html +3 -3
  558. data/doc/api/ruby/classes/VPI/Handle.src/M000529.html +3 -3
  559. data/doc/api/ruby/classes/VPI/Handle.src/M000530.html +3 -3
  560. data/doc/api/ruby/classes/VPI/Handle.src/M000531.html +3 -3
  561. data/doc/api/ruby/classes/VPI/Handle.src/M000532.html +3 -3
  562. data/doc/api/ruby/classes/VPI/Handle.src/M000533.html +3 -3
  563. data/doc/api/ruby/classes/VPI/Handle.src/M000534.html +3 -3
  564. data/doc/api/ruby/classes/VPI/Handle.src/M000535.html +3 -3
  565. data/doc/api/ruby/classes/VPI/Handle.src/M000536.html +3 -3
  566. data/doc/api/ruby/classes/VPI/Handle.src/M000537.html +3 -3
  567. data/doc/api/ruby/classes/VPI/Handle.src/M000538.html +16 -0
  568. data/doc/api/ruby/classes/VPI/Handle.src/M000539.html +16 -0
  569. data/doc/api/ruby/classes/VPI/Handle.src/M000540.html +16 -0
  570. data/doc/api/ruby/classes/VPI/Handle.src/M000541.html +16 -0
  571. data/doc/api/ruby/classes/VPI/Handle.src/M000542.html +16 -0
  572. data/doc/api/ruby/classes/VPI/S_vpi_time.html +16 -16
  573. data/doc/api/ruby/classes/VPI/S_vpi_time.src/{M000538.html → M000543.html} +0 -0
  574. data/doc/api/ruby/classes/VPI/S_vpi_time.src/{M000539.html → M000544.html} +0 -0
  575. data/doc/api/ruby/classes/VPI/S_vpi_value.html +15 -15
  576. data/doc/api/ruby/classes/VPI/S_vpi_value.src/{M000431.html → M000436.html} +1 -1
  577. data/doc/api/ruby/classes/VPI/S_vpi_value.src/{M000432.html → M000437.html} +0 -0
  578. data/doc/api/ruby/classes/VPI/S_vpi_value.src/{M000433.html → M000438.html} +0 -0
  579. data/doc/api/ruby/classes/VerilogParser.html +5 -5
  580. data/doc/api/ruby/classes/VerilogParser.src/{M000003.html → M000004.html} +0 -0
  581. data/doc/api/ruby/classes/VerilogParser/Module.html +5 -5
  582. data/doc/api/ruby/classes/VerilogParser/Module.src/{M000004.html → M000005.html} +0 -0
  583. data/doc/api/ruby/classes/VerilogParser/Module/Port.html +15 -15
  584. data/doc/api/ruby/classes/VerilogParser/Module/Port.src/M000006.html +9 -4
  585. data/doc/api/ruby/classes/VerilogParser/Module/Port.src/M000007.html +4 -4
  586. data/doc/api/ruby/classes/VerilogParser/Module/Port.src/M000008.html +18 -0
  587. data/doc/api/ruby/created.rid +1 -1
  588. data/doc/api/ruby/files/bin/convert_rb.html +1 -1
  589. data/doc/api/ruby/files/bin/generate_rb.html +1 -1
  590. data/doc/api/ruby/files/bin/ruby-vpi.html +1 -1
  591. data/doc/api/ruby/files/lib/ruby-vpi/boot/loader_rb.html +149 -0
  592. data/doc/api/ruby/files/lib/ruby-vpi/boot/loader_rb.src/M000003.html +17 -0
  593. data/doc/api/ruby/files/lib/ruby-vpi/boot/relay_rb.html +114 -0
  594. data/doc/api/ruby/files/lib/ruby-vpi/core/callback_rb.html +1 -1
  595. data/doc/api/ruby/files/lib/ruby-vpi/core/edge-methods_rb.html +1 -1
  596. data/doc/api/ruby/files/lib/ruby-vpi/core/edge_rb.html +1 -1
  597. data/doc/api/ruby/files/lib/ruby-vpi/core/handle_rb.html +1 -1
  598. data/doc/api/ruby/files/lib/ruby-vpi/core/scheduler_rb.html +1 -1
  599. data/doc/api/ruby/files/lib/ruby-vpi/core/struct_rb.html +1 -1
  600. data/doc/api/ruby/files/lib/ruby-vpi/core_rb.html +1 -1
  601. data/doc/api/ruby/files/lib/ruby-vpi/erb_rb.html +1 -1
  602. data/doc/api/ruby/files/lib/ruby-vpi/float_rb.html +1 -1
  603. data/doc/api/ruby/files/lib/ruby-vpi/integer_rb.html +1 -1
  604. data/doc/api/ruby/files/lib/ruby-vpi/rake_rb.html +1 -1
  605. data/doc/api/ruby/files/lib/ruby-vpi/rcov_rb.html +1 -1
  606. data/doc/api/ruby/files/lib/ruby-vpi/rdoc_rb.html +1 -1
  607. data/doc/api/ruby/files/lib/ruby-vpi/runner_boot_loader_rb.html +3 -13
  608. data/doc/api/ruby/files/lib/ruby-vpi/runner_boot_loader_rb.src/M000002.html +3 -3
  609. data/doc/api/ruby/files/lib/ruby-vpi/runner_proxy_rb.html +1 -1
  610. data/doc/api/ruby/files/lib/ruby-vpi/runner_rb.html +1 -1
  611. data/doc/api/ruby/files/lib/ruby-vpi/util_rb.html +1 -1
  612. data/doc/api/ruby/files/lib/ruby-vpi/verilog_parser_rb.html +1 -1
  613. data/doc/api/ruby/files/lib/ruby-vpi_rb.html +1 -1
  614. data/doc/api/ruby/files/ruby-vpi-dynamic_rb.html +1 -1
  615. data/doc/api/ruby/fr_class_index.html +1 -0
  616. data/doc/api/ruby/fr_file_index.html +2 -0
  617. data/doc/api/ruby/fr_method_index.html +544 -539
  618. data/doc/guide.erb +37 -50
  619. data/doc/guide.html +322 -255
  620. data/doc/images/feed-icon-28x28.png +0 -0
  621. data/examples/register_file/register_file_runner.rake +1 -1
  622. data/ext/Rakefile +13 -4
  623. data/ext/binding.c +22 -0
  624. data/ext/binding.h +29 -0
  625. data/ext/extconf.rb +18 -11
  626. data/ext/host.c +75 -0
  627. data/ext/host.h +17 -0
  628. data/ext/main.c +50 -43
  629. data/ext/swig_vpi.i +6 -6
  630. data/ext/user.c +95 -0
  631. data/ext/user.h +23 -0
  632. data/ext/util.h +55 -0
  633. data/ext/verilog.h +5 -52
  634. data/lib/ruby-vpi.rb +11 -3
  635. data/lib/ruby-vpi/boot/loader.rb +162 -0
  636. data/lib/ruby-vpi/boot/relay.rb +47 -0
  637. data/lib/ruby-vpi/core.rb +0 -8
  638. data/lib/ruby-vpi/core/callback.rb +21 -28
  639. data/lib/ruby-vpi/core/handle.rb +14 -4
  640. data/lib/ruby-vpi/core/scheduler.rb +5 -13
  641. data/lib/ruby-vpi/core/struct.rb +1 -1
  642. data/lib/ruby-vpi/runner.rb +10 -2
  643. data/lib/ruby-vpi/runner_boot_loader.rb +127 -85
  644. data/lib/ruby-vpi/runner_proxy.rb +8 -8
  645. metadata +67 -67
  646. data/doc/api/c/common_8h.html +0 -143
  647. data/doc/api/c/globals_0x63.html +0 -120
  648. data/doc/api/c/globals_0x66.html +0 -58
  649. data/doc/api/c/globals_0x6d.html +0 -65
  650. data/doc/api/c/globals_0x74.html +0 -58
  651. data/doc/api/c/globals_eval.html +0 -44
  652. data/doc/api/c/main_8h.html +0 -105
  653. data/doc/api/c/relay_8c.html +0 -174
  654. data/doc/api/c/relay_8h.html +0 -102
  655. data/doc/api/c/vlog_8c.html +0 -157
  656. data/doc/api/c/vlog_8h.html +0 -80
  657. data/doc/api/ruby/classes/Integer.src/M000008.html +0 -25
  658. data/doc/api/ruby/classes/Integer.src/M000016.html +0 -25
  659. data/doc/api/ruby/classes/String.src/M000021.html +0 -36
  660. data/doc/api/ruby/classes/VPI.src/M000029.html +0 -19
  661. data/doc/api/ruby/classes/VPI.src/M000031.html +0 -19
  662. data/doc/api/ruby/classes/VPI.src/M000033.html +0 -25
  663. data/doc/api/ruby/classes/VPI/Handle.src/M000434.html +0 -31
  664. data/doc/api/ruby/classes/VPI/Handle.src/M000451.html +0 -18
  665. data/doc/api/ruby/classes/VPI/Handle.src/M000459.html +0 -24
  666. data/doc/api/ruby/classes/VPI/Handle.src/M000462.html +0 -28
  667. data/doc/api/ruby/classes/VPI/Handle.src/M000463.html +0 -50
  668. data/doc/api/ruby/classes/VPI/Handle.src/M000465.html +0 -19
  669. data/doc/api/ruby/classes/VerilogParser/Module/Port.src/M000005.html +0 -23
  670. data/examples/pipelined_alu/Hw5UnitModel.rb +0 -114
  671. data/examples/pipelined_alu/README +0 -152
  672. data/examples/pipelined_alu/Rakefile +0 -1
  673. data/examples/pipelined_alu/TestHw5UnitModel.rb +0 -72
  674. data/examples/pipelined_alu/hw5_unit.v +0 -128
  675. data/examples/pipelined_alu/hw5_unit_design.rb +0 -45
  676. data/examples/pipelined_alu/hw5_unit_loader.rb +0 -1
  677. data/examples/pipelined_alu/hw5_unit_proto.rb +0 -4
  678. data/examples/pipelined_alu/hw5_unit_runner.rake +0 -48
  679. data/examples/pipelined_alu/hw5_unit_spec.rb +0 -64
  680. data/examples/pipelined_alu/int_gen.rb +0 -45
  681. data/ext/common.h +0 -46
  682. data/ext/main.h +0 -30
  683. data/ext/relay.c +0 -41
  684. data/ext/relay.h +0 -31
  685. data/ext/vlog.c +0 -57
  686. data/ext/vlog.h +0 -26
data/doc/guide.erb CHANGED
@@ -5,49 +5,33 @@
5
5
  # local variables for this document
6
6
  mailing_list_url = 'http://rubyforge.org/mailman/listinfo/ruby-vpi-discuss'
7
7
  mailing_list_link = link(mailing_list_url, "project mailing list")
8
- download_url = 'http://rubyforge.org/frs/?group_id=1339'
9
- source_repo_url = File.join(RubyVPI::Project[:website], 'src')
10
- feed_url = File.join(RubyVPI::Project[:website], 'news.xml')
8
+
9
+ pkg_url = File.join(RubyVPI::Project[:website], 'pkg')
10
+ src_url = File.join(RubyVPI::Project[:website], 'src')
11
+ ann_url = File.join(RubyVPI::Project[:website], 'ann')
12
+ dev_url = File.join(RubyVPI::Project[:website], 'dev')
13
+ log_url = File.join(RubyVPI::Project[:website], 'log')
11
14
 
12
15
  # parameters for the HTML format
13
16
  $title = "Ruby-VPI #{RubyVPI::Project[:version]} user guide"
14
- $authors = { 'Suraj N. Kurapati' => 'http://snk.tuxfamily.org' }
15
- $feeds = { feed_url => :rss }
16
-
17
- # parameters for Gerbil
18
- $unindent = ' '
19
-
20
- class String
21
- def indent aDepthOrNode
22
- amt =
23
- if aDepthOrNode.is_a? Node
24
- aDepthOrNode.depth + 1
25
- else
26
- aDepthOrNode
27
- end
28
-
29
- gsub(/^/, $unindent * amt).strip
30
- end
31
- end
17
+ $authors = { 'Suraj N. Kurapati' => 'http://snk.rubyforge.org' }
18
+ $feeds = { ann_url => :rss }
32
19
  %>
33
20
 
34
21
  <% header_inside_below do %>
35
- <div style="text-align: left; margin-top: 2em">
36
-
37
- * "News feed":<%= feed_url %>
38
- - project news and release announcements.
39
- * "Download area":<%= download_url %>
40
- - place to obtain release packages.
41
- * "Mailing list":<%= mailing_list_url %>
42
- - ask questions, get help, and discuss.
43
- * "Reference":api/
44
- - API documentation for source code.
45
- * "Talks":http://ruby-vpi.rubyforge.org/talks/
46
- - archive of presentations and seminars.
47
- * "Papers":http://ruby-vpi.rubyforge.org/papers/
48
- - archive of research and publications.
49
-
50
- </div>
22
+ "Release notes and project news":<%= log_url %> &mdash; "Subscribe !images/feed-icon-28x28.png!":<%= ann_url %>
23
+
24
+ "Downloads":<%= pkg_url %> - obtain the newest release package.
25
+
26
+ "Talks":http://ruby-vpi.rubyforge.org/talks/ - archive of presentations and seminars.
27
+
28
+ "Papers":http://ruby-vpi.rubyforge.org/papers/ - archive of research and publications.
29
+
30
+ "Mailing list":<%= mailing_list_url %> - ask questions, get help, and discuss.
31
+
32
+ "Reference":api/index.html - API documentation for source code.
33
+
34
+ "Developer feed":<%= dev_url %> - news about repository commits.
51
35
  <% end %>
52
36
 
53
37
  <% chapter "Introduction" do %>
@@ -200,7 +184,7 @@
200
184
  |_. Simulator |_. Notes |
201
185
  | "Synopsys VCS":http://www.synopsys.com/products/simulation/simulation.html | Any version that supports the <tt>-load</tt> option is acceptable. |
202
186
  | "Mentor Modelsim":http://www.model.com | Any version that supports the <tt>-pli</tt> option is acceptable. |
203
- | "Cadence NC-Sim":http://www.cadence.com/products/functional_ver/nc-verilog/ | Any version that supports the <tt>+loadvpi</tt> option is acceptable. |
187
+ | "Cadence NC-Sim":http://www.cadence.com/products/functional_ver/nc-verilog/ | Any version that supports the <tt>+loadvpi</tt> option is acceptable for Ruby-VPI versions 20.0.0 or older. Version 21.0.0 of Ruby-VPI <%= xref "problem.ncsim", "does not work with Cadence NC-Sim" %>. |
204
188
  | "GPL Cver":http://www.pragmatic-c.com/gpl-cver/ | Version 2.11a or newer is acceptable. |
205
189
  | "Icarus Verilog":http://www.geda.seul.org/tools/icarus/index.html | Version 0.8 is _mostly_ acceptable because you *will not* be able to <%= xref "vpi.handles.relatives", "access child handles through method calls" %>. The reason for this limitation is explained in <%= xref 'problems.ivl.vpi_handle_by_name.absolute-paths' %>. |
206
190
  <% end %>
@@ -215,7 +199,6 @@
215
199
 
216
200
  <% paragraph "Libraries" do %>
217
201
  |_. Library |_. Notes |
218
- | "POSIX threads (pthreads)":http://en.wikipedia.org/wiki/Pthreads | Header and linkable object files, and operating system support for this library are necessary. |
219
202
  | "RubyGems":http://rubyforge.org/frs/?group_id=126 | Any recent version should be acceptable. You can install RubyGems by following "these instructions":http://www.rubygems.org/read/chapter/3. |
220
203
  <% end %>
221
204
  <% end %>
@@ -245,8 +228,8 @@
245
228
  gem install ruby-vpi
246
229
  ruby-vpi -v
247
230
 
248
- Otherwise, follow these instructions:
249
- # Download the newest <tt>tar.gz</tt> release package from "the project download area":<%= download_url %>.
231
+ Alternatively, if you do not wish to use RubyGems:
232
+ # Download the newest <tt>tar.gz</tt> release package from "the project download area":<%= pkg_url %>.
250
233
  # Extract the release package anywhere you want on your system.
251
234
  # Go inside the extracted directory and run the following commands:
252
235
 
@@ -864,12 +847,12 @@
864
847
 
865
848
  Now that we have identified a set of expectations for our design, we are ready to implement them in our specification. This process is illustrated by <%= xref "fig:RSpec/counter_spec.rb" %> and <%= xref "fig:xUnit/counter_spec.rb" %>.
866
849
 
867
- <% example "Specification implemented in RSpec format", "fig:RSpec/counter_spec.rb" do |n| %>
868
- <code><%= File.read('examples/counter/RSpec/counter_spec.rb').indent(n) %></code>
850
+ <% example "Specification implemented in RSpec format", "fig:RSpec/counter_spec.rb" do %>
851
+ <code><%= File.read('examples/counter/RSpec/counter_spec.rb') %></code>
869
852
  <% end %>
870
853
 
871
- <% example "Specification implemented in xUnit format", "fig:xUnit/counter_spec.rb" do |n| %>
872
- <code><%= File.read('examples/counter/xUnit/counter_spec.rb').indent(n) %></code>
854
+ <% example "Specification implemented in xUnit format", "fig:xUnit/counter_spec.rb" do %>
855
+ <code><%= File.read('examples/counter/xUnit/counter_spec.rb') %></code>
873
856
  <% end %>
874
857
 
875
858
  Before we continue,
@@ -880,8 +863,8 @@
880
863
  <% section "Implement the prototype", "usage.tutorial.implement-proto" do %>
881
864
  Now that we have a specification against which to verify our design let us build a prototype of our design. By doing so, we exercise our specification, experience potential problems that may arise when we later implement our design in Verilog, and gain confidence in our work. The result of this proceess is illustrated by <%= xref "fig:counter_proto.rb" %>.
882
865
 
883
- <% example "Ruby prototype of our Verilog design", "fig:counter_proto.rb" do |n| %>
884
- <code><%= File.read('examples/counter/RSpec/counter_proto.rb').indent(n) %></code>
866
+ <% example "Ruby prototype of our Verilog design", "fig:counter_proto.rb" do %>
867
+ <code><%= File.read('examples/counter/RSpec/counter_proto.rb') %></code>
885
868
  <% end %>
886
869
 
887
870
  Before we continue, replace the contents of the files named <tt>RSpec/counter_proto.rb</tt> and <tt>xUnit/counter_proto.rb</tt> with the source code shown in <%= xref "fig:counter_proto.rb" %>.
@@ -930,8 +913,8 @@
930
913
  <% section "Implement the design", "usage.tutorial.implement-design" do %>
931
914
  Now that we have implemented and verified our prototype, we are ready to implement our design This is often quite simple because we translate _existing_ code from Ruby (our prototype) into Verilog (our design). The result of this process is illustrated by <%= xref "fig:counter.v_impl" %>.
932
915
 
933
- <% example "Implementation of a simple up-counter with synchronous reset", "fig:counter.v_impl" do |n| %>
934
- <code lang="verilog"><%= File.read('examples/counter/counter.v').indent(n) %></code>
916
+ <% example "Implementation of a simple up-counter with synchronous reset", "fig:counter.v_impl" do %>
917
+ <code lang="verilog"><%= File.read('examples/counter/counter.v') %></code>
935
918
  <% end %>
936
919
 
937
920
  Before we continue, replace the contents of the files named <tt>RSpec/counter.v</tt> and <tt>xUnit/counter.v</tt> with the source code shown in <%= xref "fig:counter.v_impl" %>
@@ -971,7 +954,7 @@
971
954
  <% end %>
972
955
 
973
956
  <% section "More examples", "usage.examples" do %>
974
- The <tt>examples</tt> directory ("browse it online":<%= source_repo_url %>/examples/) contains several example tests which illustrate how Ruby-VPI can be used. Each example has an associated <tt>Rakefile</tt> which simplifies the process of running it. Therefore, simply navigate into an example directory and run the <pre>rake</pre> command to get started.
957
+ The <tt>examples</tt> directory ("browse it online":<%= src_url %>/examples/) contains several example tests which illustrate how Ruby-VPI can be used. Each example has an associated <tt>Rakefile</tt> which simplifies the process of running it. Therefore, simply navigate into an example directory and run the <pre>rake</pre> command to get started.
975
958
  <% end %>
976
959
  <% end %>
977
960
  <% end %>
@@ -1071,6 +1054,10 @@
1071
1054
  In version 0.8 of Icarus Verilog, the @vpi_control(vpiReset)@ VPI function causes an assertion to fail inside the simulator. As a result, the simulation terminates and a core dump is produced.
1072
1055
  <% end %>
1073
1056
  <% end %>
1057
+
1058
+ <% section "Cadence NC-Sim", "problem.ncsim" do %>
1059
+ *ncsim* crashes with Ruby-VPI 21.0.0. The problem is most likely an interaction issue with Ruby's threads implementation because *ncsim* worked fine with a "POSIX threads (pthreads)":http://en.wikipedia.org/wiki/Pthreads based implementation of Ruby-VPI (version 20.0.0).
1060
+ <% end %>
1074
1061
  <% end %>
1075
1062
 
1076
1063
  <% chapter "Glossary", "glossary" do %>
data/doc/guide.html CHANGED
@@ -2,11 +2,11 @@
2
2
  <html>
3
3
  <head>
4
4
  <meta http-equiv="content-type" content="text/html; charset=utf-8"/>
5
- <meta name="date" content="27 January 2008"/>
5
+ <meta name="date" content="08 June 2008"/>
6
6
  <meta name="author" content="Suraj N. Kurapati"/>
7
- <meta name="generator" content="Gerbil 1.1.0"/>
8
- <link rel="alternate" type="application/rss+xml" href="http://ruby-vpi.rubyforge.org/news.xml"/>
9
- <title>Ruby-VPI 20.0.0 user guide</title>
7
+ <meta name="generator" content="Gerbil 3.0.2"/>
8
+ <link rel="alternate" type="application/rss+xml" href="http://ruby-vpi.rubyforge.org/ann"/>
9
+ <title>Ruby-VPI 21.0.0 user guide</title>
10
10
 
11
11
  <style type="text/css" media="screen">
12
12
  body
@@ -25,6 +25,18 @@
25
25
  font-family : Cambria, Georgia, serif;
26
26
  }
27
27
 
28
+ /* lists */
29
+
30
+ #content li:first-child
31
+ {
32
+ margin-top : 1em;
33
+ }
34
+
35
+ #content li
36
+ {
37
+ margin-bottom : 1em;
38
+ }
39
+
28
40
  /* headings */
29
41
 
30
42
  h1,
@@ -105,7 +117,7 @@
105
117
  padding : 1em;
106
118
  border : 1px solid #C0C0C0;
107
119
  vertical-align : top;
108
- background-color : #FFFFFF;
120
+ background-color : inherit;
109
121
  }
110
122
 
111
123
  th
@@ -117,10 +129,35 @@
117
129
 
118
130
  #header
119
131
  {
120
- margin-bottom : 5em;
121
132
  text-align : center;
122
133
  }
123
134
 
135
+ .header_outside_above,
136
+ #header,
137
+ .header_outside_below
138
+ {
139
+ margin-bottom : 5em;
140
+ }
141
+
142
+ .footer_outside_above,
143
+ #footer,
144
+ .footer_outside_below
145
+ {
146
+ margin-top : 5em;
147
+ }
148
+
149
+ #header .header_inside_above,
150
+ #footer .footer_inside_above
151
+ {
152
+ margin-bottom : 4em;
153
+ }
154
+
155
+ #header .header_inside_below,
156
+ #footer .footer_inside_below
157
+ {
158
+ margin-top : 4em;
159
+ }
160
+
124
161
  #abstract
125
162
  {
126
163
  margin-bottom : 5em;
@@ -157,7 +194,6 @@
157
194
  {
158
195
  border-top : thick dotted #DCDCDC;
159
196
  padding-top : 1em;
160
- margin-top : 5em;
161
197
  text-align : center;
162
198
  }
163
199
 
@@ -279,55 +315,21 @@
279
315
  max-width : 36em;
280
316
  }
281
317
 
282
- /* hyperlinks */
283
-
284
- a
285
- {
286
- color : #0000FF;
287
- text-decoration : none;
288
- }
289
-
290
- a:visited
291
- {
292
- color : #800080;
293
- }
294
-
295
- a:hover
296
- {
297
- color : #FF0000;
298
- text-decoration : underline;
299
- }
300
-
301
- a:target
302
- {
303
- color : #FF0000;
304
- text-decoration : underline;
305
- }
306
-
307
- a.toc:link,
308
- a.toc:visited
309
- {
310
- text-decoration : none;
311
- z-index : 1;
312
- }
313
-
314
- a img
315
- {
316
- border : none;
317
- }
318
+ /* emphasis */
318
319
 
319
- /*
320
- mark external links with a symbol to help the user
321
- distinguish between internal and external links
322
- */
323
- a:after
320
+ blockquote
324
321
  {
325
- content: "∗";
322
+ margin : 1em;
323
+ border : 5px dotted #C0C0C0;
324
+ padding : 1em;
325
+ color : #444;
326
326
  }
327
327
 
328
- a[href^="#"]:after
328
+ hr
329
329
  {
330
- content: "";
330
+ height : 0;
331
+ border : 0;
332
+ border-top : 2px solid #FF0000;
331
333
  }
332
334
 
333
335
  /* source code */
@@ -346,7 +348,7 @@
346
348
  background-color : #FFFAF0;
347
349
  }
348
350
 
349
- /* output of syntax colorizer */
351
+ /* output of the syntax coloring library */
350
352
  .code
351
353
  {
352
354
  background-color : #FFFFF0;
@@ -354,12 +356,12 @@
354
356
 
355
357
  pre
356
358
  {
359
+ cursor : text;
357
360
  line-height : normal;
358
361
  border : 1px dashed #C0C0C0;
359
362
  background-color : #F5FFDF;
360
363
  padding : 1em;
361
364
  overflow : auto;
362
- cursor : text;
363
365
  }
364
366
 
365
367
  /*
@@ -378,20 +380,42 @@
378
380
  }
379
381
  */
380
382
 
381
- /* emphasis */
383
+ /* hyperlinks */
382
384
 
383
- blockquote
385
+ a > img
384
386
  {
385
- margin : 1em;
386
- border : 5px dotted #C0C0C0;
387
- padding : 1em;
388
- color : #444;
387
+ border : none;
389
388
  }
390
389
 
391
- hr
390
+ a:link
391
+ {
392
+ color : #0000FF;
393
+ text-decoration : none;
394
+ }
395
+
396
+ a:visited
397
+ {
398
+ color : #9400D3;
399
+ text-decoration : none;
400
+ }
401
+
402
+ a:hover
392
403
  {
393
- color : #FF0000; /* for IE6 */
394
- background-color : #FF0000; /* for Firefox */
404
+ color : #FF0000;
405
+ text-decoration : underline;
406
+ }
407
+
408
+ a:target
409
+ {
410
+ color : #FF0000;
411
+ font-weight : bold;
412
+ }
413
+
414
+ a.toc:link,
415
+ a.toc:visited
416
+ {
417
+ text-decoration : none;
418
+ z-index : 1;
395
419
  }
396
420
 
397
421
  </style>
@@ -412,6 +436,18 @@
412
436
  font-family : Cambria, Georgia, serif;
413
437
  }
414
438
 
439
+ /* lists */
440
+
441
+ #content li:first-child
442
+ {
443
+ margin-top : 1em;
444
+ }
445
+
446
+ #content li
447
+ {
448
+ margin-bottom : 1em;
449
+ }
450
+
415
451
  /* headings */
416
452
 
417
453
  h1,
@@ -492,7 +528,7 @@
492
528
  padding : 1em;
493
529
  border : 1px solid #C0C0C0;
494
530
  vertical-align : top;
495
- background-color : #FFFFFF;
531
+ background-color : inherit;
496
532
  }
497
533
 
498
534
  th
@@ -504,10 +540,35 @@
504
540
 
505
541
  #header
506
542
  {
507
- margin-bottom : 5em;
508
543
  text-align : center;
509
544
  }
510
545
 
546
+ .header_outside_above,
547
+ #header,
548
+ .header_outside_below
549
+ {
550
+ margin-bottom : 5em;
551
+ }
552
+
553
+ .footer_outside_above,
554
+ #footer,
555
+ .footer_outside_below
556
+ {
557
+ margin-top : 5em;
558
+ }
559
+
560
+ #header .header_inside_above,
561
+ #footer .footer_inside_above
562
+ {
563
+ margin-bottom : 4em;
564
+ }
565
+
566
+ #header .header_inside_below,
567
+ #footer .footer_inside_below
568
+ {
569
+ margin-top : 4em;
570
+ }
571
+
511
572
  #abstract
512
573
  {
513
574
  margin-bottom : 5em;
@@ -544,7 +605,6 @@
544
605
  {
545
606
  border-top : thick dotted #DCDCDC;
546
607
  padding-top : 1em;
547
- margin-top : 5em;
548
608
  text-align : center;
549
609
  }
550
610
 
@@ -659,7 +719,24 @@
659
719
  _margin : auto; /* for IE6 */
660
720
  }
661
721
 
662
- /* headings */
722
+ /* source code */
723
+
724
+ tt
725
+ {
726
+ color : inherit;
727
+ background-color : inherit;
728
+ font-weight : normal;
729
+ }
730
+
731
+ pre,
732
+ .code
733
+ {
734
+ border : none;
735
+ overflow : visible;
736
+ background-color : inherit;
737
+ }
738
+
739
+ /* headings */
663
740
 
664
741
  h1,
665
742
  h2,
@@ -684,8 +761,8 @@
684
761
 
685
762
  a:after
686
763
  {
687
- content : " (" attr(href) ")";
688
- font-family : sans-serif;
764
+ content : " " attr(href);
765
+ font-family : Consolas, "Lucida Console", monospace;
689
766
  font-weight : normal;
690
767
  font-size : 90%;
691
768
  }
@@ -713,23 +790,6 @@
713
790
  font-style : normal;
714
791
  }
715
792
 
716
- /* source code */
717
-
718
- tt
719
- {
720
- color : inherit;
721
- background-color : inherit;
722
- font-weight : normal;
723
- }
724
-
725
- pre,
726
- .code
727
- {
728
- border : none;
729
- overflow : visible;
730
- background-color : inherit;
731
- }
732
-
733
793
  /* document structure */
734
794
 
735
795
  #lof
@@ -758,42 +818,43 @@
758
818
  <div id="header">
759
819
 
760
820
 
761
- <h1 class="title">Ruby-VPI 20.0.0 user guide</h1>
762
- <h2 class="authors"><a href="http://snk.tuxfamily.org">Suraj N. Kurapati</a></h2>
763
- <h3 class="date">27 January 2008</h3>
764
- <div style="text-align: left; margin-top: 2em">
821
+ <h1 class="title">Ruby-VPI 21.0.0 user guide</h1>
822
+ <h2 class="authors"><a href="http://snk.rubyforge.org">Suraj N. Kurapati</a></h2>
823
+ <h3 class="date">08 June 2008</h3>
824
+ <div class="header_inside_below"><p><a href="http://ruby-vpi.rubyforge.org/log">Release notes and project news</a> &mdash; <a href="http://ruby-vpi.rubyforge.org/ann">Subscribe <img src="images/feed-icon-28x28.png" alt="" /></a></p>
765
825
 
766
- <ul>
767
- <li><a href="http://ruby-vpi.rubyforge.org/news.xml">News feed</a>
768
- &#8211; project news and release announcements.</li>
769
- <li><a href="http://rubyforge.org/frs/?group_id=1339">Download area</a>
770
- &#8211; place to obtain release packages.</li>
771
- <li><a href="http://rubyforge.org/mailman/listinfo/ruby-vpi-discuss">Mailing list</a>
772
- &#8211; ask questions, get help, and discuss.</li>
773
- <li><a href="api/">Reference</a>
774
- &#8211; API documentation for source code.</li>
775
- <li><a href="http://ruby-vpi.rubyforge.org/talks/">Talks</a>
776
- &#8211; archive of presentations and seminars.</li>
777
- <li><a href="http://ruby-vpi.rubyforge.org/papers/">Papers</a>
778
- &#8211; archive of research and publications.</li>
779
- </ul>
780
826
 
827
+ <p><a href="http://ruby-vpi.rubyforge.org/pkg">Downloads</a> &#8211; obtain the newest release package.</p>
781
828
 
782
- </div>
829
+
830
+ <p><a href="http://ruby-vpi.rubyforge.org/talks/">Talks</a> &#8211; archive of presentations and seminars.</p>
831
+
832
+
833
+ <p><a href="http://ruby-vpi.rubyforge.org/papers/">Papers</a> &#8211; archive of research and publications.</p>
834
+
835
+
836
+ <p><a href="http://rubyforge.org/mailman/listinfo/ruby-vpi-discuss">Mailing list</a> &#8211; ask questions, get help, and discuss.</p>
837
+
838
+
839
+ <p><a href="api/index.html">Reference</a> &#8211; API documentation for source code.</p>
840
+
841
+
842
+ <p><a href="http://ruby-vpi.rubyforge.org/dev">Developer feed</a> &#8211; news about repository commits.</p></div>
783
843
  </div>
784
844
 
785
845
 
846
+
786
847
 
787
- <div id="toc"><h1>Contents</h1> <ul><li>1&nbsp;&nbsp;<a id="a-606704428" href="#Introduction">Introduction</a><ul><li>1.1&nbsp;&nbsp;<a id="a-606710768" href="#Features">Features</a></li><li>1.2&nbsp;&nbsp;<a id="a-606745598" href="#License">License</a></li><li>1.3&nbsp;&nbsp;<a id="a-606752538" href="#Appetizers">Appetizers</a></li><li>1.4&nbsp;&nbsp;<a id="a-606764318" href="#Applications">Applications</a></li><li>1.5&nbsp;&nbsp;<a id="a-606770018" href="#Related-works">Related works</a></li></ul></li><li>2&nbsp;&nbsp;<a id="a-606777838" href="#setup">Setup</a><ul><li>2.1&nbsp;&nbsp;<a id="a-606779348" href="#setup.reqs">Requirements</a></li><li>2.2&nbsp;&nbsp;<a id="a-606789068" href="#setup.recom">Recommendations</a></li><li>2.3&nbsp;&nbsp;<a id="a-606794098" href="#setup.inst">Installation</a><ul><li>2.3.1&nbsp;&nbsp;<a id="a-606799148" href="#setup.inst.windows">Installing on Windows</a></li></ul></li><li>2.4&nbsp;&nbsp;<a id="a-606801708" href="#setup.maintenance">Maintenance</a></li><li>2.5&nbsp;&nbsp;<a id="a-606803858" href="#setup.manifest">Manifest</a></li></ul></li><li>3&nbsp;&nbsp;<a id="a-606810448" href="#organization">Background</a><ul><li>3.1&nbsp;&nbsp;<a id="a-606815068" href="#Motivation">Motivation</a></li><li>3.2&nbsp;&nbsp;<a id="a-606817088" href="#organization.tests">Tests</a></li></ul></li><li>4&nbsp;&nbsp;<a id="a-606822688" href="#usage">Usage</a><ul><li>4.1&nbsp;&nbsp;<a id="a-606824258" href="#usage.theory">Theory of operation</a><ul><li>4.1.1&nbsp;&nbsp;<a id="a-606835008" href="#Test-files">Test files</a></li></ul></li><li>4.2&nbsp;&nbsp;<a id="a-606840438" href="#overview.relay">Interacting with the Verilog simulator</a></li><li>4.3&nbsp;&nbsp;<a id="a-606846998" href="#vpi">VPI in Ruby</a><ul><li>4.3.1&nbsp;&nbsp;<a id="a-606850438" href="#vpi.handles">Handles</a><ul><li>4.3.1.1&nbsp;&nbsp;<a id="a-606856398" href="#vpi.handles.relatives">Accessing a handle&#8217;s relatives</a></li><li>4.3.1.2&nbsp;&nbsp;<a id="a-606858628" href="#Accessing-a-handle-s-properties">Accessing a handle&#8217;s properties</a></li></ul></li><li>4.3.2&nbsp;&nbsp;<a id="a-606870058" href="#vpi.callbacks">Callbacks</a></li></ul></li><li>4.4&nbsp;&nbsp;<a id="a-606880188" href="#usage.concurrency">Concurrency</a><ul><li>4.4.1&nbsp;&nbsp;<a id="a-606883708" href="#Creating-a-concurrent-process">Creating a concurrent process</a></li></ul></li><li>4.5&nbsp;&nbsp;<a id="a-606890138" href="#usage.prototyping">Prototyping</a><ul><li>4.5.1&nbsp;&nbsp;<a id="a-606894508" href="#Creating-a-prototype">Creating a prototype</a></li></ul></li><li>4.6&nbsp;&nbsp;<a id="a-606905198" href="#usage.debugger">Interactive debugging</a><ul><li>4.6.1&nbsp;&nbsp;<a id="a-606908278" href="#usage.debugger.init">Advanced initialization</a></li></ul></li><li>4.7&nbsp;&nbsp;<a id="a-606910748" href="#usage.runner">Test runner</a><ul><li>4.7.1&nbsp;&nbsp;<a id="a-606913938" href="#usage.runner.env-vars">Environment variables</a><ul><li>4.7.1.1&nbsp;&nbsp;<a id="a-606917008" href="#Variables-as-command-line-arguments">Variables as command-line arguments</a></li></ul></li></ul></li><li>4.8&nbsp;&nbsp;<a id="a-606921818" href="#usage.tools">Tools</a><ul><li>4.8.1&nbsp;&nbsp;<a id="a-606923678" href="#usage.tools.generate">Automated test generation</a></li><li>4.8.2&nbsp;&nbsp;<a id="a-606932168" href="#usage.tools.convert">Verilog to Ruby conversion</a></li></ul></li><li>4.9&nbsp;&nbsp;<a id="a-606934638" href="#usage.tutorial">Tutorial</a><ul><li>4.9.1&nbsp;&nbsp;<a id="a-606947158" href="#usage.tutorial.declare-design">Start with a Verilog design</a></li><li>4.9.2&nbsp;&nbsp;<a id="a-606953958" href="#usage.tutorial.generate-test">Generate a test</a></li><li>4.9.3&nbsp;&nbsp;<a id="a-606966828" href="#usage.tutorial.specification">Specify your expectations</a></li><li>4.9.4&nbsp;&nbsp;<a id="a-606069158" href="#usage.tutorial.implement-proto">Implement the prototype</a></li><li>4.9.5&nbsp;&nbsp;<a id="a-606122988" href="#usage.tutorial.test-proto">Verify the prototype</a></li><li>4.9.6&nbsp;&nbsp;<a id="a-606168938" href="#usage.tutorial.implement-design">Implement the design</a></li><li>4.9.7&nbsp;&nbsp;<a id="a-606269558" href="#usage.tutorial.test-design">Verify the design</a></li><li>4.9.8&nbsp;&nbsp;<a id="a-606358268" href="#usage.examples">More examples</a></li></ul></li></ul></li><li>5&nbsp;&nbsp;<a id="a-606376468" href="#hacking">Hacking</a><ul><li>5.1&nbsp;&nbsp;<a id="a-605850148" href="#hacking.build">Building from source code</a></li><li>5.2&nbsp;&nbsp;<a id="a-605974548" href="#Installing-without-really-installing">Installing without really installing</a></li><li>5.3&nbsp;&nbsp;<a id="a-605757818" href="#hacking.release-packages">Building release packages</a></li><li>5.4&nbsp;&nbsp;<a id="a-607050138" href="#hacking.guide">Editing this guide</a></li></ul></li><li>6&nbsp;&nbsp;<a id="a-607052618" href="#problems">Known problems</a><ul><li>6.1&nbsp;&nbsp;<a id="a-607054268" href="#problem.ivl">Icarus Verilog</a><ul><li>6.1.1&nbsp;&nbsp;<a id="a-607055848" href="#problems.ivl.vpi_handle_by_name.absolute-paths">Give full paths to Verilog objects</a></li><li>6.1.2&nbsp;&nbsp;<a id="a-607061068" href="#problems.ivl.vpi_handle_by_name.connect-registers">Registers must be connected</a></li><li>6.1.3&nbsp;&nbsp;<a id="a-607070908" href="#problems.ivl.vpi_reset">VPI::reset</a></li></ul></li></ul></li><li>7&nbsp;&nbsp;<a id="a-607073798" href="#glossary">Glossary</a><ul><li>7.1&nbsp;&nbsp;<a id="a-607075458" href="#glossary.test">Test</a></li><li>7.2&nbsp;&nbsp;<a id="a-607080108" href="#glossary.design">Design</a></li><li>7.3&nbsp;&nbsp;<a id="a-607083458" href="#glossary.specification">Specification</a></li><li>7.4&nbsp;&nbsp;<a id="a-607088168" href="#glossary.expectation">Expectation</a></li><li>7.5&nbsp;&nbsp;<a id="a-607090238" href="#glossary.handle">Handle</a></li><li>7.6&nbsp;&nbsp;<a id="a-607093668" href="#glossary.rake">Rake</a></li><li>7.7&nbsp;&nbsp;<a id="a-607095818" href="#glossary.RSpec">RSpec</a></li><li>7.8&nbsp;&nbsp;<a id="a-607099338" href="#glossary.TDD">Test driven development</a></li><li>7.9&nbsp;&nbsp;<a id="a-607101548" href="#glossary.BDD">Behavior driven development</a></li></ul></li></ul></div>
848
+ <div id="toc"><h1>Contents</h1> <ul><li>1&nbsp;&nbsp;<a id="a-606855468" href="#Introduction">Introduction</a><ul><li>1.1&nbsp;&nbsp;<a id="a-606864618" href="#Features">Features</a></li><li>1.2&nbsp;&nbsp;<a id="a-606881728" href="#License">License</a></li><li>1.3&nbsp;&nbsp;<a id="a-606884178" href="#Appetizers">Appetizers</a></li><li>1.4&nbsp;&nbsp;<a id="a-606888428" href="#Applications">Applications</a></li><li>1.5&nbsp;&nbsp;<a id="a-606890808" href="#Related-works">Related works</a></li></ul></li><li>2&nbsp;&nbsp;<a id="a-606895198" href="#setup">Setup</a><ul><li>2.1&nbsp;&nbsp;<a id="a-606896768" href="#setup.reqs">Requirements</a></li><li>2.2&nbsp;&nbsp;<a id="a-606908788" href="#setup.recom">Recommendations</a></li><li>2.3&nbsp;&nbsp;<a id="a-606914178" href="#setup.inst">Installation</a><ul><li>2.3.1&nbsp;&nbsp;<a id="a-606919398" href="#setup.inst.windows">Installing on Windows</a></li></ul></li><li>2.4&nbsp;&nbsp;<a id="a-606921958" href="#setup.maintenance">Maintenance</a></li><li>2.5&nbsp;&nbsp;<a id="a-606924108" href="#setup.manifest">Manifest</a></li></ul></li><li>3&nbsp;&nbsp;<a id="a-606931208" href="#organization">Background</a><ul><li>3.1&nbsp;&nbsp;<a id="a-606935998" href="#Motivation">Motivation</a></li><li>3.2&nbsp;&nbsp;<a id="a-606938018" href="#organization.tests">Tests</a></li></ul></li><li>4&nbsp;&nbsp;<a id="a-606943788" href="#usage">Usage</a><ul><li>4.1&nbsp;&nbsp;<a id="a-606945358" href="#usage.theory">Theory of operation</a><ul><li>4.1.1&nbsp;&nbsp;<a id="a-606956448" href="#Test-files">Test files</a></li></ul></li><li>4.2&nbsp;&nbsp;<a id="a-606962218" href="#overview.relay">Interacting with the Verilog simulator</a></li><li>4.3&nbsp;&nbsp;<a id="a-606969118" href="#vpi">VPI in Ruby</a><ul><li>4.3.1&nbsp;&nbsp;<a id="a-606972558" href="#vpi.handles">Handles</a><ul><li>4.3.1.1&nbsp;&nbsp;<a id="a-606978858" href="#vpi.handles.relatives">Accessing a handle&#8217;s relatives</a></li><li>4.3.1.2&nbsp;&nbsp;<a id="a-606981088" href="#Accessing-a-handle-s-properties">Accessing a handle&#8217;s properties</a></li></ul></li><li>4.3.2&nbsp;&nbsp;<a id="a-606992858" href="#vpi.callbacks">Callbacks</a></li></ul></li><li>4.4&nbsp;&nbsp;<a id="a-607003668" href="#usage.concurrency">Concurrency</a><ul><li>4.4.1&nbsp;&nbsp;<a id="a-607007188" href="#Creating-a-concurrent-process">Creating a concurrent process</a></li></ul></li><li>4.5&nbsp;&nbsp;<a id="a-607013618" href="#usage.prototyping">Prototyping</a><ul><li>4.5.1&nbsp;&nbsp;<a id="a-607018328" href="#Creating-a-prototype">Creating a prototype</a></li></ul></li><li>4.6&nbsp;&nbsp;<a id="a-607030038" href="#usage.debugger">Interactive debugging</a><ul><li>4.6.1&nbsp;&nbsp;<a id="a-607033288" href="#usage.debugger.init">Advanced initialization</a></li></ul></li><li>4.7&nbsp;&nbsp;<a id="a-607035758" href="#usage.runner">Test runner</a><ul><li>4.7.1&nbsp;&nbsp;<a id="a-607039108" href="#usage.runner.env-vars">Environment variables</a><ul><li>4.7.1.1&nbsp;&nbsp;<a id="a-607042348" href="#Variables-as-command-line-arguments">Variables as command-line arguments</a></li></ul></li></ul></li><li>4.8&nbsp;&nbsp;<a id="a-607047158" href="#usage.tools">Tools</a><ul><li>4.8.1&nbsp;&nbsp;<a id="a-607049018" href="#usage.tools.generate">Automated test generation</a></li><li>4.8.2&nbsp;&nbsp;<a id="a-607057848" href="#usage.tools.convert">Verilog to Ruby conversion</a></li></ul></li><li>4.9&nbsp;&nbsp;<a id="a-607060318" href="#usage.tutorial">Tutorial</a><ul><li>4.9.1&nbsp;&nbsp;<a id="a-607074198" href="#usage.tutorial.declare-design">Start with a Verilog design</a></li><li>4.9.2&nbsp;&nbsp;<a id="a-607081338" href="#usage.tutorial.generate-test">Generate a test</a></li><li>4.9.3&nbsp;&nbsp;<a id="a-607095058" href="#usage.tutorial.specification">Specify your expectations</a></li><li>4.9.4&nbsp;&nbsp;<a id="a-607108658" href="#usage.tutorial.implement-proto">Implement the prototype</a></li><li>4.9.5&nbsp;&nbsp;<a id="a-607115808" href="#usage.tutorial.test-proto">Verify the prototype</a></li><li>4.9.6&nbsp;&nbsp;<a id="a-606264088" href="#usage.tutorial.implement-design">Implement the design</a></li><li>4.9.7&nbsp;&nbsp;<a id="a-606356058" href="#usage.tutorial.test-design">Verify the design</a></li><li>4.9.8&nbsp;&nbsp;<a id="a-606447908" href="#usage.examples">More examples</a></li></ul></li></ul></li><li>5&nbsp;&nbsp;<a id="a-606474498" href="#hacking">Hacking</a><ul><li>5.1&nbsp;&nbsp;<a id="a-606497178" href="#hacking.build">Building from source code</a></li><li>5.2&nbsp;&nbsp;<a id="a-606511708" href="#Installing-without-really-installing">Installing without really installing</a></li><li>5.3&nbsp;&nbsp;<a id="a-606005938" href="#hacking.release-packages">Building release packages</a></li><li>5.4&nbsp;&nbsp;<a id="a-606145488" href="#hacking.guide">Editing this guide</a></li></ul></li><li>6&nbsp;&nbsp;<a id="a-605970068" href="#problems">Known problems</a><ul><li>6.1&nbsp;&nbsp;<a id="a-607199668" href="#problem.ivl">Icarus Verilog</a><ul><li>6.1.1&nbsp;&nbsp;<a id="a-607201248" href="#problems.ivl.vpi_handle_by_name.absolute-paths">Give full paths to Verilog objects</a></li><li>6.1.2&nbsp;&nbsp;<a id="a-607206638" href="#problems.ivl.vpi_handle_by_name.connect-registers">Registers must be connected</a></li><li>6.1.3&nbsp;&nbsp;<a id="a-607216988" href="#problems.ivl.vpi_reset">VPI::reset</a></li></ul></li><li>6.2&nbsp;&nbsp;<a id="a-607219468" href="#problem.ncsim">Cadence NC-Sim</a></li></ul></li><li>7&nbsp;&nbsp;<a id="a-607221888" href="#glossary">Glossary</a><ul><li>7.1&nbsp;&nbsp;<a id="a-607223548" href="#glossary.test">Test</a></li><li>7.2&nbsp;&nbsp;<a id="a-607228538" href="#glossary.design">Design</a></li><li>7.3&nbsp;&nbsp;<a id="a-607232058" href="#glossary.specification">Specification</a></li><li>7.4&nbsp;&nbsp;<a id="a-607237108" href="#glossary.expectation">Expectation</a></li><li>7.5&nbsp;&nbsp;<a id="a-607239178" href="#glossary.handle">Handle</a></li><li>7.6&nbsp;&nbsp;<a id="a-607242778" href="#glossary.rake">Rake</a></li><li>7.7&nbsp;&nbsp;<a id="a-607244928" href="#glossary.RSpec">RSpec</a></li><li>7.8&nbsp;&nbsp;<a id="a-607248618" href="#glossary.TDD">Test driven development</a></li><li>7.9&nbsp;&nbsp;<a id="a-607250828" href="#glossary.BDD">Behavior driven development</a></li></ul></li></ul></div>
788
849
 
789
- <div id="lof"><h1>Cautions</h1> <ol><li><a id="a-606881928" href="#Assignments-inside-processes-are-non-blocking">Assignments inside processes are non-blocking</a></li><li><a id="a-606928078" href="#Do-not-rename-generated-files">Do not rename generated files</a></li></ol><h1>Examples</h1> <ol><li><a id="a-606871738" href="#ex:callback">Using a callback for value change notification</a></li><li><a id="a-606885348" href="#An-edge-triggered-always-block">An edge-triggered &#8220;always&#8221; block</a></li><li><a id="a-606887298" href="#A-change-triggered-combinational-always-block">A change-triggered (combinational) &#8220;always&#8221; block</a></li><li><a id="a-606919158" href="#Running-a-test-with-environment-variables">Running a test with environment variables</a></li><li><a id="a-606950328" href="#fig:counter.v_decl">Declaration of a simple up-counter with synchronous reset</a></li><li><a id="a-606962678" href="#fig:generate-test.RSpec">Generating a test with specification in RSpec format</a></li><li><a id="a-606964548" href="#fig:generate-test.xUnit">Generating a test with specification in xUnit format</a></li><li><a id="a-606972788" href="#fig:RSpec-counter_spec.rb">Specification implemented in RSpec format</a></li><li><a id="a-606975088" href="#fig:xUnit-counter_spec.rb">Specification implemented in xUnit format</a></li><li><a id="a-606100048" href="#fig:counter_proto.rb">Ruby prototype of our Verilog design</a></li><li><a id="a-606139338" href="#fig:test-proto.RSpec">Running a test with specification in RSpec format</a></li><li><a id="a-606145238" href="#fig:test-proto.unit-test">Running a test with specification in xUnit format</a></li><li><a id="a-606237758" href="#fig:counter.v_impl">Implementation of a simple up-counter with synchronous reset</a></li><li><a id="a-606307738" href="#fig:test-design.RSpec">Running a test with specification in RSpec format</a></li><li><a id="a-606325118" href="#fig:test-design.unit-test">Running a test with specification in xUnit format</a></li><li><a id="a-607058828" href="#ex:TestFoo">Part of a bench which instantiates a Verilog design</a></li><li><a id="a-607066798" href="#ex:TestFoo_bad">Bad design with unconnected registers</a></li><li><a id="a-607068638" href="#ex:TestFoo_fix">Fixed design with wired registers</a></li></ol><h1>Figures</h1> <ol><li><a id="a-606812008" href="#fig:organization.detail">Where does Ruby-VPI fit in?</a></li><li><a id="a-606820058" href="#fig:organization">Organization of a test in Ruby-VPI</a></li><li><a id="a-606843408" href="#fig:ruby_relay">Interaction between Ruby and Verilog</a></li><li><a id="a-606862348" href="#fig:method-naming-format">Method naming format for accessing a handle&#8217;s properties</a></li></ol><h1>Notes</h1> <ol><li><a id="a-606848628" href="#Constants-are-capitalized-in-Ruby">Constants are capitalized in Ruby</a></li></ol><h1>Tables</h1> <ol><li><a id="a-606865648" href="#tbl:accessors">Possible accessors and their implications</a></li><li><a id="a-606867538" href="#ex:properties">Examples of accessing a handle&#8217;s properties</a></li></ol><h1>Tips</h1> <ol><li><a id="a-606795708" href="#Tuning-for-maximum-performance">Tuning for maximum performance</a></li><li><a id="a-606929888" href="#Using-kdiff3-with-the-automated-test-generator.">Using <strong>kdiff3</strong> with the automated test generator.</a></li><li><a id="a-606150528" href="#What-can-the-test-runner-do">What can the test runner do?</a></li></ol></div>
850
+ <div id="lof"><h1>Cautions</h1> <ol><li><a id="a-607005408" href="#Assignments-inside-processes-are-non-blocking">Assignments inside processes are non-blocking</a></li><li><a id="a-607053758" href="#Do-not-rename-generated-files">Do not rename generated files</a></li></ol><h1>Examples</h1> <ol><li><a id="a-606994538" href="#ex:callback">Using a callback for value change notification</a></li><li><a id="a-607008828" href="#An-edge-triggered-always-block">An edge-triggered &#8220;always&#8221; block</a></li><li><a id="a-607010778" href="#A-change-triggered-combinational-always-block">A change-triggered (combinational) &#8220;always&#8221; block</a></li><li><a id="a-607044498" href="#Running-a-test-with-environment-variables">Running a test with environment variables</a></li><li><a id="a-607077538" href="#fig:counter.v_decl">Declaration of a simple up-counter with synchronous reset</a></li><li><a id="a-607090908" href="#fig:generate-test.RSpec">Generating a test with specification in RSpec format</a></li><li><a id="a-607092778" href="#fig:generate-test.xUnit">Generating a test with specification in xUnit format</a></li><li><a id="a-607101528" href="#fig:RSpec-counter_spec.rb">Specification implemented in RSpec format</a></li><li><a id="a-607103348" href="#fig:xUnit-counter_spec.rb">Specification implemented in xUnit format</a></li><li><a id="a-607112038" href="#fig:counter_proto.rb">Ruby prototype of our Verilog design</a></li><li><a id="a-606210758" href="#fig:test-proto.RSpec">Running a test with specification in RSpec format</a></li><li><a id="a-606234128" href="#fig:test-proto.unit-test">Running a test with specification in xUnit format</a></li><li><a id="a-606295138" href="#fig:counter.v_impl">Implementation of a simple up-counter with synchronous reset</a></li><li><a id="a-606419298" href="#fig:test-design.RSpec">Running a test with specification in RSpec format</a></li><li><a id="a-606425048" href="#fig:test-design.unit-test">Running a test with specification in xUnit format</a></li><li><a id="a-607204398" href="#ex:TestFoo">Part of a bench which instantiates a Verilog design</a></li><li><a id="a-607212878" href="#ex:TestFoo_bad">Bad design with unconnected registers</a></li><li><a id="a-607214718" href="#ex:TestFoo_fix">Fixed design with wired registers</a></li></ol><h1>Figures</h1> <ol><li><a id="a-606932768" href="#fig:organization.detail">Where does Ruby-VPI fit in?</a></li><li><a id="a-606941158" href="#fig:organization">Organization of a test in Ruby-VPI</a></li><li><a id="a-606965358" href="#fig:ruby_relay">Interaction between Ruby and Verilog</a></li><li><a id="a-606984978" href="#fig:method-naming-format">Method naming format for accessing a handle&#8217;s properties</a></li></ol><h1>Notes</h1> <ol><li><a id="a-606970748" href="#Constants-are-capitalized-in-Ruby">Constants are capitalized in Ruby</a></li></ol><h1>Tables</h1> <ol><li><a id="a-606988448" href="#tbl:accessors">Possible accessors and their implications</a></li><li><a id="a-606990338" href="#ex:properties">Examples of accessing a handle&#8217;s properties</a></li></ol><h1>Tips</h1> <ol><li><a id="a-606915788" href="#Tuning-for-maximum-performance">Tuning for maximum performance</a></li><li><a id="a-607055568" href="#Using-kdiff3-with-the-automated-test-generator.">Using <strong>kdiff3</strong> with the automated test generator.</a></li><li><a id="a-606244898" href="#What-can-the-test-runner-do">What can the test runner do?</a></li></ol></div>
790
851
 
791
852
  <div id="content">
792
853
 
793
854
  <div class="chapter">
794
855
  <h1 class="title">
795
856
  Chapter
796
- <a class="toc" id="Introduction" href="#a-606704428">1</a>
857
+ <a class="toc" id="Introduction" href="#a-606855468">1</a>
797
858
 
798
859
  <br/>
799
860
 
@@ -813,17 +874,17 @@
813
874
 
814
875
  <p><div class="section">
815
876
  <h2 class="title">
816
- <a class="toc" id="Features" href="#a-606710768">1.1</a>&nbsp;&nbsp;Features
877
+ <a class="toc" id="Features" href="#a-606864618">1.1</a>&nbsp;&nbsp;Features
817
878
  </h2>
818
879
  <div class="content"><div class="paragraph">
819
- <p class="title">Portable</p>
880
+ <p class="title" id="Portable">Portable</p>
820
881
  <div class="content"><ul>
821
882
  <li>Works on Windows, Mac OSX, GNU/Linux, and UNIX.</li>
822
883
  <li>Supports all <a class="xref" href="#setup.reqs.sim">major Verilog simulators</a> available today.</li>
823
884
  </ul></div>
824
885
  </div>
825
886
  <div class="paragraph">
826
- <p class="title">Agile</p>
887
+ <p class="title" id="Agile">Agile</p>
827
888
  <div class="content"><ul>
828
889
  <li>Enables <a href="http://agilemanifesto.org">agile practices</a> such as
829
890
  <ul>
@@ -844,7 +905,7 @@
844
905
  </ul></div>
845
906
  </div>
846
907
  <div class="paragraph">
847
- <p class="title">Powerful</p>
908
+ <p class="title" id="Powerful">Powerful</p>
848
909
  <div class="content"><p style="float:right"><img src="images/ruby/logo-reflection.png" title="the Ruby logo" alt="the Ruby logo" /></p>
849
910
 
850
911
 
@@ -871,7 +932,7 @@
871
932
  </div>
872
933
  <div class="section">
873
934
  <h2 class="title">
874
- <a class="toc" id="License" href="#a-606745598">1.2</a>&nbsp;&nbsp;License
935
+ <a class="toc" id="License" href="#a-606881728">1.2</a>&nbsp;&nbsp;License
875
936
  </h2>
876
937
  <div class="content"><p>Copyright 2006 Suraj N. Kurapati &lt;SNK at GNA dot ORG&gt;<br/>
877
938
  Copyright 1999 Kazuhiro HIWADA &lt;HIWADA at KUEE dot KYOTO-U dot AC dot JP&gt;<br/></p>
@@ -887,15 +948,15 @@ Software is furnished to do so, subject to the following conditions:</p>
887
948
 
888
949
  <ul>
889
950
  <li>All copies and substantial portions of the Software (the &quot;Derivatives&quot;)
890
- and their corresponding machine-readable source code (the &quot;Code&quot;) must
891
- include the above copyright notice and this permission notice.</li>
951
+ and their corresponding machine-readable source code (the &quot;Code&quot;) must
952
+ include the above copyright notice and this permission notice.</li>
892
953
  </ul>
893
954
 
894
955
 
895
956
  <ul>
896
- <li>Upon distribution, the Derivatives must be accompanied either by the Code
897
- or&mdash;provided that the Code is obtainable for no more than the cost of
898
- distribution plus a nominal fee&mdash;by information on how to obtain the Code.</li>
957
+ <li>Upon distribution, the Derivatives must be accompanied by either the Code
958
+ or&mdash;provided that the Code is obtainable for no more than the cost of
959
+ distribution plus a nominal fee&mdash;information on how to obtain the Code.</li>
899
960
  </ul>
900
961
 
901
962
 
@@ -908,7 +969,7 @@ IMPLIED, INCLUDING <span class="caps">BUT NOT LIMITED TO THE WARRANTIES OF MERCH
908
969
  </div>
909
970
  <div class="section">
910
971
  <h2 class="title">
911
- <a class="toc" id="Appetizers" href="#a-606752538">1.3</a>&nbsp;&nbsp;Appetizers
972
+ <a class="toc" id="Appetizers" href="#a-606884178">1.3</a>&nbsp;&nbsp;Appetizers
912
973
  </h2>
913
974
  <div class="content">Here is a tiny sampling of code to whet your appetite. See <a class="xref" href="#usage.tutorial">the tutorial</a> for more samples.
914
975
 
@@ -978,7 +1039,7 @@ your_memory.each_memoryWord { |w| w.put_value <span style="color:#00D; font-weig
978
1039
  </div>
979
1040
  <div class="section">
980
1041
  <h2 class="title">
981
- <a class="toc" id="Applications" href="#a-606764318">1.4</a>&nbsp;&nbsp;Applications
1042
+ <a class="toc" id="Applications" href="#a-606888428">1.4</a>&nbsp;&nbsp;Applications
982
1043
  </h2>
983
1044
  <div class="content">Examples of tasks that can be performed with Ruby-VPI are:
984
1045
 
@@ -1012,7 +1073,7 @@ your_memory.each_memoryWord { |w| w.put_value <span style="color:#00D; font-weig
1012
1073
  </div>
1013
1074
  <div class="section">
1014
1075
  <h2 class="title">
1015
- <a class="toc" id="Related-works" href="#a-606770018">1.5</a>&nbsp;&nbsp;Related works
1076
+ <a class="toc" id="Related-works" href="#a-606890808">1.5</a>&nbsp;&nbsp;Related works
1016
1077
  </h2>
1017
1078
  <div class="content"><ul>
1018
1079
  <li><a href="http://anvil.sourceforge.net">ANVIL</a> is a C++ interface to VPI.</li>
@@ -1025,7 +1086,7 @@ your_memory.each_memoryWord { |w| w.put_value <span style="color:#00D; font-weig
1025
1086
 
1026
1087
 
1027
1088
  <p><div class="paragraph">
1028
- <p class="title">Ye olde PLI</p>
1089
+ <p class="title" id="Ye-olde-PLI">Ye olde PLI</p>
1029
1090
  <div class="content">The following projects utilize the archaic <strong>tf</strong> and <strong>acc</strong> PLI interfaces, which have been officially deprecated in IEEE Std 1364-2005.
1030
1091
 
1031
1092
 
@@ -1039,7 +1100,7 @@ your_memory.each_memoryWord { |w| w.put_value <span style="color:#00D; font-weig
1039
1100
  <div class="chapter">
1040
1101
  <h1 class="title">
1041
1102
  Chapter
1042
- <a class="toc" id="setup" href="#a-606777838">2</a>
1103
+ <a class="toc" id="setup" href="#a-606895198">2</a>
1043
1104
 
1044
1105
  <br/>
1045
1106
 
@@ -1048,13 +1109,13 @@ your_memory.each_memoryWord { |w| w.put_value <span style="color:#00D; font-weig
1048
1109
 
1049
1110
  <div class="content"><div class="section">
1050
1111
  <h2 class="title">
1051
- <a class="toc" id="setup.reqs" href="#a-606779348">2.1</a>&nbsp;&nbsp;Requirements
1112
+ <a class="toc" id="setup.reqs" href="#a-606896768">2.1</a>&nbsp;&nbsp;Requirements
1052
1113
  </h2>
1053
1114
  <div class="content"><p>Your system needs the following software to run Ruby-VPI.</p>
1054
1115
 
1055
1116
 
1056
1117
  <p><div class="paragraph">
1057
- <p class="title">Verilog simulator</p>
1118
+ <p class="title" id="setup.reqs.sim">Verilog simulator</p>
1058
1119
  <div class="content">Ruby-VPI is known to work with the following simulators. However, you should be able to use it with any Verilog simulator that supports VPI.
1059
1120
 
1060
1121
 
@@ -1073,7 +1134,7 @@ your_memory.each_memoryWord { |w| w.put_value <span style="color:#00D; font-weig
1073
1134
  </tr>
1074
1135
  <tr>
1075
1136
  <td> <a href="http://www.cadence.com/products/functional_ver/nc-verilog/">Cadence NC-Sim</a> </td>
1076
- <td> Any version that supports the <tt>+loadvpi</tt> option is acceptable. </td>
1137
+ <td> Any version that supports the <tt>+loadvpi</tt> option is acceptable for Ruby-VPI versions 20.0.0 or older. Version 21.0.0 of Ruby-VPI <a class="xref" href="#problem.ncsim">does not work with Cadence NC-Sim</a>. </td>
1077
1138
  </tr>
1078
1139
  <tr>
1079
1140
  <td> <a href="http://www.pragmatic-c.com/gpl-cver/">GPL Cver</a> </td>
@@ -1086,7 +1147,7 @@ your_memory.each_memoryWord { |w| w.put_value <span style="color:#00D; font-weig
1086
1147
  </table></div>
1087
1148
  </div>
1088
1149
  <div class="paragraph">
1089
- <p class="title">Compilers</p>
1150
+ <p class="title" id="Compilers">Compilers</p>
1090
1151
  <div class="content"><table border="1">
1091
1152
  <tr>
1092
1153
  <th>Software </th>
@@ -1111,16 +1172,12 @@ your_memory.each_memoryWord { |w| w.put_value <span style="color:#00D; font-weig
1111
1172
  </table></div>
1112
1173
  </div>
1113
1174
  <div class="paragraph">
1114
- <p class="title">Libraries</p>
1175
+ <p class="title" id="Libraries">Libraries</p>
1115
1176
  <div class="content"><table border="1">
1116
1177
  <tr>
1117
1178
  <th>Library </th>
1118
1179
  <th>Notes </th>
1119
1180
  </tr>
1120
- <tr>
1121
- <td> <a href="http://en.wikipedia.org/wiki/Pthreads" title="pthreads">POSIX threads</a> </td>
1122
- <td> Header and linkable object files, and operating system support for this library are necessary. </td>
1123
- </tr>
1124
1181
  <tr>
1125
1182
  <td> <a href="http://rubyforge.org/frs/?group_id=126">RubyGems</a> </td>
1126
1183
  <td> Any recent version should be acceptable. You can install RubyGems by following <a href="http://www.rubygems.org/read/chapter/3">these instructions</a>. </td>
@@ -1130,13 +1187,13 @@ your_memory.each_memoryWord { |w| w.put_value <span style="color:#00D; font-weig
1130
1187
  </div>
1131
1188
  <div class="section">
1132
1189
  <h2 class="title">
1133
- <a class="toc" id="setup.recom" href="#a-606789068">2.2</a>&nbsp;&nbsp;Recommendations
1190
+ <a class="toc" id="setup.recom" href="#a-606908788">2.2</a>&nbsp;&nbsp;Recommendations
1134
1191
  </h2>
1135
1192
  <div class="content"><p>The following software might make your interactions with Ruby-VPI more pleasant.</p>
1136
1193
 
1137
1194
 
1138
1195
  <p><div class="paragraph">
1139
- <p class="title">Text merging tool</p>
1196
+ <p class="title" id="setup.recom.merger">Text merging tool</p>
1140
1197
  <div class="content">An <em>interactive</em> text merging tool can greatly simplify the process of transferring wanted changes from one file to another. In particular, such tools are especially beneficial when using the <a class="xref" href="#usage.tools.generate">automated test generator</a>. A handful of the currently available open-source text merging tools are listed below.
1141
1198
 
1142
1199
 
@@ -1170,10 +1227,10 @@ your_memory.each_memoryWord { |w| w.put_value <span style="color:#00D; font-weig
1170
1227
  </div>
1171
1228
  <div class="section">
1172
1229
  <h2 class="title">
1173
- <a class="toc" id="setup.inst" href="#a-606794098">2.3</a>&nbsp;&nbsp;Installation
1230
+ <a class="toc" id="setup.inst" href="#a-606914178">2.3</a>&nbsp;&nbsp;Installation
1174
1231
  </h2>
1175
1232
  <div class="content"><p><div class="tip">
1176
- <p class="title"><a class="toc" id="Tuning-for-maximum-performance" href="#a-606795708">Tip 1</a>.&nbsp;&nbsp;Tuning for maximum performance</p>
1233
+ <p class="title"><a class="toc" id="Tuning-for-maximum-performance" href="#a-606915788">Tip 1</a>.&nbsp;&nbsp;Tuning for maximum performance</p>
1177
1234
 
1178
1235
  <img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAABHNCSVQICAgI
1179
1236
  fAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3
@@ -1250,7 +1307,7 @@ ta22BwC4nZ2dXdu2bfujlpaWe4wxNDMz84OzZ88em5qamkZ9ppfjAflu+bDc
1250
1307
  HGAANv6XHFhk9iI4CwDNm5m3aJG9Ww4o1MPnXQVe09fovEsXBC+AXO16LBK/
1251
1308
  0BYggPpqs9jeBlvqCnTNAP/jIXWgBeNF/YXzBfHxIoC3z5cj+Or2X3r9Ye2F
1252
1309
  1izgAAAAAElFTkSuQmCC
1253
- " alt="tip" class="icon"/>
1310
+ " class="icon"/>
1254
1311
 
1255
1312
  <div class="content">You can tune your installation of Ruby-VPI for maximum performance by adding your C compiler&#8217;s optimization flag to the <code class="code"><span style="color:#036; font-weight:bold">CFLAGS</span></code> environment variable <em>before</em> you run the installation command (shown below). For example, if your C compiler is GCC, then you can set <code class="code"><span style="color:#036; font-weight:bold">CFLAGS</span></code> to <tt>-O9</tt> for maximum optimization.</div>
1256
1313
  </div>
@@ -1261,9 +1318,9 @@ Once your system has the <a class="xref" href="#setup.reqs">necessary requiremen
1261
1318
  ruby-vpi -v</pre>
1262
1319
 
1263
1320
 
1264
- Otherwise, follow these instructions:
1321
+ Alternatively, if you do not wish to use RubyGems:
1265
1322
  <ol>
1266
- <li>Download the newest <tt>tar.gz</tt> release package from <a href="http://rubyforge.org/frs/?group_id=1339">the project download area</a>.</li>
1323
+ <li>Download the newest <tt>tar.gz</tt> release package from <a href="http://ruby-vpi.rubyforge.org/pkg">the project download area</a>.</li>
1267
1324
  <li>Extract the release package anywhere you want on your system.</li>
1268
1325
  <li>Go inside the extracted directory and run the following commands:</li>
1269
1326
  </ol>
@@ -1273,7 +1330,7 @@ Otherwise, follow these instructions:
1273
1330
  ruby bin/ruby-vpi -v</pre>
1274
1331
 
1275
1332
 
1276
- <p>If the installation was successful, then you will see output like this: <pre>ruby-vpi 20.0.0 (2008-01-27) http://ruby-vpi.rubyforge.org /home/sun/src/ruby-vpi
1333
+ <p>If the installation was successful, then you will see output like this: <pre>ruby-vpi 21.0.0 (2008-06-08) http://ruby-vpi.rubyforge.org /home/sun/src/ruby-vpi
1277
1334
  </pre></p>
1278
1335
 
1279
1336
 
@@ -1282,7 +1339,7 @@ ruby bin/ruby-vpi -v</pre>
1282
1339
 
1283
1340
  <p><div class="section">
1284
1341
  <h3 class="title">
1285
- <a class="toc" id="setup.inst.windows" href="#a-606799148">2.3.1</a>&nbsp;&nbsp;Installing on Windows
1342
+ <a class="toc" id="setup.inst.windows" href="#a-606919398">2.3.1</a>&nbsp;&nbsp;Installing on Windows
1286
1343
  </h3>
1287
1344
  <div class="content"><p>After Ruby-VPI is compiled, it is linked to symbols whose names begin with <tt>_vpi</tt>. In GNU/Linux and similar operating systems, these symbols are allowed to be undefined. However, this is not the case in Windows because we <a href="http://sourceware.org/ml/cygwin/2001-12/msg01293.html">cannot compile a shared object file with references to undefined symbols in Windows</a>.</p>
1288
1345
 
@@ -1306,7 +1363,7 @@ ruby bin/ruby-vpi -v</pre>
1306
1363
  </div>
1307
1364
  <div class="section">
1308
1365
  <h2 class="title">
1309
- <a class="toc" id="setup.maintenance" href="#a-606801708">2.4</a>&nbsp;&nbsp;Maintenance
1366
+ <a class="toc" id="setup.maintenance" href="#a-606921958">2.4</a>&nbsp;&nbsp;Maintenance
1310
1367
  </h2>
1311
1368
  <div class="content"><p>You can upgrade to the latest release of Ruby-VPI by running the following command:</p>
1312
1369
 
@@ -1324,7 +1381,7 @@ ruby bin/ruby-vpi -v</pre>
1324
1381
  </div>
1325
1382
  <div class="section">
1326
1383
  <h2 class="title">
1327
- <a class="toc" id="setup.manifest" href="#a-606803858">2.5</a>&nbsp;&nbsp;Manifest
1384
+ <a class="toc" id="setup.manifest" href="#a-606924108">2.5</a>&nbsp;&nbsp;Manifest
1328
1385
  </h2>
1329
1386
  <div class="content">Now that Ruby-VPI is installed on your system, let us examine its installation directory.
1330
1387
  <ul>
@@ -1347,7 +1404,7 @@ Inside Ruby-VPI&#8217;s installation directory, you will see (among other things
1347
1404
  <div class="chapter">
1348
1405
  <h1 class="title">
1349
1406
  Chapter
1350
- <a class="toc" id="organization" href="#a-606810448">3</a>
1407
+ <a class="toc" id="organization" href="#a-606931208">3</a>
1351
1408
 
1352
1409
  <br/>
1353
1410
 
@@ -1358,7 +1415,7 @@ Inside Ruby-VPI&#8217;s installation directory, you will see (among other things
1358
1415
 
1359
1416
 
1360
1417
  <p><div class="figure">
1361
- <p class="title"><a class="toc" id="fig:organization.detail" href="#a-606812008">Figure 1</a>.&nbsp;&nbsp;Where does Ruby-VPI fit in?</p>
1418
+ <p class="title"><a class="toc" id="fig:organization.detail" href="#a-606932768">Figure 1</a>.&nbsp;&nbsp;Where does Ruby-VPI fit in?</p>
1362
1419
  <div class="content"><img src="figures/organization_detailed.png" alt="" /></div>
1363
1420
  </div>
1364
1421
  As <a class="xref" href="#fig:organization.detail">Figure 1: <em>Where does Ruby-VPI fit in?</em></a> shows, Ruby-VPI is composed of two complementary parts: one interacts with VPI through the C language, while the other interacts with an executable specification written in the Ruby language. The former is complied during installation to produce dynamically loadable C libraries&#8212;-each tailored to accommodate the quirks of its respective Verilog simulator. The latter is not compiled because Ruby programs are interpreted dynamically.</p>
@@ -1366,19 +1423,19 @@ As <a class="xref" href="#fig:organization.detail">Figure 1: <em>Where does Ruby
1366
1423
 
1367
1424
  <p><div class="section">
1368
1425
  <h2 class="title">
1369
- <a class="toc" id="Motivation" href="#a-606815068">3.1</a>&nbsp;&nbsp;Motivation
1426
+ <a class="toc" id="Motivation" href="#a-606935998">3.1</a>&nbsp;&nbsp;Motivation
1370
1427
  </h2>
1371
1428
  <div class="content">If you would like to know why Ruby-VPI developed, please read this <a href="http://ruby-vpi.rubyforge.org/papers/masters_thesis.html#tth_sEc5.2">motivation section</a> of my masters thesis.</div>
1372
1429
  </div>
1373
1430
  <div class="section">
1374
1431
  <h2 class="title">
1375
- <a class="toc" id="organization.tests" href="#a-606817088">3.2</a>&nbsp;&nbsp;Tests
1432
+ <a class="toc" id="organization.tests" href="#a-606938018">3.2</a>&nbsp;&nbsp;Tests
1376
1433
  </h2>
1377
1434
  <div class="content"><p>In Ruby-VPI, the process of functional verification is neatly packaged into self-contained, executable tests. As <a class="xref" href="#fig:organization">Figure 2: <em>Organization of a test in Ruby-VPI</em></a> illustrates, a test is composed of a <strong>bench</strong>, a <strong>design</strong>, and a <strong>specification</strong>.</p>
1378
1435
 
1379
1436
 
1380
1437
  <p><div class="figure">
1381
- <p class="title"><a class="toc" id="fig:organization" href="#a-606820058">Figure 2</a>.&nbsp;&nbsp;Organization of a test in Ruby-VPI</p>
1438
+ <p class="title"><a class="toc" id="fig:organization" href="#a-606941158">Figure 2</a>.&nbsp;&nbsp;Organization of a test in Ruby-VPI</p>
1382
1439
  <div class="content"><img src="figures/organization.png" alt="" /></div>
1383
1440
  </div>
1384
1441
  <strong>The bench</strong> is Ruby-VPI. It defines the environment in which functional verification takes place. This is analogous to a workbench in an electronics laboratory that is furnished with tools of measurement and manipulation such as oscilloscopes, voltmeters, soldering irons, and so on which enable engineers to verify electronic components and locate the source of defects within those components.</p>
@@ -1393,7 +1450,7 @@ As <a class="xref" href="#fig:organization.detail">Figure 1: <em>Where does Ruby
1393
1450
  <div class="chapter">
1394
1451
  <h1 class="title">
1395
1452
  Chapter
1396
- <a class="toc" id="usage" href="#a-606822688">4</a>
1453
+ <a class="toc" id="usage" href="#a-606943788">4</a>
1397
1454
 
1398
1455
  <br/>
1399
1456
 
@@ -1402,13 +1459,13 @@ As <a class="xref" href="#fig:organization.detail">Figure 1: <em>Where does Ruby
1402
1459
 
1403
1460
  <div class="content"><div class="section">
1404
1461
  <h2 class="title">
1405
- <a class="toc" id="usage.theory" href="#a-606824258">4.1</a>&nbsp;&nbsp;Theory of operation
1462
+ <a class="toc" id="usage.theory" href="#a-606945358">4.1</a>&nbsp;&nbsp;Theory of operation
1406
1463
  </h2>
1407
1464
  <div class="content"><p>When you run a Ruby-VPI test, the following chain reaction occurs.</p>
1408
1465
 
1409
1466
 
1410
1467
  <p><div class="paragraph">
1411
- <p class="title">Rake (via the <tt>Rakefile</tt>)</p>
1468
+ <p class="title" id="Rake-via-the-Rakefile">Rake (via the <tt>Rakefile</tt>)</p>
1412
1469
  <div class="content"><ol>
1413
1470
  <li>Specifies a user-defined Ruby script that will be loaded
1414
1471
  by Ruby-VPI once the simulator has been launched.</li>
@@ -1417,20 +1474,20 @@ As <a class="xref" href="#fig:organization.detail">Figure 1: <em>Where does Ruby
1417
1474
  </ol></div>
1418
1475
  </div>
1419
1476
  <div class="paragraph">
1420
- <p class="title">Verilog simulator</p>
1477
+ <p class="title" id="Verilog-simulator">Verilog simulator</p>
1421
1478
  <div class="content"><ol>
1422
1479
  <li>Launches the Ruby interpreter and loads Ruby-VPI into it.</li>
1423
1480
  </ol></div>
1424
1481
  </div>
1425
1482
  <div class="paragraph">
1426
- <p class="title">Ruby-VPI</p>
1483
+ <p class="title" id="Ruby-VPI">Ruby-VPI</p>
1427
1484
  <div class="content"><ol>
1428
1485
  <li>Establishes the <a class="xref" href="#vpi">basic verification environment</a> (the nice library for <a class="xref" href="#vpi.handles">working with VPI handles</a>, and so on).</li>
1429
1486
  <li>Loads the user-defined Ruby script that was specified by Rake.</li>
1430
1487
  </ol></div>
1431
1488
  </div>
1432
1489
  <div class="paragraph">
1433
- <p class="title">User-defined Ruby script</p>
1490
+ <p class="title" id="User-defined-Ruby-script">User-defined Ruby script</p>
1434
1491
  <div class="content"><ol>
1435
1492
  <li>Determines what Verilog modules are going to be tested.</li>
1436
1493
  <li>Determines what Ruby files are going to do the testing.</li>
@@ -1459,7 +1516,7 @@ Here, the <code class="code"><span style="color:#036; font-weight:bold">RubyVPI<
1459
1516
  </div>
1460
1517
  <div class="section">
1461
1518
  <h3 class="title">
1462
- <a class="toc" id="Test-files" href="#a-606835008">4.1.1</a>&nbsp;&nbsp;Test files
1519
+ <a class="toc" id="Test-files" href="#a-606956448">4.1.1</a>&nbsp;&nbsp;Test files
1463
1520
  </h3>
1464
1521
  <div class="content"><p>Ruby-VPI tests (when produced by the <a class="xref" href="#usage.tools.generate">automated test generator</a>) are typically composed of the following files.</p>
1465
1522
 
@@ -1512,7 +1569,7 @@ Here, the <code class="code"><span style="color:#036; font-weight:bold">RubyVPI<
1512
1569
  </div></p></div>
1513
1570
  </div><div class="section">
1514
1571
  <h2 class="title">
1515
- <a class="toc" id="overview.relay" href="#a-606840438">4.2</a>&nbsp;&nbsp;Interacting with the Verilog simulator
1572
+ <a class="toc" id="overview.relay" href="#a-606962218">4.2</a>&nbsp;&nbsp;Interacting with the Verilog simulator
1516
1573
  </h2>
1517
1574
  <div class="content"><p>In a typical VPI application written in C, the <em>Verilog simulator</em> is in charge. Verilog code temporarily transfers control to C by invoking C functions, which return control to Verilog when they finish.</p>
1518
1575
 
@@ -1524,7 +1581,7 @@ Here, the <code class="code"><span style="color:#036; font-weight:bold">RubyVPI<
1524
1581
 
1525
1582
 
1526
1583
  <p><div class="figure">
1527
- <p class="title"><a class="toc" id="fig:ruby_relay" href="#a-606843408">Figure 3</a>.&nbsp;&nbsp;Interaction between Ruby and Verilog</p>
1584
+ <p class="title"><a class="toc" id="fig:ruby_relay" href="#a-606965358">Figure 3</a>.&nbsp;&nbsp;Interaction between Ruby and Verilog</p>
1528
1585
  <div class="content"><img src="figures/ruby_relay.png" alt="" />
1529
1586
 
1530
1587
 
@@ -1542,13 +1599,13 @@ Another means of transferring control from the specification to the Verilog simu
1542
1599
  </div>
1543
1600
  <div class="section">
1544
1601
  <h2 class="title">
1545
- <a class="toc" id="vpi" href="#a-606846998">4.3</a>&nbsp;&nbsp;VPI in Ruby
1602
+ <a class="toc" id="vpi" href="#a-606969118">4.3</a>&nbsp;&nbsp;VPI in Ruby
1546
1603
  </h2>
1547
1604
  <div class="content"><p>Ruby-VPI provides the <em>entire</em> IEEE Std 1364-2005 VPI interface to Ruby. This section will show you how to make use of it.</p>
1548
1605
 
1549
1606
 
1550
1607
  <p><div class="note">
1551
- <p class="title"><a class="toc" id="Constants-are-capitalized-in-Ruby" href="#a-606848628">Note 1</a>.&nbsp;&nbsp;Constants are capitalized in Ruby</p>
1608
+ <p class="title"><a class="toc" id="Constants-are-capitalized-in-Ruby" href="#a-606970748">Note 1</a>.&nbsp;&nbsp;Constants are capitalized in Ruby</p>
1552
1609
 
1553
1610
  <img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAABHNCSVQICAgI
1554
1611
  fAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3
@@ -1607,7 +1664,7 @@ bj2VSjFnzpxrKjafSSm5cOEC/f39KUAnrVsTgAkUAYU1NTUPx2KxjUEQTLmW
1607
1664
  YvOZpmnxjo6O3x48eHA76S4UB3qEUgohRBQoGLoyKTJJp+nyR97kmA1IwANS
1608
1665
  wODQ1auUSmYP9UNjoQBwAIv0DBUMFb6WZpNuRB9wSYsfUEr5kOdfSiGETrr1
1609
1666
  DUCQhrhWJkj394A0gKeUCjVo3r9Zv0r2P3yyQqPd16MPAAAAAElFTkSuQmCC
1610
- " alt="note" class="icon"/>
1667
+ " class="icon"/>
1611
1668
 
1612
1669
  <div class="content"><p>In the remainder of this guide, you may be surprised to see that VPI constants such as <code class="code">vpiIntVal</code> are written with a captialized name, as <code class="code"><span style="color:#036; font-weight:bold">VpiIntVal</span></code>. The reason for this discrepancy is that in Ruby, the names of constants are capitalized.</p>
1613
1670
 
@@ -1616,7 +1673,7 @@ DUCQhrhWJkj394A0gKeUCjVo3r9Zv0r2P3yyQqPd16MPAAAAAElFTkSuQmCC
1616
1673
  </div>
1617
1674
  <div class="section">
1618
1675
  <h3 class="title">
1619
- <a class="toc" id="vpi.handles" href="#a-606850438">4.3.1</a>&nbsp;&nbsp;Handles
1676
+ <a class="toc" id="vpi.handles" href="#a-606972558">4.3.1</a>&nbsp;&nbsp;Handles
1620
1677
  </h3>
1621
1678
  <div class="content"><p>A <strong>handle</strong> is a reference to an object (such as a module, register, wire, and so on) inside the Verilog simulation. Handles allows you to inspect and manipulate the design under test and its internal components. They are instances of the <code class="code"><span style="color:#036; font-weight:bold">VPI</span>::<span style="color:#036; font-weight:bold">Handle</span></code> class (see <a href="api/ruby/classes/VPI/Handle.html">reference documentation</a> for details) in Ruby-VPI.</p>
1622
1679
 
@@ -1628,12 +1685,12 @@ DUCQhrhWJkj394A0gKeUCjVo3r9Zv0r2P3yyQqPd16MPAAAAAElFTkSuQmCC
1628
1685
 
1629
1686
 
1630
1687
  <p><div class="paragraph">
1631
- <p class="title">Shortcuts for productivity</p>
1688
+ <p class="title" id="Shortcuts-for-productivity">Shortcuts for productivity</p>
1632
1689
  <div class="content">Given a handle, Ruby-VPI allows you to access (1) its relatives and (2) its properties simply by invoking methods on the handle. If a handle&#8217;s relative happens to have the same name as one its properties, then the relative is given priority because a handle&#8217;s properties can always be accessed explicitly through the <code class="code">handle.get_value</code> and <code class="code">handle.put_value</code> methods.</div>
1633
1690
  </div>
1634
1691
  <div class="section">
1635
1692
  <h4 class="title">
1636
- <a class="toc" id="vpi.handles.relatives" href="#a-606856398">4.3.1.1</a>&nbsp;&nbsp;Accessing a handle&#8217;s relatives
1693
+ <a class="toc" id="vpi.handles.relatives" href="#a-606978858">4.3.1.1</a>&nbsp;&nbsp;Accessing a handle&#8217;s relatives
1637
1694
  </h4>
1638
1695
  <div class="content"><p>Imagine that the design under test, say <em>foo</em>, instantiated a Verilog module named <em>bar</em>, which in turn contained a register named <em>baz</em>. To access baz from Ruby, one could employ VPI idioms by writing:</p>
1639
1696
 
@@ -1658,7 +1715,7 @@ baz = vpi_handle_by_name( <span style="background-color:#fff0f0"><span style="co
1658
1715
  </div>
1659
1716
  <div class="section">
1660
1717
  <h4 class="title">
1661
- <a class="toc" id="Accessing-a-handle-s-properties" href="#a-606858628">4.3.1.2</a>&nbsp;&nbsp;Accessing a handle&#8217;s properties
1718
+ <a class="toc" id="Accessing-a-handle-s-properties" href="#a-606981088">4.3.1.2</a>&nbsp;&nbsp;Accessing a handle&#8217;s properties
1662
1719
  </h4>
1663
1720
  <div class="content"><p>Imagine that the design under test, say <em>foo</em>, contained a register named <em>bar</em>. To access the integer value of <em>bar</em> in Ruby-VPI, one could employ VPI idioms by writing:</p>
1664
1721
 
@@ -1688,7 +1745,7 @@ result = wrapper.value.str.to_i( <span style="color:#00D; font-weight:bold">16</
1688
1745
  <code class="code">result = foo.bar.intVal</code></div>
1689
1746
  </div>
1690
1747
  <div class="figure">
1691
- <p class="title"><a class="toc" id="fig:method-naming-format" href="#a-606862348">Figure 4</a>.&nbsp;&nbsp;Method naming format for accessing a handle&#8217;s properties</p>
1748
+ <p class="title"><a class="toc" id="fig:method-naming-format" href="#a-606984978">Figure 4</a>.&nbsp;&nbsp;Method naming format for accessing a handle&#8217;s properties</p>
1692
1749
  <div class="content"><table border="1">
1693
1750
  <tr>
1694
1751
  <th>Operation </th>
@@ -1732,7 +1789,7 @@ result = wrapper.value.str.to_i( <span style="color:#00D; font-weight:bold">16</
1732
1789
  </ul></div>
1733
1790
  </div>
1734
1791
  <div class="table">
1735
- <p class="title"><a class="toc" id="tbl:accessors" href="#a-606865648">Table 1</a>.&nbsp;&nbsp;Possible accessors and their implications</p>
1792
+ <p class="title"><a class="toc" id="tbl:accessors" href="#a-606988448">Table 1</a>.&nbsp;&nbsp;Possible accessors and their implications</p>
1736
1793
  <div class="content"><table border="1">
1737
1794
  <tr>
1738
1795
  <th>Accessor </th>
@@ -1777,7 +1834,7 @@ result = wrapper.value.str.to_i( <span style="color:#00D; font-weight:bold">16</
1777
1834
  </table></div>
1778
1835
  </div>
1779
1836
  <div class="table">
1780
- <p class="title"><a class="toc" id="ex:properties" href="#a-606867538">Table 2</a>.&nbsp;&nbsp;Examples of accessing a handle&#8217;s properties</p>
1837
+ <p class="title"><a class="toc" id="ex:properties" href="#a-606990338">Table 2</a>.&nbsp;&nbsp;Examples of accessing a handle&#8217;s properties</p>
1781
1838
  <div class="content"><table border="1">
1782
1839
  <tr>
1783
1840
  <th rowspan="2">Ruby expression </th>
@@ -2094,7 +2151,7 @@ result = wrapper.value.str.to_i( <span style="color:#00D; font-weight:bold">16</
2094
2151
  </div>
2095
2152
  <div class="section">
2096
2153
  <h3 class="title">
2097
- <a class="toc" id="vpi.callbacks" href="#a-606870058">4.3.2</a>&nbsp;&nbsp;Callbacks
2154
+ <a class="toc" id="vpi.callbacks" href="#a-606992858">4.3.2</a>&nbsp;&nbsp;Callbacks
2098
2155
  </h3>
2099
2156
  <div class="content"><p>A <em>callback</em> is a mechanism that makes the Verilog simuluator execute a block of code (known as a &#8220;callback handler&#8221;) when some prescribed event occurs in the simulation.</p>
2100
2157
 
@@ -2103,7 +2160,7 @@ result = wrapper.value.str.to_i( <span style="color:#00D; font-weight:bold">16</
2103
2160
 
2104
2161
 
2105
2162
  <p><div class="example">
2106
- <p class="title"><a class="toc" id="ex:callback" href="#a-606871738">Example 1</a>.&nbsp;&nbsp;Using a callback for value change notification</p>
2163
+ <p class="title"><a class="toc" id="ex:callback" href="#a-606994538">Example 1</a>.&nbsp;&nbsp;Using a callback for value change notification</p>
2107
2164
  <div class="content"><p>This example shows how to use a callback for notification of changes in a handle&#8217;s <code class="code"><span style="color:#036; font-weight:bold">VpiIntVal</span></code> property. When you no longer need this callback, you can tear it down using <code class="code">vpi_remove_cb</code>.</p>
2108
2165
 
2109
2166
 
@@ -2140,7 +2197,7 @@ vpi_register_cb( alarm ) <span style="color:#080; font-weight:bold">do</span> |i
2140
2197
  </div>
2141
2198
  <div class="section">
2142
2199
  <h2 class="title">
2143
- <a class="toc" id="usage.concurrency" href="#a-606880188">4.4</a>&nbsp;&nbsp;Concurrency
2200
+ <a class="toc" id="usage.concurrency" href="#a-607003668">4.4</a>&nbsp;&nbsp;Concurrency
2144
2201
  </h2>
2145
2202
  <div class="content"><p>Ruby-VPI provides a concurrency model that allows you to run blocks of code in parallel. These blocks of code are known as <em>concurrent processes</em> and they are equivalent to the &#8220;initial&#8221;, &#8220;always&#8221; and &#8220;forever&#8221; blocks in Verilog.</p>
2146
2203
 
@@ -2158,7 +2215,7 @@ vpi_register_cb( alarm ) <span style="color:#080; font-weight:bold">do</span> |i
2158
2215
 
2159
2216
 
2160
2217
  <p><div class="caution">
2161
- <p class="title"><a class="toc" id="Assignments-inside-processes-are-non-blocking" href="#a-606881928">Caution 1</a>.&nbsp;&nbsp;Assignments inside processes are non-blocking</p>
2218
+ <p class="title"><a class="toc" id="Assignments-inside-processes-are-non-blocking" href="#a-607005408">Caution 1</a>.&nbsp;&nbsp;Assignments inside processes are non-blocking</p>
2162
2219
 
2163
2220
  <img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAABHNCSVQICAgI
2164
2221
  fAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3
@@ -2212,13 +2269,13 @@ lQP3aeBFBNHmWbBT/aV/Wn8qvh+F0Uuw73noCsEocEkpFUwKABARJ+CKFwex
2212
2269
  MFmBqURf37Fpcf9hIAgEgHFgDBhLzIHkJFZKjYuIAiJACJiIH79ZAhKXdSTO
2213
2270
  ECQGPj690VUrcfw2ZYuXhICbYRZiUUhEYFLNkjYs6s3c/5J97/9q8F/RUcwR
2214
2271
  4xicOQAAAABJRU5ErkJggg==
2215
- " alt="caution" class="icon"/>
2272
+ " class="icon"/>
2216
2273
 
2217
2274
  <div class="content">As a result of the constraints described above, all assignments inside processes are treated like Verilog&#8217;s non-blocking assignments. Think about it: blocking assignments allow a process to make changes to simulation values (possibly) before other processes read those values. Since the second constraint makes all processes see the same input while they are executing, it is impossible to support blocking assignments inside processes.</div>
2218
2275
  </div>
2219
2276
  <div class="section">
2220
2277
  <h3 class="title">
2221
- <a class="toc" id="Creating-a-concurrent-process" href="#a-606883708">4.4.1</a>&nbsp;&nbsp;Creating a concurrent process
2278
+ <a class="toc" id="Creating-a-concurrent-process" href="#a-607007188">4.4.1</a>&nbsp;&nbsp;Creating a concurrent process
2222
2279
  </h3>
2223
2280
  <div class="content"><p>You can create a concurrent proceess by passing a block of code to the <code class="code">process</code> method. Once the process finishes executing this block of code, it will disappear automatically. This behavior mimics the &#8220;initial&#8221; blocks of the Verilog language.</p>
2224
2281
 
@@ -2227,7 +2284,7 @@ ECQGPj690VUrcfw2ZYuXhICbYRZiUUhEYFLNkjYs6s3c/5J97/9q8F/RUcwR
2227
2284
 
2228
2285
 
2229
2286
  <p><div class="example">
2230
- <p class="title"><a class="toc" id="An-edge-triggered-always-block" href="#a-606885348">Example 2</a>.&nbsp;&nbsp;An edge-triggered &#8220;always&#8221; block</p>
2287
+ <p class="title"><a class="toc" id="An-edge-triggered-always-block" href="#a-607008828">Example 2</a>.&nbsp;&nbsp;An edge-triggered &#8220;always&#8221; block</p>
2231
2288
  <div class="content"><p>Suppose you have the following Verilog code:</p>
2232
2289
 
2233
2290
 
@@ -2252,7 +2309,7 @@ always <span style="color:#080; font-weight:bold">do</span>
2252
2309
  </pre></div>
2253
2310
  </div>
2254
2311
  <div class="example">
2255
- <p class="title"><a class="toc" id="A-change-triggered-combinational-always-block" href="#a-606887298">Example 3</a>.&nbsp;&nbsp;A change-triggered (combinational) &#8220;always&#8221; block</p>
2312
+ <p class="title"><a class="toc" id="A-change-triggered-combinational-always-block" href="#a-607010778">Example 3</a>.&nbsp;&nbsp;A change-triggered (combinational) &#8220;always&#8221; block</p>
2256
2313
  <div class="content"><p>Suppose you have the following Verilog code:</p>
2257
2314
 
2258
2315
 
@@ -2288,7 +2345,7 @@ always <span style="color:#080; font-weight:bold">do</span>
2288
2345
  </div>
2289
2346
  <div class="section">
2290
2347
  <h2 class="title">
2291
- <a class="toc" id="usage.prototyping" href="#a-606890138">4.5</a>&nbsp;&nbsp;Prototyping
2348
+ <a class="toc" id="usage.prototyping" href="#a-607013618">4.5</a>&nbsp;&nbsp;Prototyping
2292
2349
  </h2>
2293
2350
  <div class="content"><p>Ruby-VPI enables you to rapidly prototype your designs in Ruby without having to do full-scale implementations in Verilog. This lets you explore and evaluate different design choices quickly.</p>
2294
2351
 
@@ -2301,7 +2358,7 @@ always <span style="color:#080; font-weight:bold">do</span>
2301
2358
 
2302
2359
  <p><div class="section">
2303
2360
  <h3 class="title">
2304
- <a class="toc" id="Creating-a-prototype" href="#a-606894508">4.5.1</a>&nbsp;&nbsp;Creating a prototype
2361
+ <a class="toc" id="Creating-a-prototype" href="#a-607018328">4.5.1</a>&nbsp;&nbsp;Creating a prototype
2305
2362
  </h3>
2306
2363
  <div class="content"><ol>
2307
2364
  <li>Start with a <a class="xref" href="#usage.tutorial.declare-design">Verilog module declaration</a> for your design.</li>
@@ -2319,7 +2376,7 @@ always <span style="color:#080; font-weight:bold">do</span>
2319
2376
  </div>
2320
2377
  <div class="section">
2321
2378
  <h2 class="title">
2322
- <a class="toc" id="usage.debugger" href="#a-606905198">4.6</a>&nbsp;&nbsp;Interactive debugging
2379
+ <a class="toc" id="usage.debugger" href="#a-607030038">4.6</a>&nbsp;&nbsp;Interactive debugging
2323
2380
  </h2>
2324
2381
  <div class="content"><p>The <a href="http://www.datanoise.com/articles/category/ruby-debug">ruby-debug project</a> serves as the interactive debugger for Ruby-VPI.</p>
2325
2382
 
@@ -2332,7 +2389,7 @@ always <span style="color:#080; font-weight:bold">do</span>
2332
2389
 
2333
2390
  <p><div class="section">
2334
2391
  <h3 class="title">
2335
- <a class="toc" id="usage.debugger.init" href="#a-606908278">4.6.1</a>&nbsp;&nbsp;Advanced initialization
2392
+ <a class="toc" id="usage.debugger.init" href="#a-607033288">4.6.1</a>&nbsp;&nbsp;Advanced initialization
2336
2393
  </h3>
2337
2394
  <div class="content">By default, Ruby-VPI enables the debugger by invoking the <code class="code"><span style="color:#036; font-weight:bold">Debugger</span>.start</code> method. If you wish to perform more advanced initialization, such as having the debugger accept remote network connections for interfacing with a remote debugging session or perhaps with an IDE (see <a href="http://www.datanoise.com/articles/category/ruby-debug">the ruby-debug documentation</a> for details), then:
2338
2395
 
@@ -2345,7 +2402,7 @@ always <span style="color:#080; font-weight:bold">do</span>
2345
2402
  </div>
2346
2403
  <div class="section">
2347
2404
  <h2 class="title">
2348
- <a class="toc" id="usage.runner" href="#a-606910748">4.7</a>&nbsp;&nbsp;Test runner
2405
+ <a class="toc" id="usage.runner" href="#a-607035758">4.7</a>&nbsp;&nbsp;Test runner
2349
2406
  </h2>
2350
2407
  <div class="content"><p>A test runner is a file, generated by the <a class="xref" href="#usage.tools.generate">automated test generator</a> whose name ends with <tt>.rake</tt>. It helps you run generated tests&#8212;you can think of it as a <em>makefile</em> if you are familiar with C programming in a UNIX environment.</p>
2351
2408
 
@@ -2368,7 +2425,7 @@ rake vsim # Simulate with Mentor Modelsim.
2368
2425
 
2369
2426
  <p><div class="section">
2370
2427
  <h3 class="title">
2371
- <a class="toc" id="usage.runner.env-vars" href="#a-606913938">4.7.1</a>&nbsp;&nbsp;Environment variables
2428
+ <a class="toc" id="usage.runner.env-vars" href="#a-607039108">4.7.1</a>&nbsp;&nbsp;Environment variables
2372
2429
  </h3>
2373
2430
  <div class="content"><p>Test runners support the following <em>environment</em> variables, which allow you to easily change the behavior of the test runner.</p>
2374
2431
 
@@ -2389,7 +2446,7 @@ rake vsim # Simulate with Mentor Modelsim.
2389
2446
 
2390
2447
  <p><div class="section">
2391
2448
  <h4 class="title">
2392
- <a class="toc" id="Variables-as-command-line-arguments" href="#a-606917008">4.7.1.1</a>&nbsp;&nbsp;Variables as command-line arguments
2449
+ <a class="toc" id="Variables-as-command-line-arguments" href="#a-607042348">4.7.1.1</a>&nbsp;&nbsp;Variables as command-line arguments
2393
2450
  </h4>
2394
2451
  <div class="content">You can specify variable assignments as arguments to the <strong>rake</strong> command. For example, <pre>rake DEBUGGER=1</pre> is equivalent to
2395
2452
  <pre>
@@ -2405,7 +2462,7 @@ rake
2405
2462
 
2406
2463
 
2407
2464
  <p><div class="example">
2408
- <p class="title"><a class="toc" id="Running-a-test-with-environment-variables" href="#a-606919158">Example 4</a>.&nbsp;&nbsp;Running a test with environment variables</p>
2465
+ <p class="title"><a class="toc" id="Running-a-test-with-environment-variables" href="#a-607044498">Example 4</a>.&nbsp;&nbsp;Running a test with environment variables</p>
2409
2466
  <div class="content"><p>Below, we enable the prototype and code coverage analysis:
2410
2467
  <pre>rake -f your_test_runner.rake PROTOTYPE=1 COVERAGE=1</pre></p>
2411
2468
 
@@ -2419,7 +2476,7 @@ rake
2419
2476
  </div>
2420
2477
  <div class="section">
2421
2478
  <h2 class="title">
2422
- <a class="toc" id="usage.tools" href="#a-606921818">4.8</a>&nbsp;&nbsp;Tools
2479
+ <a class="toc" id="usage.tools" href="#a-607047158">4.8</a>&nbsp;&nbsp;Tools
2423
2480
  </h2>
2424
2481
  <div class="content"><p>The <strong>ruby-vpi</strong> command serves as a front-end to the tools provided by Ruby-VPI. You can see its help information (reproduced below) by simply running the command without any arguments.</p>
2425
2482
 
@@ -2427,27 +2484,27 @@ rake
2427
2484
  <pre>This is a front-end for tools provided by Ruby-VPI.
2428
2485
 
2429
2486
  Usage:
2430
- ruby-vpi Show this help message
2431
- ruby-vpi -v Show version information
2432
- ruby-vpi TOOL --help Show help message for TOOL
2433
- ruby-vpi TOOL arguments... Run TOOL with some arguments
2487
+ ruby-vpi Show this help message
2488
+ ruby-vpi -v Show version information
2489
+ ruby-vpi TOOL --help Show help message for TOOL
2490
+ ruby-vpi TOOL arguments... Run TOOL with some arguments
2434
2491
 
2435
2492
  Tools:
2436
- convert Converts Verilog `defines, constants, ranges, etc. into Ruby syntax.
2437
- generate Generates test skeletons from Verilog 2001/1995 module declarations.
2493
+ convert Converts Verilog `defines, constants, ranges, etc. into Ruby syntax.
2494
+ generate Generates test skeletons from Verilog 2001/1995 module declarations.
2438
2495
 
2439
2496
  Simulators:
2440
- cver GPL Cver
2441
- ivl Icarus Verilog
2442
- ncsim Cadence NC-Sim
2443
- vcs Synopsys VCS
2444
- vsim Mentor Modelsim
2497
+ cver GPL Cver
2498
+ ivl Icarus Verilog
2499
+ ncsim Cadence NC-Sim
2500
+ vcs Synopsys VCS
2501
+ vsim Mentor Modelsim
2445
2502
  </pre>
2446
2503
 
2447
2504
 
2448
2505
  <p><div class="section">
2449
2506
  <h3 class="title">
2450
- <a class="toc" id="usage.tools.generate" href="#a-606923678">4.8.1</a>&nbsp;&nbsp;Automated test generation
2507
+ <a class="toc" id="usage.tools.generate" href="#a-607049018">4.8.1</a>&nbsp;&nbsp;Automated test generation
2451
2508
  </h3>
2452
2509
  <div class="content"><p>The <strong>generate</strong> tool generates scaffolding for Ruby-VPI tests from Verilog module declarations (written in either Verilog 2001 or Verilog 95 style).</p>
2453
2510
 
@@ -2467,7 +2524,7 @@ A Ruby-VPI test is composed of the following files:
2467
2524
 
2468
2525
 
2469
2526
  <p><div class="caution">
2470
- <p class="title"><a class="toc" id="Do-not-rename-generated-files" href="#a-606928078">Caution 2</a>.&nbsp;&nbsp;Do not rename generated files</p>
2527
+ <p class="title"><a class="toc" id="Do-not-rename-generated-files" href="#a-607053758">Caution 2</a>.&nbsp;&nbsp;Do not rename generated files</p>
2471
2528
 
2472
2529
  <img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAABHNCSVQICAgI
2473
2530
  fAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3
@@ -2521,7 +2578,7 @@ lQP3aeBFBNHmWbBT/aV/Wn8qvh+F0Uuw73noCsEocEkpFUwKABARJ+CKFwex
2521
2578
  MFmBqURf37Fpcf9hIAgEgHFgDBhLzIHkJFZKjYuIAiJACJiIH79ZAhKXdSTO
2522
2579
  ECQGPj690VUrcfw2ZYuXhICbYRZiUUhEYFLNkjYs6s3c/5J97/9q8F/RUcwR
2523
2580
  4xicOQAAAABJRU5ErkJggg==
2524
- " alt="caution" class="icon"/>
2581
+ " class="icon"/>
2525
2582
 
2526
2583
  <div class="content">Ruby-VPI uses the convention described above to dynamically create a direct Ruby interface to the design under test, so <em>do not</em> rename the generated files arbitrarily.</div>
2527
2584
  </div>
@@ -2532,7 +2589,7 @@ By producing multiple files, the automated test generator physically decouples t
2532
2589
 
2533
2590
 
2534
2591
  <p><div class="tip">
2535
- <p class="title"><a class="toc" id="Using-kdiff3-with-the-automated-test-generator." href="#a-606929888">Tip 2</a>.&nbsp;&nbsp;Using <strong>kdiff3</strong> with the automated test generator.</p>
2592
+ <p class="title"><a class="toc" id="Using-kdiff3-with-the-automated-test-generator." href="#a-607055568">Tip 2</a>.&nbsp;&nbsp;Using <strong>kdiff3</strong> with the automated test generator.</p>
2536
2593
 
2537
2594
  <img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAABHNCSVQICAgI
2538
2595
  fAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3
@@ -2609,7 +2666,7 @@ ta22BwC4nZ2dXdu2bfujlpaWe4wxNDMz84OzZ88em5qamkZ9ppfjAflu+bDc
2609
2666
  HGAANv6XHFhk9iI4CwDNm5m3aJG9Ww4o1MPnXQVe09fovEsXBC+AXO16LBK/
2610
2667
  0BYggPpqs9jeBlvqCnTNAP/jIXWgBeNF/YXzBfHxIoC3z5cj+Or2X3r9Ye2F
2611
2668
  1izgAAAAAElFTkSuQmCC
2612
- " alt="tip" class="icon"/>
2669
+ " class="icon"/>
2613
2670
 
2614
2671
  <div class="content"><ol>
2615
2672
  <li>Create a file named <tt>merge2</tt> with the following content: <pre class="code">
@@ -2628,7 +2685,7 @@ kdiff3 --auto --output <span style="background-color:#fff0f0"><span style="color
2628
2685
  </div>
2629
2686
  <div class="section">
2630
2687
  <h3 class="title">
2631
- <a class="toc" id="usage.tools.convert" href="#a-606932168">4.8.2</a>&nbsp;&nbsp;Verilog to Ruby conversion
2688
+ <a class="toc" id="usage.tools.convert" href="#a-607057848">4.8.2</a>&nbsp;&nbsp;Verilog to Ruby conversion
2632
2689
  </h3>
2633
2690
  <div class="content"><p>The <strong>convert</strong> tool can be used to convert Verilog header files into Ruby. You can try it by running the <pre>ruby-vpi convert --help</pre> command.</p>
2634
2691
 
@@ -2638,7 +2695,7 @@ kdiff3 --auto --output <span style="background-color:#fff0f0"><span style="color
2638
2695
  </div>
2639
2696
  <div class="section">
2640
2697
  <h2 class="title">
2641
- <a class="toc" id="usage.tutorial" href="#a-606934638">4.9</a>&nbsp;&nbsp;Tutorial
2698
+ <a class="toc" id="usage.tutorial" href="#a-607060318">4.9</a>&nbsp;&nbsp;Tutorial
2642
2699
  </h2>
2643
2700
  <div class="content"><ol>
2644
2701
  <li><a class="xref" href="#usage.tutorial.declare-design">Declare a design</a> using Verilog 2001 syntax.</li>
@@ -2653,7 +2710,7 @@ kdiff3 --auto --output <span style="background-color:#fff0f0"><span style="color
2653
2710
 
2654
2711
  <p><div class="section">
2655
2712
  <h3 class="title">
2656
- <a class="toc" id="usage.tutorial.declare-design" href="#a-606947158">4.9.1</a>&nbsp;&nbsp;Start with a Verilog design
2713
+ <a class="toc" id="usage.tutorial.declare-design" href="#a-607074198">4.9.1</a>&nbsp;&nbsp;Start with a Verilog design
2657
2714
  </h3>
2658
2715
  <div class="content"><p>First, we need a Verilog design to test. In this tutorial, <a class="xref" href="#fig:counter.v_decl">Example 5: <em>Declaration of a simple up-counter with synchronous reset</em></a> will serve as our design under test. Its interface is composed of the following parts:</p>
2659
2716
 
@@ -2667,7 +2724,7 @@ kdiff3 --auto --output <span style="background-color:#fff0f0"><span style="color
2667
2724
 
2668
2725
 
2669
2726
  <p><div class="example">
2670
- <p class="title"><a class="toc" id="fig:counter.v_decl" href="#a-606950328">Example 5</a>.&nbsp;&nbsp;Declaration of a simple up-counter with synchronous reset</p>
2727
+ <p class="title"><a class="toc" id="fig:counter.v_decl" href="#a-607077538">Example 5</a>.&nbsp;&nbsp;Declaration of a simple up-counter with synchronous reset</p>
2671
2728
  <div class="content"><pre class="code" lang="verilog">
2672
2729
  module counter #(parameter Size = 5) (
2673
2730
  input clock,
@@ -2681,7 +2738,7 @@ Before we continue, save the source code shown in <a class="xref" href="#fig:cou
2681
2738
  </div>
2682
2739
  <div class="section">
2683
2740
  <h3 class="title">
2684
- <a class="toc" id="usage.tutorial.generate-test" href="#a-606953958">4.9.2</a>&nbsp;&nbsp;Generate a test
2741
+ <a class="toc" id="usage.tutorial.generate-test" href="#a-607081338">4.9.2</a>&nbsp;&nbsp;Generate a test
2685
2742
  </h3>
2686
2743
  <div class="content"><p>Now that we have a Verilog design to test, we shall use the <a class="xref" href="#usage.tools.generate">generate</a> tool to generate some scaffolding for our test. This tool allows us to implement our specification using RSpec, xUnit, or any other format.</p>
2687
2744
 
@@ -2706,7 +2763,7 @@ cp counter.v xUnit
2706
2763
 
2707
2764
 
2708
2765
  <p><div class="example">
2709
- <p class="title"><a class="toc" id="fig:generate-test.RSpec" href="#a-606962678">Example 6</a>.&nbsp;&nbsp;Generating a test with specification in RSpec format</p>
2766
+ <p class="title"><a class="toc" id="fig:generate-test.RSpec" href="#a-607090908">Example 6</a>.&nbsp;&nbsp;Generating a test with specification in RSpec format</p>
2710
2767
  <div class="content"><pre>
2711
2768
  $ ruby-vpi generate counter.v --RSpec
2712
2769
 
@@ -2719,7 +2776,7 @@ $ ruby-vpi generate counter.v --RSpec
2719
2776
  </pre></div>
2720
2777
  </div>
2721
2778
  <div class="example">
2722
- <p class="title"><a class="toc" id="fig:generate-test.xUnit" href="#a-606964548">Example 7</a>.&nbsp;&nbsp;Generating a test with specification in xUnit format</p>
2779
+ <p class="title"><a class="toc" id="fig:generate-test.xUnit" href="#a-607092778">Example 7</a>.&nbsp;&nbsp;Generating a test with specification in xUnit format</p>
2723
2780
  <div class="content"><pre>
2724
2781
  $ ruby-vpi generate counter.v --xUnit
2725
2782
 
@@ -2734,7 +2791,7 @@ $ ruby-vpi generate counter.v --xUnit
2734
2791
  </div>
2735
2792
  <div class="section">
2736
2793
  <h3 class="title">
2737
- <a class="toc" id="usage.tutorial.specification" href="#a-606966828">4.9.3</a>&nbsp;&nbsp;Specify your expectations
2794
+ <a class="toc" id="usage.tutorial.specification" href="#a-607095058">4.9.3</a>&nbsp;&nbsp;Specify your expectations
2738
2795
  </h3>
2739
2796
  <div class="content"><p>So far, the test generation tool has created a basic foundation for our test Now we must build upon this foundation by identifying our <a class="xref" href="#glossary.expectation">expectation</a> of the design under test. That is, how do we expect the design to <em>behave</em> under certain conditions?</p>
2740
2797
 
@@ -2751,7 +2808,7 @@ Here are some reasonable expectations for our simple counter:
2751
2808
 
2752
2809
 
2753
2810
  <div class="example">
2754
- <p class="title"><a class="toc" id="fig:RSpec-counter_spec.rb" href="#a-606972788">Example 8</a>.&nbsp;&nbsp;Specification implemented in RSpec format</p>
2811
+ <p class="title"><a class="toc" id="fig:RSpec-counter_spec.rb" href="#a-607101528">Example 8</a>.&nbsp;&nbsp;Specification implemented in RSpec format</p>
2755
2812
  <div class="content"><pre class="code">require <span style="background-color:#fff0f0"><span style="color:#710">'</span><span style="color:#D20">spec</span><span style="color:#710">'</span></span>
2756
2813
 
2757
2814
  <span style="color:#888"># lowest upper bound of counter's value</span>
@@ -2790,10 +2847,11 @@ describe <span style="background-color:#fff0f0"><span style="color:#710">&quot;<
2790
2847
  <span style="color:#036; font-weight:bold">DUT</span>.cycle! <span style="color:#888"># increment the counter</span>
2791
2848
  <span style="color:#036; font-weight:bold">DUT</span>.count.intVal.should == <span style="color:#00D; font-weight:bold">0</span>
2792
2849
  <span style="color:#080; font-weight:bold">end</span>
2793
- <span style="color:#080; font-weight:bold">end</span></pre></div>
2850
+ <span style="color:#080; font-weight:bold">end</span>
2851
+ </pre></div>
2794
2852
  </div>
2795
2853
  <div class="example">
2796
- <p class="title"><a class="toc" id="fig:xUnit-counter_spec.rb" href="#a-606975088">Example 9</a>.&nbsp;&nbsp;Specification implemented in xUnit format</p>
2854
+ <p class="title"><a class="toc" id="fig:xUnit-counter_spec.rb" href="#a-607103348">Example 9</a>.&nbsp;&nbsp;Specification implemented in xUnit format</p>
2797
2855
  <div class="content"><pre class="code">require <span style="background-color:#fff0f0"><span style="color:#710">'</span><span style="color:#D20">test/unit</span><span style="color:#710">'</span></span>
2798
2856
 
2799
2857
  <span style="color:#888"># lowest upper bound of counter's value</span>
@@ -2832,7 +2890,8 @@ describe <span style="background-color:#fff0f0"><span style="color:#710">&quot;<
2832
2890
  <span style="color:#036; font-weight:bold">DUT</span>.cycle! <span style="color:#888"># increment the counter</span>
2833
2891
  assert_equal( <span style="color:#00D; font-weight:bold">0</span>, <span style="color:#036; font-weight:bold">DUT</span>.count.intVal )
2834
2892
  <span style="color:#080; font-weight:bold">end</span>
2835
- <span style="color:#080; font-weight:bold">end</span></pre></div>
2893
+ <span style="color:#080; font-weight:bold">end</span>
2894
+ </pre></div>
2836
2895
  </div>
2837
2896
  Before we continue,
2838
2897
  <ol>
@@ -2842,13 +2901,13 @@ Before we continue,
2842
2901
  </div>
2843
2902
  <div class="section">
2844
2903
  <h3 class="title">
2845
- <a class="toc" id="usage.tutorial.implement-proto" href="#a-606069158">4.9.4</a>&nbsp;&nbsp;Implement the prototype
2904
+ <a class="toc" id="usage.tutorial.implement-proto" href="#a-607108658">4.9.4</a>&nbsp;&nbsp;Implement the prototype
2846
2905
  </h3>
2847
2906
  <div class="content"><p>Now that we have a specification against which to verify our design let us build a prototype of our design. By doing so, we exercise our specification, experience potential problems that may arise when we later implement our design in Verilog, and gain confidence in our work. The result of this proceess is illustrated by <a class="xref" href="#fig:counter_proto.rb">Example 10: <em>Ruby prototype of our Verilog design</em></a>.</p>
2848
2907
 
2849
2908
 
2850
2909
  <p><div class="example">
2851
- <p class="title"><a class="toc" id="fig:counter_proto.rb" href="#a-606100048">Example 10</a>.&nbsp;&nbsp;Ruby prototype of our Verilog design</p>
2910
+ <p class="title"><a class="toc" id="fig:counter_proto.rb" href="#a-607112038">Example 10</a>.&nbsp;&nbsp;Ruby prototype of our Verilog design</p>
2852
2911
  <div class="content"><pre class="code"><span style="color:#080; font-weight:bold">if</span> <span style="color:#036; font-weight:bold">RubyVPI</span>::<span style="color:#036; font-weight:bold">USE_PROTOTYPE</span>
2853
2912
  always <span style="color:#080; font-weight:bold">do</span>
2854
2913
  wait <span style="color:#080; font-weight:bold">until</span> <span style="color:#036; font-weight:bold">DUT</span>.clock.posedge?
@@ -2859,13 +2918,14 @@ Before we continue,
2859
2918
  <span style="color:#036; font-weight:bold">DUT</span>.count.intVal += <span style="color:#00D; font-weight:bold">1</span>
2860
2919
  <span style="color:#080; font-weight:bold">end</span>
2861
2920
  <span style="color:#080; font-weight:bold">end</span>
2862
- <span style="color:#080; font-weight:bold">end</span></pre></div>
2921
+ <span style="color:#080; font-weight:bold">end</span>
2922
+ </pre></div>
2863
2923
  </div>
2864
2924
  Before we continue, replace the contents of the files named <tt>RSpec/counter_proto.rb</tt> and <tt>xUnit/counter_proto.rb</tt> with the source code shown in <a class="xref" href="#fig:counter_proto.rb">Example 10: <em>Ruby prototype of our Verilog design</em></a>.</p></div>
2865
2925
  </div>
2866
2926
  <div class="section">
2867
2927
  <h3 class="title">
2868
- <a class="toc" id="usage.tutorial.test-proto" href="#a-606122988">4.9.5</a>&nbsp;&nbsp;Verify the prototype
2928
+ <a class="toc" id="usage.tutorial.test-proto" href="#a-607115808">4.9.5</a>&nbsp;&nbsp;Verify the prototype
2869
2929
  </h3>
2870
2930
  <div class="content"><p>Now that we have implemented our prototype, we are ready to verify it against our specification by running the test This process is illustrated by <a class="xref" href="#fig:test-proto.RSpec">Example 11: <em>Running a test with specification in RSpec format</em></a> and <a class="xref" href="#fig:test-proto.unit-test">Example 12: <em>Running a test with specification in xUnit format</em></a>.</p>
2871
2931
 
@@ -2874,7 +2934,7 @@ Before we continue, replace the contents of the files named <tt>RSpec/counter_pr
2874
2934
 
2875
2935
 
2876
2936
  <p><div class="example">
2877
- <p class="title"><a class="toc" id="fig:test-proto.RSpec" href="#a-606139338">Example 11</a>.&nbsp;&nbsp;Running a test with specification in RSpec format</p>
2937
+ <p class="title"><a class="toc" id="fig:test-proto.RSpec" href="#a-606210758">Example 11</a>.&nbsp;&nbsp;Running a test with specification in RSpec format</p>
2878
2938
  <div class="content"><pre>
2879
2939
  $ cd RSpec
2880
2940
  $ rake cver PROTOTYPE=1
@@ -2889,7 +2949,7 @@ cd -
2889
2949
  </pre></div>
2890
2950
  </div>
2891
2951
  <div class="example">
2892
- <p class="title"><a class="toc" id="fig:test-proto.unit-test" href="#a-606145238">Example 12</a>.&nbsp;&nbsp;Running a test with specification in xUnit format</p>
2952
+ <p class="title"><a class="toc" id="fig:test-proto.unit-test" href="#a-606234128">Example 12</a>.&nbsp;&nbsp;Running a test with specification in xUnit format</p>
2893
2953
  <div class="content"><pre>
2894
2954
  $ cd xUnit
2895
2955
  $ rake cver PROTOTYPE=1
@@ -2904,7 +2964,7 @@ Finished in 0.043859 seconds.
2904
2964
  </pre></div>
2905
2965
  </div>
2906
2966
  <div class="tip">
2907
- <p class="title"><a class="toc" id="What-can-the-test-runner-do" href="#a-606150528">Tip 3</a>.&nbsp;&nbsp;What can the test runner do?</p>
2967
+ <p class="title"><a class="toc" id="What-can-the-test-runner-do" href="#a-606244898">Tip 3</a>.&nbsp;&nbsp;What can the test runner do?</p>
2908
2968
 
2909
2969
  <img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAABHNCSVQICAgI
2910
2970
  fAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3
@@ -2981,20 +3041,20 @@ ta22BwC4nZ2dXdu2bfujlpaWe4wxNDMz84OzZ88em5qamkZ9ppfjAflu+bDc
2981
3041
  HGAANv6XHFhk9iI4CwDNm5m3aJG9Ww4o1MPnXQVe09fovEsXBC+AXO16LBK/
2982
3042
  0BYggPpqs9jeBlvqCnTNAP/jIXWgBeNF/YXzBfHxIoC3z5cj+Or2X3r9Ye2F
2983
3043
  1izgAAAAAElFTkSuQmCC
2984
- " alt="tip" class="icon"/>
3044
+ " class="icon"/>
2985
3045
 
2986
3046
  <div class="content">If you invoke the test runner (1) without any arguments or (2) with the <tt>--tasks</tt> option, it will show you a list of tasks that it can perform for you.</div>
2987
3047
  </div></p></div>
2988
3048
  </div>
2989
3049
  <div class="section">
2990
3050
  <h3 class="title">
2991
- <a class="toc" id="usage.tutorial.implement-design" href="#a-606168938">4.9.6</a>&nbsp;&nbsp;Implement the design
3051
+ <a class="toc" id="usage.tutorial.implement-design" href="#a-606264088">4.9.6</a>&nbsp;&nbsp;Implement the design
2992
3052
  </h3>
2993
3053
  <div class="content"><p>Now that we have implemented and verified our prototype, we are ready to implement our design This is often quite simple because we translate <em>existing</em> code from Ruby (our prototype) into Verilog (our design). The result of this process is illustrated by <a class="xref" href="#fig:counter.v_impl">Example 13: <em>Implementation of a simple up-counter with synchronous reset</em></a>.</p>
2994
3054
 
2995
3055
 
2996
3056
  <p><div class="example">
2997
- <p class="title"><a class="toc" id="fig:counter.v_impl" href="#a-606237758">Example 13</a>.&nbsp;&nbsp;Implementation of a simple up-counter with synchronous reset</p>
3057
+ <p class="title"><a class="toc" id="fig:counter.v_impl" href="#a-606295138">Example 13</a>.&nbsp;&nbsp;Implementation of a simple up-counter with synchronous reset</p>
2998
3058
  <div class="content"><pre class="code" lang="verilog">/**
2999
3059
  A simple up-counter with synchronous reset.
3000
3060
 
@@ -3014,13 +3074,14 @@ module counter #(parameter Size = 5) (
3014
3074
  else
3015
3075
  count &lt;= count + 1;
3016
3076
  end
3017
- endmodule</pre></div>
3077
+ endmodule
3078
+ </pre></div>
3018
3079
  </div>
3019
3080
  Before we continue, replace the contents of the files named <tt>RSpec/counter.v</tt> and <tt>xUnit/counter.v</tt> with the source code shown in <a class="xref" href="#fig:counter.v_impl">Example 13: <em>Implementation of a simple up-counter with synchronous reset</em></a></p></div>
3020
3081
  </div>
3021
3082
  <div class="section">
3022
3083
  <h3 class="title">
3023
- <a class="toc" id="usage.tutorial.test-design" href="#a-606269558">4.9.7</a>&nbsp;&nbsp;Verify the design
3084
+ <a class="toc" id="usage.tutorial.test-design" href="#a-606356058">4.9.7</a>&nbsp;&nbsp;Verify the design
3024
3085
  </h3>
3025
3086
  <div class="content"><p>Now that we have implemented our design we are ready to verify it against our specification by running the test <a class="xref" href="#fig:test-design.RSpec">Example 14: <em>Running a test with specification in RSpec format</em></a> and <a class="xref" href="#fig:test-design.unit-test">Example 15: <em>Running a test with specification in xUnit format</em></a> illustrate this process.</p>
3026
3087
 
@@ -3029,7 +3090,7 @@ Before we continue, replace the contents of the files named <tt>RSpec/counter.v<
3029
3090
 
3030
3091
 
3031
3092
  <p><div class="example">
3032
- <p class="title"><a class="toc" id="fig:test-design.RSpec" href="#a-606307738">Example 14</a>.&nbsp;&nbsp;Running a test with specification in RSpec format</p>
3093
+ <p class="title"><a class="toc" id="fig:test-design.RSpec" href="#a-606419298">Example 14</a>.&nbsp;&nbsp;Running a test with specification in RSpec format</p>
3033
3094
  <div class="content"><pre>
3034
3095
  $ cd RSpec
3035
3096
  $ rake cver
@@ -3042,7 +3103,7 @@ Finished in 0.041198 seconds
3042
3103
  </pre></div>
3043
3104
  </div>
3044
3105
  <div class="example">
3045
- <p class="title"><a class="toc" id="fig:test-design.unit-test" href="#a-606325118">Example 15</a>.&nbsp;&nbsp;Running a test with specification in xUnit format</p>
3106
+ <p class="title"><a class="toc" id="fig:test-design.unit-test" href="#a-606425048">Example 15</a>.&nbsp;&nbsp;Running a test with specification in xUnit format</p>
3046
3107
  <div class="content"><pre>
3047
3108
  $ cd xUnit
3048
3109
  $ rake cver
@@ -3058,7 +3119,7 @@ Finished in 0.040262 seconds.
3058
3119
  </div>
3059
3120
  <div class="section">
3060
3121
  <h3 class="title">
3061
- <a class="toc" id="usage.examples" href="#a-606358268">4.9.8</a>&nbsp;&nbsp;More examples
3122
+ <a class="toc" id="usage.examples" href="#a-606447908">4.9.8</a>&nbsp;&nbsp;More examples
3062
3123
  </h3>
3063
3124
  <div class="content">The <tt>examples</tt> directory (<a href="http://ruby-vpi.rubyforge.org/src/examples/">browse it online</a>) contains several example tests which illustrate how Ruby-VPI can be used. Each example has an associated <tt>Rakefile</tt> which simplifies the process of running it. Therefore, simply navigate into an example directory and run the <pre>rake</pre> command to get started.</div>
3064
3125
  </div></p></div>
@@ -3067,7 +3128,7 @@ Finished in 0.040262 seconds.
3067
3128
  <div class="chapter">
3068
3129
  <h1 class="title">
3069
3130
  Chapter
3070
- <a class="toc" id="hacking" href="#a-606376468">5</a>
3131
+ <a class="toc" id="hacking" href="#a-606474498">5</a>
3071
3132
 
3072
3133
  <br/>
3073
3134
 
@@ -3076,7 +3137,7 @@ Finished in 0.040262 seconds.
3076
3137
 
3077
3138
  <div class="content"><div class="section">
3078
3139
  <h2 class="title">
3079
- <a class="toc" id="hacking.build" href="#a-605850148">5.1</a>&nbsp;&nbsp;Building from source code
3140
+ <a class="toc" id="hacking.build" href="#a-606497178">5.1</a>&nbsp;&nbsp;Building from source code
3080
3141
  </h2>
3081
3142
  <div class="content"><p>Obtain the source code from the project <a href="http://darcs.net">Darcs</a> repository:</p>
3082
3143
 
@@ -3091,7 +3152,7 @@ Finished in 0.040262 seconds.
3091
3152
  ruby bin/ruby-vpi -v</pre>
3092
3153
 
3093
3154
 
3094
- <p>If the commands were successful, then you will see output like this: <pre>ruby-vpi 20.0.0 (2008-01-27) http://ruby-vpi.rubyforge.org /home/sun/src/ruby-vpi
3155
+ <p>If the commands were successful, then you will see output like this: <pre>ruby-vpi 21.0.0 (2008-06-08) http://ruby-vpi.rubyforge.org /home/sun/src/ruby-vpi
3095
3156
  </pre></p>
3096
3157
 
3097
3158
 
@@ -3099,7 +3160,7 @@ ruby bin/ruby-vpi -v</pre>
3099
3160
  </div>
3100
3161
  <div class="section">
3101
3162
  <h2 class="title">
3102
- <a class="toc" id="Installing-without-really-installing" href="#a-605974548">5.2</a>&nbsp;&nbsp;Installing without really installing
3163
+ <a class="toc" id="Installing-without-really-installing" href="#a-606511708">5.2</a>&nbsp;&nbsp;Installing without really installing
3103
3164
  </h2>
3104
3165
  <div class="content"><p>After successfully building from source (see <a class="xref" href="#hacking.build">Section 5.1: <em>Building from source code</em></a>), set the <code class="code"><span style="color:#036; font-weight:bold">RUBYLIB</span></code> environment variable to the path where you checked out the source code <em>plus</em> the <tt>lib/</tt> directory.</p>
3105
3166
 
@@ -3108,7 +3169,7 @@ ruby bin/ruby-vpi -v</pre>
3108
3169
  </div>
3109
3170
  <div class="section">
3110
3171
  <h2 class="title">
3111
- <a class="toc" id="hacking.release-packages" href="#a-605757818">5.3</a>&nbsp;&nbsp;Building release packages
3172
+ <a class="toc" id="hacking.release-packages" href="#a-606005938">5.3</a>&nbsp;&nbsp;Building release packages
3112
3173
  </h2>
3113
3174
  <div class="content"><p>In addition to the <a class="xref" href="#setup.reqs">normal requirements</a> you need the following software to build release packages:</p>
3114
3175
 
@@ -3139,7 +3200,7 @@ rake dist # Build release packages.
3139
3200
  rake doc # Build the documentation.
3140
3201
  rake doc/api/c # Build API reference for C.
3141
3202
  rake doc/api/ruby # Build the doc/api/ruby HTML Files
3142
- rake gem # Build the gem file ruby-vpi-20.0.0.gem
3203
+ rake gem # Build the gem file ruby-vpi-21.0.0.gem
3143
3204
  rake gem_config_inst # Configures the gem during installation.
3144
3205
  rake package # Build all the packages
3145
3206
  rake redoc/api/ruby # Force a rebuild of the RDOC files
@@ -3151,7 +3212,7 @@ rake upload # Upload to project website.
3151
3212
  </div>
3152
3213
  <div class="section">
3153
3214
  <h2 class="title">
3154
- <a class="toc" id="hacking.guide" href="#a-607050138">5.4</a>&nbsp;&nbsp;Editing this guide
3215
+ <a class="toc" id="hacking.guide" href="#a-606145488">5.4</a>&nbsp;&nbsp;Editing this guide
3155
3216
  </h2>
3156
3217
  <div class="content">The <tt>doc/guide.erb</tt> file contains the source code of this guide. You must install <a href="http://gerbil.rubyforge.org">Gerbil</a> before you can run the <pre>rake doc</pre> command to automatically generate the HTML documentation you are currently viewing.</div>
3157
3218
  </div></div>
@@ -3159,7 +3220,7 @@ rake upload # Upload to project website.
3159
3220
  <div class="chapter">
3160
3221
  <h1 class="title">
3161
3222
  Chapter
3162
- <a class="toc" id="problems" href="#a-607052618">6</a>
3223
+ <a class="toc" id="problems" href="#a-605970068">6</a>
3163
3224
 
3164
3225
  <br/>
3165
3226
 
@@ -3171,14 +3232,14 @@ rake upload # Upload to project website.
3171
3232
 
3172
3233
  <p><div class="section">
3173
3234
  <h2 class="title">
3174
- <a class="toc" id="problem.ivl" href="#a-607054268">6.1</a>&nbsp;&nbsp;Icarus Verilog
3235
+ <a class="toc" id="problem.ivl" href="#a-607199668">6.1</a>&nbsp;&nbsp;Icarus Verilog
3175
3236
  </h2>
3176
3237
  <div class="content"><p>The following sections describe problems that occur when Icarus Verilog is used with Ruby-VPI.</p>
3177
3238
 
3178
3239
 
3179
3240
  <p><div class="section">
3180
3241
  <h3 class="title">
3181
- <a class="toc" id="problems.ivl.vpi_handle_by_name.absolute-paths" href="#a-607055848">6.1.1</a>&nbsp;&nbsp;Give full paths to Verilog objects
3242
+ <a class="toc" id="problems.ivl.vpi_handle_by_name.absolute-paths" href="#a-607201248">6.1.1</a>&nbsp;&nbsp;Give full paths to Verilog objects
3182
3243
  </h3>
3183
3244
  <div class="content"><p>In version 0.8 and snapshot 20061009 of Icarus Verilog, the <code class="code">vpi_handle_by_name</code> function requires an <em>absolute</em> path (including the name of the bench which instantiates the design) to a Verilog object. In addition, <code class="code">vpi_handle_by_name</code> always returns <code class="code"><span style="color:#038; font-weight:bold">nil</span></code> when its second parameter is specified.</p>
3184
3245
 
@@ -3187,7 +3248,7 @@ rake upload # Upload to project website.
3187
3248
 
3188
3249
 
3189
3250
  <p><div class="example">
3190
- <p class="title"><a class="toc" id="ex:TestFoo" href="#a-607058828">Example 16</a>.&nbsp;&nbsp;Part of a bench which instantiates a Verilog design</p>
3251
+ <p class="title"><a class="toc" id="ex:TestFoo" href="#a-607204398">Example 16</a>.&nbsp;&nbsp;Part of a bench which instantiates a Verilog design</p>
3191
3252
  <div class="content"><pre class="code" lang="verilog">
3192
3253
  module TestFoo;
3193
3254
  reg clk_reg;
@@ -3198,7 +3259,7 @@ endmodule
3198
3259
  </div>
3199
3260
  <div class="section">
3200
3261
  <h3 class="title">
3201
- <a class="toc" id="problems.ivl.vpi_handle_by_name.connect-registers" href="#a-607061068">6.1.2</a>&nbsp;&nbsp;Registers must be connected
3262
+ <a class="toc" id="problems.ivl.vpi_handle_by_name.connect-registers" href="#a-607206638">6.1.2</a>&nbsp;&nbsp;Registers must be connected
3202
3263
  </h3>
3203
3264
  <div class="content"><p>In version 0.8 of Icarus Verilog, if you want to access a register in a design, then it must be connected to something (either assigned to a wire or passed as a parameter to a module instantiation). Otherwise, you will get a <code class="code"><span style="color:#038; font-weight:bold">nil</span></code> value as the result of <code class="code">vpi_handle_by_name</code> method.</p>
3204
3265
 
@@ -3210,7 +3271,7 @@ endmodule
3210
3271
 
3211
3272
 
3212
3273
  <p><div class="example">
3213
- <p class="title"><a class="toc" id="ex:TestFoo_bad" href="#a-607066798">Example 17</a>.&nbsp;&nbsp;Bad design with unconnected registers</p>
3274
+ <p class="title"><a class="toc" id="ex:TestFoo_bad" href="#a-607212878">Example 17</a>.&nbsp;&nbsp;Bad design with unconnected registers</p>
3214
3275
  <div class="content"><p>Here the <code class="code">clk_reg</code> register is not connected to anything.</p>
3215
3276
 
3216
3277
 
@@ -3221,7 +3282,7 @@ endmodule
3221
3282
  </pre></div>
3222
3283
  </div>
3223
3284
  <div class="example">
3224
- <p class="title"><a class="toc" id="ex:TestFoo_fix" href="#a-607068638">Example 18</a>.&nbsp;&nbsp;Fixed design with wired registers</p>
3285
+ <p class="title"><a class="toc" id="ex:TestFoo_fix" href="#a-607214718">Example 18</a>.&nbsp;&nbsp;Fixed design with wired registers</p>
3225
3286
  <div class="content"><p>Here the <code class="code">clk_reg</code> register is connected to the <code class="code">clk_wire</code> wire.</p>
3226
3287
 
3227
3288
 
@@ -3236,16 +3297,22 @@ endmodule
3236
3297
  </div>
3237
3298
  <div class="section">
3238
3299
  <h3 class="title">
3239
- <a class="toc" id="problems.ivl.vpi_reset" href="#a-607070908">6.1.3</a>&nbsp;&nbsp;VPI::reset
3300
+ <a class="toc" id="problems.ivl.vpi_reset" href="#a-607216988">6.1.3</a>&nbsp;&nbsp;VPI::reset
3240
3301
  </h3>
3241
3302
  <div class="content">In version 0.8 of Icarus Verilog, the <code class="code">vpi_control(vpiReset)</code> VPI function causes an assertion to fail inside the simulator. As a result, the simulation terminates and a core dump is produced.</div>
3242
3303
  </div></p></div>
3304
+ </div>
3305
+ <div class="section">
3306
+ <h2 class="title">
3307
+ <a class="toc" id="problem.ncsim" href="#a-607219468">6.2</a>&nbsp;&nbsp;Cadence NC-Sim
3308
+ </h2>
3309
+ <div class="content"><strong>ncsim</strong> crashes with Ruby-VPI 21.0.0. The problem is most likely an interaction issue with Ruby&#8217;s threads implementation because <strong>ncsim</strong> worked fine with a <a href="http://en.wikipedia.org/wiki/Pthreads" title="pthreads">POSIX threads</a> based implementation of Ruby-VPI (version 20.0.0).</div>
3243
3310
  </div></p></div>
3244
3311
  </div>
3245
3312
  <div class="chapter">
3246
3313
  <h1 class="title">
3247
3314
  Chapter
3248
- <a class="toc" id="glossary" href="#a-607073798">7</a>
3315
+ <a class="toc" id="glossary" href="#a-607221888">7</a>
3249
3316
 
3250
3317
  <br/>
3251
3318
 
@@ -3254,37 +3321,37 @@ endmodule
3254
3321
 
3255
3322
  <div class="content"><div class="section">
3256
3323
  <h2 class="title">
3257
- <a class="toc" id="glossary.test" href="#a-607075458">7.1</a>&nbsp;&nbsp;Test
3324
+ <a class="toc" id="glossary.test" href="#a-607223548">7.1</a>&nbsp;&nbsp;Test
3258
3325
  </h2>
3259
3326
  <div class="content">Something that checks if a <a class="xref" href="#glossary.design">design</a> satisfies a <a class="xref" href="#glossary.specification">specification</a></div>
3260
3327
  </div>
3261
3328
  <div class="section">
3262
3329
  <h2 class="title">
3263
- <a class="toc" id="glossary.design" href="#a-607080108">7.2</a>&nbsp;&nbsp;Design
3330
+ <a class="toc" id="glossary.design" href="#a-607228538">7.2</a>&nbsp;&nbsp;Design
3264
3331
  </h2>
3265
3332
  <div class="content">A Verilog module that is verified against a <a class="xref" href="#glossary.specification">specification</a> in order to ensure correctness or soundness of its being. In other words, it is the thing being checked: does it work or not?</div>
3266
3333
  </div>
3267
3334
  <div class="section">
3268
3335
  <h2 class="title">
3269
- <a class="toc" id="glossary.specification" href="#a-607083458">7.3</a>&nbsp;&nbsp;Specification
3336
+ <a class="toc" id="glossary.specification" href="#a-607232058">7.3</a>&nbsp;&nbsp;Specification
3270
3337
  </h2>
3271
3338
  <div class="content">A set of <a class="xref" href="#glossary.expectation">expectations</a> which define the desired behavior of a <a class="xref" href="#glossary.design">design</a> when it is subjected to certain stimulus.</div>
3272
3339
  </div>
3273
3340
  <div class="section">
3274
3341
  <h2 class="title">
3275
- <a class="toc" id="glossary.expectation" href="#a-607088168">7.4</a>&nbsp;&nbsp;Expectation
3342
+ <a class="toc" id="glossary.expectation" href="#a-607237108">7.4</a>&nbsp;&nbsp;Expectation
3276
3343
  </h2>
3277
3344
  <div class="content">The desired response to some stimulus.</div>
3278
3345
  </div>
3279
3346
  <div class="section">
3280
3347
  <h2 class="title">
3281
- <a class="toc" id="glossary.handle" href="#a-607090238">7.5</a>&nbsp;&nbsp;Handle
3348
+ <a class="toc" id="glossary.handle" href="#a-607239178">7.5</a>&nbsp;&nbsp;Handle
3282
3349
  </h2>
3283
3350
  <div class="content">A reference to an object inside the Verilog simulation. See <a class="xref" href="#vpi.handles">Section 4.3.1: <em>Handles</em></a> for usage instructions.</div>
3284
3351
  </div>
3285
3352
  <div class="section">
3286
3353
  <h2 class="title">
3287
- <a class="toc" id="glossary.rake" href="#a-607093668">7.6</a>&nbsp;&nbsp;Rake
3354
+ <a class="toc" id="glossary.rake" href="#a-607242778">7.6</a>&nbsp;&nbsp;Rake
3288
3355
  </h2>
3289
3356
  <div class="content"><blockquote>
3290
3357
  <p>Rake is a build tool, written in Ruby, using Ruby as a build language. Rake is similar to <strong>make</strong> in scope and purpose.</p>
@@ -3295,7 +3362,7 @@ endmodule
3295
3362
  </div>
3296
3363
  <div class="section">
3297
3364
  <h2 class="title">
3298
- <a class="toc" id="glossary.RSpec" href="#a-607095818">7.7</a>&nbsp;&nbsp;RSpec
3365
+ <a class="toc" id="glossary.RSpec" href="#a-607244928">7.7</a>&nbsp;&nbsp;RSpec
3299
3366
  </h2>
3300
3367
  <div class="content"><p>The <a class="xref" href="#glossary.BDD">BDD</a> framework for Ruby.</p>
3301
3368
 
@@ -3304,7 +3371,7 @@ endmodule
3304
3371
  </div>
3305
3372
  <div class="section">
3306
3373
  <h2 class="title">
3307
- <a class="toc" id="glossary.TDD" href="#a-607099338">7.8</a>&nbsp;&nbsp;Test driven development
3374
+ <a class="toc" id="glossary.TDD" href="#a-607248618">7.8</a>&nbsp;&nbsp;Test driven development
3308
3375
  </h2>
3309
3376
  <div class="content"><p>An <a href="http://agilemanifesto.org/">agile software development methodology</a> which emphasizes (1) testing functionality before implementing it and (2) refactoring.</p>
3310
3377
 
@@ -3313,7 +3380,7 @@ endmodule
3313
3380
  </div>
3314
3381
  <div class="section">
3315
3382
  <h2 class="title">
3316
- <a class="toc" id="glossary.BDD" href="#a-607101548">7.9</a>&nbsp;&nbsp;Behavior driven development
3383
+ <a class="toc" id="glossary.BDD" href="#a-607250828">7.9</a>&nbsp;&nbsp;Behavior driven development
3317
3384
  </h2>
3318
3385
  <div class="content"><p>An <a href="http://agilemanifesto.org/">agile software development methodology</a> which emphasizes thinking in terms of behavior when designing, implementing, and verifying software.</p>
3319
3386
 
@@ -3330,7 +3397,7 @@ endmodule
3330
3397
 
3331
3398
  <div id="footer">
3332
3399
 
3333
- Generated on Sun Jan 27 22:46:48 -0800 2008 by <a href="http://gerbil.rubyforge.org">Gerbil</a> 1.1.0.
3400
+ Generated on Sun Jun 08 15:55:46 -0700 2008 by <a href="http://gerbil.rubyforge.org">Gerbil</a> 3.0.2.
3334
3401
 
3335
3402
  <p>The admonition icons (<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAABHNCSVQICAgI
3336
3403
  fAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3
@@ -3407,7 +3474,7 @@ ta22BwC4nZ2dXdu2bfujlpaWe4wxNDMz84OzZ88em5qamkZ9ppfjAflu+bDc
3407
3474
  HGAANv6XHFhk9iI4CwDNm5m3aJG9Ww4o1MPnXQVe09fovEsXBC+AXO16LBK/
3408
3475
  0BYggPpqs9jeBlvqCnTNAP/jIXWgBeNF/YXzBfHxIoC3z5cj+Or2X3r9Ye2F
3409
3476
  1izgAAAAAElFTkSuQmCC
3410
- " alt="tip"/> <img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAABHNCSVQICAgI
3477
+ "/> <img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAABHNCSVQICAgI
3411
3478
  fAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3
3412
3479
  Lmlua3NjYXBlLm9yZ5vuPBoAAAmCSURBVGiB1ZltbJXlGcd/9/N+Tlssh1Ja
3413
3480
  hNEJaK2UFxFptqC2wGCSTWdM3DSQzWVDEzVxy4xfjNkHQ8xMnEEXviwZ62Rj
@@ -3464,7 +3531,7 @@ bj2VSjFnzpxrKjafSSm5cOEC/f39KUAnrVsTgAkUAYU1NTUPx2KxjUEQTLmW
3464
3531
  YvOZpmnxjo6O3x48eHA76S4UB3qEUgohRBQoGLoyKTJJp+nyR97kmA1IwANS
3465
3532
  wODQ1auUSmYP9UNjoQBwAIv0DBUMFb6WZpNuRB9wSYsfUEr5kOdfSiGETrr1
3466
3533
  DUCQhrhWJkj394A0gKeUCjVo3r9Zv0r2P3yyQqPd16MPAAAAAElFTkSuQmCC
3467
- " alt="note"/> <img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAABHNCSVQICAgI
3534
+ "/> <img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAABHNCSVQICAgI
3468
3535
  fAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3
3469
3536
  Lmlua3NjYXBlLm9yZ5vuPBoAAAiESURBVGiB7ZpdbBzVFcd/Z2Znd2d3vbtm
3470
3537
  /RWvsbEdfyauSWzq2MZWEFVD5AqBaBpRVyaKoaakEBMEBRRVBaukKiqhQF+i
@@ -3516,7 +3583,7 @@ lQP3aeBFBNHmWbBT/aV/Wn8qvh+F0Uuw73noCsEocEkpFUwKABARJ+CKFwex
3516
3583
  MFmBqURf37Fpcf9hIAgEgHFgDBhLzIHkJFZKjYuIAiJACJiIH79ZAhKXdSTO
3517
3584
  ECQGPj690VUrcfw2ZYuXhICbYRZiUUhEYFLNkjYs6s3c/5J97/9q8F/RUcwR
3518
3585
  4xicOQAAAABJRU5ErkJggg==
3519
- " alt="caution"/>) used in this document are Copyright &copy; 2005 <a href="http://tango.freedesktop.org">Tango Desktop Project</a>. They are part of the <a href="http://tango.freedesktop.org/Tango_Icon_Library">Tango Icon Theme</a> set, which is distributed under the <a href="http://creativecommons.org/licenses/by-sa/2.5/">Creative Commons Attribution-ShareAlike 2.5 License Agreement</a>.</p>
3586
+ "/>) used in this document are Copyright &copy; 2005 <a href="http://tango.freedesktop.org">Tango Desktop Project</a>. They are part of the <a href="http://tango.freedesktop.org/Tango_Icon_Library">Tango Icon Theme</a> set, which is distributed under the <a href="http://creativecommons.org/licenses/by-sa/2.5/">Creative Commons Attribution-ShareAlike 2.5 License Agreement</a>.</p>
3520
3587
 
3521
3588
  </div>
3522
3589