@@ -1106,8 +1106,7 @@ import qualified Data.Vector as V
1106
1106
import GHC.Stack (HasCallStack, withFrozenCallStack)
1107
1107
1108
1108
blockRam#
1109
- :: ( KnownDomain dom
1110
- , HasCallStack
1109
+ :: ( HasCallStack
1111
1110
, NFDataX a )
1112
1111
=> 'Clock' dom -- ^ 'Clock' to synchronize to
1113
1112
-> 'Enable' dom -- ^ Global enable
@@ -1154,40 +1153,39 @@ BlackBox:
1154
1153
kind: Declaration
1155
1154
type: |-
1156
1155
blockRam#
1157
- :: ( KnownDomain dom ARG[0]
1158
- , HasCallStack -- ARG[1]
1159
- , NFDataX a ) -- ARG[2]
1160
- => Clock dom -- clk, ARG[3]
1161
- -> Enable dom -- en, ARG[4]
1162
- -> Vec n a -- init, ARG[5]
1163
- -> Signal dom Int -- rd, ARG[6]
1164
- -> Signal dom Bool -- wren, ARG[7]
1165
- -> Signal dom Int -- wr, ARG[8]
1166
- -> Signal dom a -- din, ARG[9]
1156
+ :: ( HasCallStack -- ARG[0]
1157
+ , NFDataX a ) -- ARG[1]
1158
+ => Clock dom -- clk, ARG[2]
1159
+ -> Enable dom -- en, ARG[3]
1160
+ -> Vec n a -- init, ARG[4]
1161
+ -> Signal dom Int -- rd, ARG[5]
1162
+ -> Signal dom Bool -- wren, ARG[6]
1163
+ -> Signal dom Int -- wr, ARG[7]
1164
+ -> Signal dom a -- din, ARG[8]
1167
1165
-> Signal dom a
1168
1166
template: |-
1169
1167
-- blockRam begin
1170
1168
~GENSYM[~RESULT_blockRam][1] : block
1171
- signal ~GENSYM[~RESULT_RAM][2] : ~TYP[5 ] := ~CONST[5 ];
1172
- signal ~GENSYM[rd][4] : integer range 0 to ~LENGTH[~TYP[5 ]] - 1;
1173
- signal ~GENSYM[wr][5] : integer range 0 to ~LENGTH[~TYP[5 ]] - 1;
1169
+ signal ~GENSYM[~RESULT_RAM][2] : ~TYP[4 ] := ~CONST[4 ];
1170
+ signal ~GENSYM[rd][4] : integer range 0 to ~LENGTH[~TYP[4 ]] - 1;
1171
+ signal ~GENSYM[wr][5] : integer range 0 to ~LENGTH[~TYP[4 ]] - 1;
1174
1172
begin
1175
- ~SYM[4] <= to_integer(~ARG[6 ])
1173
+ ~SYM[4] <= to_integer(~ARG[5 ])
1176
1174
-- pragma translate_off
1177
- mod ~LENGTH[~TYP[5 ]]
1175
+ mod ~LENGTH[~TYP[4 ]]
1178
1176
-- pragma translate_on
1179
1177
;
1180
- ~SYM[5] <= to_integer(~ARG[8 ])
1178
+ ~SYM[5] <= to_integer(~ARG[7 ])
1181
1179
-- pragma translate_off
1182
- mod ~LENGTH[~TYP[5 ]]
1180
+ mod ~LENGTH[~TYP[4 ]]
1183
1181
-- pragma translate_on
1184
1182
;
1185
1183
~IF ~VIVADO ~THEN
1186
- ~SYM[6] : process(~ARG[3 ])
1184
+ ~SYM[6] : process(~ARG[2 ])
1187
1185
begin
1188
- if ~IF~ACTIVEEDGE[Rising][0 ]~THENrising_edge~ELSEfalling_edge~FI(~ARG[3 ]) then
1189
- if ~ARG[7 ] ~IF ~ISACTIVEENABLE[4 ] ~THEN and ~ARG[4 ] ~ELSE ~FI then
1190
- ~SYM[2](~SYM[5]) <= ~TOBV[~ARG[9 ]][~TYP[9 ]];
1186
+ if ~IF~ACTIVEEDGE[Rising][2 ]~THENrising_edge~ELSEfalling_edge~FI(~ARG[2 ]) then
1187
+ if ~ARG[6 ] ~IF ~ISACTIVEENABLE[3 ] ~THEN and ~ARG[3 ] ~ELSE ~FI then
1188
+ ~SYM[2](~SYM[5]) <= ~TOBV[~ARG[8 ]][~TYP[8 ]];
1191
1189
end if;
1192
1190
~RESULT <= fromSLV(~SYM[2](~SYM[4]))
1193
1191
-- pragma translate_off
@@ -1196,11 +1194,11 @@ BlackBox:
1196
1194
;
1197
1195
end if;
1198
1196
end process; ~ELSE
1199
- ~SYM[6] : process(~ARG[3 ])
1197
+ ~SYM[6] : process(~ARG[2 ])
1200
1198
begin
1201
- if ~IF~ACTIVEEDGE[Rising][0 ]~THENrising_edge~ELSEfalling_edge~FI(~ARG[3 ]) then
1202
- if ~ARG[7 ] ~IF ~ISACTIVEENABLE[4 ] ~THEN and ~ARG[4 ] ~ELSE ~FI then
1203
- ~SYM[2](~SYM[5]) <= ~ARG[9 ];
1199
+ if ~IF~ACTIVEEDGE[Rising][2 ]~THENrising_edge~ELSEfalling_edge~FI(~ARG[2 ]) then
1200
+ if ~ARG[6 ] ~IF ~ISACTIVEENABLE[3 ] ~THEN and ~ARG[3 ] ~ELSE ~FI then
1201
+ ~SYM[2](~SYM[5]) <= ~ARG[8 ];
1204
1202
end if;
1205
1203
~RESULT <= ~SYM[2](~SYM[4])
1206
1204
-- pragma translate_off
@@ -1345,49 +1343,48 @@ BlackBox:
1345
1343
outputReg: true
1346
1344
type: |-
1347
1345
blockRam#
1348
- :: ( KnownDomain dom ARG[0]
1349
- , HasCallStack -- ARG[1]
1350
- , NFDataX a ) -- ARG[2]
1351
- => Clock dom -- clk, ARG[3]
1352
- => Enable dom -- en, ARG[4]
1353
- -> Vec n a -- init, ARG[5]
1354
- -> Signal dom Int -- rd, ARG[6]
1355
- -> Signal dom Bool -- wren, ARG[7]
1356
- -> Signal dom Int -- wr, ARG[8]
1357
- -> Signal dom a -- din, ARG[9]
1346
+ :: ( HasCallStack -- ARG[0]
1347
+ , NFDataX a ) -- ARG[1]
1348
+ => Clock dom -- clk, ARG[2]
1349
+ => Enable dom -- en, ARG[3]
1350
+ -> Vec n a -- init, ARG[4]
1351
+ -> Signal dom Int -- rd, ARG[5]
1352
+ -> Signal dom Bool -- wren, ARG[6]
1353
+ -> Signal dom Int -- wr, ARG[7]
1354
+ -> Signal dom a -- din, ARG[8]
1358
1355
-> Signal dom a
1359
1356
template: |-
1360
1357
// blockRam begin
1361
- reg ~TYPO ~GENSYM[~RESULT_RAM][1] [0:~LENGTH[~TYP[5 ]]-1];
1358
+ reg ~TYPO ~GENSYM[~RESULT_RAM][1] [0:~LENGTH[~TYP[4 ]]-1];
1362
1359
1363
- reg ~TYP[5 ] ~GENSYM[ram_init][3];
1360
+ reg ~TYP[4 ] ~GENSYM[ram_init][3];
1364
1361
integer ~GENSYM[i][4];
1365
1362
initial begin
1366
- ~SYM[3] = ~CONST[5 ];
1367
- for (~SYM[4]=0; ~SYM[4] < ~LENGTH[~TYP[5 ]]; ~SYM[4] = ~SYM[4] + 1) begin
1368
- ~SYM[1][~LENGTH[~TYP[5 ]]-1-~SYM[4]] = ~SYM[3][~SYM[4]*~SIZE[~TYPO]+:~SIZE[~TYPO]];
1363
+ ~SYM[3] = ~CONST[4 ];
1364
+ for (~SYM[4]=0; ~SYM[4] < ~LENGTH[~TYP[4 ]]; ~SYM[4] = ~SYM[4] + 1) begin
1365
+ ~SYM[1][~LENGTH[~TYP[4 ]]-1-~SYM[4]] = ~SYM[3][~SYM[4]*~SIZE[~TYPO]+:~SIZE[~TYPO]];
1369
1366
end
1370
1367
end
1371
- ~IF ~ISACTIVEENABLE[4 ] ~THEN
1372
- always @(~IF~ACTIVEEDGE[Rising][0 ]~THENposedge~ELSEnegedge~FI ~ARG[3 ]) begin : ~GENSYM[~RESULT_blockRam][5]~IF ~VIVADO ~THEN
1373
- if (~ARG[4 ]) begin
1374
- if (~ARG[7 ]) begin
1375
- ~SYM[1][~ARG[8 ]] <= ~ARG[9 ];
1368
+ ~IF ~ISACTIVEENABLE[3 ] ~THEN
1369
+ always @(~IF~ACTIVEEDGE[Rising][2 ]~THENposedge~ELSEnegedge~FI ~ARG[2 ]) begin : ~GENSYM[~RESULT_blockRam][5]~IF ~VIVADO ~THEN
1370
+ if (~ARG[3 ]) begin
1371
+ if (~ARG[6 ]) begin
1372
+ ~SYM[1][~ARG[7 ]] <= ~ARG[8 ];
1376
1373
end
1377
- ~RESULT <= ~SYM[1][~ARG[6 ]];
1374
+ ~RESULT <= ~SYM[1][~ARG[5 ]];
1378
1375
end~ELSE
1379
- if (~ARG[7 ] & ~ARG[4 ]) begin
1380
- ~SYM[1][~ARG[8 ]] <= ~ARG[9 ];
1376
+ if (~ARG[6 ] & ~ARG[3 ]) begin
1377
+ ~SYM[1][~ARG[7 ]] <= ~ARG[8 ];
1381
1378
end
1382
- if (~ARG[4 ]) begin
1383
- ~RESULT <= ~SYM[1][~ARG[6 ]];
1379
+ if (~ARG[3 ]) begin
1380
+ ~RESULT <= ~SYM[1][~ARG[5 ]];
1384
1381
end~FI
1385
1382
end~ELSE
1386
- always @(~IF~ACTIVEEDGE[Rising][0 ]~THENposedge~ELSEnegedge~FI ~ARG[3 ]) begin : ~SYM[5]
1387
- if (~ARG[7 ]) begin
1388
- ~SYM[1][~ARG[8 ]] <= ~ARG[9 ];
1383
+ always @(~IF~ACTIVEEDGE[Rising][2 ]~THENposedge~ELSEnegedge~FI ~ARG[2 ]) begin : ~SYM[5]
1384
+ if (~ARG[6 ]) begin
1385
+ ~SYM[1][~ARG[7 ]] <= ~ARG[8 ];
1389
1386
end
1390
- ~RESULT <= ~SYM[1][~ARG[6 ]];
1387
+ ~RESULT <= ~SYM[1][~ARG[5 ]];
1391
1388
end~FI
1392
1389
// blockRam end
1393
1390
@
@@ -1413,45 +1410,44 @@ BlackBox:
1413
1410
kind: Declaration
1414
1411
type: |-
1415
1412
blockRam#
1416
- :: ( KnownDomain dom ARG[0]
1417
- , HasCallStack -- ARG[1]
1418
- , NFDataX a ) -- ARG[2]
1419
- => Clock dom -- clk, ARG[3]
1420
- -> Enable dom -- en, ARG[4]
1421
- -> Vec n a -- init, ARG[5]
1422
- -> Signal dom Int -- rd, ARG[6]
1423
- -> Signal dom Bool -- wren, ARG[7]
1424
- -> Signal dom Int -- wr, ARG[8]
1425
- -> Signal dom a -- din, ARG[9]
1413
+ :: ( HasCallStack -- ARG[0]
1414
+ , NFDataX a ) -- ARG[1]
1415
+ => Clock dom -- clk, ARG[2]
1416
+ -> Enable dom -- en, ARG[3]
1417
+ -> Vec n a -- init, ARG[4]
1418
+ -> Signal dom Int -- rd, ARG[5]
1419
+ -> Signal dom Bool -- wren, ARG[6]
1420
+ -> Signal dom Int -- wr, ARG[7]
1421
+ -> Signal dom a -- din, ARG[8]
1426
1422
-> Signal dom a
1427
1423
template: |-
1428
1424
// blockRam begin
1429
- ~SIGD[~GENSYM[RAM][1]][5 ];
1430
- logic [~SIZE[~TYP[9 ]]-1:0] ~GENSYM[~RESULT_q][2];
1425
+ ~SIGD[~GENSYM[RAM][1]][4 ];
1426
+ logic [~SIZE[~TYP[8 ]]-1:0] ~GENSYM[~RESULT_q][2];
1431
1427
initial begin
1432
- ~SYM[1] = ~CONST[5 ];
1433
- end~IF ~ISACTIVEENABLE[4 ] ~THEN
1434
- always @(~IF~ACTIVEEDGE[Rising][0 ]~THENposedge~ELSEnegedge~FI ~ARG[3 ]) begin : ~GENSYM[~COMPNAME_blockRam][3]~IF ~VIVADO ~THEN
1435
- if (~ARG[4 ]) begin
1436
- if (~ARG[7 ]) begin
1437
- ~SYM[1][~ARG[8 ]] <= ~TOBV[~ARG[9 ]][~TYP[9 ]];
1428
+ ~SYM[1] = ~CONST[4 ];
1429
+ end~IF ~ISACTIVEENABLE[3 ] ~THEN
1430
+ always @(~IF~ACTIVEEDGE[Rising][2 ]~THENposedge~ELSEnegedge~FI ~ARG[2 ]) begin : ~GENSYM[~COMPNAME_blockRam][3]~IF ~VIVADO ~THEN
1431
+ if (~ARG[3 ]) begin
1432
+ if (~ARG[6 ]) begin
1433
+ ~SYM[1][~ARG[7 ]] <= ~TOBV[~ARG[8 ]][~TYP[8 ]];
1438
1434
end
1439
- ~SYM[2] <= ~SYM[1][~ARG[6 ]];
1435
+ ~SYM[2] <= ~SYM[1][~ARG[5 ]];
1440
1436
end~ELSE
1441
- if (~ARG[7 ] & ~ARG[4 ]) begin
1442
- ~SYM[1][~ARG[8 ]] <= ~TOBV[~ARG[9 ]][~TYP[9 ]];
1437
+ if (~ARG[6 ] & ~ARG[3 ]) begin
1438
+ ~SYM[1][~ARG[7 ]] <= ~TOBV[~ARG[8 ]][~TYP[8 ]];
1443
1439
end
1444
- if (~ARG[4 ]) begin
1445
- ~SYM[2] <= ~SYM[1][~ARG[6 ]];
1440
+ if (~ARG[3 ]) begin
1441
+ ~SYM[2] <= ~SYM[1][~ARG[5 ]];
1446
1442
end~FI
1447
1443
end~ELSE
1448
- always @(~IF~ACTIVEEDGE[Rising][0 ]~THENposedge~ELSEnegedge~FI ~ARG[3 ]) begin : ~SYM[3]
1449
- if (~ARG[7 ]) begin
1450
- ~SYM[1][~ARG[8 ]] <= ~TOBV[~ARG[9 ]][~TYP[9 ]];
1444
+ always @(~IF~ACTIVEEDGE[Rising][2 ]~THENposedge~ELSEnegedge~FI ~ARG[2 ]) begin : ~SYM[3]
1445
+ if (~ARG[6 ]) begin
1446
+ ~SYM[1][~ARG[7 ]] <= ~TOBV[~ARG[8 ]][~TYP[8 ]];
1451
1447
end
1452
- ~SYM[2] <= ~SYM[1][~ARG[6 ]];
1448
+ ~SYM[2] <= ~SYM[1][~ARG[5 ]];
1453
1449
end~FI
1454
- assign ~RESULT = ~FROMBV[~SYM[2]][~TYP[9 ]];
1450
+ assign ~RESULT = ~FROMBV[~SYM[2]][~TYP[8 ]];
1455
1451
// blockRam end
1456
1452
@
1457
1453
@@ -1561,8 +1557,6 @@ synchronous logic. As a consequence, we see in the type signature of
1561
1557
__asyncRam__
1562
1558
:: ( 'Enum' addr
1563
1559
, 'HasCallStack'
1564
- , 'KnownDomain' wdom
1565
- , 'KnownDomain' rdom
1566
1560
)
1567
1561
=> 'Clock' wdom -- ^ 'Clock' to which to synchronize the write port of the RAM
1568
1562
-> 'Clock' rdom -- ^ 'Clock' to which the read address signal, @r@, is synchronized to
@@ -1675,9 +1669,7 @@ Finally we combine all the components in:
1675
1669
1676
1670
@
1677
1671
asyncFIFOSynchronizer
1678
- :: ( 'KnownDomain' wdom
1679
- , 'KnownDomain' rdom
1680
- , 2 <= addrSize )
1672
+ :: ( 2 <= addrSize )
1681
1673
=> SNat addrSize
1682
1674
-- ^ Size of the internally used addresses, the FIFO contains @2^addrSize@
1683
1675
-- elements.
@@ -1796,9 +1788,7 @@ ptrSync clk1 clk2 rst2 en2 =
1796
1788
1797
1789
-- Async FIFO synchronizer
1798
1790
asyncFIFOSynchronizer
1799
- :: ( 'KnownDomain' wdom
1800
- , 'KnownDomain' rdom
1801
- , 2 <= addrSize )
1791
+ :: ( 2 <= addrSize )
1802
1792
=> SNat addrSize
1803
1793
-- ^ Size of the internally used addresses, the FIFO contains @2^addrSize@
1804
1794
-- elements.
0 commit comments