HDLRuby 2.8.1 → 2.10.3
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.md +251 -231
- data/lib/HDLRuby/hdr_samples/with_delay.rb +72 -0
- data/lib/HDLRuby/hdr_samples/with_handshake.rb +110 -0
- data/lib/HDLRuby/hdr_samples/with_of.rb +51 -0
- data/lib/HDLRuby/hdr_samples/with_reconf.rb +0 -5
- data/lib/HDLRuby/hdrcc.rb +43 -4
- data/lib/HDLRuby/hdrlib.rb +592 -0
- data/lib/HDLRuby/hruby_high.rb +130 -42
- data/lib/HDLRuby/hruby_low.rb +5 -3
- data/lib/HDLRuby/hruby_low2c.rb +1 -1
- data/lib/HDLRuby/hruby_low_without_connection.rb +1 -0
- data/lib/HDLRuby/sim/hruby_sim_calc.c +3 -2
- data/lib/HDLRuby/std/delays.rb +92 -0
- data/lib/HDLRuby/std/handshakes.rb +60 -0
- data/lib/HDLRuby/version.rb +1 -1
- metadata +8 -2
data/lib/HDLRuby/hruby_high.rb
CHANGED
@@ -344,6 +344,7 @@ module HDLRuby::High
|
|
344
344
|
def initialize(name, *mixins, &ruby_block)
|
345
345
|
# Initialize the system type structure.
|
346
346
|
super(name,Scope.new(name,self))
|
347
|
+
# puts "new systemT=#{self}"
|
347
348
|
|
348
349
|
# Initialize the set of extensions to transmit to the instances'
|
349
350
|
# eigen class
|
@@ -373,6 +374,28 @@ module HDLRuby::High
|
|
373
374
|
make_instantiater(name,SystemI,&ruby_block)
|
374
375
|
end
|
375
376
|
|
377
|
+
|
378
|
+
# Tell if the current system is a descedent of +system+
|
379
|
+
def of?(system)
|
380
|
+
# Maybe self is system.
|
381
|
+
if (self == system) then
|
382
|
+
# Yes, consider it is adescendent of system.
|
383
|
+
return true
|
384
|
+
else
|
385
|
+
# Look into the generators.
|
386
|
+
@generators.each do |generator|
|
387
|
+
return true if generator.of?(system)
|
388
|
+
end
|
389
|
+
# Look into the included systems.
|
390
|
+
@to_includes.each do |included|
|
391
|
+
return true if included.of?(system)
|
392
|
+
end
|
393
|
+
end
|
394
|
+
# Not found.
|
395
|
+
return false
|
396
|
+
end
|
397
|
+
|
398
|
+
|
376
399
|
# Converts to a namespace user.
|
377
400
|
def to_user
|
378
401
|
# Returns the scope.
|
@@ -418,9 +441,9 @@ module HDLRuby::High
|
|
418
441
|
res = self.add_output(SignalI.new(name,type,:output))
|
419
442
|
elsif name.is_a?(Hash) then
|
420
443
|
# Names associated with values.
|
421
|
-
|
422
|
-
res = self.
|
423
|
-
SignalI.new(
|
444
|
+
name.each do |key,value|
|
445
|
+
res = self.add_output(
|
446
|
+
SignalI.new(key,type,:output,value))
|
424
447
|
end
|
425
448
|
else
|
426
449
|
raise AnyError, "Invalid class for a name: #{name.class}"
|
@@ -451,6 +474,21 @@ module HDLRuby::High
|
|
451
474
|
end
|
452
475
|
|
453
476
|
|
477
|
+
# Gets an input signal by +name+ considering also the included
|
478
|
+
# systems
|
479
|
+
def get_input_with_included(name)
|
480
|
+
# Look in self.
|
481
|
+
found = self.get_input(name)
|
482
|
+
return found if found
|
483
|
+
# Not in self, look in the included systems.
|
484
|
+
self.scope.each_included do |included|
|
485
|
+
found = included.get_input_with_included(name)
|
486
|
+
return found if found
|
487
|
+
end
|
488
|
+
# Not found
|
489
|
+
return nil
|
490
|
+
end
|
491
|
+
|
454
492
|
# Gets an output signal by +name+ considering also the included
|
455
493
|
# systems
|
456
494
|
def get_output_with_included(name)
|
@@ -466,6 +504,36 @@ module HDLRuby::High
|
|
466
504
|
return nil
|
467
505
|
end
|
468
506
|
|
507
|
+
# Gets an inout signal by +name+ considering also the included
|
508
|
+
# systems
|
509
|
+
def get_inout_with_included(name)
|
510
|
+
# Look in self.
|
511
|
+
found = self.get_inout(name)
|
512
|
+
return found if found
|
513
|
+
# Not in self, look in the included systems.
|
514
|
+
self.scope.each_included do |included|
|
515
|
+
found = included.get_inout_with_included(name)
|
516
|
+
return found if found
|
517
|
+
end
|
518
|
+
# Not found
|
519
|
+
return nil
|
520
|
+
end
|
521
|
+
|
522
|
+
# Iterates over the all signals (input, output, inout, inner, constant),
|
523
|
+
# i.e, also the ones of the included systems.
|
524
|
+
#
|
525
|
+
# Returns an enumerator if no ruby block is given.
|
526
|
+
def each_signal_all_with_included(&ruby_block)
|
527
|
+
# No ruby block? Return an enumerator.
|
528
|
+
return to_enum(:each_signal_all_with_included) unless ruby_block
|
529
|
+
# Iterate on all the signals of the current system.
|
530
|
+
self.each_signal_all(&ruby_block)
|
531
|
+
# Recurse on the included systems.
|
532
|
+
self.scope.each_included do |included|
|
533
|
+
included.each_signal_all_with_included(&ruby_block)
|
534
|
+
end
|
535
|
+
end
|
536
|
+
|
469
537
|
# Iterates over the all interface signals, i.e, also the ones of
|
470
538
|
# the included systems.
|
471
539
|
#
|
@@ -473,7 +541,7 @@ module HDLRuby::High
|
|
473
541
|
def each_signal_with_included(&ruby_block)
|
474
542
|
# No ruby block? Return an enumerator.
|
475
543
|
return to_enum(:each_signal_with_included) unless ruby_block
|
476
|
-
# Iterate on the signals of the current system.
|
544
|
+
# Iterate on all the signals of the current system.
|
477
545
|
self.each_signal(&ruby_block)
|
478
546
|
# Recurse on the included systems.
|
479
547
|
self.scope.each_included do |included|
|
@@ -487,6 +555,14 @@ module HDLRuby::High
|
|
487
555
|
return each_signal_with_included.to_a[i]
|
488
556
|
end
|
489
557
|
|
558
|
+
# Gets a signal by +name+ considering also the included
|
559
|
+
# systems
|
560
|
+
def get_signal_with_included(name)
|
561
|
+
return get_input_with_included(name) ||
|
562
|
+
get_output_with_included(name) ||
|
563
|
+
get_inout_with_included(name)
|
564
|
+
end
|
565
|
+
|
490
566
|
# Iterates over the exported constructs
|
491
567
|
#
|
492
568
|
# NOTE: look into the scope.
|
@@ -571,6 +647,7 @@ module HDLRuby::High
|
|
571
647
|
|
572
648
|
# Sets the generators of the expanded result.
|
573
649
|
expanded.add_generator(self)
|
650
|
+
# puts "expanded=#{expanded}"
|
574
651
|
@to_includes.each { |system| expanded.add_generator(system) }
|
575
652
|
# Also for the previously includeds. */
|
576
653
|
self.scope.each_included.each { |system| expanded.add_generator(system) }
|
@@ -634,9 +711,8 @@ module HDLRuby::High
|
|
634
711
|
|
635
712
|
# Create the instance and sets its eigen system to +eigen+.
|
636
713
|
instance = @instance_class.new(i_name,eigen)
|
714
|
+
# puts "instance=#{instance}"
|
637
715
|
eigen.eigenize(instance)
|
638
|
-
# puts "instance interface=#{instance.each_signal.to_a.size}"
|
639
|
-
# puts "eigen interface=#{eigen.each_signal.to_a.size}"
|
640
716
|
|
641
717
|
# Extend the instance.
|
642
718
|
instance.eigen_extend(@singleton_instanceO)
|
@@ -846,7 +922,8 @@ module HDLRuby::High
|
|
846
922
|
# Initialize the set of exported inner signals and instances
|
847
923
|
@exports = {}
|
848
924
|
# Initialize the set of included systems.
|
849
|
-
@includes = {}
|
925
|
+
# @includes = {}
|
926
|
+
@includes = []
|
850
927
|
|
851
928
|
# Builds the scope if a ruby block is provided.
|
852
929
|
self.build(&ruby_block) if block_given?
|
@@ -933,7 +1010,8 @@ module HDLRuby::High
|
|
933
1010
|
# No ruby block? Return an enumerator.
|
934
1011
|
return to_enum(:each_included) unless ruby_block
|
935
1012
|
# A block? Apply it on each included system.
|
936
|
-
@includes.each_value(&ruby_block)
|
1013
|
+
# @includes.each_value(&ruby_block)
|
1014
|
+
@includes.each(&ruby_block)
|
937
1015
|
# And apply on the sub scopes if any.
|
938
1016
|
@scopes.each {|scope| scope.each_included(&ruby_block) }
|
939
1017
|
end
|
@@ -1226,13 +1304,16 @@ module HDLRuby::High
|
|
1226
1304
|
# Include a +system+ type with possible +args+ instanciation
|
1227
1305
|
# arguments.
|
1228
1306
|
def include(system,*args)
|
1229
|
-
if @includes.key?(system.name) then
|
1230
|
-
|
1307
|
+
# if @includes.key?(system.name) then
|
1308
|
+
# raise AnyError, "Cannot include twice the same system: #{system}"
|
1309
|
+
# end
|
1310
|
+
if @includes.include?(system) then
|
1311
|
+
raise AnyError, "Cannot include twice the same system: #{system}"
|
1231
1312
|
end
|
1232
|
-
# puts "Include system=#{system.name}"
|
1233
|
-
# Save the name of the included system, it will serve as key
|
1234
|
-
# for looking for the included expanded version.
|
1235
|
-
include_name = system.name
|
1313
|
+
# # puts "Include system=#{system.name}"
|
1314
|
+
# # Save the name of the included system, it will serve as key
|
1315
|
+
# # for looking for the included expanded version.
|
1316
|
+
# include_name = system.name
|
1236
1317
|
# Expand the system to include
|
1237
1318
|
system = system.expand(:"",*args)
|
1238
1319
|
# Add the included system interface to the current one.
|
@@ -1240,7 +1321,8 @@ module HDLRuby::High
|
|
1240
1321
|
space = self.namespace
|
1241
1322
|
# Interface signals
|
1242
1323
|
# puts "i_name=#{i_name} @to_includes=#{@to_includes.size}"
|
1243
|
-
system.each_signal_with_included do |signal|
|
1324
|
+
# system.each_signal_with_included do |signal|
|
1325
|
+
system.each_signal_all_with_included do |signal|
|
1244
1326
|
# puts "signal=#{signal.name}"
|
1245
1327
|
space.send(:define_singleton_method,signal.name) do
|
1246
1328
|
signal
|
@@ -1259,18 +1341,20 @@ module HDLRuby::High
|
|
1259
1341
|
end
|
1260
1342
|
end
|
1261
1343
|
# Adds it the list of includeds
|
1262
|
-
@includes[include_name] = system
|
1344
|
+
# @includes[include_name] = system
|
1345
|
+
@includes << system
|
1346
|
+
|
1263
1347
|
# puts "@includes=#{@includes}"
|
1264
1348
|
|
1265
1349
|
end
|
1266
1350
|
|
1267
|
-
#
|
1268
|
-
|
1269
|
-
|
1270
|
-
|
1271
|
-
|
1272
|
-
|
1273
|
-
end
|
1351
|
+
# Obsolete
|
1352
|
+
# # Casts as an included +system+.
|
1353
|
+
# def as(system)
|
1354
|
+
# # puts "as with name: #{system.name}"
|
1355
|
+
# system = system.name if system.respond_to?(:name)
|
1356
|
+
# return @includes[system].namespace
|
1357
|
+
# end
|
1274
1358
|
|
1275
1359
|
|
1276
1360
|
# Gets the current system.
|
@@ -1285,7 +1369,8 @@ module HDLRuby::High
|
|
1285
1369
|
# NOTE: name conflicts are treated in the current NameStack state.
|
1286
1370
|
def fill_low(scopeL)
|
1287
1371
|
# Adds the content of its included systems.
|
1288
|
-
@includes.each_value {|system| system.scope.fill_low(scopeL) }
|
1372
|
+
# @includes.each_value {|system| system.scope.fill_low(scopeL) }
|
1373
|
+
@includes.each {|system| system.scope.fill_low(scopeL) }
|
1289
1374
|
# Adds the declared local system types.
|
1290
1375
|
# NOTE: in the current version of HDLRuby::High, there should not
|
1291
1376
|
# be any of them (only eigen systems are real system types).
|
@@ -2051,26 +2136,28 @@ module HDLRuby::High
|
|
2051
2136
|
# Performs the connections.
|
2052
2137
|
connects.each do |key,value|
|
2053
2138
|
# Gets the signal corresponding to connect.
|
2054
|
-
signal = self.get_signal(key)
|
2055
|
-
unless signal then
|
2056
|
-
|
2057
|
-
|
2058
|
-
|
2059
|
-
|
2060
|
-
|
2061
|
-
end
|
2139
|
+
# signal = self.get_signal(key)
|
2140
|
+
# unless signal then
|
2141
|
+
# # Look into the included systems.
|
2142
|
+
# self.systemT.scope.each_included do |included|
|
2143
|
+
# signal = included.get_signal(key)
|
2144
|
+
# break if signal
|
2145
|
+
# end
|
2146
|
+
# end
|
2147
|
+
signal = self.systemT.get_signal_with_included(key)
|
2062
2148
|
# Check if it is an output.
|
2063
|
-
isout = self.get_output(key)
|
2064
|
-
unless isout then
|
2065
|
-
|
2066
|
-
|
2067
|
-
|
2068
|
-
|
2069
|
-
|
2070
|
-
end
|
2149
|
+
# isout = self.get_output(key)
|
2150
|
+
# unless isout then
|
2151
|
+
# # Look into the inlucded systems.
|
2152
|
+
# self.systemT.scope.each_included do |included|
|
2153
|
+
# isout = included.get_output(key)
|
2154
|
+
# break if isout
|
2155
|
+
# end
|
2156
|
+
# end
|
2157
|
+
isout = self.systemT.get_output_with_included(key)
|
2071
2158
|
# Convert it to a reference.
|
2159
|
+
# puts "key=#{key} value=#{value} signal=#{signal}"
|
2072
2160
|
ref = RefObject.new(self.to_ref,signal)
|
2073
|
-
# puts "key=#{key} value=#{value} signal=#{signal} ref=#{ref}"
|
2074
2161
|
# Make the connection.
|
2075
2162
|
if isout then
|
2076
2163
|
value <= ref
|
@@ -3135,7 +3222,8 @@ module HDLRuby::High
|
|
3135
3222
|
|
3136
3223
|
# Converts the name reference to a HDLRuby::Low::RefName.
|
3137
3224
|
def to_low
|
3138
|
-
# puts "to_low with base=#{@base} @object=#{@object
|
3225
|
+
# puts "to_low with base=#{@base} @object=#{@object}"
|
3226
|
+
# puts "@object.name=#{@object.name}"
|
3139
3227
|
refNameL = HDLRuby::Low::RefName.new(self.type.to_low,
|
3140
3228
|
@base.to_ref.to_low,@object.name)
|
3141
3229
|
# # For debugging: set the source high object
|
data/lib/HDLRuby/hruby_low.rb
CHANGED
@@ -164,7 +164,6 @@ module HDLRuby::Low
|
|
164
164
|
end
|
165
165
|
|
166
166
|
|
167
|
-
|
168
167
|
# Handling the (re)configuration.
|
169
168
|
|
170
169
|
# Gets the configuration wrapper if any.
|
@@ -185,7 +184,7 @@ module HDLRuby::Low
|
|
185
184
|
|
186
185
|
# Adds input +signal+.
|
187
186
|
def add_input(signal)
|
188
|
-
# print "add_input with signal: #{signal.name}\n"
|
187
|
+
# print "In #{self} add_input with signal: #{signal.name}\n"
|
189
188
|
# Check and add the signal.
|
190
189
|
unless signal.is_a?(SignalI)
|
191
190
|
raise AnyError,
|
@@ -290,6 +289,8 @@ module HDLRuby::Low
|
|
290
289
|
@inputs.each(&ruby_block)
|
291
290
|
@outputs.each(&ruby_block)
|
292
291
|
@inouts.each(&ruby_block)
|
292
|
+
# And each signal of the direct scope.
|
293
|
+
@scope.each_signal(&ruby_block)
|
293
294
|
end
|
294
295
|
|
295
296
|
# Iterates over all the signals of the system type and its scope.
|
@@ -298,7 +299,8 @@ module HDLRuby::Low
|
|
298
299
|
return to_enum(:each_signal_deep) unless ruby_block
|
299
300
|
# A ruby block?
|
300
301
|
# First iterate over the current system type's signals.
|
301
|
-
self.each_signal_all(&ruby_block)
|
302
|
+
# self.each_signal_all(&ruby_block)
|
303
|
+
self.each_signal(&ruby_block)
|
302
304
|
# Then apply on the behaviors (since in HDLRuby:High, blocks can
|
303
305
|
# include signals).
|
304
306
|
@scope.each_signal_deep(&ruby_block)
|
data/lib/HDLRuby/hruby_low2c.rb
CHANGED
@@ -2082,11 +2082,11 @@ module HDLRuby::Low
|
|
2082
2082
|
if str =~ /^[01]+$/ && str.length <= 64 then
|
2083
2083
|
# Yes, generate a numeral value.
|
2084
2084
|
res << " " * (level+1)*3
|
2085
|
-
# res << "static unsigned long long data[] = { "
|
2086
2085
|
res << "static unsigned int data[] = { "
|
2087
2086
|
res << str.scan(/.{1,#{Low2C.int_width}}/m).reverse.map do |sub|
|
2088
2087
|
sub.to_i(2).to_s # + "ULL"
|
2089
2088
|
end.join(",")
|
2089
|
+
res << ", 0" if (str.length <= 32)
|
2090
2090
|
res << " };\n"
|
2091
2091
|
# Create the value.
|
2092
2092
|
res << " " * (level+1)*3
|
@@ -1871,10 +1871,11 @@ static Value equal_value_numeric(Value src0, Value src1, Value dst) {
|
|
1871
1871
|
dst->type = src0->type;
|
1872
1872
|
dst->numeric = 1;
|
1873
1873
|
|
1874
|
-
// /* Perform the !XOR. */
|
1875
|
-
// dst->data_int = ~(src0->data_int ^ src1->data_int);
|
1876
1874
|
/* Perform the comparison. */
|
1877
1875
|
dst->data_int = (src0->data_int == src1->data_int) ? 1 : 0;
|
1876
|
+
printf("scr0->data_int=%lld\n",src0->data_int);
|
1877
|
+
printf("scr1->data_int=%lld\n",src1->data_int);
|
1878
|
+
printf("dst->data_int=%lld\n",dst->data_int);
|
1878
1879
|
return dst;
|
1879
1880
|
}
|
1880
1881
|
|
@@ -0,0 +1,92 @@
|
|
1
|
+
module HDLRuby::High::Std
|
2
|
+
|
3
|
+
##
|
4
|
+
# Standard HDLRuby::High library: delays
|
5
|
+
#
|
6
|
+
########################################################################
|
7
|
+
|
8
|
+
|
9
|
+
## Module describing a simple delay using handshake for working.
|
10
|
+
# @param num the number of clock cycles to delay.
|
11
|
+
system :delay do |num|
|
12
|
+
# Checks and process the number of clock to wait.
|
13
|
+
num = num.to_i
|
14
|
+
raise "The delay generic argument must be positive: #{num}" if (num < 0)
|
15
|
+
|
16
|
+
input :clk # The clock to make the delay on.
|
17
|
+
input :req # The handshake request.
|
18
|
+
output :ack # The handshake acknoledgment.
|
19
|
+
|
20
|
+
# The process of the delay.
|
21
|
+
if (num == 0) then
|
22
|
+
# No delay case.
|
23
|
+
ack <= req
|
24
|
+
else
|
25
|
+
# The is a delay.
|
26
|
+
inner run: 0 # Tell if the deayl is running.
|
27
|
+
[num.width+1].inner :count # The counter for computing the delay.
|
28
|
+
par(clk.posedge) do
|
29
|
+
# Is there a request to treat?
|
30
|
+
hif(req & ~run) do
|
31
|
+
# Yes, intialize the delay.
|
32
|
+
run <= 1
|
33
|
+
count <= 0
|
34
|
+
ack <= 0
|
35
|
+
end
|
36
|
+
# No, maybe there is a request in processing.
|
37
|
+
helsif(run) do
|
38
|
+
# Yes, increase the counter.
|
39
|
+
count <= count + 1
|
40
|
+
# Check if the delay is reached.
|
41
|
+
hif(count == num-1) do
|
42
|
+
# Yes, tells it and stop the count.
|
43
|
+
ack <= 1
|
44
|
+
run <= 0
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
|
52
|
+
|
53
|
+
## Module describing a pipeline delay (supporting multiple successive delays)
|
54
|
+
# using handshake for working.
|
55
|
+
# @param num the number of clock cycles to delay.
|
56
|
+
system :delayp do |num|
|
57
|
+
# Checks and process the number of clock to wait.
|
58
|
+
num = num.to_i
|
59
|
+
raise "The delay generic argument must be positive: #{num}" if (num < 0)
|
60
|
+
|
61
|
+
input :clk # The clock to make the delay on.
|
62
|
+
input :req # The handshake request.
|
63
|
+
output :ack # The handshake acknoledgment.
|
64
|
+
|
65
|
+
if (num==0) then
|
66
|
+
# No delay.
|
67
|
+
ack <= req
|
68
|
+
else
|
69
|
+
# There is a delay.
|
70
|
+
|
71
|
+
[num].inner state: 0 # The shift register containing the progression
|
72
|
+
# of each requested delay.
|
73
|
+
|
74
|
+
# The acknoledgment is directly the last bit of the state register.
|
75
|
+
ack <= state[-1]
|
76
|
+
|
77
|
+
|
78
|
+
# The process controlling the delay.
|
79
|
+
seq(clk.posedge) do
|
80
|
+
# Update the state.
|
81
|
+
if (num > 1) then
|
82
|
+
state <= state << 1
|
83
|
+
else
|
84
|
+
state <= 0
|
85
|
+
end
|
86
|
+
# Handle the input.
|
87
|
+
( state[0] <= 1 ).hif(req)
|
88
|
+
end
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
end
|
@@ -0,0 +1,60 @@
|
|
1
|
+
module HDLRuby::High::Std
|
2
|
+
|
3
|
+
##
|
4
|
+
# Standard HDLRuby::High library: handshake protocols.
|
5
|
+
#
|
6
|
+
########################################################################
|
7
|
+
|
8
|
+
|
9
|
+
## Module describing a simple client handshake for working.
|
10
|
+
# @param event the event to synchronize the handshake.
|
11
|
+
# @param req the signal telling a request is there.
|
12
|
+
# @param cond the condition allowing the protocol.
|
13
|
+
system :hs_client do |event, req, cond=_1|
|
14
|
+
input :reqI
|
15
|
+
output ackI: 0
|
16
|
+
|
17
|
+
# A each synchronization event.
|
18
|
+
par(event) do
|
19
|
+
# Is the protocol is allowed and a request is present.
|
20
|
+
hif(cond & reqI) do
|
21
|
+
# Yes perform the action and tell the request has been treated.
|
22
|
+
req <= 1 if req
|
23
|
+
ackI <= 1
|
24
|
+
end
|
25
|
+
helse do
|
26
|
+
# No, do not perform the action, and do not acknowledge.
|
27
|
+
req <= 0 if req
|
28
|
+
ackI <= 0
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
|
34
|
+
## Module describing a simple server handshake for working.
|
35
|
+
# @param event the event to synchronize the handshake.
|
36
|
+
# @param req the signal for asking a new request.
|
37
|
+
system :hs_server do |event, req|
|
38
|
+
output reqO: 0
|
39
|
+
input :ackO
|
40
|
+
|
41
|
+
# A each synchronization event.
|
42
|
+
par(event) do
|
43
|
+
# Shall we start the output?
|
44
|
+
hif(ackO) { reqO <= 0 }
|
45
|
+
hif(req) { reqO <= 1 }
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
|
50
|
+
## Module describing a pipeline with handshakes.
|
51
|
+
# @param event the event to synchronize the handshakes.
|
52
|
+
# @param read the signal telling there is a request from the client side
|
53
|
+
# @param write the signal used for asking the server to issue a request
|
54
|
+
system :hs_pipe do |event,read,write|
|
55
|
+
inner :cond
|
56
|
+
include(hs_client(event,read,cond))
|
57
|
+
include(hs_server(event,write))
|
58
|
+
cond <= ~reqO
|
59
|
+
end
|
60
|
+
end
|
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.
|
4
|
+
version: 2.10.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: 2022-
|
11
|
+
date: 2022-06-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -152,9 +152,11 @@ files:
|
|
152
152
|
- lib/HDLRuby/hdr_samples/with_connector_memory.rb
|
153
153
|
- lib/HDLRuby/hdr_samples/with_decoder.rb
|
154
154
|
- lib/HDLRuby/hdr_samples/with_def.rb
|
155
|
+
- lib/HDLRuby/hdr_samples/with_delay.rb
|
155
156
|
- lib/HDLRuby/hdr_samples/with_fixpoint.rb
|
156
157
|
- lib/HDLRuby/hdr_samples/with_fsm.rb
|
157
158
|
- lib/HDLRuby/hdr_samples/with_function_generator.rb
|
159
|
+
- lib/HDLRuby/hdr_samples/with_handshake.rb
|
158
160
|
- lib/HDLRuby/hdr_samples/with_init.rb
|
159
161
|
- lib/HDLRuby/hdr_samples/with_instance.rb
|
160
162
|
- lib/HDLRuby/hdr_samples/with_linear.rb
|
@@ -162,6 +164,7 @@ files:
|
|
162
164
|
- lib/HDLRuby/hdr_samples/with_memory.rb
|
163
165
|
- lib/HDLRuby/hdr_samples/with_memory_rom.rb
|
164
166
|
- lib/HDLRuby/hdr_samples/with_multi_channels.rb
|
167
|
+
- lib/HDLRuby/hdr_samples/with_of.rb
|
165
168
|
- lib/HDLRuby/hdr_samples/with_reconf.rb
|
166
169
|
- lib/HDLRuby/hdr_samples/with_reduce.rb
|
167
170
|
- lib/HDLRuby/hdr_samples/with_ref_array.rb
|
@@ -172,6 +175,7 @@ files:
|
|
172
175
|
- lib/HDLRuby/hdr_samples/with_to_array.rb
|
173
176
|
- lib/HDLRuby/hdr_samples/with_values.rb
|
174
177
|
- lib/HDLRuby/hdrcc.rb
|
178
|
+
- lib/HDLRuby/hdrlib.rb
|
175
179
|
- lib/HDLRuby/high_samples/_adder_fault.rb
|
176
180
|
- lib/HDLRuby/high_samples/_generic_transmission2.rb
|
177
181
|
- lib/HDLRuby/high_samples/adder.rb
|
@@ -323,9 +327,11 @@ files:
|
|
323
327
|
- lib/HDLRuby/std/connector.rb
|
324
328
|
- lib/HDLRuby/std/counters.rb
|
325
329
|
- lib/HDLRuby/std/decoder.rb
|
330
|
+
- lib/HDLRuby/std/delays.rb
|
326
331
|
- lib/HDLRuby/std/fixpoint.rb
|
327
332
|
- lib/HDLRuby/std/fsm.rb
|
328
333
|
- lib/HDLRuby/std/function_generator.rb
|
334
|
+
- lib/HDLRuby/std/handshakes.rb
|
329
335
|
- lib/HDLRuby/std/hruby_unit.rb
|
330
336
|
- lib/HDLRuby/std/linear.rb
|
331
337
|
- lib/HDLRuby/std/loop.rb
|