HDLRuby 2.8.1 → 2.10.3
Sign up to get free protection for your applications and to get access to all the features.
- 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
|