HDLRuby 2.2.2 → 2.2.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/HDLRuby/hruby_high.rb +10 -1
- data/lib/HDLRuby/hruby_low2vhd.rb +1 -1
- data/lib/HDLRuby/hruby_low_cleanup.rb +11 -0
- data/lib/HDLRuby/std/channel.rb +18 -15
- data/lib/HDLRuby/std/memory.rb +80 -2
- 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: 7c97f2a40be4ad9b440b2a76fbb993c28c8a1ff3ca6d33b3fb6ea134361489ca
|
4
|
+
data.tar.gz: 5a7909585987b60e481ac58f14d631bf1bfe60c538233a1709751bd5cf23faa9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: '0958174494199a7c5b65e5ac5d6e2657969310615b4dd078ac31f52e144228d6450a9bcb437fa54d5c8403e34244a09fb8e4226ed3972b35df677f15748b3287'
|
7
|
+
data.tar.gz: 156e11a28ab129b92f27ce205fb5cde89109b70120233da58fb14753cc893af842729eb970713aa5131bb8935f157c37bc67b0ff6c1d3add7c4fd2a389a7f458
|
data/lib/HDLRuby/hruby_high.rb
CHANGED
@@ -2041,8 +2041,17 @@ module HDLRuby::High
|
|
2041
2041
|
#
|
2042
2042
|
# NOTE: the else part is defined through the helse method.
|
2043
2043
|
def hif(condition)
|
2044
|
+
# # Creates the if statement.
|
2045
|
+
# return If.new(condition) { self }
|
2046
|
+
# Remove self from the current block.
|
2047
|
+
obj = self
|
2048
|
+
High.cur_block.delete_statement!(obj)
|
2044
2049
|
# Creates the if statement.
|
2045
|
-
|
2050
|
+
stmnt = If.new(condition) { add_statement(obj) }
|
2051
|
+
# Add it to the current block.
|
2052
|
+
High.cur_block.add_statement(stmnt)
|
2053
|
+
# Returns the result.
|
2054
|
+
return stmnt
|
2046
2055
|
end
|
2047
2056
|
end
|
2048
2057
|
|
@@ -1108,7 +1108,7 @@ module HDLRuby::Low
|
|
1108
1108
|
return '"' + self.content.to_s.rjust(width,sign).upcase + '"'
|
1109
1109
|
else
|
1110
1110
|
sign = self.type.signed? ? (self.content>=0 ? "0" : "1") : "0"
|
1111
|
-
return '"' + self.content.to_s(2).rjust(width,sign).upcase + '"'
|
1111
|
+
return '"' + self.content.abs.to_s(2).rjust(width,sign).upcase + '"'
|
1112
1112
|
end
|
1113
1113
|
end
|
1114
1114
|
end
|
@@ -189,5 +189,16 @@ module HDLRuby::Low
|
|
189
189
|
end
|
190
190
|
end
|
191
191
|
|
192
|
+
## Extends the TimeBlock class with functionality for breaking assingments
|
193
|
+
# to concats.
|
194
|
+
class TimeBlock
|
195
|
+
|
196
|
+
# Removes the signals and corresponding assignments whose name is not
|
197
|
+
# in +keep+.
|
198
|
+
def delete_unless!(keep)
|
199
|
+
# Nothing to cleanup.
|
200
|
+
end
|
201
|
+
end
|
202
|
+
|
192
203
|
|
193
204
|
end
|
data/lib/HDLRuby/std/channel.rb
CHANGED
@@ -86,13 +86,13 @@ module HDLRuby::High::Std
|
|
86
86
|
|
87
87
|
# Creates a new channel reader running in +namespace+ and
|
88
88
|
# reading using +reader_proc+ and reseting using +reseter_proc+.
|
89
|
-
def initialize(namespace,reader_proc,reseter_proc)
|
89
|
+
def initialize(namespace,reader_proc,reseter_proc = nil)
|
90
90
|
unless namespace.is_a?(Namespace)
|
91
91
|
raise "Invalid class for a namespace: #{namespace.class}"
|
92
92
|
end
|
93
93
|
@namespace = namespace
|
94
94
|
@reader_proc = reader_proc.to_proc
|
95
|
-
@rester_proc = reseter_proc.to_proc
|
95
|
+
@rester_proc = reseter_proc ? reseter_proc.to_proc : proc {}
|
96
96
|
end
|
97
97
|
|
98
98
|
## Performs a read on the channel using +args+ and +ruby_block+
|
@@ -129,13 +129,13 @@ module HDLRuby::High::Std
|
|
129
129
|
|
130
130
|
# Creates a new channel writer running in +namespace+ and
|
131
131
|
# writing using +writer_proc+ and reseting using +reseter_proc+.
|
132
|
-
def initialize(namespace,writer_proc,reseter_proc)
|
132
|
+
def initialize(namespace,writer_proc,reseter_proc = nil)
|
133
133
|
unless namespace.is_a?(Namespace)
|
134
134
|
raise "Invalid class for a namespace: #{namespace.class}"
|
135
135
|
end
|
136
136
|
@namespace = namespace
|
137
137
|
@writer_proc = writer_proc.to_proc
|
138
|
-
@reseter_proc = reseter_proc.to_proc
|
138
|
+
@reseter_proc = reseter_proc ? reseter_proc.to_proc : proc {}
|
139
139
|
end
|
140
140
|
|
141
141
|
## Performs a write on the channel using +args+ and +ruby_block+
|
@@ -174,14 +174,17 @@ module HDLRuby::High::Std
|
|
174
174
|
# Creates a new channel accesser running in +namespace+
|
175
175
|
# and reading using +reader_proc+, writing using +writer_proc+,
|
176
176
|
# and reseting using +reseter_proc+.
|
177
|
-
def initialize(namespace,reader_proc,writer_proc,reseter_proc)
|
177
|
+
def initialize(namespace,reader_proc,writer_proc,reseter_proc = nil)
|
178
178
|
unless namespace.is_a?(Namespace)
|
179
179
|
raise "Invalid class for a namespace: #{namespace.class}"
|
180
180
|
end
|
181
181
|
@namespace = namespace
|
182
|
-
|
183
|
-
|
184
|
-
|
182
|
+
unless reader_proc || writer_proc then
|
183
|
+
raise "An accesser must have at least a reading or a writing procedure."
|
184
|
+
end
|
185
|
+
@reader_proc = reader_proc ? reader_proc.to_proc : proc { }
|
186
|
+
@writer_proc = writer_proc ? writer_proc.to_proc : proc { }
|
187
|
+
@reseter_proc = reseter_proc ? reseter_proc.to_proc : proc {}
|
185
188
|
end
|
186
189
|
|
187
190
|
## Performs a read on the channel using +args+ and +ruby_block+
|
@@ -276,10 +279,10 @@ module HDLRuby::High::Std
|
|
276
279
|
# The accesser inout ports by name.
|
277
280
|
@accesser_inouts = {}
|
278
281
|
|
279
|
-
# The default reset procedures (reseters), by default do nothing.
|
280
|
-
@input_reseter_proc = proc {}
|
281
|
-
@output_reseter_proc = proc {}
|
282
|
-
@inout_reseter_proc = proc {}
|
282
|
+
# # The default reset procedures (reseters), by default do nothing.
|
283
|
+
# @input_reseter_proc = proc {}
|
284
|
+
# @output_reseter_proc = proc {}
|
285
|
+
# @inout_reseter_proc = proc {}
|
283
286
|
|
284
287
|
# The branch channels
|
285
288
|
@branches = {}
|
@@ -748,17 +751,17 @@ module HDLRuby::High::Std
|
|
748
751
|
end
|
749
752
|
|
750
753
|
# Set ups the accesser's namespace
|
751
|
-
|
754
|
+
loc_inputs.each do |name,sig|
|
752
755
|
@accesser_namespace.add_method(sig.name) do
|
753
756
|
HDLRuby::High.top_user.send(name)
|
754
757
|
end
|
755
758
|
end
|
756
|
-
|
759
|
+
loc_outputs.each do |name,sig|
|
757
760
|
@accesser_namespace.add_method(sig.name) do
|
758
761
|
HDLRuby::High.top_user.send(name)
|
759
762
|
end
|
760
763
|
end
|
761
|
-
|
764
|
+
loc_inouts.each do |name,sig|
|
762
765
|
@accesser_namespace.add_method(sig.name) do
|
763
766
|
HDLRuby::High.top_user.send(name)
|
764
767
|
end
|
data/lib/HDLRuby/std/memory.rb
CHANGED
@@ -277,7 +277,7 @@ HDLRuby::High::Std.channel(:mem_dual) do |typ,size,clk,rst,br_rsts = {}|
|
|
277
277
|
hif(trig_r == 1) do
|
278
278
|
# The trigger was previously set, read ok.
|
279
279
|
target <= dbus_r
|
280
|
-
blk.call
|
280
|
+
blk.call if blk
|
281
281
|
end
|
282
282
|
# Prepare the read.
|
283
283
|
abus_r <= addr
|
@@ -311,7 +311,7 @@ HDLRuby::High::Std.channel(:mem_dual) do |typ,size,clk,rst,br_rsts = {}|
|
|
311
311
|
# No reset, so can perform the write.
|
312
312
|
hif(trig_w == 1) do
|
313
313
|
# The trigger was previously set, write ok.
|
314
|
-
blk.call
|
314
|
+
blk.call if blk
|
315
315
|
end
|
316
316
|
# Prepare the write.
|
317
317
|
abus_w <= addr
|
@@ -322,6 +322,84 @@ HDLRuby::High::Std.channel(:mem_dual) do |typ,size,clk,rst,br_rsts = {}|
|
|
322
322
|
end
|
323
323
|
end
|
324
324
|
|
325
|
+
|
326
|
+
# The increment branches.
|
327
|
+
# Read with increment
|
328
|
+
brancher(:rinc) do
|
329
|
+
reader_output :trig_r, :abus_r
|
330
|
+
reader_input :dbus_r
|
331
|
+
if br_rsts[:rinc] then
|
332
|
+
rst_name = br_rsts[:rinc].to_sym
|
333
|
+
else
|
334
|
+
rst_name = rst.name
|
335
|
+
reader_input rst_name
|
336
|
+
end
|
337
|
+
|
338
|
+
# Defines the read procedure at address +addr+
|
339
|
+
# using +target+ as target of access result.
|
340
|
+
reader do |blk,target|
|
341
|
+
# By default the read trigger is 0.
|
342
|
+
top_block.unshift { trig_r <= 0 }
|
343
|
+
# The read procedure.
|
344
|
+
rst = send(rst_name)
|
345
|
+
par do
|
346
|
+
hif(rst == 0) do
|
347
|
+
# No reset, so can perform the read.
|
348
|
+
hif(trig_r == 1) do
|
349
|
+
# The trigger was previously set, read ok.
|
350
|
+
target <= dbus_r
|
351
|
+
blk.call if blk
|
352
|
+
end
|
353
|
+
# Prepare the read.
|
354
|
+
abus_r <= abus_r + 1
|
355
|
+
trig_r <= 1
|
356
|
+
end
|
357
|
+
helse do
|
358
|
+
# Initialize the address to -1
|
359
|
+
abus_r <= -1
|
360
|
+
end
|
361
|
+
end
|
362
|
+
end
|
363
|
+
end
|
364
|
+
|
365
|
+
# Write with address
|
366
|
+
brancher(:winc) do
|
367
|
+
writer_output :trig_w, :abus_w, :dbus_w
|
368
|
+
if br_rsts[:winc] then
|
369
|
+
rst_name = br_rsts[:winc].to_sym
|
370
|
+
else
|
371
|
+
rst_name = rst.name
|
372
|
+
writer_input rst_name
|
373
|
+
end
|
374
|
+
# puts "br_rsts=#{br_rsts}"
|
375
|
+
# puts "rst_name=#{rst_name}"
|
376
|
+
|
377
|
+
# Defines the read procedure at address +addr+
|
378
|
+
# using +target+ as target of access result.
|
379
|
+
writer do |blk,target|
|
380
|
+
# By default the read trigger is 0.
|
381
|
+
top_block.unshift { trig_w <= 0 }
|
382
|
+
# The write procedure.
|
383
|
+
rst = send(rst_name)
|
384
|
+
par do
|
385
|
+
hif(rst == 0) do
|
386
|
+
# No reset, so can perform the write.
|
387
|
+
hif(trig_w == 1) do
|
388
|
+
# The trigger was previously set, write ok.
|
389
|
+
blk.call if blk
|
390
|
+
end
|
391
|
+
# Prepare the write.
|
392
|
+
abus_w <= abus_w + 1
|
393
|
+
trig_w <= 1
|
394
|
+
dbus_w <= target
|
395
|
+
end
|
396
|
+
helse do
|
397
|
+
abus_w <= -1
|
398
|
+
end
|
399
|
+
end
|
400
|
+
end
|
401
|
+
end
|
402
|
+
|
325
403
|
end
|
326
404
|
|
327
405
|
|
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.3
|
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-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|