HDLRuby 2.11.11 → 2.11.12

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 (57) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +55 -18
  3. data/ext/hruby_sim/hruby_rcsim_build.c +27 -0
  4. data/ext/hruby_sim/hruby_sim.h +3 -0
  5. data/ext/hruby_sim/hruby_sim_core.c +17 -5
  6. data/ext/hruby_sim/hruby_sim_stack_calc.c +1 -1
  7. data/ext/hruby_sim/hruby_sim_tree_calc.c +8 -1
  8. data/ext/hruby_sim/hruby_sim_vcd.c +24 -7
  9. data/ext/hruby_sim/hruby_sim_vizualize.c +9 -1
  10. data/lib/HDLRuby/hdr_samples/constant_in_function.rb +3 -1
  11. data/lib/HDLRuby/hdr_samples/counter_dff_bench.rb +3 -1
  12. data/lib/HDLRuby/hdr_samples/huge_rom.rb +1 -1
  13. data/lib/HDLRuby/hdr_samples/mei8.rb +11 -11
  14. data/lib/HDLRuby/hdr_samples/mei8_bench.rb +11 -11
  15. data/lib/HDLRuby/hdr_samples/neg_arith_bench.rb +4 -4
  16. data/lib/HDLRuby/hdr_samples/rom_nest.rb +1 -1
  17. data/lib/HDLRuby/hdr_samples/ruby_fir_hw.rb +4 -4
  18. data/lib/HDLRuby/hdr_samples/struct.rb +44 -10
  19. data/lib/HDLRuby/hdr_samples/with_bram.rb +45 -0
  20. data/lib/HDLRuby/hdr_samples/with_casts.rb +3 -3
  21. data/lib/HDLRuby/hdr_samples/with_concat.rb +6 -6
  22. data/lib/HDLRuby/hdr_samples/with_connector_memory.rb +2 -2
  23. data/lib/HDLRuby/hdr_samples/with_def.rb +10 -3
  24. data/lib/HDLRuby/hdr_samples/with_define_operator.rb +44 -0
  25. data/lib/HDLRuby/hdr_samples/with_fixpoint.rb +12 -12
  26. data/lib/HDLRuby/hdr_samples/with_init.rb +3 -3
  27. data/lib/HDLRuby/hdr_samples/with_leftright.rb +21 -0
  28. data/lib/HDLRuby/hdr_samples/with_reduce.rb +13 -13
  29. data/lib/HDLRuby/hdr_samples/with_ref_array.rb +6 -6
  30. data/lib/HDLRuby/hdr_samples/with_subsums.rb +3 -3
  31. data/lib/HDLRuby/hdr_samples/with_terminate.rb +3 -3
  32. data/lib/HDLRuby/hdr_samples/with_to_a.rb +10 -10
  33. data/lib/HDLRuby/hdr_samples/with_values.rb +3 -3
  34. data/lib/HDLRuby/hdrcc.rb +14 -1
  35. data/lib/HDLRuby/hruby_bstr.rb +10 -5
  36. data/lib/HDLRuby/hruby_high.rb +114 -27
  37. data/lib/HDLRuby/hruby_low.rb +187 -16
  38. data/lib/HDLRuby/hruby_low2c.rb +71 -11
  39. data/lib/HDLRuby/hruby_low2vhd.rb +2 -1
  40. data/lib/HDLRuby/hruby_low_fix_types.rb +1 -0
  41. data/lib/HDLRuby/hruby_low_mutable.rb +30 -1
  42. data/lib/HDLRuby/hruby_low_resolve.rb +15 -2
  43. data/lib/HDLRuby/hruby_low_without_concat.rb +28 -8
  44. data/lib/HDLRuby/hruby_low_without_parinseq.rb +14 -4
  45. data/lib/HDLRuby/hruby_low_without_select.rb +2 -2
  46. data/lib/HDLRuby/hruby_low_without_subsignals.rb +279 -0
  47. data/lib/HDLRuby/hruby_rcsim.rb +80 -71
  48. data/lib/HDLRuby/hruby_rsim.rb +132 -7
  49. data/lib/HDLRuby/hruby_rsim_vcd.rb +99 -27
  50. data/lib/HDLRuby/hruby_values.rb +35 -31
  51. data/lib/HDLRuby/std/bram.rb +22 -0
  52. data/lib/HDLRuby/std/fixpoint.rb +2 -2
  53. data/lib/HDLRuby/std/fsm.rb +20 -3
  54. data/lib/HDLRuby/std/function_generator.rb +2 -2
  55. data/lib/HDLRuby/version.rb +1 -1
  56. metadata +7 -3
  57. data/lib/HDLRuby/hdr_samples/sumprod.rb +0 -29
@@ -38,7 +38,8 @@ module HDLRuby::High::Std
38
38
  @name = name.to_sym
39
39
  # Check and set the type of fsm depending of the options.
40
40
  @dual = false
41
- @type = :sync
41
+ @type = :sync # By default, the FSM is synchronous.
42
+ @sequential = true # By default, the default next state is the next one in the list.
42
43
  options.each do |opt|
43
44
  case opt
44
45
  when :sync,:synchronous then
@@ -47,6 +48,8 @@ module HDLRuby::High::Std
47
48
  @type = :async
48
49
  when :dual then
49
50
  @dual = true
51
+ when :static then
52
+ @sequential = false
50
53
  else
51
54
  raise AnyError, "Invalid option for a fsm: :#{type}"
52
55
  end
@@ -112,6 +115,7 @@ module HDLRuby::High::Std
112
115
  mk_rst = @mk_rst
113
116
  type = @type
114
117
  dual = @dual
118
+ sequential = @sequential
115
119
  extra_syncs = @extra_syncs
116
120
  extra_asyncs = @extra_asyncs
117
121
  default_codes = @default_codes
@@ -238,8 +242,10 @@ module HDLRuby::High::Std
238
242
  else
239
243
  # No gotos, by default the next step is
240
244
  # current + 1
241
- # this.next_state_sig <= mux(mk_rst.call , 0, this.cur_state_sig + 1)
242
- this.next_state_sig <= this.cur_state_sig + 1
245
+ # this.next_state_sig <= this.cur_state_sig + 1
246
+ if sequential then
247
+ this.next_state_sig <= this.cur_state_sig + 1
248
+ end
243
249
  end
244
250
  end
245
251
  end
@@ -406,6 +412,17 @@ module HDLRuby::High::Std
406
412
  return result
407
413
  end
408
414
 
415
+ # Get a state by +name+.
416
+ def get_state(name)
417
+ name = name.to_sym
418
+ (@states.detect { |st| st.name == name }).value
419
+ end
420
+
421
+ # Sets the next state by +name+.
422
+ def next_state(name)
423
+ @next_state_sig <= get_state(name)
424
+ end
425
+
409
426
  # Sets the next state. Arguments can be:
410
427
  #
411
428
  # +name+: the name of the next state.
@@ -75,7 +75,7 @@ module HDLRuby::High::Std
75
75
  base <= lut[address]
76
76
 
77
77
  # Assign the next_data discrete value.
78
- next_data <= lut[address+1]
78
+ next_data <= lut[address+_b1.as(address.type)]
79
79
  end
80
80
 
81
81
 
@@ -107,7 +107,7 @@ module HDLRuby::High::Std
107
107
  end
108
108
 
109
109
  # Make the interpolation.
110
- par do
110
+ seq do
111
111
  diff <= (next_data-base).as(diff.type) * remaining
112
112
  if(otyp.signed?) then
113
113
  interpolated_value <= base +
@@ -1,3 +1,3 @@
1
1
  module HDLRuby
2
- VERSION = "2.11.11"
2
+ VERSION = "2.11.12"
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.11.11
4
+ version: 2.11.12
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-12-05 00:00:00.000000000 Z
11
+ date: 2023-01-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -158,13 +158,13 @@ files:
158
158
  - lib/HDLRuby/hdr_samples/seqpar_bench.rb
159
159
  - lib/HDLRuby/hdr_samples/simple_counter_bench.rb
160
160
  - lib/HDLRuby/hdr_samples/struct.rb
161
- - lib/HDLRuby/hdr_samples/sumprod.rb
162
161
  - lib/HDLRuby/hdr_samples/sw_encrypt_bench.rb
163
162
  - lib/HDLRuby/hdr_samples/sw_encrypt_cpu_bench.rb
164
163
  - lib/HDLRuby/hdr_samples/sw_encrypt_cpusim_bench.rb
165
164
  - lib/HDLRuby/hdr_samples/system_open.rb
166
165
  - lib/HDLRuby/hdr_samples/tuple.rb
167
166
  - lib/HDLRuby/hdr_samples/type_minmax_bench.rb
167
+ - lib/HDLRuby/hdr_samples/with_bram.rb
168
168
  - lib/HDLRuby/hdr_samples/with_casts.rb
169
169
  - lib/HDLRuby/hdr_samples/with_channel.rb
170
170
  - lib/HDLRuby/hdr_samples/with_channel_other.rb
@@ -174,6 +174,7 @@ files:
174
174
  - lib/HDLRuby/hdr_samples/with_connector_memory.rb
175
175
  - lib/HDLRuby/hdr_samples/with_decoder.rb
176
176
  - lib/HDLRuby/hdr_samples/with_def.rb
177
+ - lib/HDLRuby/hdr_samples/with_define_operator.rb
177
178
  - lib/HDLRuby/hdr_samples/with_delay.rb
178
179
  - lib/HDLRuby/hdr_samples/with_fixpoint.rb
179
180
  - lib/HDLRuby/hdr_samples/with_fsm.rb
@@ -181,6 +182,7 @@ files:
181
182
  - lib/HDLRuby/hdr_samples/with_handshake.rb
182
183
  - lib/HDLRuby/hdr_samples/with_init.rb
183
184
  - lib/HDLRuby/hdr_samples/with_instance.rb
185
+ - lib/HDLRuby/hdr_samples/with_leftright.rb
184
186
  - lib/HDLRuby/hdr_samples/with_linear.rb
185
187
  - lib/HDLRuby/hdr_samples/with_loop.rb
186
188
  - lib/HDLRuby/hdr_samples/with_memory.rb
@@ -287,6 +289,7 @@ files:
287
289
  - lib/HDLRuby/hruby_low_without_outread.rb
288
290
  - lib/HDLRuby/hruby_low_without_parinseq.rb
289
291
  - lib/HDLRuby/hruby_low_without_select.rb
292
+ - lib/HDLRuby/hruby_low_without_subsignals.rb
290
293
  - lib/HDLRuby/hruby_rcsim.rb
291
294
  - lib/HDLRuby/hruby_rsim.rb
292
295
  - lib/HDLRuby/hruby_rsim_mute.rb
@@ -339,6 +342,7 @@ files:
339
342
  - lib/HDLRuby/low_samples/with_seq.yaml
340
343
  - lib/HDLRuby/low_samples/yaml2hdr.rb
341
344
  - lib/HDLRuby/low_samples/yaml2vhd.rb
345
+ - lib/HDLRuby/std/bram.rb
342
346
  - lib/HDLRuby/std/channel.rb
343
347
  - lib/HDLRuby/std/clocks.rb
344
348
  - lib/HDLRuby/std/connector.rb
@@ -1,29 +0,0 @@
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
-