HDLRuby 2.6.5 → 2.6.16
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/HDLRuby/hdr_samples/comparison_bench.rb +40 -0
- data/lib/HDLRuby/hdr_samples/neg_arith_bench.rb +11 -0
- data/lib/HDLRuby/hdr_samples/type_minmax_bench.rb +37 -0
- data/lib/HDLRuby/hdr_samples/with_to_array.rb +29 -0
- data/lib/HDLRuby/hdrcc.rb +49 -24
- data/lib/HDLRuby/hruby_high.rb +136 -117
- data/lib/HDLRuby/hruby_low.rb +58 -27
- data/lib/HDLRuby/hruby_low2c.rb +3 -1
- data/lib/HDLRuby/hruby_low_resolve.rb +24 -0
- data/lib/HDLRuby/hruby_verilog.rb +5 -5
- data/lib/HDLRuby/hruby_verilog_name.rb +50 -32
- data/lib/HDLRuby/sim/hruby_sim.h +16 -2
- data/lib/HDLRuby/sim/hruby_sim_calc.c +293 -18
- data/lib/HDLRuby/std/function_generator.rb +9 -7
- data/lib/HDLRuby/version.rb +1 -1
- metadata +5 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0defaa4d148c2fbdc008f29c75a6ab8a4b48726a932f3222e2dc19c7b229492c
|
4
|
+
data.tar.gz: 9e2d4268200af09e0c078306b5c8a81494b589468b5b8b0084d300d14f922387
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ae9f4d696caa0c8f76caa7f0fd05bf1f6554da50c40871c86ad3b44f4c41f3dc184fe58141afd796d3c9448fcdfd04d6869fafc0246fe39236e5f3f48d6bd6a2
|
7
|
+
data.tar.gz: 9cc5165ad15458f4c2f514107f7e15118534c079d061dc2f97aecb0982097fe534b0e26683834b901de34ced55132fc0f3608c19087b87ee5a9137174f49a4d1
|
@@ -0,0 +1,40 @@
|
|
1
|
+
# Test the comparison operators.
|
2
|
+
|
3
|
+
# A benchmark for the adder.
|
4
|
+
system :adder_bench do
|
5
|
+
[8].inner :x, :y
|
6
|
+
signed[8].inner :u,:v
|
7
|
+
inner :ue, :ult, :ule, :ugt, :uge
|
8
|
+
inner :se, :slt, :sle, :sgt, :sge
|
9
|
+
|
10
|
+
par do
|
11
|
+
ue <= (x == y)
|
12
|
+
ult <= (x < y)
|
13
|
+
ule <= (x <= y)
|
14
|
+
ugt <= (x > y)
|
15
|
+
uge <= (x >= y)
|
16
|
+
|
17
|
+
se <= (u == v)
|
18
|
+
slt <= (u < v)
|
19
|
+
sle <= (u <= v)
|
20
|
+
sgt <= (u > v)
|
21
|
+
sge <= (u >= v)
|
22
|
+
end
|
23
|
+
|
24
|
+
timed do
|
25
|
+
x <= 0
|
26
|
+
y <= 0
|
27
|
+
u <= 0
|
28
|
+
v <= 0
|
29
|
+
!10.ns
|
30
|
+
x <= 1
|
31
|
+
u <= 1
|
32
|
+
!10.ns
|
33
|
+
y <= 2
|
34
|
+
v <= 2
|
35
|
+
!10.ns
|
36
|
+
x <= 2
|
37
|
+
u <= -2
|
38
|
+
!10.ns
|
39
|
+
end
|
40
|
+
end
|
@@ -2,6 +2,7 @@
|
|
2
2
|
# A benchmark for testing the arithmetic with signed values.
|
3
3
|
system :neg_arith_bench do
|
4
4
|
signed[11..0].inner :x,:y,:z
|
5
|
+
inner :cmp
|
5
6
|
|
6
7
|
timed do
|
7
8
|
x <= 10
|
@@ -9,41 +10,51 @@ system :neg_arith_bench do
|
|
9
10
|
z <= 0
|
10
11
|
!10.ns
|
11
12
|
z <= 10 * 10
|
13
|
+
cmp <= (10 < 10)
|
12
14
|
!10.ns
|
13
15
|
z <= x * y
|
16
|
+
cmp <= (x < y)
|
14
17
|
!10.ns
|
15
18
|
x <= 10
|
16
19
|
y <= -10
|
17
20
|
!10.ns
|
18
21
|
z <= 10 * (-10)
|
22
|
+
cmp <= (10 < -10)
|
19
23
|
!10.ns
|
20
24
|
z <= x * y
|
25
|
+
cmp <= (x < y)
|
21
26
|
!10.ns
|
22
27
|
x <= -10
|
23
28
|
y <= 10
|
24
29
|
!10.ns
|
25
30
|
z <= (-10) * 10
|
31
|
+
cmp <= (-10 < 10)
|
26
32
|
!10.ns
|
27
33
|
z <= x * y
|
34
|
+
cmp <= (x < y)
|
28
35
|
!10.ns
|
29
36
|
x <= -10
|
30
37
|
y <= -10
|
31
38
|
!10.ns
|
32
39
|
z <= (-10) * (-10)
|
40
|
+
cmp <= (-10 < -10)
|
33
41
|
!10.ns
|
34
42
|
z <= x * y
|
43
|
+
cmp <= (x < y)
|
35
44
|
!10.ns
|
36
45
|
x <= _000000011010
|
37
46
|
y <= _000011111010
|
38
47
|
z <= 0
|
39
48
|
!10.ns
|
40
49
|
z <= x * y
|
50
|
+
cmp <= (x < y)
|
41
51
|
!10.ns
|
42
52
|
x <= _000000011010
|
43
53
|
y <= _111111111010
|
44
54
|
z <= 0
|
45
55
|
!10.ns
|
46
56
|
z <= x * y
|
57
|
+
cmp <= (x < y)
|
47
58
|
!10.ns
|
48
59
|
end
|
49
60
|
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
# Test the type method min and max
|
2
|
+
|
3
|
+
# A benchmark for the adder.
|
4
|
+
system :adder_bench do
|
5
|
+
[32].inner :x
|
6
|
+
signed[32].inner :y
|
7
|
+
|
8
|
+
timed do
|
9
|
+
x <= 0
|
10
|
+
y <= 0
|
11
|
+
!10.ns
|
12
|
+
x <= bit[8].max
|
13
|
+
y <= signed[8].max
|
14
|
+
!10.ns
|
15
|
+
x <= bit[8].min
|
16
|
+
y <= signed[8].min
|
17
|
+
!10.ns
|
18
|
+
x <= bit[10].max
|
19
|
+
y <= signed[10].max
|
20
|
+
!10.ns
|
21
|
+
x <= bit[10].min
|
22
|
+
y <= signed[10].min
|
23
|
+
!10.ns
|
24
|
+
x <= bit[16].max
|
25
|
+
y <= signed[16].max
|
26
|
+
!10.ns
|
27
|
+
x <= bit[16].min
|
28
|
+
y <= signed[16].min
|
29
|
+
!10.ns
|
30
|
+
x <= bit[32].max
|
31
|
+
y <= signed[32].max
|
32
|
+
!10.ns
|
33
|
+
x <= bit[32].min
|
34
|
+
y <= signed[32].min
|
35
|
+
!10.ns
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
|
2
|
+
def connect8(i0,i1,i2,i3,i4,i5,i6,i7,
|
3
|
+
o0,o1,o2,o3,o4,o5,o6,o7)
|
4
|
+
o0 <= i0
|
5
|
+
o1 <= i1
|
6
|
+
o2 <= i2
|
7
|
+
o3 <= i3
|
8
|
+
o4 <= i4
|
9
|
+
o5 <= i5
|
10
|
+
o6 <= i6
|
11
|
+
o7 <= i7
|
12
|
+
end
|
13
|
+
|
14
|
+
# A benchmark for testing the conversion to ruby array of expressions.
|
15
|
+
system :with_to_bench do
|
16
|
+
[8].inner :val
|
17
|
+
inner :b0,:b1,:b2,:b3,:b4,:b5,:b6,:b7
|
18
|
+
|
19
|
+
connect8(*val,b0,b1,b2,b3,b4,b5,b6,b7)
|
20
|
+
|
21
|
+
timed do
|
22
|
+
val <= _01101010
|
23
|
+
!10.ns
|
24
|
+
val <= _01011010
|
25
|
+
!10.ns
|
26
|
+
val <= _00001111
|
27
|
+
!10.ns
|
28
|
+
end
|
29
|
+
end
|
data/lib/HDLRuby/hdrcc.rb
CHANGED
@@ -491,24 +491,28 @@ end
|
|
491
491
|
|
492
492
|
# Generate the result.
|
493
493
|
# Get the top systemT.
|
494
|
+
puts Time.now
|
494
495
|
$top_system = $top_instance.to_low.systemT
|
495
|
-
|
496
|
-
|
497
|
-
|
498
|
-
|
499
|
-
|
500
|
-
|
501
|
-
|
502
|
-
|
503
|
-
|
504
|
-
|
505
|
-
|
506
|
-
|
507
|
-
|
508
|
-
|
509
|
-
|
510
|
-
|
511
|
-
end
|
496
|
+
$top_intance = nil # Free as much memory as possible.
|
497
|
+
puts "##### Top system built #####"
|
498
|
+
puts Time.now
|
499
|
+
|
500
|
+
|
501
|
+
# # Apply the pre drivers if any.
|
502
|
+
# Hdecorator.each_with_property(:pre_driver) do |obj, value|
|
503
|
+
# unless value.is_a?(Array) && value.size == 2 then
|
504
|
+
# raise "pre_driver requires a driver file name command name."
|
505
|
+
# end
|
506
|
+
# # Load the driver.
|
507
|
+
# require_relative(value[0].to_s)
|
508
|
+
# # Ensure obj is the low version.
|
509
|
+
# if obj.properties.key?(:high2low) then
|
510
|
+
# # obj is high, get the corresponding low.
|
511
|
+
# obj = obj.properties[:high2low][0]
|
512
|
+
# end
|
513
|
+
# # Execute it.
|
514
|
+
# send(value[1].to_sym,obj,*value[2..-1])
|
515
|
+
# end
|
512
516
|
|
513
517
|
|
514
518
|
# Gather the non-HDLRuby code.
|
@@ -558,15 +562,23 @@ elsif $options[:clang] then
|
|
558
562
|
# top_system = $top_system
|
559
563
|
# Preprocess the HW description for valid C generation.
|
560
564
|
$top_system.each_systemT_deep do |systemT|
|
565
|
+
puts "seq2seq step..."
|
561
566
|
# Coverts the par blocks in seq blocks to seq blocks to match
|
562
567
|
# the simulation engine.
|
563
568
|
systemT.par_in_seq2seq!
|
569
|
+
puts Time.now
|
570
|
+
puts "connections_to_behaviors step..."
|
564
571
|
# Converts the connections to behaviors.
|
565
572
|
systemT.connections_to_behaviors!
|
573
|
+
puts Time.now
|
566
574
|
# Break the RefConcat.
|
575
|
+
puts "concat_assigns step..."
|
567
576
|
systemT.break_concat_assigns!
|
577
|
+
puts Time.now
|
568
578
|
# Explicits the types.
|
579
|
+
puts "explicit_types step..."
|
569
580
|
systemT.explicit_types!
|
581
|
+
puts Time.now
|
570
582
|
end
|
571
583
|
# Generate the C.
|
572
584
|
if $options[:multiple] then
|
@@ -637,6 +649,7 @@ elsif $options[:clang] then
|
|
637
649
|
name = $output + "/" +
|
638
650
|
HDLRuby::Low::Low2C.c_name(systemT.name) +
|
639
651
|
".c"
|
652
|
+
# puts "for systemT=#{systemT.name} generating: #{name}"
|
640
653
|
# Open the file for current systemT
|
641
654
|
outfile = File.open(name,"w")
|
642
655
|
# Generate the C code in to.
|
@@ -690,14 +703,26 @@ elsif $options[:verilog] then
|
|
690
703
|
# top_system = $top_system
|
691
704
|
# Make description compatible with verilog generation.
|
692
705
|
$top_system.each_systemT_deep do |systemT|
|
706
|
+
puts "casts_without_expression! step..."
|
693
707
|
systemT.casts_without_expression!
|
708
|
+
puts Time.now
|
709
|
+
puts "to_upper_space! step..."
|
694
710
|
systemT.to_upper_space!
|
711
|
+
puts Time.now
|
712
|
+
puts "to_global_space! step..."
|
695
713
|
systemT.to_global_systemTs!
|
714
|
+
puts Time.now
|
696
715
|
# systemT.break_types!
|
697
716
|
# systemT.expand_types!
|
717
|
+
puts "par_in_seq2seq! step..."
|
698
718
|
systemT.par_in_seq2seq!
|
719
|
+
puts Time.now
|
720
|
+
puts "initial_concat_to_timed! step..."
|
699
721
|
systemT.initial_concat_to_timed!
|
722
|
+
puts Time.now
|
723
|
+
puts "with_port! step..."
|
700
724
|
systemT.with_port!
|
725
|
+
puts Time.now
|
701
726
|
end
|
702
727
|
# # Verilog generation
|
703
728
|
# $output << top_system.to_verilog
|
@@ -787,13 +812,13 @@ elsif $options[:vhdl] then
|
|
787
812
|
end
|
788
813
|
end
|
789
814
|
|
790
|
-
# Apply the post drivers if any.
|
791
|
-
Hdecorator.each_with_property(:post_driver) do |obj, value|
|
792
|
-
|
793
|
-
|
794
|
-
|
795
|
-
|
796
|
-
end
|
815
|
+
# # Apply the post drivers if any.
|
816
|
+
# Hdecorator.each_with_property(:post_driver) do |obj, value|
|
817
|
+
# # Load the driver.
|
818
|
+
# require_relative(value[0].to_s)
|
819
|
+
# # Execute it.
|
820
|
+
# send(value[1].to_sym,obj,$output)
|
821
|
+
# end
|
797
822
|
|
798
823
|
# Dump the properties
|
799
824
|
if $options[:dump] then
|