HDLRuby 2.4.11 → 2.4.12

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: cbfb36d00f3809e50b2470308d24b09b413918ee4a78ab5f6cfc85c16af8ff50
4
- data.tar.gz: e2883c6628972cb353fcf7438f1af07ba2c6700c4fdbddcf26ba9b3a00a5cdec
3
+ metadata.gz: 83c18b423b30c97938839cb341f03a35cf41a11ddedf90a2ec9609fe0da1b087
4
+ data.tar.gz: 39bd0518a77431e8b15dec7631f37bb6f0ff8e95639d107c71569cfe73c6630b
5
5
  SHA512:
6
- metadata.gz: 2fa905701cad381e3d352524b1fd85f21ee3340e0eaa2b7d5579b93c6126d302bc35e407d10561a2e81a70b94137dda0a6398a49de1790fddeba1434a99ba467
7
- data.tar.gz: 5d04403133e3ed080eef1f4494bcfc7694bcdd66ccace555361383c9f15a83c71f1994826171c4eaf5c20d5f059b9148c2e5cdfce7ba3d4b08691e57abf09395
6
+ metadata.gz: '0639d240f7f297771065b7781f3a78cab4628540b9616b2b3b28f64a044698f7030413cecaadeb038f816311bbb247ad7f7be715f12cc1893c0fcc3095bfe5bd'
7
+ data.tar.gz: d71455388840152cfbd8dc8a07743ed0970f8b319316e929c42576eb50757a70577fbeab737b6f8ea87d7f0bd9c6fbb1a3836dacbaa9dc869394798f2e1189d6
@@ -0,0 +1,25 @@
1
+ #!/usr/bin/ruby
2
+ # Script for generating the vcd files.
3
+
4
+ # The configuration scenarii
5
+ $scenarii = [
6
+ [:sync, :register], # 00
7
+ [:sync, :handshake], # 01
8
+ [:sync, :queue], # 02
9
+ [:nsync, :register], # 03
10
+ [:nsync, :handshake], # 04
11
+ [:nsync, :queue], # 05
12
+ [:async, :register], # 06
13
+ [:async, :handshake], # 07
14
+ [:async, :queue], # 08
15
+ [:proco, :register], # 09
16
+ [:proco, :handshake], # 10
17
+ [:proco, :queue], # 11
18
+ [:double,:register], # 12
19
+ [:double,:handshake], # 13
20
+ [:double,:queue] # 14
21
+ ]
22
+ (0..11).each do |i|
23
+ `bundle exec ../hdrcc.rb -S --vcd with_multi_channels.rb WithMultiChannelPaper #{i}`
24
+ `mv WithMultiChannelPaper/hruby_simulator.vcd WithMultiChannelPaper/#{i.to_s.to_s.rjust(2,"0")}_#{$scenarii[i][0]}_#{$scenarii[i][1]}.vcd`
25
+ end
@@ -5,7 +5,7 @@ include HDLRuby::High::Std
5
5
  # A simple implementation of the MEI8 processor.
6
6
  #
7
7
  # In this implementation, the program is hard-coded in an internal ROM
8
- system :mei8 do |prog_file = "./prog_encrypt.obj"|
8
+ system :mei8 do |prog_file = "./prog.obj"|
9
9
  # Clock and reset.
10
10
  input :clk, :rst
11
11
  # Bus.
@@ -32,6 +32,18 @@ system :fix_test do
32
32
  !10.ns
33
33
  d <= d + c
34
34
  !10.ns
35
+ d <= d / c
36
+ !10.ns
37
+ d <= d / 3.to_fix(4)
38
+ !10.ns
39
+ d <= 1.to_fix(4) - d
40
+ !10.ns
41
+ d <= -d
42
+ !10.ns
43
+ d <= d * 3.to_fix(4)
44
+ !10.ns
45
+ d <= -d
46
+ !10.ns
35
47
  a <= -0.375.to_fix(4)
36
48
  b <= 1.625.to_fix(4)
37
49
  !10.ns
@@ -60,12 +60,16 @@ channel(:queue) do |typ,depth,clk,rst|
60
60
  top_block.unshift do
61
61
  rcmd <= 0
62
62
  hrack <= 0
63
- end
64
- seq do
65
63
  hif(rack) do
66
64
  blk.call if blk
67
65
  end
68
- helse do
66
+ end
67
+ seq do
68
+ # hif(rack) do
69
+ # blk.call if blk
70
+ # end
71
+ # helse do
72
+ hif(rack==0) do
69
73
  rcmd <= 1
70
74
  target <= rdata
71
75
  end
@@ -92,12 +96,16 @@ channel(:queue) do |typ,depth,clk,rst|
92
96
  top_block.unshift do
93
97
  wcmd <= 0
94
98
  hwack <= 0
95
- end
96
- seq do
97
99
  hif(wack) do
98
100
  blk.call if blk
99
101
  end
100
- helse { wcmd <= 1 }
102
+ end
103
+ seq do
104
+ # hif(wack) do
105
+ # blk.call if blk
106
+ # end
107
+ # helse
108
+ hif(wack==0) { wcmd <= 1 }
101
109
  wdata <= target
102
110
  end
103
111
  end
@@ -173,48 +181,116 @@ channel(:handshake) do |typ|
173
181
  end
174
182
  end
175
183
 
184
+ # Channel describing a handshake for transmitting data of +typ+ type, reset
185
+ # by +rst+
186
+ channel(:handshake2) do |typ|
187
+ # The data signal.
188
+ typ.inner :data
189
+ # The request and acknowledge.
190
+ inner :req, :ack
191
+ # The write flag
192
+ inner :wf
193
+
194
+ reader_input :ack, :data
195
+ reader_output :req
196
+
197
+ # The read primitive.
198
+ reader do |blk,target|
199
+ top_block.unshift do
200
+ req <= 0
201
+ hif(ack & req == 1) do
202
+ target <= data
203
+ req <= 0
204
+ blk.call if blk
205
+ end
206
+ end
207
+ hif(ack == 0) do
208
+ req <= 1
209
+ end
210
+ end
211
+
212
+ writer_input :req
213
+ writer_output :ack, :data
214
+ writer_inout :wf
215
+
216
+ # The read primitive.
217
+ writer do |blk,target|
218
+ top_block.unshift do
219
+ ack <= 0
220
+ hif(wf & req & ~ack == 1) do
221
+ data <= target
222
+ ack <= 1
223
+ blk.call if blk
224
+ end
225
+ hif(~req) { wf <= 0 }
226
+ end
227
+ hif(~ack) do
228
+ wf <= 1
229
+ end
230
+ end
231
+ end
232
+
176
233
 
177
234
  # $mode = :sync
178
235
  # $mode = :nsync
179
236
  # $mode = :async
180
- # $mode = :proco # Producter / Consummer
237
+ # $mode = :proco # Producer / Consummer
238
+ # $mode = :double # Producer and Consummer with double channels.
181
239
  # $channel = :register
182
240
  # $channel = :handshake
183
241
  # $channel = :queue
184
242
 
185
243
  # The configuration scenarii
186
- $scenarii = [ [:sync, :register], [:sync, :handshake], [:sync, :queue],
187
- [:nsync, :register], [:nsync, :handshake], [:nsync, :queue],
188
- [:async, :register], [:async, :handshake], [:async, :queue],
189
- [:proco, :register], [:proco, :handshake], [:proco, :queue] ]
244
+ $scenarii = [
245
+ [:sync, :register], # 0
246
+ [:sync, :handshake], # 1
247
+ [:sync, :queue], # 3
248
+ [:nsync, :register], # 4
249
+ [:nsync, :handshake], # 5
250
+ [:nsync, :queue], # 6
251
+ [:async, :register], # 7
252
+ [:async, :handshake], # 8
253
+ [:async, :queue], # 9
254
+ [:proco, :register], # 10
255
+ [:proco, :handshake], # 11
256
+ [:proco, :queue], # 12
257
+ [:double,:register], # 13
258
+ [:double,:handshake], # 14
259
+ [:double,:queue] # 15
260
+ ]
190
261
 
191
262
  # The configuration
192
- $mode, $channel = $scenarii[11]
263
+ # $mode, $channel = $scenarii[11]
264
+ $mode, $channel = $scenarii[ARGV[-1].to_i]
265
+ puts "scenario: #{$scenarii[ARGV[-1].to_i]}"
193
266
 
194
267
  # Testing the queue channel.
195
268
  system :test_queue do
196
269
  inner :clk, :rst, :clk2, :clk3
197
- [8].inner :idata, :odata
270
+ [8].inner :idata, :odata, :odata2
198
271
  [4].inner :counter
199
272
 
200
273
  if $channel == :register then
201
274
  register(bit[8]).(:my_ch)
275
+ register(bit[8]).(:my_ch2)
202
276
  elsif $channel == :handshake then
203
277
  handshake(bit[8],rst).(:my_ch)
278
+ handshake(bit[8],rst).(:my_ch2)
204
279
  elsif $channel == :queue then
205
280
  queue(bit[8],5,clk,rst).(:my_ch)
281
+ queue(bit[8],5,clk,rst).(:my_ch2)
206
282
  end
207
283
 
208
284
  ev = $mode == :sync ? clk.posedge :
209
285
  $mode == :nsync ? clk.negedge : clk2.posedge
210
286
 
211
- if $mode != :proco then
287
+ if $mode != :proco && $mode != :double then
212
288
  # Sync/Neg sync and async tests mode
213
289
  par(ev) do
214
290
  hif(rst) do
215
291
  counter <= 0
216
292
  idata <= 0
217
- odata <= 0
293
+ # odata <= 0
218
294
  end
219
295
  helse do
220
296
  hif (counter < 4) do
@@ -225,7 +301,7 @@ system :test_queue do
225
301
  end
226
302
  helsif ((counter > 10) & (counter < 15)) do
227
303
  my_ch.read(odata) do
228
- idata <= idata - odata
304
+ # idata <= idata - odata
229
305
  counter <= counter + 1
230
306
  end
231
307
  end
@@ -234,7 +310,7 @@ system :test_queue do
234
310
  end
235
311
  end
236
312
  end
237
- else
313
+ elsif $mode == :proco then
238
314
  # Producter/consumer mode
239
315
  # Producer
240
316
  par(clk2.posedge) do
@@ -258,6 +334,25 @@ system :test_queue do
258
334
  end
259
335
  end
260
336
  end
337
+ else
338
+ # Producer and consumer are commicating through two layers of channels
339
+ par(ev) do
340
+ hif(rst) do
341
+ counter <= 0
342
+ idata <= 0
343
+ end
344
+ helse do
345
+ my_ch.write(idata) do
346
+ idata <= idata + 1
347
+ end
348
+ my_ch.read(odata) do
349
+ my_ch2.write(odata)
350
+ end
351
+ my_ch2.read(odata2) do
352
+ counter <= counter + 1
353
+ end
354
+ end
355
+ end
261
356
  end
262
357
 
263
358
  timed do
@@ -958,7 +958,7 @@ HDLRuby::High::Std.channel(:mem_file) do |typ,size,clk,rst,br_rsts = {}|
958
958
  # Declares the address counter.
959
959
  awidth = (size-1).width
960
960
  awidth = 1 if awidth == 0
961
- [size.width-1].inner :abus_r
961
+ [awidth].inner :abus_r
962
962
  reader_inout :abus_r
963
963
 
964
964
  # Defines the read procedure at address +addr+
@@ -1002,7 +1002,9 @@ HDLRuby::High::Std.channel(:mem_file) do |typ,size,clk,rst,br_rsts = {}|
1002
1002
  writer_input rst_name
1003
1003
  end
1004
1004
  # Declares the address counter.
1005
- [size.width-1].inner :abus_w
1005
+ awidth = (size-1).width
1006
+ awidth = 1 if awidth == 0
1007
+ [awidth].inner :abus_w
1006
1008
  writer_inout :abus_w
1007
1009
 
1008
1010
  # Defines the write procedure at address +addr+
@@ -1050,7 +1052,7 @@ HDLRuby::High::Std.channel(:mem_file) do |typ,size,clk,rst,br_rsts = {}|
1050
1052
  # Declares the address counter.
1051
1053
  awidth = (size-1).width
1052
1054
  awidth = 1 if awidth == 0
1053
- [size.width-1].inner :abus_r
1055
+ [awidth].inner :abus_r
1054
1056
  reader_inout :abus_r
1055
1057
 
1056
1058
  # Defines the read procedure at address +addr+
@@ -1094,7 +1096,9 @@ HDLRuby::High::Std.channel(:mem_file) do |typ,size,clk,rst,br_rsts = {}|
1094
1096
  reader_input rst_name
1095
1097
  end
1096
1098
  # Declares the address counter.
1097
- [size.width-1].inner :abus_w
1099
+ awidth = (size-1).width
1100
+ awidth = 1 if awidth == 0
1101
+ [awidth].inner :abus_w
1098
1102
  reader_inout :abus_w
1099
1103
 
1100
1104
  # Defines the write procedure at address +addr+
@@ -1,3 +1,3 @@
1
1
  module HDLRuby
2
- VERSION = "2.4.11"
2
+ VERSION = "2.4.12"
3
3
  end
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.11
4
+ version: 2.4.12
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-10-19 00:00:00.000000000 Z
11
+ date: 2020-10-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -84,6 +84,7 @@ files:
84
84
  - lib/HDLRuby/hdr_samples/include.rb
85
85
  - lib/HDLRuby/hdr_samples/instance_open.rb
86
86
  - lib/HDLRuby/hdr_samples/linear_test.rb
87
+ - lib/HDLRuby/hdr_samples/make_multi_channels_vcd.rb
87
88
  - lib/HDLRuby/hdr_samples/mei8.rb
88
89
  - lib/HDLRuby/hdr_samples/mei8_bench.rb
89
90
  - lib/HDLRuby/hdr_samples/memory_test.rb