HDLRuby 2.6.8 → 2.6.18

Sign up to get free protection for your applications and to get access to all the features.
@@ -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