HDLRuby 2.0.8

Sign up to get free protection for your applications and to get access to all the features.
Files changed (224) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +9 -0
  3. data/.travis.yml +5 -0
  4. data/.yardopts +1 -0
  5. data/Gemfile +4 -0
  6. data/HDLRuby.gemspec +36 -0
  7. data/LICENSE.txt +21 -0
  8. data/README.md +2774 -0
  9. data/README.pdf +0 -0
  10. data/Rakefile +10 -0
  11. data/bin/console +14 -0
  12. data/bin/setup +8 -0
  13. data/exe/hdrcc +3 -0
  14. data/lib/HDLRuby/alcc.rb +137 -0
  15. data/lib/HDLRuby/backend/hruby_allocator.rb +69 -0
  16. data/lib/HDLRuby/backend/hruby_c_allocator.rb +76 -0
  17. data/lib/HDLRuby/hdr_samples/adder.rb +7 -0
  18. data/lib/HDLRuby/hdr_samples/adder_assign_error.rb +11 -0
  19. data/lib/HDLRuby/hdr_samples/adder_bench.rb +27 -0
  20. data/lib/HDLRuby/hdr_samples/adder_gen.rb +7 -0
  21. data/lib/HDLRuby/hdr_samples/adder_nodef_error.rb +7 -0
  22. data/lib/HDLRuby/hdr_samples/addsub.rb +19 -0
  23. data/lib/HDLRuby/hdr_samples/addsubz.rb +22 -0
  24. data/lib/HDLRuby/hdr_samples/alu.rb +47 -0
  25. data/lib/HDLRuby/hdr_samples/calculator.rb +48 -0
  26. data/lib/HDLRuby/hdr_samples/counter_bench.rb +83 -0
  27. data/lib/HDLRuby/hdr_samples/dff.rb +9 -0
  28. data/lib/HDLRuby/hdr_samples/dff_bench.rb +66 -0
  29. data/lib/HDLRuby/hdr_samples/dff_counter.rb +20 -0
  30. data/lib/HDLRuby/hdr_samples/include.rb +14 -0
  31. data/lib/HDLRuby/hdr_samples/instance_open.rb +23 -0
  32. data/lib/HDLRuby/hdr_samples/mei8.rb +256 -0
  33. data/lib/HDLRuby/hdr_samples/mei8_bench.rb +309 -0
  34. data/lib/HDLRuby/hdr_samples/multer_gen.rb +8 -0
  35. data/lib/HDLRuby/hdr_samples/multer_seq.rb +29 -0
  36. data/lib/HDLRuby/hdr_samples/neural/a.rb +9 -0
  37. data/lib/HDLRuby/hdr_samples/neural/a_sub.rb +5 -0
  38. data/lib/HDLRuby/hdr_samples/neural/bw.rb +23 -0
  39. data/lib/HDLRuby/hdr_samples/neural/counter.rb +16 -0
  40. data/lib/HDLRuby/hdr_samples/neural/dadz.rb +9 -0
  41. data/lib/HDLRuby/hdr_samples/neural/dadz_sub.rb +4 -0
  42. data/lib/HDLRuby/hdr_samples/neural/forward.rb +153 -0
  43. data/lib/HDLRuby/hdr_samples/neural/forward_sub.rb +62 -0
  44. data/lib/HDLRuby/hdr_samples/neural/forward_sub_rand.rb +41 -0
  45. data/lib/HDLRuby/hdr_samples/neural/forward_sub_rand_typedef.rb +47 -0
  46. data/lib/HDLRuby/hdr_samples/neural/mem.rb +30 -0
  47. data/lib/HDLRuby/hdr_samples/neural/random.rb +23 -0
  48. data/lib/HDLRuby/hdr_samples/neural/selector.rb +29 -0
  49. data/lib/HDLRuby/hdr_samples/neural/sigmoid.rb +20 -0
  50. data/lib/HDLRuby/hdr_samples/neural/z.rb +33 -0
  51. data/lib/HDLRuby/hdr_samples/prog.obj +256 -0
  52. data/lib/HDLRuby/hdr_samples/ram.rb +18 -0
  53. data/lib/HDLRuby/hdr_samples/register_with_code_bench.rb +98 -0
  54. data/lib/HDLRuby/hdr_samples/rom.rb +10 -0
  55. data/lib/HDLRuby/hdr_samples/struct.rb +14 -0
  56. data/lib/HDLRuby/hdr_samples/sumprod.rb +29 -0
  57. data/lib/HDLRuby/hdr_samples/sw_encrypt_bench.rb +103 -0
  58. data/lib/HDLRuby/hdr_samples/sw_encrypt_cpu_bench.rb +261 -0
  59. data/lib/HDLRuby/hdr_samples/sw_encrypt_cpusim_bench.rb +302 -0
  60. data/lib/HDLRuby/hdr_samples/system_open.rb +11 -0
  61. data/lib/HDLRuby/hdr_samples/tuple.rb +16 -0
  62. data/lib/HDLRuby/hdr_samples/with_channel.rb +118 -0
  63. data/lib/HDLRuby/hdr_samples/with_class.rb +199 -0
  64. data/lib/HDLRuby/hdr_samples/with_decoder.rb +17 -0
  65. data/lib/HDLRuby/hdr_samples/with_fsm.rb +34 -0
  66. data/lib/HDLRuby/hdr_samples/with_reconf.rb +103 -0
  67. data/lib/HDLRuby/hdrcc.rb +623 -0
  68. data/lib/HDLRuby/high_samples/_adder_fault.rb +23 -0
  69. data/lib/HDLRuby/high_samples/_generic_transmission2.rb +146 -0
  70. data/lib/HDLRuby/high_samples/adder.rb +21 -0
  71. data/lib/HDLRuby/high_samples/adder_common_errors.rb +25 -0
  72. data/lib/HDLRuby/high_samples/addsub.rb +33 -0
  73. data/lib/HDLRuby/high_samples/addsubz.rb +37 -0
  74. data/lib/HDLRuby/high_samples/after.rb +28 -0
  75. data/lib/HDLRuby/high_samples/all_signals.rb +29 -0
  76. data/lib/HDLRuby/high_samples/alu.rb +61 -0
  77. data/lib/HDLRuby/high_samples/anonymous.rb +41 -0
  78. data/lib/HDLRuby/high_samples/before.rb +28 -0
  79. data/lib/HDLRuby/high_samples/blockblock.rb +26 -0
  80. data/lib/HDLRuby/high_samples/bugs/dadz.rb +22 -0
  81. data/lib/HDLRuby/high_samples/bugs/misample_instan.rb +20 -0
  82. data/lib/HDLRuby/high_samples/bugs/misample_updown.rb +22 -0
  83. data/lib/HDLRuby/high_samples/bugs/sample_add.rb +16 -0
  84. data/lib/HDLRuby/high_samples/bugs/sample_barrel.rb +13 -0
  85. data/lib/HDLRuby/high_samples/bugs/sample_daice.rb +57 -0
  86. data/lib/HDLRuby/high_samples/bugs/sample_kumiawase.rb +52 -0
  87. data/lib/HDLRuby/high_samples/bugs/sample_multi.rb +18 -0
  88. data/lib/HDLRuby/high_samples/bugs/sample_sub.rb +14 -0
  89. data/lib/HDLRuby/high_samples/bugs/z2.rb +32 -0
  90. data/lib/HDLRuby/high_samples/case.rb +32 -0
  91. data/lib/HDLRuby/high_samples/case2.rb +30 -0
  92. data/lib/HDLRuby/high_samples/change.rb +23 -0
  93. data/lib/HDLRuby/high_samples/clocks.rb +35 -0
  94. data/lib/HDLRuby/high_samples/comparer.rb +21 -0
  95. data/lib/HDLRuby/high_samples/conditionals.rb +29 -0
  96. data/lib/HDLRuby/high_samples/dff.rb +23 -0
  97. data/lib/HDLRuby/high_samples/each.rb +28 -0
  98. data/lib/HDLRuby/high_samples/exporter.rb +42 -0
  99. data/lib/HDLRuby/high_samples/functions.rb +60 -0
  100. data/lib/HDLRuby/high_samples/if_seq.rb +26 -0
  101. data/lib/HDLRuby/high_samples/inherit_as_dff.rb +32 -0
  102. data/lib/HDLRuby/high_samples/inherit_dff.rb +36 -0
  103. data/lib/HDLRuby/high_samples/instance.rb +37 -0
  104. data/lib/HDLRuby/high_samples/memory.rb +64 -0
  105. data/lib/HDLRuby/high_samples/multi_file.rb +27 -0
  106. data/lib/HDLRuby/high_samples/overload.rb +32 -0
  107. data/lib/HDLRuby/high_samples/paper_after.rb +49 -0
  108. data/lib/HDLRuby/high_samples/ram.rb +27 -0
  109. data/lib/HDLRuby/high_samples/registers.rb +139 -0
  110. data/lib/HDLRuby/high_samples/rom.rb +23 -0
  111. data/lib/HDLRuby/high_samples/scopeblockname.rb +37 -0
  112. data/lib/HDLRuby/high_samples/scopescope.rb +26 -0
  113. data/lib/HDLRuby/high_samples/shift.rb +31 -0
  114. data/lib/HDLRuby/high_samples/shift2.rb +40 -0
  115. data/lib/HDLRuby/high_samples/simple_instance.rb +31 -0
  116. data/lib/HDLRuby/high_samples/test_all.sh +10 -0
  117. data/lib/HDLRuby/high_samples/typedef.rb +24 -0
  118. data/lib/HDLRuby/high_samples/values.rb +70 -0
  119. data/lib/HDLRuby/high_samples/vector.rb +22 -0
  120. data/lib/HDLRuby/high_samples/with_decoder.rb +30 -0
  121. data/lib/HDLRuby/high_samples/with_fsm.rb +46 -0
  122. data/lib/HDLRuby/high_samples/with_pipe.rb +43 -0
  123. data/lib/HDLRuby/high_samples/with_seq.rb +25 -0
  124. data/lib/HDLRuby/hruby_bstr.rb +1085 -0
  125. data/lib/HDLRuby/hruby_check.rb +317 -0
  126. data/lib/HDLRuby/hruby_db.rb +432 -0
  127. data/lib/HDLRuby/hruby_error.rb +44 -0
  128. data/lib/HDLRuby/hruby_high.rb +4103 -0
  129. data/lib/HDLRuby/hruby_low.rb +4735 -0
  130. data/lib/HDLRuby/hruby_low2c.rb +1986 -0
  131. data/lib/HDLRuby/hruby_low2high.rb +738 -0
  132. data/lib/HDLRuby/hruby_low2seq.rb +248 -0
  133. data/lib/HDLRuby/hruby_low2sym.rb +126 -0
  134. data/lib/HDLRuby/hruby_low2vhd.rb +1437 -0
  135. data/lib/HDLRuby/hruby_low_bool2select.rb +295 -0
  136. data/lib/HDLRuby/hruby_low_cleanup.rb +193 -0
  137. data/lib/HDLRuby/hruby_low_fix_types.rb +437 -0
  138. data/lib/HDLRuby/hruby_low_mutable.rb +1803 -0
  139. data/lib/HDLRuby/hruby_low_resolve.rb +165 -0
  140. data/lib/HDLRuby/hruby_low_skeleton.rb +129 -0
  141. data/lib/HDLRuby/hruby_low_with_bool.rb +141 -0
  142. data/lib/HDLRuby/hruby_low_with_port.rb +167 -0
  143. data/lib/HDLRuby/hruby_low_with_var.rb +302 -0
  144. data/lib/HDLRuby/hruby_low_without_bit2vector.rb +88 -0
  145. data/lib/HDLRuby/hruby_low_without_concat.rb +162 -0
  146. data/lib/HDLRuby/hruby_low_without_connection.rb +113 -0
  147. data/lib/HDLRuby/hruby_low_without_namespace.rb +718 -0
  148. data/lib/HDLRuby/hruby_low_without_outread.rb +107 -0
  149. data/lib/HDLRuby/hruby_low_without_select.rb +206 -0
  150. data/lib/HDLRuby/hruby_serializer.rb +398 -0
  151. data/lib/HDLRuby/hruby_tools.rb +37 -0
  152. data/lib/HDLRuby/hruby_types.rb +239 -0
  153. data/lib/HDLRuby/hruby_values.rb +64 -0
  154. data/lib/HDLRuby/hruby_verilog.rb +1888 -0
  155. data/lib/HDLRuby/hruby_verilog_name.rb +52 -0
  156. data/lib/HDLRuby/low_samples/adder.yaml +97 -0
  157. data/lib/HDLRuby/low_samples/after.yaml +228 -0
  158. data/lib/HDLRuby/low_samples/before.yaml +223 -0
  159. data/lib/HDLRuby/low_samples/blockblock.yaml +48 -0
  160. data/lib/HDLRuby/low_samples/bugs/sample_add.yaml +97 -0
  161. data/lib/HDLRuby/low_samples/bugs/sample_daice.yaml +444 -0
  162. data/lib/HDLRuby/low_samples/bugs/sample_kumiawase.yaml +332 -0
  163. data/lib/HDLRuby/low_samples/bugs/sample_sub.yaml +97 -0
  164. data/lib/HDLRuby/low_samples/bugs/seqpar.yaml +184 -0
  165. data/lib/HDLRuby/low_samples/case.yaml +327 -0
  166. data/lib/HDLRuby/low_samples/change.yaml +135 -0
  167. data/lib/HDLRuby/low_samples/clocks.yaml +674 -0
  168. data/lib/HDLRuby/low_samples/cloner.rb +22 -0
  169. data/lib/HDLRuby/low_samples/comparer.yaml +85 -0
  170. data/lib/HDLRuby/low_samples/conditionals.yaml +133 -0
  171. data/lib/HDLRuby/low_samples/dff.yaml +107 -0
  172. data/lib/HDLRuby/low_samples/each.yaml +1328 -0
  173. data/lib/HDLRuby/low_samples/exporter.yaml +226 -0
  174. data/lib/HDLRuby/low_samples/functions.yaml +298 -0
  175. data/lib/HDLRuby/low_samples/generic_transmission.yaml +597 -0
  176. data/lib/HDLRuby/low_samples/inherit_as_dff.yaml +125 -0
  177. data/lib/HDLRuby/low_samples/inherit_dff.yaml +107 -0
  178. data/lib/HDLRuby/low_samples/load_yaml.rb +11 -0
  179. data/lib/HDLRuby/low_samples/memory.yaml +678 -0
  180. data/lib/HDLRuby/low_samples/namespace_extractor.rb +23 -0
  181. data/lib/HDLRuby/low_samples/overload.yaml +226 -0
  182. data/lib/HDLRuby/low_samples/paper_after.yaml +431 -0
  183. data/lib/HDLRuby/low_samples/port_maker.rb +14 -0
  184. data/lib/HDLRuby/low_samples/ram.yaml +207 -0
  185. data/lib/HDLRuby/low_samples/registers.yaml +228 -0
  186. data/lib/HDLRuby/low_samples/rom.yaml +2950 -0
  187. data/lib/HDLRuby/low_samples/shift.yaml +230 -0
  188. data/lib/HDLRuby/low_samples/shift2.yaml +2095 -0
  189. data/lib/HDLRuby/low_samples/simple_instance.yaml +102 -0
  190. data/lib/HDLRuby/low_samples/test_all.sh +43 -0
  191. data/lib/HDLRuby/low_samples/typedef.yaml +115 -0
  192. data/lib/HDLRuby/low_samples/values.yaml +577 -0
  193. data/lib/HDLRuby/low_samples/variable_maker.rb +14 -0
  194. data/lib/HDLRuby/low_samples/vector.yaml +56 -0
  195. data/lib/HDLRuby/low_samples/with_seq.yaml +188 -0
  196. data/lib/HDLRuby/low_samples/yaml2hdr.rb +10 -0
  197. data/lib/HDLRuby/low_samples/yaml2vhd.rb +19 -0
  198. data/lib/HDLRuby/sim/Makefile +19 -0
  199. data/lib/HDLRuby/sim/hruby_sim.h +590 -0
  200. data/lib/HDLRuby/sim/hruby_sim_calc.c +2362 -0
  201. data/lib/HDLRuby/sim/hruby_sim_core.c +589 -0
  202. data/lib/HDLRuby/sim/hruby_sim_list.c +93 -0
  203. data/lib/HDLRuby/sim/hruby_sim_vizualize.c +91 -0
  204. data/lib/HDLRuby/sim/hruby_value_pool.c +64 -0
  205. data/lib/HDLRuby/std/channel.rb +354 -0
  206. data/lib/HDLRuby/std/clocks.rb +165 -0
  207. data/lib/HDLRuby/std/counters.rb +82 -0
  208. data/lib/HDLRuby/std/decoder.rb +214 -0
  209. data/lib/HDLRuby/std/fsm.rb +516 -0
  210. data/lib/HDLRuby/std/pipeline.rb +220 -0
  211. data/lib/HDLRuby/std/reconf.rb +309 -0
  212. data/lib/HDLRuby/test_hruby_bstr.rb +2259 -0
  213. data/lib/HDLRuby/test_hruby_high.rb +594 -0
  214. data/lib/HDLRuby/test_hruby_high_low.rb +99 -0
  215. data/lib/HDLRuby/test_hruby_low.rb +934 -0
  216. data/lib/HDLRuby/v_samples/adder.v +10 -0
  217. data/lib/HDLRuby/v_samples/dff.v +12 -0
  218. data/lib/HDLRuby/v_samples/ram.v +20 -0
  219. data/lib/HDLRuby/v_samples/rom.v +270 -0
  220. data/lib/HDLRuby/version.rb +3 -0
  221. data/lib/HDLRuby.rb +11 -0
  222. data/makedoc +1 -0
  223. data/metadata.yaml +4 -0
  224. metadata +299 -0
@@ -0,0 +1,256 @@
1
+ 0b00110110, # 00: mov 0,G ; Start writing a address 0
2
+ 0b10101000, # 01: movl 0b1000
3
+ 0b10110100, # 02: movh 0b0100 ; A <= 'H'
4
+ 0b11111001, # 03: ++st ; write it front
5
+ 0b10100101, # 04: movl 0b0101
6
+ 0b10110110, # 05: movh 0b0110 ; A <= 'e'
7
+ 0b11111001, # 06: ++st ; write it front
8
+ 0b10101100, # 07: movl 0b1100
9
+ 0b10110110, # 08: movh 0b0110 ; A <= 'l'
10
+ 0b11111001, # 09: ++st ; write it front
11
+ 0b10101100, # 0A: movl 0b1100
12
+ 0b10110110, # 0B: movh 0b0110 ; A <= 'l'
13
+ 0b11111001, # 0C: ++st ; write it front
14
+ 0b10101111, # 0D: movl 0b1111
15
+ 0b10110110, # 0E: movh 0b0110 ; A <= 'o'
16
+ 0b11111001, # 0F: ++st ; write it front
17
+ 0b10100001, # 10: movl 0b0001
18
+ 0b10110010, # 11: movh 0b0010 ; A <= '!'
19
+ 0b11111001, # 12: ++st ; write it front
20
+ 0b00000000, # 13:
21
+ 0b00000000, # 14:
22
+ 0b10100000, # 15: movl 0b0000
23
+ 0b10110010, # 16: movh 0b0010 ; A <= 20H
24
+ 0b00000001, # 17: mov A,B ; B <= A
25
+ 0b10111000, # 18: movh 0b1000 ; A <= 80H
26
+ 0b11111001, # 19: ++st ; write A front
27
+ 0b01001001, # 1A: sub B ; A <= A-B
28
+ 0b11101110, # 1B: brnz 0b110 ; to address 0x19 if non zero
29
+ 0b00000000, # 1C:
30
+ 0b00000000, # 1D:
31
+ 0b10100101, # 1E: movl 0b0101
32
+ 0b10111010, # 1F: movh 0b1010 ; A <= A5H
33
+ 0b00000010, # 20: mov A,C ; C <= A
34
+ 0b10100110, # 21: movl 0b0110 ; A <= 06H
35
+ 0b01000010, # 22: add C ; A <= A+C
36
+ 0b11111001, # 23: ++st ; write A front
37
+ 0b00000011, # 24: mov A,D ; D <= A
38
+ 0b01010011, # 25: inc D ; D <= D+1
39
+ 0b01100011, # 26: and D ; A <= A&D
40
+ 0b11111001, # 27: ++st ; write A front
41
+ 0b00000100, # 28: mov A,E ; E <= A
42
+ 0b01011100, # 29: dec E ; E <= E-1
43
+ 0b01101100, # 2A: or E ; A <= A|E
44
+ 0b11111011, # 2B: --st ; write A back
45
+ 0b00000101, # 2C: mov A,F ; F <= A
46
+ 0b01110101, # 2D: xor F ; A <= A^F
47
+ 0b10010101, # 2E: st F ; write F
48
+ 0b10000000, # 2F: cp A ; A-A
49
+ 0b11100010, # 30: brv 0b010 ; to address 0x32 if overflow
50
+ 0b10010010, # 31: st C ; write C
51
+ 0b10010000, # 32: st A ; write A
52
+ 0b11010010, # 33: brc 0b010 ; to address 0x35 if carry
53
+ 0b10010000, # 34: st A ; write A
54
+ 0b10010011, # 35: st D ; write D
55
+ 0b11011010, # 36: brs 0b010 ; to address 0x38 if negative
56
+ 0b10010000, # 37: st A ; write A
57
+ 0b10010100, # 38: st E ; write E
58
+ 0b11001010, # 39: brz 0b010 ; to address 0x3B if zero
59
+ 0b10010000, # 3A: st A ; write A
60
+ 0b10010101, # 3B: st F ; write F
61
+ 0b10001101, # 3C: ld F ; read F
62
+ 0b00101000, # 3D: mov F,A ; A <= F
63
+ 0b10010000, # 3E: st A ; write A
64
+ 0b11110000, # 3F: neg ; A <= -A
65
+ 0b10010000, # 40: st A ; write A
66
+ 0b11110001, # 41: not ; A <= !A
67
+ 0b10010000, # 42: st A ; write A
68
+ 0b11110010, # 43: shl ; A <= A << 1
69
+ 0b10010000, # 44: st A ; write A
70
+ 0b10111100, # 45: movh 0b1100 ; AH <= C
71
+ 0b11110100, # 46: sar ; A <= A >> 1
72
+ 0b10010000, # 47: st A ; write A
73
+ 0b11110011, # 48: shr ; A <= A >>> 1
74
+ 0b10010000, # 49: st A ; write A
75
+ 0b11110110, # 4A: trap ; TRAP
76
+ 0b11111000, # 4B: ++ld ; read A front
77
+ 0b10010000, # 4C: st ; write A
78
+ 0b11111010, # 4D: --ld ; read A back
79
+ 0b10010000, # 4E: st ; write A
80
+ 0b11111100, # 4F: push PC ; push PC
81
+ 0b11111110, # 50: halt
82
+ 0b00000000, # 51:
83
+ 0b00000000, # 52:
84
+ 0b00000000, # 53:
85
+ 0b00000000, # 54:
86
+ 0b00000000, # 55:
87
+ 0b00000000, # 56:
88
+ 0b00000000, # 57:
89
+ 0b00000000, # 58:
90
+ 0b00000000, # 59:
91
+ 0b00000000, # 5A:
92
+ 0b00000000, # 5B:
93
+ 0b00000000, # 5C:
94
+ 0b00000000, # 5D:
95
+ 0b00000000, # 5E:
96
+ 0b00000000, # 5F:
97
+ 0b00000000, # 60:
98
+ 0b00000000, # 61:
99
+ 0b00000000, # 62:
100
+ 0b00000000, # 63:
101
+ 0b00000000, # 64:
102
+ 0b00000000, # 65:
103
+ 0b00000000, # 66:
104
+ 0b00000000, # 67:
105
+ 0b00000000, # 68:
106
+ 0b00000000, # 69:
107
+ 0b00000000, # 6A:
108
+ 0b00000000, # 6B:
109
+ 0b00000000, # 6C:
110
+ 0b00000000, # 6D:
111
+ 0b00000000, # 6E:
112
+ 0b00000000, # 6F:
113
+ 0b00000000, # 70:
114
+ 0b00000000, # 71:
115
+ 0b00000000, # 72:
116
+ 0b00000000, # 73:
117
+ 0b00000000, # 74:
118
+ 0b00000000, # 75:
119
+ 0b00000000, # 76:
120
+ 0b00000000, # 77:
121
+ 0b00000000, # 78:
122
+ 0b00000000, # 79:
123
+ 0b00000000, # 7A:
124
+ 0b00000000, # 7B:
125
+ 0b00000000, # 7C:
126
+ 0b00000000, # 7D:
127
+ 0b00000000, # 7E:
128
+ 0b00000000, # 7F:
129
+ 0b00000000, # 80:
130
+ 0b00000000, # 81:
131
+ 0b00000000, # 82:
132
+ 0b00000000, # 83:
133
+ 0b00000000, # 84:
134
+ 0b00000000, # 85:
135
+ 0b00000000, # 86:
136
+ 0b00000000, # 87:
137
+ 0b00000000, # 88:
138
+ 0b00000000, # 89:
139
+ 0b00000000, # 8A:
140
+ 0b00000000, # 8B:
141
+ 0b00000000, # 8C:
142
+ 0b00000000, # 8D:
143
+ 0b00000000, # 8E:
144
+ 0b00000000, # 8F:
145
+ 0b00000000, # 90:
146
+ 0b00000000, # 91:
147
+ 0b00000000, # 92:
148
+ 0b00000000, # 93:
149
+ 0b00000000, # 94:
150
+ 0b00000000, # 95:
151
+ 0b00000000, # 96:
152
+ 0b00000000, # 97:
153
+ 0b00000000, # 98:
154
+ 0b00000000, # 99:
155
+ 0b00000000, # 9A:
156
+ 0b00000000, # 9B:
157
+ 0b00000000, # 9C:
158
+ 0b00000000, # 9D:
159
+ 0b00000000, # 9E:
160
+ 0b00000000, # 9F;
161
+ 0b00000000, # A0:
162
+ 0b00000000, # A1:
163
+ 0b00000000, # A2:
164
+ 0b00000000, # A3:
165
+ 0b00000000, # A4:
166
+ 0b00000000, # A5:
167
+ 0b00000000, # A6:
168
+ 0b00000000, # A7:
169
+ 0b00000000, # A8:
170
+ 0b00000000, # A9:
171
+ 0b00000000, # AA:
172
+ 0b00000000, # AB:
173
+ 0b00000000, # AC:
174
+ 0b00000000, # AD:
175
+ 0b00000000, # AE:
176
+ 0b00000000, # AF:
177
+ 0b00000000, # B0:
178
+ 0b00000000, # B1:
179
+ 0b00000000, # B2:
180
+ 0b00000000, # B3:
181
+ 0b00000000, # B4:
182
+ 0b00000000, # B5:
183
+ 0b00000000, # B6:
184
+ 0b00000000, # B7:
185
+ 0b00000000, # B8:
186
+ 0b00000000, # B9:
187
+ 0b00000000, # BA:
188
+ 0b00000000, # BB:
189
+ 0b00000000, # BC:
190
+ 0b00000000, # BD:
191
+ 0b00000000, # BE:
192
+ 0b00000000, # BF:
193
+ 0b00000000, # C0:
194
+ 0b00000000, # C1:
195
+ 0b00000000, # C2:
196
+ 0b00000000, # C3:
197
+ 0b00000000, # C4:
198
+ 0b00000000, # C5:
199
+ 0b00000000, # C6:
200
+ 0b00000000, # C7:
201
+ 0b00000000, # C8:
202
+ 0b00000000, # C9:
203
+ 0b00000000, # CA:
204
+ 0b00000000, # CB:
205
+ 0b00000000, # CC:
206
+ 0b00000000, # CD:
207
+ 0b00000000, # CE:
208
+ 0b00000000, # CF:
209
+ 0b00000000, # D0:
210
+ 0b00000000, # D1:
211
+ 0b00000000, # D2:
212
+ 0b00000000, # D3:
213
+ 0b00000000, # D4:
214
+ 0b00000000, # D5:
215
+ 0b00000000, # D6:
216
+ 0b00000000, # D7:
217
+ 0b00000000, # D8:
218
+ 0b00000000, # D9:
219
+ 0b00000000, # DA:
220
+ 0b00000000, # DB:
221
+ 0b00000000, # DC:
222
+ 0b00000000, # DD:
223
+ 0b00000000, # DE:
224
+ 0b00000000, # DF:
225
+ 0b00000000, # E0:
226
+ 0b00000000, # E1:
227
+ 0b00000000, # E2:
228
+ 0b00000000, # E3:
229
+ 0b00000000, # E4:
230
+ 0b00000000, # E5:
231
+ 0b00000000, # E6:
232
+ 0b00000000, # E7:
233
+ 0b00000000, # E8:
234
+ 0b00000000, # E9:
235
+ 0b00000000, # EA:
236
+ 0b00000000, # EB:
237
+ 0b00000000, # EC:
238
+ 0b00000000, # ED:
239
+ 0b00000000, # EE:
240
+ 0b00000000, # EF:
241
+ 0b00000000, # F0:
242
+ 0b00000000, # F1:
243
+ 0b00000000, # F2:
244
+ 0b00000000, # F3:
245
+ 0b00000000, # F4:
246
+ 0b00000000, # F5:
247
+ 0b00000000, # F6:
248
+ 0b00000000, # F7:
249
+ 0b10100011, # F8: movl 0b0011
250
+ 0b11110111, # F9: xs
251
+ 0b11111101, # FA; pop pc
252
+ 0b00000000, # FB:
253
+ 0b10101011, # FC: movl 0b1011
254
+ 0b10110100, # FD: movh 0b0100 ; A <= 4BH
255
+ 0b10011000, # FE: jr A ; PC <= A
256
+ 0b11111111, # FF:
@@ -0,0 +1,18 @@
1
+ # Describes an 8-bit data 16-bit address RAM.
2
+ system :ram8_16 do
3
+ input :clk, :rwb, :en
4
+ [7..0].input :addr
5
+ [7..0].inout :data
6
+
7
+ bit[7..0][2**8].inner :content
8
+
9
+ # Memory enabled?
10
+ par(clk.posedge) do
11
+ hif(en) do
12
+ # Read case
13
+ hif(rwb) { data <= content[addr] }
14
+ helse { content[addr] <= data }
15
+ end
16
+ helse { data <= _bZZZZZZZZ }
17
+ end
18
+ end
@@ -0,0 +1,98 @@
1
+ # require "../hruby_low2c.rb"
2
+
3
+ # A generic register with C printing the data to the standard output.
4
+ system :register do |size|
5
+ input :clk, :rst
6
+ [size].input :d
7
+ [size].output :q
8
+
9
+ (q <= d & ~rst).at(clk.posedge)
10
+
11
+ code clk.posedge, c: [ '
12
+ #include <stdio.h>
13
+ #include "hruby_sim.h"
14
+ #include "hruby_sim_gen.h"
15
+
16
+ void show() {
17
+ printf("######################## From software q=");
18
+ print_value(',q,');
19
+ printf("\n");
20
+ }
21
+ ' ],
22
+ sim: "show"
23
+ end
24
+
25
+ # A benchmark for the register.
26
+ system :register_bench do
27
+ [8].inner :d, :clk, :rst
28
+ [8].inner :q
29
+
30
+ register(8).(:my_register).(clk,rst,d,q)
31
+
32
+ timed do
33
+ clk <= 0
34
+ rst <= 0
35
+ d <= 0
36
+ !10.ns
37
+ clk <= 1
38
+ rst <= 0
39
+ d <= 0
40
+ !10.ns
41
+ clk <= 0
42
+ rst <= 1
43
+ d <= 0
44
+ !10.ns
45
+ clk <= 1
46
+ rst <= 1
47
+ d <= 0
48
+ !10.ns
49
+ clk <= 0
50
+ rst <= 0
51
+ d <= 1
52
+ !10.ns
53
+ clk <= 1
54
+ rst <= 0
55
+ d <= 1
56
+ !10.ns
57
+ clk <= 0
58
+ rst <= 0
59
+ d <= 2
60
+ !10.ns
61
+ clk <= 1
62
+ rst <= 0
63
+ d <= 2
64
+ !10.ns
65
+ clk <= 0
66
+ rst <= 0
67
+ d <= 0
68
+ !10.ns
69
+ clk <= 1
70
+ rst <= 0
71
+ d <= 255
72
+ !10.ns
73
+ clk <= 0
74
+ rst <= 0
75
+ d <= 255
76
+ !10.ns
77
+ clk <= 1
78
+ rst <= 0
79
+ d <= 255
80
+ !10.ns
81
+ clk <= 0
82
+ rst <= 0
83
+ d <= 0
84
+ !10.ns
85
+ clk <= 1
86
+ rst <= 0
87
+ d <= 0
88
+ !10.ns
89
+ clk <= 0
90
+ rst <= 0
91
+ d <= 0
92
+ !10.ns
93
+ clk <= 1
94
+ rst <= 0
95
+ d <= 0
96
+ !10.ns
97
+ end
98
+ end
@@ -0,0 +1,10 @@
1
+
2
+ # Describes an 8-bit data 4-bit address ROM.
3
+ system :rom4_8 do
4
+ [3..0].input :addr
5
+ [7..0].output :data
6
+
7
+ bit[7..0][2**4].constant content: (2**4).times.to_a
8
+
9
+ data <= content[addr]
10
+ end
@@ -0,0 +1,14 @@
1
+ system :dff do
2
+ input :clk, :rst, :d
3
+ output :q
4
+
5
+ par(clk.posedge) { q <= d & ~rst }
6
+ end
7
+
8
+ system :my_system do
9
+ input :clk, :rst
10
+ { sub0: bit, sub1: bit}.inner :sig
11
+
12
+ dff(:dff0).(clk: clk, rst: rst)
13
+ dff0.d <= sig.sub0
14
+ end
@@ -0,0 +1,29 @@
1
+ system :sumprod do |typ,coefs|
2
+ typ[coefs.size].input :ins
3
+ typ.output :o
4
+
5
+ o <= coefs.each_with_index.reduce(_0) do |sum,(coef,i)|
6
+ sum + ins[i]*coef
7
+ end
8
+ end
9
+
10
+
11
+ typedef :sat do |width, max|
12
+ signed[width]
13
+ end
14
+
15
+
16
+ sat.define_operator(:+) do |width,max, x,y|
17
+ [width].inner :res
18
+ seq do
19
+ res <= x + y
20
+ ( res <= max ).hif(res > max)
21
+ end
22
+ end
23
+
24
+
25
+
26
+ system :sumprod_sat_16_1000, sumprod(sat(16,1000),
27
+ [3,78,43,246, 3,67,1,8, 47,82,99,13, 5,77,2,4]) do
28
+ end
29
+
@@ -0,0 +1,103 @@
1
+ # require "../hruby_low2c.rb"
2
+
3
+ # An 8-bit register with C encrypting.
4
+ system :encrypt_register do
5
+ input :clk, :rst
6
+ [8].input :d
7
+ [8].output :q
8
+
9
+ code clk.posedge, c: [ "
10
+ #include <stdio.h>
11
+ #include \"hruby_sim.h\"
12
+ #include \"hruby_sim_gen.h\"
13
+
14
+ void encrypt() {
15
+ static char keys[] = { 'S', 'e', 'c', 'r', 'e', 't', ' ', '!' };
16
+ static int index = 0;
17
+ char buf;
18
+ buf = read8(",d,");
19
+ printf(\"######################## From software: encrypting d=%x\\n\",buf);
20
+ buf = buf ^ (keys[index]);
21
+ index = (index + 1) & sizeof(keys)-1;
22
+ printf(\"######################## From software: result =%x\\n\",buf);
23
+ write8(buf,",q,");
24
+
25
+ }
26
+ " ],
27
+ sim: "encrypt"
28
+ end
29
+
30
+ # A benchmark for the register.
31
+ system :encrypt_bench do
32
+ [8].inner :d, :clk, :rst
33
+ [8].inner :q
34
+
35
+ encrypt_register(:my_register).(clk,rst,d,q)
36
+
37
+ timed do
38
+ clk <= 0
39
+ rst <= 0
40
+ d <= 0
41
+ !10.ns
42
+ clk <= 1
43
+ rst <= 0
44
+ d <= 0
45
+ !10.ns
46
+ clk <= 0
47
+ rst <= 1
48
+ d <= 0
49
+ !10.ns
50
+ clk <= 1
51
+ rst <= 1
52
+ d <= 0
53
+ !10.ns
54
+ clk <= 0
55
+ rst <= 0
56
+ d <= 1
57
+ !10.ns
58
+ clk <= 1
59
+ rst <= 0
60
+ d <= 1
61
+ !10.ns
62
+ clk <= 0
63
+ rst <= 0
64
+ d <= 2
65
+ !10.ns
66
+ clk <= 1
67
+ rst <= 0
68
+ d <= 2
69
+ !10.ns
70
+ clk <= 0
71
+ rst <= 0
72
+ d <= 0
73
+ !10.ns
74
+ clk <= 1
75
+ rst <= 0
76
+ d <= 255
77
+ !10.ns
78
+ clk <= 0
79
+ rst <= 0
80
+ d <= 255
81
+ !10.ns
82
+ clk <= 1
83
+ rst <= 0
84
+ d <= 255
85
+ !10.ns
86
+ clk <= 0
87
+ rst <= 0
88
+ d <= 0
89
+ !10.ns
90
+ clk <= 1
91
+ rst <= 0
92
+ d <= 0
93
+ !10.ns
94
+ clk <= 0
95
+ rst <= 0
96
+ d <= 0
97
+ !10.ns
98
+ clk <= 1
99
+ rst <= 0
100
+ d <= 0
101
+ !10.ns
102
+ end
103
+ end