HDLRuby 2.6.4 → 2.6.15
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/HDLRuby/hdr_samples/comparison_bench.rb +40 -0
- data/lib/HDLRuby/hdr_samples/neg_arith_bench.rb +11 -0
- data/lib/HDLRuby/hdr_samples/type_minmax_bench.rb +37 -0
- data/lib/HDLRuby/hdr_samples/with_to_array.rb +29 -0
- data/lib/HDLRuby/hdrcc.rb +49 -24
- data/lib/HDLRuby/hruby_high.rb +136 -117
- data/lib/HDLRuby/hruby_low.rb +58 -27
- data/lib/HDLRuby/hruby_low2c.rb +3 -1
- data/lib/HDLRuby/hruby_low_resolve.rb +24 -0
- data/lib/HDLRuby/hruby_verilog.rb +5 -5
- data/lib/HDLRuby/hruby_verilog_name.rb +50 -32
- data/lib/HDLRuby/sim/hruby_sim.h +16 -2
- data/lib/HDLRuby/sim/hruby_sim_calc.c +293 -18
- data/lib/HDLRuby/sim/hruby_sim_vcd.c +2 -2
- data/lib/HDLRuby/version.rb +1 -1
- metadata +5 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 639411f380dad2eb07b933ae8d23f558dc32e488ceadf1af897026b353a4164b
|
4
|
+
data.tar.gz: 8fb94917c40db1b73a63d323efdc04bbb1e5ebcb65460ebe42c0c468a75ac221
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0d00decbd699cc46f450c913b98e5d881fc10e3a9d171126bc3744ad8d05408536b38bc90d1d15227da67302570a425eb2ceccef7d65959e19f591a35aa1f00c
|
7
|
+
data.tar.gz: 9a2f9568732a851786fdfcd794ab146efa4ea36458163a11fe6c992c59bd53f643cd4691804f68e3438f8ce233996af7dd0d8ba205834596bf2b8c7d442ca69d
|
@@ -0,0 +1,40 @@
|
|
1
|
+
# Test the comparison operators.
|
2
|
+
|
3
|
+
# A benchmark for the adder.
|
4
|
+
system :adder_bench do
|
5
|
+
[8].inner :x, :y
|
6
|
+
signed[8].inner :u,:v
|
7
|
+
inner :ue, :ult, :ule, :ugt, :uge
|
8
|
+
inner :se, :slt, :sle, :sgt, :sge
|
9
|
+
|
10
|
+
par do
|
11
|
+
ue <= (x == y)
|
12
|
+
ult <= (x < y)
|
13
|
+
ule <= (x <= y)
|
14
|
+
ugt <= (x > y)
|
15
|
+
uge <= (x >= y)
|
16
|
+
|
17
|
+
se <= (u == v)
|
18
|
+
slt <= (u < v)
|
19
|
+
sle <= (u <= v)
|
20
|
+
sgt <= (u > v)
|
21
|
+
sge <= (u >= v)
|
22
|
+
end
|
23
|
+
|
24
|
+
timed do
|
25
|
+
x <= 0
|
26
|
+
y <= 0
|
27
|
+
u <= 0
|
28
|
+
v <= 0
|
29
|
+
!10.ns
|
30
|
+
x <= 1
|
31
|
+
u <= 1
|
32
|
+
!10.ns
|
33
|
+
y <= 2
|
34
|
+
v <= 2
|
35
|
+
!10.ns
|
36
|
+
x <= 2
|
37
|
+
u <= -2
|
38
|
+
!10.ns
|
39
|
+
end
|
40
|
+
end
|
@@ -2,6 +2,7 @@
|
|
2
2
|
# A benchmark for testing the arithmetic with signed values.
|
3
3
|
system :neg_arith_bench do
|
4
4
|
signed[11..0].inner :x,:y,:z
|
5
|
+
inner :cmp
|
5
6
|
|
6
7
|
timed do
|
7
8
|
x <= 10
|
@@ -9,41 +10,51 @@ system :neg_arith_bench do
|
|
9
10
|
z <= 0
|
10
11
|
!10.ns
|
11
12
|
z <= 10 * 10
|
13
|
+
cmp <= (10 < 10)
|
12
14
|
!10.ns
|
13
15
|
z <= x * y
|
16
|
+
cmp <= (x < y)
|
14
17
|
!10.ns
|
15
18
|
x <= 10
|
16
19
|
y <= -10
|
17
20
|
!10.ns
|
18
21
|
z <= 10 * (-10)
|
22
|
+
cmp <= (10 < -10)
|
19
23
|
!10.ns
|
20
24
|
z <= x * y
|
25
|
+
cmp <= (x < y)
|
21
26
|
!10.ns
|
22
27
|
x <= -10
|
23
28
|
y <= 10
|
24
29
|
!10.ns
|
25
30
|
z <= (-10) * 10
|
31
|
+
cmp <= (-10 < 10)
|
26
32
|
!10.ns
|
27
33
|
z <= x * y
|
34
|
+
cmp <= (x < y)
|
28
35
|
!10.ns
|
29
36
|
x <= -10
|
30
37
|
y <= -10
|
31
38
|
!10.ns
|
32
39
|
z <= (-10) * (-10)
|
40
|
+
cmp <= (-10 < -10)
|
33
41
|
!10.ns
|
34
42
|
z <= x * y
|
43
|
+
cmp <= (x < y)
|
35
44
|
!10.ns
|
36
45
|
x <= _000000011010
|
37
46
|
y <= _000011111010
|
38
47
|
z <= 0
|
39
48
|
!10.ns
|
40
49
|
z <= x * y
|
50
|
+
cmp <= (x < y)
|
41
51
|
!10.ns
|
42
52
|
x <= _000000011010
|
43
53
|
y <= _111111111010
|
44
54
|
z <= 0
|
45
55
|
!10.ns
|
46
56
|
z <= x * y
|
57
|
+
cmp <= (x < y)
|
47
58
|
!10.ns
|
48
59
|
end
|
49
60
|
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
# Test the type method min and max
|
2
|
+
|
3
|
+
# A benchmark for the adder.
|
4
|
+
system :adder_bench do
|
5
|
+
[32].inner :x
|
6
|
+
signed[32].inner :y
|
7
|
+
|
8
|
+
timed do
|
9
|
+
x <= 0
|
10
|
+
y <= 0
|
11
|
+
!10.ns
|
12
|
+
x <= bit[8].max
|
13
|
+
y <= signed[8].max
|
14
|
+
!10.ns
|
15
|
+
x <= bit[8].min
|
16
|
+
y <= signed[8].min
|
17
|
+
!10.ns
|
18
|
+
x <= bit[10].max
|
19
|
+
y <= signed[10].max
|
20
|
+
!10.ns
|
21
|
+
x <= bit[10].min
|
22
|
+
y <= signed[10].min
|
23
|
+
!10.ns
|
24
|
+
x <= bit[16].max
|
25
|
+
y <= signed[16].max
|
26
|
+
!10.ns
|
27
|
+
x <= bit[16].min
|
28
|
+
y <= signed[16].min
|
29
|
+
!10.ns
|
30
|
+
x <= bit[32].max
|
31
|
+
y <= signed[32].max
|
32
|
+
!10.ns
|
33
|
+
x <= bit[32].min
|
34
|
+
y <= signed[32].min
|
35
|
+
!10.ns
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
|
2
|
+
def connect8(i0,i1,i2,i3,i4,i5,i6,i7,
|
3
|
+
o0,o1,o2,o3,o4,o5,o6,o7)
|
4
|
+
o0 <= i0
|
5
|
+
o1 <= i1
|
6
|
+
o2 <= i2
|
7
|
+
o3 <= i3
|
8
|
+
o4 <= i4
|
9
|
+
o5 <= i5
|
10
|
+
o6 <= i6
|
11
|
+
o7 <= i7
|
12
|
+
end
|
13
|
+
|
14
|
+
# A benchmark for testing the conversion to ruby array of expressions.
|
15
|
+
system :with_to_bench do
|
16
|
+
[8].inner :val
|
17
|
+
inner :b0,:b1,:b2,:b3,:b4,:b5,:b6,:b7
|
18
|
+
|
19
|
+
connect8(*val,b0,b1,b2,b3,b4,b5,b6,b7)
|
20
|
+
|
21
|
+
timed do
|
22
|
+
val <= _01101010
|
23
|
+
!10.ns
|
24
|
+
val <= _01011010
|
25
|
+
!10.ns
|
26
|
+
val <= _00001111
|
27
|
+
!10.ns
|
28
|
+
end
|
29
|
+
end
|
data/lib/HDLRuby/hdrcc.rb
CHANGED
@@ -491,24 +491,28 @@ end
|
|
491
491
|
|
492
492
|
# Generate the result.
|
493
493
|
# Get the top systemT.
|
494
|
+
puts Time.now
|
494
495
|
$top_system = $top_instance.to_low.systemT
|
495
|
-
|
496
|
-
|
497
|
-
|
498
|
-
|
499
|
-
|
500
|
-
|
501
|
-
|
502
|
-
|
503
|
-
|
504
|
-
|
505
|
-
|
506
|
-
|
507
|
-
|
508
|
-
|
509
|
-
|
510
|
-
|
511
|
-
end
|
496
|
+
$top_intance = nil # Free as much memory as possible.
|
497
|
+
puts "##### Top system built #####"
|
498
|
+
puts Time.now
|
499
|
+
|
500
|
+
|
501
|
+
# # Apply the pre drivers if any.
|
502
|
+
# Hdecorator.each_with_property(:pre_driver) do |obj, value|
|
503
|
+
# unless value.is_a?(Array) && value.size == 2 then
|
504
|
+
# raise "pre_driver requires a driver file name command name."
|
505
|
+
# end
|
506
|
+
# # Load the driver.
|
507
|
+
# require_relative(value[0].to_s)
|
508
|
+
# # Ensure obj is the low version.
|
509
|
+
# if obj.properties.key?(:high2low) then
|
510
|
+
# # obj is high, get the corresponding low.
|
511
|
+
# obj = obj.properties[:high2low][0]
|
512
|
+
# end
|
513
|
+
# # Execute it.
|
514
|
+
# send(value[1].to_sym,obj,*value[2..-1])
|
515
|
+
# end
|
512
516
|
|
513
517
|
|
514
518
|
# Gather the non-HDLRuby code.
|
@@ -558,15 +562,23 @@ elsif $options[:clang] then
|
|
558
562
|
# top_system = $top_system
|
559
563
|
# Preprocess the HW description for valid C generation.
|
560
564
|
$top_system.each_systemT_deep do |systemT|
|
565
|
+
puts "seq2seq step..."
|
561
566
|
# Coverts the par blocks in seq blocks to seq blocks to match
|
562
567
|
# the simulation engine.
|
563
568
|
systemT.par_in_seq2seq!
|
569
|
+
puts Time.now
|
570
|
+
puts "connections_to_behaviors step..."
|
564
571
|
# Converts the connections to behaviors.
|
565
572
|
systemT.connections_to_behaviors!
|
573
|
+
puts Time.now
|
566
574
|
# Break the RefConcat.
|
575
|
+
puts "concat_assigns step..."
|
567
576
|
systemT.break_concat_assigns!
|
577
|
+
puts Time.now
|
568
578
|
# Explicits the types.
|
579
|
+
puts "explicit_types step..."
|
569
580
|
systemT.explicit_types!
|
581
|
+
puts Time.now
|
570
582
|
end
|
571
583
|
# Generate the C.
|
572
584
|
if $options[:multiple] then
|
@@ -637,6 +649,7 @@ elsif $options[:clang] then
|
|
637
649
|
name = $output + "/" +
|
638
650
|
HDLRuby::Low::Low2C.c_name(systemT.name) +
|
639
651
|
".c"
|
652
|
+
# puts "for systemT=#{systemT.name} generating: #{name}"
|
640
653
|
# Open the file for current systemT
|
641
654
|
outfile = File.open(name,"w")
|
642
655
|
# Generate the C code in to.
|
@@ -690,14 +703,26 @@ elsif $options[:verilog] then
|
|
690
703
|
# top_system = $top_system
|
691
704
|
# Make description compatible with verilog generation.
|
692
705
|
$top_system.each_systemT_deep do |systemT|
|
706
|
+
puts "casts_without_expression! step..."
|
693
707
|
systemT.casts_without_expression!
|
708
|
+
puts Time.now
|
709
|
+
puts "to_upper_space! step..."
|
694
710
|
systemT.to_upper_space!
|
711
|
+
puts Time.now
|
712
|
+
puts "to_global_space! step..."
|
695
713
|
systemT.to_global_systemTs!
|
714
|
+
puts Time.now
|
696
715
|
# systemT.break_types!
|
697
716
|
# systemT.expand_types!
|
717
|
+
puts "par_in_seq2seq! step..."
|
698
718
|
systemT.par_in_seq2seq!
|
719
|
+
puts Time.now
|
720
|
+
puts "initial_concat_to_timed! step..."
|
699
721
|
systemT.initial_concat_to_timed!
|
722
|
+
puts Time.now
|
723
|
+
puts "with_port! step..."
|
700
724
|
systemT.with_port!
|
725
|
+
puts Time.now
|
701
726
|
end
|
702
727
|
# # Verilog generation
|
703
728
|
# $output << top_system.to_verilog
|
@@ -787,13 +812,13 @@ elsif $options[:vhdl] then
|
|
787
812
|
end
|
788
813
|
end
|
789
814
|
|
790
|
-
# Apply the post drivers if any.
|
791
|
-
Hdecorator.each_with_property(:post_driver) do |obj, value|
|
792
|
-
|
793
|
-
|
794
|
-
|
795
|
-
|
796
|
-
end
|
815
|
+
# # Apply the post drivers if any.
|
816
|
+
# Hdecorator.each_with_property(:post_driver) do |obj, value|
|
817
|
+
# # Load the driver.
|
818
|
+
# require_relative(value[0].to_s)
|
819
|
+
# # Execute it.
|
820
|
+
# send(value[1].to_sym,obj,$output)
|
821
|
+
# end
|
797
822
|
|
798
823
|
# Dump the properties
|
799
824
|
if $options[:dump] then
|
data/lib/HDLRuby/hruby_high.rb
CHANGED
@@ -609,7 +609,8 @@ module HDLRuby::High
|
|
609
609
|
# possible arguments +args+.
|
610
610
|
def instantiate(i_name,*args)
|
611
611
|
# Create the eigen type.
|
612
|
-
eigen = self.expand(High.names_create(i_name.to_s + ":T"), *args)
|
612
|
+
# eigen = self.expand(High.names_create(i_name.to_s + ":T"), *args)
|
613
|
+
eigen = self.expand(HDLRuby.uniq_name(i_name.to_s + ":T"), *args)
|
613
614
|
|
614
615
|
# Create the instance and sets its eigen system to +eigen+.
|
615
616
|
instance = @instance_class.new(i_name,eigen)
|
@@ -758,11 +759,13 @@ module HDLRuby::High
|
|
758
759
|
"Cannot convert a system without a name to HDLRuby::Low."
|
759
760
|
end
|
760
761
|
# Create the resulting low system type.
|
761
|
-
systemTL = HDLRuby::Low::SystemT.new(High.names_create(name),
|
762
|
+
# systemTL = HDLRuby::Low::SystemT.new(High.names_create(name),
|
763
|
+
systemTL = HDLRuby::Low::SystemT.new(HDLRuby.uniq_name(name),
|
762
764
|
self.scope.to_low)
|
763
|
-
#
|
764
|
-
|
765
|
-
|
765
|
+
# puts "New low from system #{self.name}: #{systemTL.name}"
|
766
|
+
# # For debugging: set the source high object
|
767
|
+
# systemTL.properties[:low2high] = self.hdr_id
|
768
|
+
# self.properties[:high2low] = systemTL
|
766
769
|
|
767
770
|
# Fills the interface of the new system
|
768
771
|
# from the included systems.
|
@@ -1308,9 +1311,9 @@ module HDLRuby::High
|
|
1308
1311
|
# Create the resulting low scope.
|
1309
1312
|
# scopeL = HDLRuby::Low::Scope.new()
|
1310
1313
|
scopeL = HDLRuby::Low::Scope.new(self.name)
|
1311
|
-
# For debugging: set the source high object
|
1312
|
-
scopeL.properties[:low2high] = self.hdr_id
|
1313
|
-
self.properties[:high2low] = scopeL
|
1314
|
+
# # For debugging: set the source high object
|
1315
|
+
# scopeL.properties[:low2high] = self.hdr_id
|
1316
|
+
# self.properties[:high2low] = scopeL
|
1314
1317
|
|
1315
1318
|
# Push the private namespace for the low generation.
|
1316
1319
|
High.space_push(@namespace)
|
@@ -1542,9 +1545,9 @@ module HDLRuby::High
|
|
1542
1545
|
def to_low(name = self.name)
|
1543
1546
|
# return HDLRuby::Low::Type.new(name)
|
1544
1547
|
typeL = HDLRuby::Low::Type.new(name)
|
1545
|
-
# For debugging: set the source high object
|
1546
|
-
typeL.properties[:low2high] = self.hdr_id
|
1547
|
-
self.properties[:high2low] = typeL
|
1548
|
+
# # For debugging: set the source high object
|
1549
|
+
# typeL.properties[:low2high] = self.hdr_id
|
1550
|
+
# self.properties[:high2low] = typeL
|
1548
1551
|
return typeL
|
1549
1552
|
end
|
1550
1553
|
end
|
@@ -1696,9 +1699,9 @@ module HDLRuby::High
|
|
1696
1699
|
def to_low(name = self.name)
|
1697
1700
|
# return HDLRuby::Low::TypeDef.new(name,self.def.to_low)
|
1698
1701
|
typeDefL = HDLRuby::Low::TypeDef.new(name,self.def.to_low)
|
1699
|
-
# For debugging: set the source high object
|
1700
|
-
typeDefL.properties[:low2high] = self.hdr_id
|
1701
|
-
self.properties[:high2low] = typeDefL
|
1702
|
+
# # For debugging: set the source high object
|
1703
|
+
# typeDefL.properties[:low2high] = self.hdr_id
|
1704
|
+
# self.properties[:high2low] = typeDefL
|
1702
1705
|
return typeDefL
|
1703
1706
|
end
|
1704
1707
|
end
|
@@ -1749,9 +1752,9 @@ module HDLRuby::High
|
|
1749
1752
|
def to_low(name = self.name)
|
1750
1753
|
# return HDLRuby::Low::TypeDef.new(name,self.def.to_low)
|
1751
1754
|
typeDefL = HDLRuby::Low::TypeDef.new(name,self.def.to_low)
|
1752
|
-
# For debugging: set the source high object
|
1753
|
-
typeDefL.properties[:low2high] = self.hdr_id
|
1754
|
-
self.properties[:high2low] = typeDefL
|
1755
|
+
# # For debugging: set the source high object
|
1756
|
+
# typeDefL.properties[:low2high] = self.hdr_id
|
1757
|
+
# self.properties[:high2low] = typeDefL
|
1755
1758
|
return typeDefL
|
1756
1759
|
end
|
1757
1760
|
end
|
@@ -1767,9 +1770,9 @@ module HDLRuby::High
|
|
1767
1770
|
# self.range.to_low)
|
1768
1771
|
typeVectorL = HDLRuby::Low::TypeVector.new(name,self.base.to_low,
|
1769
1772
|
self.range.to_low)
|
1770
|
-
# For debugging: set the source high object
|
1771
|
-
typeVectorL.properties[:low2high] = self.hdr_id
|
1772
|
-
self.properties[:high2low] = typeVectorL
|
1773
|
+
# # For debugging: set the source high object
|
1774
|
+
# typeVectorL.properties[:low2high] = self.hdr_id
|
1775
|
+
# self.properties[:high2low] = typeVectorL
|
1773
1776
|
return typeVectorL
|
1774
1777
|
end
|
1775
1778
|
end
|
@@ -1847,9 +1850,9 @@ module HDLRuby::High
|
|
1847
1850
|
# *@types.map { |type| type.to_low } )
|
1848
1851
|
typeTupleL = HDLRuby::Low::TypeTuple.new(name,self.direction,
|
1849
1852
|
*@types.map { |type| type.to_low } )
|
1850
|
-
# For debugging: set the source high object
|
1851
|
-
typeTupleL.properties[:low2high] = self.hdr_id
|
1852
|
-
self.properties[:high2low] = typeTupleL
|
1853
|
+
# # For debugging: set the source high object
|
1854
|
+
# typeTupleL.properties[:low2high] = self.hdr_id
|
1855
|
+
# self.properties[:high2low] = typeTupleL
|
1853
1856
|
return typeTupleL
|
1854
1857
|
end
|
1855
1858
|
end
|
@@ -1868,9 +1871,9 @@ module HDLRuby::High
|
|
1868
1871
|
# @types.map { |name,type| [name,type.to_low] } )
|
1869
1872
|
typeStructL = HDLRuby::Low::TypeStruct.new(name,self.direction,
|
1870
1873
|
@types.map { |name,type| [name,type.to_low] } )
|
1871
|
-
# For debugging: set the source high object
|
1872
|
-
typeStructL.properties[:low2high] = self.hdr_id
|
1873
|
-
self.properties[:high2low] = typeStructL
|
1874
|
+
# # For debugging: set the source high object
|
1875
|
+
# typeStructL.properties[:low2high] = self.hdr_id
|
1876
|
+
# self.properties[:high2low] = typeStructL
|
1874
1877
|
return typeStructL
|
1875
1878
|
end
|
1876
1879
|
end
|
@@ -2108,9 +2111,9 @@ module HDLRuby::High
|
|
2108
2111
|
# Creates the resulting HDLRuby::Low instance
|
2109
2112
|
systemIL = HDLRuby::Low::SystemI.new(High.names_create(name),
|
2110
2113
|
systemTL)
|
2111
|
-
# For debugging: set the source high object
|
2112
|
-
systemIL.properties[:low2high] = self.hdr_id
|
2113
|
-
self.properties[:high2low] = systemIL
|
2114
|
+
# # For debugging: set the source high object
|
2115
|
+
# systemIL.properties[:low2high] = self.hdr_id
|
2116
|
+
# self.properties[:high2low] = systemIL
|
2114
2117
|
# Adds the other systemTs.
|
2115
2118
|
self.each_systemT do |systemT|
|
2116
2119
|
systemIL.add_systemT(systemT.to_low) unless systemT == self.systemT
|
@@ -2136,9 +2139,9 @@ module HDLRuby::High
|
|
2136
2139
|
lump = lump.respond_to?(:to_low) ? lump.to_low : lump.to_s
|
2137
2140
|
lump
|
2138
2141
|
end)
|
2139
|
-
# For debugging: set the source high object
|
2140
|
-
chunkL.properties[:low2high] = self.hdr_id
|
2141
|
-
self.properties[:high2low] = chunkL
|
2142
|
+
# # For debugging: set the source high object
|
2143
|
+
# chunkL.properties[:low2high] = self.hdr_id
|
2144
|
+
# self.properties[:high2low] = chunkL
|
2142
2145
|
return chunkL
|
2143
2146
|
end
|
2144
2147
|
end
|
@@ -2150,9 +2153,9 @@ module HDLRuby::High
|
|
2150
2153
|
def to_low
|
2151
2154
|
# Create the resulting code.
|
2152
2155
|
codeL = HDLRuby::Low::Code.new
|
2153
|
-
# For debugging: set the source high object
|
2154
|
-
codeL.properties[:low2high] = self.hdr_id
|
2155
|
-
self.properties[:high2low] = codeL
|
2156
|
+
# # For debugging: set the source high object
|
2157
|
+
# codeL.properties[:low2high] = self.hdr_id
|
2158
|
+
# self.properties[:high2low] = codeL
|
2156
2159
|
# Add the low-level events.
|
2157
2160
|
self.each_event { |event| codeL.add_event(event.to_low) }
|
2158
2161
|
# Add the low-level code chunks.
|
@@ -2244,9 +2247,9 @@ module HDLRuby::High
|
|
2244
2247
|
ifL = HDLRuby::Low::If.new(self.condition.to_low,
|
2245
2248
|
self.yes.to_low,noL)
|
2246
2249
|
self.each_noif {|cond,block| ifL.add_noif(cond.to_low,block.to_low)}
|
2247
|
-
# For debugging: set the source high object
|
2248
|
-
ifL.properties[:low2high] = self.hdr_id
|
2249
|
-
self.properties[:high2low] = ifL
|
2250
|
+
# # For debugging: set the source high object
|
2251
|
+
# ifL.properties[:low2high] = self.hdr_id
|
2252
|
+
# self.properties[:high2low] = ifL
|
2250
2253
|
return ifL
|
2251
2254
|
end
|
2252
2255
|
end
|
@@ -2269,9 +2272,9 @@ module HDLRuby::High
|
|
2269
2272
|
# self.statement.to_low)
|
2270
2273
|
whenL = HDLRuby::Low::When.new(self.match.to_low,
|
2271
2274
|
self.statement.to_low)
|
2272
|
-
# For debugging: set the source high object
|
2273
|
-
whenL.properties[:low2high] = self.hdr_id
|
2274
|
-
self.properties[:high2low] = whenL
|
2275
|
+
# # For debugging: set the source high object
|
2276
|
+
# whenL.properties[:low2high] = self.hdr_id
|
2277
|
+
# self.properties[:high2low] = whenL
|
2275
2278
|
return whenL
|
2276
2279
|
end
|
2277
2280
|
end
|
@@ -2317,9 +2320,9 @@ module HDLRuby::High
|
|
2317
2320
|
def to_low
|
2318
2321
|
# Create the low level case.
|
2319
2322
|
caseL = HDLRuby::Low::Case.new(@value.to_low)
|
2320
|
-
# For debugging: set the source high object
|
2321
|
-
caseL.properties[:low2high] = self.hdr_id
|
2322
|
-
self.properties[:high2low] = caseL
|
2323
|
+
# # For debugging: set the source high object
|
2324
|
+
# caseL.properties[:low2high] = self.hdr_id
|
2325
|
+
# self.properties[:high2low] = caseL
|
2323
2326
|
# Add each when case.
|
2324
2327
|
self.each_when do |w|
|
2325
2328
|
caseL.add_when(w.to_low)
|
@@ -2348,9 +2351,9 @@ module HDLRuby::High
|
|
2348
2351
|
def to_low
|
2349
2352
|
# return HDLRuby::Low::Delay.new(self.value, self.unit)
|
2350
2353
|
delayL = HDLRuby::Low::Delay.new(self.value, self.unit)
|
2351
|
-
# For debugging: set the source high object
|
2352
|
-
delayL.properties[:low2high] = self.hdr_id
|
2353
|
-
self.properties[:high2low] = delayL
|
2354
|
+
# # For debugging: set the source high object
|
2355
|
+
# delayL.properties[:low2high] = self.hdr_id
|
2356
|
+
# self.properties[:high2low] = delayL
|
2354
2357
|
return delayL
|
2355
2358
|
end
|
2356
2359
|
end
|
@@ -2364,9 +2367,9 @@ module HDLRuby::High
|
|
2364
2367
|
def to_low
|
2365
2368
|
# return HDLRuby::Low::TimeWait.new(self.delay.to_low)
|
2366
2369
|
timeWaitL = HDLRuby::Low::TimeWait.new(self.delay.to_low)
|
2367
|
-
# For debugging: set the source high object
|
2368
|
-
timeWaitL.properties[:low2high] = self.hdr_id
|
2369
|
-
self.properties[:high2low] = timeWaitL
|
2370
|
+
# # For debugging: set the source high object
|
2371
|
+
# timeWaitL.properties[:low2high] = self.hdr_id
|
2372
|
+
# self.properties[:high2low] = timeWaitL
|
2370
2373
|
return timeWaitL
|
2371
2374
|
end
|
2372
2375
|
end
|
@@ -2383,9 +2386,9 @@ module HDLRuby::High
|
|
2383
2386
|
# self.delay.to_low)
|
2384
2387
|
timeRepeatL = HDLRuby::Low::TimeRepeat.new(self.statement.to_low,
|
2385
2388
|
self.delay.to_low)
|
2386
|
-
# For debugging: set the source high object
|
2387
|
-
timeRepeatL.properties[:low2high] = self.hdr_id
|
2388
|
-
self.properties[:high2low] = timeRepeatL
|
2389
|
+
# # For debugging: set the source high object
|
2390
|
+
# timeRepeatL.properties[:low2high] = self.hdr_id
|
2391
|
+
# self.properties[:high2low] = timeRepeatL
|
2389
2392
|
return timeRepeatL
|
2390
2393
|
end
|
2391
2394
|
end
|
@@ -2655,7 +2658,6 @@ module HDLRuby::High
|
|
2655
2658
|
end
|
2656
2659
|
end
|
2657
2660
|
|
2658
|
-
|
2659
2661
|
# Converts to a select operator using current expression as
|
2660
2662
|
# condition for one of the +choices+.
|
2661
2663
|
#
|
@@ -2671,6 +2673,7 @@ module HDLRuby::High
|
|
2671
2673
|
end
|
2672
2674
|
|
2673
2675
|
|
2676
|
+
|
2674
2677
|
# Methods for conversion for HDLRuby::Low: type processing, flattening
|
2675
2678
|
# and so on
|
2676
2679
|
|
@@ -2743,9 +2746,9 @@ module HDLRuby::High
|
|
2743
2746
|
def to_low
|
2744
2747
|
# return HDLRuby::Low::Cast.new(self.type.to_low,self.child.to_low)
|
2745
2748
|
castL =HDLRuby::Low::Cast.new(self.type.to_low,self.child.to_low)
|
2746
|
-
# For debugging: set the source high object
|
2747
|
-
castL.properties[:low2high] = self.hdr_id
|
2748
|
-
self.properties[:high2low] = castL
|
2749
|
+
# # For debugging: set the source high object
|
2750
|
+
# castL.properties[:low2high] = self.hdr_id
|
2751
|
+
# self.properties[:high2low] = castL
|
2749
2752
|
return castL
|
2750
2753
|
end
|
2751
2754
|
end
|
@@ -2767,9 +2770,9 @@ module HDLRuby::High
|
|
2767
2770
|
# self.child.to_low)
|
2768
2771
|
unaryL = HDLRuby::Low::Unary.new(self.type.to_low, self.operator,
|
2769
2772
|
self.child.to_low)
|
2770
|
-
# For debugging: set the source high object
|
2771
|
-
unaryL.properties[:low2high] = self.hdr_id
|
2772
|
-
self.properties[:high2low] = unaryL
|
2773
|
+
# # For debugging: set the source high object
|
2774
|
+
# unaryL.properties[:low2high] = self.hdr_id
|
2775
|
+
# self.properties[:high2low] = unaryL
|
2773
2776
|
return unaryL
|
2774
2777
|
end
|
2775
2778
|
end
|
@@ -2792,9 +2795,9 @@ module HDLRuby::High
|
|
2792
2795
|
# self.left.to_low, self.right.to_low)
|
2793
2796
|
binaryL = HDLRuby::Low::Binary.new(self.type.to_low, self.operator,
|
2794
2797
|
self.left.to_low, self.right.to_low)
|
2795
|
-
# For debugging: set the source high object
|
2796
|
-
binaryL.properties[:low2high] = self.hdr_id
|
2797
|
-
self.properties[:high2low] = binaryL
|
2798
|
+
# # For debugging: set the source high object
|
2799
|
+
# binaryL.properties[:low2high] = self.hdr_id
|
2800
|
+
# self.properties[:high2low] = binaryL
|
2798
2801
|
return binaryL
|
2799
2802
|
end
|
2800
2803
|
end
|
@@ -2827,9 +2830,9 @@ module HDLRuby::High
|
|
2827
2830
|
*self.each_choice.map do |choice|
|
2828
2831
|
choice.to_low
|
2829
2832
|
end)
|
2830
|
-
# For debugging: set the source high object
|
2831
|
-
selectL.properties[:low2high] = self.hdr_id
|
2832
|
-
self.properties[:high2low] = selectL
|
2833
|
+
# # For debugging: set the source high object
|
2834
|
+
# selectL.properties[:low2high] = self.hdr_id
|
2835
|
+
# self.properties[:high2low] = selectL
|
2833
2836
|
return selectL
|
2834
2837
|
end
|
2835
2838
|
end
|
@@ -2861,9 +2864,9 @@ module HDLRuby::High
|
|
2861
2864
|
expr.to_low
|
2862
2865
|
end
|
2863
2866
|
)
|
2864
|
-
# For debugging: set the source high object
|
2865
|
-
concatL.properties[:low2high] = self.hdr_id
|
2866
|
-
self.properties[:high2low] = concatL
|
2867
|
+
# # For debugging: set the source high object
|
2868
|
+
# concatL.properties[:low2high] = self.hdr_id
|
2869
|
+
# self.properties[:high2low] = concatL
|
2867
2870
|
return concatL
|
2868
2871
|
end
|
2869
2872
|
end
|
@@ -2905,9 +2908,9 @@ module HDLRuby::High
|
|
2905
2908
|
# Create and return the resulting low-level value
|
2906
2909
|
# return HDLRuby::Low::Value.new(self.type.to_low,self.content)
|
2907
2910
|
valueL = HDLRuby::Low::Value.new(self.type.to_low,self.content)
|
2908
|
-
# For debugging: set the source high object
|
2909
|
-
valueL.properties[:low2high] = self.hdr_id
|
2910
|
-
self.properties[:high2low] = valueL
|
2911
|
+
# # For debugging: set the source high object
|
2912
|
+
# valueL.properties[:low2high] = self.hdr_id
|
2913
|
+
# self.properties[:high2low] = valueL
|
2911
2914
|
return valueL
|
2912
2915
|
end
|
2913
2916
|
|
@@ -3013,9 +3016,9 @@ module HDLRuby::High
|
|
3013
3016
|
# puts "to_low with base=#{@base} @object=#{@object}"
|
3014
3017
|
refNameL = HDLRuby::Low::RefName.new(self.type.to_low,
|
3015
3018
|
@base.to_ref.to_low,@object.name)
|
3016
|
-
# For debugging: set the source high object
|
3017
|
-
refNameL.properties[:low2high] = self.hdr_id
|
3018
|
-
self.properties[:high2low] = refNameL
|
3019
|
+
# # For debugging: set the source high object
|
3020
|
+
# refNameL.properties[:low2high] = self.hdr_id
|
3021
|
+
# self.properties[:high2low] = refNameL
|
3019
3022
|
return refNameL
|
3020
3023
|
end
|
3021
3024
|
|
@@ -3053,9 +3056,9 @@ module HDLRuby::High
|
|
3053
3056
|
ref.to_low
|
3054
3057
|
end
|
3055
3058
|
)
|
3056
|
-
# For debugging: set the source high object
|
3057
|
-
refConcatL.properties[:low2high] = self.hdr_id
|
3058
|
-
self.properties[:high2low] = refConcatL
|
3059
|
+
# # For debugging: set the source high object
|
3060
|
+
# refConcatL.properties[:low2high] = self.hdr_id
|
3061
|
+
# self.properties[:high2low] = refConcatL
|
3059
3062
|
return refConcatL
|
3060
3063
|
end
|
3061
3064
|
end
|
@@ -3077,9 +3080,9 @@ module HDLRuby::High
|
|
3077
3080
|
# self.ref.to_low,self.index.to_low)
|
3078
3081
|
refIndexL = HDLRuby::Low::RefIndex.new(self.type.to_low,
|
3079
3082
|
self.ref.to_low,self.index.to_low)
|
3080
|
-
# For debugging: set the source high object
|
3081
|
-
refIndexL.properties[:low2high] = self.hdr_id
|
3082
|
-
self.properties[:high2low] = refIndexL
|
3083
|
+
# # For debugging: set the source high object
|
3084
|
+
# refIndexL.properties[:low2high] = self.hdr_id
|
3085
|
+
# self.properties[:high2low] = refIndexL
|
3083
3086
|
return refIndexL
|
3084
3087
|
end
|
3085
3088
|
end
|
@@ -3101,9 +3104,9 @@ module HDLRuby::High
|
|
3101
3104
|
# self.ref.to_low,self.range.to_low)
|
3102
3105
|
refRangeL = HDLRuby::Low::RefRange.new(self.type.to_low,
|
3103
3106
|
self.ref.to_low,self.range.to_low)
|
3104
|
-
# For debugging: set the source high object
|
3105
|
-
refRangeL.properties[:low2high] = self.hdr_id
|
3106
|
-
self.properties[:high2low] = refRangeL
|
3107
|
+
# # For debugging: set the source high object
|
3108
|
+
# refRangeL.properties[:low2high] = self.hdr_id
|
3109
|
+
# self.properties[:high2low] = refRangeL
|
3107
3110
|
return refRangeL
|
3108
3111
|
end
|
3109
3112
|
end
|
@@ -3124,9 +3127,9 @@ module HDLRuby::High
|
|
3124
3127
|
# self.ref.to_low,self.name)
|
3125
3128
|
refNameL = HDLRuby::Low::RefName.new(self.type.to_low,
|
3126
3129
|
self.ref.to_low,self.name)
|
3127
|
-
# For debugging: set the source high object
|
3128
|
-
refNameL.properties[:low2high] = self.hdr_id
|
3129
|
-
self.properties[:high2low] = refNameL
|
3130
|
+
# # For debugging: set the source high object
|
3131
|
+
# refNameL.properties[:low2high] = self.hdr_id
|
3132
|
+
# self.properties[:high2low] = refNameL
|
3130
3133
|
return refNameL
|
3131
3134
|
end
|
3132
3135
|
end
|
@@ -3161,9 +3164,9 @@ module HDLRuby::High
|
|
3161
3164
|
def to_low
|
3162
3165
|
# return HDLRuby::Low::RefThis.new
|
3163
3166
|
refThisL = HDLRuby::Low::RefThis.new
|
3164
|
-
# For debugging: set the source high object
|
3165
|
-
refThisL.properties[:low2high] = self.hdr_id
|
3166
|
-
self.properties[:high2low] = refThisL
|
3167
|
+
# # For debugging: set the source high object
|
3168
|
+
# refThisL.properties[:low2high] = self.hdr_id
|
3169
|
+
# self.properties[:high2low] = refThisL
|
3167
3170
|
return refThisL
|
3168
3171
|
end
|
3169
3172
|
end
|
@@ -3234,9 +3237,9 @@ module HDLRuby::High
|
|
3234
3237
|
def to_low
|
3235
3238
|
# return HDLRuby::Low::Event.new(self.type,self.ref.to_low)
|
3236
3239
|
eventL = HDLRuby::Low::Event.new(self.type,self.ref.to_low)
|
3237
|
-
# For debugging: set the source high object
|
3238
|
-
eventL.properties[:low2high] = self.hdr_id
|
3239
|
-
self.properties[:high2low] = eventL
|
3240
|
+
# # For debugging: set the source high object
|
3241
|
+
# eventL.properties[:low2high] = self.hdr_id
|
3242
|
+
# self.properties[:high2low] = eventL
|
3240
3243
|
return eventL
|
3241
3244
|
end
|
3242
3245
|
end
|
@@ -3277,9 +3280,9 @@ module HDLRuby::High
|
|
3277
3280
|
# self.right.to_low)
|
3278
3281
|
transmitL = HDLRuby::Low::Transmit.new(self.left.to_low,
|
3279
3282
|
self.right.to_low)
|
3280
|
-
# For debugging: set the source high object
|
3281
|
-
transmitL.properties[:low2high] = self.hdr_id
|
3282
|
-
self.properties[:high2low] = transmitL
|
3283
|
+
# # For debugging: set the source high object
|
3284
|
+
# transmitL.properties[:low2high] = self.hdr_id
|
3285
|
+
# self.properties[:high2low] = transmitL
|
3283
3286
|
return transmitL
|
3284
3287
|
end
|
3285
3288
|
end
|
@@ -3370,9 +3373,9 @@ module HDLRuby::High
|
|
3370
3373
|
# self.right.to_low)
|
3371
3374
|
connectionL = HDLRuby::Low::Connection.new(self.left.to_low,
|
3372
3375
|
self.right.to_low)
|
3373
|
-
# For debugging: set the source high object
|
3374
|
-
connectionL.properties[:low2high] = self.hdr_id
|
3375
|
-
self.properties[:high2low] = connectionL
|
3376
|
+
# # For debugging: set the source high object
|
3377
|
+
# connectionL.properties[:low2high] = self.hdr_id
|
3378
|
+
# self.properties[:high2low] = connectionL
|
3376
3379
|
return connectionL
|
3377
3380
|
end
|
3378
3381
|
end
|
@@ -3484,9 +3487,9 @@ module HDLRuby::High
|
|
3484
3487
|
def to_low(name = self.name)
|
3485
3488
|
# return HDLRuby::Low::SignalI.new(name,self.type.to_low)
|
3486
3489
|
signalIL = HDLRuby::Low::SignalI.new(name,self.type.to_low)
|
3487
|
-
# For debugging: set the source high object
|
3488
|
-
signalIL.properties[:low2high] = self.hdr_id
|
3489
|
-
self.properties[:high2low] = signalIL
|
3490
|
+
# # For debugging: set the source high object
|
3491
|
+
# signalIL.properties[:low2high] = self.hdr_id
|
3492
|
+
# self.properties[:high2low] = signalIL
|
3490
3493
|
return signalIL
|
3491
3494
|
end
|
3492
3495
|
end
|
@@ -3550,9 +3553,9 @@ module HDLRuby::High
|
|
3550
3553
|
# self.value.to_low)
|
3551
3554
|
signalCL = HDLRuby::Low::SignalC.new(name,self.type.to_low,
|
3552
3555
|
self.value.to_low)
|
3553
|
-
# For debugging: set the source high object
|
3554
|
-
signalCL.properties[:low2high] = self.hdr_id
|
3555
|
-
self.properties[:high2low] = signalCL
|
3556
|
+
# # For debugging: set the source high object
|
3557
|
+
# signalCL.properties[:low2high] = self.hdr_id
|
3558
|
+
# self.properties[:high2low] = signalCL
|
3556
3559
|
return signalCL
|
3557
3560
|
end
|
3558
3561
|
end
|
@@ -3763,9 +3766,9 @@ module HDLRuby::High
|
|
3763
3766
|
def to_low
|
3764
3767
|
# Create the resulting block
|
3765
3768
|
blockL = HDLRuby::Low::Block.new(self.mode)
|
3766
|
-
# For debugging: set the source high object
|
3767
|
-
blockL.properties[:low2high] = self.hdr_id
|
3768
|
-
self.properties[:high2low] = blockL
|
3769
|
+
# # For debugging: set the source high object
|
3770
|
+
# blockL.properties[:low2high] = self.hdr_id
|
3771
|
+
# self.properties[:high2low] = blockL
|
3769
3772
|
# Push the namespace for the low generation.
|
3770
3773
|
High.space_push(@namespace)
|
3771
3774
|
# Pushes on the name stack for converting the internals of
|
@@ -3833,9 +3836,9 @@ module HDLRuby::High
|
|
3833
3836
|
def to_low
|
3834
3837
|
# Create the resulting block
|
3835
3838
|
blockL = HDLRuby::Low::TimeBlock.new(self.mode)
|
3836
|
-
# For debugging: set the source high object
|
3837
|
-
blockL.properties[:low2high] = self.hdr_id
|
3838
|
-
self.properties[:high2low] = blockL
|
3839
|
+
# # For debugging: set the source high object
|
3840
|
+
# blockL.properties[:low2high] = self.hdr_id
|
3841
|
+
# self.properties[:high2low] = blockL
|
3839
3842
|
# Add the inner signals
|
3840
3843
|
self.each_inner { |inner| blockL.add_inner(inner.to_low) }
|
3841
3844
|
# Add the statements
|
@@ -3927,9 +3930,9 @@ module HDLRuby::High
|
|
3927
3930
|
eventLs = self.each_event.map { |event| event.to_low }
|
3928
3931
|
# Create and return the resulting low level behavior.
|
3929
3932
|
behaviorL = HDLRuby::Low::Behavior.new(blockL)
|
3930
|
-
# For debugging: set the source high object
|
3931
|
-
behaviorL.properties[:low2high] = self.hdr_id
|
3932
|
-
self.properties[:high2low] = behaviorL
|
3933
|
+
# # For debugging: set the source high object
|
3934
|
+
# behaviorL.properties[:low2high] = self.hdr_id
|
3935
|
+
# self.properties[:high2low] = behaviorL
|
3933
3936
|
eventLs.each(&behaviorL.method(:add_event))
|
3934
3937
|
return behaviorL
|
3935
3938
|
end
|
@@ -3957,9 +3960,9 @@ module HDLRuby::High
|
|
3957
3960
|
eventLs = self.each_event.map { |event| event.to_low }
|
3958
3961
|
# Create and return the resulting low level behavior.
|
3959
3962
|
timeBehaviorL = HDLRuby::Low::TimeBehavior.new(blockL)
|
3960
|
-
# For debugging: set the source high object
|
3961
|
-
timeBehaviorL.properties[:low2high] = self.hdr_id
|
3962
|
-
self.properties[:high2low] = timeBehaviorL
|
3963
|
+
# # For debugging: set the source high object
|
3964
|
+
# timeBehaviorL.properties[:low2high] = self.hdr_id
|
3965
|
+
# self.properties[:high2low] = timeBehaviorL
|
3963
3966
|
eventLs.each(&timeBehaviorL.method(:add_event))
|
3964
3967
|
return timeBehaviorL
|
3965
3968
|
end
|
@@ -4234,6 +4237,22 @@ module HDLRuby::High
|
|
4234
4237
|
# end
|
4235
4238
|
# end
|
4236
4239
|
|
4240
|
+
# Extends the TrueClass class for computing for conversion to expression.
|
4241
|
+
class ::TrueClass
|
4242
|
+
# Converts to a new high-level expression.
|
4243
|
+
def to_expr
|
4244
|
+
return Value.new(Integer,1)
|
4245
|
+
end
|
4246
|
+
end
|
4247
|
+
|
4248
|
+
# Extends the FalseClass class for computing for conversion to expression.
|
4249
|
+
class ::FalseClass
|
4250
|
+
# Converts to a new high-level expression.
|
4251
|
+
def to_expr
|
4252
|
+
return Value.new(Integer,0)
|
4253
|
+
end
|
4254
|
+
end
|
4255
|
+
|
4237
4256
|
# Extends the Integer class for computing for conversion to expression.
|
4238
4257
|
class ::Integer
|
4239
4258
|
# Converts to a new high-level expression.
|