HDLRuby 2.2.9 → 2.2.10
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/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
|