HDLRuby 2.6.22 → 2.7.1
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.
- checksums.yaml +4 -4
- data/lib/HDLRuby/hdr_samples/case_bench.rb +30 -0
- data/lib/HDLRuby/hdr_samples/constant_in_function.rb +1 -1
- data/lib/HDLRuby/hdr_samples/if_bench.rb +24 -0
- data/lib/HDLRuby/hdr_samples/index_bench.rb +37 -0
- data/lib/HDLRuby/hdr_samples/range_bench.rb +47 -0
- data/lib/HDLRuby/hdr_samples/with_casts.rb +30 -0
- data/lib/HDLRuby/hdr_samples/with_concat.rb +26 -0
- data/lib/HDLRuby/hdr_samples/with_ref_array.rb +26 -0
- data/lib/HDLRuby/hdr_samples/with_str2value.rb +14 -0
- data/lib/HDLRuby/hdr_samples/with_subsums.rb +33 -0
- data/lib/HDLRuby/hdr_samples/with_to_a.rb +90 -0
- data/lib/HDLRuby/hdr_samples/with_values.rb +58 -0
- data/lib/HDLRuby/hdrcc.rb +38 -25
- data/lib/HDLRuby/hruby_high.rb +11 -1
- data/lib/HDLRuby/hruby_low.rb +11 -0
- data/lib/HDLRuby/hruby_low2c.rb +1339 -550
- data/lib/HDLRuby/hruby_low_casts_without_expression.rb +78 -55
- data/lib/HDLRuby/hruby_low_mutable.rb +33 -0
- data/lib/HDLRuby/hruby_low_with_port.rb +21 -6
- data/lib/HDLRuby/hruby_low_without_namespace.rb +4 -2
- data/lib/HDLRuby/hruby_tools.rb +8 -1
- data/lib/HDLRuby/hruby_verilog.rb +218 -149
- data/lib/HDLRuby/sim/hruby_sim.h +114 -0
- data/lib/HDLRuby/sim/hruby_sim_calc.c +38 -9
- data/lib/HDLRuby/sim/hruby_sim_stack_calc.c +239 -0
- data/lib/HDLRuby/sim/hruby_sim_stack_calc.c.sav +100 -0
- data/lib/HDLRuby/sim/hruby_value_pool.c +36 -0
- data/lib/HDLRuby/version.rb +1 -1
- metadata +15 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4ca0e2aba73e7ceb55e145dd22286398ae7605d04d46212f870ba895d3f983d9
|
4
|
+
data.tar.gz: 434ae3eb4d974a00ea1510b0e23d66dc51d5f6ac5ef0e4b79af288b5d05f6985
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d097cbd7793ef60fd94c70f7a8acb2e49b13915fd799b7618523c1ba57300195a9ca8a7a61d6e50a8f89779ce6bf64a484bdf5267de93b3159f61186f40e6a82
|
7
|
+
data.tar.gz: 27db7c7e988abe14635a515572c2774e8a76d44e7f0e85bfb6ec8b1c9dfed85f61ef49e1f597c59fc9b725b6aacc53b976f73a3b49f816820c5ca9691e253559
|
@@ -0,0 +1,30 @@
|
|
1
|
+
# Test the comparison operators.
|
2
|
+
|
3
|
+
# A benchmark for the case statement.
|
4
|
+
system :if_bench do
|
5
|
+
[8].inner :x, :y
|
6
|
+
|
7
|
+
par do
|
8
|
+
hcase(x)
|
9
|
+
hwhen(0) { y <= _10000000 }
|
10
|
+
hwhen(1) { y <= _10000001 }
|
11
|
+
hwhen(2) { y <= _10000010 }
|
12
|
+
hwhen(3) { y <= _10000011 }
|
13
|
+
helse { y <= _00000000 }
|
14
|
+
end
|
15
|
+
|
16
|
+
timed do
|
17
|
+
x <= 0
|
18
|
+
!10.ns
|
19
|
+
x <= 1
|
20
|
+
!10.ns
|
21
|
+
x <= 2
|
22
|
+
!10.ns
|
23
|
+
x <= 3
|
24
|
+
!10.ns
|
25
|
+
x <= 4
|
26
|
+
!10.ns
|
27
|
+
x <= 5
|
28
|
+
!10.ns
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
# Test the comparison operators.
|
2
|
+
|
3
|
+
# A benchmark for the if statement.
|
4
|
+
system :if_bench do
|
5
|
+
[8].inner :x, :y, :z
|
6
|
+
|
7
|
+
par do
|
8
|
+
hif(x == y) { z <= 1 }
|
9
|
+
helsif(x < y) { z <= 2 }
|
10
|
+
helse { z <= 3 }
|
11
|
+
end
|
12
|
+
|
13
|
+
timed do
|
14
|
+
x <= 0
|
15
|
+
y <= 0
|
16
|
+
!10.ns
|
17
|
+
x <= 1
|
18
|
+
!10.ns
|
19
|
+
y <= 2
|
20
|
+
!10.ns
|
21
|
+
x <= 2
|
22
|
+
!10.ns
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
# Test the comparison operators.
|
2
|
+
|
3
|
+
# A benchmark for the index access..
|
4
|
+
system :if_bench do
|
5
|
+
[8].inner :x
|
6
|
+
inner :b0,:b1,:b2,:b3,:b4,:b5,:b6,:b7
|
7
|
+
|
8
|
+
par do
|
9
|
+
b0 <= x[0]
|
10
|
+
b1 <= x[1]
|
11
|
+
b2 <= x[2]
|
12
|
+
b3 <= x[3]
|
13
|
+
b4 <= x[4]
|
14
|
+
b5 <= x[5]
|
15
|
+
b6 <= x[6]
|
16
|
+
b7 <= x[7]
|
17
|
+
end
|
18
|
+
|
19
|
+
timed do
|
20
|
+
x <= 0
|
21
|
+
!10.ns
|
22
|
+
x <= 1
|
23
|
+
!10.ns
|
24
|
+
x <= 2
|
25
|
+
!10.ns
|
26
|
+
x <= 3
|
27
|
+
!10.ns
|
28
|
+
x <= 4
|
29
|
+
!10.ns
|
30
|
+
x <= 5
|
31
|
+
!10.ns
|
32
|
+
x[7] <= 1
|
33
|
+
!10.ns
|
34
|
+
x[6] <= 1
|
35
|
+
!10.ns
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
# Test the comparison operators.
|
2
|
+
|
3
|
+
# A benchmark for the index access..
|
4
|
+
system :if_bench do
|
5
|
+
[8].inner :x
|
6
|
+
[2].inner :r0,:r1,:r2,:r3
|
7
|
+
|
8
|
+
par do
|
9
|
+
r0 <= x[1..0]
|
10
|
+
r1 <= x[3..2]
|
11
|
+
r2 <= x[5..4]
|
12
|
+
r3 <= x[7..6]
|
13
|
+
end
|
14
|
+
|
15
|
+
timed do
|
16
|
+
x <= 0
|
17
|
+
!10.ns
|
18
|
+
x <= 1
|
19
|
+
!10.ns
|
20
|
+
x <= 2
|
21
|
+
!10.ns
|
22
|
+
x <= 3
|
23
|
+
!10.ns
|
24
|
+
x <= 4
|
25
|
+
!10.ns
|
26
|
+
x <= 5
|
27
|
+
!10.ns
|
28
|
+
x <= 6
|
29
|
+
!10.ns
|
30
|
+
x <= 7
|
31
|
+
!10.ns
|
32
|
+
x <= 8
|
33
|
+
!10.ns
|
34
|
+
x <= 81
|
35
|
+
!10.ns
|
36
|
+
x <= 123
|
37
|
+
!10.ns
|
38
|
+
x <= 0
|
39
|
+
!10.ns
|
40
|
+
x[7..6] <= 3
|
41
|
+
!10.ns
|
42
|
+
x[5..4] <= 2
|
43
|
+
!10.ns
|
44
|
+
x[3..2] <= 1
|
45
|
+
!10.ns
|
46
|
+
end
|
47
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
|
2
|
+
# A benchmark for testing the casts.
|
3
|
+
system :with_cast do
|
4
|
+
[8].inner :count
|
5
|
+
[8].inner :val0,:val1
|
6
|
+
[9].inner :val2,:val3
|
7
|
+
|
8
|
+
timed do
|
9
|
+
val0 <= _11111111
|
10
|
+
val1 <= _00000010
|
11
|
+
val3 <= _000000000
|
12
|
+
count <= 0
|
13
|
+
!10.ns
|
14
|
+
count <= 1
|
15
|
+
val2 <= val0 + val1
|
16
|
+
val3 <= val3 + 1
|
17
|
+
!10.ns
|
18
|
+
count <= 2
|
19
|
+
val2 <= val0.as(bit[9]) + val1
|
20
|
+
val3 <= val3.as(bit[10]) + 1
|
21
|
+
!10.ns
|
22
|
+
count <= 3
|
23
|
+
val2 <= (val0 + val1).as(bit[9])
|
24
|
+
val3 <= (val3 + 1).as(bit[10])
|
25
|
+
!10.ns
|
26
|
+
count <= 4
|
27
|
+
val2 <= (val0 + val1).as(bit[8])
|
28
|
+
!10.ns
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
|
2
|
+
# A benchmark for testing the concat.
|
3
|
+
system :with_concat do
|
4
|
+
[8].inner :count
|
5
|
+
[4].inner :val0,:val1
|
6
|
+
[8].inner :val2
|
7
|
+
[12].inner :val3
|
8
|
+
|
9
|
+
val2 <= [val0,val1]
|
10
|
+
val3 <= [val2,val0]
|
11
|
+
|
12
|
+
timed do
|
13
|
+
val0 <= _1111
|
14
|
+
val1 <= _0000
|
15
|
+
count <= 0
|
16
|
+
!10.ns
|
17
|
+
val0 <= _1001
|
18
|
+
val1 <= _0110
|
19
|
+
count <= 1
|
20
|
+
!10.ns
|
21
|
+
val0 <= _1010
|
22
|
+
val1 <= _0101
|
23
|
+
count <= 2
|
24
|
+
!10.ns
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
|
2
|
+
# A benchmark for testing array references.
|
3
|
+
system :with_concat do
|
4
|
+
[8].inner :count
|
5
|
+
[8].inner :val0,:val1
|
6
|
+
[3].inner :val2
|
7
|
+
[8].inner :val3
|
8
|
+
|
9
|
+
val2 <= val0[4..2]
|
10
|
+
val3[6..3] <= val1[7..4]
|
11
|
+
|
12
|
+
timed do
|
13
|
+
val0 <= _00001111
|
14
|
+
val1 <= _11000011
|
15
|
+
count <= 0
|
16
|
+
!10.ns
|
17
|
+
val0 <= _11110000
|
18
|
+
val1 <= _00111100
|
19
|
+
count <= 1
|
20
|
+
!10.ns
|
21
|
+
val0 <= _10101010
|
22
|
+
val1 <= _01010101
|
23
|
+
count <= 2
|
24
|
+
!10.ns
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
|
2
|
+
# A benchmark for sum of sub parts of a vector.
|
3
|
+
system :with_concat do
|
4
|
+
[8].inner :count
|
5
|
+
[16].inner :val0, :val1, :val2, :val3, :val4, :val5, :val6
|
6
|
+
bs = []
|
7
|
+
10.times do |i|
|
8
|
+
bs << [16].inner(:"b#{i}")
|
9
|
+
end
|
10
|
+
|
11
|
+
vals = [val1,val2,val3,val4]
|
12
|
+
par do
|
13
|
+
vals.each.with_index { |val,i| val <= val0[(i*4+3)..i*4] }
|
14
|
+
end
|
15
|
+
val5 <= vals.reduce(:+)
|
16
|
+
|
17
|
+
par do
|
18
|
+
bs.each.with_index { |b,i| b <= val0[i..i] }
|
19
|
+
end
|
20
|
+
val6 <= bs.reduce(:+)
|
21
|
+
|
22
|
+
timed do
|
23
|
+
val0 <= _1111000011110000
|
24
|
+
count <= 0
|
25
|
+
!10.ns
|
26
|
+
val0 <= _0000111100001111
|
27
|
+
count <= 1
|
28
|
+
!10.ns
|
29
|
+
val0 <= _1010101010101010
|
30
|
+
count <= 2
|
31
|
+
!10.ns
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,90 @@
|
|
1
|
+
|
2
|
+
system :four2eight do
|
3
|
+
[4].input :four
|
4
|
+
output :o0, :o1, :o2, :o3, :o4, :o5, :o6, :o7
|
5
|
+
|
6
|
+
o0 <= four[0]; o1 <= four[1]; o2 <= four[2]; o3 <= four[3]
|
7
|
+
o4 <= four[0]; o5 <= four[1]; o6 <= four[2]; o7 <= four[3]
|
8
|
+
end
|
9
|
+
|
10
|
+
system :four2sixfour do
|
11
|
+
[4].input :four
|
12
|
+
output :o00, :o01, :o02, :o03, :o04, :o05, :o06, :o07,
|
13
|
+
:o08, :o09, :o0A, :o0B, :o0C, :o0D, :o0E, :o0F,
|
14
|
+
:o10, :o11, :o12, :o13, :o14, :o15, :o16, :o17,
|
15
|
+
:o18, :o19, :o1A, :o1B, :o1C, :o1D, :o1E, :o1F,
|
16
|
+
:o20, :o21, :o22, :o23, :o24, :o25, :o26, :o27,
|
17
|
+
:o28, :o29, :o2A, :o2B, :o2C, :o2D, :o2E, :o2F,
|
18
|
+
:o30, :o31, :o32, :o33, :o34, :o35, :o36, :o37,
|
19
|
+
:o38, :o39, :o3A, :o3B, :o3C, :o3D, :o3E, :o3F
|
20
|
+
|
21
|
+
|
22
|
+
o00 <= four[0]; o01 <= four[1]; o02 <= four[2]; o03 <= four[3]
|
23
|
+
o04 <= four[0]; o05 <= four[1]; o06 <= four[2]; o07 <= four[3]
|
24
|
+
o08 <= four[0]; o09 <= four[1]; o0A <= four[2]; o0B <= four[3]
|
25
|
+
o0C <= four[0]; o0D <= four[1]; o0E <= four[2]; o0F <= four[3]
|
26
|
+
o10 <= four[0]; o11 <= four[1]; o12 <= four[2]; o13 <= four[3]
|
27
|
+
o14 <= four[0]; o15 <= four[1]; o16 <= four[2]; o17 <= four[3]
|
28
|
+
o18 <= four[0]; o19 <= four[1]; o1A <= four[2]; o1B <= four[3]
|
29
|
+
o1C <= four[0]; o1D <= four[1]; o1E <= four[2]; o1F <= four[3]
|
30
|
+
o20 <= four[0]; o21 <= four[1]; o22 <= four[2]; o23 <= four[3]
|
31
|
+
o24 <= four[0]; o25 <= four[1]; o26 <= four[2]; o27 <= four[3]
|
32
|
+
o28 <= four[0]; o29 <= four[1]; o2A <= four[2]; o2B <= four[3]
|
33
|
+
o2C <= four[0]; o2D <= four[1]; o2E <= four[2]; o2F <= four[3]
|
34
|
+
o30 <= four[0]; o31 <= four[1]; o32 <= four[2]; o33 <= four[3]
|
35
|
+
o34 <= four[0]; o35 <= four[1]; o36 <= four[2]; o37 <= four[3]
|
36
|
+
o38 <= four[0]; o39 <= four[1]; o3A <= four[2]; o3B <= four[3]
|
37
|
+
o3C <= four[0]; o3D <= four[1]; o3E <= four[2]; o3F <= four[3]
|
38
|
+
end
|
39
|
+
|
40
|
+
|
41
|
+
|
42
|
+
# A benchmark for testing some enumarable properties of expression (to_a).
|
43
|
+
system :with_to_a_bench do
|
44
|
+
[4].inner :four
|
45
|
+
[8].inner :val, :res, :eight
|
46
|
+
[64].inner :val64, :res64, :sixfour
|
47
|
+
|
48
|
+
vals = val.to_a
|
49
|
+
val64s = val64.to_a
|
50
|
+
|
51
|
+
four2eight(:my_four2eight).(four,*(eight.to_a.reverse))
|
52
|
+
four2sixfour(:my_four2sixfour).(four,*(sixfour.to_a.reverse))
|
53
|
+
|
54
|
+
timed do
|
55
|
+
val <= _01101010
|
56
|
+
res <= vals.reverse
|
57
|
+
!10.ns
|
58
|
+
val64 <= _0110101001101010011010100110101001101010011010100110101001101010
|
59
|
+
res64 <= val64s.reverse
|
60
|
+
!10.ns
|
61
|
+
val <= _00000000
|
62
|
+
val64 <= _0000000000000000000000000000000000000000000000000000000000000000
|
63
|
+
!10.ns
|
64
|
+
vals.each.with_index do |v,i|
|
65
|
+
v <= (i/2) & _1
|
66
|
+
end
|
67
|
+
res <= val
|
68
|
+
!10.ns
|
69
|
+
val64s.each.with_index do |v,i|
|
70
|
+
v <= (i/2) & _1
|
71
|
+
end
|
72
|
+
res64 <= val64
|
73
|
+
!10.ns
|
74
|
+
val <= _01010011
|
75
|
+
!10.ns
|
76
|
+
8.times do |i|
|
77
|
+
val64s[i] <= val[i]
|
78
|
+
val64s[i+32] <= val[i]
|
79
|
+
val64s[i+56] <= val[i]
|
80
|
+
end
|
81
|
+
res64 <= val64
|
82
|
+
!10.ns
|
83
|
+
four <= _0000
|
84
|
+
!10.ns
|
85
|
+
four <= _0001
|
86
|
+
!10.ns
|
87
|
+
four <= _1100
|
88
|
+
!10.ns
|
89
|
+
end
|
90
|
+
end
|
@@ -0,0 +1,58 @@
|
|
1
|
+
|
2
|
+
# A benchmark for testing the literal values.
|
3
|
+
system :with_values do
|
4
|
+
inner :v1
|
5
|
+
[8].inner :v8
|
6
|
+
[16].inner :v16
|
7
|
+
[32].inner :v32
|
8
|
+
[56].inner :v56
|
9
|
+
[64].inner :v64
|
10
|
+
[96].inner :v96
|
11
|
+
|
12
|
+
|
13
|
+
timed do
|
14
|
+
v1 <= 0
|
15
|
+
v8 <= 0
|
16
|
+
v16 <= 0
|
17
|
+
v32 <= 0
|
18
|
+
v56 <= 0
|
19
|
+
v64 <= 0
|
20
|
+
v96 <= 0
|
21
|
+
!10.ns
|
22
|
+
v1 <= 1
|
23
|
+
v8 <= 1
|
24
|
+
v16 <= 1
|
25
|
+
v32 <= 1
|
26
|
+
v56 <= 1
|
27
|
+
v64 <= 1
|
28
|
+
v96 <= 1
|
29
|
+
!10.ns
|
30
|
+
v8 <= 128
|
31
|
+
v16 <= 128
|
32
|
+
v32 <= 128
|
33
|
+
v56 <= 128
|
34
|
+
v64 <= 128
|
35
|
+
v96 <= 128
|
36
|
+
!10.ns
|
37
|
+
v16 <= 0x1000
|
38
|
+
v32 <= 0x1000
|
39
|
+
v56 <= 0x1000
|
40
|
+
v64 <= 0x1000
|
41
|
+
v96 <= 0x1000
|
42
|
+
!10.ns
|
43
|
+
v32 <= 0x10000000
|
44
|
+
v56 <= 0x10000000
|
45
|
+
v64 <= 0x10000000
|
46
|
+
v96 <= 0x10000000
|
47
|
+
!10.ns
|
48
|
+
v56 <= 0x10000000000000
|
49
|
+
v64 <= 0x10000000000000
|
50
|
+
v96 <= 0x10000000000000
|
51
|
+
!10.ns
|
52
|
+
v64 <= 0x1000000000000000
|
53
|
+
v96 <= 0x1000000000000000
|
54
|
+
!10.ns
|
55
|
+
v96 <= 0x1000000000000000000
|
56
|
+
!10.ns
|
57
|
+
end
|
58
|
+
end
|
data/lib/HDLRuby/hdrcc.rb
CHANGED
@@ -486,6 +486,8 @@ if $options[:syntax] then
|
|
486
486
|
$output << $loader.show_all
|
487
487
|
exit
|
488
488
|
end
|
489
|
+
HDLRuby.show Time.now
|
490
|
+
HDLRuby.show "##### Starting parser #####"
|
489
491
|
|
490
492
|
if $options[:debug] then
|
491
493
|
# Debug mode, no error management.
|
@@ -608,26 +610,29 @@ elsif $options[:clang] then
|
|
608
610
|
$outfile = File.open($hname,"w")
|
609
611
|
# Adds the generated globals
|
610
612
|
$top_system.each_systemT_deep do |systemT|
|
611
|
-
# For the h file.
|
612
|
-
# hname = $output + "/" +
|
613
|
-
# HDLRuby::Low::Low2C.c_name(systemT.name) +
|
614
|
-
# ".h"
|
615
|
-
# hnames << File.basename(hname)
|
616
|
-
# # Open the file for current systemT
|
617
|
-
# output = File.open(hname,"w")
|
613
|
+
# # For the h file.
|
614
|
+
# # hname = $output + "/" +
|
615
|
+
# # HDLRuby::Low::Low2C.c_name(systemT.name) +
|
616
|
+
# # ".h"
|
617
|
+
# # hnames << File.basename(hname)
|
618
|
+
# # # Open the file for current systemT
|
619
|
+
# # output = File.open(hname,"w")
|
618
620
|
# Generate the H code in to.
|
619
|
-
$outfile << systemT.to_ch
|
620
|
-
|
621
|
-
#
|
622
|
-
# #
|
623
|
-
#
|
621
|
+
# $outfile << systemT.to_ch
|
622
|
+
systemT.to_ch($outfile)
|
623
|
+
# # # Close the file.
|
624
|
+
# # output.close
|
625
|
+
# # # Clears the name.
|
626
|
+
# # hname = nil
|
624
627
|
end
|
625
628
|
# Adds the globals from the non-HDLRuby code
|
626
629
|
$non_hdlruby.each do |code|
|
627
630
|
code.each_chunk do |chunk|
|
628
631
|
if chunk.name == :sim then
|
629
|
-
$outfile << "extern " +
|
630
|
-
|
632
|
+
# $outfile << "extern " +
|
633
|
+
# HDLRuby::Low::Low2C.prototype(chunk.to_c)
|
634
|
+
$outfile << "extern "
|
635
|
+
$outfile << HDLRuby::Low::Low2C.prototype(chunk.to_c(""))
|
631
636
|
end
|
632
637
|
end
|
633
638
|
end
|
@@ -659,7 +664,8 @@ elsif $options[:clang] then
|
|
659
664
|
# Open the file for current systemT
|
660
665
|
outfile = File.open(name,"w")
|
661
666
|
# Generate the C code in to.
|
662
|
-
outfile << systemT.to_c(0,*$hnames)
|
667
|
+
# outfile << systemT.to_c(0,*$hnames)
|
668
|
+
systemT.to_c(outfile,0,*$hnames)
|
663
669
|
# Close the file.
|
664
670
|
outfile.close
|
665
671
|
# Clears the name.
|
@@ -668,8 +674,10 @@ elsif $options[:clang] then
|
|
668
674
|
else
|
669
675
|
# Single file generation mode.
|
670
676
|
$top_system.each_systemT_deep.reverse_each do |systemT|
|
671
|
-
$output << systemT.to_ch
|
672
|
-
$output
|
677
|
+
# $output << systemT.to_ch
|
678
|
+
systemT.to_ch($output)
|
679
|
+
# $output << systemT.to_c
|
680
|
+
systemT.to_c($output)
|
673
681
|
end
|
674
682
|
# Adds the main code.
|
675
683
|
$output << HDLRuby::Low::Low2C.main(top_system,
|
@@ -709,17 +717,19 @@ elsif $options[:verilog] then
|
|
709
717
|
# top_system = $top_system
|
710
718
|
# Make description compatible with verilog generation.
|
711
719
|
$top_system.each_systemT_deep do |systemT|
|
712
|
-
HDLRuby.show "casts_without_expression! step..."
|
713
|
-
systemT.casts_without_expression!
|
714
|
-
HDLRuby.show Time.now
|
720
|
+
# HDLRuby.show "casts_without_expression! step..."
|
721
|
+
# systemT.casts_without_expression!
|
722
|
+
# HDLRuby.show Time.now
|
715
723
|
HDLRuby.show "to_upper_space! step..."
|
716
724
|
systemT.to_upper_space!
|
717
725
|
HDLRuby.show Time.now
|
718
|
-
|
719
|
-
|
720
|
-
|
721
|
-
|
722
|
-
|
726
|
+
end
|
727
|
+
HDLRuby.show "to_global_space! step (global)..."
|
728
|
+
$top_system.to_global_systemTs!
|
729
|
+
HDLRuby.show Time.now
|
730
|
+
$top_system.each_systemT_deep do |systemT|
|
731
|
+
## systemT.break_types!
|
732
|
+
## systemT.expand_types!
|
723
733
|
HDLRuby.show "par_in_seq2seq! step..."
|
724
734
|
systemT.par_in_seq2seq!
|
725
735
|
HDLRuby.show Time.now
|
@@ -818,6 +828,9 @@ elsif $options[:vhdl] then
|
|
818
828
|
end
|
819
829
|
end
|
820
830
|
|
831
|
+
HDLRuby.show "##### Code generated #####"
|
832
|
+
HDLRuby.show Time.now
|
833
|
+
|
821
834
|
# # Apply the post drivers if any.
|
822
835
|
# Hdecorator.each_with_property(:post_driver) do |obj, value|
|
823
836
|
# # Load the driver.
|
data/lib/HDLRuby/hruby_high.rb
CHANGED
@@ -1960,6 +1960,9 @@ module HDLRuby::High
|
|
1960
1960
|
&ruby_block)
|
1961
1961
|
# ruby_block.call(*args)
|
1962
1962
|
end
|
1963
|
+
# sub do
|
1964
|
+
# ruby_block.call(*args,*other_block)
|
1965
|
+
# end
|
1963
1966
|
end
|
1964
1967
|
else
|
1965
1968
|
define_method(name.to_sym) do |*args,&other_block|
|
@@ -1968,6 +1971,9 @@ module HDLRuby::High
|
|
1968
1971
|
HDLRuby::High.top_user.instance_exec(*args,*other_block,
|
1969
1972
|
&ruby_block)
|
1970
1973
|
end
|
1974
|
+
# sub do
|
1975
|
+
# ruby_block.call(*args,*other_block)
|
1976
|
+
# end
|
1971
1977
|
end
|
1972
1978
|
end
|
1973
1979
|
end
|
@@ -2499,7 +2505,11 @@ module HDLRuby::High
|
|
2499
2505
|
|
2500
2506
|
# Casts as +type+.
|
2501
2507
|
def as(type)
|
2502
|
-
|
2508
|
+
if (self.parent)
|
2509
|
+
return Cast.new(type.to_type,self.to_expr)
|
2510
|
+
else
|
2511
|
+
return Cast.new(type.to_type,self)
|
2512
|
+
end
|
2503
2513
|
end
|
2504
2514
|
|
2505
2515
|
# Casts to a bit vector type.
|
data/lib/HDLRuby/hruby_low.rb
CHANGED
@@ -63,6 +63,17 @@ module HDLRuby::Low
|
|
63
63
|
cur = cur.parent until cur.is_a?(Scope)
|
64
64
|
return cur
|
65
65
|
end
|
66
|
+
|
67
|
+
# Get the full parents hierachy.
|
68
|
+
def hierarchy
|
69
|
+
res = []
|
70
|
+
cur = self
|
71
|
+
while(cur) do
|
72
|
+
res << cur
|
73
|
+
cur = cur.parent
|
74
|
+
end
|
75
|
+
return res
|
76
|
+
end
|
66
77
|
end
|
67
78
|
|
68
79
|
|