HDLRuby 2.11.11 → 2.11.12
Sign up to get free protection for your applications and to get access to all the features.
- 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" ]
|