HDLRuby 2.11.12 → 3.1.0
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/README.html +3274 -0
- data/README.md +660 -128
- data/ext/hruby_sim/hruby_sim_calc.c +2 -0
- data/lib/HDLRuby/backend/hruby_allocator.rb +2 -2
- data/lib/HDLRuby/backend/hruby_c_allocator.rb +7 -7
- data/lib/HDLRuby/hdr_samples/constant_in_function.rb +2 -1
- data/lib/HDLRuby/hdr_samples/mei8_bench.rb +1 -1
- data/lib/HDLRuby/hdr_samples/with_bram.rb +3 -3
- data/lib/HDLRuby/hdr_samples/with_bram_frame_stack.rb +105 -0
- data/lib/HDLRuby/hdr_samples/with_bram_stack.rb +69 -0
- data/lib/HDLRuby/hdr_samples/with_ref_expr.rb +30 -0
- data/lib/HDLRuby/hdr_samples/with_sequencer.rb +185 -0
- data/lib/HDLRuby/hdr_samples/with_sequencer_deep.rb +91 -0
- data/lib/HDLRuby/hdr_samples/with_sequencer_enumerable.rb +439 -0
- data/lib/HDLRuby/hdr_samples/with_sequencer_enumerator.rb +89 -0
- data/lib/HDLRuby/hdr_samples/with_sequencer_func.rb +63 -0
- data/lib/HDLRuby/hdr_samples/with_sequencer_sync.rb +120 -0
- data/lib/HDLRuby/hdrcc.rb +16 -3
- data/lib/HDLRuby/hdrlib.rb +1 -1
- data/lib/HDLRuby/hruby_db.rb +2 -2
- data/lib/HDLRuby/hruby_high.rb +61 -25
- data/lib/HDLRuby/hruby_high_fullname.rb +3 -1
- data/lib/HDLRuby/hruby_low.rb +2 -2
- data/lib/HDLRuby/hruby_low2c.rb +58 -43
- data/lib/HDLRuby/hruby_low2hdr.rb +66 -40
- data/lib/HDLRuby/hruby_low2high.rb +86 -44
- data/lib/HDLRuby/hruby_low2seq.rb +26 -18
- data/lib/HDLRuby/hruby_low2sym.rb +14 -13
- data/lib/HDLRuby/hruby_low2vhd.rb +78 -43
- data/lib/HDLRuby/hruby_low_bool2select.rb +61 -46
- data/lib/HDLRuby/hruby_low_casts_without_expression.rb +56 -44
- data/lib/HDLRuby/hruby_low_cleanup.rb +18 -16
- data/lib/HDLRuby/hruby_low_fix_types.rb +64 -32
- data/lib/HDLRuby/hruby_low_mutable.rb +53 -118
- data/lib/HDLRuby/hruby_low_resolve.rb +26 -31
- data/lib/HDLRuby/hruby_low_with_bool.rb +33 -16
- data/lib/HDLRuby/hruby_low_with_port.rb +3 -3
- data/lib/HDLRuby/hruby_low_with_var.rb +23 -9
- data/lib/HDLRuby/hruby_low_without_concat.rb +19 -13
- data/lib/HDLRuby/hruby_low_without_namespace.rb +47 -32
- data/lib/HDLRuby/hruby_low_without_parinseq.rb +18 -12
- data/lib/HDLRuby/hruby_low_without_select.rb +36 -23
- data/lib/HDLRuby/hruby_low_without_subsignals.rb +79 -39
- data/lib/HDLRuby/hruby_rcsim.rb +79 -64
- data/lib/HDLRuby/hruby_rsim.rb +64 -15
- data/lib/HDLRuby/hruby_rsim_mute.rb +2 -3
- data/lib/HDLRuby/hruby_rsim_vcd.rb +28 -25
- data/lib/HDLRuby/hruby_types.rb +5 -5
- data/lib/HDLRuby/hruby_values.rb +19 -8
- data/lib/HDLRuby/hruby_verilog.rb +191 -65
- data/lib/HDLRuby/hruby_verilog_name.rb +49 -42
- data/lib/HDLRuby/soft/stacks.rb +219 -0
- data/lib/HDLRuby/std/bram.rb +9 -5
- data/lib/HDLRuby/std/clocks.rb +1 -1
- data/lib/HDLRuby/std/fsm.rb +39 -10
- data/lib/HDLRuby/std/sequencer.rb +2085 -0
- data/lib/HDLRuby/std/sequencer_func.rb +533 -0
- data/lib/HDLRuby/std/sequencer_sync.rb +400 -0
- data/lib/HDLRuby/std/std.rb +13 -0
- data/lib/HDLRuby/version.rb +1 -1
- data/tuto/adder_sat_flags_vcd.png +0 -0
- data/tuto/addsub_vcd.png +0 -0
- data/tuto/alu_vcd.png +0 -0
- data/tuto/bit_pong_vcd.png +0 -0
- data/tuto/checksum_vcd.png +0 -0
- data/tuto/circuit_hdr.odg +0 -0
- data/tuto/circuit_hdr.png +0 -0
- data/tuto/circuit_hie.odg +0 -0
- data/tuto/circuit_hie.png +0 -0
- data/tuto/circuit_view.odg +0 -0
- data/tuto/circuit_view.png +0 -0
- data/tuto/clock_counter_vcd.png +0 -0
- data/tuto/counter_ext_vcd.png +0 -0
- data/tuto/fact_vcd.png +0 -0
- data/tuto/hw_flow.odg +0 -0
- data/tuto/hw_flow.png +0 -0
- data/tuto/maxxer_vcd.png +0 -0
- data/tuto/pingpong0_vcd.png +0 -0
- data/tuto/pingpong1_vcd.png +0 -0
- data/tuto/pingpong2_vcd.png +0 -0
- data/tuto/ram_vcd.png +0 -0
- data/tuto/serializer_vcd.png +0 -0
- data/tuto/sw_flow.odg +0 -0
- data/tuto/sw_flow.png +0 -0
- data/tuto/the_counter_vcd.png +0 -0
- data/tuto/tutorial_sw.html +2359 -0
- data/tuto/tutorial_sw.md +2890 -0
- data/tuto/tutorial_sw.pdf +0 -0
- data/tuto/tutorial_sw_jp.md +417 -0
- metadata +46 -2
data/lib/HDLRuby/hdrcc.rb
CHANGED
|
@@ -263,6 +263,9 @@ module HDLRuby
|
|
|
263
263
|
# Initialize the environment for processing the hdr file.
|
|
264
264
|
bind = TOPLEVEL_BINDING.clone
|
|
265
265
|
eval("require 'HDLRuby'\n\nconfigure_high\n\n",bind)
|
|
266
|
+
if $options[:std] then
|
|
267
|
+
eval("require 'std/std.rb'\n\ninclude HDLRuby::High::Std\n\n",bind)
|
|
268
|
+
end
|
|
266
269
|
# Process it.
|
|
267
270
|
eval(@texts[0],bind,@top_file_name,1)
|
|
268
271
|
# Get the resulting instance
|
|
@@ -280,8 +283,8 @@ module HDLRuby
|
|
|
280
283
|
end
|
|
281
284
|
|
|
282
285
|
|
|
283
|
-
# Extend the Code class with generation of file for the content.
|
|
284
286
|
class HDLRuby::Low::Code
|
|
287
|
+
## Extends the Code class with generation of file for the content.
|
|
285
288
|
|
|
286
289
|
## Creates a file in +path+ containing the content of the code.
|
|
287
290
|
def to_file(path = "")
|
|
@@ -337,6 +340,9 @@ end
|
|
|
337
340
|
require 'optparse'
|
|
338
341
|
# Process the command line options
|
|
339
342
|
$options = {}
|
|
343
|
+
# By default the std libraries are loaded.
|
|
344
|
+
$options[:std] = true
|
|
345
|
+
# Parse the options
|
|
340
346
|
$optparse = OptionParser.new do |opts|
|
|
341
347
|
opts.banner = "Usage: hdrcc.rb [options] <input file> [<output directory or file>]"
|
|
342
348
|
|
|
@@ -435,6 +441,9 @@ $optparse = OptionParser.new do |opts|
|
|
|
435
441
|
opts.on("--testall","Compile all the available unit tests.") do |t|
|
|
436
442
|
$options[:testall] = t
|
|
437
443
|
end
|
|
444
|
+
opts.on("--no-std", "Compile without the standard library.") do |t|
|
|
445
|
+
$options[:std] = false
|
|
446
|
+
end
|
|
438
447
|
opts.on("-t", "--top system", "Specify the top system to process") do|t|
|
|
439
448
|
$options[:top] = t
|
|
440
449
|
end
|
|
@@ -445,7 +454,11 @@ $optparse = OptionParser.new do |opts|
|
|
|
445
454
|
$options[:dump] = v
|
|
446
455
|
$options[:multiple] = v
|
|
447
456
|
end
|
|
448
|
-
opts.on("--
|
|
457
|
+
opts.on("--get-samples", "Copy the sample directory (hdr_samples) to current one, the exit") do
|
|
458
|
+
FileUtils.copy_entry(File.dirname(__FILE__) + "/hdr_samples","./hdr_samples")
|
|
459
|
+
exit
|
|
460
|
+
end
|
|
461
|
+
opts.on("--version", "Show the version of HDLRuby, then exit") do |v|
|
|
449
462
|
puts VERSION
|
|
450
463
|
exit
|
|
451
464
|
end
|
|
@@ -808,7 +821,7 @@ elsif $options[:verilog] then
|
|
|
808
821
|
$top_system.each_systemT_deep do |systemT|
|
|
809
822
|
HDLRuby.show? "signal2subs step..."
|
|
810
823
|
# Ensure there is not implicit assign to sub signals.
|
|
811
|
-
systemT.signal2subs!
|
|
824
|
+
systemT.signal2subs!(true)
|
|
812
825
|
# HDLRuby.show "casts_without_expression! step..."
|
|
813
826
|
# systemT.casts_without_expression!
|
|
814
827
|
# HDLRuby.show Time.now
|
data/lib/HDLRuby/hdrlib.rb
CHANGED
|
@@ -226,8 +226,8 @@ module HDLRuby
|
|
|
226
226
|
end
|
|
227
227
|
|
|
228
228
|
|
|
229
|
-
# Extend the Code class with generation of file for the content.
|
|
230
229
|
class HDLRuby::Low::Code
|
|
230
|
+
## Extends the Code class with generation of file for the content.
|
|
231
231
|
|
|
232
232
|
## Creates a file in +path+ containing the content of the code.
|
|
233
233
|
def to_file(path = "")
|
data/lib/HDLRuby/hruby_db.rb
CHANGED
|
@@ -9,7 +9,7 @@ warn "hruby_db.rb (former hruby_low.rb) is deprecated."
|
|
|
9
9
|
##
|
|
10
10
|
# Low-level libraries for describing digital hardware.
|
|
11
11
|
#######################################################
|
|
12
|
-
module HDLRuby::
|
|
12
|
+
module HDLRuby::LowDB
|
|
13
13
|
|
|
14
14
|
Base = HDLRuby::Base
|
|
15
15
|
|
|
@@ -151,7 +151,7 @@ module HDLRuby::Low
|
|
|
151
151
|
end
|
|
152
152
|
|
|
153
153
|
##
|
|
154
|
-
# Describes
|
|
154
|
+
# Describes an unsigned integer data type.
|
|
155
155
|
class TypeUnsigned < Base::TypeUnsigned
|
|
156
156
|
include Ltype
|
|
157
157
|
end
|
data/lib/HDLRuby/hruby_high.rb
CHANGED
|
@@ -2044,7 +2044,7 @@ module HDLRuby::High
|
|
|
2044
2044
|
end
|
|
2045
2045
|
|
|
2046
2046
|
##
|
|
2047
|
-
# Describes
|
|
2047
|
+
# Describes an unsigned integer data type.
|
|
2048
2048
|
class TypeUnsigned < TypeVector
|
|
2049
2049
|
|
|
2050
2050
|
# Creates a new vector type named +name+ from +base+ type and with
|
|
@@ -2198,29 +2198,48 @@ module HDLRuby::High
|
|
|
2198
2198
|
#
|
|
2199
2199
|
# NOTE: a function is a short-cut for a method that creates a scope.
|
|
2200
2200
|
def function(name, &ruby_block)
|
|
2201
|
+
warn("Construct 'function' is deprecated, use 'hdef' instead.")
|
|
2201
2202
|
# Ensure there is a block.
|
|
2202
2203
|
ruby_block = proc {} unless block_given?
|
|
2203
2204
|
if HDLRuby::High.in_system? then
|
|
2204
2205
|
define_singleton_method(name.to_sym) do |*args,&other_block|
|
|
2205
|
-
# sub do
|
|
2206
2206
|
sub(HDLRuby.uniq_name(name)) do
|
|
2207
2207
|
HDLRuby::High.top_user.instance_exec(*args,*other_block,
|
|
2208
2208
|
&ruby_block)
|
|
2209
|
-
# ruby_block.call(*args)
|
|
2210
2209
|
end
|
|
2211
2210
|
end
|
|
2212
2211
|
else
|
|
2213
2212
|
define_method(name.to_sym) do |*args,&other_block|
|
|
2214
|
-
# sub do
|
|
2215
2213
|
sub(HDLRuby.uniq_name(name)) do
|
|
2216
2214
|
HDLRuby::High.top_user.instance_exec(*args,*other_block,
|
|
2217
2215
|
&ruby_block)
|
|
2218
|
-
# ruby_block.call(*args,*other_block)
|
|
2219
2216
|
end
|
|
2220
2217
|
end
|
|
2221
2218
|
end
|
|
2222
2219
|
end
|
|
2223
2220
|
|
|
2221
|
+
# Declares a function named +name+ using +ruby_block+ as body.
|
|
2222
|
+
#
|
|
2223
|
+
# NOTE: a function is a short-cut for a method that creates a scope.
|
|
2224
|
+
def hdef(name, &ruby_block)
|
|
2225
|
+
# Ensure there is a block.
|
|
2226
|
+
ruby_block = proc {} unless block_given?
|
|
2227
|
+
if HDLRuby::High.in_system? then
|
|
2228
|
+
define_singleton_method(name.to_sym) do |*args,&other_block|
|
|
2229
|
+
sub(HDLRuby.uniq_name(name)) do
|
|
2230
|
+
HDLRuby::High.top_user.instance_exec(*args,*other_block,
|
|
2231
|
+
&ruby_block)
|
|
2232
|
+
end
|
|
2233
|
+
end
|
|
2234
|
+
else
|
|
2235
|
+
define_method(name.to_sym) do |*args,&other_block|
|
|
2236
|
+
sub(HDLRuby.uniq_name(name)) do
|
|
2237
|
+
HDLRuby::High.top_user.instance_exec(*args,*other_block,
|
|
2238
|
+
&ruby_block)
|
|
2239
|
+
end
|
|
2240
|
+
end
|
|
2241
|
+
end
|
|
2242
|
+
end
|
|
2224
2243
|
|
|
2225
2244
|
|
|
2226
2245
|
|
|
@@ -2855,17 +2874,17 @@ module HDLRuby::High
|
|
|
2855
2874
|
|
|
2856
2875
|
# Casts to a bit vector type.
|
|
2857
2876
|
def to_bit
|
|
2858
|
-
return self.as(bit[self.width])
|
|
2877
|
+
return self.as(HDLRuby::High.top_user.bit[self.type.width])
|
|
2859
2878
|
end
|
|
2860
2879
|
|
|
2861
2880
|
# Casts to an unsigned bit vector type.
|
|
2862
2881
|
def to_unsigned
|
|
2863
|
-
return self.as(unsigned[self.width])
|
|
2882
|
+
return self.as(HDLRuby::High.top_user.unsigned[self.type.width])
|
|
2864
2883
|
end
|
|
2865
2884
|
|
|
2866
2885
|
# Casts to a signed bit vector type.
|
|
2867
|
-
def
|
|
2868
|
-
return self.as(signed[self.width])
|
|
2886
|
+
def to_signed
|
|
2887
|
+
return self.as(HDLRuby::High.top_user.signed[self.type.width])
|
|
2869
2888
|
end
|
|
2870
2889
|
|
|
2871
2890
|
# Extends on the left to +n+ bits filling with +v+ bit values.
|
|
@@ -2997,6 +3016,12 @@ module HDLRuby::High
|
|
|
2997
3016
|
define_method(orig_operator(operator),&meth)
|
|
2998
3017
|
end
|
|
2999
3018
|
|
|
3019
|
+
# The <=> operator is also supported by is transformed into a sub
|
|
3020
|
+
# with a signed result.
|
|
3021
|
+
def <=>(expr)
|
|
3022
|
+
return (self.as(self.type.base[self.type.width+1])-expr).to_signed
|
|
3023
|
+
end
|
|
3024
|
+
|
|
3000
3025
|
|
|
3001
3026
|
# Creates an access to elements of range +rng+ of the signal.
|
|
3002
3027
|
#
|
|
@@ -3128,7 +3153,6 @@ module HDLRuby::High
|
|
|
3128
3153
|
|
|
3129
3154
|
# Converts the unary expression to HDLRuby::Low.
|
|
3130
3155
|
def to_low
|
|
3131
|
-
# return HDLRuby::Low::Cast.new(self.type.to_low,self.child.to_low)
|
|
3132
3156
|
castL =HDLRuby::Low::Cast.new(self.type.to_low,self.child.to_low)
|
|
3133
3157
|
# # For debugging: set the source high object
|
|
3134
3158
|
# castL.properties[:low2high] = self.hdr_id
|
|
@@ -3188,7 +3212,7 @@ module HDLRuby::High
|
|
|
3188
3212
|
|
|
3189
3213
|
|
|
3190
3214
|
##
|
|
3191
|
-
# Describes a
|
|
3215
|
+
# Describes a selection operation (generalization of the ternary operator).
|
|
3192
3216
|
#
|
|
3193
3217
|
# NOTE: choice is using the value of +select+ as an index.
|
|
3194
3218
|
class Select < Low::Select
|
|
@@ -3344,6 +3368,12 @@ module HDLRuby::High
|
|
|
3344
3368
|
end
|
|
3345
3369
|
end
|
|
3346
3370
|
|
|
3371
|
+
# Get the refered objects.
|
|
3372
|
+
def objects
|
|
3373
|
+
return [ self.object] if self.is_a?(RefObject)
|
|
3374
|
+
return self.each.map { |ref| ref.objects }.flatten
|
|
3375
|
+
end
|
|
3376
|
+
|
|
3347
3377
|
# Reference can be used like enumerator
|
|
3348
3378
|
include Enumerable
|
|
3349
3379
|
end
|
|
@@ -4410,14 +4440,14 @@ module HDLRuby::High
|
|
|
4410
4440
|
super(nil)
|
|
4411
4441
|
# # Save the Location for debugging information
|
|
4412
4442
|
# @location = caller_locations
|
|
4413
|
-
# Sets the current behavior
|
|
4414
|
-
@@cur_behavior = self
|
|
4443
|
+
# # Sets the current behavior
|
|
4444
|
+
# @@cur_behavior = self
|
|
4415
4445
|
# Add the events (they may be hierarchical to flatten)
|
|
4416
4446
|
events.flatten.each { |event| self.add_event(event) }
|
|
4417
4447
|
# Create and add the block.
|
|
4418
4448
|
self.block = High.make_block(mode,&ruby_block)
|
|
4419
|
-
# Unset the current behavior
|
|
4420
|
-
@@cur_behavior = nil
|
|
4449
|
+
# # Unset the current behavior
|
|
4450
|
+
# @@cur_behavior = nil
|
|
4421
4451
|
end
|
|
4422
4452
|
|
|
4423
4453
|
# Sets an event to the behavior.
|
|
@@ -4584,12 +4614,21 @@ module HDLRuby::High
|
|
|
4584
4614
|
end
|
|
4585
4615
|
end
|
|
4586
4616
|
|
|
4587
|
-
# The current behavior: by default none.
|
|
4588
|
-
@@cur_behavior = nil
|
|
4617
|
+
# # The current behavior: by default none.
|
|
4618
|
+
# @@cur_behavior = nil
|
|
4589
4619
|
|
|
4590
4620
|
# Gets the enclosing behavior if any.
|
|
4591
4621
|
def self.cur_behavior
|
|
4592
|
-
return @@cur_behavior
|
|
4622
|
+
# return @@cur_behavior
|
|
4623
|
+
if in_behavior? then
|
|
4624
|
+
user = top_user
|
|
4625
|
+
while(user && !user.is_a?(Behavior)) do
|
|
4626
|
+
user = user.parent
|
|
4627
|
+
end
|
|
4628
|
+
return user
|
|
4629
|
+
else
|
|
4630
|
+
return nil
|
|
4631
|
+
end
|
|
4593
4632
|
end
|
|
4594
4633
|
|
|
4595
4634
|
# Tell if we are in a behavior.
|
|
@@ -4765,13 +4804,10 @@ module HDLRuby::High
|
|
|
4765
4804
|
return Value.new(TypeSigned.new(:"",self.bit_length..0),self)
|
|
4766
4805
|
end
|
|
4767
4806
|
end
|
|
4768
|
-
|
|
4769
|
-
|
|
4770
|
-
|
|
4771
|
-
|
|
4772
|
-
# Converts to a new high-level expression.
|
|
4773
|
-
def to_expr
|
|
4774
|
-
return Value.new(Float,self)
|
|
4807
|
+
|
|
4808
|
+
# Gets the bit width
|
|
4809
|
+
def width
|
|
4810
|
+
return self.bit_length
|
|
4775
4811
|
end
|
|
4776
4812
|
end
|
|
4777
4813
|
|
|
@@ -5,10 +5,11 @@ require "HDLRuby/hruby_high"
|
|
|
5
5
|
module HDLRuby::High
|
|
6
6
|
|
|
7
7
|
##
|
|
8
|
-
# Library for
|
|
8
|
+
# Library for adding the fullname method to HDLRuby::High objects.
|
|
9
9
|
#
|
|
10
10
|
########################################################################
|
|
11
11
|
|
|
12
|
+
|
|
12
13
|
class SystemT
|
|
13
14
|
|
|
14
15
|
## Returns the name of the signal with its hierarchy.
|
|
@@ -32,6 +33,7 @@ module HDLRuby::High
|
|
|
32
33
|
|
|
33
34
|
end
|
|
34
35
|
|
|
36
|
+
|
|
35
37
|
class Scope
|
|
36
38
|
include WithFullname
|
|
37
39
|
end
|
data/lib/HDLRuby/hruby_low.rb
CHANGED
|
@@ -1919,7 +1919,7 @@ module HDLRuby::Low
|
|
|
1919
1919
|
end
|
|
1920
1920
|
|
|
1921
1921
|
##
|
|
1922
|
-
# Describes
|
|
1922
|
+
# Describes an unsigned integer data type.
|
|
1923
1923
|
class TypeUnsigned < TypeVector
|
|
1924
1924
|
|
|
1925
1925
|
# Creates a new vector type named +name+ from +base+ type and with
|
|
@@ -6117,7 +6117,7 @@ module HDLRuby::Low
|
|
|
6117
6117
|
|
|
6118
6118
|
|
|
6119
6119
|
##
|
|
6120
|
-
#
|
|
6120
|
+
# Describes a this reference.
|
|
6121
6121
|
#
|
|
6122
6122
|
# This is the current system.
|
|
6123
6123
|
class RefThis < Ref
|