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.
- data/LICENSE +2 -2
- data/Rakefile +2 -3
- data/bin/generate/runner.rake +1 -1
- data/doc/README +9 -0
- data/doc/Rakefile +21 -0
- data/doc/api/c/annotated.html +1 -1
- data/doc/api/c/binding_8c.html +76 -0
- data/doc/api/c/binding_8h.html +76 -0
- data/doc/api/c/files.html +9 -8
- data/doc/api/c/functions.html +1 -1
- data/doc/api/c/functions_vars.html +1 -1
- data/doc/api/c/globals.html +61 -11
- data/doc/api/c/globals_0x65.html +2 -8
- data/doc/api/c/globals_0x70.html +2 -8
- data/doc/api/c/globals_0x72.html +45 -25
- data/doc/api/c/globals_0x76.html +6 -35
- data/doc/api/c/globals_0x78.html +2 -8
- data/doc/api/c/globals_defs.html +2 -9
- data/doc/api/c/globals_defs_0x65.html +2 -3
- data/doc/api/c/globals_defs_0x70.html +2 -3
- data/doc/api/c/{globals_enum.html → globals_defs_0x72.html} +25 -7
- data/doc/api/c/globals_defs_0x76.html +4 -19
- data/doc/api/c/globals_defs_0x78.html +2 -3
- data/doc/api/c/globals_func.html +32 -37
- data/doc/api/c/globals_type.html +1 -3
- data/doc/api/c/globals_vars.html +5 -13
- data/doc/api/c/host_8c.html +93 -0
- data/doc/api/c/host_8h.html +69 -0
- data/doc/api/c/index.html +1 -1
- data/doc/api/c/main_8c.html +35 -33
- data/doc/api/c/structs__cb__data.html +1 -1
- data/doc/api/c/structs__vpi__delay.html +1 -1
- data/doc/api/c/structs__vpi__error__info.html +1 -1
- data/doc/api/c/structs__vpi__strengthval.html +1 -1
- data/doc/api/c/structs__vpi__systf__data.html +1 -1
- data/doc/api/c/structs__vpi__time.html +1 -1
- data/doc/api/c/structs__vpi__value.html +1 -1
- data/doc/api/c/structs__vpi__vecval.html +1 -1
- data/doc/api/c/structs__vpi__vlog__info.html +1 -1
- data/doc/api/c/user_8c.html +170 -0
- data/doc/api/c/user_8h.html +98 -0
- data/doc/api/c/util_8h.html +171 -0
- data/doc/api/c/verilog_8h.html +2 -158
- data/doc/api/c/vpi__user_8h.html +1 -1
- data/doc/api/ruby/classes/ERB.html +5 -5
- data/doc/api/ruby/classes/ERB.src/{M000025.html → M000026.html} +0 -0
- data/doc/api/ruby/classes/FileUtils.html +6 -6
- data/doc/api/ruby/classes/FileUtils.src/{M000026.html → M000027.html} +0 -0
- data/doc/api/ruby/classes/Float.html +6 -6
- data/doc/api/ruby/classes/Float.src/{M000020.html → M000021.html} +0 -0
- data/doc/api/ruby/classes/Integer.html +65 -65
- data/doc/api/ruby/classes/Integer.src/M000009.html +11 -4
- data/doc/api/ruby/classes/Integer.src/M000010.html +4 -4
- data/doc/api/ruby/classes/Integer.src/M000011.html +4 -4
- data/doc/api/ruby/classes/Integer.src/M000012.html +4 -4
- data/doc/api/ruby/classes/Integer.src/M000013.html +4 -4
- data/doc/api/ruby/classes/Integer.src/M000014.html +18 -0
- data/doc/api/ruby/classes/Integer.src/M000017.html +5 -11
- data/doc/api/ruby/classes/Integer.src/M000018.html +14 -8
- data/doc/api/ruby/classes/Integer.src/M000019.html +8 -13
- data/doc/api/ruby/classes/Integer.src/M000020.html +30 -0
- data/doc/api/ruby/classes/Kernel.html +143 -0
- data/doc/api/ruby/classes/Object.html +5 -0
- data/doc/api/ruby/classes/RDoc.html +5 -5
- data/doc/api/ruby/classes/RDoc.src/{M000541.html → M000546.html} +0 -0
- data/doc/api/ruby/classes/RubyVPI.html +148 -17
- data/doc/api/ruby/classes/RubyVPI.src/M000028.html +19 -0
- data/doc/api/ruby/classes/RubyVPI.src/M000029.html +19 -0
- data/doc/api/ruby/classes/RubyVPI.src/M000030.html +18 -0
- data/doc/api/ruby/classes/RubyVPI.src/M000031.html +18 -0
- data/doc/api/ruby/classes/RubyVPI.src/{M000027.html → M000032.html} +9 -1
- data/doc/api/ruby/classes/RubyVPI/SIMULATORS.html +5 -5
- data/doc/api/ruby/classes/RubyVPI/SIMULATORS.src/{M000028.html → M000033.html} +0 -0
- data/doc/api/ruby/classes/String.html +20 -20
- data/doc/api/ruby/classes/String.src/M000022.html +22 -4
- data/doc/api/ruby/classes/String.src/M000023.html +4 -4
- data/doc/api/ruby/classes/String.src/M000024.html +4 -27
- data/doc/api/ruby/classes/String.src/M000025.html +41 -0
- data/doc/api/ruby/classes/VPI.html +2066 -2066
- data/doc/api/ruby/classes/VPI.src/M000034.html +5 -12
- data/doc/api/ruby/classes/VPI.src/{M000030.html → M000035.html} +1 -1
- data/doc/api/ruby/classes/VPI.src/M000036.html +6 -3
- data/doc/api/ruby/classes/VPI.src/M000038.html +12 -3
- data/doc/api/ruby/classes/VPI.src/M000039.html +13 -3
- data/doc/api/ruby/classes/VPI.src/M000041.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000042.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000043.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000044.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000045.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000046.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000047.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000048.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000049.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000050.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000051.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000052.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000053.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000054.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000055.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000056.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000057.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000058.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000059.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000060.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000061.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000062.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000063.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000064.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000065.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000066.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000067.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000068.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000069.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000070.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000071.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000072.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000073.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000074.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000075.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000076.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000077.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000078.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000079.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000080.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000081.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000082.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000083.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000084.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000085.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000086.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000087.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000088.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000089.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000090.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000091.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000092.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000093.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000094.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000095.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000096.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000097.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000098.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000099.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000100.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000101.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000102.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000103.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000104.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000105.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000106.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000107.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000108.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000109.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000110.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000111.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000112.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000113.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000114.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000115.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000116.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000117.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000118.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000119.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000120.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000121.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000122.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000123.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000124.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000125.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000126.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000127.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000128.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000129.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000130.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000131.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000132.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000133.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000134.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000135.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000136.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000137.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000138.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000139.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000140.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000141.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000142.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000143.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000144.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000145.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000146.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000147.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000148.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000149.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000150.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000151.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000152.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000153.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000154.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000155.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000156.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000157.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000158.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000159.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000160.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000161.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000162.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000163.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000164.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000165.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000166.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000167.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000168.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000169.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000170.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000171.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000172.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000173.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000174.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000175.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000176.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000177.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000178.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000179.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000180.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000181.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000182.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000183.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000184.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000185.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000186.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000187.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000188.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000189.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000190.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000191.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000192.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000193.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000194.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000195.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000196.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000197.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000198.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000199.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000200.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000201.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000202.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000203.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000204.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000205.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000206.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000207.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000208.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000209.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000210.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000211.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000212.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000213.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000214.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000215.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000216.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000217.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000218.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000219.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000220.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000221.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000222.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000223.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000224.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000225.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000226.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000227.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000228.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000229.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000230.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000231.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000232.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000233.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000234.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000235.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000236.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000237.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000238.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000239.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000240.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000241.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000242.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000243.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000244.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000245.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000246.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000247.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000248.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000249.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000250.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000251.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000252.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000253.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000254.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000255.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000256.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000257.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000258.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000259.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000260.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000261.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000262.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000263.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000264.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000265.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000266.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000267.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000268.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000269.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000270.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000271.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000272.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000273.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000274.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000275.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000276.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000277.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000278.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000279.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000280.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000281.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000282.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000283.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000284.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000285.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000286.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000287.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000288.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000289.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000290.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000291.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000292.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000293.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000294.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000295.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000296.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000297.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000298.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000299.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000300.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000301.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000302.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000303.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000304.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000305.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000306.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000307.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000308.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000309.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000310.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000311.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000312.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000313.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000314.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000315.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000316.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000317.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000318.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000319.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000320.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000321.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000322.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000323.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000324.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000325.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000326.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000327.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000328.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000329.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000330.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000331.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000332.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000333.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000334.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000335.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000336.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000337.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000338.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000339.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000340.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000341.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000342.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000343.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000344.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000345.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000346.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000347.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000348.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000349.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000350.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000351.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000352.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000353.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000354.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000355.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000356.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000357.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000358.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000359.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000360.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000361.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000362.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000363.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000364.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000365.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000366.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000367.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000368.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000369.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000370.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000371.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000372.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000373.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000374.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000375.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000376.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000377.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000378.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000379.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000380.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000381.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000382.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000383.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000384.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000385.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000386.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000387.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000388.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000389.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000390.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000391.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000392.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000393.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000394.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000395.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000396.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000397.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000398.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000399.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000400.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000401.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000402.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000403.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000404.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000405.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000406.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000407.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000408.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000409.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000410.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000411.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000412.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000413.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000414.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000415.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000416.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000417.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000418.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000419.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000420.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000421.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000422.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000423.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000424.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000425.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000426.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000427.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000428.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000429.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000430.html +3 -3
- data/doc/api/ruby/classes/VPI.src/M000431.html +16 -0
- data/doc/api/ruby/classes/VPI.src/{M000040.html → M000432.html} +3 -3
- data/doc/api/ruby/classes/VPI.src/{M000037.html → M000433.html} +3 -3
- data/doc/api/ruby/classes/VPI.src/M000434.html +16 -0
- data/doc/api/ruby/classes/VPI.src/M000435.html +16 -0
- data/doc/api/ruby/classes/VPI/Handle.html +498 -498
- data/doc/api/ruby/classes/VPI/Handle.src/M000439.html +17 -4
- data/doc/api/ruby/classes/VPI/Handle.src/M000440.html +4 -4
- data/doc/api/ruby/classes/VPI/Handle.src/{M000436.html → M000441.html} +0 -0
- data/doc/api/ruby/classes/VPI/Handle.src/M000444.html +4 -4
- data/doc/api/ruby/classes/VPI/Handle.src/{M000435.html → M000445.html} +4 -4
- data/doc/api/ruby/classes/VPI/Handle.src/M000448.html +4 -4
- data/doc/api/ruby/classes/VPI/Handle.src/{M000443.html → M000449.html} +4 -4
- data/doc/api/ruby/classes/VPI/Handle.src/M000452.html +4 -4
- data/doc/api/ruby/classes/VPI/Handle.src/{M000447.html → M000453.html} +4 -4
- data/doc/api/ruby/classes/VPI/Handle.src/M000456.html +4 -4
- data/doc/api/ruby/classes/VPI/Handle.src/M000457.html +18 -0
- data/doc/api/ruby/classes/VPI/Handle.src/{M000455.html → M000460.html} +0 -0
- data/doc/api/ruby/classes/VPI/Handle.src/M000461.html +4 -7
- data/doc/api/ruby/classes/VPI/Handle.src/M000464.html +10 -5
- data/doc/api/ruby/classes/VPI/Handle.src/M000466.html +7 -4
- data/doc/api/ruby/classes/VPI/Handle.src/M000467.html +14 -4
- data/doc/api/ruby/classes/VPI/Handle.src/M000468.html +31 -11
- data/doc/api/ruby/classes/VPI/Handle.src/M000469.html +5 -4
- data/doc/api/ruby/classes/VPI/Handle.src/M000470.html +5 -4
- data/doc/api/ruby/classes/VPI/Handle.src/M000471.html +4 -26
- data/doc/api/ruby/classes/VPI/Handle.src/M000472.html +4 -4
- data/doc/api/ruby/classes/VPI/Handle.src/M000473.html +15 -6
- data/doc/api/ruby/classes/VPI/Handle.src/M000474.html +5 -3
- data/doc/api/ruby/classes/VPI/Handle.src/M000475.html +5 -3
- data/doc/api/ruby/classes/VPI/Handle.src/M000476.html +27 -3
- data/doc/api/ruby/classes/VPI/Handle.src/M000477.html +5 -3
- data/doc/api/ruby/classes/VPI/Handle.src/M000478.html +8 -3
- data/doc/api/ruby/classes/VPI/Handle.src/M000479.html +3 -3
- data/doc/api/ruby/classes/VPI/Handle.src/M000480.html +3 -3
- data/doc/api/ruby/classes/VPI/Handle.src/M000481.html +3 -3
- data/doc/api/ruby/classes/VPI/Handle.src/M000482.html +3 -3
- data/doc/api/ruby/classes/VPI/Handle.src/M000483.html +3 -3
- data/doc/api/ruby/classes/VPI/Handle.src/M000484.html +3 -3
- data/doc/api/ruby/classes/VPI/Handle.src/M000485.html +3 -3
- data/doc/api/ruby/classes/VPI/Handle.src/M000486.html +3 -3
- data/doc/api/ruby/classes/VPI/Handle.src/M000487.html +3 -3
- data/doc/api/ruby/classes/VPI/Handle.src/M000488.html +3 -3
- data/doc/api/ruby/classes/VPI/Handle.src/M000489.html +3 -3
- data/doc/api/ruby/classes/VPI/Handle.src/M000490.html +3 -3
- data/doc/api/ruby/classes/VPI/Handle.src/M000491.html +3 -3
- data/doc/api/ruby/classes/VPI/Handle.src/M000492.html +3 -3
- data/doc/api/ruby/classes/VPI/Handle.src/M000493.html +3 -3
- data/doc/api/ruby/classes/VPI/Handle.src/M000494.html +3 -3
- data/doc/api/ruby/classes/VPI/Handle.src/M000495.html +3 -3
- data/doc/api/ruby/classes/VPI/Handle.src/M000496.html +3 -3
- data/doc/api/ruby/classes/VPI/Handle.src/M000497.html +3 -3
- data/doc/api/ruby/classes/VPI/Handle.src/M000498.html +3 -3
- data/doc/api/ruby/classes/VPI/Handle.src/M000499.html +3 -3
- data/doc/api/ruby/classes/VPI/Handle.src/M000500.html +3 -3
- data/doc/api/ruby/classes/VPI/Handle.src/M000501.html +3 -3
- data/doc/api/ruby/classes/VPI/Handle.src/M000502.html +3 -3
- data/doc/api/ruby/classes/VPI/Handle.src/M000503.html +3 -3
- data/doc/api/ruby/classes/VPI/Handle.src/M000504.html +3 -3
- data/doc/api/ruby/classes/VPI/Handle.src/M000505.html +3 -3
- data/doc/api/ruby/classes/VPI/Handle.src/M000506.html +3 -3
- data/doc/api/ruby/classes/VPI/Handle.src/M000507.html +3 -3
- data/doc/api/ruby/classes/VPI/Handle.src/M000508.html +3 -3
- data/doc/api/ruby/classes/VPI/Handle.src/M000509.html +3 -3
- data/doc/api/ruby/classes/VPI/Handle.src/M000510.html +3 -3
- data/doc/api/ruby/classes/VPI/Handle.src/M000511.html +3 -3
- data/doc/api/ruby/classes/VPI/Handle.src/M000512.html +3 -3
- data/doc/api/ruby/classes/VPI/Handle.src/M000513.html +3 -3
- data/doc/api/ruby/classes/VPI/Handle.src/M000514.html +3 -3
- data/doc/api/ruby/classes/VPI/Handle.src/M000515.html +3 -3
- data/doc/api/ruby/classes/VPI/Handle.src/M000516.html +3 -3
- data/doc/api/ruby/classes/VPI/Handle.src/M000517.html +3 -3
- data/doc/api/ruby/classes/VPI/Handle.src/M000518.html +3 -3
- data/doc/api/ruby/classes/VPI/Handle.src/M000519.html +3 -3
- data/doc/api/ruby/classes/VPI/Handle.src/M000520.html +3 -3
- data/doc/api/ruby/classes/VPI/Handle.src/M000521.html +3 -3
- data/doc/api/ruby/classes/VPI/Handle.src/M000522.html +3 -3
- data/doc/api/ruby/classes/VPI/Handle.src/M000523.html +3 -3
- data/doc/api/ruby/classes/VPI/Handle.src/M000524.html +3 -3
- data/doc/api/ruby/classes/VPI/Handle.src/M000525.html +3 -3
- data/doc/api/ruby/classes/VPI/Handle.src/M000526.html +3 -3
- data/doc/api/ruby/classes/VPI/Handle.src/M000527.html +3 -3
- data/doc/api/ruby/classes/VPI/Handle.src/M000528.html +3 -3
- data/doc/api/ruby/classes/VPI/Handle.src/M000529.html +3 -3
- data/doc/api/ruby/classes/VPI/Handle.src/M000530.html +3 -3
- data/doc/api/ruby/classes/VPI/Handle.src/M000531.html +3 -3
- data/doc/api/ruby/classes/VPI/Handle.src/M000532.html +3 -3
- data/doc/api/ruby/classes/VPI/Handle.src/M000533.html +3 -3
- data/doc/api/ruby/classes/VPI/Handle.src/M000534.html +3 -3
- data/doc/api/ruby/classes/VPI/Handle.src/M000535.html +3 -3
- data/doc/api/ruby/classes/VPI/Handle.src/M000536.html +3 -3
- data/doc/api/ruby/classes/VPI/Handle.src/M000537.html +3 -3
- data/doc/api/ruby/classes/VPI/Handle.src/M000538.html +16 -0
- data/doc/api/ruby/classes/VPI/Handle.src/M000539.html +16 -0
- data/doc/api/ruby/classes/VPI/Handle.src/M000540.html +16 -0
- data/doc/api/ruby/classes/VPI/Handle.src/M000541.html +16 -0
- data/doc/api/ruby/classes/VPI/Handle.src/M000542.html +16 -0
- data/doc/api/ruby/classes/VPI/S_vpi_time.html +16 -16
- data/doc/api/ruby/classes/VPI/S_vpi_time.src/{M000538.html → M000543.html} +0 -0
- data/doc/api/ruby/classes/VPI/S_vpi_time.src/{M000539.html → M000544.html} +0 -0
- data/doc/api/ruby/classes/VPI/S_vpi_value.html +15 -15
- data/doc/api/ruby/classes/VPI/S_vpi_value.src/{M000431.html → M000436.html} +1 -1
- data/doc/api/ruby/classes/VPI/S_vpi_value.src/{M000432.html → M000437.html} +0 -0
- data/doc/api/ruby/classes/VPI/S_vpi_value.src/{M000433.html → M000438.html} +0 -0
- data/doc/api/ruby/classes/VerilogParser.html +5 -5
- data/doc/api/ruby/classes/VerilogParser.src/{M000003.html → M000004.html} +0 -0
- data/doc/api/ruby/classes/VerilogParser/Module.html +5 -5
- data/doc/api/ruby/classes/VerilogParser/Module.src/{M000004.html → M000005.html} +0 -0
- data/doc/api/ruby/classes/VerilogParser/Module/Port.html +15 -15
- data/doc/api/ruby/classes/VerilogParser/Module/Port.src/M000006.html +9 -4
- data/doc/api/ruby/classes/VerilogParser/Module/Port.src/M000007.html +4 -4
- data/doc/api/ruby/classes/VerilogParser/Module/Port.src/M000008.html +18 -0
- data/doc/api/ruby/created.rid +1 -1
- data/doc/api/ruby/files/bin/convert_rb.html +1 -1
- data/doc/api/ruby/files/bin/generate_rb.html +1 -1
- data/doc/api/ruby/files/bin/ruby-vpi.html +1 -1
- data/doc/api/ruby/files/lib/ruby-vpi/boot/loader_rb.html +149 -0
- data/doc/api/ruby/files/lib/ruby-vpi/boot/loader_rb.src/M000003.html +17 -0
- data/doc/api/ruby/files/lib/ruby-vpi/boot/relay_rb.html +114 -0
- data/doc/api/ruby/files/lib/ruby-vpi/core/callback_rb.html +1 -1
- data/doc/api/ruby/files/lib/ruby-vpi/core/edge-methods_rb.html +1 -1
- data/doc/api/ruby/files/lib/ruby-vpi/core/edge_rb.html +1 -1
- data/doc/api/ruby/files/lib/ruby-vpi/core/handle_rb.html +1 -1
- data/doc/api/ruby/files/lib/ruby-vpi/core/scheduler_rb.html +1 -1
- data/doc/api/ruby/files/lib/ruby-vpi/core/struct_rb.html +1 -1
- data/doc/api/ruby/files/lib/ruby-vpi/core_rb.html +1 -1
- data/doc/api/ruby/files/lib/ruby-vpi/erb_rb.html +1 -1
- data/doc/api/ruby/files/lib/ruby-vpi/float_rb.html +1 -1
- data/doc/api/ruby/files/lib/ruby-vpi/integer_rb.html +1 -1
- data/doc/api/ruby/files/lib/ruby-vpi/rake_rb.html +1 -1
- data/doc/api/ruby/files/lib/ruby-vpi/rcov_rb.html +1 -1
- data/doc/api/ruby/files/lib/ruby-vpi/rdoc_rb.html +1 -1
- data/doc/api/ruby/files/lib/ruby-vpi/runner_boot_loader_rb.html +3 -13
- data/doc/api/ruby/files/lib/ruby-vpi/runner_boot_loader_rb.src/M000002.html +3 -3
- data/doc/api/ruby/files/lib/ruby-vpi/runner_proxy_rb.html +1 -1
- data/doc/api/ruby/files/lib/ruby-vpi/runner_rb.html +1 -1
- data/doc/api/ruby/files/lib/ruby-vpi/util_rb.html +1 -1
- data/doc/api/ruby/files/lib/ruby-vpi/verilog_parser_rb.html +1 -1
- data/doc/api/ruby/files/lib/ruby-vpi_rb.html +1 -1
- data/doc/api/ruby/files/ruby-vpi-dynamic_rb.html +1 -1
- data/doc/api/ruby/fr_class_index.html +1 -0
- data/doc/api/ruby/fr_file_index.html +2 -0
- data/doc/api/ruby/fr_method_index.html +544 -539
- data/doc/guide.erb +37 -50
- data/doc/guide.html +322 -255
- data/doc/images/feed-icon-28x28.png +0 -0
- data/examples/register_file/register_file_runner.rake +1 -1
- data/ext/Rakefile +13 -4
- data/ext/binding.c +22 -0
- data/ext/binding.h +29 -0
- data/ext/extconf.rb +18 -11
- data/ext/host.c +75 -0
- data/ext/host.h +17 -0
- data/ext/main.c +50 -43
- data/ext/swig_vpi.i +6 -6
- data/ext/user.c +95 -0
- data/ext/user.h +23 -0
- data/ext/util.h +55 -0
- data/ext/verilog.h +5 -52
- data/lib/ruby-vpi.rb +11 -3
- data/lib/ruby-vpi/boot/loader.rb +162 -0
- data/lib/ruby-vpi/boot/relay.rb +47 -0
- data/lib/ruby-vpi/core.rb +0 -8
- data/lib/ruby-vpi/core/callback.rb +21 -28
- data/lib/ruby-vpi/core/handle.rb +14 -4
- data/lib/ruby-vpi/core/scheduler.rb +5 -13
- data/lib/ruby-vpi/core/struct.rb +1 -1
- data/lib/ruby-vpi/runner.rb +10 -2
- data/lib/ruby-vpi/runner_boot_loader.rb +127 -85
- data/lib/ruby-vpi/runner_proxy.rb +8 -8
- metadata +67 -67
- data/doc/api/c/common_8h.html +0 -143
- data/doc/api/c/globals_0x63.html +0 -120
- data/doc/api/c/globals_0x66.html +0 -58
- data/doc/api/c/globals_0x6d.html +0 -65
- data/doc/api/c/globals_0x74.html +0 -58
- data/doc/api/c/globals_eval.html +0 -44
- data/doc/api/c/main_8h.html +0 -105
- data/doc/api/c/relay_8c.html +0 -174
- data/doc/api/c/relay_8h.html +0 -102
- data/doc/api/c/vlog_8c.html +0 -157
- data/doc/api/c/vlog_8h.html +0 -80
- data/doc/api/ruby/classes/Integer.src/M000008.html +0 -25
- data/doc/api/ruby/classes/Integer.src/M000016.html +0 -25
- data/doc/api/ruby/classes/String.src/M000021.html +0 -36
- data/doc/api/ruby/classes/VPI.src/M000029.html +0 -19
- data/doc/api/ruby/classes/VPI.src/M000031.html +0 -19
- data/doc/api/ruby/classes/VPI.src/M000033.html +0 -25
- data/doc/api/ruby/classes/VPI/Handle.src/M000434.html +0 -31
- data/doc/api/ruby/classes/VPI/Handle.src/M000451.html +0 -18
- data/doc/api/ruby/classes/VPI/Handle.src/M000459.html +0 -24
- data/doc/api/ruby/classes/VPI/Handle.src/M000462.html +0 -28
- data/doc/api/ruby/classes/VPI/Handle.src/M000463.html +0 -50
- data/doc/api/ruby/classes/VPI/Handle.src/M000465.html +0 -19
- data/doc/api/ruby/classes/VerilogParser/Module/Port.src/M000005.html +0 -23
- data/examples/pipelined_alu/Hw5UnitModel.rb +0 -114
- data/examples/pipelined_alu/README +0 -152
- data/examples/pipelined_alu/Rakefile +0 -1
- data/examples/pipelined_alu/TestHw5UnitModel.rb +0 -72
- data/examples/pipelined_alu/hw5_unit.v +0 -128
- data/examples/pipelined_alu/hw5_unit_design.rb +0 -45
- data/examples/pipelined_alu/hw5_unit_loader.rb +0 -1
- data/examples/pipelined_alu/hw5_unit_proto.rb +0 -4
- data/examples/pipelined_alu/hw5_unit_runner.rake +0 -48
- data/examples/pipelined_alu/hw5_unit_spec.rb +0 -64
- data/examples/pipelined_alu/int_gen.rb +0 -45
- data/ext/common.h +0 -46
- data/ext/main.h +0 -30
- data/ext/relay.c +0 -41
- data/ext/relay.h +0 -31
- data/ext/vlog.c +0 -57
- 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
|
-
|
9
|
-
|
10
|
-
|
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.
|
15
|
-
$feeds = {
|
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
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
- archive of research and publications.
|
49
|
-
|
50
|
-
</div>
|
22
|
+
"Release notes and project news":<%= log_url %> — "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
|
-
|
249
|
-
# Download the newest <tt>tar.gz</tt> release package from "the project download area":<%=
|
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
|
868
|
-
<code><%= File.read('examples/counter/RSpec/counter_spec.rb')
|
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
|
872
|
-
<code><%= File.read('examples/counter/xUnit/counter_spec.rb')
|
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
|
884
|
-
<code><%= File.read('examples/counter/RSpec/counter_proto.rb')
|
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
|
934
|
-
<code lang="verilog"><%= File.read('examples/counter/counter.v')
|
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":<%=
|
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="
|
5
|
+
<meta name="date" content="08 June 2008"/>
|
6
6
|
<meta name="author" content="Suraj N. Kurapati"/>
|
7
|
-
<meta name="generator" content="Gerbil
|
8
|
-
<link rel="alternate" type="application/rss+xml" href="http://ruby-vpi.rubyforge.org/
|
9
|
-
<title>Ruby-VPI
|
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 :
|
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
|
-
/*
|
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
|
-
|
322
|
+
margin : 1em;
|
323
|
+
border : 5px dotted #C0C0C0;
|
324
|
+
padding : 1em;
|
325
|
+
color : #444;
|
326
326
|
}
|
327
327
|
|
328
|
-
|
328
|
+
hr
|
329
329
|
{
|
330
|
-
|
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
|
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
|
-
/*
|
383
|
+
/* hyperlinks */
|
382
384
|
|
383
|
-
|
385
|
+
a > img
|
384
386
|
{
|
385
|
-
|
386
|
-
border : 5px dotted #C0C0C0;
|
387
|
-
padding : 1em;
|
388
|
-
color : #444;
|
387
|
+
border : none;
|
389
388
|
}
|
390
389
|
|
391
|
-
|
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;
|
394
|
-
|
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 :
|
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
|
-
/*
|
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 : "
|
688
|
-
font-family :
|
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
|
762
|
-
<h2 class="authors"><a href="http://snk.
|
763
|
-
<h3 class="date">
|
764
|
-
<div
|
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> — <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
|
-
– project news and release announcements.</li>
|
769
|
-
<li><a href="http://rubyforge.org/frs/?group_id=1339">Download area</a>
|
770
|
-
– place to obtain release packages.</li>
|
771
|
-
<li><a href="http://rubyforge.org/mailman/listinfo/ruby-vpi-discuss">Mailing list</a>
|
772
|
-
– ask questions, get help, and discuss.</li>
|
773
|
-
<li><a href="api/">Reference</a>
|
774
|
-
– API documentation for source code.</li>
|
775
|
-
<li><a href="http://ruby-vpi.rubyforge.org/talks/">Talks</a>
|
776
|
-
– archive of presentations and seminars.</li>
|
777
|
-
<li><a href="http://ruby-vpi.rubyforge.org/papers/">Papers</a>
|
778
|
-
– archive of research and publications.</li>
|
779
|
-
</ul>
|
780
826
|
|
827
|
+
<p><a href="http://ruby-vpi.rubyforge.org/pkg">Downloads</a> – obtain the newest release package.</p>
|
781
828
|
|
782
|
-
|
829
|
+
|
830
|
+
<p><a href="http://ruby-vpi.rubyforge.org/talks/">Talks</a> – archive of presentations and seminars.</p>
|
831
|
+
|
832
|
+
|
833
|
+
<p><a href="http://ruby-vpi.rubyforge.org/papers/">Papers</a> – archive of research and publications.</p>
|
834
|
+
|
835
|
+
|
836
|
+
<p><a href="http://rubyforge.org/mailman/listinfo/ruby-vpi-discuss">Mailing list</a> – ask questions, get help, and discuss.</p>
|
837
|
+
|
838
|
+
|
839
|
+
<p><a href="api/index.html">Reference</a> – API documentation for source code.</p>
|
840
|
+
|
841
|
+
|
842
|
+
<p><a href="http://ruby-vpi.rubyforge.org/dev">Developer feed</a> – 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 <a id="a-
|
848
|
+
<div id="toc"><h1>Contents</h1> <ul><li>1 <a id="a-606855468" href="#Introduction">Introduction</a><ul><li>1.1 <a id="a-606864618" href="#Features">Features</a></li><li>1.2 <a id="a-606881728" href="#License">License</a></li><li>1.3 <a id="a-606884178" href="#Appetizers">Appetizers</a></li><li>1.4 <a id="a-606888428" href="#Applications">Applications</a></li><li>1.5 <a id="a-606890808" href="#Related-works">Related works</a></li></ul></li><li>2 <a id="a-606895198" href="#setup">Setup</a><ul><li>2.1 <a id="a-606896768" href="#setup.reqs">Requirements</a></li><li>2.2 <a id="a-606908788" href="#setup.recom">Recommendations</a></li><li>2.3 <a id="a-606914178" href="#setup.inst">Installation</a><ul><li>2.3.1 <a id="a-606919398" href="#setup.inst.windows">Installing on Windows</a></li></ul></li><li>2.4 <a id="a-606921958" href="#setup.maintenance">Maintenance</a></li><li>2.5 <a id="a-606924108" href="#setup.manifest">Manifest</a></li></ul></li><li>3 <a id="a-606931208" href="#organization">Background</a><ul><li>3.1 <a id="a-606935998" href="#Motivation">Motivation</a></li><li>3.2 <a id="a-606938018" href="#organization.tests">Tests</a></li></ul></li><li>4 <a id="a-606943788" href="#usage">Usage</a><ul><li>4.1 <a id="a-606945358" href="#usage.theory">Theory of operation</a><ul><li>4.1.1 <a id="a-606956448" href="#Test-files">Test files</a></li></ul></li><li>4.2 <a id="a-606962218" href="#overview.relay">Interacting with the Verilog simulator</a></li><li>4.3 <a id="a-606969118" href="#vpi">VPI in Ruby</a><ul><li>4.3.1 <a id="a-606972558" href="#vpi.handles">Handles</a><ul><li>4.3.1.1 <a id="a-606978858" href="#vpi.handles.relatives">Accessing a handle’s relatives</a></li><li>4.3.1.2 <a id="a-606981088" href="#Accessing-a-handle-s-properties">Accessing a handle’s properties</a></li></ul></li><li>4.3.2 <a id="a-606992858" href="#vpi.callbacks">Callbacks</a></li></ul></li><li>4.4 <a id="a-607003668" href="#usage.concurrency">Concurrency</a><ul><li>4.4.1 <a id="a-607007188" href="#Creating-a-concurrent-process">Creating a concurrent process</a></li></ul></li><li>4.5 <a id="a-607013618" href="#usage.prototyping">Prototyping</a><ul><li>4.5.1 <a id="a-607018328" href="#Creating-a-prototype">Creating a prototype</a></li></ul></li><li>4.6 <a id="a-607030038" href="#usage.debugger">Interactive debugging</a><ul><li>4.6.1 <a id="a-607033288" href="#usage.debugger.init">Advanced initialization</a></li></ul></li><li>4.7 <a id="a-607035758" href="#usage.runner">Test runner</a><ul><li>4.7.1 <a id="a-607039108" href="#usage.runner.env-vars">Environment variables</a><ul><li>4.7.1.1 <a id="a-607042348" href="#Variables-as-command-line-arguments">Variables as command-line arguments</a></li></ul></li></ul></li><li>4.8 <a id="a-607047158" href="#usage.tools">Tools</a><ul><li>4.8.1 <a id="a-607049018" href="#usage.tools.generate">Automated test generation</a></li><li>4.8.2 <a id="a-607057848" href="#usage.tools.convert">Verilog to Ruby conversion</a></li></ul></li><li>4.9 <a id="a-607060318" href="#usage.tutorial">Tutorial</a><ul><li>4.9.1 <a id="a-607074198" href="#usage.tutorial.declare-design">Start with a Verilog design</a></li><li>4.9.2 <a id="a-607081338" href="#usage.tutorial.generate-test">Generate a test</a></li><li>4.9.3 <a id="a-607095058" href="#usage.tutorial.specification">Specify your expectations</a></li><li>4.9.4 <a id="a-607108658" href="#usage.tutorial.implement-proto">Implement the prototype</a></li><li>4.9.5 <a id="a-607115808" href="#usage.tutorial.test-proto">Verify the prototype</a></li><li>4.9.6 <a id="a-606264088" href="#usage.tutorial.implement-design">Implement the design</a></li><li>4.9.7 <a id="a-606356058" href="#usage.tutorial.test-design">Verify the design</a></li><li>4.9.8 <a id="a-606447908" href="#usage.examples">More examples</a></li></ul></li></ul></li><li>5 <a id="a-606474498" href="#hacking">Hacking</a><ul><li>5.1 <a id="a-606497178" href="#hacking.build">Building from source code</a></li><li>5.2 <a id="a-606511708" href="#Installing-without-really-installing">Installing without really installing</a></li><li>5.3 <a id="a-606005938" href="#hacking.release-packages">Building release packages</a></li><li>5.4 <a id="a-606145488" href="#hacking.guide">Editing this guide</a></li></ul></li><li>6 <a id="a-605970068" href="#problems">Known problems</a><ul><li>6.1 <a id="a-607199668" href="#problem.ivl">Icarus Verilog</a><ul><li>6.1.1 <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 <a id="a-607206638" href="#problems.ivl.vpi_handle_by_name.connect-registers">Registers must be connected</a></li><li>6.1.3 <a id="a-607216988" href="#problems.ivl.vpi_reset">VPI::reset</a></li></ul></li><li>6.2 <a id="a-607219468" href="#problem.ncsim">Cadence NC-Sim</a></li></ul></li><li>7 <a id="a-607221888" href="#glossary">Glossary</a><ul><li>7.1 <a id="a-607223548" href="#glossary.test">Test</a></li><li>7.2 <a id="a-607228538" href="#glossary.design">Design</a></li><li>7.3 <a id="a-607232058" href="#glossary.specification">Specification</a></li><li>7.4 <a id="a-607237108" href="#glossary.expectation">Expectation</a></li><li>7.5 <a id="a-607239178" href="#glossary.handle">Handle</a></li><li>7.6 <a id="a-607242778" href="#glossary.rake">Rake</a></li><li>7.7 <a id="a-607244928" href="#glossary.RSpec">RSpec</a></li><li>7.8 <a id="a-607248618" href="#glossary.TDD">Test driven development</a></li><li>7.9 <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-
|
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 “always” block</a></li><li><a id="a-607010778" href="#A-change-triggered-combinational-always-block">A change-triggered (combinational) “always” 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’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’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-
|
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-
|
877
|
+
<a class="toc" id="Features" href="#a-606864618">1.1</a> 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-
|
935
|
+
<a class="toc" id="License" href="#a-606881728">1.2</a> License
|
875
936
|
</h2>
|
876
937
|
<div class="content"><p>Copyright 2006 Suraj N. Kurapati <SNK at GNA dot ORG><br/>
|
877
938
|
Copyright 1999 Kazuhiro HIWADA <HIWADA at KUEE dot KYOTO-U dot AC dot JP><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 "Derivatives")
|
890
|
-
and their corresponding machine-readable source code (the "Code") must
|
891
|
-
include the above copyright notice and this permission notice.</li>
|
951
|
+
and their corresponding machine-readable source code (the "Code") 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
|
897
|
-
or—provided that the Code is obtainable for no more than the cost of
|
898
|
-
distribution plus a nominal fee—
|
957
|
+
<li>Upon distribution, the Derivatives must be accompanied by either the Code
|
958
|
+
or—provided that the Code is obtainable for no more than the cost of
|
959
|
+
distribution plus a nominal fee—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-
|
972
|
+
<a class="toc" id="Appetizers" href="#a-606884178">1.3</a> 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-
|
1042
|
+
<a class="toc" id="Applications" href="#a-606888428">1.4</a> 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-
|
1076
|
+
<a class="toc" id="Related-works" href="#a-606890808">1.5</a> 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-
|
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-
|
1112
|
+
<a class="toc" id="setup.reqs" href="#a-606896768">2.1</a> 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-
|
1190
|
+
<a class="toc" id="setup.recom" href="#a-606908788">2.2</a> 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-
|
1230
|
+
<a class="toc" id="setup.inst" href="#a-606914178">2.3</a> 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-
|
1233
|
+
<p class="title"><a class="toc" id="Tuning-for-maximum-performance" href="#a-606915788">Tip 1</a>. 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
|
-
"
|
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’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
|
-
|
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/
|
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
|
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-
|
1342
|
+
<a class="toc" id="setup.inst.windows" href="#a-606919398">2.3.1</a> 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-
|
1366
|
+
<a class="toc" id="setup.maintenance" href="#a-606921958">2.4</a> 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-
|
1384
|
+
<a class="toc" id="setup.manifest" href="#a-606924108">2.5</a> 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’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-
|
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’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-
|
1418
|
+
<p class="title"><a class="toc" id="fig:organization.detail" href="#a-606932768">Figure 1</a>. 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—-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-
|
1426
|
+
<a class="toc" id="Motivation" href="#a-606935998">3.1</a> 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-
|
1432
|
+
<a class="toc" id="organization.tests" href="#a-606938018">3.2</a> 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-
|
1438
|
+
<p class="title"><a class="toc" id="fig:organization" href="#a-606941158">Figure 2</a>. 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-
|
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-
|
1462
|
+
<a class="toc" id="usage.theory" href="#a-606945358">4.1</a> 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-
|
1519
|
+
<a class="toc" id="Test-files" href="#a-606956448">4.1.1</a> 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-
|
1572
|
+
<a class="toc" id="overview.relay" href="#a-606962218">4.2</a> 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-
|
1584
|
+
<p class="title"><a class="toc" id="fig:ruby_relay" href="#a-606965358">Figure 3</a>. 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-
|
1602
|
+
<a class="toc" id="vpi" href="#a-606969118">4.3</a> 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-
|
1608
|
+
<p class="title"><a class="toc" id="Constants-are-capitalized-in-Ruby" href="#a-606970748">Note 1</a>. 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
|
-
"
|
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-
|
1676
|
+
<a class="toc" id="vpi.handles" href="#a-606972558">4.3.1</a> 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’s relative happens to have the same name as one its properties, then the relative is given priority because a handle’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-
|
1693
|
+
<a class="toc" id="vpi.handles.relatives" href="#a-606978858">4.3.1.1</a> Accessing a handle’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-
|
1718
|
+
<a class="toc" id="Accessing-a-handle-s-properties" href="#a-606981088">4.3.1.2</a> Accessing a handle’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-
|
1748
|
+
<p class="title"><a class="toc" id="fig:method-naming-format" href="#a-606984978">Figure 4</a>. Method naming format for accessing a handle’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-
|
1792
|
+
<p class="title"><a class="toc" id="tbl:accessors" href="#a-606988448">Table 1</a>. 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-
|
1837
|
+
<p class="title"><a class="toc" id="ex:properties" href="#a-606990338">Table 2</a>. Examples of accessing a handle’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-
|
2154
|
+
<a class="toc" id="vpi.callbacks" href="#a-606992858">4.3.2</a> 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 “callback handler”) 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-
|
2163
|
+
<p class="title"><a class="toc" id="ex:callback" href="#a-606994538">Example 1</a>. 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’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-
|
2200
|
+
<a class="toc" id="usage.concurrency" href="#a-607003668">4.4</a> 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 “initial”, “always” and “forever” 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-
|
2218
|
+
<p class="title"><a class="toc" id="Assignments-inside-processes-are-non-blocking" href="#a-607005408">Caution 1</a>. 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
|
-
"
|
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’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-
|
2278
|
+
<a class="toc" id="Creating-a-concurrent-process" href="#a-607007188">4.4.1</a> 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 “initial” 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-
|
2287
|
+
<p class="title"><a class="toc" id="An-edge-triggered-always-block" href="#a-607008828">Example 2</a>. An edge-triggered “always” 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-
|
2312
|
+
<p class="title"><a class="toc" id="A-change-triggered-combinational-always-block" href="#a-607010778">Example 3</a>. A change-triggered (combinational) “always” 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-
|
2348
|
+
<a class="toc" id="usage.prototyping" href="#a-607013618">4.5</a> 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-
|
2361
|
+
<a class="toc" id="Creating-a-prototype" href="#a-607018328">4.5.1</a> 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-
|
2379
|
+
<a class="toc" id="usage.debugger" href="#a-607030038">4.6</a> 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-
|
2392
|
+
<a class="toc" id="usage.debugger.init" href="#a-607033288">4.6.1</a> 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-
|
2405
|
+
<a class="toc" id="usage.runner" href="#a-607035758">4.7</a> 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—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-
|
2428
|
+
<a class="toc" id="usage.runner.env-vars" href="#a-607039108">4.7.1</a> 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-
|
2449
|
+
<a class="toc" id="Variables-as-command-line-arguments" href="#a-607042348">4.7.1.1</a> 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-
|
2465
|
+
<p class="title"><a class="toc" id="Running-a-test-with-environment-variables" href="#a-607044498">Example 4</a>. 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-
|
2479
|
+
<a class="toc" id="usage.tools" href="#a-607047158">4.8</a> 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-
|
2507
|
+
<a class="toc" id="usage.tools.generate" href="#a-607049018">4.8.1</a> 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-
|
2527
|
+
<p class="title"><a class="toc" id="Do-not-rename-generated-files" href="#a-607053758">Caution 2</a>. 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
|
-
"
|
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-
|
2592
|
+
<p class="title"><a class="toc" id="Using-kdiff3-with-the-automated-test-generator." href="#a-607055568">Tip 2</a>. 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
|
-
"
|
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-
|
2688
|
+
<a class="toc" id="usage.tools.convert" href="#a-607057848">4.8.2</a> 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-
|
2698
|
+
<a class="toc" id="usage.tutorial" href="#a-607060318">4.9</a> 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-
|
2713
|
+
<a class="toc" id="usage.tutorial.declare-design" href="#a-607074198">4.9.1</a> 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-
|
2727
|
+
<p class="title"><a class="toc" id="fig:counter.v_decl" href="#a-607077538">Example 5</a>. 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-
|
2741
|
+
<a class="toc" id="usage.tutorial.generate-test" href="#a-607081338">4.9.2</a> 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-
|
2766
|
+
<p class="title"><a class="toc" id="fig:generate-test.RSpec" href="#a-607090908">Example 6</a>. 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-
|
2779
|
+
<p class="title"><a class="toc" id="fig:generate-test.xUnit" href="#a-607092778">Example 7</a>. 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-
|
2794
|
+
<a class="toc" id="usage.tutorial.specification" href="#a-607095058">4.9.3</a> 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-
|
2811
|
+
<p class="title"><a class="toc" id="fig:RSpec-counter_spec.rb" href="#a-607101528">Example 8</a>. 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">"<
|
|
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
|
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-
|
2854
|
+
<p class="title"><a class="toc" id="fig:xUnit-counter_spec.rb" href="#a-607103348">Example 9</a>. 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">"<
|
|
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
|
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-
|
2904
|
+
<a class="toc" id="usage.tutorial.implement-proto" href="#a-607108658">4.9.4</a> 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-
|
2910
|
+
<p class="title"><a class="toc" id="fig:counter_proto.rb" href="#a-607112038">Example 10</a>. 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
|
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-
|
2928
|
+
<a class="toc" id="usage.tutorial.test-proto" href="#a-607115808">4.9.5</a> 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-
|
2937
|
+
<p class="title"><a class="toc" id="fig:test-proto.RSpec" href="#a-606210758">Example 11</a>. 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-
|
2952
|
+
<p class="title"><a class="toc" id="fig:test-proto.unit-test" href="#a-606234128">Example 12</a>. 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-
|
2967
|
+
<p class="title"><a class="toc" id="What-can-the-test-runner-do" href="#a-606244898">Tip 3</a>. 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
|
-
"
|
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-
|
3051
|
+
<a class="toc" id="usage.tutorial.implement-design" href="#a-606264088">4.9.6</a> 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-
|
3057
|
+
<p class="title"><a class="toc" id="fig:counter.v_impl" href="#a-606295138">Example 13</a>. 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 <= count + 1;
|
3016
3076
|
end
|
3017
|
-
endmodule
|
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-
|
3084
|
+
<a class="toc" id="usage.tutorial.test-design" href="#a-606356058">4.9.7</a> 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-
|
3093
|
+
<p class="title"><a class="toc" id="fig:test-design.RSpec" href="#a-606419298">Example 14</a>. 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-
|
3106
|
+
<p class="title"><a class="toc" id="fig:test-design.unit-test" href="#a-606425048">Example 15</a>. 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-
|
3122
|
+
<a class="toc" id="usage.examples" href="#a-606447908">4.9.8</a> 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-
|
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-
|
3140
|
+
<a class="toc" id="hacking.build" href="#a-606497178">5.1</a> 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
|
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-
|
3163
|
+
<a class="toc" id="Installing-without-really-installing" href="#a-606511708">5.2</a> 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-
|
3172
|
+
<a class="toc" id="hacking.release-packages" href="#a-606005938">5.3</a> 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-
|
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-
|
3215
|
+
<a class="toc" id="hacking.guide" href="#a-606145488">5.4</a> 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-
|
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-
|
3235
|
+
<a class="toc" id="problem.ivl" href="#a-607199668">6.1</a> 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-
|
3242
|
+
<a class="toc" id="problems.ivl.vpi_handle_by_name.absolute-paths" href="#a-607201248">6.1.1</a> 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-
|
3251
|
+
<p class="title"><a class="toc" id="ex:TestFoo" href="#a-607204398">Example 16</a>. 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-
|
3262
|
+
<a class="toc" id="problems.ivl.vpi_handle_by_name.connect-registers" href="#a-607206638">6.1.2</a> 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-
|
3274
|
+
<p class="title"><a class="toc" id="ex:TestFoo_bad" href="#a-607212878">Example 17</a>. 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-
|
3285
|
+
<p class="title"><a class="toc" id="ex:TestFoo_fix" href="#a-607214718">Example 18</a>. 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-
|
3300
|
+
<a class="toc" id="problems.ivl.vpi_reset" href="#a-607216988">6.1.3</a> 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> 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’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-
|
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-
|
3324
|
+
<a class="toc" id="glossary.test" href="#a-607223548">7.1</a> 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-
|
3330
|
+
<a class="toc" id="glossary.design" href="#a-607228538">7.2</a> 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-
|
3336
|
+
<a class="toc" id="glossary.specification" href="#a-607232058">7.3</a> 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-
|
3342
|
+
<a class="toc" id="glossary.expectation" href="#a-607237108">7.4</a> 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-
|
3348
|
+
<a class="toc" id="glossary.handle" href="#a-607239178">7.5</a> 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-
|
3354
|
+
<a class="toc" id="glossary.rake" href="#a-607242778">7.6</a> 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-
|
3365
|
+
<a class="toc" id="glossary.RSpec" href="#a-607244928">7.7</a> 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-
|
3374
|
+
<a class="toc" id="glossary.TDD" href="#a-607248618">7.8</a> 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-
|
3383
|
+
<a class="toc" id="glossary.BDD" href="#a-607250828">7.9</a> 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
|
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
|
-
"
|
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
|
-
"
|
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
|
-
"
|
3586
|
+
"/>) used in this document are Copyright © 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
|
|