HDLRuby 2.10.3 → 2.10.5

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 752893bdaf1514f6219401793f34568704d3edd594e2ec5a3177a3a1fce5537f
4
- data.tar.gz: f297f01c03ec7cb286bb81e0234e2a98c23f030b0369f7a95f1160c08b2be791
3
+ metadata.gz: 57f711573af1646f1dc678be203b16a119744cc09f5e1d2a3e7adce5b8363579
4
+ data.tar.gz: b5880098c778a28c820c879a77be3730c945fb2efb8d2771e787c0377184a1a2
5
5
  SHA512:
6
- metadata.gz: 8ae36be3d4a6c9bf8f836602f7e76dde8f20d3a3d1f9a36b9888178911c2affca05b87a8b09681b2ede5b54d31de3c8bb4ad154929353e2401560bd28c59e742
7
- data.tar.gz: 2ec57b968cc45e66665f7d96d4f43f82878305f1fc6dbe5f1e0bb8510f182a48270b54f0e1c3032ee7ecd28274d309c7985b8d9606492985238b1750e59d0e22
6
+ metadata.gz: f19830b5bccdebeb4359d09be4e5222d7b0a39fccaa6a346ead07b1b62e21bf4195dda796d4237cf56aaa8ca41f0a8bb1e2b67b12e945e2647922d8e966861e1
7
+ data.tar.gz: ebc946677fd8c44d00374f62bcc55b7146fa5f84a0f15e32478a7fa2aa4cfc61ab108ea2da07668acad4534bdae6655a042d16237d3275296b07b12e64b59918
@@ -11,7 +11,10 @@ system :dff_bench do
11
11
  inner :d, :clk, :rst
12
12
  inner :q
13
13
 
14
- dff(:my_dff).(d,clk,rst,q)
14
+ # dff(:my_dff).(d,clk,rst,q)
15
+ dff(:my_dff).(d,clk)
16
+ q <= my_dff.q
17
+ my_dff.clk <= clk
15
18
 
16
19
  timed do
17
20
  clk <= 0
@@ -0,0 +1,76 @@
1
+ # A simple D-FF with overridable part.
2
+ system :dff do
3
+ input :d, :clk, :rst
4
+ output :q
5
+
6
+ sub(:process) do
7
+ (q <= d & ~rst).at(clk.posedge)
8
+ end
9
+ end
10
+
11
+ # A new dff overriding process.
12
+ system :dff_neg, dff do
13
+ sub(:process) do
14
+ (q <= d & ~rst).at(clk.negedge)
15
+ end
16
+ end
17
+
18
+ # A benchmark for the dff.
19
+ system :dff_bench do
20
+ inner :d, :clk, :rst
21
+ inner :q
22
+
23
+ dff_neg(:my_dff).(d,clk,rst,q)
24
+ # dff(:my_dff).(d,clk,rst,q)
25
+
26
+ timed do
27
+ clk <= 1
28
+ rst <= 0
29
+ d <= _z
30
+ !10.ns
31
+ clk <= 0
32
+ rst <= 0
33
+ d <= _z
34
+ !10.ns
35
+ clk <= 1
36
+ rst <= 1
37
+ d <= _z
38
+ !10.ns
39
+ clk <= 0
40
+ rst <= 1
41
+ d <= _z
42
+ !10.ns
43
+ clk <= 1
44
+ rst <= 0
45
+ d <= 1
46
+ !10.ns
47
+ clk <= 0
48
+ rst <= 0
49
+ d <= 1
50
+ !10.ns
51
+ clk <= 1
52
+ rst <= 0
53
+ d <= 1
54
+ !10.ns
55
+ clk <= 0
56
+ rst <= 0
57
+ d <= 1
58
+ !10.ns
59
+ clk <= 1
60
+ rst <= 0
61
+ d <= 0
62
+ !10.ns
63
+ clk <= 0
64
+ rst <= 0
65
+ d <= 0
66
+ !10.ns
67
+ clk <= 1
68
+ rst <= 0
69
+ d <= 0
70
+ !10.ns
71
+ clk <= 0
72
+ rst <= 0
73
+ d <= 0
74
+ !10.ns
75
+ end
76
+ end
@@ -37,6 +37,20 @@ system :with_values do
37
37
  v64 <= 128
38
38
  v96 <= 128
39
39
  !10.ns
40
+ v8 <= -1
41
+ v16 <= -1
42
+ v32 <= -1
43
+ v56 <= -1
44
+ v64 <= -1
45
+ v96 <= -1
46
+ !10.ns
47
+ v8 <= -2
48
+ v16 <= -2
49
+ v32 <= -2
50
+ v56 <= -2
51
+ v64 <= -2
52
+ v96 <= -2
53
+ !10.ns
40
54
  v16 <= 0x1000
41
55
  v32 <= 0x1000
42
56
  v56 <= 0x1000
data/lib/HDLRuby/hdrcc.rb CHANGED
@@ -36,6 +36,22 @@ if ARGV.include?("-I") || ARGV.include?("--interactive") then
36
36
  abort
37
37
  end
38
38
 
39
+
40
+ begin
41
+ # We can check the memory.
42
+ require 'get_process_mem'
43
+ $memory_check = GetProcessMem.new
44
+ def show_mem
45
+ " | "+$memory_check.bytes.to_s+"B"
46
+ end
47
+ rescue LoadError
48
+ # We cannot check the memory.
49
+ def show_mem
50
+ ""
51
+ end
52
+ end
53
+
54
+
39
55
  require 'fileutils'
40
56
  require 'tempfile'
41
57
  require 'HDLRuby'
@@ -67,6 +83,7 @@ require 'HDLRuby/backend/hruby_c_allocator'
67
83
 
68
84
  require 'HDLRuby/version.rb'
69
85
 
86
+
70
87
  ##
71
88
  # HDLRuby compiler interface program
72
89
  #####################################
@@ -525,7 +542,7 @@ if $options[:syntax] then
525
542
  $output << $loader.show_all
526
543
  exit
527
544
  end
528
- HDLRuby.show Time.now
545
+ HDLRuby.show "#{Time.now}#{show_mem}"
529
546
  HDLRuby.show "##### Starting parser #####"
530
547
 
531
548
  if $options[:debug] then
@@ -538,11 +555,11 @@ end
538
555
 
539
556
  # Generate the result.
540
557
  # Get the top systemT.
541
- HDLRuby.show Time.now
558
+ HDLRuby.show "#{Time.now}#{show_mem}"
542
559
  $top_system = $top_instance.to_low.systemT
543
560
  $top_intance = nil # Free as much memory as possible.
544
561
  HDLRuby.show "##### Top system built #####"
545
- HDLRuby.show Time.now
562
+ HDLRuby.show "#{Time.now}#{show_mem}"
546
563
 
547
564
 
548
565
  # # Apply the pre drivers if any.
@@ -613,19 +630,19 @@ elsif $options[:clang] then
613
630
  # Coverts the par blocks in seq blocks to seq blocks to match
614
631
  # the simulation engine.
615
632
  systemT.par_in_seq2seq!
616
- HDLRuby.show Time.now
633
+ HDLRuby.show "#{Time.now}#{show_mem}"
617
634
  HDLRuby.show "connections_to_behaviors step..."
618
635
  # Converts the connections to behaviors.
619
636
  systemT.connections_to_behaviors!
620
- HDLRuby.show Time.now
637
+ HDLRuby.show "#{Time.now}#{show_mem}"
621
638
  # Break the RefConcat.
622
639
  HDLRuby.show "concat_assigns step..."
623
640
  systemT.break_concat_assigns!
624
- HDLRuby.show Time.now
641
+ HDLRuby.show "#{Time.now}#{show_mem}"
625
642
  # Explicits the types.
626
643
  HDLRuby.show "explicit_types step..."
627
644
  systemT.explicit_types!
628
- HDLRuby.show Time.now
645
+ HDLRuby.show "#{Time.now}#{show_mem}"
629
646
  end
630
647
  # Generate the C.
631
648
  if $options[:multiple] then
@@ -768,23 +785,23 @@ elsif $options[:verilog] then
768
785
  # HDLRuby.show Time.now
769
786
  HDLRuby.show "to_upper_space! step..."
770
787
  systemT.to_upper_space!
771
- HDLRuby.show Time.now
788
+ HDLRuby.show "#{Time.now}#{show_mem}"
772
789
  end
773
790
  HDLRuby.show "to_global_space! step (global)..."
774
791
  $top_system.to_global_systemTs!
775
- HDLRuby.show Time.now
792
+ HDLRuby.show "#{Time.now}#{show_mem}"
776
793
  $top_system.each_systemT_deep do |systemT|
777
794
  ## systemT.break_types!
778
795
  ## systemT.expand_types!
779
796
  HDLRuby.show "par_in_seq2seq! step..."
780
797
  systemT.par_in_seq2seq!
781
- HDLRuby.show Time.now
798
+ HDLRuby.show "#{Time.now}#{show_mem}"
782
799
  HDLRuby.show "initial_concat_to_timed! step..."
783
800
  systemT.initial_concat_to_timed!
784
- HDLRuby.show Time.now
801
+ HDLRuby.show "#{Time.now}#{show_mem}"
785
802
  HDLRuby.show "with_port! step..."
786
803
  systemT.with_port!
787
- HDLRuby.show Time.now
804
+ HDLRuby.show "#{Time.now}#{show_mem}"
788
805
  end
789
806
  # # Verilog generation
790
807
  # $output << top_system.to_verilog
@@ -875,7 +892,7 @@ elsif $options[:vhdl] then
875
892
  end
876
893
 
877
894
  HDLRuby.show "##### Code generated #####"
878
- HDLRuby.show Time.now
895
+ HDLRuby.show "#{Time.now}#{show_mem}"
879
896
 
880
897
  # # Apply the post drivers if any.
881
898
  # Hdecorator.each_with_property(:post_driver) do |obj, value|
@@ -38,7 +38,7 @@ module HDLRuby::High
38
38
  # puts "eigen_extend for #{self} class=#{self.class}"
39
39
  obj.singleton_methods.each do |name|
40
40
  next if name == :yaml_tag # Do not know why we need to skip
41
- # puts "name=#{name}"
41
+ puts "name=#{name}"
42
42
  self.define_singleton_method(name, &obj.singleton_method(name))
43
43
  end
44
44
  end
@@ -87,10 +87,11 @@ module HDLRuby::High
87
87
  raise AnyError,
88
88
  "Resevered name #{name} cannot be overridden."
89
89
  end
90
- if self.respond_to?(name) then
91
- raise AnyError,
92
- "Symbol #{name} is already defined."
93
- end
90
+ # Deactivated: overriding is now accepted.
91
+ # if self.respond_to?(name) then
92
+ # raise AnyError,
93
+ # "Symbol #{name} is already defined."
94
+ # end
94
95
  define_singleton_method(name,&ruby_block)
95
96
  end
96
97
  end
@@ -669,7 +670,6 @@ module HDLRuby::High
669
670
  # Fill the public namespace
670
671
  space = self.public_namespace
671
672
  # Interface signals
672
- # puts "i_name=#{i_name} @to_includes=#{@to_includes.size}"
673
673
  self.each_signal do |signal|
674
674
  # puts "signal=#{signal.name}"
675
675
  space.send(:define_singleton_method,signal.name) do
@@ -1181,6 +1181,8 @@ module HDLRuby::High
1181
1181
 
1182
1182
  # Declares a sub scope with possible +name+ and built from +ruby_block+.
1183
1183
  def sub(name = :"", &ruby_block)
1184
+ # Ensure there is a block.
1185
+ ruby_block = proc {} unless block_given?
1184
1186
  # Creates the new scope.
1185
1187
  # scope = Scope.new(name,&ruby_block)
1186
1188
  scope = Scope.new(name)
@@ -1197,6 +1199,8 @@ module HDLRuby::High
1197
1199
  # Declares a high-level sequential behavior activated on a list of
1198
1200
  # +events+, and built by executing +ruby_block+.
1199
1201
  def seq(*events, &ruby_block)
1202
+ # Ensure there is a block.
1203
+ ruby_block = proc {} unless block_given?
1200
1204
  # Preprocess the events.
1201
1205
  events.map! do |event|
1202
1206
  event.respond_to?(:to_event) ? event.to_event : event
@@ -1208,6 +1212,8 @@ module HDLRuby::High
1208
1212
  # Declares a high-level parallel behavior activated on a list of
1209
1213
  # +events+, and built by executing +ruby_block+.
1210
1214
  def par(*events, &ruby_block)
1215
+ # Ensure there is a block.
1216
+ ruby_block = proc {} unless block_given?
1211
1217
  # Preprocess the events.
1212
1218
  events.map! do |event|
1213
1219
  event.respond_to?(:to_event) ? event.to_event : event
@@ -1219,6 +1225,8 @@ module HDLRuby::High
1219
1225
  # Declares a high-level timed behavior built by executing +ruby_block+.
1220
1226
  # By default, timed behavior are sequential.
1221
1227
  def timed(&ruby_block)
1228
+ # Ensure there is a block.
1229
+ ruby_block = proc {} unless block_given?
1222
1230
  # Create and add the resulting behavior.
1223
1231
  self.add_behavior(TimeBehavior.new(:seq,&ruby_block))
1224
1232
  end
@@ -1232,6 +1240,8 @@ module HDLRuby::High
1232
1240
  # * the else part is defined through the helse method.
1233
1241
  # * a behavior is created to enclose the hif.
1234
1242
  def hif(condition, mode = nil, &ruby_block)
1243
+ # Ensure there is a block.
1244
+ ruby_block = proc {} unless block_given?
1235
1245
  self.par do
1236
1246
  hif(condition,mode,&ruby_block)
1237
1247
  end
@@ -1244,6 +1254,8 @@ module HDLRuby::High
1244
1254
  #
1245
1255
  # NOTE: added to the hif of the last behavior.
1246
1256
  def helse(mode = nil, &ruby_block)
1257
+ # Ensure there is a block.
1258
+ ruby_block = proc {} unless block_given?
1247
1259
  # There is a ruby_block: the helse is assumed to be with
1248
1260
  # the last statement of the last behavior.
1249
1261
  statement = self.last_behavior.last_statement
@@ -1258,6 +1270,8 @@ module HDLRuby::High
1258
1270
  # with a +condition+ that when met lead
1259
1271
  # to the execution of the block in +mode+ generated by the +ruby_block+.
1260
1272
  def helsif(condition, mode = nil, &ruby_block)
1273
+ # Ensure there is a block.
1274
+ ruby_block = proc {} unless block_given?
1261
1275
  # There is a ruby_block: the helse is assumed to be with
1262
1276
  # the last statement of the last behavior.
1263
1277
  statement = self.last_behavior.last_statement
@@ -1285,6 +1299,8 @@ module HDLRuby::High
1285
1299
  #
1286
1300
  # Can only be used once.
1287
1301
  def hwhen(match, mode = nil, &ruby_block)
1302
+ # Ensure there is a block.
1303
+ ruby_block = proc {} unless block_given?
1288
1304
  # There is a ruby_block: the helse is assumed to be with
1289
1305
  # the last statement of the last behavior.
1290
1306
  statement = @behaviors.last.last_statement
@@ -1607,6 +1623,8 @@ module HDLRuby::High
1607
1623
 
1608
1624
  # Redefinition of +operator+.
1609
1625
  def define_operator(operator,&ruby_block)
1626
+ # Ensure there is a block.
1627
+ ruby_block = proc {} unless block_given?
1610
1628
  # Register the operator as overloaded.
1611
1629
  @overloads ||= {}
1612
1630
  @overloads[operator] = ruby_block
@@ -2003,6 +2021,8 @@ module HDLRuby::High
2003
2021
  # Declares a high-level generic type named +name+, and using +ruby_block+
2004
2022
  # for construction.
2005
2023
  def typedef(name, &ruby_block)
2024
+ # Ensure there is a block.
2025
+ ruby_block = proc {} unless block_given?
2006
2026
  type = TypeGen.new(name,&ruby_block)
2007
2027
  if HDLRuby::High.in_system? then
2008
2028
  # Must be inside a scope.
@@ -2038,6 +2058,8 @@ module HDLRuby::High
2038
2058
  # Declares a high-level system type named +name+, with +includes+ mixins
2039
2059
  # system types and using +ruby_block+ for instantiating.
2040
2060
  def system(name = :"", *includes, &ruby_block)
2061
+ # Ensure there is a block.
2062
+ ruby_block = proc {} unless block_given?
2041
2063
  # print "system ruby_block=#{ruby_block}\n"
2042
2064
  # Creates the resulting system.
2043
2065
  return SystemT.new(name,*includes,&ruby_block)
@@ -2049,6 +2071,8 @@ module HDLRuby::High
2049
2071
  # NOTE: this is for generating directly an instance without declaring
2050
2072
  # it system type.
2051
2073
  def instance(name, *includes, &ruby_block)
2074
+ # Ensure there is a block.
2075
+ ruby_block = proc {} unless block_given?
2052
2076
  # Creates the system type.
2053
2077
  systemT = system(:"",*includes,&ruby_block)
2054
2078
  # Instantiate it with +name+.
@@ -2061,6 +2085,8 @@ module HDLRuby::High
2061
2085
  #
2062
2086
  # NOTE: a function is a short-cut for a method that creates a scope.
2063
2087
  def function(name, &ruby_block)
2088
+ # Ensure there is a block.
2089
+ ruby_block = proc {} unless block_given?
2064
2090
  if HDLRuby::High.in_system? then
2065
2091
  define_singleton_method(name.to_sym) do |*args,&other_block|
2066
2092
  # sub do
@@ -2199,6 +2225,8 @@ module HDLRuby::High
2199
2225
  # NOTE: actually executes +ruby_block+ in the context of the
2200
2226
  # systemT.
2201
2227
  def open(&ruby_block)
2228
+ # Ensure there is a block.
2229
+ ruby_block = proc {} unless block_given?
2202
2230
  # Extend the eigen system.
2203
2231
  @systemT.run(&ruby_block)
2204
2232
  # Update the methods.
@@ -2260,7 +2288,15 @@ module HDLRuby::High
2260
2288
  # system type.
2261
2289
  def method_missing(m, *args, &ruby_block)
2262
2290
  # print "method_missing in class=#{self.class} with m=#{m}\n"
2263
- self.public_namespace.send(m,*args,&ruby_block)
2291
+ # Maybe its a signal reference.
2292
+ signal = self.systemT.get_signal_with_included(m)
2293
+ if signal then
2294
+ # Yes, create the reference.
2295
+ return RefObject.new(self.to_ref,signal)
2296
+ else
2297
+ # No try elsewhere
2298
+ self.public_namespace.send(m,*args,&ruby_block)
2299
+ end
2264
2300
  end
2265
2301
 
2266
2302
 
@@ -2395,6 +2431,8 @@ module HDLRuby::High
2395
2431
  #
2396
2432
  # Can only be used once.
2397
2433
  def helse(mode = nil, &ruby_block)
2434
+ # Ensure there is a block.
2435
+ ruby_block = proc {} unless block_given?
2398
2436
  # If there is a no block, it is an error.
2399
2437
  raise AnyError, "Cannot have two helse for a single if statement." if self.no
2400
2438
  # Create the no block if required
@@ -2409,6 +2447,8 @@ module HDLRuby::High
2409
2447
  #
2410
2448
  # Can only be used if the no-block is not set yet.
2411
2449
  def helsif(next_cond, mode = nil, &ruby_block)
2450
+ # Ensure there is a block.
2451
+ ruby_block = proc {} unless block_given?
2412
2452
  # If there is a no block, it is an error.
2413
2453
  raise AnyError, "Cannot have an helsif after an helse." if self.no
2414
2454
  # Create the noif block if required
@@ -2477,6 +2517,8 @@ module HDLRuby::High
2477
2517
  #
2478
2518
  # Can only be used once for the given +match+.
2479
2519
  def hwhen(match, mode = nil, &ruby_block)
2520
+ # Ensure there is a block.
2521
+ ruby_block = proc {} unless block_given?
2480
2522
  # Create the nu block if required
2481
2523
  when_block = High.make_block(mode,&ruby_block)
2482
2524
  # Adds the case.
@@ -2488,6 +2530,8 @@ module HDLRuby::High
2488
2530
  #
2489
2531
  # Can only be used once.
2490
2532
  def helse(mode = nil, &ruby_block)
2533
+ # Ensure there is a block.
2534
+ ruby_block = proc {} unless block_given?
2491
2535
  # Create the nu block if required
2492
2536
  default_block = High.make_block(mode,&ruby_block)
2493
2537
  # Sets the default block.
@@ -3859,11 +3903,15 @@ module HDLRuby::High
3859
3903
  # Creates a new block with the current mode with possible +name+ and
3860
3904
  # built from +ruby_block+.
3861
3905
  def sub(name = :"", &ruby_block)
3906
+ # Ensure there is a block.
3907
+ ruby_block = proc {} unless block_given?
3862
3908
  self.add_block(self.mode,name,&ruby_block)
3863
3909
  end
3864
3910
 
3865
3911
  # Adds statements at the top of the block.
3866
3912
  def unshift(&ruby_block)
3913
+ # Ensure there is a block.
3914
+ ruby_block = proc {} unless block_given?
3867
3915
  # Create a sub block for the statements.
3868
3916
  block = High.make_block(self.mode,:"",&ruby_block)
3869
3917
  # Unshifts it.
@@ -3908,6 +3956,8 @@ module HDLRuby::High
3908
3956
  #
3909
3957
  # NOTE: the else part is defined through the helse method.
3910
3958
  def hif(condition, mode = nil, &ruby_block)
3959
+ # Ensure there is a block.
3960
+ ruby_block = proc {} unless block_given?
3911
3961
  # Creates the if statement.
3912
3962
  self.add_statement(If.new(condition,mode,&ruby_block))
3913
3963
  end
@@ -3917,6 +3967,8 @@ module HDLRuby::High
3917
3967
  #
3918
3968
  # Can only be used once.
3919
3969
  def helse(mode = nil, &ruby_block)
3970
+ # Ensure there is a block.
3971
+ ruby_block = proc {} unless block_given?
3920
3972
  # There is a ruby_block: the helse is assumed to be with
3921
3973
  # the hif in the same block.
3922
3974
  # Completes the hif or the hcase statement.
@@ -3931,6 +3983,8 @@ module HDLRuby::High
3931
3983
  # with a +condition+ that when met lead
3932
3984
  # to the execution of the block in +mode+ generated by the +ruby_block+.
3933
3985
  def helsif(condition, mode = nil, &ruby_block)
3986
+ # Ensure there is a block.
3987
+ ruby_block = proc {} unless block_given?
3934
3988
  # There is a ruby_block: the helse is assumed to be with
3935
3989
  # the hif in the same block.
3936
3990
  # Completes the hif statement.
@@ -3958,6 +4012,8 @@ module HDLRuby::High
3958
4012
  #
3959
4013
  # Can only be used once.
3960
4014
  def hwhen(match, mode = nil, &ruby_block)
4015
+ # Ensure there is a block.
4016
+ ruby_block = proc {} unless block_given?
3961
4017
  # There is a ruby_block: the helse is assumed to be with
3962
4018
  # the hif in the same block.
3963
4019
  # Completes the hcase statement.
@@ -4073,6 +4129,8 @@ module HDLRuby::High
4073
4129
  # Adds a loop until +delay+ statement in the block in +mode+ whose
4074
4130
  # loop content is built using +ruby_block+.
4075
4131
  def repeat(delay, mode = nil, &ruby_block)
4132
+ # Ensure there is a block.
4133
+ ruby_block = proc {} unless block_given?
4076
4134
  # Build the content block.
4077
4135
  content = High.make_block(mode,&ruby_block)
4078
4136
  # Create and add the statement.
@@ -4731,6 +4789,8 @@ module HDLRuby::High
4731
4789
  # Creates a hcase statement executing +ruby_block+ on the element of
4732
4790
  # the array selected by +value+
4733
4791
  def hcase(value,&ruby_block)
4792
+ # Ensure there is a block.
4793
+ ruby_block = proc {} unless block_given?
4734
4794
  High.cur_block.hcase(value)
4735
4795
  self.each.with_index do |elem,i|
4736
4796
  High.cur_block.hwhen(i) { ruby_block.call(elem) }
@@ -190,14 +190,22 @@ module HDLRuby::Low
190
190
  raise AnyError,
191
191
  "Invalid class for a signal instance: #{signal.class}"
192
192
  end
193
+ # if @inputs.include?(signal) then
194
+ # raise AnyError, "SignalI #{signal.name} already present."
195
+ # end
193
196
  if @inputs.include?(signal) then
194
- raise AnyError, "SignalI #{signal.name} already present."
197
+ signal.parent = self
198
+ # Replace the signal.
199
+ old_signal = @inputs[signal.name]
200
+ @inputs.add(signal)
201
+ @interface[@interface.index(old_signal)] = signal
202
+ else
203
+ # Set the parent of the signal.
204
+ signal.parent = self
205
+ # And add the signal.
206
+ @inputs.add(signal)
207
+ @interface << signal
195
208
  end
196
- # Set the parent of the signal.
197
- signal.parent = self
198
- # And add the signal.
199
- @inputs.add(signal)
200
- @interface << signal
201
209
  return signal
202
210
  end
203
211
 
@@ -208,14 +216,22 @@ module HDLRuby::Low
208
216
  raise AnyError,
209
217
  "Invalid class for a signal instance: #{signal.class}"
210
218
  end
219
+ # if @outputs.include?(signal) then
220
+ # raise AnyError, "SignalI #{signal.name} already present."
221
+ # end
211
222
  if @outputs.include?(signal) then
212
- raise AnyError, "SignalI #{signal.name} already present."
223
+ signal.parent = self
224
+ # Replace the signal.
225
+ old_signal = @outputs[signal.name]
226
+ @outputs.add(signal)
227
+ @interface[@interface.index(old_signal)] = signal
228
+ else
229
+ # Set the parent of the signal.
230
+ signal.parent = self
231
+ # And add the signal.
232
+ @outputs.add(signal)
233
+ @interface << signal
213
234
  end
214
- # Set the parent of the signal.
215
- signal.parent = self
216
- # And add the signal.
217
- @outputs.add(signal)
218
- @interface << signal
219
235
  return signal
220
236
  end
221
237
 
@@ -226,14 +242,22 @@ module HDLRuby::Low
226
242
  raise AnyError,
227
243
  "Invalid class for a signal instance: #{signal.class}"
228
244
  end
245
+ # if @inouts.include?(signal) then
246
+ # raise AnyError, "SignalI #{signal.name} already present."
247
+ # end
229
248
  if @inouts.include?(signal) then
230
- raise AnyError, "SignalI #{signal.name} already present."
249
+ signal.parent = self
250
+ # Replace the signal.
251
+ old_signal = @inouts[signal.name]
252
+ @inouts.add(signal)
253
+ @interface[@interface.index(old_signal)] = signal
254
+ else
255
+ # Set the parent of the signal.
256
+ signal.parent = self
257
+ # And add the signal.
258
+ @inouts.add(signal)
259
+ @interface << signal
231
260
  end
232
- # Set the parent of the signal.
233
- signal.parent = self
234
- # And add the signal.
235
- @inouts.add(signal)
236
- @interface << signal
237
261
  return signal
238
262
  end
239
263
 
@@ -571,9 +595,9 @@ module HDLRuby::Low
571
595
  raise AnyError,
572
596
  "Invalid class for a system type: #{systemT.class}"
573
597
  end
574
- if @systemTs.include?(systemT) then
575
- raise AnyError, "SystemT #{systemT.name} already present."
576
- end
598
+ # if @systemTs.include?(systemT) then
599
+ # raise AnyError, "SystemT #{systemT.name} already present."
600
+ # end
577
601
  # Set the parent of the instance
578
602
  systemT.parent = self
579
603
  # puts "systemT = #{systemT}, parent=#{self}"
@@ -623,9 +647,9 @@ module HDLRuby::Low
623
647
  raise AnyError,
624
648
  "Invalid class for a type: #{type.class}"
625
649
  end
626
- if @types.include?(type) then
627
- raise AnyError, "Type #{type.name} already present."
628
- end
650
+ # if @types.include?(type) then
651
+ # raise AnyError, "Type #{type.name} already present."
652
+ # end
629
653
  # Set the parent of the instance
630
654
  type.parent = self
631
655
  # puts "type = #{type}, parent=#{self}"
@@ -676,12 +700,14 @@ module HDLRuby::Low
676
700
  raise AnyError,
677
701
  "Invalid class for a system instance: #{scope.class}"
678
702
  end
679
- if @scopes.include?(scope) then
680
- raise AnyError, "Scope #{scope} already present."
681
- end
703
+ # if @scopes.include?(scope) then
704
+ # raise AnyError, "Scope #{scope} already present."
705
+ # end
682
706
  # Set the parent of the scope
683
707
  scope.parent = self
684
- # Add the instance
708
+ # Remove a former scope with same name if present (override)
709
+ @scopes.delete_if { |sc| sc.name && sc.name == scope.name }
710
+ # Add the scope
685
711
  @scopes << scope
686
712
  end
687
713
 
@@ -732,9 +758,9 @@ module HDLRuby::Low
732
758
  raise AnyError,
733
759
  "Invalid class for a system instance: #{systemI.class}"
734
760
  end
735
- if @systemIs.include?(systemI) then
736
- raise AnyError, "SystemI #{systemI.name} already present."
737
- end
761
+ # if @systemIs.include?(systemI) then
762
+ # raise AnyError, "SystemI #{systemI.name} already present."
763
+ # end
738
764
  # Set the parent of the instance
739
765
  systemI.parent = self
740
766
  # puts "systemI = #{systemI}, parent=#{self}"
@@ -783,9 +809,9 @@ module HDLRuby::Low
783
809
  raise AnyError,
784
810
  "Invalid class for a non-hDLRuby code chunk: #{code.class}"
785
811
  end
786
- if @codes.include?(code) then
787
- raise AnyError, "Code #{code.name} already present."
788
- end
812
+ # if @codes.include?(code) then
813
+ # raise AnyError, "Code #{code.name} already present."
814
+ # end
789
815
  # Set the parent of the code chunk.
790
816
  code.parent = self
791
817
  # puts "code = #{code}, parent=#{self}"
@@ -824,11 +850,9 @@ module HDLRuby::Low
824
850
  raise AnyError,
825
851
  "Invalid class for a signal instance: #{signal.class}"
826
852
  end
827
- # if @inners.has_key?(signal.name) then
828
- if @inners.include?(signal) then
829
- raise AnyError, "SignalI #{signal.name} already present."
830
- end
831
- # @inners[signal.name] = signal
853
+ # if @inners.include?(signal) then
854
+ # raise AnyError, "SignalI #{signal.name} already present."
855
+ # end
832
856
  # Set the parent of the signal.
833
857
  signal.parent = self
834
858
  # And add the signal.
@@ -2761,10 +2785,9 @@ module HDLRuby::Low
2761
2785
  raise AnyError,
2762
2786
  "Invalid class for a code chunk: #{chunk.class}"
2763
2787
  end
2764
- # if @chunks.has_key?(chunk.name) then
2765
- if @chunks.include?(chunk) then
2766
- raise AnyError, "Code chunk #{chunk.name} already present."
2767
- end
2788
+ # if @chunks.include?(chunk) then
2789
+ # raise AnyError, "Code chunk #{chunk.name} already present."
2790
+ # end
2768
2791
  # Set its parent.
2769
2792
  chunk.parent = self
2770
2793
  # And add it
@@ -4269,11 +4292,9 @@ module HDLRuby::Low
4269
4292
  raise AnyError,
4270
4293
  "Invalid class for a signal instance: #{signal.class}"
4271
4294
  end
4272
- # if @inners.has_key?(signal.name) then
4273
- if @inners.include?(signal) then
4274
- raise AnyError, "SignalI #{signal.name} already present."
4275
- end
4276
- # @inners[signal.name] = signal
4295
+ # if @inners.include?(signal) then
4296
+ # raise AnyError, "SignalI #{signal.name} already present."
4297
+ # end
4277
4298
  # Set its parent.
4278
4299
  signal.parent = self
4279
4300
  # And add it
@@ -222,7 +222,7 @@ module HDLRuby::Low
222
222
  end
223
223
 
224
224
  # Deletes all the connections.
225
- def delete_all_conncetions!
225
+ def delete_all_connections!
226
226
  @connections.each { |cnx| cnx.parent = nil }
227
227
  @connections = []
228
228
  end
@@ -147,7 +147,8 @@ module HDLRuby::Low
147
147
  cnxs = self.each_connection.to_a
148
148
  # Remove them from the scope.
149
149
  # cnxs.each { |cnx| self.delete_connection!(cnx) }
150
- cnxs.delete_all_connections!
150
+ # cnxs.delete_all_connections!
151
+ self.delete_all_connections!
151
152
  # Return the connections.
152
153
  return cnxs
153
154
  end
@@ -47,7 +47,7 @@ module HDLRuby::High::Std
47
47
  end
48
48
 
49
49
 
50
- ## Module describing a pipeline with handshakes.
50
+ ## Module describing a pipe with handshakes.
51
51
  # @param event the event to synchronize the handshakes.
52
52
  # @param read the signal telling there is a request from the client side
53
53
  # @param write the signal used for asking the server to issue a request
@@ -1,3 +1,3 @@
1
1
  module HDLRuby
2
- VERSION = "2.10.3"
2
+ VERSION = "2.10.5"
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.3
4
+ version: 2.10.5
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-06-12 00:00:00.000000000 Z
11
+ date: 2022-07-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -91,6 +91,7 @@ files:
91
91
  - lib/HDLRuby/hdr_samples/dff.rb
92
92
  - lib/HDLRuby/hdr_samples/dff_bench.rb
93
93
  - lib/HDLRuby/hdr_samples/dff_counter.rb
94
+ - lib/HDLRuby/hdr_samples/dff_override.rb
94
95
  - lib/HDLRuby/hdr_samples/dff_properties.rb
95
96
  - lib/HDLRuby/hdr_samples/dff_unit.rb
96
97
  - lib/HDLRuby/hdr_samples/huge_rom.rb