HDLRuby 2.2.9 → 2.2.10
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 +8 -4
- data/lib/HDLRuby/hdrcc.rb +1 -0
- data/lib/HDLRuby/hruby_low_mutable.rb +4 -4
- data/lib/HDLRuby/hruby_low_without_concat.rb +51 -0
- data/lib/HDLRuby/hruby_low_without_namespace.rb +1 -1
- data/lib/HDLRuby/hruby_verilog.rb +10 -1
- data/lib/HDLRuby/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7b867bb3b74debaa536d2803c7646dd4bb6b1af3b9d6dfee8e2dd321137c05da
|
4
|
+
data.tar.gz: 7c6c21d6f808759241a5789993579fc49dd7acfbea2be645075044528d9d4a25
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 663010998dbe51f0123d68e9fc785441e115ee54744f73b36be4bdc8de81103884933222b1a368f5c86809b71118e7b7ebd5e73f2f6e9179547a2971e501c8ef
|
7
|
+
data.tar.gz: 51d7866a4643f05cac41971be813ce43c039949fbbcdb2cfb30280b3fd27d13cbf82a378e4f1151b6b9f1e13d79d4a4a8e4e7172a072cc5e748c8327cc15cd65
|
@@ -1,10 +1,14 @@
|
|
1
1
|
|
2
2
|
# Describes an 8-bit data 4-bit address ROM.
|
3
3
|
system :rom4_8 do
|
4
|
-
[
|
5
|
-
[7..0].output :
|
4
|
+
[2..0].input :addr
|
5
|
+
[7..0].output :data0,:data1,:data2
|
6
6
|
|
7
|
-
bit[7..0][
|
7
|
+
bit[7..0][0..7].constant content0: [1,2,3,4,5,6,7]
|
8
|
+
bit[7..0][-8].constant content1: [1,2,3,4,5,6,7]
|
9
|
+
bit[7..0][-8].constant content2: (8).times.to_a
|
8
10
|
|
9
|
-
|
11
|
+
data0 <= content0[addr]
|
12
|
+
data1 <= content1[addr]
|
13
|
+
data2 <= content2[addr]
|
10
14
|
end
|
data/lib/HDLRuby/hdrcc.rb
CHANGED
@@ -463,14 +463,14 @@ module HDLRuby::Low
|
|
463
463
|
end
|
464
464
|
end
|
465
465
|
|
466
|
-
# Sets the value.
|
466
|
+
# Sets the value (can also be nil for removing the value).
|
467
467
|
def set_value!(value)
|
468
468
|
# Check and set teh value.
|
469
|
-
unless value.is_a?(Expression) then
|
470
|
-
raise AnyError, "Invalid class for a constant: #{
|
469
|
+
unless value == nil || value.is_a?(Expression) then
|
470
|
+
raise AnyError, "Invalid class for a constant: #{value.class}"
|
471
471
|
end
|
472
472
|
@value = value
|
473
|
-
value.parent = self
|
473
|
+
value.parent = self unless value == nil
|
474
474
|
end
|
475
475
|
|
476
476
|
end
|
@@ -22,6 +22,15 @@ module HDLRuby::Low
|
|
22
22
|
self.scope.break_concat_assigns!
|
23
23
|
end
|
24
24
|
|
25
|
+
# Converts initial concat of values of signals to assignment in
|
26
|
+
# timed blocks (for making the code compatible with verilog
|
27
|
+
# translation).
|
28
|
+
#
|
29
|
+
# NOTE: Assumes such array as at the top level.
|
30
|
+
def initial_concat_to_timed!
|
31
|
+
self.scope.initial_concat_to_timed!
|
32
|
+
end
|
33
|
+
|
25
34
|
end
|
26
35
|
|
27
36
|
## Extends the Scope class with functionality for breaking assingments
|
@@ -47,6 +56,48 @@ module HDLRuby::Low
|
|
47
56
|
end
|
48
57
|
end
|
49
58
|
end
|
59
|
+
|
60
|
+
# Converts initial array of value of signals to assignment in
|
61
|
+
# timed blocks (for making the code compatible with verilog
|
62
|
+
# translation).
|
63
|
+
#
|
64
|
+
# NOTE: Assumes such array as at the top level.
|
65
|
+
def initial_concat_to_timed!
|
66
|
+
# Gather the signal with concat as initial values.
|
67
|
+
sigs = []
|
68
|
+
# For the interface signals of the upper system.
|
69
|
+
self.parent.each_signal do |sig|
|
70
|
+
sigs << sig if sig.value.is_a?(Concat)
|
71
|
+
end
|
72
|
+
# For the inner signals of the scope.
|
73
|
+
self.each_signal do |sig|
|
74
|
+
sigs << sig if sig.value.is_a?(Concat)
|
75
|
+
end
|
76
|
+
# No initial concat? End here.
|
77
|
+
return if sigs.empty?
|
78
|
+
|
79
|
+
# Create a timed block for moving the concat initialization
|
80
|
+
# to it.
|
81
|
+
initial = TimeBlock.new(:seq)
|
82
|
+
self.add_behavior(TimeBehavior.new(initial))
|
83
|
+
# Adds to it the initializations.
|
84
|
+
sigs.each do |sig|
|
85
|
+
name = sig.name
|
86
|
+
styp = sig.type
|
87
|
+
btyp = styp.base
|
88
|
+
value = sig.value
|
89
|
+
sig.value.each_expression.with_index do |expr,i|
|
90
|
+
left = RefIndex.new(btyp,
|
91
|
+
RefName.new(styp,RefThis.new,name),
|
92
|
+
i.to_expr)
|
93
|
+
initial.add_statement(Transmit.new(left,expr.clone))
|
94
|
+
end
|
95
|
+
end
|
96
|
+
# Remove the initial values from the signals.
|
97
|
+
sigs.each do |sig|
|
98
|
+
sig.set_value!(nil)
|
99
|
+
end
|
100
|
+
end
|
50
101
|
end
|
51
102
|
|
52
103
|
## Extends the Block class with functionality for breaking assingments
|
@@ -317,7 +317,7 @@ module HDLRuby::Low
|
|
317
317
|
# And create a new type from current type.
|
318
318
|
# Maybe the new type already exists.
|
319
319
|
ndef = types[self]
|
320
|
-
return
|
320
|
+
return ndef if ndef # Yes, already exists.
|
321
321
|
# No, create and register a new typedef.
|
322
322
|
ndef = TypeDef.new(HDLRuby.uniq_name,self)
|
323
323
|
types[self] = ndef
|
@@ -1501,6 +1501,9 @@ class Case
|
|
1501
1501
|
whens.statement.each_statement do |statement|
|
1502
1502
|
result << "#{statement.to_verilog}"
|
1503
1503
|
end
|
1504
|
+
else
|
1505
|
+
# Empty statement case.
|
1506
|
+
result << "\n"
|
1504
1507
|
end
|
1505
1508
|
end
|
1506
1509
|
# The default part is stored in default instead of when. Reads and processes in the same way as when.
|
@@ -1737,6 +1740,13 @@ class SystemT
|
|
1737
1740
|
self.each_inner do |inner|
|
1738
1741
|
regs << inner.to_verilog if inner.value
|
1739
1742
|
end
|
1743
|
+
# And the array types signals.
|
1744
|
+
self.each_signal do |sig|
|
1745
|
+
regs << sig.to_verilog if sig.type.is_a?(TypeVector) && sig.type.base.is_a?(TypeVector)
|
1746
|
+
end
|
1747
|
+
self.each_inner do |sig|
|
1748
|
+
regs << sig.to_verilog if sig.type.is_a?(TypeVector) && sig.type.base.is_a?(TypeVector)
|
1749
|
+
end
|
1740
1750
|
|
1741
1751
|
# Code generation
|
1742
1752
|
inputs = 0
|
@@ -1851,7 +1861,6 @@ class SystemT
|
|
1851
1861
|
|
1852
1862
|
# Declare "inner".
|
1853
1863
|
self.each_inner do |inner|
|
1854
|
-
# puts "for inner: #{inner.to_verilog}"
|
1855
1864
|
# if regs.include?(inner.name) then
|
1856
1865
|
if regs.include?(inner.to_verilog) then
|
1857
1866
|
code << " reg"
|
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.2.
|
4
|
+
version: 2.2.10
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Lovic Gauthier
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-03-
|
11
|
+
date: 2020-03-18 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|