HDLRuby 2.11.0 → 2.11.3
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/ext/hruby_sim/hruby_rcsim_build.c +294 -62
- data/ext/hruby_sim/hruby_sim_calc.c +12 -9
- data/ext/hruby_sim/hruby_sim_core.c +9 -6
- data/ext/hruby_sim/hruby_value_pool.c +10 -4
- data/lib/HDLRuby/hruby_rcsim.rb +103 -72
- data/lib/HDLRuby/version.rb +1 -1
- metadata +2 -2
@@ -5,9 +5,9 @@
|
|
5
5
|
#include <limits.h>
|
6
6
|
#include "hruby_sim.h"
|
7
7
|
|
8
|
-
#ifndef alloca
|
9
|
-
#define alloca(x) __builtin_alloca(x)
|
10
|
-
#endif
|
8
|
+
// #ifndef alloca
|
9
|
+
// #define alloca(x) __builtin_alloca(x)
|
10
|
+
// #endif
|
11
11
|
|
12
12
|
|
13
13
|
/**
|
@@ -147,7 +147,7 @@ Type get_type_signed() {
|
|
147
147
|
* @number the number of elements */
|
148
148
|
Type make_type_vector(Type base, unsigned long long number) {
|
149
149
|
/* Create the type. */
|
150
|
-
Type type = calloc(sizeof(TypeS)
|
150
|
+
Type type = calloc(1,sizeof(TypeS));
|
151
151
|
type->base = type_width(base);
|
152
152
|
type->number = number;
|
153
153
|
type->flags = base->flags;
|
@@ -201,7 +201,7 @@ Value make_value(Type type, int numeric) {
|
|
201
201
|
/* Compute the size in words of the data contained in the value. */
|
202
202
|
unsigned long long width = type_width(type);
|
203
203
|
/* Allocate the value. */
|
204
|
-
Value res = calloc(sizeof(ValueS)
|
204
|
+
Value res = calloc(1,sizeof(ValueS));
|
205
205
|
/* Allocates the data of the value. */
|
206
206
|
if (!numeric) {
|
207
207
|
/* Allocate the bit string and fill it with u (undefined) by default. */
|
@@ -232,7 +232,7 @@ void resize_value(Value value, unsigned long long size) {
|
|
232
232
|
/* Free the former data. */
|
233
233
|
free(value->data_str);
|
234
234
|
/* Reallocate it. */
|
235
|
-
value->data_str = calloc(sizeof(char)
|
235
|
+
value->data_str = calloc(size*2,sizeof(char));
|
236
236
|
/* Update the size. */
|
237
237
|
value->capacity = size*2;
|
238
238
|
}
|
@@ -946,7 +946,7 @@ Value reduce_or_value_bitstring(Value src, Value dst) {
|
|
946
946
|
|
947
947
|
/* Performs the reduce or. */
|
948
948
|
unsigned long long count;
|
949
|
-
char res;
|
949
|
+
char res = 0;
|
950
950
|
for(count = 0; count < width; ++count) {
|
951
951
|
/* Performs the reduce or. */
|
952
952
|
char d = src_data[count] - '0'; /* Get and convert to bit. */
|
@@ -2977,12 +2977,15 @@ Value concat_valueP(unsigned int num, int dir, Value dst, Value* values) {
|
|
2977
2977
|
}
|
2978
2978
|
Value concat_valueV(unsigned int num, int dir, Value dst, va_list args) {
|
2979
2979
|
unsigned int i;
|
2980
|
-
Value* values = alloca(num*sizeof(Value)); /* The values to concatenate. */
|
2980
|
+
// Value* values = alloca(num*sizeof(Value)); /* The values to concatenate. */
|
2981
|
+
Value* values = calloc(num,sizeof(Value)); /* The values to concatenate. */
|
2981
2982
|
/* Copy the arguments to values for easier processing. */
|
2982
2983
|
for(i=0; i<num; ++i) {
|
2983
2984
|
values[i] = va_arg(args,Value);
|
2984
2985
|
}
|
2985
|
-
|
2986
|
+
Value res = concat_valueP(num,dir,dst,values);
|
2987
|
+
free(values);
|
2988
|
+
return res;
|
2986
2989
|
}
|
2987
2990
|
Value concat_value(unsigned int num, int dir, Value dst, ...) {
|
2988
2991
|
va_list args;
|
@@ -72,11 +72,13 @@ void register_timed_behavior(Behavior behavior) {
|
|
72
72
|
if (cap_timed_behaviors == 0) {
|
73
73
|
/* Need to create the array containing the timed behaviors. */
|
74
74
|
cap_timed_behaviors = 5;
|
75
|
-
timed_behaviors = calloc(sizeof(Behavior)
|
75
|
+
timed_behaviors = calloc(cap_timed_behaviors,sizeof(Behavior));
|
76
76
|
} else {
|
77
77
|
/* Need to increase the capacity. */
|
78
|
-
Behavior* behaviors = calloc(sizeof(Behavior)
|
79
|
-
memcpy(timed_behaviors,
|
78
|
+
Behavior* behaviors = calloc(cap_timed_behaviors*2,sizeof(Behavior));
|
79
|
+
// memcpy(behaviors,timed_behaviors,sizeof(Behavior)*cap_timed_behaviors);
|
80
|
+
memcpy(behaviors,timed_behaviors,sizeof(Behavior[cap_timed_behaviors]));
|
81
|
+
timed_behaviors = behaviors;
|
80
82
|
cap_timed_behaviors *= 2;
|
81
83
|
}
|
82
84
|
}
|
@@ -92,11 +94,12 @@ void register_signal(SignalI signal) {
|
|
92
94
|
if (cap_all_signals == 0) {
|
93
95
|
/* Need to create the array containing the timed behaviors. */
|
94
96
|
cap_all_signals = 100;
|
95
|
-
all_signals = calloc(sizeof(SignalI)
|
97
|
+
all_signals = calloc(cap_all_signals,sizeof(SignalI));
|
96
98
|
} else {
|
97
99
|
/* Need to increase the capacity. */
|
98
|
-
SignalI* new_signals = calloc(sizeof(SignalI)
|
99
|
-
memcpy(new_signals,all_signals,sizeof(SignalI)*cap_all_signals);
|
100
|
+
SignalI* new_signals = calloc(cap_all_signals*2,sizeof(SignalI));
|
101
|
+
// memcpy(new_signals,all_signals,sizeof(SignalI)*cap_all_signals);
|
102
|
+
memcpy(new_signals,all_signals,sizeof(SignalI[cap_all_signals]));
|
100
103
|
cap_all_signals *= 2;
|
101
104
|
all_signals=new_signals;
|
102
105
|
}
|
@@ -20,9 +20,10 @@ Value get_value() {
|
|
20
20
|
if (pool_cap == 0) {
|
21
21
|
/* First allocation. */
|
22
22
|
pool_cap = 16;
|
23
|
-
pool_values = (Value*)malloc(pool_cap*sizeof(Value));
|
23
|
+
// pool_values = (Value*)malloc(pool_cap*sizeof(Value));
|
24
|
+
pool_values = (Value*)calloc(pool_cap,sizeof(Value));
|
24
25
|
/* Allocate the new values. */
|
25
|
-
ValueS* new_values = (ValueS*)calloc(sizeof(ValueS)
|
26
|
+
ValueS* new_values = (ValueS*)calloc(pool_cap,sizeof(ValueS));
|
26
27
|
/* Assign them to the pool. */
|
27
28
|
unsigned int i;
|
28
29
|
for(i=0; i<pool_cap; ++i) {
|
@@ -32,11 +33,16 @@ Value get_value() {
|
|
32
33
|
else if (pool_pos == pool_cap) {
|
33
34
|
/* Need to increase the pool capacity. */
|
34
35
|
pool_cap = pool_cap * 2;
|
35
|
-
pool_values = (Value*)realloc(pool_values,pool_cap*sizeof(Value));
|
36
|
+
// pool_values = (Value*)realloc(pool_values,pool_cap*sizeof(Value));
|
37
|
+
pool_values = (Value*)realloc(pool_values,sizeof(Value[pool_cap]));
|
38
|
+
if (pool_values == NULL) {
|
39
|
+
perror("Internal error with the pool of values.");
|
40
|
+
exit(1);
|
41
|
+
}
|
36
42
|
/* Allocate the new values. */
|
37
43
|
/* Note: now pool_pos is the old pool_cap and is also the number
|
38
44
|
* of new values to allocate. */
|
39
|
-
ValueS* new_values = (ValueS*)calloc(sizeof(ValueS)
|
45
|
+
ValueS* new_values = (ValueS*)calloc(pool_pos,sizeof(ValueS));
|
40
46
|
/* Assign them to the pool. */
|
41
47
|
unsigned int i;
|
42
48
|
for(i=0; i<pool_pos; ++i) {
|
data/lib/HDLRuby/hruby_rcsim.rb
CHANGED
@@ -107,26 +107,32 @@ module HDLRuby::High
|
|
107
107
|
# rcsig = sig.to_rcsim(@rcsystemT)
|
108
108
|
# RCSim.rcsim_add_systemT_input(@rcsystemT,rcsig)
|
109
109
|
# end
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
110
|
+
if self.each_input.any? then
|
111
|
+
RCSim.rcsim_add_systemT_inputs(@rcsystemT,
|
112
|
+
self.each_input.map do |sig|
|
113
|
+
sig.to_rcsim(@rcsystemT)
|
114
|
+
end)
|
115
|
+
end
|
114
116
|
# self.each_output do |sig|
|
115
117
|
# rcsig = sig.to_rcsim(@rcsystemT)
|
116
118
|
# RCSim.rcsim_add_systemT_output(@rcsystemT,rcsig)
|
117
119
|
# end
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
120
|
+
if self.each_output.any? then
|
121
|
+
RCSim.rcsim_add_systemT_outputs(@rcsystemT,
|
122
|
+
self.each_output.map do |sig|
|
123
|
+
sig.to_rcsim(@rcsystemT)
|
124
|
+
end)
|
125
|
+
end
|
122
126
|
# self.each_inout do |sig|
|
123
127
|
# rcsig = sig.to_rcsim(@rcsystemT)
|
124
128
|
# RCSim.rcsim_add_systemT_inout(@rcsystemT,rcsig)
|
125
129
|
# end
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
+
if self.each_inout.any? then
|
131
|
+
RCSim.rcsim_add_systemT_inouts(@rcsystemT,
|
132
|
+
self.each_inout.map do |sig|
|
133
|
+
sig.to_rcsim(@rcsystemT)
|
134
|
+
end)
|
135
|
+
end
|
130
136
|
# Create and add the scope.
|
131
137
|
RCSim.rcsim_set_systemT_scope(@rcsystemT,
|
132
138
|
self.scope.to_rcsim(@rcsystemT))
|
@@ -170,44 +176,43 @@ module HDLRuby::High
|
|
170
176
|
# rcsig = sig.to_rcsim(@rcscope)
|
171
177
|
# RCSim.rcsim_add_scope_inner(@rcscope,rcsig)
|
172
178
|
# end
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
179
|
+
if self.each_inner.any? then
|
180
|
+
RCSim.rcsim_add_scope_inners(@rcscope,self.each_inner.map do|sig|
|
181
|
+
# sig.to_rcsim(@rcscope)
|
182
|
+
sig.to_rcsim(subowner)
|
183
|
+
end)
|
184
|
+
end
|
177
185
|
|
178
186
|
# Create and add the system instances.
|
179
187
|
# self.each_systemI do |sys|
|
180
188
|
# rcsys = sys.to_rcsim(@rcscope)
|
181
189
|
# RCSim.rcsim_add_scope_systemI(@rcscope,rcsys)
|
182
190
|
# end
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
|
191
|
+
if self.each_systemI.any? then
|
192
|
+
RCSim.rcsim_add_scope_systemIs(@rcscope,
|
193
|
+
self.each_systemI.map do |sys|
|
194
|
+
# sys.to_rcsim(@rcscope)
|
195
|
+
sys.to_rcsim(subowner)
|
196
|
+
end)
|
197
|
+
end
|
188
198
|
|
189
199
|
# Create and add the behaviors.
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
beh.to_rcsim(subowner)
|
198
|
-
end)
|
200
|
+
if self.each_behavior.any? then
|
201
|
+
RCSim.rcsim_add_scope_behaviors(@rcscope,
|
202
|
+
self.each_behavior.map do |beh|
|
203
|
+
# beh.to_rcsim(@rcscope)
|
204
|
+
beh.to_rcsim(subowner)
|
205
|
+
end)
|
206
|
+
end
|
199
207
|
|
200
208
|
# Create and add the connections.
|
201
|
-
|
202
|
-
|
203
|
-
|
204
|
-
|
205
|
-
|
206
|
-
|
207
|
-
|
208
|
-
# cxt.to_rcsim(@rcscope)
|
209
|
-
cxt.to_rcsim(subowner)
|
210
|
-
end)
|
209
|
+
if self.each_connection.any? then
|
210
|
+
RCSim.rcsim_add_scope_behaviors(@rcscope,
|
211
|
+
self.each_connection.map do |cxt|
|
212
|
+
# cxt.to_rcsim(@rcscope)
|
213
|
+
cxt.to_rcsim(subowner)
|
214
|
+
end)
|
215
|
+
end
|
211
216
|
|
212
217
|
# Create and add the codes.
|
213
218
|
# TODO!!
|
@@ -217,10 +222,12 @@ module HDLRuby::High
|
|
217
222
|
# rcsub = sub.to_rcsim(@rcscope)
|
218
223
|
# RCSim.rcsim_add_scope_scope(@rcscope,rcsub)
|
219
224
|
# end
|
220
|
-
|
221
|
-
|
222
|
-
|
223
|
-
|
225
|
+
if self.each_scope.any? then
|
226
|
+
RCSim.rcsim_add_scope_scopes(@rcscope,self.each_scope.map do|sub|
|
227
|
+
# sub.to_rcsim(@rcscope)
|
228
|
+
sub.to_rcsim(subowner)
|
229
|
+
end)
|
230
|
+
end
|
224
231
|
|
225
232
|
return @rcscope
|
226
233
|
end
|
@@ -349,11 +356,13 @@ module HDLRuby::High
|
|
349
356
|
# self.each_event do |ev|
|
350
357
|
# RCSim.rcsim_add_behavior_event(@rcbehavior,ev.to_rcsim)
|
351
358
|
# end
|
352
|
-
|
353
|
-
|
354
|
-
|
355
|
-
|
356
|
-
|
359
|
+
if self.each_event.any? then
|
360
|
+
RCSim.rcsim_add_behavior_events(@rcbehavior,
|
361
|
+
self.each_event.map do |ev|
|
362
|
+
# puts "adding event: #{ev.ref.object.name}(#{ev.type})"
|
363
|
+
ev.to_rcsim(@rcbehavior)
|
364
|
+
end)
|
365
|
+
end
|
357
366
|
|
358
367
|
# Create and add the block.
|
359
368
|
RCSim.rcsim_set_behavior_block(@rcbehavior,self.block.to_rcsim)
|
@@ -468,12 +477,15 @@ module HDLRuby::High
|
|
468
477
|
# rcsys = systemT.to_rcsim(@rcsystemI)
|
469
478
|
# RCSim.rcsim_add_systemI_systemT(@rcsystemI,rcsys)
|
470
479
|
# end
|
471
|
-
|
472
|
-
|
473
|
-
|
474
|
-
|
475
|
-
sys
|
476
|
-
|
480
|
+
if self.each_systemI.any? then
|
481
|
+
RCSim.rcsim_add_systemI_systemTs(@rcsystemI,
|
482
|
+
self.each_systemT.select do|sys|
|
483
|
+
sys != self.systemT
|
484
|
+
end.map do |sys|
|
485
|
+
# sys.to_rcsim(@rcsystemI)
|
486
|
+
sys.to_rcsim(rcowner)
|
487
|
+
end)
|
488
|
+
end
|
477
489
|
|
478
490
|
return @rcsystemI
|
479
491
|
end
|
@@ -531,8 +543,10 @@ module HDLRuby::High
|
|
531
543
|
# self.each_arg do |arg|
|
532
544
|
# RCSim.rcsim_add_print_arg(@rcstatement,arg.to_rcsim)
|
533
545
|
# end
|
534
|
-
|
535
|
-
|
546
|
+
if self.each_arg.any? then
|
547
|
+
RCSim.rcsim_add_print_args(@rcstatement,
|
548
|
+
self.each_arg.map(&:to_rcsim))
|
549
|
+
end
|
536
550
|
|
537
551
|
return @rcstatement
|
538
552
|
end
|
@@ -576,7 +590,9 @@ module HDLRuby::High
|
|
576
590
|
# end
|
577
591
|
rcsim_conds = self.each_noif.map {|cond,stmnt| cond.to_rcsim }
|
578
592
|
rcsim_stmnts = self.each_noif.map {|cond,stmnt| stmnt.to_rcsim }
|
579
|
-
|
593
|
+
if rcsim_conds.any? then
|
594
|
+
RCSim.rcsim_add_hif_noifs(@rcstatement,rcsim_conds,rcsim_stmnts)
|
595
|
+
end
|
580
596
|
|
581
597
|
return @rcstatement
|
582
598
|
end
|
@@ -605,7 +621,10 @@ module HDLRuby::High
|
|
605
621
|
# end
|
606
622
|
rcsim_matches = self.each_when.map {|wh| wh.match.to_rcsim }
|
607
623
|
rcsim_stmnts = self.each_when.map {|wh| wh.statement.to_rcsim }
|
608
|
-
|
624
|
+
if rcsim_matches.any? then
|
625
|
+
RCSim.rcsim_add_hcase_whens(@rcstatement,rcsim_matches,
|
626
|
+
rcsim_stmnts)
|
627
|
+
end
|
609
628
|
|
610
629
|
return @rcstatement
|
611
630
|
end
|
@@ -658,19 +677,23 @@ module HDLRuby::High
|
|
658
677
|
# self.each_inner do |inner|
|
659
678
|
# RCSim.rcsim_add_block_inner(@rcstatement,inner.to_rcsim(@rcstatement))
|
660
679
|
# end
|
661
|
-
|
662
|
-
|
663
|
-
|
664
|
-
|
680
|
+
if self.each_inner.any? then
|
681
|
+
RCSim.rcsim_add_block_inners(@rcstatement,
|
682
|
+
self.each_inner.map do |sig|
|
683
|
+
sig.to_rcsim(@rcstatement)
|
684
|
+
end)
|
685
|
+
end
|
665
686
|
|
666
687
|
# Add the statements.
|
667
688
|
# self.each_statement do |stmnt|
|
668
689
|
# RCSim.rcsim_add_block_statement(@rcstatement,stmnt.to_rcsim)
|
669
690
|
# end
|
670
|
-
|
671
|
-
|
672
|
-
|
673
|
-
|
691
|
+
if self.each_statement.any? then
|
692
|
+
RCSim.rcsim_add_block_statements(@rcstatement,
|
693
|
+
self.each_statement.map do |stmnt|
|
694
|
+
stmnt.to_rcsim
|
695
|
+
end)
|
696
|
+
end
|
674
697
|
|
675
698
|
return @rcstatement
|
676
699
|
end
|
@@ -710,7 +733,9 @@ module HDLRuby::High
|
|
710
733
|
rcevs << ev
|
711
734
|
end
|
712
735
|
end
|
713
|
-
|
736
|
+
if rcevs.any? then
|
737
|
+
RCSim.rcsim_add_behavior_events(@rcbehavior,rcevs)
|
738
|
+
end
|
714
739
|
|
715
740
|
# Create and set the block.
|
716
741
|
rcblock = RCSim.rcsim_make_block(:par)
|
@@ -843,8 +868,10 @@ module HDLRuby::High
|
|
843
868
|
# self.each_choice do |choice|
|
844
869
|
# rcsim_add_select_choice(rcexpression,choice.to_rcsim)
|
845
870
|
# end
|
846
|
-
|
847
|
-
|
871
|
+
if self.each_choice.any? then
|
872
|
+
RCSim.rcsim_add_select_choices(rcexpression,
|
873
|
+
self.each_choice.map(&:to_rcsim))
|
874
|
+
end
|
848
875
|
|
849
876
|
return rcexpression
|
850
877
|
end
|
@@ -865,8 +892,10 @@ module HDLRuby::High
|
|
865
892
|
# self.each_expression do |expr|
|
866
893
|
# RCSim.rcsim_add_concat_expression(rcexpression,expr.to_rcsim)
|
867
894
|
# end
|
868
|
-
|
895
|
+
if self.each_expression.any? then
|
896
|
+
RCSim.rcsim_add_concat_expressions(rcexpression,
|
869
897
|
self.each_expression.map(&:to_rcsim))
|
898
|
+
end
|
870
899
|
|
871
900
|
return rcexpression
|
872
901
|
end
|
@@ -901,7 +930,9 @@ module HDLRuby::High
|
|
901
930
|
# self.each_ref do |ref|
|
902
931
|
# RCSim.rcsim_add_refConcat_ref(rcref,ref.to_rcsim)
|
903
932
|
# end
|
904
|
-
|
933
|
+
if self.each_ref.any? then
|
934
|
+
RCSim.rcsim_add_refConcat_refs(rcref,self.each_ref(&:to_rcsim))
|
935
|
+
end
|
905
936
|
|
906
937
|
return rcref
|
907
938
|
end
|
data/lib/HDLRuby/version.rb
CHANGED
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.11.
|
4
|
+
version: 2.11.3
|
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-
|
11
|
+
date: 2022-10-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|