HDLRuby 2.11.4 → 2.11.7
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/ext/hruby_sim/hruby_rcsim_build.c +87 -48
- data/ext/hruby_sim/hruby_sim.h +67 -1
- data/ext/hruby_sim/hruby_sim_calc.c +211 -28
- data/ext/hruby_sim/hruby_sim_core.c +140 -52
- data/ext/hruby_sim/hruby_sim_mute.c +65 -0
- data/ext/hruby_sim/hruby_sim_stack_calc.c +10 -0
- data/ext/hruby_sim/hruby_sim_tree_calc.c +36 -9
- data/ext/hruby_sim/hruby_sim_vcd.c +41 -23
- data/lib/HDLRuby/hdr_samples/arith_bench.rb +92 -0
- data/lib/HDLRuby/hdr_samples/constant_prop_bench.rb +58 -0
- data/lib/HDLRuby/hdrcc.rb +15 -6
- data/lib/HDLRuby/hruby_bstr.rb +15 -3
- data/lib/HDLRuby/hruby_high.rb +8 -4
- data/lib/HDLRuby/hruby_low.rb +14 -5
- data/lib/HDLRuby/hruby_low2c.rb +184 -68
- data/lib/HDLRuby/hruby_low_without_connection.rb +6 -2
- data/lib/HDLRuby/hruby_rcsim.rb +25 -15
- data/lib/HDLRuby/hruby_rsim.rb +201 -85
- data/lib/HDLRuby/hruby_rsim_mute.rb +35 -0
- data/lib/HDLRuby/hruby_rsim_vcd.rb +168 -12
- data/lib/HDLRuby/hruby_values.rb +19 -2
- data/lib/HDLRuby/hruby_verilog.rb +67 -17
- data/lib/HDLRuby/std/fsm.rb +3 -3
- data/lib/HDLRuby/version.rb +1 -1
- metadata +6 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3a24b730862e801cb34298c05648bf25586a22e0010821e890e05bd31848f3d4
|
4
|
+
data.tar.gz: a9b88f03c706f758c08cb3438a92f180ad977257f2c5b56e5a40c95bd83f6ea8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4d7e6d175b79fb2d0702bebebda2ec00042508a303865e06dad98ca999117ec664c7f9cf9db514e95f03802c8b07e5abc06e7b25d329a2d715948ff4333cb8ca
|
7
|
+
data.tar.gz: 9f9d6b129c9caf9a13165fc54e6158b1dcef292117224690e0066f561e53ea006597fafc9f03585bc82d2868debda933528a5c78eea0621ebb2fbd0794087610
|
@@ -86,6 +86,7 @@ static VALUE RCSimPointer;
|
|
86
86
|
|
87
87
|
/* My own realloc. */
|
88
88
|
static void* my_realloc(void* pointer, size_t old_size, size_t new_size) {
|
89
|
+
// printf("my_realloc with old_size=%lu new_size=%lu\n",old_size,new_size);
|
89
90
|
if(old_size >= new_size) { return pointer; }
|
90
91
|
void* new_pointer = malloc(new_size);
|
91
92
|
memcpy(new_pointer,pointer,old_size);
|
@@ -265,6 +266,8 @@ VALUE rcsim_make_behavior(VALUE mod, VALUE timed) {
|
|
265
266
|
} else {
|
266
267
|
/* The behavior is not timed. */
|
267
268
|
behavior->timed = 0;
|
269
|
+
/* It must be initialized though. */
|
270
|
+
register_init_behavior(behavior);
|
268
271
|
}
|
269
272
|
behavior->active_time = 0;
|
270
273
|
behavior->thread = NULL;
|
@@ -299,11 +302,14 @@ VALUE rcsim_make_event(VALUE mod, VALUE typeV, VALUE sigV) {
|
|
299
302
|
}
|
300
303
|
|
301
304
|
|
305
|
+
static size_t last_signal_id = 0;
|
306
|
+
|
302
307
|
/* Creating a signal C object. */
|
303
308
|
VALUE rcsim_make_signal(VALUE mod, VALUE name, VALUE type) {
|
304
309
|
// printf("rcsim_make_signal\n");
|
305
310
|
/* Allocates the signal. */
|
306
311
|
SignalI signal = (SignalI)malloc(sizeof(SignalIS));
|
312
|
+
signal->id = last_signal_id++;
|
307
313
|
// printf("signal=%p\n",signal);
|
308
314
|
/* Set it up. */
|
309
315
|
signal->kind = SIGNALI;
|
@@ -312,7 +318,7 @@ VALUE rcsim_make_signal(VALUE mod, VALUE name, VALUE type) {
|
|
312
318
|
// printf("signal->name=%p\n",signal->name);
|
313
319
|
// printf("Creating signal named=%s\n",signal->name);
|
314
320
|
value_to_rcsim(TypeS,type,signal->type);
|
315
|
-
// printf("type width=%llu\n",type_width(signal->type));
|
321
|
+
// printf("&type=%p type=%p width=%llu\n",&(signal->type),signal->type,type_width(signal->type));
|
316
322
|
signal->c_value = make_value(signal->type,0);
|
317
323
|
// printf("signal->c_value=%p\n",signal->c_value);
|
318
324
|
signal->c_value->signal = signal;
|
@@ -375,6 +381,7 @@ VALUE rcsim_make_transmit(VALUE mod, VALUE left, VALUE right) {
|
|
375
381
|
// printf("transmit=%p\n",transmit);
|
376
382
|
/* Set it up. */
|
377
383
|
transmit->kind = TRANSMIT;
|
384
|
+
transmit->owner = NULL;
|
378
385
|
value_to_rcsim(ReferenceS,left,transmit->left);
|
379
386
|
value_to_rcsim(ExpressionS,right,transmit->right);
|
380
387
|
/* Returns the C transmit embedded into a ruby VALUE. */
|
@@ -392,6 +399,7 @@ VALUE rcsim_make_print(VALUE mod) {
|
|
392
399
|
// printf("print=%p\n",print);
|
393
400
|
/* Set it up. */
|
394
401
|
print->kind = PRINT;
|
402
|
+
print->owner = NULL;
|
395
403
|
print->num_args = 0;
|
396
404
|
print->args = NULL;
|
397
405
|
/* Returns the C print embedded into a ruby VALUE. */
|
@@ -409,6 +417,7 @@ VALUE rcsim_make_timeWait(VALUE mod, VALUE unitV, VALUE delayV) {
|
|
409
417
|
// printf("timeWait=%p\n",timeWait);
|
410
418
|
/* Set it up. */
|
411
419
|
timeWait->kind = TIME_WAIT;
|
420
|
+
timeWait->owner = NULL;
|
412
421
|
/* Compute the delay. */
|
413
422
|
unsigned long long delay;
|
414
423
|
delay = NUM2LL(delayV);
|
@@ -438,6 +447,7 @@ VALUE rcsim_make_timeRepeat(VALUE mod, VALUE numberV, VALUE statementV) {
|
|
438
447
|
// printf("timeRepeat=%p\n",timeRepeat); fflush(stdout);
|
439
448
|
/* Set it up. */
|
440
449
|
timeRepeat->kind = TIME_REPEAT;
|
450
|
+
timeRepeat->owner = NULL;
|
441
451
|
/* Get and set the number of repeatition. */
|
442
452
|
long long number;
|
443
453
|
number = NUM2LL(numberV);
|
@@ -460,6 +470,7 @@ VALUE rcsim_make_timeTerminate(VALUE mod) {
|
|
460
470
|
// printf("timeTerminate=%p\n",timeTerminate);
|
461
471
|
/* Set it up. */
|
462
472
|
timeTerminate->kind = TIME_TERMINATE;
|
473
|
+
timeTerminate->owner = NULL;
|
463
474
|
/* Returns the C time terminate embedded into a ruby VALUE. */
|
464
475
|
VALUE res;
|
465
476
|
rcsim_to_value(TimeTerminateS,timeTerminate,res);
|
@@ -475,6 +486,7 @@ VALUE rcsim_make_hif(VALUE mod, VALUE conditionV, VALUE yesV, VALUE noV) {
|
|
475
486
|
// printf("hif=%p\n",hif);
|
476
487
|
/* Set it up. */
|
477
488
|
hif->kind = HIF;
|
489
|
+
hif->owner = NULL;
|
478
490
|
value_to_rcsim(ExpressionS,conditionV,hif->condition);
|
479
491
|
value_to_rcsim(StatementS,yesV,hif->yes);
|
480
492
|
if (TYPE(noV) == T_NIL)
|
@@ -499,6 +511,7 @@ VALUE rcsim_make_hcase(VALUE mod, VALUE valueV, VALUE defoltV) {
|
|
499
511
|
// printf("hcase=%p\n",hcase);
|
500
512
|
/* Set it up. */
|
501
513
|
hcase->kind = HCASE;
|
514
|
+
hcase->owner = NULL;
|
502
515
|
value_to_rcsim(ExpressionS,valueV,hcase->value);
|
503
516
|
hcase->num_whens = 0;
|
504
517
|
hcase->matches = NULL;
|
@@ -550,6 +563,7 @@ VALUE rcsim_make_value_numeric(VALUE mod, VALUE typeV, VALUE contentV) {
|
|
550
563
|
value->capacity = 0;
|
551
564
|
value->data_str = NULL;
|
552
565
|
value->data_int = NUM2LL(contentV);
|
566
|
+
// printf("value->data_int=%lld\n",value->data_int);
|
553
567
|
/* Returns the C value embedded into a ruby VALUE. */
|
554
568
|
VALUE res;
|
555
569
|
rcsim_to_value(ValueS,value,res);
|
@@ -591,6 +605,7 @@ VALUE rcsim_make_cast(VALUE mod, VALUE type, VALUE child) {
|
|
591
605
|
// printf("cast=%p\n",cast);
|
592
606
|
/* Set it up. */
|
593
607
|
cast->kind = CAST;
|
608
|
+
cast->owner = NULL;
|
594
609
|
value_to_rcsim(TypeS,type,cast->type);
|
595
610
|
value_to_rcsim(ExpressionS,child,cast->child);
|
596
611
|
/* Returns the C cast embedded into a ruby VALUE. */
|
@@ -607,6 +622,7 @@ VALUE rcsim_make_unary(VALUE mod, VALUE type, VALUE operator, VALUE child) {
|
|
607
622
|
// printf("unary=%p\n",unary);
|
608
623
|
/* Set it up. */
|
609
624
|
unary->kind = UNARY;
|
625
|
+
unary->owner = NULL;
|
610
626
|
value_to_rcsim(TypeS,type,unary->type);
|
611
627
|
switch(sym_to_char(operator)) {
|
612
628
|
case (unsigned char)'~': unary->oper = not_value; break;
|
@@ -628,6 +644,7 @@ VALUE rcsim_make_binary(VALUE mod, VALUE type, VALUE operator, VALUE left, VALUE
|
|
628
644
|
// printf("binary=%p\n",binary);
|
629
645
|
/* Set it up. */
|
630
646
|
binary->kind = BINARY;
|
647
|
+
binary->owner = NULL;
|
631
648
|
value_to_rcsim(TypeS,type,binary->type);
|
632
649
|
switch(sym_to_char(operator)) {
|
633
650
|
case (unsigned char)'+': binary->oper = add_value; break;
|
@@ -664,6 +681,7 @@ VALUE rcsim_make_select(VALUE mod, VALUE type, VALUE sel) {
|
|
664
681
|
// printf("select=%p\n",select);
|
665
682
|
/* Set it up. */
|
666
683
|
select->kind = SELECT;
|
684
|
+
select->owner = NULL;
|
667
685
|
value_to_rcsim(TypeS,type,select->type);
|
668
686
|
value_to_rcsim(ExpressionS,sel,select->select);
|
669
687
|
select->num_choices = 0;
|
@@ -682,6 +700,7 @@ VALUE rcsim_make_concat(VALUE mod, VALUE type, VALUE dirV) {
|
|
682
700
|
// printf("concat=%p\n",concat);
|
683
701
|
/* Set it up. */
|
684
702
|
concat->kind = CONCAT;
|
703
|
+
concat->owner = NULL;
|
685
704
|
value_to_rcsim(TypeS,type,concat->type);
|
686
705
|
concat->num_exprs = 0;
|
687
706
|
concat->exprs = NULL;
|
@@ -700,6 +719,7 @@ VALUE rcsim_make_refConcat(VALUE mod, VALUE type, VALUE dirV) {
|
|
700
719
|
// printf("refConcat=%p\n",refConcat);
|
701
720
|
/* Set it up. */
|
702
721
|
refConcat->kind = REF_CONCAT;
|
722
|
+
refConcat->owner = NULL;
|
703
723
|
value_to_rcsim(TypeS,type,refConcat->type);
|
704
724
|
refConcat->num_refs = 0;
|
705
725
|
refConcat->refs = NULL;
|
@@ -718,6 +738,7 @@ VALUE rcsim_make_refIndex(VALUE mod, VALUE type, VALUE index, VALUE ref) {
|
|
718
738
|
// printf("refIndex=%p\n",refIndex);
|
719
739
|
/* Set it up. */
|
720
740
|
refIndex->kind = REF_INDEX;
|
741
|
+
refIndex->owner = NULL;
|
721
742
|
value_to_rcsim(TypeS,type,refIndex->type);
|
722
743
|
value_to_rcsim(ExpressionS,index,refIndex->index);
|
723
744
|
value_to_rcsim(ReferenceS,ref,refIndex->ref);
|
@@ -735,6 +756,7 @@ VALUE rcsim_make_refRange(VALUE mod, VALUE type, VALUE first, VALUE last, VALUE
|
|
735
756
|
// printf("refRange=%p\n",refRange);
|
736
757
|
/* Set it up. */
|
737
758
|
refRange->kind = REF_RANGE;
|
759
|
+
refRange->owner = NULL;
|
738
760
|
value_to_rcsim(TypeS,type,refRange->type);
|
739
761
|
value_to_rcsim(ExpressionS,first,refRange->first);
|
740
762
|
value_to_rcsim(ExpressionS,last,refRange->last);
|
@@ -754,6 +776,7 @@ VALUE rcsim_make_stringE(VALUE mod, VALUE strV) {
|
|
754
776
|
// printf("stringE=%p\n",stringE);
|
755
777
|
/* Set it up. */
|
756
778
|
stringE->kind = STRINGE;
|
779
|
+
stringE->owner = NULL;
|
757
780
|
stringE->str = strdup(StringValueCStr(strV));
|
758
781
|
/* Returns the C character string embedded into a ruby VALUE. */
|
759
782
|
VALUE res;
|
@@ -777,8 +800,8 @@ VALUE rcsim_add_systemT_inputs(VALUE mod, VALUE systemTV, VALUE sigVs) {
|
|
777
800
|
// printf("first systemT->inputs=%p\n",systemT->inputs); fflush(stdout);
|
778
801
|
// systemT->inputs=realloc(systemT->inputs,
|
779
802
|
// sizeof(SignalI[systemT->num_inputs]));
|
780
|
-
systemT->inputs=my_realloc(systemT->inputs,
|
781
|
-
sizeof(SignalI[systemT->num_inputs]));
|
803
|
+
systemT->inputs=(SignalI*)my_realloc(systemT->inputs,
|
804
|
+
sizeof(SignalI[old_num]), sizeof(SignalI[systemT->num_inputs]));
|
782
805
|
// printf("now systemT->inputs=%p\n",systemT->inputs); fflush(stdout);
|
783
806
|
// printf("access test: %p\n",systemT->inputs[0]); fflush(stdout);
|
784
807
|
/* Get and add the signals from the Ruby value. */
|
@@ -804,8 +827,8 @@ VALUE rcsim_add_systemT_outputs(VALUE mod, VALUE systemTV, VALUE sigVs) {
|
|
804
827
|
// printf("first systemT->outputs=%p\n",systemT->outputs); fflush(stdout);
|
805
828
|
// systemT->outputs =realloc(systemT->outputs,
|
806
829
|
// sizeof(SignalI[systemT->num_outputs]));
|
807
|
-
systemT->outputs =my_realloc(systemT->outputs,
|
808
|
-
sizeof(SignalI[systemT->num_outputs]));
|
830
|
+
systemT->outputs =(SignalI*)my_realloc(systemT->outputs,
|
831
|
+
sizeof(SignalI[old_num]), sizeof(SignalI[systemT->num_outputs]));
|
809
832
|
// printf("now systemT->outputs=%p\n",systemT->outputs); fflush(stdout);
|
810
833
|
// printf("access test: %p\n",systemT->outputs[0]); fflush(stdout);
|
811
834
|
/* Get and add the signals from the Ruby value. */
|
@@ -831,8 +854,8 @@ VALUE rcsim_add_systemT_inouts(VALUE mod, VALUE systemTV, VALUE sigVs) {
|
|
831
854
|
// printf("first systemT->inouts=%p\n",systemT->inouts); fflush(stdout);
|
832
855
|
// systemT->inouts =realloc(systemT->inouts,
|
833
856
|
// sizeof(SignalI[systemT->num_inouts]));
|
834
|
-
systemT->inouts =my_realloc(systemT->inouts,
|
835
|
-
sizeof(SignalI[systemT->num_inouts]));
|
857
|
+
systemT->inouts =(SignalI*)my_realloc(systemT->inouts,
|
858
|
+
sizeof(SignalI[old_num]), sizeof(SignalI[systemT->num_inouts]));
|
836
859
|
// printf("now systemT->inouts=%p\n",systemT->inouts); fflush(stdout);
|
837
860
|
// printf("access test: %p\n",systemT->inouts[0]); fflush(stdout);
|
838
861
|
/* Get and add the signals from the Ruby value. */
|
@@ -858,8 +881,8 @@ VALUE rcsim_add_scope_inners(VALUE mod, VALUE scopeV, VALUE sigVs) {
|
|
858
881
|
// printf("first scope->inners=%p\n",scope->inners); fflush(stdout);
|
859
882
|
// scope->inners = realloc(scope->inners,
|
860
883
|
// sizeof(SignalI[scope->num_inners]));
|
861
|
-
scope->inners = my_realloc(scope->inners,
|
862
|
-
sizeof(SignalI[scope->num_inners]));
|
884
|
+
scope->inners = (SignalI*)my_realloc(scope->inners,
|
885
|
+
sizeof(SignalI[old_num]), sizeof(SignalI[scope->num_inners]));
|
863
886
|
// printf("now scope->inners=%p\n",scope->inners); fflush(stdout);
|
864
887
|
// printf("access test: %p\n",scope->inners[0]); fflush(stdout);
|
865
888
|
/* Get and add the signals from the Ruby value. */
|
@@ -888,8 +911,8 @@ VALUE rcsim_add_scope_behaviors(VALUE mod, VALUE scopeV, VALUE behVs) {
|
|
888
911
|
// printf("first scope->behaviors=%p\n",scope->behaviors); fflush(stdout);
|
889
912
|
// scope->behaviors = realloc(scope->behaviors,
|
890
913
|
// sizeof(Behavior[scope->num_behaviors]));
|
891
|
-
scope->behaviors = my_realloc(scope->behaviors,
|
892
|
-
|
914
|
+
scope->behaviors = (Behavior*)my_realloc(scope->behaviors,
|
915
|
+
sizeof(Behavior[old_num]), sizeof(Behavior[scope->num_behaviors]));
|
893
916
|
// printf("now scope->behaviors=%p\n",scope->behaviors); fflush(stdout);
|
894
917
|
// printf("access test: %p\n",scope->behaviors[0]); fflush(stdout);
|
895
918
|
/* Get and add the behaviors from the Ruby value. */
|
@@ -915,8 +938,8 @@ VALUE rcsim_add_scope_systemIs(VALUE mod, VALUE scopeV, VALUE sysVs) {
|
|
915
938
|
// printf("first scope->systemIs=%p\n",scope->systemIs); fflush(stdout);
|
916
939
|
// scope->systemIs = realloc(scope->systemIs,
|
917
940
|
// sizeof(SystemI[scope->num_systemIs]));
|
918
|
-
scope->systemIs = my_realloc(scope->systemIs,
|
919
|
-
|
941
|
+
scope->systemIs = (SystemI*)my_realloc(scope->systemIs,
|
942
|
+
sizeof(SystemI[old_num]), sizeof(SystemI[scope->num_systemIs]));
|
920
943
|
// printf("now scope->systemIs=%p\n",scope->systemIs); fflush(stdout);
|
921
944
|
// printf("access test: %p\n",scope->systemIs[0]); fflush(stdout);
|
922
945
|
/* Get and add the system instances from the Ruby value. */
|
@@ -942,8 +965,8 @@ VALUE rcsim_add_scope_scopes(VALUE mod, VALUE scopeV, VALUE scpVs) {
|
|
942
965
|
// printf("first scope->scopes=%p\n",scope->scopes); fflush(stdout);
|
943
966
|
// scope->scopes = realloc(scope->scopes,
|
944
967
|
// sizeof(Scope[scope->num_scopes]));
|
945
|
-
scope->scopes = my_realloc(scope->scopes,
|
946
|
-
|
968
|
+
scope->scopes = (Scope*)my_realloc(scope->scopes,
|
969
|
+
sizeof(Scope[old_num]), sizeof(Scope[scope->num_scopes]));
|
947
970
|
// printf("now scope->scopes=%p\n",scope->scopes); fflush(stdout);
|
948
971
|
// printf("access test: %p\n",scope->scopes[0]); fflush(stdout);
|
949
972
|
/* Get and add the sub scopes from the Ruby value. */
|
@@ -969,8 +992,8 @@ VALUE rcsim_add_behavior_events(VALUE mod, VALUE behaviorV, VALUE eventVs) {
|
|
969
992
|
// printf("first behavior->events=%p\n",behavior->events); fflush(stdout);
|
970
993
|
// behavior->events = realloc(behavior->events,
|
971
994
|
// sizeof(Event[behavior->num_events]));
|
972
|
-
behavior->events = my_realloc(behavior->events,
|
973
|
-
|
995
|
+
behavior->events = (Event*)my_realloc(behavior->events,
|
996
|
+
sizeof(Event[old_num]), sizeof(Event[behavior->num_events]));
|
974
997
|
// printf("now behavior->events=%p\n",behavior->events); fflush(stdout);
|
975
998
|
// printf("access test: %p\n",behavior->events[0]); fflush(stdout);
|
976
999
|
/* Get and add the events from the Ruby value. */
|
@@ -986,7 +1009,8 @@ VALUE rcsim_add_behavior_events(VALUE mod, VALUE behaviorV, VALUE eventVs) {
|
|
986
1009
|
sig->num_any++;
|
987
1010
|
// printf("first sig->any=%p\n",sig->any); fflush(stdout);
|
988
1011
|
// sig->any = realloc(sig->any,sizeof(Object[sig->num_any]));
|
989
|
-
sig->any = my_realloc(sig->any,
|
1012
|
+
sig->any = (Object*)my_realloc(sig->any,
|
1013
|
+
sizeof(Object[sig->num_any-1]),sizeof(Object[sig->num_any]));
|
990
1014
|
// printf("now sig->any=%p\n",sig->any); fflush(stdout);
|
991
1015
|
// printf("access test: %p\n",sig->any[0]); fflush(stdout);
|
992
1016
|
// show_access(sig->any,sig->num_any-1);
|
@@ -997,7 +1021,8 @@ VALUE rcsim_add_behavior_events(VALUE mod, VALUE behaviorV, VALUE eventVs) {
|
|
997
1021
|
sig->num_pos++;
|
998
1022
|
// printf("first sig->pos=%p\n",sig->pos); fflush(stdout);
|
999
1023
|
// sig->pos = realloc(sig->pos,sizeof(Object[sig->num_pos]));
|
1000
|
-
sig->pos = my_realloc(sig->pos,
|
1024
|
+
sig->pos = (Object*)my_realloc(sig->pos,
|
1025
|
+
sizeof(Object[sig->num_pos-1]),sizeof(Object[sig->num_pos]));
|
1001
1026
|
// printf("now sig->pos=%p\n",sig->pos); fflush(stdout);
|
1002
1027
|
// printf("access test: %p\n",sig->pos[0]); fflush(stdout);
|
1003
1028
|
// show_access(sig->pos,sig->num_pos-1);
|
@@ -1008,7 +1033,8 @@ VALUE rcsim_add_behavior_events(VALUE mod, VALUE behaviorV, VALUE eventVs) {
|
|
1008
1033
|
sig->num_neg++;
|
1009
1034
|
// printf("first sig->neg=%p\n",sig->neg); fflush(stdout);
|
1010
1035
|
// sig->neg = realloc(sig->neg,sizeof(Object[sig->num_neg]));
|
1011
|
-
sig->neg = my_realloc(sig->neg,
|
1036
|
+
sig->neg = (Object*)my_realloc(sig->neg,
|
1037
|
+
sizeof(Object[sig->num_neg-1]),sizeof(Object[sig->num_neg]));
|
1012
1038
|
// printf("now sig->neg=%p\n",sig->neg); fflush(stdout);
|
1013
1039
|
// printf("access test: %p\n",sig->neg[0]); fflush(stdout);
|
1014
1040
|
// show_access(sig->neg,sig->num_neg-1);
|
@@ -1035,8 +1061,8 @@ VALUE rcsim_add_systemI_systemTs(VALUE mod, VALUE systemIV, VALUE sysVs) {
|
|
1035
1061
|
// printf("first systemI->systems=%p\n",systemI->systems); fflush(stdout);
|
1036
1062
|
// systemI->systems=realloc(systemI->systems,
|
1037
1063
|
// sizeof(SystemT[systemI->num_systems]));
|
1038
|
-
systemI->systems=my_realloc(systemI->systems,
|
1039
|
-
sizeof(SystemT[systemI->num_systems]));
|
1064
|
+
systemI->systems = (SystemT*)my_realloc(systemI->systems,
|
1065
|
+
sizeof(SystemT[old_num]), sizeof(SystemT[systemI->num_systems]));
|
1040
1066
|
// printf("now systemI->systems=%p\n",systemI->systems); fflush(stdout);
|
1041
1067
|
// printf("access test: %p\n",systemI->systems[0]); fflush(stdout);
|
1042
1068
|
/* Get and add the alternate system types from the Ruby value. */
|
@@ -1062,8 +1088,8 @@ VALUE rcsim_add_print_args(VALUE mod, VALUE printV, VALUE argVs) {
|
|
1062
1088
|
// printf("first print->args=%p\n",print->args); fflush(stdout);
|
1063
1089
|
// print->args = realloc(print->args,
|
1064
1090
|
// sizeof(Expression[print->num_args]));
|
1065
|
-
print->args = my_realloc(print->args,
|
1066
|
-
|
1091
|
+
print->args = (Expression*)my_realloc(print->args,
|
1092
|
+
sizeof(Expression[old_num]), sizeof(Expression[print->num_args]));
|
1067
1093
|
// printf("now print->args=%p\n",print->args); fflush(stdout);
|
1068
1094
|
// printf("access test: %p\n",print->args[0]); fflush(stdout);
|
1069
1095
|
/* Get and add the arguments from the Ruby value. */
|
@@ -1089,11 +1115,13 @@ VALUE rcsim_add_hif_noifs(VALUE mod, VALUE hifV, VALUE condVs, VALUE stmntVs) {
|
|
1089
1115
|
// printf("first hif->noconds=%p\n",hif->noconds); fflush(stdout);
|
1090
1116
|
// printf("first hif->nostmnts=%p\n",hif->nostmnts); fflush(stdout);
|
1091
1117
|
// hif->noconds = realloc(hif->noconds,sizeof(Expression[hif->num_noifs]));
|
1092
|
-
hif->noconds = my_realloc(hif->noconds,
|
1118
|
+
hif->noconds = (Expression*)my_realloc(hif->noconds,
|
1119
|
+
sizeof(Expression[old_num]),sizeof(Expression[hif->num_noifs]));
|
1093
1120
|
// printf("now hif->noconds=%p\n",hif->noconds); fflush(stdout);
|
1094
1121
|
// printf("access test: %p\n",hif->noconds[0]); fflush(stdout);
|
1095
1122
|
// hif->nostmnts = realloc(hif->nostmnts,sizeof(Statement[hif->num_noifs]));
|
1096
|
-
hif->nostmnts = my_realloc(hif->nostmnts,
|
1123
|
+
hif->nostmnts = (Statement*)my_realloc(hif->nostmnts,
|
1124
|
+
sizeof(Statement[old_num]),sizeof(Statement[hif->num_noifs]));
|
1097
1125
|
// printf("now hif->nostmnts=%p\n",hif->nostmnts); fflush(stdout);
|
1098
1126
|
// printf("access test: %p\n",hif->nostmnts[0]); fflush(stdout);
|
1099
1127
|
/* Get and add the noifs from the Ruby value. */
|
@@ -1124,14 +1152,14 @@ VALUE rcsim_add_hcase_whens(VALUE mod, VALUE hcaseV, VALUE matchVs, VALUE stmntV
|
|
1124
1152
|
// printf("first hcase->stmnts=%p\n",hcase->stmnts); fflush(stdout);
|
1125
1153
|
// hcase->matches = realloc(hcase->matches,
|
1126
1154
|
// sizeof(Expression[hcase->num_whens]));
|
1127
|
-
hcase->matches = my_realloc(hcase->matches,
|
1128
|
-
|
1155
|
+
hcase->matches = (Expression*)my_realloc(hcase->matches,
|
1156
|
+
sizeof(Expression[old_num]), sizeof(Expression[hcase->num_whens]));
|
1129
1157
|
// printf("now hcase->matches=%p\n",hcase->matches); fflush(stdout);
|
1130
1158
|
// printf("access test: %p\n",hcase->matches[0]); fflush(stdout);
|
1131
1159
|
// hcase->stmnts = realloc(hcase->stmnts,
|
1132
1160
|
// sizeof(Statement[hcase->num_whens]));
|
1133
|
-
hcase->stmnts = my_realloc(hcase->stmnts,
|
1134
|
-
|
1161
|
+
hcase->stmnts = (Statement*)my_realloc(hcase->stmnts,
|
1162
|
+
sizeof(Statement[old_num]), sizeof(Statement[hcase->num_whens]));
|
1135
1163
|
// printf("now hcase->stmnts=%p\n",hcase->stmnts); fflush(stdout);
|
1136
1164
|
// printf("access test: %p\n",hcase->stmnts[0]); fflush(stdout);
|
1137
1165
|
/* Get and add the whens from the Ruby value. */
|
@@ -1161,8 +1189,8 @@ VALUE rcsim_add_block_inners(VALUE mod, VALUE blockV, VALUE sigVs) {
|
|
1161
1189
|
// printf("first block->inners=%p\n",block->inners); fflush(stdout);
|
1162
1190
|
// block->inners = realloc(block->inners,
|
1163
1191
|
// sizeof(SignalI[block->num_inners]));
|
1164
|
-
block->inners = my_realloc(block->inners,
|
1165
|
-
sizeof(SignalI[block->num_inners]));
|
1192
|
+
block->inners = (SignalI*)my_realloc(block->inners,
|
1193
|
+
sizeof(SignalI[old_num]), sizeof(SignalI[block->num_inners]));
|
1166
1194
|
// printf("now block->inners=%p\n",block->inners); fflush(stdout);
|
1167
1195
|
// printf("access test: %p\n",block->inners[0]); fflush(stdout);
|
1168
1196
|
/* Get and add the signals from the Ruby value. */
|
@@ -1188,8 +1216,8 @@ VALUE rcsim_add_block_statements(VALUE mod, VALUE blockV, VALUE stmntVs) {
|
|
1188
1216
|
// printf("first block->stmnts=%p\n",block->stmnts); fflush(stdout);
|
1189
1217
|
// block->stmnts = realloc(block->stmnts,
|
1190
1218
|
// sizeof(Statement[block->num_stmnts]));
|
1191
|
-
block->stmnts = my_realloc(block->stmnts,
|
1192
|
-
sizeof(Statement[block->num_stmnts]));
|
1219
|
+
block->stmnts = (Statement*)my_realloc(block->stmnts,
|
1220
|
+
sizeof(Statement[old_num]), sizeof(Statement[block->num_stmnts]));
|
1193
1221
|
// printf("now block->stmnts=%p\n",block->stmnts); fflush(stdout);
|
1194
1222
|
// printf("access test: %p\n",block->stmnts[0]); fflush(stdout);
|
1195
1223
|
/* Get and add the statements from the Ruby value. */
|
@@ -1215,8 +1243,8 @@ VALUE rcsim_add_select_choices(VALUE mod, VALUE selectV, VALUE choiceVs) {
|
|
1215
1243
|
// printf("first select->choices=%p\n",select->choices); fflush(stdout);
|
1216
1244
|
// select->choices = realloc(select->choices,
|
1217
1245
|
// sizeof(Expression[select->num_choices]));
|
1218
|
-
select->choices = my_realloc(select->choices,
|
1219
|
-
sizeof(Expression[select->num_choices]));
|
1246
|
+
select->choices = (Expression*)my_realloc(select->choices,
|
1247
|
+
sizeof(Expression[old_num]),sizeof(Expression[select->num_choices]));
|
1220
1248
|
// printf("now select->choices=%p\n",select->choices); fflush(stdout);
|
1221
1249
|
// printf("access test: %p\n",select->choices[0]); fflush(stdout);
|
1222
1250
|
/* Get and add the choices from the Ruby value. */
|
@@ -1243,8 +1271,8 @@ VALUE rcsim_add_concat_expressions(VALUE mod, VALUE concatV, VALUE exprVs) {
|
|
1243
1271
|
// printf("first concat->exprs=%p\n",concat->exprs); fflush(stdout);
|
1244
1272
|
// concat->exprs = realloc(concat->exprs,
|
1245
1273
|
// sizeof(Expression[concat->num_exprs]));
|
1246
|
-
concat->exprs = my_realloc(concat->exprs,
|
1247
|
-
sizeof(Expression[concat->num_exprs]));
|
1274
|
+
concat->exprs = (Expression*)my_realloc(concat->exprs,
|
1275
|
+
sizeof(Expression[old_num]), sizeof(Expression[concat->num_exprs]));
|
1248
1276
|
// printf("now concat->exprs=%p\n",concat->exprs); fflush(stdout);
|
1249
1277
|
// printf("access test: %p\n",concat->exprs[0]); fflush(stdout);
|
1250
1278
|
/* Get and add the expressions from the Ruby value. */
|
@@ -1270,8 +1298,8 @@ VALUE rcsim_add_refConcat_refs(VALUE mod, VALUE refConcatV, VALUE refVs) {
|
|
1270
1298
|
// printf("first refConcat->refs=%p\n",refConcat->refs); fflush(stdout);
|
1271
1299
|
// refConcat->refs = realloc(refConcat->refs,
|
1272
1300
|
// sizeof(Reference[refConcat->num_refs]));
|
1273
|
-
refConcat->refs = my_realloc(refConcat->refs,
|
1274
|
-
sizeof(Reference[refConcat->num_refs]));
|
1301
|
+
refConcat->refs = (Reference*)my_realloc(refConcat->refs,
|
1302
|
+
sizeof(Reference[old_num]), sizeof(Reference[refConcat->num_refs]));
|
1275
1303
|
// printf("now refConcat->refs=%p\n",refConcat->refs); fflush(stdout);
|
1276
1304
|
// printf("access test: %p\n",refConcat->refs[0]); fflush(stdout);
|
1277
1305
|
/* Get and add the references from the Ruby value. */
|
@@ -1280,6 +1308,7 @@ VALUE rcsim_add_refConcat_refs(VALUE mod, VALUE refConcatV, VALUE refVs) {
|
|
1280
1308
|
// show_access(refConcat->refs,old_num+i);
|
1281
1309
|
value_to_rcsim(ReferenceS,rb_ary_entry(refVs,i),ref);
|
1282
1310
|
refConcat->refs[old_num + i] = ref;
|
1311
|
+
// printf("ref=%p ref &type=%p type=%p width=%llu\n",ref,&(ref->type),ref->type,type_width(ref->type));
|
1283
1312
|
}
|
1284
1313
|
return refConcatV;
|
1285
1314
|
}
|
@@ -1336,11 +1365,11 @@ VALUE rcsim_set_signal_value(VALUE mod, VALUE signalV, VALUE exprV) {
|
|
1336
1365
|
Expression expr;
|
1337
1366
|
value_to_rcsim(ExpressionS,exprV,expr);
|
1338
1367
|
/* Compute the value from it. */
|
1339
|
-
// Value value = calc_expression(expr);
|
1340
1368
|
Value value = get_value();
|
1341
1369
|
value = calc_expression(expr,value);
|
1342
1370
|
/* Copies the value. */
|
1343
1371
|
signal->f_value = copy_value(value,signal->f_value);
|
1372
|
+
signal->c_value = copy_value(value,signal->c_value);
|
1344
1373
|
free_value();
|
1345
1374
|
return signalV;
|
1346
1375
|
}
|
@@ -1349,8 +1378,11 @@ VALUE rcsim_set_signal_value(VALUE mod, VALUE signalV, VALUE exprV) {
|
|
1349
1378
|
/** Starts the C-Ruby hybrid simulation.
|
1350
1379
|
* @param systemTV the top system type.
|
1351
1380
|
* @param name the name of the simulation.
|
1352
|
-
* @param
|
1353
|
-
|
1381
|
+
* @param outmode tells which output mode is used:
|
1382
|
+
* 0: standard
|
1383
|
+
* 1: mute
|
1384
|
+
* 2: vcd */
|
1385
|
+
VALUE rcsim_main(VALUE mod, VALUE systemTV, VALUE name, VALUE outmodeV) {
|
1354
1386
|
/* Get the C system type from the Ruby value. */
|
1355
1387
|
SystemT systemT;
|
1356
1388
|
value_to_rcsim(SystemTS,systemTV,systemT);
|
@@ -1358,11 +1390,18 @@ VALUE rcsim_main(VALUE mod, VALUE systemTV, VALUE name, VALUE vcd) {
|
|
1358
1390
|
top_system = systemT;
|
1359
1391
|
/* Enable it. */
|
1360
1392
|
set_enable_system(systemT,1);
|
1393
|
+
/* Get the output mode. */
|
1394
|
+
int outmode = NUM2INT(outmodeV);
|
1361
1395
|
/* Starts the simulation. */
|
1362
|
-
|
1363
|
-
hruby_sim_core(StringValueCStr(name),
|
1364
|
-
|
1365
|
-
hruby_sim_core(StringValueCStr(name),
|
1396
|
+
switch(outmode) {
|
1397
|
+
case 0: hruby_sim_core(StringValueCStr(name),init_default_visualizer,-1);
|
1398
|
+
break;
|
1399
|
+
case 1: hruby_sim_core(StringValueCStr(name),init_mute_visualizer,-1);
|
1400
|
+
break;
|
1401
|
+
case 2: hruby_sim_core(StringValueCStr(name),init_vcd_visualizer,-1);
|
1402
|
+
break;
|
1403
|
+
default:hruby_sim_core(StringValueCStr(name),init_default_visualizer,-1);
|
1404
|
+
}
|
1366
1405
|
return systemTV;
|
1367
1406
|
}
|
1368
1407
|
|
@@ -1406,7 +1445,7 @@ void Init_hruby_sim() {
|
|
1406
1445
|
rb_define_singleton_method(mod,"rcsim_make_binary",rcsim_make_binary,4);
|
1407
1446
|
rb_define_singleton_method(mod,"rcsim_make_select",rcsim_make_select,2);
|
1408
1447
|
rb_define_singleton_method(mod,"rcsim_make_concat",rcsim_make_concat,2);
|
1409
|
-
rb_define_singleton_method(mod,"rcsim_make_refConcat",rcsim_make_refConcat,
|
1448
|
+
rb_define_singleton_method(mod,"rcsim_make_refConcat",rcsim_make_refConcat,2);
|
1410
1449
|
rb_define_singleton_method(mod,"rcsim_make_refIndex",rcsim_make_refIndex,3);
|
1411
1450
|
rb_define_singleton_method(mod,"rcsim_make_refRange",rcsim_make_refRange,4);
|
1412
1451
|
rb_define_singleton_method(mod,"rcsim_make_stringE",rcsim_make_stringE,1);
|