HDLRuby 2.7.5 → 2.9.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +1 -1
- data/lib/HDLRuby/hdr_samples/adder_gen.rb +22 -0
- data/lib/HDLRuby/hdr_samples/adder_gen_gen.rb +40 -0
- data/lib/HDLRuby/hdr_samples/dff_unit.rb +1 -1
- data/lib/HDLRuby/hdr_samples/parseq_bench.rb +61 -0
- data/lib/HDLRuby/hdr_samples/range_bench.rb +4 -1
- data/lib/HDLRuby/hdr_samples/rom_nest.rb +27 -0
- data/lib/HDLRuby/hdr_samples/with_channel_other.rb +128 -0
- data/lib/HDLRuby/hdr_samples/with_def.rb +29 -0
- data/lib/HDLRuby/hdr_samples/with_of.rb +51 -0
- data/lib/HDLRuby/hdr_samples/with_reconf.rb +75 -72
- data/lib/HDLRuby/hdr_samples/with_terminate.rb +32 -0
- data/lib/HDLRuby/hdrcc.rb +8 -1
- data/lib/HDLRuby/hruby_high.rb +177 -27
- data/lib/HDLRuby/hruby_low.rb +207 -3
- data/lib/HDLRuby/hruby_low2c.rb +180 -59
- data/lib/HDLRuby/hruby_low2vhd.rb +12 -0
- data/lib/HDLRuby/hruby_low_bool2select.rb +12 -0
- data/lib/HDLRuby/hruby_low_fix_types.rb +20 -1
- data/lib/HDLRuby/hruby_low_resolve.rb +30 -1
- data/lib/HDLRuby/hruby_low_without_select.rb +11 -1
- data/lib/HDLRuby/hruby_tools.rb +1 -0
- data/lib/HDLRuby/hruby_verilog.rb +9 -1
- data/lib/HDLRuby/sim/hruby_sim.h +23 -1
- data/lib/HDLRuby/sim/hruby_sim_core.c +65 -8
- data/lib/HDLRuby/sim/hruby_sim_vcd.c +1 -1
- data/lib/HDLRuby/std/reconf.rb +3 -0
- data/lib/HDLRuby/version.rb +1 -1
- metadata +9 -2
@@ -108,7 +108,7 @@ void register_signal(SignalI signal) {
|
|
108
108
|
/** Recursively update the signals until no (untimed) behavior are
|
109
109
|
* activated. */
|
110
110
|
void hruby_sim_update_signals() {
|
111
|
-
|
111
|
+
// printf("hruby_sim_update_signals...\n");
|
112
112
|
/* As long as the list of touched signals is not empty go on computing. */
|
113
113
|
while(!empty_list(touched_signals) || !empty_list(touched_signals_seq)) {
|
114
114
|
// printf("## Checking touched signals.\n");
|
@@ -121,7 +121,6 @@ void hruby_sim_update_signals() {
|
|
121
121
|
/* Is there a change? */
|
122
122
|
if (same_content_value(sig->c_value,sig->f_value)) continue;
|
123
123
|
/* Yes, process the signal. */
|
124
|
-
// println_signal(sig);
|
125
124
|
printer.print_signal(sig);
|
126
125
|
// printf("c_value="); printer.print_value(sig->c_value);
|
127
126
|
// printf("\nf_value="); printer.print_value(sig->f_value); printf("\n");
|
@@ -254,8 +253,8 @@ void hruby_sim_update_signals() {
|
|
254
253
|
if (obj->kind == BEHAVIOR) {
|
255
254
|
/* Behavior case. */
|
256
255
|
Behavior beh = (Behavior)obj;
|
257
|
-
/* Is the code really activated? */
|
258
|
-
if (beh->activated) {
|
256
|
+
/* Is the code really enabled and activated? */
|
257
|
+
if (beh->enabled && beh->activated) {
|
259
258
|
/* Yes, execute it. */
|
260
259
|
beh->block->function();
|
261
260
|
/* And deactivate it. */
|
@@ -265,7 +264,7 @@ void hruby_sim_update_signals() {
|
|
265
264
|
/* Other code case. */
|
266
265
|
Code cod = (Code)obj;
|
267
266
|
/* Is the code really activated? */
|
268
|
-
if (cod->activated) {
|
267
|
+
if (cod->enabled && cod->activated) {
|
269
268
|
/* Yes, execute it. */
|
270
269
|
cod->function();
|
271
270
|
/* And deactivate it. */
|
@@ -295,6 +294,35 @@ void hruby_sim_advance_time() {
|
|
295
294
|
}
|
296
295
|
|
297
296
|
|
297
|
+
/** Sets the enamble status of the behaviors of a scope.
|
298
|
+
* @param scope the scope to process.
|
299
|
+
* @param status the enable status. */
|
300
|
+
static void set_enable_scope(Scope scope, int status) {
|
301
|
+
int i;
|
302
|
+
int num_beh = scope->num_behaviors;
|
303
|
+
Behavior* behs = scope->behaviors;
|
304
|
+
int num_scp = scope->num_scopes;
|
305
|
+
Scope* scps = scope->scopes;
|
306
|
+
|
307
|
+
/* Enable the behaviors. */
|
308
|
+
for(i=0; i<num_beh; ++i) {
|
309
|
+
behs[i]->enabled = status;
|
310
|
+
}
|
311
|
+
|
312
|
+
/* Recurse on the sub scopes. */
|
313
|
+
for(i=0; i<num_scp; ++i) {
|
314
|
+
set_enable_scope(scps[i],status);
|
315
|
+
}
|
316
|
+
}
|
317
|
+
|
318
|
+
/** Sets the enable status of the behaviors of a system type.
|
319
|
+
* @param systemT the system type to process.
|
320
|
+
* @param status the enable status. */
|
321
|
+
void set_enable_system(SystemT systemT, int status) {
|
322
|
+
set_enable_scope(systemT->scope,status);
|
323
|
+
}
|
324
|
+
|
325
|
+
|
298
326
|
/** Activates a behavior.
|
299
327
|
* @param behavior the behavior to activate. */
|
300
328
|
void activate_behavior(Behavior behavior) {
|
@@ -360,7 +388,8 @@ void* behavior_run(void* arg) {
|
|
360
388
|
pthread_mutex_unlock(&hruby_sim_mutex);
|
361
389
|
// printf("#2\n");
|
362
390
|
/* Now can start the execution of the behavior. */
|
363
|
-
behavior->
|
391
|
+
if (behavior->enabled)
|
392
|
+
behavior->block->function();
|
364
393
|
// printf("#3\n");
|
365
394
|
/* Now can start the execution of the behavior. */
|
366
395
|
/* Stops the behavior. */
|
@@ -441,6 +470,10 @@ void hruby_sim_core(char* name, void (*init_vizualizer)(char*),
|
|
441
470
|
/* Update the signal values (recursively executing blocks locked
|
442
471
|
* on the signals). */
|
443
472
|
hruby_sim_update_signals();
|
473
|
+
if (hruby_sim_time == 0) {
|
474
|
+
/* Initially touch all the signals. */
|
475
|
+
each_all_signal(&touch_signal);
|
476
|
+
}
|
444
477
|
if (num_run_behaviors <= 0) break;
|
445
478
|
/* Advance time to next timestep. */
|
446
479
|
hruby_sim_advance_time();
|
@@ -632,11 +665,35 @@ unsigned long long make_delay(int value, Unit unit) {
|
|
632
665
|
|
633
666
|
|
634
667
|
|
635
|
-
|
636
|
-
*
|
668
|
+
/** Iterates over all the signals.
|
669
|
+
* @param func function to applie on each signal. */
|
637
670
|
void each_all_signal(void (*func)(SignalI)) {
|
638
671
|
int i;
|
639
672
|
for(i = 0; i<num_all_signals; ++i) {
|
640
673
|
func(all_signals[i]);
|
641
674
|
}
|
642
675
|
}
|
676
|
+
|
677
|
+
|
678
|
+
/** Configure a system instance.
|
679
|
+
* @param systemI the system instance to configure.
|
680
|
+
* @param idx the index of the target system. */
|
681
|
+
void configure(SystemI systemI, int idx) {
|
682
|
+
int i;
|
683
|
+
// printf("Configure to: %i\n",idx);
|
684
|
+
/* Sets the current system type. */
|
685
|
+
systemI->system = systemI->systems[idx];
|
686
|
+
/* Disable all the behaviors of the system instance. */
|
687
|
+
for(i=0; i<systemI->num_systems; ++i) {
|
688
|
+
if (i != idx)
|
689
|
+
set_enable_system(systemI->systems[i],0);
|
690
|
+
}
|
691
|
+
/* Enable the current system. */
|
692
|
+
set_enable_system(systemI->systems[idx],1);
|
693
|
+
}
|
694
|
+
|
695
|
+
|
696
|
+
/** Terminates the simulation. */
|
697
|
+
void terminate() {
|
698
|
+
exit(0);
|
699
|
+
}
|
@@ -85,7 +85,7 @@ static void vcd_print_name(Object object) {
|
|
85
85
|
vcd_print("%s",name);
|
86
86
|
} else {
|
87
87
|
/* No name, use the address of the object as name generator.*/
|
88
|
-
vcd_print("$%p",(void*)object);
|
88
|
+
vcd_print("x$%p",(void*)object);
|
89
89
|
}
|
90
90
|
break;
|
91
91
|
default: /* Nothing to do */
|
data/lib/HDLRuby/std/reconf.rb
CHANGED
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.
|
4
|
+
version: 2.9.0
|
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-05-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -76,6 +76,7 @@ files:
|
|
76
76
|
- lib/HDLRuby/hdr_samples/adder_assign_error.rb
|
77
77
|
- lib/HDLRuby/hdr_samples/adder_bench.rb
|
78
78
|
- lib/HDLRuby/hdr_samples/adder_gen.rb
|
79
|
+
- lib/HDLRuby/hdr_samples/adder_gen_gen.rb
|
79
80
|
- lib/HDLRuby/hdr_samples/adder_kadai.rb
|
80
81
|
- lib/HDLRuby/hdr_samples/adder_nodef_error.rb
|
81
82
|
- lib/HDLRuby/hdr_samples/addsub.rb
|
@@ -125,11 +126,13 @@ files:
|
|
125
126
|
- lib/HDLRuby/hdr_samples/neural/selector.rb
|
126
127
|
- lib/HDLRuby/hdr_samples/neural/sigmoid.rb
|
127
128
|
- lib/HDLRuby/hdr_samples/neural/z.rb
|
129
|
+
- lib/HDLRuby/hdr_samples/parseq_bench.rb
|
128
130
|
- lib/HDLRuby/hdr_samples/prog.obj
|
129
131
|
- lib/HDLRuby/hdr_samples/ram.rb
|
130
132
|
- lib/HDLRuby/hdr_samples/range_bench.rb
|
131
133
|
- lib/HDLRuby/hdr_samples/register_with_code_bench.rb
|
132
134
|
- lib/HDLRuby/hdr_samples/rom.rb
|
135
|
+
- lib/HDLRuby/hdr_samples/rom_nest.rb
|
133
136
|
- lib/HDLRuby/hdr_samples/ruby_fir_hw.rb
|
134
137
|
- lib/HDLRuby/hdr_samples/seqpar_bench.rb
|
135
138
|
- lib/HDLRuby/hdr_samples/struct.rb
|
@@ -142,11 +145,13 @@ files:
|
|
142
145
|
- lib/HDLRuby/hdr_samples/type_minmax_bench.rb
|
143
146
|
- lib/HDLRuby/hdr_samples/with_casts.rb
|
144
147
|
- lib/HDLRuby/hdr_samples/with_channel.rb
|
148
|
+
- lib/HDLRuby/hdr_samples/with_channel_other.rb
|
145
149
|
- lib/HDLRuby/hdr_samples/with_class.rb
|
146
150
|
- lib/HDLRuby/hdr_samples/with_concat.rb
|
147
151
|
- lib/HDLRuby/hdr_samples/with_connector.rb
|
148
152
|
- lib/HDLRuby/hdr_samples/with_connector_memory.rb
|
149
153
|
- lib/HDLRuby/hdr_samples/with_decoder.rb
|
154
|
+
- lib/HDLRuby/hdr_samples/with_def.rb
|
150
155
|
- lib/HDLRuby/hdr_samples/with_fixpoint.rb
|
151
156
|
- lib/HDLRuby/hdr_samples/with_fsm.rb
|
152
157
|
- lib/HDLRuby/hdr_samples/with_function_generator.rb
|
@@ -157,11 +162,13 @@ files:
|
|
157
162
|
- lib/HDLRuby/hdr_samples/with_memory.rb
|
158
163
|
- lib/HDLRuby/hdr_samples/with_memory_rom.rb
|
159
164
|
- lib/HDLRuby/hdr_samples/with_multi_channels.rb
|
165
|
+
- lib/HDLRuby/hdr_samples/with_of.rb
|
160
166
|
- lib/HDLRuby/hdr_samples/with_reconf.rb
|
161
167
|
- lib/HDLRuby/hdr_samples/with_reduce.rb
|
162
168
|
- lib/HDLRuby/hdr_samples/with_ref_array.rb
|
163
169
|
- lib/HDLRuby/hdr_samples/with_str2value.rb
|
164
170
|
- lib/HDLRuby/hdr_samples/with_subsums.rb
|
171
|
+
- lib/HDLRuby/hdr_samples/with_terminate.rb
|
165
172
|
- lib/HDLRuby/hdr_samples/with_to_a.rb
|
166
173
|
- lib/HDLRuby/hdr_samples/with_to_array.rb
|
167
174
|
- lib/HDLRuby/hdr_samples/with_values.rb
|