HDLRuby 2.10.5 → 2.11.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (38) hide show
  1. checksums.yaml +4 -4
  2. data/HDLRuby.gemspec +1 -0
  3. data/README.md +8 -4
  4. data/Rakefile +8 -0
  5. data/{lib/HDLRuby/sim/Makefile → ext/hruby_sim/Makefile_csim} +0 -0
  6. data/ext/hruby_sim/extconf.rb +13 -0
  7. data/ext/hruby_sim/hruby_rcsim_build.c +1188 -0
  8. data/{lib/HDLRuby/sim → ext/hruby_sim}/hruby_sim.h +255 -16
  9. data/{lib/HDLRuby/sim → ext/hruby_sim}/hruby_sim_calc.c +310 -181
  10. data/{lib/HDLRuby/sim → ext/hruby_sim}/hruby_sim_core.c +34 -17
  11. data/{lib/HDLRuby/sim → ext/hruby_sim}/hruby_sim_list.c +0 -0
  12. data/{lib/HDLRuby/sim → ext/hruby_sim}/hruby_sim_stack_calc.c +4 -1
  13. data/{lib/HDLRuby/sim → ext/hruby_sim}/hruby_sim_stack_calc.c.sav +0 -0
  14. data/ext/hruby_sim/hruby_sim_tree_calc.c +375 -0
  15. data/{lib/HDLRuby/sim → ext/hruby_sim}/hruby_sim_vcd.c +5 -5
  16. data/{lib/HDLRuby/sim → ext/hruby_sim}/hruby_sim_vizualize.c +2 -2
  17. data/{lib/HDLRuby/sim → ext/hruby_sim}/hruby_value_pool.c +4 -1
  18. data/lib/HDLRuby/hdr_samples/bstr_bench.rb +2 -0
  19. data/lib/HDLRuby/hdr_samples/case_bench.rb +2 -2
  20. data/lib/HDLRuby/hdr_samples/counter_bench.rb +0 -1
  21. data/lib/HDLRuby/hdr_samples/counter_dff_bench.rb +46 -0
  22. data/lib/HDLRuby/hdr_samples/dff_bench.rb +1 -1
  23. data/lib/HDLRuby/hdr_samples/print_bench.rb +62 -0
  24. data/lib/HDLRuby/hdr_samples/rom.rb +5 -3
  25. data/lib/HDLRuby/hdr_samples/simple_counter_bench.rb +43 -0
  26. data/lib/HDLRuby/hdrcc.rb +54 -8
  27. data/lib/HDLRuby/hruby_bstr.rb +1175 -917
  28. data/lib/HDLRuby/hruby_high.rb +200 -90
  29. data/lib/HDLRuby/hruby_high_fullname.rb +82 -0
  30. data/lib/HDLRuby/hruby_low.rb +41 -23
  31. data/lib/HDLRuby/hruby_low2c.rb +7 -0
  32. data/lib/HDLRuby/hruby_rcsim.rb +978 -0
  33. data/lib/HDLRuby/hruby_rsim.rb +1134 -0
  34. data/lib/HDLRuby/hruby_rsim_vcd.rb +322 -0
  35. data/lib/HDLRuby/hruby_values.rb +362 -18
  36. data/lib/HDLRuby/hruby_verilog.rb +21 -3
  37. data/lib/HDLRuby/version.rb +1 -1
  38. metadata +24 -13
@@ -1,52 +1,339 @@
1
1
  module HDLRuby
2
2
 
3
- ##
4
- # Library for implementing the value processing.
5
- #
6
- ########################################################################
3
+ ##
4
+ # Library for implementing the value processing.
5
+ #
6
+ ########################################################################
7
7
 
8
8
  # To include to classes for value processing support.
9
9
  module Vprocess
10
10
 
11
+ # TRUNC_P_T = 65536.times.map { |i| 2**i - 1 }
12
+ # TRUNC_N_T = 65536.times.map { |i| (-1 * 2**i) }
13
+
14
+ # Truncs integer +val+ to +width+
15
+ def trunc(val,width)
16
+ if val.bit_length > width then
17
+ if val >= 0 then
18
+ # return val & (2**width-1)
19
+ return val % (2**width)
20
+ # return val & TRUNC_P_T[width]
21
+ else
22
+ # return val | (-1 * 2**width)
23
+ return val % -(2**width)
24
+ # return val | TRUNC_N_T[width]
25
+ end
26
+ else
27
+ return val
28
+ end
29
+ end
30
+
11
31
  # Redefinition of the arithmetic and logic operations binary operators
12
- [ :+, :-, :*, :/, :%, :&, :|, :**,
32
+ [ :+, :-, :*, :/, :%, :&, :|, :^, :**,
13
33
  :<<, :>>,
14
- :==, :<, :>, :<=, :>=, :<=> ].each do |op|
15
- # Actual redefinition.
16
- define_method(op) do |value|
17
- # puts "value=#{value}"
18
- # Ensures value is really a value.
19
- unless value.to_value? then
34
+ :==, :!=, :<, :>, :<=, :>=, :<=> ].
35
+ each do |op|
36
+ define_method(op) do |val|
37
+ # puts "op=#{op} value=#{value}"
38
+ # Ensures val is computable.
39
+ unless val.to_value? then
40
+ # Not computable, use the former method that generates
41
+ # HDLRuby code.
42
+ return self.send(orig_operator(op),value)
43
+ end
44
+ # Handle Numeric op BitString case.
45
+ if self.content.is_a?(Numeric) && val.content.is_a?(BitString)
46
+ if val.content.specified? then
47
+ res_content = self.content.send(op,val.content.to_i)
48
+ else
49
+ res_content =
50
+ BitString.new(self.content).send(op,val.content)
51
+ end
52
+ else
53
+ # Generate the resulting content.
54
+ res_content = self.content.send(op,val.content)
55
+ # puts "op=#{op} self.content=#{self.content} (#{self.content.class}) val.content=#{val.content} (#{val.content.class}) res_content=#{res_content} (#{res_content.class})"
56
+ end
57
+ res_type = self.type.resolve(val.type)
58
+ # # Adjust the result content size.
59
+ # res_width = res_type.width
60
+ # if res_content.is_a?(BitString) then
61
+ # res_content.trunc!(res_width)
62
+ # else
63
+ # res_content = self.trunc(res_content,res_width)
64
+ # end
65
+ # Return the resulting value.
66
+ return self.class.new(res_type,res_content)
67
+ end
68
+ end
69
+
70
+ # Redefinition of the access operators.
71
+ define_method(:[]) do |val|
72
+ if val.is_a?(Range) then
73
+ # Range case.
74
+ # Ensures value is really a range of values.
75
+ left = val.first
76
+ right = val.last
77
+ unless left.to_value? && right.to_value? then
20
78
  # Not a value, use the former method.
21
79
  # Assumed
22
- return self.send(orig_operator(op),value)
80
+ return self.send(orig_operator(op),val)
81
+ end
82
+ # Process left.
83
+ # unless left.is_a?(Numeric) || left.is_a?(BitString) then
84
+ # left = left.to_value.content
85
+ # end
86
+ left = left.content
87
+ if left.is_a?(BitString) && !left.specified? then
88
+ return self.class.new(self.type.base,
89
+ BitString::UNKNOWN.clone)
23
90
  end
24
- value = value.to_value
91
+ # left = left.to_i
92
+ left = self.trunc(left.to_i,val.first.type.width)
93
+ # Process right.
94
+ # unless right.is_a?(Numeric) || right.is_a?(BitString) then
95
+ # right = right.to_value.content
96
+ # end
97
+ right = right.content
98
+ if right.is_a?(BitString) && !right.specified? then
99
+ return self.class.new(self.type.base,
100
+ BitString::UNKNOWN.clone)
101
+ end
102
+ # right = right.to_i
103
+ right = self.trunc(right.to_i,val.last.type.width)
25
104
  # Generate the resulting type.
26
- res_type = self.type.send(op,value.type)
27
- # Generate the resulting content.
28
- res_content = self.content.send(op,value.content)
29
- # puts "op=#{op} value.content=#{value.content} res_content=#{res_content}"
105
+ res_type = self.type.base[(left-right+1).abs]
106
+ # Generate the resulting value.
107
+ width = res_type.base.width
108
+ # puts "width=#{width}, left=#{left} right=#{right}"
109
+ if self.content.is_a?(BitString) then
110
+ res_content = self.content[right*width..(left+1)*width-1]
111
+ else
112
+ sh = right*width
113
+ mask = (-1 << sh) & ~(-1 << (left+1)*width)
114
+ res_content = (self.content & mask) >> sh
115
+ end
116
+ # Return the resulting value.
117
+ return self.class.new(res_type,res_content)
118
+ else
119
+ # Index case.
120
+ # Ensures val is really a value.
121
+ unless val.to_value? then
122
+ # Not a value, use the former method.
123
+ # Assumed
124
+ return self.send(orig_operator(op),val)
125
+ end
126
+ # Process val.
127
+ index = val.content
128
+ if index.is_a?(BitString) && !index.specified? then
129
+ return self.class.new(self.type.base,
130
+ BitString::UNKNOWN.clone)
131
+ end
132
+ index = self.trunc(index.to_i,val.type.width)
133
+ # index = index.to_i
134
+ # if index >= self.type.size then
135
+ # # puts "index=#{index}"
136
+ # index %= self.type.size
137
+ # # puts "now index=#{index}"
138
+ # end
139
+ # Generate the resulting type.
140
+ res_type = self.type.base
141
+ # Generate the resulting value.
142
+ width = res_type.width
143
+ # puts "type width=#{self.type.width}, element width=#{width}, index=#{index}"
144
+ if self.content.is_a?(BitString) then
145
+ res_content = self.content[index*width..(index+1)*width-1]
146
+ else
147
+ sh = index*width
148
+ mask = (-1 << sh) & ~(-1 << (index+1)*width)
149
+ res_content = (self.content & mask) >> sh
150
+ end
30
151
  # Return the resulting value.
31
152
  return self.class.new(res_type,res_content)
32
153
  end
33
154
  end
34
155
 
156
+ define_method(:[]=) do |index,val|
157
+ if index.is_a?(Range) then
158
+ # Range case.
159
+ # Ensures indexes and val are really values.
160
+ left = index.first
161
+ right = index.last
162
+ unless val.to_value? &&
163
+ left.to_value? && right.to_value? then
164
+ # Not a value, use the former method.
165
+ # Assumed
166
+ return self.send(orig_operator(op),index,value)
167
+ end
168
+ # Process val.
169
+ val = val.content if val.is_a?(Value)
170
+ # Process left.
171
+ left = left.content if left.is_a?(Value)
172
+ if left.is_a?(BitString) && !left.specified? then
173
+ return self.class.new(self.type.base,
174
+ BitString::UNKNOWN.clone)
175
+ end
176
+ left = left.to_i
177
+ # Process right.
178
+ right = right.content if right.is_a?(Value)
179
+ if right.is_a?(BitString) && !right.specified? then
180
+ return self.class.new(self.type.base,
181
+ BitString::UNKNOWN.clone)
182
+ end
183
+ right = right.to_i
184
+ # Compute the width of one element.
185
+ width = self.type.base.width
186
+ # Write the value at the right position.
187
+ # puts "width=#{width}, left=#{left}, right=#{right}"
188
+ if @content.is_a?(BitString) then
189
+ @content[right*width..(left+1)*width-1] = val
190
+ else
191
+ sh = right*width
192
+ val = self.trunc(val,((left-right).abs+1)*width) << sh
193
+ mask = ~(-1 << sh) | (-1 << (left+1)*width)
194
+ @content =((@content & mask) | val)
195
+ end
196
+ else
197
+ # Index case.
198
+ # Ensures index and val are really values.
199
+ unless val.to_value? && index.to_value? then
200
+ # Not a value, use the former method.
201
+ # Assumed
202
+ return self.send(orig_operator(op),index,value)
203
+ end
204
+ # Process val.
205
+ val = val.content if val.is_a?(Value)
206
+ # puts "val=#{val} (#{val.class})"
207
+ # Process index.
208
+ index = index.content if index.is_a?(Value)
209
+ # puts "index=#{index} (#{index.class})"
210
+ if index.is_a?(BitString) && !index.specified? then
211
+ return self.class.new(self.type.base,
212
+ BitString::UNKNOWN.clone)
213
+ end
214
+ index = index.to_i
215
+ # Compute the width of one element.
216
+ width = self.type.base.width
217
+ # Write the value at the right position.
218
+ # puts "width=#{width}, index=#{index}, val=#{val}"
219
+ # puts "first @content=#{@content}, index*width=#{index*width} next=#{(index+1)*width-1}"
220
+ if @content.is_a?(BitString) then
221
+ @content[index*width..(index+1)*width-1] = val
222
+ else
223
+ sh = index*width
224
+ val = self.trunc(val,width) << sh
225
+ mask = ~(-1 << sh) | (-1 << (index+1)*width)
226
+ @content = ((@content & mask) | val)
227
+ end
228
+ # puts "now @content=#{@content}"
229
+ end
230
+ end
231
+
35
232
  # Redefinition of the arithmetic and logic operations unary operators
36
233
  [ :-@, :+@, :~, :abs ].each do |op|
37
234
  # Actual redefinition.
38
235
  define_method(op) do
39
236
  # Generate the resulting type.
40
- res_type = self.type.send(op)
237
+ res_type = self.type
41
238
  # Generate the resulting content.
239
+ # puts "op=#{op} content=#{content.to_s}"
42
240
  res_content = self.content.send(op)
241
+ # puts "res_content=#{res_content}"
43
242
  # Return the resulting value.
44
243
  return self.class.new(res_type,res_content)
45
244
  end
46
245
  end
47
246
 
247
+ # Cast to +type+.
248
+ # NOTE: nodir tells if the direction is to be ignored.
249
+ def cast(type,nodir = false)
250
+ # Handle the direction.
251
+ if !nodir && type.direction != self.type.direction then
252
+ if self.content.is_a?(Numeric) then
253
+ tmp = 0
254
+ res_content = self.content
255
+ self.type.width.times do |i|
256
+ tmp = tmp*2 | (res_content & 1)
257
+ res_content /= 2
258
+ end
259
+ res_content = tmp
260
+ elsif self.content.is_a?(BitString) then
261
+ res_content = self.content.clone.reverse!(self.type.width)
262
+ else
263
+ res_content = self.content.reverse
264
+ end
265
+ else
266
+ res_content = self.content.clone
267
+ end
268
+ # Handle the sign.
269
+ if type.unsigned? && !self.content.positive? then
270
+ # Ensure the content is a positive value to match unsigned type.
271
+ if res_content.is_a?(Numeric) then
272
+ res_content &= ~(-1 << type.width) if res_content < 0
273
+ # res_content &= ~(-1 * 2**type.width) if res_content < 0
274
+ else
275
+ res_content.positive!
276
+ end
277
+ end
278
+ # # truncs to the right size if necessary.
279
+ # if res_content.is_a?(BitString) then
280
+ # res_content.trunc!(type.width)
281
+ # else
282
+ # res_content = self.trunc(res_content,type.width)
283
+ # end
284
+ # Generate the resulting value.
285
+ return self.class.new(type,res_content)
286
+ end
287
+
288
+ # Concat the content of +vals+.
289
+ def self.concat(*vals)
290
+ # Compute the resulting type.
291
+ types = vals.map {|v| v.type }
292
+ if types.uniq.count <= 1 then
293
+ res_type = types[0][types.size]
294
+ else
295
+ res_type = vals.map {|v| v.type }.to_type
296
+ end
297
+ # Concat the contents.
298
+ res_content = []
299
+ content = width = 0
300
+ vals.each_with_index do |val,i|
301
+ content = val.content
302
+ width = types[i].width
303
+ if content.is_a?(BitString) then
304
+ count = 0
305
+ content.raw_content.each do |b|
306
+ res_content << b
307
+ count += 1
308
+ break if count == width
309
+ end
310
+ if count < width then
311
+ res_content.concat(res_content[-1] * (width-count))
312
+ end
313
+ else
314
+ width.times do |p|
315
+ res_content << content[p]
316
+ end
317
+ end
318
+ end
319
+ # Make a bit string from res_content.
320
+ res_content = BitString.new(res_content,:raw)
321
+ # Return the resulting value.
322
+ return vals[0].class.new(res_type,res_content)
323
+ end
324
+
325
+
48
326
  # Conversion to an integer if possible.
49
327
  def to_i
328
+ # if self.content.is_a?(BitString) then
329
+ # if self.type.signed? then
330
+ # return self.content.to_numeric_signed
331
+ # else
332
+ # return self.content.to_numeric
333
+ # end
334
+ # else
335
+ # return self.content.to_i
336
+ # end
50
337
  return self.content.to_i
51
338
  end
52
339
 
@@ -55,10 +342,67 @@ module HDLRuby
55
342
  return self.content.to_f
56
343
  end
57
344
 
345
+ # # Conversion to a BitString of the right size.
346
+ # def to_bstr
347
+ # # Ensure the content is a bit string.
348
+ # bstr = self.content
349
+ # if bstr.is_a?(Numeric) then
350
+ # # Handle negative values.
351
+ # bstr = 2**self.type.width + bstr if bstr < 0
352
+ # end
353
+ # bstr = BitString.new(bstr) unless bstr.is_a?(BitString)
354
+ # # Resize it if necessary.
355
+ # cwidth = self.content.width
356
+ # twidth = self.type.width
357
+ # if cwidth < twidth then
358
+ # # Its lenght must be extended.
359
+ # if self.type.signed? then
360
+ # return bstr.sext(twidth)
361
+ # else
362
+ # return bstr.zext(twidth)
363
+ # end
364
+ # elsif cwidth > twidth then
365
+ # # Its lenght must be reduced.
366
+ # return bstr.trunc(twidth)
367
+ # else
368
+ # return bstr.clone
369
+ # end
370
+ # end
371
+
58
372
  # Coercion when operation from Ruby values.
59
373
  def coerce(other)
60
374
  return other,self.content
61
375
  end
376
+
377
+ # Tell if the value is zero.
378
+ def zero?
379
+ return false unless @content
380
+ if content.is_a?(Numeric) then
381
+ return @content & (2**self.type.width-1) == 0
382
+ else
383
+ return !@content.raw_content[0..self.type.width-1].any?{|b| b!=0}
384
+ end
385
+ end
386
+
387
+ ## Converts the value to a string of the right size.
388
+ def to_vstr
389
+ if self.content.is_a?(Numeric) then
390
+ if self.content >= 0 then
391
+ str = "0" + self.content.to_s(2)
392
+ else
393
+ str = (2**((-self.content).width+1) + self.content).to_s(2)
394
+ end
395
+ else
396
+ str = self.content.to_s
397
+ end
398
+ width = self.type.width
399
+ if str.size >= width then
400
+ return str[-width..-1]
401
+ else
402
+ return str[0] * (width-str.size) + str
403
+ end
404
+ end
405
+
62
406
  end
63
407
 
64
408
  end
@@ -194,7 +194,8 @@ module HDLRuby::Low
194
194
 
195
195
  # Converts the system to Verilog code adding 'spc' spaces at the begining
196
196
  # of each line.
197
- def to_verilog(spc = 3)
197
+ # NOTE: if +vcdmodule+ is not nil add code for generating vcd file when simulating
198
+ def to_verilog(spc = 3, vcdmodule = nil)
198
199
  code = "begin"
199
200
  if self.name && !self.name.empty? then
200
201
  vname = name_to_verilog(self.name)
@@ -229,6 +230,12 @@ module HDLRuby::Low
229
230
  code << ";\n"
230
231
  end
231
232
 
233
+ # Make the generation of vcd file if required.
234
+ if vcdmodule then
235
+ code << "\n#{" " * (spc+3)}$dumpfile(\"verilog_simulator.vcd\");"
236
+ code << "\n#{" " * (spc+3)}$dumpvars(0,#{vcdmodule});\n"
237
+ end
238
+
232
239
  # Translate the block that finished scheduling.
233
240
  block.each_statement do |statement|
234
241
  # puts "#{statement.to_verilog(spc+3)}"
@@ -1864,7 +1871,9 @@ module HDLRuby::Low
1864
1871
 
1865
1872
 
1866
1873
  # Converts the system to Verilog code.
1867
- def to_verilog
1874
+ # NOTE: if +vcd+ is true, generate verilog code whose simulation
1875
+ # produces a vcd file.
1876
+ def to_verilog(vcd = false)
1868
1877
  # Detect the registers
1869
1878
  HDLRuby::Low::VERILOG_REGS.clear
1870
1879
  # The left values.
@@ -2122,8 +2131,12 @@ module HDLRuby::Low
2122
2131
  end
2123
2132
 
2124
2133
  # Translation of behavior part (always).
2134
+ $timebeh_shown = false
2125
2135
  self.each_behavior do |behavior|
2136
+ timebeh = false
2126
2137
  if behavior.block.is_a?(TimeBlock) then
2138
+ # Tell it is a time behavior for further processing.
2139
+ timebeh = true
2127
2140
  # Extract and translate the TimeRepeat separately.
2128
2141
  behavior.each_block_deep do |blk|
2129
2142
  codeC << blk.repeat_to_verilog!
@@ -2157,7 +2170,12 @@ module HDLRuby::Low
2157
2170
  codeC << " ) "
2158
2171
  end
2159
2172
 
2160
- codeC << behavior.block.to_verilog
2173
+ if vcd && timebeh && !$timebeh_shown then
2174
+ codeC << behavior.block.to_verilog(3,name_to_verilog(self.name))
2175
+ $timebeh_shown = true
2176
+ else
2177
+ codeC << behavior.block.to_verilog
2178
+ end
2161
2179
 
2162
2180
  end
2163
2181
 
@@ -1,3 +1,3 @@
1
1
  module HDLRuby
2
- VERSION = "2.10.5"
2
+ VERSION = "2.11.0"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: HDLRuby
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.10.5
4
+ version: 2.11.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Lovic Gauthier
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-07-19 00:00:00.000000000 Z
11
+ date: 2022-09-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -46,7 +46,8 @@ email:
46
46
  - lovic@ariake-nct.ac.jp
47
47
  executables:
48
48
  - hdrcc
49
- extensions: []
49
+ extensions:
50
+ - ext/hruby_sim/extconf.rb
50
51
  extra_rdoc_files:
51
52
  - README.md
52
53
  files:
@@ -62,6 +63,19 @@ files:
62
63
  - bin/console
63
64
  - bin/setup
64
65
  - exe/hdrcc
66
+ - ext/hruby_sim/Makefile_csim
67
+ - ext/hruby_sim/extconf.rb
68
+ - ext/hruby_sim/hruby_rcsim_build.c
69
+ - ext/hruby_sim/hruby_sim.h
70
+ - ext/hruby_sim/hruby_sim_calc.c
71
+ - ext/hruby_sim/hruby_sim_core.c
72
+ - ext/hruby_sim/hruby_sim_list.c
73
+ - ext/hruby_sim/hruby_sim_stack_calc.c
74
+ - ext/hruby_sim/hruby_sim_stack_calc.c.sav
75
+ - ext/hruby_sim/hruby_sim_tree_calc.c
76
+ - ext/hruby_sim/hruby_sim_vcd.c
77
+ - ext/hruby_sim/hruby_sim_vizualize.c
78
+ - ext/hruby_sim/hruby_value_pool.c
65
79
  - lib/HDLRuby.rb
66
80
  - lib/HDLRuby/alcc.rb
67
81
  - lib/HDLRuby/backend/hruby_allocator.rb
@@ -88,6 +102,7 @@ files:
88
102
  - lib/HDLRuby/hdr_samples/comparison_bench.rb
89
103
  - lib/HDLRuby/hdr_samples/constant_in_function.rb
90
104
  - lib/HDLRuby/hdr_samples/counter_bench.rb
105
+ - lib/HDLRuby/hdr_samples/counter_dff_bench.rb
91
106
  - lib/HDLRuby/hdr_samples/dff.rb
92
107
  - lib/HDLRuby/hdr_samples/dff_bench.rb
93
108
  - lib/HDLRuby/hdr_samples/dff_counter.rb
@@ -128,6 +143,7 @@ files:
128
143
  - lib/HDLRuby/hdr_samples/neural/sigmoid.rb
129
144
  - lib/HDLRuby/hdr_samples/neural/z.rb
130
145
  - lib/HDLRuby/hdr_samples/parseq_bench.rb
146
+ - lib/HDLRuby/hdr_samples/print_bench.rb
131
147
  - lib/HDLRuby/hdr_samples/prog.obj
132
148
  - lib/HDLRuby/hdr_samples/ram.rb
133
149
  - lib/HDLRuby/hdr_samples/range_bench.rb
@@ -136,6 +152,7 @@ files:
136
152
  - lib/HDLRuby/hdr_samples/rom_nest.rb
137
153
  - lib/HDLRuby/hdr_samples/ruby_fir_hw.rb
138
154
  - lib/HDLRuby/hdr_samples/seqpar_bench.rb
155
+ - lib/HDLRuby/hdr_samples/simple_counter_bench.rb
139
156
  - lib/HDLRuby/hdr_samples/struct.rb
140
157
  - lib/HDLRuby/hdr_samples/sumprod.rb
141
158
  - lib/HDLRuby/hdr_samples/sw_encrypt_bench.rb
@@ -241,6 +258,7 @@ files:
241
258
  - lib/HDLRuby/hruby_decorator.rb
242
259
  - lib/HDLRuby/hruby_error.rb
243
260
  - lib/HDLRuby/hruby_high.rb
261
+ - lib/HDLRuby/hruby_high_fullname.rb
244
262
  - lib/HDLRuby/hruby_low.rb
245
263
  - lib/HDLRuby/hruby_low2c.rb
246
264
  - lib/HDLRuby/hruby_low2hdr.rb
@@ -265,6 +283,9 @@ files:
265
283
  - lib/HDLRuby/hruby_low_without_outread.rb
266
284
  - lib/HDLRuby/hruby_low_without_parinseq.rb
267
285
  - lib/HDLRuby/hruby_low_without_select.rb
286
+ - lib/HDLRuby/hruby_rcsim.rb
287
+ - lib/HDLRuby/hruby_rsim.rb
288
+ - lib/HDLRuby/hruby_rsim_vcd.rb
268
289
  - lib/HDLRuby/hruby_serializer.rb
269
290
  - lib/HDLRuby/hruby_tools.rb
270
291
  - lib/HDLRuby/hruby_types.rb
@@ -313,16 +334,6 @@ files:
313
334
  - lib/HDLRuby/low_samples/with_seq.yaml
314
335
  - lib/HDLRuby/low_samples/yaml2hdr.rb
315
336
  - lib/HDLRuby/low_samples/yaml2vhd.rb
316
- - lib/HDLRuby/sim/Makefile
317
- - lib/HDLRuby/sim/hruby_sim.h
318
- - lib/HDLRuby/sim/hruby_sim_calc.c
319
- - lib/HDLRuby/sim/hruby_sim_core.c
320
- - lib/HDLRuby/sim/hruby_sim_list.c
321
- - lib/HDLRuby/sim/hruby_sim_stack_calc.c
322
- - lib/HDLRuby/sim/hruby_sim_stack_calc.c.sav
323
- - lib/HDLRuby/sim/hruby_sim_vcd.c
324
- - lib/HDLRuby/sim/hruby_sim_vizualize.c
325
- - lib/HDLRuby/sim/hruby_value_pool.c
326
337
  - lib/HDLRuby/std/channel.rb
327
338
  - lib/HDLRuby/std/clocks.rb
328
339
  - lib/HDLRuby/std/connector.rb