diff --git a/fuzzers/064-gtp-channel-conf/Makefile b/fuzzers/064-gtp-channel-conf/Makefile new file mode 100644 index 00000000..0ccb0b23 --- /dev/null +++ b/fuzzers/064-gtp-channel-conf/Makefile @@ -0,0 +1,31 @@ +# Copyright (C) 2017-2020 The Project X-Ray Authors. +# +# Use of this source code is governed by a ISC-style +# license that can be found in the LICENSE file or at +# https://opensource.org/licenses/ISC +# +# SPDX-License-Identifier: ISC +N ?= 40 + +include ../fuzzer.mk + +database: build/segbits_gtp_channelx.db + +build/segbits_gtp_channelx.rdb: $(SPECIMENS_OK) + ${XRAY_SEGMATCH} -o build/segbits_gtp_channelx.rdb $(addsuffix /segdata_gtp_channel_[0123].txt,$(SPECIMENS)) + +build/segbits_gtp_channelx.db: build/segbits_gtp_channelx.rdb + ${XRAY_DBFIXUP} --db-root build --zero-db bits.dbf --seg-fn-in $^ --seg-fn-out $@ + ${XRAY_MASKMERGE} build/mask_gtp_channelx.db $(addsuffix /segdata_gtp_channel_[0123].txt,$(SPECIMENS)) + +pushdb: + ${XRAY_MERGEDB} gtp_channel_0 build/segbits_gtp_channelx.db + ${XRAY_MERGEDB} gtp_channel_1 build/segbits_gtp_channelx.db + ${XRAY_MERGEDB} gtp_channel_2 build/segbits_gtp_channelx.db + ${XRAY_MERGEDB} gtp_channel_3 build/segbits_gtp_channelx.db + ${XRAY_MERGEDB} mask_gtp_channel_0 build/mask_gtp_channelx.db + ${XRAY_MERGEDB} mask_gtp_channel_1 build/mask_gtp_channelx.db + ${XRAY_MERGEDB} mask_gtp_channel_2 build/mask_gtp_channelx.db + ${XRAY_MERGEDB} mask_gtp_channel_3 build/mask_gtp_channelx.db + +.PHONY: database pushdb diff --git a/fuzzers/064-gtp-channel-conf/attrs.json b/fuzzers/064-gtp-channel-conf/attrs.json new file mode 100644 index 00000000..bca5f76d --- /dev/null +++ b/fuzzers/064-gtp-channel-conf/attrs.json @@ -0,0 +1,1167 @@ +{ + "ACJTAG_RESET": { + "type": "BIN", + "values": [1], + "digits": 1 + }, + "ACJTAG_DEBUG_MODE": { + "type": "BIN", + "values": [1], + "digits": 1 + }, + "ACJTAG_MODE": { + "type": "BIN", + "values": [1], + "digits": 1 + }, + "UCODEER_CLR": { + "type": "BIN", + "values": [1], + "digits": 1 + }, + "RXBUFRESET_TIME": { + "type": "BIN", + "values": [31], + "digits": 5 + }, + "RXCDRPHRESET_TIME": { + "type": "BIN", + "values": [31], + "digits": 5 + }, + "RXCDRFREQRESET_TIME": { + "type": "BIN", + "values": [31], + "digits": 5 + }, + "RXPMARESET_TIME": { + "type": "BIN", + "values": [31], + "digits": 5 + }, + "RXPCSRESET_TIME": { + "type": "BIN", + "values": [31], + "digits": 5 + }, + "RXLPMRESET_TIME": { + "type": "BIN", + "values": [127], + "digits": 7 + }, + "RXISCANRESET_TIME": { + "type": "BIN", + "values": [31], + "digits": 5 + }, + "RXSYNC_OVRD": { + "type": "BIN", + "values": [1], + "digits": 1 + }, + "TXSYNC_OVRD": { + "type": "BIN", + "values": [1], + "digits": 1 + }, + "RXSYNC_SKIP_DA": { + "type": "BIN", + "values": [1], + "digits": 1 + }, + "TXSYNC_SKIP_DA": { + "type": "BIN", + "values": [1], + "digits": 1 + }, + "TXSYNC_MULTILANE": { + "type": "BIN", + "values": [1], + "digits": 1 + }, + "RXSYNC_MULTILANE": { + "type": "BIN", + "values": [1], + "digits": 1 + }, + "TXPCSRESET_TIME": { + "type": "BIN", + "values": [31], + "digits": 5 + }, + "TXPMARESET_TIME": { + "type": "BIN", + "values": [31], + "digits": 5 + }, + "RX_XCLK_SEL": { + "type": "STR", + "values": ["RXREC", "RXUSR"], + "digits": 1 + }, + "RX_DATA_WIDTH": { + "type": "INT", + "values": [16, 20, 32, 40], + "encoding": [2, 3, 4, 5], + "digits": 3 + }, + "RX_CLK25_DIV": { + "type": "INT", + "values": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32], + "encoding": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31], + "digits": 5 + }, + "RX_CM_SEL": { + "type": "BIN", + "values": [3], + "digits": 2 + }, + "RXPRBS_ERR_LOOPBACK": { + "type": "BIN", + "values": [1], + "digits": 1 + }, + "SATA_BURST_SEQ_LEN": { + "type": "BIN", + "values": [15], + "digits": 4 + }, + "OUTREFCLK_SEL_INV": { + "type": "BIN", + "values": [3], + "digits": 2 + }, + "SATA_BURST_VAL": { + "type": "BIN", + "values": [7], + "digits": 3 + }, + "RXOOB_CFG": { + "type": "BIN", + "values": [127], + "digits": 7 + }, + "SAS_MIN_COM": { + "type": "INT", + "values": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63], + "encoding": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63], + "digits": 6 + }, + "SATA_MIN_BURST": { + "type": "INT", + "values": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61], + "encoding": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61], + "digits": 6 + }, + "SATA_EIDLE_VAL": { + "type": "BIN", + "values": [7], + "digits": 3 + }, + "SATA_MIN_WAKE": { + "type": "INT", + "values": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63], + "encoding": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63], + "digits": 6 + }, + "SATA_MIN_INIT": { + "type": "INT", + "values": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63], + "encoding": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63], + "digits": 6 + }, + "SAS_MAX_COM": { + "type": "INT", + "values": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 71, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127], + "encoding": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 71, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127], + "digits": 7 + }, + "SATA_MAX_BURST": { + "type": "INT", + "values": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63], + "encoding": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63], + "digits": 6 + }, + "SATA_MAX_WAKE": { + "type": "INT", + "values": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63], + "encoding": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63], + "digits": 6 + }, + "SATA_MAX_INIT": { + "type": "INT", + "values": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63], + "encoding": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63], + "digits": 6 + }, + "RXOSCALRESET_TIMEOUT": { + "type": "BIN", + "values": [31], + "digits": 5 + }, + "RXOSCALRESET_TIME": { + "type": "BIN", + "values": [31], + "digits": 5 + }, + "TRANS_TIME_RATE": { + "type": "BIN", + "values": [255], + "digits": 8 + }, + "PMA_LOOPBACK_CFG": { + "type": "BIN", + "values": [1], + "digits": 1 + }, + "TX_PREDRIVER_MODE": { + "type": "BIN", + "values": [1], + "digits": 1 + }, + "TX_EIDLE_DEASSERT_DELAY": { + "type": "BIN", + "values": [7], + "digits": 3 + }, + "TX_EIDLE_ASSERT_DELAY": { + "type": "BIN", + "values": [7], + "digits": 3 + }, + "TX_LOOPBACK_DRIVE_HIZ": { + "type": "BOOL", + "values": ["FALSE", "TRUE"], + "digits": 1 + }, + "TX_DRIVE_MODE": { + "type": "STR", + "values": ["DIRECT", "PIPE"], + "digits": 1 + }, + "PD_TRANS_TIME_TO_P2": { + "type": "BIN", + "values": [255], + "digits": 8 + }, + "PD_TRANS_TIME_NONE_P2": { + "type": "BIN", + "values": [255], + "digits": 8 + }, + "PD_TRANS_TIME_FROM_P2": { + "type": "BIN", + "values": [4095], + "digits": 12 + }, + "PCS_PCIE_EN": { + "type": "BOOL", + "values": ["FALSE", "TRUE"], + "digits": 1 + }, + "TXBUF_RESET_ON_RATE_CHANGE": { + "type": "BOOL", + "values": ["FALSE", "TRUE"], + "digits": 1 + }, + "TXBUF_EN": { + "type": "BOOL", + "values": ["FALSE", "TRUE"], + "digits": 1 + }, + "TXGEARBOX_EN": { + "type": "BOOL", + "values": ["FALSE", "TRUE"], + "digits": 1 + }, + "GEARBOX_MODE": { + "type": "BIN", + "values": [7], + "digits": 3 + }, + "RXLPM_HOLD_DURING_EIDLE": { + "type": "BIN", + "values": [1], + "digits": 1 + }, + "RX_OS_CFG": { + "type": "BIN", + "values": [8191], + "digits": 13 + }, + "RXLPM_LF_CFG": { + "type": "BIN", + "values": [3, 65535], + "digits": 16 + }, + "RXLPM_HF_CFG": { + "type": "BIN", + "values": [16383], + "digits": 14 + }, + "ES_QUALIFIER": { + "type": "BIN", + "values": [1208833588708967444709375], + "digits": 80 + }, + "ES_QUAL_MASK": { + "type": "BIN", + "values": [1208833588708967444709375], + "digits": 80 + }, + "ES_SDATA_MASK": { + "type": "BIN", + "values": [1208833588708967444709375], + "digits": 80 + }, + "ES_PRESCALE": { + "type": "BIN", + "values": [31], + "digits": 5 + }, + "ES_VERT_OFFSET": { + "type": "BIN", + "values": [511], + "digits": 9 + }, + "ES_HORZ_OFFSET": { + "type": "BIN", + "values": [4095], + "digits": 12 + }, + "RX_DISPERR_SEQ_MATCH": { + "type": "BOOL", + "values": ["FALSE", "TRUE"], + "digits": 1 + }, + "DEC_PCOMMA_DETECT": { + "type": "BOOL", + "values": ["FALSE", "TRUE"], + "digits": 1 + }, + "DEC_MCOMMA_DETECT": { + "type": "BOOL", + "values": ["FALSE", "TRUE"], + "digits": 1 + }, + "DEC_VALID_COMMA_ONLY": { + "type": "BOOL", + "values": ["FALSE", "TRUE"], + "digits": 1 + }, + "ES_ERRDET_EN": { + "type": "BOOL", + "values": ["FALSE", "TRUE"], + "digits": 1 + }, + "ES_EYE_SCAN_EN": { + "type": "BOOL", + "values": ["FALSE", "TRUE"], + "digits": 1 + }, + "ES_CONTROL": { + "type": "BIN", + "values": [63], + "digits": 6 + }, + "ALIGN_COMMA_ENABLE": { + "type": "BIN", + "values": [1023], + "digits": 10 + }, + "ALIGN_MCOMMA_VALUE": { + "type": "BIN", + "values": [1023], + "digits": 10 + }, + "RXSLIDE_MODE": { + "type": "STR", + "values": ["OFF", "AUTO", "PCS", "PMA"], + "digits": 2 + }, + "ALIGN_PCOMMA_VALUE": { + "type": "BIN", + "values": [1023], + "digits": 10 + }, + "ALIGN_COMMA_WORD": { + "type": "INT", + "values": [1, 2], + "encoding": [1, 2], + "digits": 2 + }, + "RX_SIG_VALID_DLY": { + "type": "INT", + "values": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32], + "encoding": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31], + "digits": 5 + }, + "ALIGN_PCOMMA_DET": { + "type": "BOOL", + "values": ["FALSE", "TRUE"], + "digits": 1 + }, + "ALIGN_MCOMMA_DET": { + "type": "BOOL", + "values": ["FALSE", "TRUE"], + "digits": 1 + }, + "SHOW_REALIGN_COMMA": { + "type": "BOOL", + "values": ["FALSE", "TRUE"], + "digits": 1 + }, + "ALIGN_COMMA_DOUBLE": { + "type": "BOOL", + "values": ["FALSE", "TRUE"], + "digits": 1 + }, + "RXSLIDE_AUTO_WAIT": { + "type": "INT", + "values": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15], + "encoding": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15], + "digits": 4 + }, + "CLK_CORRECT_USE": { + "type": "BOOL", + "values": ["FALSE", "TRUE"], + "digits": 1 + }, + "CLK_COR_SEQ_1_ENABLE": { + "type": "BIN", + "values": [15], + "digits": 4 + }, + "CLK_COR_SEQ_1_1": { + "type": "BIN", + "values": [1023], + "digits": 10 + }, + "CLK_COR_MAX_LAT": { + "type": "INT", + "values": [6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60], + "encoding": [6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60], + "digits": 6 + }, + "CLK_COR_SEQ_1_2": { + "type": "BIN", + "values": [1023], + "digits": 10 + }, + "CLK_COR_MIN_LAT": { + "type": "INT", + "values": [4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60], + "encoding": [4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60], + "digits": 6 + }, + "CLK_COR_SEQ_1_3": { + "type": "BIN", + "values": [1023], + "digits": 10 + }, + "CLK_COR_REPEAT_WAIT": { + "type": "INT", + "values": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31], + "encoding": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31], + "digits": 5 + }, + "CLK_COR_SEQ_1_4": { + "type": "BIN", + "values": [1023], + "digits": 10 + }, + "CLK_COR_SEQ_2_USE": { + "type": "BOOL", + "values": ["FALSE", "TRUE"], + "digits": 1 + }, + "CLK_COR_SEQ_2_ENABLE": { + "type": "BIN", + "values": [15], + "digits": 4 + }, + "CLK_COR_SEQ_2_1": { + "type": "BIN", + "values": [1023], + "digits": 10 + }, + "CLK_COR_KEEP_IDLE": { + "type": "BOOL", + "values": ["FALSE", "TRUE"], + "digits": 1 + }, + "CLK_COR_PRECEDENCE": { + "type": "BOOL", + "values": ["FALSE", "TRUE"], + "digits": 1 + }, + "CLK_COR_SEQ_LEN": { + "type": "INT", + "values": [1, 2, 3, 4], + "encoding": [0, 1, 2, 3], + "digits": 2 + }, + "CLK_COR_SEQ_2_2": { + "type": "BIN", + "values": [1023], + "digits": 10 + }, + "CLK_COR_SEQ_2_3": { + "type": "BIN", + "values": [1023], + "digits": 10 + }, + "RXGEARBOX_EN": { + "type": "BOOL", + "values": ["FALSE", "TRUE"], + "digits": 1 + }, + "CLK_COR_SEQ_2_4": { + "type": "BIN", + "values": [1023], + "digits": 10 + }, + "CHAN_BOND_SEQ_1_ENABLE": { + "type": "BIN", + "values": [15], + "digits": 4 + }, + "CHAN_BOND_SEQ_1_1": { + "type": "BIN", + "values": [1023], + "digits": 10 + }, + "CHAN_BOND_SEQ_LEN": { + "type": "INT", + "values": [1, 2, 3, 4], + "encoding": [0, 1, 2, 3], + "digits": 2 + }, + "CHAN_BOND_SEQ_1_2": { + "type": "BIN", + "values": [1023], + "digits": 10 + }, + "CHAN_BOND_KEEP_ALIGN": { + "type": "BOOL", + "values": ["FALSE", "TRUE"], + "digits": 1 + }, + "CHAN_BOND_SEQ_1_3": { + "type": "BIN", + "values": [1023], + "digits": 10 + }, + "CHAN_BOND_SEQ_1_4": { + "type": "BIN", + "values": [1023], + "digits": 10 + }, + "CHAN_BOND_SEQ_2_ENABLE": { + "type": "BIN", + "values": [15], + "digits": 4 + }, + "CHAN_BOND_SEQ_2_USE": { + "type": "BOOL", + "values": ["FALSE", "TRUE"], + "digits": 1 + }, + "CHAN_BOND_SEQ_2_1": { + "type": "BIN", + "values": [1023], + "digits": 10 + }, + "FTS_LANE_DESKEW_CFG": { + "type": "BIN", + "values": [15], + "digits": 4 + }, + "FTS_LANE_DESKEW_EN": { + "type": "BOOL", + "values": ["FALSE", "TRUE"], + "digits": 1 + }, + "CHAN_BOND_SEQ_2_2": { + "type": "BIN", + "values": [1023], + "digits": 10 + }, + "FTS_DESKEW_SEQ_ENABLE": { + "type": "BIN", + "values": [15], + "digits": 4 + }, + "CBCC_DATA_SOURCE_SEL": { + "type": "STR", + "values": ["ENCODED", "DECODED"], + "digits": 1 + }, + "CHAN_BOND_SEQ_2_3": { + "type": "BIN", + "values": [1023], + "digits": 10 + }, + "CHAN_BOND_MAX_SKEW": { + "type": "INT", + "values": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14], + "encoding": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14], + "digits": 4 + }, + "CHAN_BOND_SEQ_2_4": { + "type": "BIN", + "values": [1023], + "digits": 10 + }, + "RXDLY_TAP_CFG": { + "type": "BIN", + "values": [65535], + "digits": 16 + }, + "RXDLY_CFG": { + "type": "BIN", + "values": [65535], + "digits": 16 + }, + "RXPH_MONITOR_SEL": { + "type": "BIN", + "values": [31], + "digits": 5 + }, + "RX_DDI_SEL": { + "type": "BIN", + "values": [63], + "digits": 6 + }, + "TX_XCLK_SEL": { + "type": "STR", + "values": ["TXOUT", "TXUSR"], + "digits": 1 + }, + "RXBUF_EN": { + "type": "BOOL", + "values": ["FALSE", "TRUE"], + "digits": 1 + }, + "TXOOB_CFG": { + "type": "BIN", + "values": [1], + "digits": 1 + }, + "LOOPBACK_CFG": { + "type": "BIN", + "values": [1], + "digits": 1 + }, + "TXPI_CFG5": { + "type": "BIN", + "values": [7], + "digits": 3 + }, + "TXPI_CFG4": { + "type": "BIN", + "values": [1], + "digits": 1 + }, + "TXPI_CFG3": { + "type": "BIN", + "values": [1], + "digits": 1 + }, + "TXPI_CFG2": { + "type": "BIN", + "values": [3], + "digits": 2 + }, + "TXPI_CFG1": { + "type": "BIN", + "values": [3], + "digits": 2 + }, + "TXPI_CFG0": { + "type": "BIN", + "values": [3], + "digits": 2 + }, + "SATA_PLL_CFG": { + "type": "STR", + "values": ["VCO_3000MHZ", "VCO_1500MHZ", "VCO_750MHZ"], + "digits": 2 + }, + "TXPHDLY_CFG": { + "type": "BIN", + "values": [16711425], + "digits": 24 + }, + "TXDLY_CFG": { + "type": "BIN", + "values": [65535], + "digits": 16 + }, + "TXDLY_TAP_CFG": { + "type": "BIN", + "values": [65535], + "digits": 16 + }, + "TXPH_CFG": { + "type": "BIN", + "values": [65535], + "digits": 16 + }, + "TXPH_MONITOR_SEL": { + "type": "BIN", + "values": [31], + "digits": 5 + }, + "RX_BIAS_CFG": { + "type": "BIN", + "values": [65535], + "digits": 16 + }, + "RXOOB_CLK_CFG": { + "type": "STR", + "values": ["PMA", "FABRIC"], + "digits": 1 + }, + "TX_CLKMUX_EN": { + "type": "BIN", + "values": [1], + "digits": 1 + }, + "RX_CLKMUX_EN": { + "type": "BIN", + "values": [1], + "digits": 1 + }, + "TERM_RCAL_CFG": { + "type": "BIN", + "values": [32767], + "digits": 15 + }, + "TERM_RCAL_OVRD": { + "type": "BIN", + "values": [7], + "digits": 3 + }, + "TX_CLK25_DIV": { + "type": "INT", + "values": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32], + "encoding": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31], + "digits": 5 + }, + "PMA_RSV5": { + "type": "BIN", + "values": [1], + "digits": 1 + }, + "PMA_RSV4": { + "type": "BIN", + "values": [15], + "digits": 4 + }, + "TX_DATA_WIDTH": { + "type": "INT", + "values": [16, 20, 32, 40], + "encoding": [2, 3, 4, 5], + "digits": 3 + }, + "PCS_RSVD_ATTR": { + "type": "BIN", + "values": [281462092005375], + "digits": 48 + }, + "TX_MARGIN_FULL_1": { + "type": "BIN", + "values": [127], + "digits": 7 + }, + "TX_MARGIN_FULL_0": { + "type": "BIN", + "values": [127], + "digits": 7 + }, + "TX_MARGIN_FULL_3": { + "type": "BIN", + "values": [127], + "digits": 7 + }, + "TX_MARGIN_FULL_2": { + "type": "BIN", + "values": [127], + "digits": 7 + }, + "TX_MARGIN_LOW_0": { + "type": "BIN", + "values": [127], + "digits": 7 + }, + "TX_MARGIN_FULL_4": { + "type": "BIN", + "values": [127], + "digits": 7 + }, + "TX_MARGIN_LOW_2": { + "type": "BIN", + "values": [127], + "digits": 7 + }, + "TX_MARGIN_LOW_1": { + "type": "BIN", + "values": [127], + "digits": 7 + }, + "TX_MARGIN_LOW_4": { + "type": "BIN", + "values": [127], + "digits": 7 + }, + "TX_MARGIN_LOW_3": { + "type": "BIN", + "values": [127], + "digits": 7 + }, + "TX_DEEMPH1": { + "type": "BIN", + "values": [63], + "digits": 6 + }, + "TX_DEEMPH0": { + "type": "BIN", + "values": [63], + "digits": 6 + }, + "TX_RXDETECT_REF": { + "type": "BIN", + "values": [7], + "digits": 3 + }, + "TX_MAINCURSOR_SEL": { + "type": "BIN", + "values": [1], + "digits": 1 + }, + "PMA_RSV3": { + "type": "BIN", + "values": [3], + "digits": 2 + }, + "PMA_RSV7": { + "type": "BIN", + "values": [1], + "digits": 1 + }, + "PMA_RSV6": { + "type": "BIN", + "values": [1], + "digits": 1 + }, + "TX_RXDETECT_CFG": { + "type": "BIN", + "values": [16383], + "digits": 14 + }, + "CLK_COMMON_SWING": { + "type": "BIN", + "values": [1], + "digits": 1 + }, + "RX_CM_TRIM": { + "type": "BIN", + "values": [15], + "digits": 4 + }, + "RXLPM_CFG1": { + "type": "BIN", + "values": [1], + "digits": 1 + }, + "RXLPM_CFG": { + "type": "BIN", + "values": [15], + "digits": 4 + }, + "PMA_RSV2": { + "type": "BIN", + "values": [4294836225], + "digits": 32 + }, + "DMONITOR_CFG": { + "type": "BIN", + "values": [16711425], + "digits": 24 + }, + "RXLPM_BIAS_STARTUP_DISABLE": { + "type": "BIN", + "values": [1], + "digits": 1 + }, + "RXLPM_HF_CFG3": { + "type": "BIN", + "values": [15], + "digits": 4 + }, + "TXOUT_DIV": { + "type": "INT", + "values": [1, 2, 4, 8], + "encoding": [0, 1, 2, 3], + "digits": 3 + }, + "RXOUT_DIV": { + "type": "INT", + "values": [1, 2, 4, 8], + "encoding": [0, 1, 2, 3], + "digits": 3 + }, + "CFOK_CFG": { + "type": "BIN", + "values": [8791529752575], + "digits": 43 + }, + "CFOK_CFG3": { + "type": "BIN", + "values": [127], + "digits": 7 + }, + "RXPI_CFG0": { + "type": "BIN", + "values": [7], + "digits": 3 + }, + "RXLPM_CM_CFG": { + "type": "BIN", + "values": [1], + "digits": 1 + }, + "CFOK_CFG5": { + "type": "BIN", + "values": [3], + "digits": 2 + }, + "RXLPM_LF_CFG2": { + "type": "BIN", + "values": [31], + "digits": 5 + }, + "RXLPM_HF_CFG2": { + "type": "BIN", + "values": [31], + "digits": 5 + }, + "RXLPM_IPCM_CFG": { + "type": "BIN", + "values": [1], + "digits": 1 + }, + "RXLPM_INCM_CFG": { + "type": "BIN", + "values": [1], + "digits": 1 + }, + "CFOK_CFG4": { + "type": "BIN", + "values": [1], + "digits": 1 + }, + "CFOK_CFG6": { + "type": "BIN", + "values": [15], + "digits": 4 + }, + "RXLPM_GC_CFG": { + "type": "BIN", + "values": [511], + "digits": 9 + }, + "RXLPM_GC_CFG2": { + "type": "BIN", + "values": [7], + "digits": 3 + }, + "RXPI_CFG1": { + "type": "BIN", + "values": [1], + "digits": 1 + }, + "RXPI_CFG2": { + "type": "BIN", + "values": [1], + "digits": 1 + }, + "RXLPM_OSINT_CFG": { + "type": "BIN", + "values": [7], + "digits": 3 + }, + "ES_CLK_PHASE_SEL": { + "type": "BIN", + "values": [1], + "digits": 1 + }, + "USE_PCS_CLK_PHASE_SEL": { + "type": "BIN", + "values": [1], + "digits": 1 + }, + "CFOK_CFG2": { + "type": "BIN", + "values": [127], + "digits": 7 + }, + "ADAPT_CFG0": { + "type": "BIN", + "values": [983025], + "digits": 20 + }, + "TXPI_PPM_CFG": { + "type": "BIN", + "values": [255], + "digits": 8 + }, + "TXPI_GREY_SEL": { + "type": "BIN", + "values": [1], + "digits": 1 + }, + "TXPI_INVSTROBE_SEL": { + "type": "BIN", + "values": [1], + "digits": 1 + }, + "TXPI_PPMCLK_SEL": { + "type": "STR", + "values": ["TXUSRCLK", "TXUSRCLK2"], + "digits": 1 + }, + "TXPI_SYNFREQ_PPM": { + "type": "BIN", + "values": [7], + "digits": 3 + }, + "TST_RSV": { + "type": "BIN", + "values": [4294836225], + "digits": 32 + }, + "PMA_RSV": { + "type": "BIN", + "values": [4294836225], + "digits": 32 + }, + "RX_BUFFER_CFG": { + "type": "BIN", + "values": [63], + "digits": 6 + }, + "RXBUF_THRESH_OVRD": { + "type": "BOOL", + "values": ["FALSE", "TRUE"], + "digits": 1 + }, + "RXBUF_RESET_ON_EIDLE": { + "type": "BOOL", + "values": ["FALSE", "TRUE"], + "digits": 1 + }, + "RXBUF_THRESH_UNDFLW": { + "type": "INT", + "values": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63], + "encoding": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63], + "digits": 6 + }, + "RXBUF_EIDLE_HI_CNT": { + "type": "BIN", + "values": [15], + "digits": 4 + }, + "RXBUF_EIDLE_LO_CNT": { + "type": "BIN", + "values": [15], + "digits": 4 + }, + "RXBUF_ADDR_MODE": { + "type": "STR", + "values": ["FULL", "FAST"], + "digits": 1 + }, + "RXBUF_THRESH_OVFLW": { + "type": "INT", + "values": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63], + "encoding": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63], + "digits": 6 + }, + "RX_DEFER_RESET_BUF_EN": { + "type": "BOOL", + "values": ["FALSE", "TRUE"], + "digits": 1 + }, + "RXBUF_RESET_ON_COMMAALIGN": { + "type": "BOOL", + "values": ["FALSE", "TRUE"], + "digits": 1 + }, + "RXBUF_RESET_ON_RATE_CHANGE": { + "type": "BOOL", + "values": ["FALSE", "TRUE"], + "digits": 1 + }, + "RXBUF_RESET_ON_CB_CHANGE": { + "type": "BOOL", + "values": ["FALSE", "TRUE"], + "digits": 1 + }, + "TXDLY_LCFG": { + "type": "BIN", + "values": [511], + "digits": 9 + }, + "RXDLY_LCFG": { + "type": "BIN", + "values": [511], + "digits": 9 + }, + "RXPH_CFG": { + "type": "BIN", + "values": [16711425], + "digits": 24 + }, + "RXPHDLY_CFG": { + "type": "BIN", + "values": [16711425], + "digits": 24 + }, + "RX_DEBUG_CFG": { + "type": "BIN", + "values": [16383], + "digits": 14 + }, + "ES_PMA_CFG": { + "type": "BIN", + "values": [1023], + "digits": 10 + }, + "RXCDR_PH_RESET_ON_EIDLE": { + "type": "BIN", + "values": [1], + "digits": 1 + }, + "RXCDR_FR_RESET_ON_EIDLE": { + "type": "BIN", + "values": [1], + "digits": 1 + }, + "RXCDR_HOLD_DURING_EIDLE": { + "type": "BIN", + "values": [1], + "digits": 1 + }, + "RXCDR_LOCK_CFG": { + "type": "BIN", + "values": [63], + "digits": 6 + }, + "RXCDR_CFG": { + "type": "BIN", + "values": [8461835120962772112965625], + "digits": 83 + } +} \ No newline at end of file diff --git a/fuzzers/064-gtp-channel-conf/bits.dbf b/fuzzers/064-gtp-channel-conf/bits.dbf new file mode 100644 index 00000000..e69de29b diff --git a/fuzzers/064-gtp-channel-conf/generate.py b/fuzzers/064-gtp-channel-conf/generate.py new file mode 100644 index 00000000..194efd98 --- /dev/null +++ b/fuzzers/064-gtp-channel-conf/generate.py @@ -0,0 +1,95 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +# +# Copyright (C) 2017-2020 The Project X-Ray Authors. +# +# Use of this source code is governed by a ISC-style +# license that can be found in the LICENSE file or at +# https://opensource.org/licenses/ISC +# +# SPDX-License-Identifier: ISC + +import json +import os +from enum import Enum + +from prjxray.segmaker import Segmaker + +INT = "INT" +BIN = "BIN" +BOOL = "BOOL" +STR = "STR" + + +def bitfilter(frame, bit): + # Filter out interconnect bits. + if frame not in [28, 29, 30, 31]: + return False + + return True + + +def main(): + segmk = Segmaker("design.bits") + + fuz_dir = os.getenv("FUZDIR", None) + assert fuz_dir + with open(os.path.join(fuz_dir, "attrs.json"), "r") as attr_file: + attrs = json.load(attr_file) + + print("Loading tags") + with open("params.json") as f: + params = json.load(f) + + site = params["site"] + in_use = params["IN_USE"] + + segmk.add_site_tag(site, "IN_USE", in_use) + + for param, param_info in attrs.items(): + value = params[param] + param_type = param_info["type"] + param_digits = param_info["digits"] + param_values = param_info["values"] + + if param_type == INT: + param_encodings = param_info["encoding"] + param_encoding = param_encodings[param_values.index(value)] + bitstr = [ + int(x) for x in "{value:0{digits}b}".format( + value=param_encoding, digits=param_digits)[::-1] + ] + + for i in range(param_digits): + segmk.add_site_tag(site, '%s[%u]' % (param, i), bitstr[i]) + elif param_type == BIN: + bitstr = [ + int(x) for x in "{value:0{digits}b}".format( + value=value, digits=param_digits)[::-1] + ] + + for i in range(param_digits): + segmk.add_site_tag(site, "%s[%u]" % (param, i), bitstr[i]) + elif param_type == BOOL: + segmk.add_site_tag(site, param, value == "TRUE") + else: + assert param_type == STR + + for param_value in param_values: + segmk.add_site_tag(site, "{}.{}".format(param, param_value), value == param_value) + + for param, invert in [("TXUSRCLK", 1), ("TXUSRCLK2", 1), ("TXPHDLYTSTCLK", 1), + ("SIGVALIDCLK", 1), ("RXUSRCLK", 1), ("RXUSRCLK2", 1), + ("DRPCLK", 1), ("DMONITORCLK", 1), ("CLKRSVD0", 1), + ("CLKRSVD1", 1)]: + if invert: + segmk.add_site_tag(site, "ZINV_" + param, 1 ^ params[param]) + else: + segmk.add_site_tag(site, "INV_" + param, params[param]) + + segmk.compile(bitfilter=bitfilter) + segmk.write() + + +if __name__ == '__main__': + main() diff --git a/fuzzers/064-gtp-channel-conf/generate.tcl b/fuzzers/064-gtp-channel-conf/generate.tcl new file mode 100644 index 00000000..338b4906 --- /dev/null +++ b/fuzzers/064-gtp-channel-conf/generate.tcl @@ -0,0 +1,29 @@ +# Copyright (C) 2017-2020 The Project X-Ray Authors +# +# Use of this source code is governed by a ISC-style +# license that can be found in the LICENSE file or at +# https://opensource.org/licenses/ISC +# +# SPDX-License-Identifier: ISC +proc run {} { + create_project -force -part $::env(XRAY_PART) design design + read_verilog top.v + synth_design -top top + + set_property CFGBVS VCCO [current_design] + set_property CONFIG_VOLTAGE 3.3 [current_design] + set_property BITSTREAM.GENERAL.PERFRAMECRC YES [current_design] + + set_property IS_ENABLED 0 [get_drc_checks {NSTD-1}] + set_property IS_ENABLED 0 [get_drc_checks {UCIO-1}] + set_property IS_ENABLED 0 [get_drc_checks {REQP-48}] + set_property IS_ENABLED 0 [get_drc_checks {REQP-47}] + + place_design + route_design + + write_checkpoint -force design.dcp + write_bitstream -force design.bit +} + +run diff --git a/fuzzers/064-gtp-channel-conf/top.py b/fuzzers/064-gtp-channel-conf/top.py new file mode 100644 index 00000000..f90e385b --- /dev/null +++ b/fuzzers/064-gtp-channel-conf/top.py @@ -0,0 +1,119 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +# +# Copyright (C) 2017-2020 The Project X-Ray Authors. +# +# Use of this source code is governed by a ISC-style +# license that can be found in the LICENSE file or at +# https://opensource.org/licenses/ISC +# +# SPDX-License-Identifier: ISC + +import json +import os +import random +from collections import namedtuple + +random.seed(int(os.getenv("SEED"), 16)) +from prjxray import util +from prjxray import verilog +from prjxray.db import Database + +INT = "INT" +BIN = "BIN" +BOOL = "BOOL" +STR = "STR" + + +def gen_sites(): + db = Database(util.get_db_root(), util.get_part()) + grid = db.grid() + for tile_name in sorted(grid.tiles()): + loc = grid.loc_of_tilename(tile_name) + gridinfo = grid.gridinfo_at_loc(loc) + + if "GTP_CHANNEL" not in gridinfo.tile_type: + continue + + for site_name, site_type in gridinfo.sites.items(): + if site_type != "GTPE2_CHANNEL": + continue + + return site_name + + +def main(): + print( + ''' +module top( + input wire in, + output wire out +); + +assign out = in; +''') + + site_name = gen_sites() + + params = dict() + params['site'] = site_name + + verilog_attr = "" + + verilog_attr = "#(" + + fuz_dir = os.getenv("FUZDIR", None) + assert fuz_dir + with open(os.path.join(fuz_dir, "attrs.json"), "r") as attrs_file: + attrs = json.load(attrs_file) + + in_use = bool(random.randint(0, 9)) + params["IN_USE"] = in_use + + for param, param_info in attrs.items(): + param_type = param_info["type"] + param_values = param_info["values"] + param_digits = param_info["digits"] + + if param_type == INT: + value = random.choice(param_values) + value_str = value + elif param_type == BIN: + value = random.randint(0, param_values[0]) + value_str = "{digits}'b{value:0{digits}b}".format( + value=value, digits=param_digits) + elif param_type in [BOOL, STR]: + value = random.choice(param_values) + value_str = verilog.quote(value) + + params[param] = value + + verilog_attr += """ + .{}({}),""".format(param, value_str) + + for param in ["TXUSRCLK", "TXUSRCLK2", "TXPHDLYTSTCLK", + "SIGVALIDCLK", "RXUSRCLK", "RXUSRCLK2", + "DRPCLK", "DMONITORCLK", "CLKRSVD0", "CLKRSVD1"]: + is_inverted = random.randint(0, 1) + + params[param] = is_inverted + + verilog_attr += """ + .IS_{}_INVERTED({}),""".format(param, is_inverted) + + verilog_attr = verilog_attr.rstrip(",") + verilog_attr += "\n)" + + print("(* KEEP, DONT_TOUCH, LOC=\"{}\" *)".format(site_name)) + print( + """GTPE2_CHANNEL {} gtp_channel (); + """.format(verilog_attr)) + + print("endmodule") + + with open('params.json', 'w') as f: + json.dump(params, f, indent=2) + + +if __name__ == '__main__': + main()