HDLRuby 2.4.21 → 2.4.28
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/lib/HDLRuby/hdr_samples/rom.rb +4 -2
- data/lib/HDLRuby/hdr_samples/seqpar_bench.rb +59 -0
- data/lib/HDLRuby/hdr_samples/with_fixpoint.rb +1 -0
- data/lib/HDLRuby/hdrcc.rb +4 -0
- data/lib/HDLRuby/hruby_low.rb +11 -1
- data/lib/HDLRuby/hruby_low_casts_without_expression.rb +326 -0
- data/lib/HDLRuby/hruby_low_without_parinseq.rb +151 -0
- data/lib/HDLRuby/hruby_verilog.rb +308 -133
- data/lib/HDLRuby/std/channel.rb +59 -18
- data/lib/HDLRuby/std/linear.rb +0 -5
- data/lib/HDLRuby/std/memory.rb +68 -17
- data/lib/HDLRuby/version.rb +1 -1
- metadata +5 -2
data/lib/HDLRuby/std/channel.rb
CHANGED
@@ -778,15 +778,30 @@ module HDLRuby::High::Std
|
|
778
778
|
# Port in same system as the channel case.
|
779
779
|
# Add them to the current system.
|
780
780
|
HDLRuby::High.cur_system.open do
|
781
|
-
locs.each do |name,sig|
|
782
|
-
|
781
|
+
# locs.each do |name,sig|
|
782
|
+
# port_pairs << [sig, sig.type.inner(name)]
|
783
|
+
# end
|
784
|
+
loc_inputs.each do |name,sig|
|
785
|
+
port_pairs << [sig, sig.type.inner(name),:input]
|
786
|
+
end
|
787
|
+
loc_outputs.each do |name,sig|
|
788
|
+
port_pairs << [sig, sig.type.inner(name),:output]
|
789
|
+
end
|
790
|
+
loc_inouts.each do |name,sig|
|
791
|
+
port_pairs << [sig, sig.type.inner(name),:inout]
|
783
792
|
end
|
784
793
|
end
|
785
794
|
obj = self
|
786
795
|
# Make the inner connection
|
787
|
-
port_pairs.each do |sig, port|
|
796
|
+
# port_pairs.each do |sig, port|
|
797
|
+
port_pairs.each do |sig, port, dir|
|
788
798
|
sig.parent.open do
|
789
|
-
port.to_ref <= sig
|
799
|
+
# port.to_ref <= sig
|
800
|
+
if dir == :input then
|
801
|
+
port.to_ref <= sig
|
802
|
+
else
|
803
|
+
sig <= port.to_ref
|
804
|
+
end
|
790
805
|
end
|
791
806
|
end
|
792
807
|
else
|
@@ -796,23 +811,28 @@ module HDLRuby::High::Std
|
|
796
811
|
# The inputs
|
797
812
|
loc_inputs.each do |name,sig|
|
798
813
|
# puts "name=#{name} sig.name=#{sig.name}"
|
799
|
-
port_pairs << [sig, sig.type.input(name)]
|
814
|
+
port_pairs << [sig, sig.type.input(name),:input]
|
800
815
|
end
|
801
816
|
# The outputs
|
802
817
|
loc_outputs.each do |name,sig|
|
803
|
-
port_pairs << [sig, sig.type.output(name)]
|
818
|
+
port_pairs << [sig, sig.type.output(name),:output]
|
804
819
|
end
|
805
820
|
# The inouts
|
806
821
|
loc_inouts.each do |name,sig|
|
807
|
-
port_pairs << [sig, sig.type.inout(name)]
|
822
|
+
port_pairs << [sig, sig.type.inout(name),:inout]
|
808
823
|
end
|
809
824
|
end
|
810
825
|
obj = self
|
811
826
|
# Make the connection of the instance.
|
812
827
|
HDLRuby::High.cur_system.on_instance do |inst|
|
813
828
|
obj.scope.open do
|
814
|
-
port_pairs.each do |sig, port|
|
815
|
-
RefObject.new(inst,port.to_ref) <= sig
|
829
|
+
port_pairs.each do |sig, port, dir|
|
830
|
+
# RefObject.new(inst,port.to_ref) <= sig
|
831
|
+
if dir == :input then
|
832
|
+
RefObject.new(inst,port.to_ref) <= sig
|
833
|
+
else
|
834
|
+
sig <= RefObject.new(inst,port.to_ref)
|
835
|
+
end
|
816
836
|
end
|
817
837
|
end
|
818
838
|
end
|
@@ -870,15 +890,30 @@ module HDLRuby::High::Std
|
|
870
890
|
# Port in same system as the channel case.
|
871
891
|
# Add them to the current system.
|
872
892
|
HDLRuby::High.cur_system.open do
|
873
|
-
locs.each do |name,sig|
|
874
|
-
|
893
|
+
# locs.each do |name,sig|
|
894
|
+
# port_pairs << [sig, sig.type.inner(name)]
|
895
|
+
# end
|
896
|
+
loc_inputs.each do |name,sig|
|
897
|
+
port_pairs << [sig, sig.type.inner(name),:input]
|
898
|
+
end
|
899
|
+
loc_outputs.each do |name,sig|
|
900
|
+
port_pairs << [sig, sig.type.inner(name),:output]
|
901
|
+
end
|
902
|
+
loc_inouts.each do |name,sig|
|
903
|
+
port_pairs << [sig, sig.type.inner(name),:inout]
|
875
904
|
end
|
876
905
|
end
|
877
906
|
obj = self
|
878
907
|
# Make the inner connection
|
879
|
-
port_pairs.each do |sig, port|
|
908
|
+
# port_pairs.each do |sig, port|
|
909
|
+
port_pairs.each do |sig, port, dir|
|
880
910
|
sig.parent.open do
|
881
|
-
port.to_ref <= sig
|
911
|
+
# port.to_ref <= sig
|
912
|
+
if dir == :input then
|
913
|
+
port.to_ref <= sig
|
914
|
+
else
|
915
|
+
sig <= port.to_ref
|
916
|
+
end
|
882
917
|
end
|
883
918
|
end
|
884
919
|
else
|
@@ -887,23 +922,29 @@ module HDLRuby::High::Std
|
|
887
922
|
HDLRuby::High.cur_system.open do
|
888
923
|
# The inputs
|
889
924
|
loc_inputs.each do |name,sig|
|
890
|
-
port_pairs << [sig, sig.type.input(name)]
|
925
|
+
port_pairs << [sig, sig.type.input(name),:input]
|
891
926
|
end
|
892
927
|
# The outputs
|
893
928
|
loc_outputs.each do |name,sig|
|
894
|
-
port_pairs << [sig, sig.type.output(name)]
|
929
|
+
port_pairs << [sig, sig.type.output(name),:output]
|
895
930
|
end
|
896
931
|
# The inouts
|
897
932
|
loc_inouts.each do |name,sig|
|
898
|
-
port_pairs << [sig, sig.type.inout(name)]
|
933
|
+
port_pairs << [sig, sig.type.inout(name),:inout]
|
899
934
|
end
|
900
935
|
end
|
901
936
|
obj = self
|
902
937
|
# Make the connection of the instance.
|
903
938
|
HDLRuby::High.cur_system.on_instance do |inst|
|
904
939
|
obj.scope.open do
|
905
|
-
port_pairs.each do |sig, port|
|
906
|
-
RefObject.new(inst,port.to_ref) <= sig
|
940
|
+
port_pairs.each do |sig, port, dir|
|
941
|
+
# RefObject.new(inst,port.to_ref) <= sig
|
942
|
+
# RefObject.new(inst,port.to_ref) <= sig
|
943
|
+
if dir == :input then
|
944
|
+
RefObject.new(inst,port.to_ref) <= sig
|
945
|
+
else
|
946
|
+
sig <= RefObject.new(inst,port.to_ref)
|
947
|
+
end
|
907
948
|
end
|
908
949
|
end
|
909
950
|
end
|
data/lib/HDLRuby/std/linear.rb
CHANGED
@@ -229,7 +229,6 @@ module HDLRuby::High::Std
|
|
229
229
|
hif(~rvok) { right.read(rv) { rvok <= 1 } }
|
230
230
|
lefts.each_with_index do |left,i|
|
231
231
|
hif(~lvoks[i]) { left.read(lvs[i]) { lvoks[i] <= 1 } }
|
232
|
-
# accs[i].read(avs[i])
|
233
232
|
hif(lvoks[i] & rvok & ~woks[i]) do
|
234
233
|
ack <= 1
|
235
234
|
run <= 0
|
@@ -237,10 +236,6 @@ module HDLRuby::High::Std
|
|
237
236
|
avs[i] <= add.(avs[i],mul.(lvs[i],rv))
|
238
237
|
accs[i].write(avs[i]) do
|
239
238
|
woks[i] <= 1
|
240
|
-
# seq do
|
241
|
-
# lvoks[i] <= 0
|
242
|
-
# rvok <= lvoks.reduce(:|)
|
243
|
-
# end
|
244
239
|
end
|
245
240
|
end
|
246
241
|
end
|
data/lib/HDLRuby/std/memory.rb
CHANGED
@@ -326,7 +326,8 @@ HDLRuby::High::Std.channel(:mem_rom) do |typ,size,clk,rst,content,
|
|
326
326
|
helse do
|
327
327
|
# Prepare the read.
|
328
328
|
# abus_r <= abus_r + 1
|
329
|
-
if 2**size.width != size then
|
329
|
+
# if 2**size.width != size then
|
330
|
+
if 2**awidth != size then
|
330
331
|
abus_r <= mux((abus_r + 1) == size, abus_r + 1, 0)
|
331
332
|
else
|
332
333
|
abus_r <= abus_r + 1
|
@@ -392,7 +393,8 @@ HDLRuby::High::Std.channel(:mem_rom) do |typ,size,clk,rst,content,
|
|
392
393
|
helse do
|
393
394
|
# Prepare the read.
|
394
395
|
# abus_r <= abus_r - 1
|
395
|
-
if 2**size.width != size then
|
396
|
+
# if 2**size.width != size then
|
397
|
+
if 2**awidth != size then
|
396
398
|
abus_r <= mux(abus_r == 0, abus_r - 1, size - 1)
|
397
399
|
else
|
398
400
|
abus_r <= abus_r - 1
|
@@ -609,7 +611,8 @@ HDLRuby::High::Std.channel(:mem_dual) do |typ,size,clk,rst,br_rsts = {}|
|
|
609
611
|
helse do
|
610
612
|
# Prepare the read.
|
611
613
|
# abus_r <= abus_r + 1
|
612
|
-
if 2**size.width != size then
|
614
|
+
# if 2**size.width != size then
|
615
|
+
if 2**awidth != size then
|
613
616
|
abus_r <= mux((abus_r + 1) == size, abus_r + 1, 0)
|
614
617
|
else
|
615
618
|
abus_r <= abus_r + 1
|
@@ -651,7 +654,8 @@ HDLRuby::High::Std.channel(:mem_dual) do |typ,size,clk,rst,br_rsts = {}|
|
|
651
654
|
blk.call if blk
|
652
655
|
# Prepare the write.
|
653
656
|
# abus_w <= abus_w + 1
|
654
|
-
if 2**size.width != size then
|
657
|
+
# if 2**size.width != size then
|
658
|
+
if 2**awidth != size then
|
655
659
|
abus_w <= mux((abus_w + 1) == size, abus_w + 1, 0)
|
656
660
|
else
|
657
661
|
abus_w <= abus_w + 1
|
@@ -718,7 +722,8 @@ HDLRuby::High::Std.channel(:mem_dual) do |typ,size,clk,rst,br_rsts = {}|
|
|
718
722
|
helse do
|
719
723
|
# Prepare the read.
|
720
724
|
# abus_r <= abus_r - 1
|
721
|
-
if 2**size.width != size then
|
725
|
+
# if 2**size.width != size then
|
726
|
+
if 2**awidth != size then
|
722
727
|
abus_r <= mux(abus_r == 0, abus_r - 1, size - 1)
|
723
728
|
else
|
724
729
|
abus_r <= abus_r - 1
|
@@ -760,7 +765,8 @@ HDLRuby::High::Std.channel(:mem_dual) do |typ,size,clk,rst,br_rsts = {}|
|
|
760
765
|
blk.call if blk
|
761
766
|
# Prepare the write.
|
762
767
|
# abus_w <= abus_w - 1
|
763
|
-
if 2**size.width != size then
|
768
|
+
# if 2**size.width != size then
|
769
|
+
if 2**awidth != size then
|
764
770
|
abus_w <= mux(abus_w == 0, abus_w - 1, size - 1)
|
765
771
|
else
|
766
772
|
abus_w <= abus_w - 1
|
@@ -841,9 +847,12 @@ HDLRuby::High::Std.channel(:mem_file) do |typ,size,clk,rst,br_rsts = {}|
|
|
841
847
|
|
842
848
|
# Defines the ports of the memory as branchs of the channel.
|
843
849
|
|
844
|
-
# The number branch (accesser).
|
850
|
+
# # The number branch (accesser).
|
851
|
+
# The number branch (reader/writer).
|
845
852
|
brancher(:anum) do
|
846
|
-
size.times { |i| accesser_inout :"reg_#{i}" }
|
853
|
+
# size.times { |i| accesser_inout :"reg_#{i}" }
|
854
|
+
size.times { |i| reader_input :"reg_#{i}" }
|
855
|
+
size.times { |i| writer_output :"reg_#{i}" }
|
847
856
|
|
848
857
|
# Defines the read procedure of register number +num+
|
849
858
|
# using +target+ as target of access result.
|
@@ -886,6 +895,39 @@ HDLRuby::High::Std.channel(:mem_file) do |typ,size,clk,rst,br_rsts = {}|
|
|
886
895
|
|
887
896
|
end
|
888
897
|
|
898
|
+
# The number read branch (reader).
|
899
|
+
brancher(:rnum) do
|
900
|
+
size.times { |i| reader_input :"reg_#{i}" }
|
901
|
+
|
902
|
+
# Defines the read procedure of register number +num+
|
903
|
+
# using +target+ as target of access result.
|
904
|
+
reader do |blk,num,target|
|
905
|
+
regs = size.times.map {|i| send(:"reg_#{i}") }
|
906
|
+
# The read procedure.
|
907
|
+
par do
|
908
|
+
# No reset, so can perform the read.
|
909
|
+
target <= regs[num]
|
910
|
+
blk.call if blk
|
911
|
+
end
|
912
|
+
end
|
913
|
+
end
|
914
|
+
|
915
|
+
# The number write branch (writer).
|
916
|
+
brancher(:wnum) do
|
917
|
+
size.times { |i| writer_output :"reg_#{i}" }
|
918
|
+
|
919
|
+
# Defines the read procedure of register number +num+
|
920
|
+
# using +target+ as target of access result.
|
921
|
+
writer do |blk,num,target|
|
922
|
+
regs = size.times.map {|i| send(:"reg_#{i}") }
|
923
|
+
# The write procedure.
|
924
|
+
par do
|
925
|
+
regs[num] <= target
|
926
|
+
blk.call if blk
|
927
|
+
end
|
928
|
+
end
|
929
|
+
end
|
930
|
+
|
889
931
|
|
890
932
|
# The address branches.
|
891
933
|
# Read with address
|
@@ -961,7 +1003,8 @@ HDLRuby::High::Std.channel(:mem_file) do |typ,size,clk,rst,br_rsts = {}|
|
|
961
1003
|
awidth = (size-1).width
|
962
1004
|
awidth = 1 if awidth == 0
|
963
1005
|
[awidth].inner :abus_r
|
964
|
-
reader_inout :abus_r
|
1006
|
+
# reader_inout :abus_r
|
1007
|
+
reader_output :abus_r
|
965
1008
|
|
966
1009
|
# Defines the read procedure at address +addr+
|
967
1010
|
# using +target+ as target of access result.
|
@@ -984,7 +1027,8 @@ HDLRuby::High::Std.channel(:mem_file) do |typ,size,clk,rst,br_rsts = {}|
|
|
984
1027
|
blk.call if blk
|
985
1028
|
# Prepare the next read.
|
986
1029
|
# abus_r <= abus_r + 1
|
987
|
-
if 2**size.width != size then
|
1030
|
+
# if 2**size.width != size then
|
1031
|
+
if 2**awidth != size then
|
988
1032
|
abus_r <= mux((abus_r + 1) == size, abus_r + 1, 0)
|
989
1033
|
else
|
990
1034
|
abus_r <= abus_r + 1
|
@@ -1030,7 +1074,8 @@ HDLRuby::High::Std.channel(:mem_file) do |typ,size,clk,rst,br_rsts = {}|
|
|
1030
1074
|
blk.call if blk
|
1031
1075
|
# Prepare the next write.
|
1032
1076
|
# abus_w <= abus_w + 1
|
1033
|
-
if 2**size.width != size then
|
1077
|
+
# if 2**size.width != size then
|
1078
|
+
if 2**awidth != size then
|
1034
1079
|
abus_w <= mux((abus_w + 1) == size, abus_w + 1, 0)
|
1035
1080
|
else
|
1036
1081
|
abus_w <= abus_w + 1
|
@@ -1078,7 +1123,8 @@ HDLRuby::High::Std.channel(:mem_file) do |typ,size,clk,rst,br_rsts = {}|
|
|
1078
1123
|
blk.call if blk
|
1079
1124
|
# Prepare the next read.
|
1080
1125
|
# abus_r <= abus_r - 1
|
1081
|
-
if 2**size.width != size then
|
1126
|
+
# if 2**size.width != size then
|
1127
|
+
if 2**awidth != size then
|
1082
1128
|
abus_r <= mux(abus_r == 0, abus_r - 1, size - 1)
|
1083
1129
|
else
|
1084
1130
|
abus_r <= abus_r - 1
|
@@ -1124,7 +1170,8 @@ HDLRuby::High::Std.channel(:mem_file) do |typ,size,clk,rst,br_rsts = {}|
|
|
1124
1170
|
blk.call if blk
|
1125
1171
|
# Prepare the next write.
|
1126
1172
|
# abus_w <= abus_w - 1
|
1127
|
-
if 2**size.width != size then
|
1173
|
+
# if 2**size.width != size then
|
1174
|
+
if 2**awidth != size then
|
1128
1175
|
abus_w <= mux(abus_w == 0, abus_w - 1, size - 1)
|
1129
1176
|
else
|
1130
1177
|
abus_w <= abus_w - 1
|
@@ -1340,7 +1387,8 @@ HDLRuby::High::Std.channel(:mem_bank) do |typ,nbanks,size,clk,rst,br_rsts = {}|
|
|
1340
1387
|
end
|
1341
1388
|
# Prepare the read.
|
1342
1389
|
# abus_r <= abus_r + 1
|
1343
|
-
if 2**size.width != size then
|
1390
|
+
# if 2**size.width != size then
|
1391
|
+
if 2**awidth != size then
|
1344
1392
|
abus_r <= mux((abus_r + 1) == size, abus_r + 1, 0)
|
1345
1393
|
else
|
1346
1394
|
abus_r <= abus_r + 1
|
@@ -1381,7 +1429,8 @@ HDLRuby::High::Std.channel(:mem_bank) do |typ,nbanks,size,clk,rst,br_rsts = {}|
|
|
1381
1429
|
blk.call if blk
|
1382
1430
|
# Prepare the write.
|
1383
1431
|
# abus_w <= abus_w + 1
|
1384
|
-
if 2**size.width != size then
|
1432
|
+
# if 2**size.width != size then
|
1433
|
+
if 2**awidth != size then
|
1385
1434
|
abus_w <= mux((abus_w + 1) == size, abus_w + 1, 0)
|
1386
1435
|
else
|
1387
1436
|
abus_w <= abus_w + 1
|
@@ -1427,7 +1476,8 @@ HDLRuby::High::Std.channel(:mem_bank) do |typ,nbanks,size,clk,rst,br_rsts = {}|
|
|
1427
1476
|
end
|
1428
1477
|
# Prepare the read.
|
1429
1478
|
# abus_r <= abus_r - 1
|
1430
|
-
if 2**size.width != size then
|
1479
|
+
# if 2**size.width != size then
|
1480
|
+
if 2**awidth != size then
|
1431
1481
|
abus_r <= mux(abus_r == 0, abus_r - 1, size - 1)
|
1432
1482
|
else
|
1433
1483
|
abus_r <= abus_r - 1
|
@@ -1468,7 +1518,8 @@ HDLRuby::High::Std.channel(:mem_bank) do |typ,nbanks,size,clk,rst,br_rsts = {}|
|
|
1468
1518
|
blk.call if blk
|
1469
1519
|
# Prepare the write.
|
1470
1520
|
abus_w <= abus_w - 1
|
1471
|
-
if 2**size.width != size then
|
1521
|
+
# if 2**size.width != size then
|
1522
|
+
if 2**awidth != size then
|
1472
1523
|
abus_w <= mux(abus_w == 0, abus_w - 1, size - 1)
|
1473
1524
|
else
|
1474
1525
|
abus_w <= abus_w - 1
|
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.
|
4
|
+
version: 2.4.28
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Lovic Gauthier
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-01-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -116,6 +116,7 @@ files:
|
|
116
116
|
- lib/HDLRuby/hdr_samples/register_with_code_bench.rb
|
117
117
|
- lib/HDLRuby/hdr_samples/rom.rb
|
118
118
|
- lib/HDLRuby/hdr_samples/ruby_fir_hw.rb
|
119
|
+
- lib/HDLRuby/hdr_samples/seqpar_bench.rb
|
119
120
|
- lib/HDLRuby/hdr_samples/struct.rb
|
120
121
|
- lib/HDLRuby/hdr_samples/sumprod.rb
|
121
122
|
- lib/HDLRuby/hdr_samples/sw_encrypt_bench.rb
|
@@ -207,6 +208,7 @@ files:
|
|
207
208
|
- lib/HDLRuby/hruby_low2sym.rb
|
208
209
|
- lib/HDLRuby/hruby_low2vhd.rb
|
209
210
|
- lib/HDLRuby/hruby_low_bool2select.rb
|
211
|
+
- lib/HDLRuby/hruby_low_casts_without_expression.rb
|
210
212
|
- lib/HDLRuby/hruby_low_cleanup.rb
|
211
213
|
- lib/HDLRuby/hruby_low_fix_types.rb
|
212
214
|
- lib/HDLRuby/hruby_low_mutable.rb
|
@@ -220,6 +222,7 @@ files:
|
|
220
222
|
- lib/HDLRuby/hruby_low_without_connection.rb
|
221
223
|
- lib/HDLRuby/hruby_low_without_namespace.rb
|
222
224
|
- lib/HDLRuby/hruby_low_without_outread.rb
|
225
|
+
- lib/HDLRuby/hruby_low_without_parinseq.rb
|
223
226
|
- lib/HDLRuby/hruby_low_without_select.rb
|
224
227
|
- lib/HDLRuby/hruby_serializer.rb
|
225
228
|
- lib/HDLRuby/hruby_tools.rb
|