HDLRuby 2.11.11 → 3.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.html +3274 -0
- data/README.md +608 -99
- data/ext/hruby_sim/hruby_rcsim_build.c +27 -0
- data/ext/hruby_sim/hruby_sim.h +3 -0
- data/ext/hruby_sim/hruby_sim_calc.c +2 -0
- data/ext/hruby_sim/hruby_sim_core.c +17 -5
- data/ext/hruby_sim/hruby_sim_stack_calc.c +1 -1
- data/ext/hruby_sim/hruby_sim_tree_calc.c +8 -1
- data/ext/hruby_sim/hruby_sim_vcd.c +24 -7
- data/ext/hruby_sim/hruby_sim_vizualize.c +9 -1
- data/lib/HDLRuby/backend/hruby_allocator.rb +2 -2
- data/lib/HDLRuby/backend/hruby_c_allocator.rb +7 -7
- data/lib/HDLRuby/hdr_samples/constant_in_function.rb +3 -1
- data/lib/HDLRuby/hdr_samples/counter_dff_bench.rb +3 -1
- data/lib/HDLRuby/hdr_samples/huge_rom.rb +1 -1
- data/lib/HDLRuby/hdr_samples/mei8.rb +11 -11
- data/lib/HDLRuby/hdr_samples/mei8_bench.rb +12 -12
- data/lib/HDLRuby/hdr_samples/neg_arith_bench.rb +4 -4
- data/lib/HDLRuby/hdr_samples/rom_nest.rb +1 -1
- data/lib/HDLRuby/hdr_samples/ruby_fir_hw.rb +4 -4
- data/lib/HDLRuby/hdr_samples/struct.rb +44 -10
- data/lib/HDLRuby/hdr_samples/with_bram.rb +45 -0
- data/lib/HDLRuby/hdr_samples/with_bram_frame_stack.rb +105 -0
- data/lib/HDLRuby/hdr_samples/with_bram_stack.rb +69 -0
- data/lib/HDLRuby/hdr_samples/with_casts.rb +3 -3
- data/lib/HDLRuby/hdr_samples/with_concat.rb +6 -6
- data/lib/HDLRuby/hdr_samples/with_connector_memory.rb +2 -2
- data/lib/HDLRuby/hdr_samples/with_def.rb +10 -3
- data/lib/HDLRuby/hdr_samples/with_define_operator.rb +44 -0
- data/lib/HDLRuby/hdr_samples/with_fixpoint.rb +12 -12
- data/lib/HDLRuby/hdr_samples/with_init.rb +3 -3
- data/lib/HDLRuby/hdr_samples/with_leftright.rb +21 -0
- data/lib/HDLRuby/hdr_samples/with_reduce.rb +13 -13
- data/lib/HDLRuby/hdr_samples/with_ref_array.rb +6 -6
- data/lib/HDLRuby/hdr_samples/with_register_stack.rb +150 -0
- data/lib/HDLRuby/hdr_samples/with_sequencer.rb +190 -0
- data/lib/HDLRuby/hdr_samples/with_sequencer_deep.rb +91 -0
- data/lib/HDLRuby/hdr_samples/with_sequencer_enumerable.rb +405 -0
- data/lib/HDLRuby/hdr_samples/with_sequencer_enumerator.rb +89 -0
- data/lib/HDLRuby/hdr_samples/with_sequencer_sync.rb +120 -0
- data/lib/HDLRuby/hdr_samples/with_subsums.rb +3 -3
- data/lib/HDLRuby/hdr_samples/with_terminate.rb +3 -3
- data/lib/HDLRuby/hdr_samples/with_to_a.rb +10 -10
- data/lib/HDLRuby/hdr_samples/with_values.rb +3 -3
- data/lib/HDLRuby/hdrcc.rb +29 -3
- data/lib/HDLRuby/hdrlib.rb +1 -1
- data/lib/HDLRuby/hruby_bstr.rb +10 -5
- data/lib/HDLRuby/hruby_db.rb +2 -2
- data/lib/HDLRuby/hruby_high.rb +152 -47
- data/lib/HDLRuby/hruby_high_fullname.rb +3 -1
- data/lib/HDLRuby/hruby_low.rb +189 -18
- data/lib/HDLRuby/hruby_low2c.rb +129 -54
- data/lib/HDLRuby/hruby_low2hdr.rb +66 -40
- data/lib/HDLRuby/hruby_low2high.rb +86 -44
- data/lib/HDLRuby/hruby_low2seq.rb +26 -18
- data/lib/HDLRuby/hruby_low2sym.rb +14 -13
- data/lib/HDLRuby/hruby_low2vhd.rb +80 -44
- data/lib/HDLRuby/hruby_low_bool2select.rb +61 -46
- data/lib/HDLRuby/hruby_low_casts_without_expression.rb +56 -44
- data/lib/HDLRuby/hruby_low_cleanup.rb +18 -16
- data/lib/HDLRuby/hruby_low_fix_types.rb +65 -32
- data/lib/HDLRuby/hruby_low_mutable.rb +83 -119
- data/lib/HDLRuby/hruby_low_resolve.rb +38 -30
- data/lib/HDLRuby/hruby_low_with_bool.rb +33 -16
- data/lib/HDLRuby/hruby_low_with_port.rb +3 -3
- data/lib/HDLRuby/hruby_low_with_var.rb +23 -9
- data/lib/HDLRuby/hruby_low_without_concat.rb +45 -19
- data/lib/HDLRuby/hruby_low_without_namespace.rb +47 -32
- data/lib/HDLRuby/hruby_low_without_parinseq.rb +32 -16
- data/lib/HDLRuby/hruby_low_without_select.rb +37 -24
- data/lib/HDLRuby/hruby_low_without_subsignals.rb +280 -0
- data/lib/HDLRuby/hruby_rcsim.rb +158 -134
- data/lib/HDLRuby/hruby_rsim.rb +194 -20
- data/lib/HDLRuby/hruby_rsim_mute.rb +2 -3
- data/lib/HDLRuby/hruby_rsim_vcd.rb +125 -50
- data/lib/HDLRuby/hruby_values.rb +48 -33
- data/lib/HDLRuby/hruby_verilog.rb +90 -48
- data/lib/HDLRuby/soft/stacks.rb +219 -0
- data/lib/HDLRuby/std/bram.rb +26 -0
- data/lib/HDLRuby/std/clocks.rb +1 -1
- data/lib/HDLRuby/std/fixpoint.rb +2 -2
- data/lib/HDLRuby/std/fsm.rb +48 -11
- data/lib/HDLRuby/std/function_generator.rb +2 -2
- data/lib/HDLRuby/std/sequencer.rb +1857 -0
- data/lib/HDLRuby/std/sequencer_sync.rb +400 -0
- data/lib/HDLRuby/std/std.rb +12 -0
- data/lib/HDLRuby/version.rb +1 -1
- data/tuto/adder_sat_flags_vcd.png +0 -0
- data/tuto/addsub_vcd.png +0 -0
- data/tuto/alu_vcd.png +0 -0
- data/tuto/bit_pong_vcd.png +0 -0
- data/tuto/checksum_vcd.png +0 -0
- data/tuto/circuit_hdr.odg +0 -0
- data/tuto/circuit_hdr.png +0 -0
- data/tuto/circuit_hie.odg +0 -0
- data/tuto/circuit_hie.png +0 -0
- data/tuto/circuit_view.odg +0 -0
- data/tuto/circuit_view.png +0 -0
- data/tuto/clock_counter_vcd.png +0 -0
- data/tuto/counter_ext_vcd.png +0 -0
- data/tuto/fact_vcd.png +0 -0
- data/tuto/hw_flow.odg +0 -0
- data/tuto/hw_flow.png +0 -0
- data/tuto/maxxer_vcd.png +0 -0
- data/tuto/pingpong0_vcd.png +0 -0
- data/tuto/pingpong1_vcd.png +0 -0
- data/tuto/pingpong2_vcd.png +0 -0
- data/tuto/ram_vcd.png +0 -0
- data/tuto/serializer_vcd.png +0 -0
- data/tuto/sw_flow.odg +0 -0
- data/tuto/sw_flow.png +0 -0
- data/tuto/the_counter_vcd.png +0 -0
- data/tuto/tutorial_sw.html +2359 -0
- data/tuto/tutorial_sw.md +2684 -0
- data/tuto/tutorial_sw.pdf +0 -0
- data/tuto/tutorial_sw_jp.md +417 -0
- metadata +49 -3
- data/lib/HDLRuby/hdr_samples/sumprod.rb +0 -29
@@ -1,6 +1,7 @@
|
|
1
1
|
require "HDLRuby/hruby_error"
|
2
2
|
|
3
3
|
|
4
|
+
module HDLRuby::Low
|
4
5
|
|
5
6
|
##
|
6
7
|
# Make HDLRuby::Low objects mutable trough "!" methods.
|
@@ -10,13 +11,10 @@ require "HDLRuby/hruby_error"
|
|
10
11
|
# * this is a work in progress.
|
11
12
|
#
|
12
13
|
########################################################################
|
13
|
-
|
14
|
-
|
15
|
-
##
|
16
|
-
# Describes a system type.
|
17
|
-
#
|
18
|
-
# NOTE: delegates its content-related methods to its Scope object.
|
14
|
+
|
15
|
+
|
19
16
|
class SystemT
|
17
|
+
## Makes SystemT mutable.
|
20
18
|
|
21
19
|
# Sets the +name+.
|
22
20
|
def set_name!(name)
|
@@ -97,9 +95,8 @@ module HDLRuby::Low
|
|
97
95
|
end
|
98
96
|
|
99
97
|
|
100
|
-
##
|
101
|
-
# Describes scopes of system types.
|
102
98
|
class Scope
|
99
|
+
## Makes Scope mutable.
|
103
100
|
|
104
101
|
# Maps on the local types.
|
105
102
|
def map_types!(&ruby_block)
|
@@ -272,9 +269,8 @@ module HDLRuby::Low
|
|
272
269
|
end
|
273
270
|
|
274
271
|
|
275
|
-
##
|
276
|
-
# Describes a data type.
|
277
272
|
class Type
|
273
|
+
## Makes Type mutable.
|
278
274
|
|
279
275
|
# Sets the +name+.
|
280
276
|
def set_name!(name)
|
@@ -283,12 +279,8 @@ module HDLRuby::Low
|
|
283
279
|
end
|
284
280
|
|
285
281
|
|
286
|
-
##
|
287
|
-
# Describes a high-level type definition.
|
288
|
-
#
|
289
|
-
# NOTE: type definition are actually type with a name refering to another
|
290
|
-
# type (and equivalent to it).
|
291
282
|
class TypeDef
|
283
|
+
## Makes TypeDef mutable.
|
292
284
|
|
293
285
|
# Sets the type definition to +type+.
|
294
286
|
def set_def!(type)
|
@@ -302,10 +294,8 @@ module HDLRuby::Low
|
|
302
294
|
end
|
303
295
|
|
304
296
|
|
305
|
-
|
306
|
-
##
|
307
|
-
# Describes a vector type.
|
308
297
|
class TypeVector
|
298
|
+
## Makes TypeVector mutable.
|
309
299
|
|
310
300
|
# Sets the +base+ type.
|
311
301
|
def set_base!(type)
|
@@ -333,9 +323,8 @@ module HDLRuby::Low
|
|
333
323
|
end
|
334
324
|
|
335
325
|
|
336
|
-
##
|
337
|
-
# Describes a tuple type.
|
338
326
|
class TypeTuple
|
327
|
+
## Makes TypeTuple mutable.
|
339
328
|
|
340
329
|
# Maps on the sub types.
|
341
330
|
def map_types!(&ruby_block)
|
@@ -355,9 +344,8 @@ module HDLRuby::Low
|
|
355
344
|
end
|
356
345
|
|
357
346
|
|
358
|
-
##
|
359
|
-
# Describes a structure type.
|
360
347
|
class TypeStruct
|
348
|
+
## Makes TypeStruct mutable.
|
361
349
|
|
362
350
|
# Maps on the sub types.
|
363
351
|
def map_types!(&ruby_block)
|
@@ -377,10 +365,8 @@ module HDLRuby::Low
|
|
377
365
|
end
|
378
366
|
|
379
367
|
|
380
|
-
|
381
|
-
##
|
382
|
-
# Describes a behavior.
|
383
368
|
class Behavior
|
369
|
+
## Makes Behavior mutable.
|
384
370
|
|
385
371
|
# Sets the block.
|
386
372
|
def set_block!(block)
|
@@ -409,13 +395,8 @@ module HDLRuby::Low
|
|
409
395
|
end
|
410
396
|
|
411
397
|
|
412
|
-
##
|
413
|
-
# Describes a timed behavior.
|
414
|
-
#
|
415
|
-
# NOTE:
|
416
|
-
# * this is the only kind of behavior that can include time statements.
|
417
|
-
# * this kind of behavior is not synthesizable!
|
418
398
|
class TimeBehavior
|
399
|
+
## Makes TimeBehavior mutable.
|
419
400
|
|
420
401
|
# Sets the block.
|
421
402
|
def set_block!(block)
|
@@ -430,9 +411,9 @@ module HDLRuby::Low
|
|
430
411
|
end
|
431
412
|
|
432
413
|
|
433
|
-
##
|
434
|
-
# Describes an event.
|
435
414
|
class Event
|
415
|
+
## Makes Event mutable.
|
416
|
+
|
436
417
|
# Sets the type.
|
437
418
|
def set_type!(type)
|
438
419
|
# Check and set the type.
|
@@ -482,9 +463,8 @@ module HDLRuby::Low
|
|
482
463
|
end
|
483
464
|
|
484
465
|
|
485
|
-
##
|
486
|
-
# Describes a signal.
|
487
466
|
class SignalI
|
467
|
+
## Makes SignalI mutable.
|
488
468
|
|
489
469
|
# Sets the name.
|
490
470
|
def set_name!(name)
|
@@ -515,9 +495,8 @@ module HDLRuby::Low
|
|
515
495
|
end
|
516
496
|
|
517
497
|
|
518
|
-
##
|
519
|
-
# Describes a system instance.
|
520
498
|
class SystemI
|
499
|
+
## Makes SystemI mutable.
|
521
500
|
|
522
501
|
# Sets the name.
|
523
502
|
def set_name!(name)
|
@@ -537,12 +516,9 @@ module HDLRuby::Low
|
|
537
516
|
end
|
538
517
|
|
539
518
|
|
540
|
-
|
541
|
-
##
|
542
|
-
# Describes a statement.
|
543
|
-
#
|
544
|
-
# NOTE: this is an abstract class which is not to be used directly.
|
545
519
|
class Statement
|
520
|
+
## Makes Statement mutable.
|
521
|
+
|
546
522
|
# Replaces sub expressions using +node2rep+ table indicating the
|
547
523
|
# node to replace and the corresponding replacement.
|
548
524
|
# Returns the actually replaced nodes and their corresponding
|
@@ -564,11 +540,9 @@ module HDLRuby::Low
|
|
564
540
|
end
|
565
541
|
|
566
542
|
|
567
|
-
|
568
|
-
|
569
|
-
##
|
570
|
-
# Decribes a transmission statement.
|
571
543
|
class Transmit
|
544
|
+
## Makes Transmit mutable.
|
545
|
+
|
572
546
|
# Sets the left.
|
573
547
|
def set_left!(left)
|
574
548
|
# Check and set the left reference.
|
@@ -600,6 +574,9 @@ module HDLRuby::Low
|
|
600
574
|
right.parent = self unless right.parent
|
601
575
|
end
|
602
576
|
|
577
|
+
alias_method :map_expressions!, :map_nodes!
|
578
|
+
|
579
|
+
|
603
580
|
# Replaces sub expressions using +node2rep+ table indicating the
|
604
581
|
# node to replace and the corresponding replacement.
|
605
582
|
# Returns the actually replaced nodes and their corresponding
|
@@ -638,9 +615,8 @@ module HDLRuby::Low
|
|
638
615
|
end
|
639
616
|
|
640
617
|
|
641
|
-
##
|
642
|
-
# Decribes a print statement.
|
643
618
|
class Print
|
619
|
+
## Makes Print mutable.
|
644
620
|
|
645
621
|
# Maps on the arguments.
|
646
622
|
def map_args!(&ruby_block)
|
@@ -696,9 +672,8 @@ module HDLRuby::Low
|
|
696
672
|
end
|
697
673
|
|
698
674
|
|
699
|
-
##
|
700
|
-
# Describes an if statement.
|
701
675
|
class If
|
676
|
+
## Makes If mutable.
|
702
677
|
|
703
678
|
# Sets the condition.
|
704
679
|
def set_condition!(condition)
|
@@ -816,9 +791,10 @@ module HDLRuby::Low
|
|
816
791
|
end
|
817
792
|
end
|
818
793
|
|
819
|
-
|
820
|
-
# Describes a when for a case statement.
|
794
|
+
|
821
795
|
class When
|
796
|
+
## Makes When mutable.
|
797
|
+
|
822
798
|
# Sets the match.
|
823
799
|
def set_match!(match)
|
824
800
|
# Checks the match.
|
@@ -890,9 +866,8 @@ module HDLRuby::Low
|
|
890
866
|
end
|
891
867
|
|
892
868
|
|
893
|
-
##
|
894
|
-
# Describes a case statement.
|
895
869
|
class Case
|
870
|
+
## Makes Case mutable.
|
896
871
|
|
897
872
|
# Sets the value.
|
898
873
|
def set_value!(value)
|
@@ -908,6 +883,10 @@ module HDLRuby::Low
|
|
908
883
|
# Sets the default.
|
909
884
|
def set_default!(default)
|
910
885
|
# Checks and set the default case if any.
|
886
|
+
if self.default then
|
887
|
+
# There is a default first detach it.
|
888
|
+
@default = nil
|
889
|
+
end
|
911
890
|
self.default = default
|
912
891
|
end
|
913
892
|
|
@@ -977,9 +956,8 @@ module HDLRuby::Low
|
|
977
956
|
end
|
978
957
|
|
979
958
|
|
980
|
-
##
|
981
|
-
# Describes a delay: not synthesizable.
|
982
959
|
class Delay
|
960
|
+
## Makes Delay mutable.
|
983
961
|
|
984
962
|
# Sets the value.
|
985
963
|
def set_value!(value)
|
@@ -1023,9 +1001,8 @@ module HDLRuby::Low
|
|
1023
1001
|
end
|
1024
1002
|
|
1025
1003
|
|
1026
|
-
##
|
1027
|
-
# Describes a wait statement: not synthesizable!
|
1028
1004
|
class TimeWait
|
1005
|
+
## Makes TimeWait mutable.
|
1029
1006
|
|
1030
1007
|
# Sets the delay.
|
1031
1008
|
def set_delay!(delay)
|
@@ -1045,9 +1022,8 @@ module HDLRuby::Low
|
|
1045
1022
|
end
|
1046
1023
|
|
1047
1024
|
|
1048
|
-
##
|
1049
|
-
# Describes a timed loop statement: not synthesizable!
|
1050
1025
|
class TimeRepeat
|
1026
|
+
## Makes TimeRepeat mutable.
|
1051
1027
|
|
1052
1028
|
# Sets the statement.
|
1053
1029
|
def set_statement!(statement)
|
@@ -1095,9 +1071,8 @@ module HDLRuby::Low
|
|
1095
1071
|
end
|
1096
1072
|
|
1097
1073
|
|
1098
|
-
##
|
1099
|
-
# Describes a block.
|
1100
1074
|
class Block
|
1075
|
+
## Makes Block mutable.
|
1101
1076
|
|
1102
1077
|
# Sets the mode.
|
1103
1078
|
def set_mode!(mode)
|
@@ -1172,7 +1147,11 @@ module HDLRuby::Low
|
|
1172
1147
|
raise AnyError, "Invalid type for a statement: #{stmnt.class}"
|
1173
1148
|
end
|
1174
1149
|
idx = @statements.index(org)
|
1175
|
-
@statements[idx] = stmnt if idx
|
1150
|
+
# @statements[idx] = stmnt if idx
|
1151
|
+
if idx then
|
1152
|
+
@statements[idx] = stmnt
|
1153
|
+
stmnt.parent = self unless stmnt.parent
|
1154
|
+
end
|
1176
1155
|
end
|
1177
1156
|
|
1178
1157
|
# Maps on the statements.
|
@@ -1263,18 +1242,14 @@ module HDLRuby::Low
|
|
1263
1242
|
end
|
1264
1243
|
|
1265
1244
|
|
1266
|
-
# Describes a timed block.
|
1267
|
-
#
|
1268
|
-
# NOTE:
|
1269
|
-
# * this is the only kind of block that can include time statements.
|
1270
|
-
# * this kind of block is not synthesizable!
|
1271
1245
|
class TimeBlock
|
1246
|
+
## Makes TimeBlock mutable.
|
1272
1247
|
end
|
1273
1248
|
|
1274
1249
|
|
1275
|
-
##
|
1276
|
-
# Decribes a piece of software code.
|
1277
1250
|
class Code
|
1251
|
+
## Makes Code mutable.
|
1252
|
+
|
1278
1253
|
# Sets the type.
|
1279
1254
|
def set_type!(type)
|
1280
1255
|
# Check and set type.
|
@@ -1290,13 +1265,8 @@ module HDLRuby::Low
|
|
1290
1265
|
end
|
1291
1266
|
|
1292
1267
|
|
1293
|
-
##
|
1294
|
-
# Describes a connection.
|
1295
|
-
#
|
1296
|
-
# NOTE: eventhough a connection is semantically different from a
|
1297
|
-
# transmission, it has a common structure. Therefore, it is described
|
1298
|
-
# as a subclass of a transmit.
|
1299
1268
|
class Connection
|
1269
|
+
## Makes Connection mutable.
|
1300
1270
|
|
1301
1271
|
# Replace node by corresponding replacement from +node2reassign+ that
|
1302
1272
|
# is a table whose entries are:
|
@@ -1334,12 +1304,8 @@ module HDLRuby::Low
|
|
1334
1304
|
end
|
1335
1305
|
|
1336
1306
|
|
1337
|
-
|
1338
|
-
##
|
1339
|
-
# Describes an expression.
|
1340
|
-
#
|
1341
|
-
# NOTE: this is an abstract class which is not to be used directly.
|
1342
1307
|
class Expression
|
1308
|
+
## Makes Expression mutable.
|
1343
1309
|
|
1344
1310
|
# Sets the type.
|
1345
1311
|
def set_type!(type)
|
@@ -1371,9 +1337,8 @@ module HDLRuby::Low
|
|
1371
1337
|
end
|
1372
1338
|
|
1373
1339
|
|
1374
|
-
##
|
1375
|
-
# Describes a value.
|
1376
1340
|
class Value
|
1341
|
+
## Makes Value mutable.
|
1377
1342
|
|
1378
1343
|
# Sets the content.
|
1379
1344
|
def set_content!(content)
|
@@ -1403,6 +1368,8 @@ module HDLRuby::Low
|
|
1403
1368
|
@child.parent = self unless @child.parent
|
1404
1369
|
end
|
1405
1370
|
|
1371
|
+
alias_method :map_expressions!, :map_nodes!
|
1372
|
+
|
1406
1373
|
# Replaces sub expressions using +node2rep+ table indicating the
|
1407
1374
|
# node to replace and the corresponding replacement.
|
1408
1375
|
# Returns the actually replaced nodes and their corresponding
|
@@ -1427,18 +1394,15 @@ module HDLRuby::Low
|
|
1427
1394
|
end
|
1428
1395
|
end
|
1429
1396
|
|
1430
|
-
|
1431
|
-
# Describes a cast.
|
1397
|
+
|
1432
1398
|
class Cast
|
1399
|
+
## Makes Cast mutable.
|
1433
1400
|
include OneChildMutable
|
1434
1401
|
end
|
1435
1402
|
|
1436
1403
|
|
1437
|
-
##
|
1438
|
-
# Describes an operation.
|
1439
|
-
#
|
1440
|
-
# NOTE: this is an abstract class which is not to be used directly.
|
1441
1404
|
class Operation
|
1405
|
+
## Makes Operation mutable.
|
1442
1406
|
|
1443
1407
|
# Sets the operator.
|
1444
1408
|
def set_operator!(operator)
|
@@ -1448,9 +1412,8 @@ module HDLRuby::Low
|
|
1448
1412
|
end
|
1449
1413
|
|
1450
1414
|
|
1451
|
-
##
|
1452
|
-
# Describes an unary operation.
|
1453
1415
|
class Unary
|
1416
|
+
## Makes Unary mutable.
|
1454
1417
|
include OneChildMutable
|
1455
1418
|
|
1456
1419
|
# Moved to OneChildMutable
|
@@ -1473,9 +1436,8 @@ module HDLRuby::Low
|
|
1473
1436
|
end
|
1474
1437
|
|
1475
1438
|
|
1476
|
-
##
|
1477
|
-
# Describes an binary operation.
|
1478
1439
|
class Binary
|
1440
|
+
## Makes Binary mutable.
|
1479
1441
|
|
1480
1442
|
# Sets the left.
|
1481
1443
|
def set_left!(left)
|
@@ -1507,6 +1469,8 @@ module HDLRuby::Low
|
|
1507
1469
|
@right.parent = self unless @right.parent
|
1508
1470
|
end
|
1509
1471
|
|
1472
|
+
alias_method :map_expressions!, :map_nodes!
|
1473
|
+
|
1510
1474
|
# Replaces sub expressions using +node2rep+ table indicating the
|
1511
1475
|
# node to replace and the corresponding replacement.
|
1512
1476
|
# Returns the actually replaced nodes and their corresponding
|
@@ -1545,11 +1509,8 @@ module HDLRuby::Low
|
|
1545
1509
|
end
|
1546
1510
|
|
1547
1511
|
|
1548
|
-
##
|
1549
|
-
# Describes a section operation (generalization of the ternary operator).
|
1550
|
-
#
|
1551
|
-
# NOTE: choice is using the value of +select+ as an index.
|
1552
1512
|
class Select
|
1513
|
+
## Makes Select mutable.
|
1553
1514
|
|
1554
1515
|
# Sets the select.
|
1555
1516
|
def set_select!(select)
|
@@ -1590,6 +1551,8 @@ module HDLRuby::Low
|
|
1590
1551
|
map_choices!(&ruby_block)
|
1591
1552
|
end
|
1592
1553
|
|
1554
|
+
alias_method :map_expressions!, :map_nodes!
|
1555
|
+
|
1593
1556
|
# Replaces sub expressions using +node2rep+ table indicating the
|
1594
1557
|
# node to replace and the corresponding replacement.
|
1595
1558
|
# Returns the actually replaced nodes and their corresponding
|
@@ -1668,9 +1631,8 @@ module HDLRuby::Low
|
|
1668
1631
|
end
|
1669
1632
|
|
1670
1633
|
|
1671
|
-
##
|
1672
|
-
# Describes a concatenation expression.
|
1673
1634
|
class Concat
|
1635
|
+
## Makes Concat mutable.
|
1674
1636
|
include MutableConcat
|
1675
1637
|
|
1676
1638
|
# Maps on the expression.
|
@@ -1698,21 +1660,20 @@ module HDLRuby::Low
|
|
1698
1660
|
end
|
1699
1661
|
|
1700
1662
|
|
1701
|
-
##
|
1702
|
-
# Describes a reference expression.
|
1703
|
-
#
|
1704
|
-
# NOTE: this is an abstract class which is not to be used directly.
|
1705
1663
|
class Ref
|
1664
|
+
## Makes Ref mutable.
|
1665
|
+
|
1706
1666
|
# Maps on the children.
|
1707
1667
|
def map_nodes!(&ruby_block)
|
1708
1668
|
# Nothing to do.
|
1709
1669
|
end
|
1670
|
+
|
1671
|
+
alias_method :map_expressions!, :map_nodes!
|
1710
1672
|
end
|
1711
1673
|
|
1712
1674
|
|
1713
|
-
##
|
1714
|
-
# Describes concatenation reference.
|
1715
1675
|
class RefConcat
|
1676
|
+
## Makes RefConcat mutable.
|
1716
1677
|
include MutableConcat
|
1717
1678
|
|
1718
1679
|
# Maps on the references.
|
@@ -1740,9 +1701,8 @@ module HDLRuby::Low
|
|
1740
1701
|
end
|
1741
1702
|
|
1742
1703
|
|
1743
|
-
##
|
1744
|
-
# Describes a index reference.
|
1745
1704
|
class RefIndex
|
1705
|
+
## Makes RefIndex mutable.
|
1746
1706
|
|
1747
1707
|
# Sets the base reference.
|
1748
1708
|
def set_ref!(ref)
|
@@ -1775,6 +1735,8 @@ module HDLRuby::Low
|
|
1775
1735
|
@ref.parent = self unless @ref.parent
|
1776
1736
|
end
|
1777
1737
|
|
1738
|
+
alias_method :map_expressions!, :map_nodes!
|
1739
|
+
|
1778
1740
|
# Replaces sub expressions using +node2rep+ table indicating the
|
1779
1741
|
# node to replace and the corresponding replacement.
|
1780
1742
|
# Returns the actually replaced nodes and their corresponding
|
@@ -1814,9 +1776,8 @@ module HDLRuby::Low
|
|
1814
1776
|
end
|
1815
1777
|
|
1816
1778
|
|
1817
|
-
##
|
1818
|
-
# Describes a range reference.
|
1819
1779
|
class RefRange
|
1780
|
+
## Makes RefRange mutable.
|
1820
1781
|
|
1821
1782
|
# Sets the base reference.
|
1822
1783
|
def set_ref!(ref)
|
@@ -1856,6 +1817,8 @@ module HDLRuby::Low
|
|
1856
1817
|
@ref.parent = self unless @ref.parent
|
1857
1818
|
end
|
1858
1819
|
|
1820
|
+
alias_method :map_expressions!, :map_nodes!
|
1821
|
+
|
1859
1822
|
# Replaces sub expressions using +node2rep+ table indicating the
|
1860
1823
|
# node to replace and the corresponding replacement.
|
1861
1824
|
# Returns the actually replaced nodes and their corresponding
|
@@ -1908,9 +1871,9 @@ module HDLRuby::Low
|
|
1908
1871
|
end
|
1909
1872
|
|
1910
1873
|
|
1911
|
-
##
|
1912
|
-
# Describes a name reference.
|
1913
1874
|
class RefName
|
1875
|
+
# Makes RefName mutable.
|
1876
|
+
|
1914
1877
|
# Sets the base reference.
|
1915
1878
|
def set_ref!(ref)
|
1916
1879
|
# Check and set the accessed reference.
|
@@ -1934,6 +1897,8 @@ module HDLRuby::Low
|
|
1934
1897
|
@ref.parent = self unless @ref.parent
|
1935
1898
|
end
|
1936
1899
|
|
1900
|
+
alias_method :map_expressions!, :map_nodes!
|
1901
|
+
|
1937
1902
|
# Replaces sub expressions using +node2rep+ table indicating the
|
1938
1903
|
# node to replace and the corresponding replacement.
|
1939
1904
|
# Returns the actually replaced nodes and their corresponding
|
@@ -1960,23 +1925,20 @@ module HDLRuby::Low
|
|
1960
1925
|
end
|
1961
1926
|
|
1962
1927
|
|
1963
|
-
##
|
1964
|
-
# Describe a this reference.
|
1965
|
-
#
|
1966
|
-
# This is the current system.
|
1967
1928
|
class RefThis
|
1929
|
+
## Makes RefThis mutable.
|
1968
1930
|
|
1969
1931
|
# Maps on the children.
|
1970
1932
|
def map_nodes!(&ruby_block)
|
1971
1933
|
# Nothing to do.
|
1972
1934
|
end
|
1935
|
+
|
1936
|
+
alias_method :map_expressions!, :map_nodes!
|
1973
1937
|
end
|
1974
1938
|
|
1975
|
-
|
1976
|
-
# Describes a string.
|
1977
|
-
#
|
1978
|
-
# NOTE: This is not synthesizable!
|
1939
|
+
|
1979
1940
|
class StringE
|
1941
|
+
## Makes StringE mutable.
|
1980
1942
|
|
1981
1943
|
# Maps on the arguments.
|
1982
1944
|
def map_args!(&ruby_block)
|
@@ -1991,5 +1953,7 @@ module HDLRuby::Low
|
|
1991
1953
|
def map_nodes!(&ruby_block)
|
1992
1954
|
self.map_args!(&ruby_block)
|
1993
1955
|
end
|
1956
|
+
|
1957
|
+
alias_method :map_expressions!, :map_nodes!
|
1994
1958
|
end
|
1995
1959
|
end
|
@@ -1,6 +1,8 @@
|
|
1
1
|
require "HDLRuby/hruby_error"
|
2
2
|
|
3
3
|
|
4
|
+
module HDLRuby::Low
|
5
|
+
|
4
6
|
|
5
7
|
##
|
6
8
|
# Adds methods for finding objects through names.
|
@@ -8,12 +10,11 @@ require "HDLRuby/hruby_error"
|
|
8
10
|
# NOTE: For now only resolve name reference.
|
9
11
|
#
|
10
12
|
########################################################################
|
11
|
-
module HDLRuby::Low
|
12
13
|
|
13
|
-
|
14
|
-
# Extends SystemT with the capability of finding one of its inner object
|
15
|
-
# by name.
|
14
|
+
|
16
15
|
class SystemT
|
16
|
+
## Extends SystemT with the capability of finding one of its inner
|
17
|
+
# object by name.
|
17
18
|
|
18
19
|
## Find an inner object by +name+.
|
19
20
|
# NOTE: return nil if not found.
|
@@ -31,10 +32,9 @@ module HDLRuby::Low
|
|
31
32
|
end
|
32
33
|
|
33
34
|
|
34
|
-
##
|
35
|
-
# Extends Scope with the capability of finding one of its inner object
|
36
|
-
# by name.
|
37
35
|
class Scope
|
36
|
+
## Extends Scope with the capability of finding one of its inner object
|
37
|
+
# by name.
|
38
38
|
|
39
39
|
## Find an inner object by +name+.
|
40
40
|
# NOTE: return nil if not found.
|
@@ -55,10 +55,10 @@ module HDLRuby::Low
|
|
55
55
|
end
|
56
56
|
end
|
57
57
|
|
58
|
-
|
59
|
-
# Extends Behavior with the capability of finding one of its inner object
|
60
|
-
# by name.
|
58
|
+
|
61
59
|
class Behavior
|
60
|
+
## Extends Behavior with the capability of finding one of its inner
|
61
|
+
# object by name.
|
62
62
|
|
63
63
|
## Find an inner object by +name+.
|
64
64
|
# NOTE: return nil if not found.
|
@@ -70,10 +70,10 @@ module HDLRuby::Low
|
|
70
70
|
end
|
71
71
|
end
|
72
72
|
|
73
|
-
|
74
|
-
# Extends SystemI with the capability of finding one of its inner object
|
75
|
-
# by name.
|
73
|
+
|
76
74
|
class SystemI
|
75
|
+
## Extends SystemI with the capability of finding one of its inner object
|
76
|
+
# by name.
|
77
77
|
|
78
78
|
## Find an inner object by +name+.
|
79
79
|
# NOTE: return nil if not found.
|
@@ -84,10 +84,9 @@ module HDLRuby::Low
|
|
84
84
|
end
|
85
85
|
|
86
86
|
|
87
|
-
##
|
88
|
-
# Extends Block with the capability of finding one of its inner object
|
89
|
-
# by name.
|
90
87
|
class Block
|
88
|
+
## Extends Block with the capability of finding one of its inner object
|
89
|
+
# by name.
|
91
90
|
|
92
91
|
## Find an inner object by +name+.
|
93
92
|
# NOTE: return nil if not found.
|
@@ -109,10 +108,23 @@ module HDLRuby::Low
|
|
109
108
|
end
|
110
109
|
|
111
110
|
|
112
|
-
|
113
|
-
|
114
|
-
|
111
|
+
class SignalI
|
112
|
+
## Extends SignalI with the capability of finding one of its inner object
|
113
|
+
# by name.
|
114
|
+
|
115
|
+
## Find an inner object by +name+.
|
116
|
+
# NOTE: return nil if not found.
|
117
|
+
def get_by_name(name)
|
118
|
+
return self.get_signal(name)
|
119
|
+
end
|
120
|
+
end
|
121
|
+
|
122
|
+
|
123
|
+
|
115
124
|
class Ref
|
125
|
+
## Extends RefIndex with the capability of finding the object it
|
126
|
+
# refered to.
|
127
|
+
|
116
128
|
## Resolves the name of the reference (if any) and return the
|
117
129
|
# corresponding object.
|
118
130
|
# NOTE: return nil if could not resolve.
|
@@ -123,10 +135,9 @@ module HDLRuby::Low
|
|
123
135
|
end
|
124
136
|
|
125
137
|
|
126
|
-
##
|
127
|
-
# Extends RefIndex with the capability of finding the object it
|
128
|
-
# refered to.
|
129
138
|
class RefIndex
|
139
|
+
## Extends RefIndex with the capability of finding the object it
|
140
|
+
# refered to.
|
130
141
|
|
131
142
|
## Tells if it is a reference to a systemI signal.
|
132
143
|
def from_systemI?
|
@@ -142,10 +153,9 @@ module HDLRuby::Low
|
|
142
153
|
end
|
143
154
|
|
144
155
|
|
145
|
-
##
|
146
|
-
# Extends RefRange with the capability of finding the object it
|
147
|
-
# refered to.
|
148
156
|
class RefRange
|
157
|
+
## Extends RefRange with the capability of finding the object it
|
158
|
+
# refered to.
|
149
159
|
|
150
160
|
## Tells if it is a reference to a systemI signal.
|
151
161
|
def from_systemI?
|
@@ -161,10 +171,9 @@ module HDLRuby::Low
|
|
161
171
|
end
|
162
172
|
|
163
173
|
|
164
|
-
##
|
165
|
-
# Extends RefName with the capability of finding the object it
|
166
|
-
# refered to.
|
167
174
|
class RefName
|
175
|
+
## Extends RefName with the capability of finding the object it
|
176
|
+
# refered to.
|
168
177
|
|
169
178
|
## Tells if it is a reference to a systemI signal.
|
170
179
|
def from_systemI?
|
@@ -219,10 +228,9 @@ module HDLRuby::Low
|
|
219
228
|
# corresponding object.
|
220
229
|
# NOTE: return nil if could not resolve.
|
221
230
|
def resolve
|
222
|
-
# puts "Resolve with #{self} and name=#{self.name}"
|
231
|
+
# puts "Resolve with #{self} and name=#{self.name} and ref=#{self.ref.class}"
|
223
232
|
# First resolve the sub reference if possible.
|
224
233
|
if self.ref.is_a?(RefName) then
|
225
|
-
# puts "ref name=#{self.ref.name}"
|
226
234
|
obj = self.ref.resolve
|
227
235
|
# puts "obj=#{obj}"
|
228
236
|
# Look into the object for the name.
|