HDLRuby 2.11.11 → 2.11.12
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +55 -18
- 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_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/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 +11 -11
- 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_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_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 +14 -1
- data/lib/HDLRuby/hruby_bstr.rb +10 -5
- data/lib/HDLRuby/hruby_high.rb +114 -27
- data/lib/HDLRuby/hruby_low.rb +187 -16
- data/lib/HDLRuby/hruby_low2c.rb +71 -11
- data/lib/HDLRuby/hruby_low2vhd.rb +2 -1
- data/lib/HDLRuby/hruby_low_fix_types.rb +1 -0
- data/lib/HDLRuby/hruby_low_mutable.rb +30 -1
- data/lib/HDLRuby/hruby_low_resolve.rb +15 -2
- data/lib/HDLRuby/hruby_low_without_concat.rb +28 -8
- data/lib/HDLRuby/hruby_low_without_parinseq.rb +14 -4
- data/lib/HDLRuby/hruby_low_without_select.rb +2 -2
- data/lib/HDLRuby/hruby_low_without_subsignals.rb +279 -0
- data/lib/HDLRuby/hruby_rcsim.rb +80 -71
- data/lib/HDLRuby/hruby_rsim.rb +132 -7
- data/lib/HDLRuby/hruby_rsim_vcd.rb +99 -27
- data/lib/HDLRuby/hruby_values.rb +35 -31
- data/lib/HDLRuby/std/bram.rb +22 -0
- data/lib/HDLRuby/std/fixpoint.rb +2 -2
- data/lib/HDLRuby/std/fsm.rb +20 -3
- data/lib/HDLRuby/std/function_generator.rb +2 -2
- data/lib/HDLRuby/version.rb +1 -1
- metadata +7 -3
- data/lib/HDLRuby/hdr_samples/sumprod.rb +0 -29
@@ -1,14 +1,48 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
output :q
|
4
|
-
|
5
|
-
par(clk.posedge) { q <= d & ~rst }
|
1
|
+
typedef(:some_struct) do
|
2
|
+
{ sub2: bit, sub3: bit[2] }
|
6
3
|
end
|
7
4
|
|
8
5
|
system :my_system do
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
6
|
+
inner :x
|
7
|
+
[3].inner :y
|
8
|
+
inner :z
|
9
|
+
{ sub0: bit, sub1: bit[2]}.inner :sigA
|
10
|
+
some_struct.inner :sigB, :sigC
|
11
|
+
|
12
|
+
sigC <= sigA
|
13
|
+
|
14
|
+
par(sigA) { z <= ~z }
|
15
|
+
|
16
|
+
|
17
|
+
timed do
|
18
|
+
z <= 0
|
19
|
+
x <= 1
|
20
|
+
y <= _b000
|
21
|
+
!10.ns
|
22
|
+
sigA.sub0 <= 0
|
23
|
+
sigA.sub1 <= x
|
24
|
+
sigB.sub2 <= 0
|
25
|
+
sigB.sub3 <= x
|
26
|
+
!10.ns
|
27
|
+
sigA.sub0 <= x
|
28
|
+
sigA.sub1 <= ~sigB.sub3
|
29
|
+
sigB.sub2 <= x
|
30
|
+
sigB.sub3 <= ~sigA.sub1
|
31
|
+
!10.ns
|
32
|
+
sigA <= _b111
|
33
|
+
sigB <= _b111
|
34
|
+
!10.ns
|
35
|
+
sigA <= _b100
|
36
|
+
!10.ns
|
37
|
+
y <= sigA
|
38
|
+
sigB <= sigA
|
39
|
+
!10.ns
|
40
|
+
sigA <= _b011
|
41
|
+
!10.ns
|
42
|
+
sigB <= sigA
|
43
|
+
!10.ns
|
44
|
+
sigB <= sigA + 1
|
45
|
+
!10.ns
|
46
|
+
end
|
47
|
+
|
14
48
|
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
require 'std/bram.rb'
|
2
|
+
|
3
|
+
include HDLRuby::High::Std
|
4
|
+
|
5
|
+
|
6
|
+
# A system testing the memory.
|
7
|
+
system :bram_test do
|
8
|
+
|
9
|
+
widthA = 16
|
10
|
+
widthD = 8
|
11
|
+
|
12
|
+
|
13
|
+
input :clk,:rwb
|
14
|
+
[widthA].inner :addr
|
15
|
+
[widthD].inner :din,:dout
|
16
|
+
|
17
|
+
bram(widthA,widthD).(:bramI).(clk,rwb,addr,din,dout)
|
18
|
+
|
19
|
+
timed do
|
20
|
+
clk <= 0
|
21
|
+
rwb <= 1
|
22
|
+
addr <= 0
|
23
|
+
din <= 0
|
24
|
+
!10.ns
|
25
|
+
clk <= 1
|
26
|
+
!10.ns
|
27
|
+
rwb <= 1
|
28
|
+
repeat(16) do
|
29
|
+
clk <= 0
|
30
|
+
!10.ns
|
31
|
+
clk <= 1
|
32
|
+
addr <= addr + 1
|
33
|
+
din <= din + 1
|
34
|
+
!10.ns
|
35
|
+
end
|
36
|
+
rwb <= 0
|
37
|
+
repeat(16) do
|
38
|
+
clk <= 0
|
39
|
+
!10.ns
|
40
|
+
clk <= 1
|
41
|
+
addr <= addr-1
|
42
|
+
!10.ns
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
@@ -10,16 +10,16 @@ system :with_concat do
|
|
10
10
|
val3 <= [val2,val0]
|
11
11
|
|
12
12
|
timed do
|
13
|
-
val0 <=
|
14
|
-
val1 <=
|
13
|
+
val0 <= _b1111
|
14
|
+
val1 <= _b0000
|
15
15
|
count <= 0
|
16
16
|
!10.ns
|
17
|
-
val0 <=
|
18
|
-
val1 <=
|
17
|
+
val0 <= _b1001
|
18
|
+
val1 <= _b0110
|
19
19
|
count <= 1
|
20
20
|
!10.ns
|
21
|
-
val0 <=
|
22
|
-
val1 <=
|
21
|
+
val0 <= _b1010
|
22
|
+
val1 <= _b0101
|
23
23
|
count <= 2
|
24
24
|
!10.ns
|
25
25
|
end
|
@@ -12,8 +12,8 @@ system :channel_connector do
|
|
12
12
|
address_width = 4 # lutのアドレスのビット幅
|
13
13
|
typ = signed[integer_width + decimal_width] # データ型
|
14
14
|
|
15
|
-
inputs_x =
|
16
|
-
inputs_h =
|
15
|
+
inputs_x = _b00010011
|
16
|
+
inputs_h = _b10100001
|
17
17
|
columns = [2, 2, 1]
|
18
18
|
|
19
19
|
inner :clk, # clock
|
@@ -9,11 +9,18 @@ end
|
|
9
9
|
system :def_bench do
|
10
10
|
|
11
11
|
[2].inner :addr
|
12
|
-
[8].inner :val0, :val1
|
12
|
+
[8].inner :val0, :val1, :val2, :val3
|
13
13
|
|
14
14
|
par do
|
15
|
-
val0 <= lut84([
|
16
|
-
val1 <= lut84([
|
15
|
+
val0 <= lut84([_b8d0,_b8d1,_b8d4,_b8d9],addr)
|
16
|
+
val1 <= lut84([_b8d0,_b8d1,_b8d4,_b8d9],3-addr)
|
17
|
+
end
|
18
|
+
|
19
|
+
bit[8][-4].inner otbl: [_b8d0,_b8d1,_b8d4,_b8d9]
|
20
|
+
|
21
|
+
par do
|
22
|
+
val2 <= otbl[addr]
|
23
|
+
val3 <= otbl[3-addr]
|
17
24
|
end
|
18
25
|
|
19
26
|
timed do
|
@@ -0,0 +1,44 @@
|
|
1
|
+
# A sample for testing define operator.
|
2
|
+
|
3
|
+
typedef :sat100 do |width|
|
4
|
+
signed[width]
|
5
|
+
end
|
6
|
+
|
7
|
+
sat100.define_operator(:+) do |width, x,y|
|
8
|
+
tmp = x.as(bit[width]) + y.as(bit[width])
|
9
|
+
mux(tmp > 100,tmp,100)
|
10
|
+
end
|
11
|
+
|
12
|
+
typedef :sat do |width, max|
|
13
|
+
signed[width]
|
14
|
+
end
|
15
|
+
|
16
|
+
sat.define_operator(:+) do |width,max, x,y|
|
17
|
+
tmp = x.as(bit[width]) + y.as(bit[width])
|
18
|
+
mux(tmp > max, tmp, max)
|
19
|
+
end
|
20
|
+
|
21
|
+
|
22
|
+
system :bench_sat do
|
23
|
+
sat100(8).inner :x,:y,:z
|
24
|
+
sat(8,55).inner :u,:v,:w
|
25
|
+
|
26
|
+
timed do
|
27
|
+
x <= 40
|
28
|
+
y <= 32
|
29
|
+
z <= x+y
|
30
|
+
!10.ns
|
31
|
+
u <= 20
|
32
|
+
v <= 24
|
33
|
+
w <= u+v
|
34
|
+
!10.ns
|
35
|
+
x <= 70
|
36
|
+
y <= 32
|
37
|
+
z <= x+y
|
38
|
+
!10.ns
|
39
|
+
u <= 50
|
40
|
+
v <= 24
|
41
|
+
w <= u+v
|
42
|
+
!10.ns
|
43
|
+
end
|
44
|
+
end
|
@@ -14,9 +14,9 @@ system :fix_test do
|
|
14
14
|
|
15
15
|
# Performs calculation between then
|
16
16
|
timed do
|
17
|
-
# x <=
|
17
|
+
# x <= _b00110011 # 3.1875
|
18
18
|
x <= 3.1875.to_fix(4)
|
19
|
-
y <=
|
19
|
+
y <= _b01000000 # 4
|
20
20
|
!10.ns
|
21
21
|
z <= x + y
|
22
22
|
!10.ns
|
@@ -24,8 +24,8 @@ system :fix_test do
|
|
24
24
|
!10.ns
|
25
25
|
z <= z / x
|
26
26
|
!10.ns
|
27
|
-
a <=
|
28
|
-
b <=
|
27
|
+
a <= _b00010000
|
28
|
+
b <= _b00001111
|
29
29
|
!10.ns
|
30
30
|
c <= a * b
|
31
31
|
d <= 0
|
@@ -49,15 +49,15 @@ system :fix_test do
|
|
49
49
|
!10.ns
|
50
50
|
c <= a * b
|
51
51
|
!10.ns
|
52
|
-
# a <=
|
53
|
-
# b <=
|
54
|
-
a <=
|
55
|
-
b <=
|
52
|
+
# a <= _b00010000
|
53
|
+
# b <= _b00010101
|
54
|
+
a <= _sb0000111x
|
55
|
+
b <= _sb1110011x
|
56
56
|
!10.ns
|
57
|
-
# a <= a &
|
58
|
-
# b <= b |
|
59
|
-
a <= a |
|
60
|
-
b <= b |
|
57
|
+
# a <= a & _b11111110
|
58
|
+
# b <= b | _b00000001
|
59
|
+
a <= a | _b00000001
|
60
|
+
b <= b | _b00000001
|
61
61
|
!10.ns
|
62
62
|
c <= a * b
|
63
63
|
!10.ns
|
@@ -2,9 +2,9 @@
|
|
2
2
|
# A benchmark for testing the initialization of signals.
|
3
3
|
system :with_init do
|
4
4
|
[8].constant cst0: 127
|
5
|
-
constant cst1:
|
6
|
-
[8].inner sig0:
|
7
|
-
inner sig1:
|
5
|
+
constant cst1: _b1
|
6
|
+
[8].inner sig0: _b10000000
|
7
|
+
inner sig1: _b1
|
8
8
|
[8].inner :sig2
|
9
9
|
|
10
10
|
timed do
|
@@ -0,0 +1,21 @@
|
|
1
|
+
# A benchmark for the cases where a left value is also a right value
|
2
|
+
# in a block without sensitivity list.
|
3
|
+
system :leftright_bench do
|
4
|
+
[8].inner :l,:r0,:r1,:lr
|
5
|
+
|
6
|
+
par do
|
7
|
+
lr <= r0*2
|
8
|
+
l <= [lr[7],lr[6..0]].to_expr + r1
|
9
|
+
end
|
10
|
+
|
11
|
+
timed do
|
12
|
+
!10.ns
|
13
|
+
r0 <= 1
|
14
|
+
!10.ns
|
15
|
+
r1 <= 2
|
16
|
+
!10.ns
|
17
|
+
r0 <= 3
|
18
|
+
r1 <= 4
|
19
|
+
!10.ns
|
20
|
+
end
|
21
|
+
end
|
@@ -6,33 +6,33 @@ system :with_reduce_bench do
|
|
6
6
|
[64].inner :val64
|
7
7
|
|
8
8
|
timed do
|
9
|
-
val <=
|
10
|
-
res <= val.reduce(
|
9
|
+
val <= _b01101010
|
10
|
+
res <= val.reduce(_b00000000,:+)
|
11
11
|
!10.ns
|
12
12
|
val <= _01010010
|
13
|
-
res <= val.reduce(
|
13
|
+
res <= val.reduce(_b00000000,:+)
|
14
14
|
!10.ns
|
15
15
|
val <= _01101111
|
16
|
-
res <= val.reduce(
|
16
|
+
res <= val.reduce(_b00000000,:+)
|
17
17
|
!10.ns
|
18
|
-
val64 <=
|
19
|
-
res <= val64.reduce(
|
18
|
+
val64 <= _b0110101001101010011010100110101001101010011010100110101001101010
|
19
|
+
res <= val64.reduce(_b00000000,:+)
|
20
20
|
!10.ns
|
21
21
|
res <= val64[7..0]
|
22
22
|
!10.ns
|
23
|
-
res <= res.reduce(
|
23
|
+
res <= res.reduce(_b00000000,:+)
|
24
24
|
!10.ns
|
25
25
|
res <= val64[63..60]
|
26
26
|
!10.ns
|
27
|
-
res <= res.reduce(
|
27
|
+
res <= res.reduce(_b00000000,:+)
|
28
28
|
!10.ns
|
29
29
|
val64 <= ~(val64 ^ val64)
|
30
|
-
res <= val64.reduce(
|
30
|
+
res <= val64.reduce(_b00000000,:+)
|
31
31
|
!10.ns
|
32
|
-
val64[0] <=
|
33
|
-
val64[3] <=
|
34
|
-
val64[63] <=
|
35
|
-
res <= val64.reduce(
|
32
|
+
val64[0] <= _b0
|
33
|
+
val64[3] <= _b0
|
34
|
+
val64[63] <= _b0
|
35
|
+
res <= val64.reduce(_b00000000,:+)
|
36
36
|
!10.ns
|
37
37
|
end
|
38
38
|
end
|
@@ -10,16 +10,16 @@ system :with_concat do
|
|
10
10
|
val3[6..3] <= val1[7..4]
|
11
11
|
|
12
12
|
timed do
|
13
|
-
val0 <=
|
14
|
-
val1 <=
|
13
|
+
val0 <= _b00001111
|
14
|
+
val1 <= _b11000011
|
15
15
|
count <= 0
|
16
16
|
!10.ns
|
17
|
-
val0 <=
|
18
|
-
val1 <=
|
17
|
+
val0 <= _b11110000
|
18
|
+
val1 <= _b00111100
|
19
19
|
count <= 1
|
20
20
|
!10.ns
|
21
|
-
val0 <=
|
22
|
-
val1 <=
|
21
|
+
val0 <= _b10101010
|
22
|
+
val1 <= _b01010101
|
23
23
|
count <= 2
|
24
24
|
!10.ns
|
25
25
|
end
|
@@ -20,13 +20,13 @@ system :with_concat do
|
|
20
20
|
val6 <= bs.reduce(:+)
|
21
21
|
|
22
22
|
timed do
|
23
|
-
val0 <=
|
23
|
+
val0 <= _b1111000011110000
|
24
24
|
count <= 0
|
25
25
|
!10.ns
|
26
|
-
val0 <=
|
26
|
+
val0 <= _b0000111100001111
|
27
27
|
count <= 1
|
28
28
|
!10.ns
|
29
|
-
val0 <=
|
29
|
+
val0 <= _b1010101010101010
|
30
30
|
count <= 2
|
31
31
|
!10.ns
|
32
32
|
end
|
@@ -2,9 +2,9 @@
|
|
2
2
|
# A benchmark for testing the terminate statement.
|
3
3
|
system :with_terminate do
|
4
4
|
[8].constant cst0: 127
|
5
|
-
constant cst1:
|
6
|
-
[8].inner sig0:
|
7
|
-
inner sig1:
|
5
|
+
constant cst1: _b1
|
6
|
+
[8].inner sig0: _b10000000
|
7
|
+
inner sig1: _b1
|
8
8
|
[8].inner :sig2
|
9
9
|
[8].inner count: 0
|
10
10
|
|
@@ -52,26 +52,26 @@ system :with_to_a_bench do
|
|
52
52
|
four2sixfour(:my_four2sixfour).(four,*(sixfour.to_a.reverse))
|
53
53
|
|
54
54
|
timed do
|
55
|
-
val <=
|
55
|
+
val <= _b01101010
|
56
56
|
res <= vals.reverse
|
57
57
|
!10.ns
|
58
|
-
val64 <=
|
58
|
+
val64 <= _b0110101001101010011010100110101001101010011010100110101001101010
|
59
59
|
res64 <= val64s.reverse
|
60
60
|
!10.ns
|
61
|
-
val <=
|
62
|
-
val64 <=
|
61
|
+
val <= _b00000000
|
62
|
+
val64 <= _b0000000000000000000000000000000000000000000000000000000000000000
|
63
63
|
!10.ns
|
64
64
|
vals.each.with_index do |v,i|
|
65
|
-
v <= (i/2) &
|
65
|
+
v <= (i/2) & _b1
|
66
66
|
end
|
67
67
|
res <= val
|
68
68
|
!10.ns
|
69
69
|
val64s.each.with_index do |v,i|
|
70
|
-
v <= (i/2) &
|
70
|
+
v <= (i/2) & _b1
|
71
71
|
end
|
72
72
|
res64 <= val64
|
73
73
|
!10.ns
|
74
|
-
val <=
|
74
|
+
val <= _b01010011
|
75
75
|
!10.ns
|
76
76
|
8.times do |i|
|
77
77
|
val64s[i] <= val[i]
|
@@ -80,11 +80,11 @@ system :with_to_a_bench do
|
|
80
80
|
end
|
81
81
|
res64 <= val64
|
82
82
|
!10.ns
|
83
|
-
four <=
|
83
|
+
four <= _b0000
|
84
84
|
!10.ns
|
85
|
-
four <=
|
85
|
+
four <= _b0001
|
86
86
|
!10.ns
|
87
|
-
four <=
|
87
|
+
four <= _b1100
|
88
88
|
!10.ns
|
89
89
|
end
|
90
90
|
end
|
@@ -11,7 +11,7 @@ system :with_values do
|
|
11
11
|
|
12
12
|
|
13
13
|
timed do
|
14
|
-
v1 <=
|
14
|
+
v1 <= _b0
|
15
15
|
v8 <= 0
|
16
16
|
v16 <= 0
|
17
17
|
v32 <= 0
|
@@ -19,7 +19,7 @@ system :with_values do
|
|
19
19
|
v64 <= 0
|
20
20
|
v96 <= 0
|
21
21
|
!10.ns
|
22
|
-
v1 <=
|
22
|
+
v1 <= _b1
|
23
23
|
v8 <= 1
|
24
24
|
v16 <= 1
|
25
25
|
v32 <= 1
|
@@ -27,7 +27,7 @@ system :with_values do
|
|
27
27
|
v64 <= 1
|
28
28
|
v96 <= 1
|
29
29
|
!10.ns
|
30
|
-
v1 <=
|
30
|
+
v1 <= _b1010[2]
|
31
31
|
v8 <= _uhFF00[12..4]
|
32
32
|
!10.ns
|
33
33
|
v8 <= 128
|
data/lib/HDLRuby/hdrcc.rb
CHANGED
@@ -60,6 +60,7 @@ require 'HDLRuby/hruby_check.rb'
|
|
60
60
|
require 'HDLRuby/hruby_low2hdr'
|
61
61
|
require 'HDLRuby/hruby_low2c'
|
62
62
|
require 'HDLRuby/hruby_low2vhd'
|
63
|
+
require 'HDLRuby/hruby_low_without_subsignals'
|
63
64
|
require 'HDLRuby/hruby_low_fix_types'
|
64
65
|
# require 'HDLRuby/hruby_low_expand_types' # For now dormant
|
65
66
|
require 'HDLRuby/hruby_low_without_outread'
|
@@ -641,8 +642,12 @@ elsif $options[:clang] then
|
|
641
642
|
# top_system = $top_system
|
642
643
|
# Preprocess the HW description for valid C generation.
|
643
644
|
$top_system.each_systemT_deep do |systemT|
|
645
|
+
HDLRuby.show? "signal2subs step..."
|
646
|
+
# Ensure there is not implicit assign to sub signals.
|
647
|
+
systemT.signal2subs!
|
648
|
+
HDLRuby.show? "#{Time.now}#{show_mem}"
|
644
649
|
HDLRuby.show? "seq2seq step..."
|
645
|
-
#
|
650
|
+
# Converts the par blocks in seq blocks to seq blocks to match
|
646
651
|
# the simulation engine.
|
647
652
|
systemT.par_in_seq2seq!
|
648
653
|
HDLRuby.show? "#{Time.now}#{show_mem}"
|
@@ -801,6 +806,9 @@ elsif $options[:verilog] then
|
|
801
806
|
# top_system = $top_system
|
802
807
|
# Make description compatible with verilog generation.
|
803
808
|
$top_system.each_systemT_deep do |systemT|
|
809
|
+
HDLRuby.show? "signal2subs step..."
|
810
|
+
# Ensure there is not implicit assign to sub signals.
|
811
|
+
systemT.signal2subs!
|
804
812
|
# HDLRuby.show "casts_without_expression! step..."
|
805
813
|
# systemT.casts_without_expression!
|
806
814
|
# HDLRuby.show Time.now
|
@@ -889,6 +897,8 @@ elsif $options[:rcsim] then
|
|
889
897
|
require 'HDLRuby/hruby_rcsim.rb'
|
890
898
|
# Merge the included from the top system.
|
891
899
|
$top_system.merge_included!
|
900
|
+
# Process par in seq.
|
901
|
+
$top_system.par_in_seq2seq!
|
892
902
|
# Generate the C data structures.
|
893
903
|
$top_system.to_rcsim
|
894
904
|
HDLRuby.show "Executing the hybrid C-Ruby-level simulator..."
|
@@ -902,6 +912,9 @@ elsif $options[:vhdl] then
|
|
902
912
|
# top_system = $top_system
|
903
913
|
# Make description compatible with vhdl generation.
|
904
914
|
$top_system.each_systemT_deep do |systemT|
|
915
|
+
HDLRuby.show? "signal2subs step..."
|
916
|
+
# Ensure there is not implicit assign to sub signals.
|
917
|
+
systemT.signal2subs!
|
905
918
|
systemT.outread2inner! unless $options[:vhdl08] || $options[:alliance]
|
906
919
|
systemT.with_boolean!
|
907
920
|
systemT.boolean_in_assign2select! unless $options[:alliance]
|
data/lib/HDLRuby/hruby_bstr.rb
CHANGED
@@ -225,6 +225,7 @@ module HDLRuby
|
|
225
225
|
# * when index is larger than the bit width, the bit string is
|
226
226
|
# X extended accordingly.
|
227
227
|
def []=(index,value)
|
228
|
+
# puts "first @content=#{@content}"
|
228
229
|
# Change inside the bit string, it is not know any longer if it
|
229
230
|
# is specified or not
|
230
231
|
@specified = nil
|
@@ -250,8 +251,8 @@ module HDLRuby
|
|
250
251
|
sign = @content[-1]
|
251
252
|
@content.concat([sign] * (right-@content.size+1))
|
252
253
|
end
|
254
|
+
# puts "left=#{left} right=#{right} sign=#{sign} @content=#{@content}"
|
253
255
|
if right >= left then
|
254
|
-
# puts "left=#{left} right=#{right} value=#{value} (#{value.class})"
|
255
256
|
# Sets the value to a copy of the bit string.
|
256
257
|
@content[left..right] = value.is_a?(BitString) ?
|
257
258
|
value.raw_content[0..right-left] :
|
@@ -412,10 +413,14 @@ module HDLRuby
|
|
412
413
|
return @specified
|
413
414
|
end
|
414
415
|
|
415
|
-
#
|
416
|
-
|
417
|
-
|
418
|
-
|
416
|
+
# Coerces.
|
417
|
+
def coerce(other)
|
418
|
+
if other.is_a?(Numeric) && self.specified? then
|
419
|
+
return [other,self.to_i]
|
420
|
+
else
|
421
|
+
return [BitString.new(other),self]
|
422
|
+
end
|
423
|
+
end
|
419
424
|
|
420
425
|
# String conversion table.
|
421
426
|
B2S_T = [ "0", "1", "z", "x" ]
|