HDLRuby 2.6.2 → 2.6.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 8611332c824fad3b8ad75436070b940389c1d8cf75c66be0842cd5f4efd22340
4
- data.tar.gz: 71f3633a674d50a2b4014654d6af82066bc9e8e399e6cdddb733827411ea2787
3
+ metadata.gz: de0bd759fdbbac53ed126dac38739ef63bdbea435e59f6ebfe9fe35d08475e13
4
+ data.tar.gz: 9ddbebe786fe3f3f3b6a2db76954f1d8c118cb1913d3487251b9419c1c68c997
5
5
  SHA512:
6
- metadata.gz: 8316f77bab49fc0899074915a18292f357b45c5e5415b3045f74b80f67260566797e8ffc0edf8b6eaca86340c32adfde49650edddfaa91cad03efd1e6e9f729c
7
- data.tar.gz: 117236582bbca17d1ee75a2e3fb4c601ef53b1988f4175a7f77632f9c85a79e5af3e3474463f654c05a48ecdcabd73967d447b90f7640451f1bc3a24d99fd2ec
6
+ metadata.gz: d22275446a0323c9a27ff0df24d7bb6f684dec195a53f2713176908da81dfc693502bf7649cde756e81726f01dbce910befdc33a623f6022e9e448c559f8bfef
7
+ data.tar.gz: 8dd6f59d5f0c6898e3e5b71b287900ab3bac0b21154b51acbf14a5959180632d3090fd3979478a5f50bdd418ec09104fb33e4d99059dee7812a16a9aba6f42af
data/lib/HDLRuby/hdrcc.rb CHANGED
@@ -252,6 +252,20 @@ module HDLRuby
252
252
 
253
253
  end
254
254
 
255
+ # Locate an executable from cmd.
256
+ def which(cmd)
257
+ # Get the possible exetensions (for windows case).
258
+ exts = ENV['PATHEXT'] ? ENV['PATHEXT'].split(';') : ['']
259
+ # Look for the command within the executable paths.
260
+ ENV['PATH'].split(File::PATH_SEPARATOR).each do |path|
261
+ exts.each do |ext|
262
+ exe = File.join(path, "#{cmd}#{ext}")
263
+ return exe if File.executable?(exe) && !File.directory?(exe)
264
+ end
265
+ end
266
+ nil
267
+ end
268
+
255
269
 
256
270
 
257
271
  if __FILE__ == $0 then
@@ -655,8 +669,19 @@ elsif $options[:clang] then
655
669
  end
656
670
  end
657
671
  Dir.chdir($output)
658
- # Kernel.system("make -s")
659
- Kernel.system("cc -o3 -o hruby_simulator *.c -lpthread")
672
+ # Find the compiler.
673
+ cc_cmd = which('cc')
674
+ unless cc_cmd then
675
+ cc_cmd = which('gcc')
676
+ end
677
+ unless cc_cmd then
678
+ raise "Could not find any compiler, please compile by hand as follows:\n" +
679
+ " In folder #{$output} execute:\n" +
680
+ " <my compiler> -o hruby_simulator *.c -lpthread\n" +
681
+ " Then execute:\n hruby_simulator"
682
+ end
683
+ # Use it.
684
+ Kernel.system("#{cc_cmd} -o3 -o hruby_simulator *.c -lpthread")
660
685
  Kernel.system("./hruby_simulator")
661
686
  end
662
687
  elsif $options[:verilog] then
@@ -451,7 +451,10 @@ typedef struct BehaviorS_ {
451
451
 
452
452
  int activated; /* Tells if the behavior is activated or not. */
453
453
 
454
- int timed; /* Tell if the behavior is timed or not. */
454
+ int timed; /* Tell if the behavior is timed or not:
455
+ - 0: not timed
456
+ - 1: timed
457
+ - 2: timed and finished. */
455
458
  unsigned long long active_time; /* The next time the behavior has to be activated. */
456
459
  pthread_t thread; /* The thread assotiated with the behavior (if any).*/
457
460
  } BehaviorS;
@@ -285,7 +285,8 @@ void hruby_sim_advance_time() {
285
285
  int i;
286
286
  for(i=0; i<num_timed_behaviors; ++i) {
287
287
  unsigned long long beh_time = timed_behaviors[i]->active_time;
288
- if (beh_time < next_time) next_time = beh_time;
288
+ if (timed_behaviors[i]->timed == 1)
289
+ if (beh_time < next_time) next_time = beh_time;
289
290
  }
290
291
  /* Sets the new activation time. */
291
292
  hruby_sim_time = next_time;
@@ -310,7 +311,9 @@ void hruby_sim_activate_behaviors_on_time() {
310
311
  /* Count the number of behaviors that will be activated. */
311
312
  for(i=0; i<num_timed_behaviors; ++i) {
312
313
  Behavior beh = timed_behaviors[i];
313
- if (beh->active_time == hruby_sim_time) {
314
+ // printf("beh->active_time=%llu\n",beh->active_time);
315
+ // if (beh->active_time == hruby_sim_time) {
316
+ if (beh->timed == 1 && beh->active_time == hruby_sim_time) {
314
317
  /* Increase the number of timed behavior to wait for. */
315
318
  num_active_behaviors ++;
316
319
  // printf("num_active_behaviors = %d\n",num_active_behaviors);
@@ -318,18 +321,19 @@ void hruby_sim_activate_behaviors_on_time() {
318
321
  }
319
322
  /* Activate the behaviors .*/
320
323
  behaviors_can_run = 1;
324
+ // printf("$2\n");
321
325
  // pthread_cond_signal(&compute_cond); /* No behaviors. */
322
- pthread_cond_signal(&hruby_beh_cond);
326
+ // pthread_cond_signal(&hruby_beh_cond);
323
327
  pthread_mutex_unlock(&hruby_sim_mutex);
324
- // printf("$2\n");
328
+ pthread_cond_broadcast(&hruby_beh_cond);
325
329
  }
326
330
 
327
331
 
328
332
  /** Wait for the active timed behaviors to advance. */
329
333
  void hruby_sim_wait_behaviors() {
330
- // printf("$3\n");
331
334
  pthread_mutex_lock(&hruby_sim_mutex);
332
335
  while(num_active_behaviors > 0) {
336
+ // printf("$3\n");
333
337
  // printf("num_active_behaviors = %d\n",num_active_behaviors);
334
338
  // pthread_cond_wait(&active_behaviors_cond, &hruby_sim_mutex);
335
339
  pthread_cond_wait(&hruby_sim_cond, &hruby_sim_mutex);
@@ -349,6 +353,7 @@ void* behavior_run(void* arg) {
349
353
  pthread_mutex_lock(&hruby_sim_mutex);
350
354
  num_active_behaviors -= 1;
351
355
  while(!behaviors_can_run) {
356
+ // printf("cannot run\n");
352
357
  // pthread_cond_wait(&compute_cond, &hruby_sim_mutex);
353
358
  pthread_cond_wait(&hruby_beh_cond, &hruby_sim_mutex);
354
359
  }
@@ -356,12 +361,17 @@ void* behavior_run(void* arg) {
356
361
  // printf("#2\n");
357
362
  /* Now can start the execution of the behavior. */
358
363
  behavior->block->function();
364
+ // printf("#3\n");
365
+ /* Now can start the execution of the behavior. */
359
366
  /* Stops the behavior. */
360
367
  pthread_mutex_lock(&hruby_sim_mutex);
361
368
  num_active_behaviors -= 1;
362
369
  num_run_behaviors -= 1;
363
- pthread_cond_signal(&hruby_sim_cond);
370
+ // printf("num_run_behaviors=%d\n",num_run_behaviors);
371
+ behavior->timed = 2;
372
+ // pthread_cond_signal(&hruby_sim_cond);
364
373
  pthread_mutex_unlock(&hruby_sim_mutex);
374
+ pthread_cond_signal(&hruby_sim_cond);
365
375
  /* End the thread. */
366
376
  pthread_exit(NULL);
367
377
  }
@@ -374,11 +384,13 @@ void hruby_sim_start_timed_behaviors() {
374
384
  pthread_mutex_lock(&hruby_sim_mutex);
375
385
  /* Sets the end flags to 0. */
376
386
  sim_end_flag = 0;
387
+ /* Tells the behavior can run. */
388
+ behaviors_can_run = 1;
377
389
  /* Create and start the threads. */
378
390
  for(i=0; i<num_timed_behaviors; ++i) {
379
391
  num_run_behaviors += 1;
380
392
  // ++num_active_behaviors;
381
- // printf("0 num_active_behaviors = %d\n",num_active_behaviors);
393
+ // printf("0 num_run_behaviors = %d\n",num_run_behaviors);
382
394
  pthread_create(&timed_behaviors[i]->thread,NULL,
383
395
  &behavior_run,timed_behaviors[i]);
384
396
  }
@@ -457,7 +469,6 @@ void hruby_sim_core(char* name, void (*init_vizualizer)(char*),
457
469
  * @param delay the delay to wait in fs.
458
470
  * @param behavior the current behavior. */
459
471
  void hw_wait(unsigned long long delay, Behavior behavior) {
460
- // printf("!1\n");
461
472
  /* Maybe the thread is to end immediatly. */
462
473
  if (sim_end_flag)
463
474
  pthread_exit(NULL);
@@ -465,16 +476,20 @@ void hw_wait(unsigned long long delay, Behavior behavior) {
465
476
  pthread_mutex_lock(&hruby_sim_mutex);
466
477
  /* Indicate the behavior finished current execution. */
467
478
  num_active_behaviors -= 1;
468
- pthread_cond_signal(&hruby_sim_cond);
479
+ // printf("!!num_active_behaviors=%d\n",num_active_behaviors);
480
+ // pthread_cond_signal(&hruby_sim_cond);
469
481
  /* Update the behavior's time. */
470
482
  behavior->active_time += delay;
471
483
  pthread_mutex_unlock(&hruby_sim_mutex);
484
+ pthread_cond_signal(&hruby_sim_cond);
472
485
  /* Wait for being reactivated. */
473
486
  while(behavior->active_time > hruby_sim_time) {
474
487
  pthread_mutex_lock(&hruby_sim_mutex);
475
488
  while(!behaviors_can_run) {
489
+ // printf("!1\n");
476
490
  // pthread_cond_wait(&compute_cond, &hruby_sim_mutex);
477
491
  pthread_cond_wait(&hruby_beh_cond, &hruby_sim_mutex);
492
+ // printf("!2\n");
478
493
  }
479
494
  pthread_mutex_unlock(&hruby_sim_mutex);
480
495
  }
@@ -1,3 +1,3 @@
1
1
  module HDLRuby
2
- VERSION = "2.6.2"
2
+ VERSION = "2.6.3"
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.2
4
+ version: 2.6.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: 2021-04-26 00:00:00.000000000 Z
11
+ date: 2021-05-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler