HDLRuby 2.4.9 → 2.4.10

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: cd62e24fab42fee5c7a9e3cefda920cab67ec3a739e7ec0e66e6e637e890b959
4
- data.tar.gz: d294cb0479e6388dea6e318c458f26ddabf71fd9281fa25f6ee69d6039bd1526
3
+ metadata.gz: d90d9d7ef8c4535bbce1db315a06ec6e85c8efe37ddb07828605f72049f5daf2
4
+ data.tar.gz: d3f6d2fb5cccb840c8385ab8af724f6dcfef2efed5d9d263ef50be104f2aba3a
5
5
  SHA512:
6
- metadata.gz: d2039cd7158a2e2296005639474f9076f4f72f667777c97a94d7581975e92242e2be31fe3b7fb1cadf722b4f9fa6d8f8287252ec9944077512ffcd7d036ad28f
7
- data.tar.gz: 8107f68c9c15f2f5e33a6f1a94c3454d46b9d4493ed00868c660d084b0e94e64747da3b984f7812254c31f3595988833de1df6e71253648ed1f85042cd45b534
6
+ metadata.gz: 548de87c875473eaf522c8db89d7842cd79f2638be583e85a0b9e143bb21ac89a40e447fb2d8d09f55d67543954d59e7880eceb4e515b96de6f959d3cf48edd6
7
+ data.tar.gz: d8fe03171ac0bada3bc7b30625cd8c874d1d98b72757ad180fc4ec52f9803f243058f423fa9047924d33d2e4350f7f3e9acee0dda3d654175e026ed94edee32e
@@ -0,0 +1,53 @@
1
+ require 'std/memory.rb'
2
+
3
+ include HDLRuby::High::Std
4
+
5
+
6
+
7
+
8
+
9
+ # A system testing the rom channel.
10
+ system :rorm_test do
11
+ inner :clk,:rst
12
+ [8].inner :value
13
+ inner :addr
14
+
15
+ # Declares a 8-bit-data and 1 element rom address synchronous memory
16
+ # on negative edge of clk.
17
+ # mem_rom([8],2,clk,rst,[_00000110,_00000111], rinc: :rst).(:romI)
18
+ mem_rom([8],1,clk,rst,[_00000110], rinc: :rst).(:romI)
19
+ rd = romI.branch(:rinc)
20
+
21
+ par(clk.posedge) do
22
+ hif(rst) { addr <= 0 }
23
+ helse do
24
+ rd.read(value)
25
+ end
26
+ end
27
+
28
+ timed do
29
+ clk <= 0
30
+ rst <= 0
31
+ !10.ns
32
+ clk <= 1
33
+ !10.ns
34
+ clk <= 0
35
+ rst <= 1
36
+ !10.ns
37
+ clk <= 1
38
+ !10.ns
39
+ clk <= 0
40
+ !10.ns
41
+ clk <= 1
42
+ !10.ns
43
+ clk <= 0
44
+ rst <= 0
45
+ !10.ns
46
+ 10.times do
47
+ clk <= 1
48
+ !10.ns
49
+ clk <= 0
50
+ !10.ns
51
+ end
52
+ end
53
+ end
@@ -34,6 +34,7 @@ HDLRuby::High::Std.channel(:mem_sync) do |n,typ,size,clk_e,rst,br_rsts = []|
34
34
  size = size.to_i
35
35
  # Compute the address bus width from the size.
36
36
  awidth = (size-1).width
37
+ awidth = 1 if awidth == 0
37
38
  # Ensure clk_e is an event, if not set it to a positive edge.
38
39
  clk_e = clk_e.posedge unless clk_e.is_a?(Event)
39
40
 
@@ -209,6 +210,7 @@ HDLRuby::High::Std.channel(:mem_rom) do |typ,size,clk,rst,content,
209
210
  size = size.to_i
210
211
  # Compute the address bus width from the size.
211
212
  awidth = (size-1).width
213
+ awidth = 1 if awidth == 0
212
214
  # Process the table of reset mapping for the branches.
213
215
  # Ensures br_srts is a hash.
214
216
  br_rsts = br_rsts.to_hash
@@ -321,7 +323,12 @@ HDLRuby::High::Std.channel(:mem_rom) do |typ,size,clk,rst,content,
321
323
  end
322
324
  helse do
323
325
  # Prepare the read.
324
- abus_r <= abus_r + 1
326
+ # abus_r <= abus_r + 1
327
+ if 2**size.width != size then
328
+ abus_r <= mux((abus_r + 1) == size, abus_r + 1, 0)
329
+ else
330
+ abus_r <= abus_r + 1
331
+ end
325
332
  trig_r <= 1
326
333
  end
327
334
  end
@@ -382,7 +389,12 @@ HDLRuby::High::Std.channel(:mem_rom) do |typ,size,clk,rst,content,
382
389
  end
383
390
  helse do
384
391
  # Prepare the read.
385
- abus_r <= abus_r - 1
392
+ # abus_r <= abus_r - 1
393
+ if 2**size.width != size then
394
+ abus_r <= mux(abus_r == 0, abus_r - 1, size - 1)
395
+ else
396
+ abus_r <= abus_r - 1
397
+ end
386
398
  trig_r <= 1
387
399
  end
388
400
  end
@@ -434,6 +446,7 @@ HDLRuby::High::Std.channel(:mem_dual) do |typ,size,clk,rst,br_rsts = {}|
434
446
  size = size.to_i
435
447
  # Compute the address bus width from the size.
436
448
  awidth = (size-1).width
449
+ awidth = 1 if awidth == 0
437
450
  # Process the table of reset mapping for the branches.
438
451
  # puts "first br_rsts=#{br_rsts}"
439
452
  # if br_rsts.is_a?(Array) then
@@ -593,7 +606,12 @@ HDLRuby::High::Std.channel(:mem_dual) do |typ,size,clk,rst,br_rsts = {}|
593
606
  end
594
607
  helse do
595
608
  # Prepare the read.
596
- abus_r <= abus_r + 1
609
+ # abus_r <= abus_r + 1
610
+ if 2**size.width != size then
611
+ abus_r <= mux((abus_r + 1) == size, abus_r + 1, 0)
612
+ else
613
+ abus_r <= abus_r + 1
614
+ end
597
615
  trig_r <= 1
598
616
  end
599
617
  end
@@ -630,7 +648,12 @@ HDLRuby::High::Std.channel(:mem_dual) do |typ,size,clk,rst,br_rsts = {}|
630
648
  # No reset, so can perform the write.
631
649
  blk.call if blk
632
650
  # Prepare the write.
633
- abus_w <= abus_w + 1
651
+ # abus_w <= abus_w + 1
652
+ if 2**size.width != size then
653
+ abus_w <= mux((abus_w + 1) == size, abus_w + 1, 0)
654
+ else
655
+ abus_w <= abus_w + 1
656
+ end
634
657
  trig_w <= 1
635
658
  dbus_w <= target
636
659
  end
@@ -692,7 +715,12 @@ HDLRuby::High::Std.channel(:mem_dual) do |typ,size,clk,rst,br_rsts = {}|
692
715
  end
693
716
  helse do
694
717
  # Prepare the read.
695
- abus_r <= abus_r - 1
718
+ # abus_r <= abus_r - 1
719
+ if 2**size.width != size then
720
+ abus_r <= mux(abus_r == 0, abus_r - 1, size - 1)
721
+ else
722
+ abus_r <= abus_r - 1
723
+ end
696
724
  trig_r <= 1
697
725
  end
698
726
  end
@@ -729,7 +757,12 @@ HDLRuby::High::Std.channel(:mem_dual) do |typ,size,clk,rst,br_rsts = {}|
729
757
  # No reset, so can perform the write.
730
758
  blk.call if blk
731
759
  # Prepare the write.
732
- abus_w <= abus_w - 1
760
+ # abus_w <= abus_w - 1
761
+ if 2**size.width != size then
762
+ abus_w <= mux(abus_w == 0, abus_w - 1, size - 1)
763
+ else
764
+ abus_w <= abus_w - 1
765
+ end
733
766
  trig_w <= 1
734
767
  dbus_w <= target
735
768
  end
@@ -923,6 +956,8 @@ HDLRuby::High::Std.channel(:mem_file) do |typ,size,clk,rst,br_rsts = {}|
923
956
  reader_input rst_name
924
957
  end
925
958
  # Declares the address counter.
959
+ awidth = size.width-1
960
+ awidth = 1 if awidth == 0
926
961
  [size.width-1].inner :abus_r
927
962
  reader_inout :abus_r
928
963
 
@@ -946,7 +981,12 @@ HDLRuby::High::Std.channel(:mem_file) do |typ,size,clk,rst,br_rsts = {}|
946
981
  end
947
982
  blk.call if blk
948
983
  # Prepare the next read.
949
- abus_r <= abus_r + 1
984
+ # abus_r <= abus_r + 1
985
+ if 2**size.width != size then
986
+ abus_r <= mux((abus_r + 1) == size, abus_r + 1, 0)
987
+ else
988
+ abus_r <= abus_r + 1
989
+ end
950
990
  end
951
991
  end
952
992
  end
@@ -985,7 +1025,12 @@ HDLRuby::High::Std.channel(:mem_file) do |typ,size,clk,rst,br_rsts = {}|
985
1025
  end
986
1026
  blk.call if blk
987
1027
  # Prepare the next write.
988
- abus_w <= abus_w + 1
1028
+ # abus_w <= abus_w + 1
1029
+ if 2**size.width != size then
1030
+ abus_w <= mux((abus_w + 1) == size, abus_w + 1, 0)
1031
+ else
1032
+ abus_w <= abus_w + 1
1033
+ end
989
1034
  end
990
1035
  end
991
1036
  end
@@ -1003,6 +1048,8 @@ HDLRuby::High::Std.channel(:mem_file) do |typ,size,clk,rst,br_rsts = {}|
1003
1048
  reader_input rst_name
1004
1049
  end
1005
1050
  # Declares the address counter.
1051
+ awidth = size.width - 1
1052
+ awidth = 1 if awidth == 0
1006
1053
  [size.width-1].inner :abus_r
1007
1054
  reader_inout :abus_r
1008
1055
 
@@ -1026,7 +1073,12 @@ HDLRuby::High::Std.channel(:mem_file) do |typ,size,clk,rst,br_rsts = {}|
1026
1073
  end
1027
1074
  blk.call if blk
1028
1075
  # Prepare the next read.
1029
- abus_r <= abus_r - 1
1076
+ # abus_r <= abus_r - 1
1077
+ if 2**size.width != size then
1078
+ abus_r <= mux(abus_r == 0, abus_r - 1, size - 1)
1079
+ else
1080
+ abus_r <= abus_r - 1
1081
+ end
1030
1082
  end
1031
1083
  end
1032
1084
  end
@@ -1065,7 +1117,12 @@ HDLRuby::High::Std.channel(:mem_file) do |typ,size,clk,rst,br_rsts = {}|
1065
1117
  end
1066
1118
  blk.call if blk
1067
1119
  # Prepare the next write.
1068
- abus_w <= abus_w - 1
1120
+ # abus_w <= abus_w - 1
1121
+ if 2**size.width != size then
1122
+ abus_w <= mux(abus_w == 0, abus_w - 1, size - 1)
1123
+ else
1124
+ abus_w <= abus_w - 1
1125
+ end
1069
1126
  end
1070
1127
  end
1071
1128
  end
@@ -1113,7 +1170,9 @@ HDLRuby::High::Std.channel(:mem_bank) do |typ,nbanks,size,clk,rst,br_rsts = {}|
1113
1170
  size = size.to_i
1114
1171
  # Compute the address bus width from the size.
1115
1172
  awidth = (size*nbanks-1).width
1173
+ awidth = 1 if awidth == 0
1116
1174
  awidth_b = (size-1).width # Bank width
1175
+ awidth_b = 1 if awidth_b == 0
1117
1176
  # Ensures br_srts is a hash.
1118
1177
  br_rsts = br_rsts.to_hash
1119
1178
 
@@ -1274,7 +1333,12 @@ HDLRuby::High::Std.channel(:mem_bank) do |typ,nbanks,size,clk,rst,br_rsts = {}|
1274
1333
  blk.call if blk
1275
1334
  end
1276
1335
  # Prepare the read.
1277
- abus_r <= abus_r + 1
1336
+ # abus_r <= abus_r + 1
1337
+ if 2**size.width != size then
1338
+ abus_r <= mux((abus_r + 1) == size, abus_r + 1, 0)
1339
+ else
1340
+ abus_r <= abus_r + 1
1341
+ end
1278
1342
  trig_r <= 1
1279
1343
  end
1280
1344
  end
@@ -1310,7 +1374,12 @@ HDLRuby::High::Std.channel(:mem_bank) do |typ,nbanks,size,clk,rst,br_rsts = {}|
1310
1374
  # No reset, so can perform the write.
1311
1375
  blk.call if blk
1312
1376
  # Prepare the write.
1313
- abus_w <= abus_w + 1
1377
+ # abus_w <= abus_w + 1
1378
+ if 2**size.width != size then
1379
+ abus_w <= mux((abus_w + 1) == size, abus_w + 1, 0)
1380
+ else
1381
+ abus_w <= abus_w + 1
1382
+ end
1314
1383
  trig_w <= 1
1315
1384
  dbus_w <= target
1316
1385
  end
@@ -1351,7 +1420,12 @@ HDLRuby::High::Std.channel(:mem_bank) do |typ,nbanks,size,clk,rst,br_rsts = {}|
1351
1420
  blk.call if blk
1352
1421
  end
1353
1422
  # Prepare the read.
1354
- abus_r <= abus_r - 1
1423
+ # abus_r <= abus_r - 1
1424
+ if 2**size.width != size then
1425
+ abus_r <= mux(abus_r == 0, abus_r - 1, size - 1)
1426
+ else
1427
+ abus_r <= abus_r - 1
1428
+ end
1355
1429
  trig_r <= 1
1356
1430
  end
1357
1431
  end
@@ -1388,6 +1462,11 @@ HDLRuby::High::Std.channel(:mem_bank) do |typ,nbanks,size,clk,rst,br_rsts = {}|
1388
1462
  blk.call if blk
1389
1463
  # Prepare the write.
1390
1464
  abus_w <= abus_w - 1
1465
+ if 2**size.width != size then
1466
+ abus_w <= mux(abus_w == 0, abus_w - 1, size - 1)
1467
+ else
1468
+ abus_w <= abus_w - 1
1469
+ end
1391
1470
  trig_w <= 1
1392
1471
  dbus_w <= target
1393
1472
  end
@@ -1,3 +1,3 @@
1
1
  module HDLRuby
2
- VERSION = "2.4.9"
2
+ VERSION = "2.4.10"
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.9
4
+ version: 2.4.10
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-15 00:00:00.000000000 Z
11
+ date: 2020-10-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -125,6 +125,7 @@ files:
125
125
  - lib/HDLRuby/hdr_samples/with_linear.rb
126
126
  - lib/HDLRuby/hdr_samples/with_loop.rb
127
127
  - lib/HDLRuby/hdr_samples/with_memory.rb
128
+ - lib/HDLRuby/hdr_samples/with_memory_rom.rb
128
129
  - lib/HDLRuby/hdr_samples/with_multi_channels.rb
129
130
  - lib/HDLRuby/hdr_samples/with_reconf.rb
130
131
  - lib/HDLRuby/hdrcc.rb