HDLRuby 2.6.8 → 2.6.18

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.
@@ -165,6 +165,30 @@ module HDLRuby::Low
165
165
  return false
166
166
  end
167
167
 
168
+ ## Gets the systemI the reference comes from if any.
169
+ def get_systemI
170
+ # Look for the owner from the name hierarchy.
171
+ if self.ref.is_a?(RefName) then
172
+ # Look in the parent hierachy for the sub reference name.
173
+ parent = self.parent
174
+ # puts "self.ref.name=#{self.ref.name}"
175
+ while parent
176
+ # puts "parent=#{parent}"
177
+ if parent.respond_to?(:get_by_name) then
178
+ found = parent.get_by_name(self.ref.name)
179
+ # puts "found is a :#{found.class}"
180
+ return found if found.is_a?(SystemI)
181
+ end
182
+ parent = parent.parent
183
+ end
184
+ # Not found, look further in the reference hierarchy.
185
+ return self.ref.get_systemI
186
+ end
187
+ # Not from a systemI.
188
+ # puts "Not from systemI for #{self.name}"
189
+ return nil
190
+ end
191
+
168
192
 
169
193
  ## Resolves the name of the reference and return the
170
194
  # corresponding object.
@@ -44,8 +44,10 @@ module HDLRuby::Low
44
44
  def to_global_systemTs!
45
45
  # Force a name if not.
46
46
  self.force_name!
47
+ # puts "to_global_systemTs! for #{self.name}"
47
48
  # For each local systemT
48
49
  self.scope.each_systemT.to_a.each do |systemT|
50
+ # puts "Processing system: #{systemT}"
49
51
  # Rename it for globalization.
50
52
  former = systemT.name
51
53
  self.extend_name!(systemT)
@@ -211,6 +213,7 @@ module HDLRuby::Low
211
213
  # Replaces recursively +former+ name by +nname+ until it is redeclared
212
214
  # in the internals.
213
215
  def replace_names_subs!(former,nname)
216
+ # puts "replace_names_subs! for #{self} with former=#{former} and nname=#{nname}"
214
217
  self.each_type do |type|
215
218
  type.replace_names!(former,nname)
216
219
  end
@@ -416,8 +419,9 @@ module HDLRuby::Low
416
419
  if self.name == former then
417
420
  self.set_name!(nname)
418
421
  end
419
- # Recurse on the system type.
420
- self.systemT.replace_names!(former,nname)
422
+ # Not needed since treated through scope and systemT.
423
+ # # Recurse on the system type.
424
+ # self.systemT.replace_names!(former,nname)
421
425
  end
422
426
  end
423
427
 
@@ -50,4 +50,28 @@ module HDLRuby
50
50
 
51
51
  end
52
52
 
53
+
54
+ # Display some messages depending on the verbosity mode.
55
+ @@verbosity = 1 # The verbosity level: default 1, only critical messages.
56
+
57
+ # Sets the verbosity.
58
+ def self.verbosity=(val)
59
+ @@verbosity = val.to_i
60
+ end
61
+
62
+ # Display a critical message.
63
+ def self.show!(*args)
64
+ puts(*args) if @@verbosity > 0
65
+ end
66
+
67
+ # Display a common message.
68
+ def self.show(*args)
69
+ puts(*args) if @@verbosity > 1
70
+ end
71
+
72
+ # Display a minor message.
73
+ def self.show?(*args)
74
+ puts(*args) if @@verbosity > 2
75
+ end
76
+
53
77
  end
@@ -134,7 +134,7 @@ module HDLRuby::Low
134
134
  if self.name && !self.name.empty? then
135
135
  vname = name_to_verilog(self.name)
136
136
  code << " : #{vname}"
137
- self.properties[:verilog_name] = vname
137
+ # self.properties[:verilog_name] = vname
138
138
  end
139
139
  code << "\n" if block.each_inner.any?
140
140
  # Declaration of "inner" part within "always".
@@ -1371,7 +1371,7 @@ module HDLRuby::Low
1371
1371
  # Converts the system to Verilog code using +renamer+ for producing Verilog-compatible names.
1372
1372
  def to_verilog
1373
1373
  vname = name_to_verilog(self.name)
1374
- self.properties[:verilog_name] = vname
1374
+ # self.properties[:verilog_name] = vname
1375
1375
  return "#{vname}"
1376
1376
  end
1377
1377
 
@@ -1677,7 +1677,7 @@ module HDLRuby::Low
1677
1677
  def to_verilog
1678
1678
  # Convert unusable characters and return them.
1679
1679
  vname = name_to_verilog(self.name)
1680
- self.properties[:verilog_name] = vname
1680
+ # self.properties[:verilog_name] = vname
1681
1681
  return "#{vname}"
1682
1682
  end
1683
1683
  end
@@ -1842,7 +1842,7 @@ module HDLRuby::Low
1842
1842
  code = "`timescale 1ps/1ps\n\n"
1843
1843
 
1844
1844
  vname = name_to_verilog(self.name)
1845
- self.properties[:verilog_name] = vname
1845
+ # self.properties[:verilog_name] = vname
1846
1846
  # Output the module name.
1847
1847
  code << "module #{vname}("
1848
1848
 
@@ -2007,7 +2007,7 @@ module HDLRuby::Low
2007
2007
  systemT = systemI.systemT
2008
2008
  code << name_to_verilog(systemT.name) << " "
2009
2009
  vname = name_to_verilog(systemI.name)
2010
- systemI.properties[:verilog_name] = vname
2010
+ # systemI.properties[:verilog_name] = vname
2011
2011
  code << vname << "("
2012
2012
  # Its ports connections
2013
2013
  # Inputs
@@ -10,41 +10,59 @@ module HDLRuby::Verilog
10
10
 
11
11
  # Since it is possible to use $ and numbers other than the beginning of the character string, it is divided.
12
12
  def name_to_verilog(name)
13
- ref = "" # For storing the converted character.
14
- name = name.to_s # Ensure name is a string
15
-
16
- if (name[0] =~ /[a-zA-Z]/) then
17
- ref << name[0]
18
- # _ To convert it to __.
19
- elsif (name[0] == "_") then
20
- ref << "__"
21
- # If it does not satisfy the above, it is another character.
22
- # In that case, convert it to UTF-8 and convert it to a usable character string.
23
- else
24
- l = name[0].bytes.map{|v| v.to_s(16)}.join # Conversion to UTF-8 hexadecimal number.
13
+ # ref = "" # For storing the converted character.
14
+ # name = name.to_s # Ensure name is a string
15
+ #
16
+ # if (name[0] =~ /[a-zA-Z]/) then
17
+ # ref << name[0]
18
+ # # _ To convert it to __.
19
+ # elsif (name[0] == "_") then
20
+ # ref << "__"
21
+ # # If it does not satisfy the above, it is another character.
22
+ # # In that case, convert it to UTF-8 and convert it to a usable character string.
23
+ # else
24
+ # l = name[0].bytes.map{|v| v.to_s(16)}.join # Conversion to UTF-8 hexadecimal number.
25
25
 
26
- ref << "_" + l.rjust(6,"0") # Add an underscore indicating conversion.
27
- # The remainder of 6 digits is filled with 0.
28
- end
26
+ # ref << "_" + l.rjust(6,"0") # Add an underscore indicating conversion.
27
+ # # The remainder of 6 digits is filled with 0.
28
+ # end
29
+ #
30
+ # name[1..-1].each_char do |c|
31
+ # # Confirmation of characters in array.
32
+ # # If it is a-zA-Z 0 - 9, it is added to ref as it is.
33
+ # if (c =~ /[a-zA-Z0-9]|\$/) then
34
+ # ref << c
35
+ # # _ To convert it to __.
36
+ # elsif (c == "_") then
37
+ # ref << "__"
38
+ # # If it does not satisfy the above, it is another character.
39
+ # # In that case, convert it to UTF-8 and convert it to a usable character string.
40
+ # else
41
+ # l = c.bytes.map{|v| v.to_s(16)}.join # Conversion to UTF-8 hexadecimal number.
42
+ #
43
+ # ref << "_" + l.rjust(6,"0") # Add an underscore indicating conversion.
44
+ # # The remainder of 6 digits is filled with 0.
45
+ # end
46
+ # end
47
+ # return ref
48
+
29
49
 
30
- name[1..-1].each_char do |c|
31
- # Confirmation of characters in array.
32
- # If it is a-zA-Z 0 - 9, it is added to ref as it is.
33
- if (c =~ /[a-zA-Z0-9]|\$/) then
34
- ref << c
35
- # _ To convert it to __.
36
- elsif (c == "_") then
37
- ref << "__"
38
- # If it does not satisfy the above, it is another character.
39
- # In that case, convert it to UTF-8 and convert it to a usable character string.
40
- else
41
- l = c.bytes.map{|v| v.to_s(16)}.join # Conversion to UTF-8 hexadecimal number.
42
-
43
- ref << "_" + l.rjust(6,"0") # Add an underscore indicating conversion.
44
- # The remainder of 6 digits is filled with 0.
50
+ name = name.to_s
51
+ # Convert special characters.
52
+ name = name.each_char.map do |c|
53
+ if c=~ /[a-z0-9]/ then
54
+ c
55
+ elsif c == "_" then
56
+ "__"
57
+ else
58
+ "_" + c.ord.to_s
59
+ end
60
+ end.join
61
+ # First character: only letter is possible.
62
+ unless name[0] =~ /[a-z_]/ then
63
+ name = "_" + name
45
64
  end
46
- end
47
- return ref
65
+ return name
48
66
  end
49
67
 
50
68
  #puts ref
@@ -697,7 +697,27 @@ static Value greater_value_defined_bitstring(Value src0, Value src1, Value dst)
697
697
  dst->numeric = 1;
698
698
 
699
699
  /* Perform the comparison. */
700
- dst->data_int = (value2integer(src0) > value2integer(src1));
700
+ if (src0->type->flags.sign) {
701
+ if (src1->type->flags.sign) {
702
+ dst->data_int =
703
+ ((signed long long)value2integer(src0) >
704
+ (signed long long)value2integer(src1));
705
+ } else {
706
+ dst->data_int =
707
+ ((signed long long)value2integer(src0) >
708
+ (unsigned long long)value2integer(src1));
709
+ }
710
+ } else {
711
+ if (src1->type->flags.sign) {
712
+ dst->data_int =
713
+ ((unsigned long long)value2integer(src0) >
714
+ (signed long long)value2integer(src1));
715
+ } else {
716
+ dst->data_int =
717
+ ((unsigned long long)value2integer(src0) >
718
+ (unsigned long long)value2integer(src1));
719
+ }
720
+ }
701
721
  return dst;
702
722
  }
703
723
 
@@ -712,7 +732,27 @@ static Value lesser_value_defined_bitstring(Value src0, Value src1, Value dst) {
712
732
  dst->numeric = 1;
713
733
 
714
734
  /* Perform the comparison. */
715
- dst->data_int = (value2integer(src0) < value2integer(src1));
735
+ if (src0->type->flags.sign) {
736
+ if (src1->type->flags.sign) {
737
+ dst->data_int =
738
+ ((signed long long)value2integer(src0) <
739
+ (signed long long)value2integer(src1));
740
+ } else {
741
+ dst->data_int =
742
+ ((signed long long)value2integer(src0) <
743
+ (unsigned long long)value2integer(src1));
744
+ }
745
+ } else {
746
+ if (src1->type->flags.sign) {
747
+ dst->data_int =
748
+ ((unsigned long long)value2integer(src0) <
749
+ (signed long long)value2integer(src1));
750
+ } else {
751
+ dst->data_int =
752
+ ((unsigned long long)value2integer(src0) <
753
+ (unsigned long long)value2integer(src1));
754
+ }
755
+ }
716
756
  return dst;
717
757
  }
718
758
 
@@ -727,7 +767,27 @@ static Value greater_equal_value_defined_bitstring(Value src0, Value src1, Value
727
767
  dst->numeric = 1;
728
768
 
729
769
  /* Perform the comparison. */
730
- dst->data_int = (value2integer(src0) >= value2integer(src1));
770
+ if (src0->type->flags.sign) {
771
+ if (src1->type->flags.sign) {
772
+ dst->data_int =
773
+ ((signed long long)value2integer(src0) >=
774
+ (signed long long)value2integer(src1));
775
+ } else {
776
+ dst->data_int =
777
+ ((signed long long)value2integer(src0) >=
778
+ (unsigned long long)value2integer(src1));
779
+ }
780
+ } else {
781
+ if (src1->type->flags.sign) {
782
+ dst->data_int =
783
+ ((unsigned long long)value2integer(src0) >=
784
+ (signed long long)value2integer(src1));
785
+ } else {
786
+ dst->data_int =
787
+ ((unsigned long long)value2integer(src0) >=
788
+ (unsigned long long)value2integer(src1));
789
+ }
790
+ }
731
791
  return dst;
732
792
  }
733
793
 
@@ -742,7 +802,27 @@ static Value lesser_equal_value_defined_bitstring(Value src0, Value src1, Value
742
802
  dst->numeric = 1;
743
803
 
744
804
  /* Perform the comparison. */
745
- dst->data_int = (value2integer(src0) <= value2integer(src1));
805
+ if (src0->type->flags.sign) {
806
+ if (src1->type->flags.sign) {
807
+ dst->data_int =
808
+ ((signed long long)value2integer(src0) <=
809
+ (signed long long)value2integer(src1));
810
+ } else {
811
+ dst->data_int =
812
+ ((signed long long)value2integer(src0) <=
813
+ (unsigned long long)value2integer(src1));
814
+ }
815
+ } else {
816
+ if (src1->type->flags.sign) {
817
+ dst->data_int =
818
+ ((unsigned long long)value2integer(src0) <=
819
+ (signed long long)value2integer(src1));
820
+ } else {
821
+ dst->data_int =
822
+ ((unsigned long long)value2integer(src0) <=
823
+ (unsigned long long)value2integer(src1));
824
+ }
825
+ }
746
826
  return dst;
747
827
  }
748
828
 
@@ -1810,7 +1890,27 @@ static Value greater_value_numeric(Value src0, Value src1, Value dst) {
1810
1890
  dst->numeric = 1;
1811
1891
 
1812
1892
  /* Perform the greater. */
1813
- dst->data_int = (src0->data_int > src1->data_int);
1893
+ if (src0->type->flags.sign) {
1894
+ if (src1->type->flags.sign) {
1895
+ dst->data_int =
1896
+ ((signed long long)src0->data_int >
1897
+ (signed long long)src1->data_int);
1898
+ } else {
1899
+ dst->data_int =
1900
+ ((signed long long)src0->data_int >
1901
+ (unsigned long long)src1->data_int);
1902
+ }
1903
+ } else {
1904
+ if (src1->type->flags.sign) {
1905
+ dst->data_int =
1906
+ ((unsigned long long)src0->data_int >
1907
+ (signed long long)src1->data_int);
1908
+ } else {
1909
+ dst->data_int =
1910
+ ((unsigned long long)src0->data_int >
1911
+ (unsigned long long)src1->data_int);
1912
+ }
1913
+ }
1814
1914
  return dst;
1815
1915
  }
1816
1916
 
@@ -1825,7 +1925,27 @@ static Value lesser_value_numeric(Value src0, Value src1, Value dst) {
1825
1925
  dst->numeric = 1;
1826
1926
 
1827
1927
  /* Perform the lesser. */
1828
- dst->data_int = (src0->data_int < src1->data_int);
1928
+ if (src0->type->flags.sign) {
1929
+ if (src1->type->flags.sign) {
1930
+ dst->data_int =
1931
+ ((signed long long)src0->data_int <
1932
+ (signed long long)src1->data_int);
1933
+ } else {
1934
+ dst->data_int =
1935
+ ((signed long long)src0->data_int <
1936
+ (unsigned long long)src1->data_int);
1937
+ }
1938
+ } else {
1939
+ if (src1->type->flags.sign) {
1940
+ dst->data_int =
1941
+ ((unsigned long long)src0->data_int <
1942
+ (signed long long)src1->data_int);
1943
+ } else {
1944
+ dst->data_int =
1945
+ ((unsigned long long)src0->data_int <
1946
+ (unsigned long long)src1->data_int);
1947
+ }
1948
+ }
1829
1949
  return dst;
1830
1950
  }
1831
1951
 
@@ -1840,7 +1960,27 @@ static Value greater_equal_value_numeric(Value src0, Value src1, Value dst) {
1840
1960
  dst->numeric = 1;
1841
1961
 
1842
1962
  /* Perform the greater or equal. */
1843
- dst->data_int = (src0->data_int >= src1->data_int);
1963
+ if (src0->type->flags.sign) {
1964
+ if (src1->type->flags.sign) {
1965
+ dst->data_int =
1966
+ ((signed long long)src0->data_int >=
1967
+ (signed long long)src1->data_int);
1968
+ } else {
1969
+ dst->data_int =
1970
+ ((signed long long)src0->data_int >=
1971
+ (unsigned long long)src1->data_int);
1972
+ }
1973
+ } else {
1974
+ if (src1->type->flags.sign) {
1975
+ dst->data_int =
1976
+ ((unsigned long long)src0->data_int >=
1977
+ (signed long long)src1->data_int);
1978
+ } else {
1979
+ dst->data_int =
1980
+ ((unsigned long long)src0->data_int >=
1981
+ (unsigned long long)src1->data_int);
1982
+ }
1983
+ }
1844
1984
  return dst;
1845
1985
  }
1846
1986
 
@@ -1855,7 +1995,27 @@ static Value lesser_equal_value_numeric(Value src0, Value src1, Value dst) {
1855
1995
  dst->numeric = 1;
1856
1996
 
1857
1997
  /* Perform the lesser or equal. */
1858
- dst->data_int = (src0->data_int <= src1->data_int);
1998
+ if (src0->type->flags.sign) {
1999
+ if (src1->type->flags.sign) {
2000
+ dst->data_int =
2001
+ ((signed long long)src0->data_int <=
2002
+ (signed long long)src1->data_int);
2003
+ } else {
2004
+ dst->data_int =
2005
+ ((signed long long)src0->data_int <=
2006
+ (unsigned long long)src1->data_int);
2007
+ }
2008
+ } else {
2009
+ if (src1->type->flags.sign) {
2010
+ dst->data_int =
2011
+ ((unsigned long long)src0->data_int <=
2012
+ (signed long long)src1->data_int);
2013
+ } else {
2014
+ dst->data_int =
2015
+ ((unsigned long long)src0->data_int <=
2016
+ (unsigned long long)src1->data_int);
2017
+ }
2018
+ }
1859
2019
  return dst;
1860
2020
  }
1861
2021
 
@@ -107,13 +107,15 @@ module HDLRuby::High::Std
107
107
  end
108
108
 
109
109
  # Make the interpolation.
110
- diff <= (next_data-base).as(diff.type) * remaining
111
- if(otyp.signed?) then
112
- interpolated_value <= base +
113
- ([[diff[diff.type.width-1]]*shift_bits,
114
- diff[diff.type.width-1..shift_bits]]).to_expr
115
- else
116
- interpolated_value <= base + (diff >> shift_bits)
110
+ par do
111
+ diff <= (next_data-base).as(diff.type) * remaining
112
+ if(otyp.signed?) then
113
+ interpolated_value <= base +
114
+ ([[diff[diff.type.width-1]]*shift_bits,
115
+ diff[diff.type.width-1..shift_bits]]).to_expr
116
+ else
117
+ interpolated_value <= base + (diff >> shift_bits)
118
+ end
117
119
  end
118
120
  end
119
121
 
@@ -1,3 +1,3 @@
1
1
  module HDLRuby
2
- VERSION = "2.6.8"
2
+ VERSION = "2.6.18"
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.8
4
+ version: 2.6.18
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-07-04 00:00:00.000000000 Z
11
+ date: 2021-10-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler