HDLRuby 2.6.25 → 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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a207f3222cab832d2b846f9658ea0cf9426e77afd14196c2db8cb6832bd4ebda
4
- data.tar.gz: 490c8a6400d6faac77cec5ab1e49caa3abd94d4d0961521ec14d485cad640b72
3
+ metadata.gz: 4ca0e2aba73e7ceb55e145dd22286398ae7605d04d46212f870ba895d3f983d9
4
+ data.tar.gz: 434ae3eb4d974a00ea1510b0e23d66dc51d5f6ac5ef0e4b79af288b5d05f6985
5
5
  SHA512:
6
- metadata.gz: '08196d385fb34444cc7387f6b4982063c38e98e10e51e3b58551b0a6b62dac6921fcbb9c7a89aaccabea055ecab0d2da0543667f688d52bd7ea6b875d9db5ebd'
7
- data.tar.gz: c22296c840a2a7a52b8f4bd8bc34dc38c53f571feba0a01f1bb17a2f548c2965947916fcf47b95b33f2293f1481d8b91653d855c21708a746245cebffebc72f4
6
+ metadata.gz: d097cbd7793ef60fd94c70f7a8acb2e49b13915fd799b7618523c1ba57300195a9ca8a7a61d6e50a8f89779ce6bf64a484bdf5267de93b3159f61186f40e6a82
7
+ data.tar.gz: 27db7c7e988abe14635a515572c2774e8a76d44e7f0e85bfb6ec8b1c9dfed85f61ef49e1f597c59fc9b725b6aacc53b976f73a3b49f816820c5ca9691e253559
@@ -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,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
@@ -1360,7 +1360,7 @@ module HDLRuby::Low
1360
1360
  # def to_c(level = 0)
1361
1361
  def to_c(res,level = 0)
1362
1362
  # Save the value pool state.
1363
- res << (" " * (level*3)) << "SV;\n"
1363
+ res << (" " * (level*3)) << "PV;\n"
1364
1364
  # Generate the print for each argument.
1365
1365
  self.each_arg do |arg|
1366
1366
  if (arg.is_a?(StringE)) then
@@ -1981,7 +1981,7 @@ module HDLRuby::Low
1981
1981
  res << " " * (level+1)*3
1982
1982
  # res << "static unsigned long long data[] = { "
1983
1983
  res << "static unsigned int data[] = { "
1984
- res << str.scan(/.{1,#{Low2C.int_width}}/m).map do |sub|
1984
+ res << str.scan(/.{1,#{Low2C.int_width}}/m).reverse.map do |sub|
1985
1985
  sub.to_i(2).to_s # + "ULL"
1986
1986
  end.join(",")
1987
1987
  res << " };\n"
@@ -2056,7 +2056,7 @@ module HDLRuby::Low
2056
2056
  # def to_c(level = 0)
2057
2057
  def to_c(res,level = 0)
2058
2058
  # Save the value pool state.
2059
- res << (" " * (level*3)) << "SV;\n"
2059
+ res << (" " * (level*3)) << "PV;\n"
2060
2060
  # Generate the child.
2061
2061
  self.child.to_c(res,level)
2062
2062
  res << (" " * (level*3))
@@ -2144,7 +2144,7 @@ module HDLRuby::Low
2144
2144
  end
2145
2145
  # Some computation required.
2146
2146
  # Save the value pool state.
2147
- res << (" " * (level*3)) << "SV;\n"
2147
+ res << (" " * (level*3)) << "PV;\n"
2148
2148
  # Generate the child.
2149
2149
  self.child.to_c(res,level)
2150
2150
  res << (" " * (level*3))
@@ -2256,7 +2256,7 @@ module HDLRuby::Low
2256
2256
  # def to_c(level = 0)
2257
2257
  def to_c(res, level = 0)
2258
2258
  # Save the value pool state.
2259
- res << (" " * (level*3)) << "SV;\n"
2259
+ res << (" " * (level*3)) << "PV;\n"
2260
2260
  # Generate the left computation.
2261
2261
  self.left.to_c(res,level)
2262
2262
  # Generate the right computation.
@@ -2375,7 +2375,7 @@ module HDLRuby::Low
2375
2375
  # +level+ is the hierachical level of the object.
2376
2376
  def to_c(res,level = 0)
2377
2377
  # Save the value pool state.
2378
- res << (" " * (level*3)) << "SV;\n"
2378
+ res << (" " * (level*3)) << "PV;\n"
2379
2379
  # Gather the possible selection choices.
2380
2380
  expressions = self.each_choice.to_a
2381
2381
  # Create the resulting string.
@@ -2444,7 +2444,7 @@ module HDLRuby::Low
2444
2444
  # +level+ is the hierachical level of the object.
2445
2445
  def to_c(res,level = 0)
2446
2446
  # Save the value pool state.
2447
- res << (" " * (level*3)) << "SV;\n"
2447
+ res << (" " * (level*3)) << "PV;\n"
2448
2448
  # Gather the content to concat.
2449
2449
  expressions = self.each_expression.to_a
2450
2450
  # Compute each sub expression.
@@ -2604,7 +2604,7 @@ module HDLRuby::Low
2604
2604
  # +left+ tells if it is a left value or not.
2605
2605
  def to_c(res,level = 0, left = false)
2606
2606
  # Save the value pool state.
2607
- res << (" " * (level*3)) << "SV;\n"
2607
+ res << (" " * (level*3)) << "PV;\n"
2608
2608
  # Compute the reference.
2609
2609
  self.ref.to_c(res,level)
2610
2610
  # Compute the index.
@@ -2718,7 +2718,7 @@ module HDLRuby::Low
2718
2718
  # end
2719
2719
  def to_c(res,level = 0, left = false)
2720
2720
  # Save the value pool state.
2721
- res << (" " * (level*3)) << "SV;\n"
2721
+ res << (" " * (level*3)) << "PV;\n"
2722
2722
  # Compute the reference.
2723
2723
  self.ref.to_c(res,level)
2724
2724
  # res << (" " * (level*3))
@@ -410,7 +410,8 @@ extern void save_value_pos();
410
410
  extern void restore_value_pos();
411
411
 
412
412
  /** Macros for short control of the pool of values. */
413
- #define SV get_value();save_value_pos();
413
+ #define SV save_value_pos();
414
+ #define PV push(get_value());save_value_pos();
414
415
  #define RV restore_value_pos();
415
416
 
416
417
 
@@ -757,6 +758,10 @@ extern void push(Value val);
757
758
  * @return the value. */
758
759
  extern Value pop();
759
760
 
761
+ /** Access the top value of the stack without removing it.
762
+ * @return the value. */
763
+ extern Value peek();
764
+
760
765
  /** Unary calculation.
761
766
  * @param oper the operator function
762
767
  * @return the destination
@@ -38,6 +38,17 @@ Value pop() {
38
38
  }
39
39
  }
40
40
 
41
+ /** Access the top value of the stack without removing it.
42
+ * @return the value. */
43
+ Value peek() {
44
+ if (head < STACK_SIZE) {
45
+ return stack[head];
46
+ } else {
47
+ perror("Computation stack empty.\n");
48
+ exit(1);
49
+ }
50
+ }
51
+
41
52
  /** Pops multiple values.
42
53
  * @param num the number of values to pop.
43
54
  * @return a pointer on the first value (in heap order!). */
@@ -58,10 +69,11 @@ static Value* popn(int num) {
58
69
  **/
59
70
  Value unary(Value (*oper)(Value,Value)) {
60
71
  // printf("unary\n");
61
- Value dst = get_top_value();
62
- dst = oper(pop(),dst);
63
- push(dst);
64
- return dst;
72
+ // Value dst = get_top_value();
73
+ // dst = oper(pop(),dst);
74
+ // push(dst);
75
+ // return dst;
76
+ return oper(pop(),peek());
65
77
  }
66
78
 
67
79
  /** Binary calculation.
@@ -70,12 +82,15 @@ Value unary(Value (*oper)(Value,Value)) {
70
82
  **/
71
83
  Value binary(Value (*oper)(Value,Value,Value)) {
72
84
  // printf("binary\n");
73
- Value dst = get_top_value();
85
+ // Value dst = get_top_value();
86
+ // Value r = pop();
87
+ // Value l = pop();
88
+ // dst = oper(l,r,dst);
89
+ // push(dst);
90
+ // return dst;
74
91
  Value r = pop();
75
92
  Value l = pop();
76
- dst = oper(l,r,dst);
77
- push(dst);
78
- return dst;
93
+ return oper(l,r,peek());
79
94
  }
80
95
 
81
96
  /** Cast calculation.
@@ -84,72 +99,93 @@ Value binary(Value (*oper)(Value,Value,Value)) {
84
99
  **/
85
100
  Value cast(Type typ) {
86
101
  // printf("cast\n");
87
- Value dst = get_top_value();
88
- Value src = pop();
89
- dst = cast_value(src,typ,dst);
90
- push(dst);
91
- return dst;
102
+ // Value dst = get_top_value();
103
+ // Value src = pop();
104
+ // dst = cast_value(src,typ,dst);
105
+ // push(dst);
106
+ // return dst;
107
+ return cast_value(pop(),typ,peek());
92
108
  }
93
109
 
94
110
  /* Concat values.
95
111
  * @param num the number of values to concat.
96
112
  * @param dir the direction. */
97
113
  Value sconcat(int num, int dir) {
114
+ // Value* vals = alloca(num*sizeof(Value));
115
+ // Value dst = get_top_value();
116
+ // int i;
117
+ // // printf("sconcat\n");
118
+ // /* Get the values to concat from the stack. */
119
+ // for(i=1;i<=num;++i) vals[num-i] = pop();
120
+ // dst = concat_valueP(num,dir,dst,vals);
121
+ // push(dst);
122
+ // return dst;
98
123
  Value* vals = alloca(num*sizeof(Value));
99
- Value dst = get_top_value();
100
124
  int i;
101
125
  // printf("sconcat\n");
102
126
  /* Get the values to concat from the stack. */
103
127
  for(i=1;i<=num;++i) vals[num-i] = pop();
104
- dst = concat_valueP(num,dir,dst,vals);
105
- push(dst);
106
- return dst;
128
+ return concat_valueP(num,dir,peek(),vals);
107
129
  }
108
130
 
109
131
  /* Index read calculation.
110
132
  * @param typ the data type of the access. */
111
133
  Value sreadI(Type typ) {
134
+ // // printf("sreadI\n");
135
+ // Value dst = get_top_value();
136
+ // unsigned long long idx = value2integer(pop());
137
+ // dst = read_range(pop(),idx,idx,typ,dst);
138
+ // push(dst);
139
+ // return dst;
112
140
  // printf("sreadI\n");
113
- Value dst = get_top_value();
114
141
  unsigned long long idx = value2integer(pop());
115
- dst = read_range(pop(),idx,idx,typ,dst);
116
- push(dst);
117
- return dst;
142
+ return read_range(pop(),idx,idx,typ,peek());
118
143
  }
119
144
 
120
145
  /* Index write calculation.
121
146
  * @param typ the data type of the access. */
122
147
  Value swriteI(Type typ) {
148
+ // // printf("swriteI\n");
149
+ // Value dst = get_top_value();
150
+ // unsigned long long idx = value2integer(pop());
151
+ // dst = write_range(pop(),idx,idx,typ,dst);
152
+ // push(dst);
153
+ // return dst;
123
154
  // printf("swriteI\n");
124
- Value dst = get_top_value();
125
155
  unsigned long long idx = value2integer(pop());
126
- dst = write_range(pop(),idx,idx,typ,dst);
127
- push(dst);
128
- return dst;
156
+ return write_range(pop(),idx,idx,typ,peek());
129
157
  }
130
158
 
131
159
  /* Range read calculation.
132
160
  * @param typ the data type of the access. */
133
161
  Value sreadR(Type typ) {
162
+ // // printf("sreadR\n");
163
+ // Value dst = get_top_value();
164
+ // unsigned long long last = value2integer(pop());
165
+ // unsigned long long first = value2integer(pop());
166
+ // dst = read_range(pop(),first,last,typ,dst);
167
+ // push(dst);
168
+ // return dst;
134
169
  // printf("sreadR\n");
135
- Value dst = get_top_value();
136
170
  unsigned long long last = value2integer(pop());
137
171
  unsigned long long first = value2integer(pop());
138
- dst = read_range(pop(),first,last,typ,dst);
139
- push(dst);
140
- return dst;
172
+ return read_range(pop(),first,last,typ,peek());
141
173
  }
142
174
 
143
175
  /* Range write calculation.
144
176
  * @param typ the data type of the access. */
145
177
  Value swriteR(Type typ) {
178
+ // // printf("swriteR\n");
179
+ // Value dst = get_top_value();
180
+ // unsigned long long last = value2integer(pop());
181
+ // unsigned long long first = value2integer(pop());
182
+ // dst = write_range(pop(),first,last,typ,dst);
183
+ // push(dst);
184
+ // return dst;
146
185
  // printf("swriteR\n");
147
- Value dst = get_top_value();
148
186
  unsigned long long last = value2integer(pop());
149
187
  unsigned long long first = value2integer(pop());
150
- dst = write_range(pop(),first,last,typ,dst);
151
- push(dst);
152
- return dst;
188
+ return write_range(pop(),first,last,typ,peek());
153
189
  }
154
190
 
155
191
  /** Check if the top value is defined. */
@@ -1,3 +1,3 @@
1
1
  module HDLRuby
2
- VERSION = "2.6.25"
2
+ VERSION = "2.7.1"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: HDLRuby
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.6.25
4
+ version: 2.7.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Lovic Gauthier
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-01-02 00:00:00.000000000 Z
11
+ date: 2022-01-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -157,9 +157,12 @@ files:
157
157
  - lib/HDLRuby/hdr_samples/with_multi_channels.rb
158
158
  - lib/HDLRuby/hdr_samples/with_reconf.rb
159
159
  - lib/HDLRuby/hdr_samples/with_reduce.rb
160
+ - lib/HDLRuby/hdr_samples/with_ref_array.rb
160
161
  - lib/HDLRuby/hdr_samples/with_str2value.rb
162
+ - lib/HDLRuby/hdr_samples/with_subsums.rb
161
163
  - lib/HDLRuby/hdr_samples/with_to_a.rb
162
164
  - lib/HDLRuby/hdr_samples/with_to_array.rb
165
+ - lib/HDLRuby/hdr_samples/with_values.rb
163
166
  - lib/HDLRuby/hdrcc.rb
164
167
  - lib/HDLRuby/high_samples/_adder_fault.rb
165
168
  - lib/HDLRuby/high_samples/_generic_transmission2.rb