@@ -19,6 +19,7 @@ module eth_xcvr_phy_10g_gty_wrapper #
19
19
20
20
// GT type
21
21
parameter GT_GTH = 0 ,
22
+ parameter GT_USP = 1 ,
22
23
23
24
// PLL parameters
24
25
parameter QPLL0_PD = 1'b0 ,
987
988
988
989
generate
989
990
990
- if (HAS_COMMON && ! GT_GTH) begin : xcvr_gty_com
991
+ if (HAS_COMMON && ! GT_GTH && GT_USP ) begin : xcvr_gty_com_usp
991
992
992
993
eth_xcvr_gty_full
993
994
eth_xcvr_gty_full_inst (
@@ -1123,7 +1124,7 @@ if (HAS_COMMON && !GT_GTH) begin : xcvr_gty_com
1123
1124
assign xcvr_qpll1clk_out = qpll1_clk;
1124
1125
assign xcvr_qpll1refclk_out = qpll1_refclk;
1125
1126
1126
- end else if (HAS_COMMON && GT_GTH) begin : xcvr_gth_com
1127
+ end else if (HAS_COMMON && GT_GTH && GT_USP ) begin : xcvr_gth_com_usp
1127
1128
1128
1129
eth_xcvr_gth_full
1129
1130
eth_xcvr_gth_full_inst (
@@ -1259,6 +1260,278 @@ end else if (HAS_COMMON && GT_GTH) begin : xcvr_gth_com
1259
1260
assign xcvr_qpll1clk_out = qpll1_clk;
1260
1261
assign xcvr_qpll1refclk_out = qpll1_refclk;
1261
1262
1263
+ end else if (HAS_COMMON && ! GT_GTH && ! GT_USP) begin : xcvr_gty_com_us
1264
+
1265
+ eth_xcvr_gty_full
1266
+ eth_xcvr_gty_full_inst (
1267
+ // Common
1268
+ .gtpowergood_out(xcvr_gtpowergood_out),
1269
+ .loopback_in(gt_loopback_reg),
1270
+
1271
+ // DRP
1272
+ .drpclk_common_in(drp_clk),
1273
+ .drpaddr_common_in(drp_addr_reg),
1274
+ .drpdi_common_in(drp_di_reg),
1275
+ .drpen_common_in(drp_en_reg_2),
1276
+ .drpwe_common_in(drp_we_reg),
1277
+ .drpdo_common_out(drp_do_2),
1278
+ .drprdy_common_out(drp_rdy_2),
1279
+
1280
+ .drpclk_in(drp_clk),
1281
+ .drpaddr_in(drp_addr_reg),
1282
+ .drpdi_in(drp_di_reg),
1283
+ .drpen_in(drp_en_reg_1),
1284
+ .drpwe_in(drp_we_reg),
1285
+ .drpdo_out(drp_do_1),
1286
+ .drprdy_out(drp_rdy_1),
1287
+
1288
+ // PLL
1289
+ .gtrefclk00_in(xcvr_gtrefclk00_in),
1290
+ .qpll0lock_out(qpll0_lock),
1291
+ .qpll0outclk_out(qpll0_clk),
1292
+ .qpll0outrefclk_out(qpll0_refclk),
1293
+ .gtrefclk01_in(xcvr_gtrefclk01_in),
1294
+ .qpll1lock_out(qpll1_lock),
1295
+ .qpll1outclk_out(qpll1_clk),
1296
+ .qpll1outrefclk_out(qpll1_refclk),
1297
+
1298
+ .qpll0pd_in(QPLL0_EXT_CTRL ? xcvr_qpll0pd_in : qpll0_pd_reg),
1299
+ .qpll0reset_in(QPLL0_EXT_CTRL ? xcvr_qpll0reset_in : qpll0_reset_reg),
1300
+ .qpll1pd_in(QPLL1_EXT_CTRL ? xcvr_qpll1pd_in : qpll1_pd_reg),
1301
+ .qpll1reset_in(QPLL1_EXT_CTRL ? xcvr_qpll1reset_in : qpll1_reset_reg),
1302
+
1303
+ .qpllrsvd2_in(QPLL0_EXT_CTRL ? {2'd0 , xcvr_qpll0pcierate_in} : 5'd0 ), // [2:0] : QPLL0 rate
1304
+ .qpllrsvd3_in(QPLL1_EXT_CTRL ? {2'd0 , xcvr_qpll1pcierate_in} : 5'd0 ), // [2:0] : QPLL1 rate
1305
+
1306
+ // Serial data
1307
+ .gtytxp_out(xcvr_txp),
1308
+ .gtytxn_out(xcvr_txn),
1309
+ .gtyrxp_in(xcvr_rxp),
1310
+ .gtyrxn_in(xcvr_rxn),
1311
+
1312
+ // Transmit
1313
+ .gtwiz_userclk_tx_reset_in(gt_tx_reset_reg),
1314
+ .gtwiz_userclk_tx_srcclk_out(),
1315
+ .gtwiz_userclk_tx_usrclk_out(),
1316
+ .gtwiz_userclk_tx_usrclk2_out(gt_txusrclk2),
1317
+ .gtwiz_userclk_tx_active_out(gt_userclk_tx_active),
1318
+ .gtwiz_reset_tx_done_in(tx_reset_done_reg),
1319
+ .txpdelecidlemode_in(1'b1 ),
1320
+ .txpd_in(gt_tx_pd_reg ? 2'b11 : 2'b00 ),
1321
+ .gttxreset_in(gt_tx_reset_reg),
1322
+ .txpmareset_in(gt_tx_pma_reset_reg),
1323
+ .txpcsreset_in(gt_tx_pcs_reset_reg),
1324
+ .txresetdone_out(gt_tx_reset_done),
1325
+ .txpmaresetdone_out(gt_tx_pma_reset_done),
1326
+ .txprogdivreset_in(gt_tx_prgdiv_reset_reg),
1327
+ .txprgdivresetdone_out(gt_tx_prgdiv_reset_done),
1328
+ .txpllclksel_in(gt_tx_qpll_sel_reg ? 2'b10 : 2'b11 ),
1329
+ .txsysclksel_in(gt_tx_qpll_sel_reg ? 2'b11 : 2'b10 ),
1330
+ .txuserrdy_in(gt_tx_userrdy_reg),
1331
+
1332
+ .txpolarity_in(gt_txpolarity_sync_reg),
1333
+ .txelecidle_in(gt_txelecidle_reg),
1334
+ .txinhibit_in(gt_txinhibit_sync_reg),
1335
+ .txdiffctrl_in(gt_txdiffctrl_reg),
1336
+ .txmaincursor_in(gt_txmaincursor_reg),
1337
+ .txprecursor_in(gt_txprecursor_reg),
1338
+ .txpostcursor_in(gt_txpostcursor_reg),
1339
+
1340
+ .txprbsforceerr_in(gt_txprbsforceerr_sync_2_reg ^ gt_txprbsforceerr_sync_3_reg),
1341
+ .txprbssel_in(gt_txprbssel_sync_reg),
1342
+
1343
+ .gtwiz_userdata_tx_in(gt_txdata),
1344
+ .txheader_in(gt_txheader),
1345
+ .txsequence_in(7'b0 ),
1346
+
1347
+ // Receive
1348
+ .gtwiz_userclk_rx_reset_in(gt_rx_reset_reg),
1349
+ .gtwiz_userclk_rx_srcclk_out(),
1350
+ .gtwiz_userclk_rx_usrclk_out(),
1351
+ .gtwiz_userclk_rx_usrclk2_out(gt_rxusrclk2),
1352
+ .gtwiz_userclk_rx_active_out(gt_userclk_rx_active),
1353
+ .gtwiz_reset_rx_done_in(rx_reset_done_reg),
1354
+ .rxpd_in(gt_rx_pd_reg ? 2'b11 : 2'b00 ),
1355
+ .gtrxreset_in(gt_rx_reset_reg),
1356
+ .rxpmareset_in(gt_rx_pma_reset_reg),
1357
+ .rxdfelpmreset_in(gt_rx_dfe_lpm_reset_reg),
1358
+ .eyescanreset_in(gt_eyescan_reset_reg),
1359
+ .rxpcsreset_in(gt_rx_pcs_reset_reg),
1360
+ .rxresetdone_out(gt_rx_reset_done),
1361
+ .rxpmaresetdone_out(gt_rx_pma_reset_done),
1362
+ .rxprogdivreset_in(gt_rx_prgdiv_reset_reg),
1363
+ .rxprgdivresetdone_out(gt_rx_prgdiv_reset_done),
1364
+ .rxpllclksel_in(gt_rx_qpll_sel_reg ? 2'b10 : 2'b11 ),
1365
+ .rxsysclksel_in(gt_rx_qpll_sel_reg ? 2'b11 : 2'b10 ),
1366
+ .rxuserrdy_in(gt_rx_userrdy_reg),
1367
+
1368
+ .rxcdrlock_out(gt_rxcdrlock),
1369
+ .rxcdrhold_in(gt_rxcdrhold_reg),
1370
+
1371
+ .rxlpmen_in(gt_rxlpmen_reg),
1372
+
1373
+ .dmonitorout_out(gt_dmonitorout),
1374
+
1375
+ .rxpolarity_in(gt_rxpolarity_sync_reg),
1376
+
1377
+ .rxprbscntreset_in(gt_rxprbscntreset_sync_2_reg ^ gt_rxprbscntreset_sync_3_reg),
1378
+ .rxprbssel_in(gt_rxprbssel_sync_reg),
1379
+ .rxprbserr_out(gt_rxprbserr),
1380
+ .rxprbslocked_out(gt_rxprbslocked),
1381
+
1382
+ .eyescandataerror_out(),
1383
+
1384
+ .rxgearboxslip_in(gt_rxgearboxslip),
1385
+ .gtwiz_userdata_rx_out(gt_rxdata),
1386
+ .rxdatavalid_out(gt_rxdatavalid),
1387
+ .rxheader_out(gt_rxheader),
1388
+ .rxheadervalid_out(gt_rxheadervalid),
1389
+ .rxstartofseq_out()
1390
+ );
1391
+
1392
+ assign xcvr_qpll0lock_out = qpll0_lock;
1393
+ assign xcvr_qpll0clk_out = qpll0_clk;
1394
+ assign xcvr_qpll0refclk_out = qpll0_refclk;
1395
+ assign xcvr_qpll1lock_out = qpll1_lock;
1396
+ assign xcvr_qpll1clk_out = qpll1_clk;
1397
+ assign xcvr_qpll1refclk_out = qpll1_refclk;
1398
+
1399
+ end else if (HAS_COMMON && GT_GTH && ! GT_USP) begin : xcvr_gth_com_us
1400
+
1401
+ eth_xcvr_gth_full
1402
+ eth_xcvr_gth_full_inst (
1403
+ // Common
1404
+ .gtpowergood_out(xcvr_gtpowergood_out),
1405
+ .loopback_in(gt_loopback_reg),
1406
+
1407
+ // DRP
1408
+ .drpclk_common_in(drp_clk),
1409
+ .drpaddr_common_in(drp_addr_reg),
1410
+ .drpdi_common_in(drp_di_reg),
1411
+ .drpen_common_in(drp_en_reg_2),
1412
+ .drpwe_common_in(drp_we_reg),
1413
+ .drpdo_common_out(drp_do_2),
1414
+ .drprdy_common_out(drp_rdy_2),
1415
+
1416
+ .drpclk_in(drp_clk),
1417
+ .drpaddr_in(drp_addr_reg),
1418
+ .drpdi_in(drp_di_reg),
1419
+ .drpen_in(drp_en_reg_1),
1420
+ .drpwe_in(drp_we_reg),
1421
+ .drpdo_out(drp_do_1),
1422
+ .drprdy_out(drp_rdy_1),
1423
+
1424
+ // PLL
1425
+ .gtrefclk00_in(xcvr_gtrefclk00_in),
1426
+ .qpll0lock_out(qpll0_lock),
1427
+ .qpll0outclk_out(qpll0_clk),
1428
+ .qpll0outrefclk_out(qpll0_refclk),
1429
+ .gtrefclk01_in(xcvr_gtrefclk01_in),
1430
+ .qpll1lock_out(qpll1_lock),
1431
+ .qpll1outclk_out(qpll1_clk),
1432
+ .qpll1outrefclk_out(qpll1_refclk),
1433
+
1434
+ .qpll0pd_in(QPLL0_EXT_CTRL ? xcvr_qpll0pd_in : qpll0_pd_reg),
1435
+ .qpll0reset_in(QPLL0_EXT_CTRL ? xcvr_qpll0reset_in : qpll0_reset_reg),
1436
+ .qpll1pd_in(QPLL1_EXT_CTRL ? xcvr_qpll1pd_in : qpll1_pd_reg),
1437
+ .qpll1reset_in(QPLL1_EXT_CTRL ? xcvr_qpll1reset_in : qpll1_reset_reg),
1438
+
1439
+ .qpllrsvd2_in(QPLL0_EXT_CTRL ? {2'd0 , xcvr_qpll0pcierate_in} : 5'd0 ), // [2:0] : QPLL0 rate
1440
+ .qpllrsvd3_in(QPLL1_EXT_CTRL ? {2'd0 , xcvr_qpll1pcierate_in} : 5'd0 ), // [2:0] : QPLL1 rate
1441
+
1442
+ // Serial data
1443
+ .gthtxp_out(xcvr_txp),
1444
+ .gthtxn_out(xcvr_txn),
1445
+ .gthrxp_in(xcvr_rxp),
1446
+ .gthrxn_in(xcvr_rxn),
1447
+
1448
+ // Transmit
1449
+ .gtwiz_userclk_tx_reset_in(gt_tx_reset_reg),
1450
+ .gtwiz_userclk_tx_srcclk_out(),
1451
+ .gtwiz_userclk_tx_usrclk_out(),
1452
+ .gtwiz_userclk_tx_usrclk2_out(gt_txusrclk2),
1453
+ .gtwiz_userclk_tx_active_out(gt_userclk_tx_active),
1454
+ .gtwiz_reset_tx_done_in(tx_reset_done_reg),
1455
+ .txpdelecidlemode_in(1'b1 ),
1456
+ .txpd_in(gt_tx_pd_reg ? 2'b11 : 2'b00 ),
1457
+ .gttxreset_in(gt_tx_reset_reg),
1458
+ .txpmareset_in(gt_tx_pma_reset_reg),
1459
+ .txpcsreset_in(gt_tx_pcs_reset_reg),
1460
+ .txresetdone_out(gt_tx_reset_done),
1461
+ .txpmaresetdone_out(gt_tx_pma_reset_done),
1462
+ .txprogdivreset_in(gt_tx_prgdiv_reset_reg),
1463
+ .txprgdivresetdone_out(gt_tx_prgdiv_reset_done),
1464
+ .txpllclksel_in(gt_tx_qpll_sel_reg ? 2'b10 : 2'b11 ),
1465
+ .txsysclksel_in(gt_tx_qpll_sel_reg ? 2'b11 : 2'b10 ),
1466
+ .txuserrdy_in(gt_tx_userrdy_reg),
1467
+
1468
+ .txpolarity_in(gt_txpolarity_sync_reg),
1469
+ .txelecidle_in(gt_txelecidle_reg),
1470
+ .txinhibit_in(gt_txinhibit_sync_reg),
1471
+ .txdiffctrl_in(gt_txdiffctrl_reg),
1472
+ .txmaincursor_in(gt_txmaincursor_reg),
1473
+ .txprecursor_in(gt_txprecursor_reg),
1474
+ .txpostcursor_in(gt_txpostcursor_reg),
1475
+
1476
+ .txprbsforceerr_in(gt_txprbsforceerr_sync_2_reg ^ gt_txprbsforceerr_sync_3_reg),
1477
+ .txprbssel_in(gt_txprbssel_sync_reg),
1478
+
1479
+ .gtwiz_userdata_tx_in(gt_txdata),
1480
+ .txheader_in(gt_txheader),
1481
+ .txsequence_in(7'b0 ),
1482
+
1483
+ // Receive
1484
+ .gtwiz_userclk_rx_reset_in(gt_rx_reset_reg),
1485
+ .gtwiz_userclk_rx_srcclk_out(),
1486
+ .gtwiz_userclk_rx_usrclk_out(),
1487
+ .gtwiz_userclk_rx_usrclk2_out(gt_rxusrclk2),
1488
+ .gtwiz_userclk_rx_active_out(gt_userclk_rx_active),
1489
+ .gtwiz_reset_rx_done_in(rx_reset_done_reg),
1490
+ .rxpd_in(gt_rx_pd_reg ? 2'b11 : 2'b00 ),
1491
+ .gtrxreset_in(gt_rx_reset_reg),
1492
+ .rxpmareset_in(gt_rx_pma_reset_reg),
1493
+ .rxdfelpmreset_in(gt_rx_dfe_lpm_reset_reg),
1494
+ .eyescanreset_in(gt_eyescan_reset_reg),
1495
+ .rxpcsreset_in(gt_rx_pcs_reset_reg),
1496
+ .rxresetdone_out(gt_rx_reset_done),
1497
+ .rxpmaresetdone_out(gt_rx_pma_reset_done),
1498
+ .rxprogdivreset_in(gt_rx_prgdiv_reset_reg),
1499
+ .rxprgdivresetdone_out(gt_rx_prgdiv_reset_done),
1500
+ .rxpllclksel_in(gt_rx_qpll_sel_reg ? 2'b10 : 2'b11 ),
1501
+ .rxsysclksel_in(gt_rx_qpll_sel_reg ? 2'b11 : 2'b10 ),
1502
+ .rxuserrdy_in(gt_rx_userrdy_reg),
1503
+
1504
+ .rxcdrlock_out(gt_rxcdrlock),
1505
+ .rxcdrhold_in(gt_rxcdrhold_reg),
1506
+
1507
+ .rxlpmen_in(gt_rxlpmen_reg),
1508
+
1509
+ .dmonitorout_out(gt_dmonitorout),
1510
+
1511
+ .rxpolarity_in(gt_rxpolarity_sync_reg),
1512
+
1513
+ .rxprbscntreset_in(gt_rxprbscntreset_sync_2_reg ^ gt_rxprbscntreset_sync_3_reg),
1514
+ .rxprbssel_in(gt_rxprbssel_sync_reg),
1515
+ .rxprbserr_out(gt_rxprbserr),
1516
+ .rxprbslocked_out(gt_rxprbslocked),
1517
+
1518
+ .eyescandataerror_out(),
1519
+
1520
+ .rxgearboxslip_in(gt_rxgearboxslip),
1521
+ .gtwiz_userdata_rx_out(gt_rxdata),
1522
+ .rxdatavalid_out(gt_rxdatavalid),
1523
+ .rxheader_out(gt_rxheader),
1524
+ .rxheadervalid_out(gt_rxheadervalid),
1525
+ .rxstartofseq_out()
1526
+ );
1527
+
1528
+ assign xcvr_qpll0lock_out = qpll0_lock;
1529
+ assign xcvr_qpll0clk_out = qpll0_clk;
1530
+ assign xcvr_qpll0refclk_out = qpll0_refclk;
1531
+ assign xcvr_qpll1lock_out = qpll1_lock;
1532
+ assign xcvr_qpll1clk_out = qpll1_clk;
1533
+ assign xcvr_qpll1refclk_out = qpll1_refclk;
1534
+
1262
1535
end else if (! GT_GTH) begin : xcvr_gty
1263
1536
1264
1537
eth_xcvr_gty_channel
0 commit comments