From 4620af4639e668b664d2bd712351c2b691a32676 Mon Sep 17 00:00:00 2001 From: Jan Kowalewski Date: Tue, 19 Jan 2021 13:31:09 +0100 Subject: [PATCH 1/7] 064-gtp-channel: enable gtp_channel in mergedb Signed-off-by: Jan Kowalewski --- utils/mergedb.sh | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/utils/mergedb.sh b/utils/mergedb.sh index 92d32017..9e144e6a 100755 --- a/utils/mergedb.sh +++ b/utils/mergedb.sh @@ -169,6 +169,18 @@ case "$1" in gtp_common_mid_right) cp "$2" "$tmp1" ;; + gtp_channel_0) + sed < "$2" > "$tmp1" -e 's/^GTP_CHANNEL\./GTP_CHANNEL_0./' ;; + + gtp_channel_1) + sed < "$2" > "$tmp1" -e 's/^GTP_CHANNEL\./GTP_CHANNEL_1./' ;; + + gtp_channel_2) + sed < "$2" > "$tmp1" -e 's/^GTP_CHANNEL\./GTP_CHANNEL_2./' ;; + + gtp_channel_3) + sed < "$2" > "$tmp1" -e 's/^GTP_CHANNEL\./GTP_CHANNEL_3./' ;; + mask_*) db=$XRAY_DATABASE_DIR/$XRAY_DATABASE/$1.db ismask=true From 777d8ea42dab8143fd4a28b6e0b67033d9253592 Mon Sep 17 00:00:00 2001 From: Jan Kowalewski Date: Tue, 19 Jan 2021 13:31:52 +0100 Subject: [PATCH 2/7] 064-gtp-channel: add gtp_channel fuzzer Signed-off-by: Jan Kowalewski --- fuzzers/064-gtp-channel-conf/Makefile | 31 + fuzzers/064-gtp-channel-conf/attrs.json | 1167 +++++++++++++++++++++ fuzzers/064-gtp-channel-conf/bits.dbf | 0 fuzzers/064-gtp-channel-conf/generate.py | 95 ++ fuzzers/064-gtp-channel-conf/generate.tcl | 29 + fuzzers/064-gtp-channel-conf/top.py | 119 +++ 6 files changed, 1441 insertions(+) create mode 100644 fuzzers/064-gtp-channel-conf/Makefile create mode 100644 fuzzers/064-gtp-channel-conf/attrs.json create mode 100644 fuzzers/064-gtp-channel-conf/bits.dbf create mode 100644 fuzzers/064-gtp-channel-conf/generate.py create mode 100644 fuzzers/064-gtp-channel-conf/generate.tcl create mode 100644 fuzzers/064-gtp-channel-conf/top.py 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() From 9662a488604add4237ed4361e1551ea1d329b15c Mon Sep 17 00:00:00 2001 From: Jan Kowalewski Date: Tue, 19 Jan 2021 13:43:36 +0100 Subject: [PATCH 3/7] 064-gtp-channel: add GTP_CHANNEL to segmaker Signed-off-by: Jan Kowalewski --- prjxray/segmaker.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/prjxray/segmaker.py b/prjxray/segmaker.py index 19fc844e..69397761 100644 --- a/prjxray/segmaker.py +++ b/prjxray/segmaker.py @@ -375,6 +375,8 @@ class Segmaker: tile_type_norm = 'IOI3' if tile_type_norm in ['CMT_TOP_L_LOWER_B', 'CMT_TOP_R_LOWER_B']: tile_type_norm = 'CMT_LOWER_B' + if 'GTP_CHANNEL' in tile_type_norm: + tile_type_norm = 'GTP_CHANNEL' # ignore dummy tiles (ex: VBRK) if len(tiledata['bits']) == 0: From 701433096bc7fe44d8edd7bbfabfb26d9ffbdd9d Mon Sep 17 00:00:00 2001 From: Jan Kowalewski Date: Tue, 19 Jan 2021 13:43:57 +0100 Subject: [PATCH 4/7] 064-gtp-channel: add gtp_channel fuzzer to Makefile Signed-off-by: Jan Kowalewski --- fuzzers/Makefile | 1 + 1 file changed, 1 insertion(+) diff --git a/fuzzers/Makefile b/fuzzers/Makefile index d33bc69f..0debe850 100644 --- a/fuzzers/Makefile +++ b/fuzzers/Makefile @@ -159,6 +159,7 @@ endif ifeq ($(XRAY_DATABASE),artix7) $(eval $(call fuzzer,061-pcie-conf,005-tilegrid,all)) $(eval $(call fuzzer,063-gtp-common-conf,005-tilegrid,part)) +$(eval $(call fuzzer,064-gtp-channel-conf,005-tilegrid,all)) endif endif endif From 96d3b3de690332f9a2d7d14cb70e311161052468 Mon Sep 17 00:00:00 2001 From: Jan Kowalewski Date: Tue, 19 Jan 2021 14:32:52 +0100 Subject: [PATCH 5/7] 064-gtp-channel: add gtp_channel_mid support Signed-off-by: Jan Kowalewski --- fuzzers/064-gtp-channel-conf/Makefile | 54 ++++++--- fuzzers/064-gtp-channel-conf/generate.py | 126 ++++++++++++++------- fuzzers/064-gtp-channel-conf/generate.tcl | 1 + fuzzers/064-gtp-channel-conf/pushdb.sh | 40 +++++++ fuzzers/064-gtp-channel-conf/top.py | 127 ++++++++++++++-------- fuzzers/Makefile | 2 +- 6 files changed, 247 insertions(+), 103 deletions(-) create mode 100644 fuzzers/064-gtp-channel-conf/pushdb.sh diff --git a/fuzzers/064-gtp-channel-conf/Makefile b/fuzzers/064-gtp-channel-conf/Makefile index 0ccb0b23..058b3f34 100644 --- a/fuzzers/064-gtp-channel-conf/Makefile +++ b/fuzzers/064-gtp-channel-conf/Makefile @@ -5,27 +5,49 @@ # https://opensource.org/licenses/ISC # # SPDX-License-Identifier: ISC -N ?= 40 -include ../fuzzer.mk +SHELL = bash -database: build/segbits_gtp_channelx.db +N ?= 10 -build/segbits_gtp_channelx.rdb: $(SPECIMENS_OK) - ${XRAY_SEGMATCH} -o build/segbits_gtp_channelx.rdb $(addsuffix /segdata_gtp_channel_[0123].txt,$(SPECIMENS)) +BUILD_DIR = build_${XRAY_PART} -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)) +SPECIMENS := $(addprefix ${BUILD_DIR}/specimen_,$(shell seq -f '%03.0f' $(N))) +SPECIMENS_OK := $(addsuffix /OK,$(SPECIMENS)) +FUZDIR ?= ${PWD} + + +all: database + +# generate.sh / top_generate.sh call make, hence the command must +# have a + before it. +$(SPECIMENS_OK): $(SPECIMENS_DEPS) + mkdir -p ${BUILD_DIR} + bash ${XRAY_DIR}/utils/top_generate.sh $(subst /OK,,$@) + +run: + $(MAKE) clean + $(MAKE) database + $(MAKE) pushdb + touch run.${XRAY_PART}.ok + +clean: + rm -rf ${BUILD_DIR} run.${XRAY_PART}.ok + +.PHONY: all run clean + +database: ${BUILD_DIR}/segbits_gtp_channelx.db + +${BUILD_DIR}/segbits_gtp_channelx.rdb: $(SPECIMENS_OK) + ${XRAY_SEGMATCH} -o ${BUILD_DIR}/segbits_gtp_channelx.rdb $$(find $(SPECIMENS) -name "segdata_gtp_channel_[0123]*") + +${BUILD_DIR}/segbits_gtp_channelx.db: ${BUILD_DIR}/segbits_gtp_channelx.rdb + ${XRAY_DBFIXUP} --db-root ${BUILD_DIR} --zero-db bits.dbf \ + --seg-fn-in ${BUILD_DIR}/segbits_gtp_channelx.rdb \ + --seg-fn-out ${BUILD_DIR}/segbits_gtp_channelx.db + ${XRAY_MASKMERGE} ${BUILD_DIR}/mask_gtp_channelx.db $$(find $(SPECIMENS) -name "segdata_gtp_channel_[0123]*") 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 + BUILD_DIR=$(BUILD_DIR) source pushdb.sh .PHONY: database pushdb diff --git a/fuzzers/064-gtp-channel-conf/generate.py b/fuzzers/064-gtp-channel-conf/generate.py index 194efd98..45655e81 100644 --- a/fuzzers/064-gtp-channel-conf/generate.py +++ b/fuzzers/064-gtp-channel-conf/generate.py @@ -21,7 +21,7 @@ BOOL = "BOOL" STR = "STR" -def bitfilter(frame, bit): +def bitfilter_gtp_channel_x(frame, bit): # Filter out interconnect bits. if frame not in [28, 29, 30, 31]: return False @@ -29,6 +29,14 @@ def bitfilter(frame, bit): return True +def bitfilter_gtp_channel_x_mid(frame, bit): + # Filter out interconnect bits. + if frame not in [0, 1, 2, 3]: + return False + + return True + + def main(): segmk = Segmaker("design.bits") @@ -39,53 +47,91 @@ def main(): print("Loading tags") with open("params.json") as f: - params = json.load(f) + primitives_list = json.load(f) - site = params["site"] - in_use = params["IN_USE"] + for primitive in primitives_list: + tile_type = primitive["tile_type"] + params_list = primitive["params"] - segmk.add_site_tag(site, "IN_USE", in_use) + for params in params_list: + site = params["site"] - 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 "GTPE2_CHANNEL" not in site: + continue - 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] - ] + in_use = params["IN_USE"] - 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] - ] + segmk.add_site_tag(site, "IN_USE", in_use) - 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 + if 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"] - for param_value in param_values: - segmk.add_site_tag(site, "{}.{}".format(param, param_value), value == param_value) + 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 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]) + 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 in ["TXUSRCLK", "TXUSRCLK2", "TXPHDLYTSTCLK", + "SIGVALIDCLK", "RXUSRCLK", "RXUSRCLK2", "DRPCLK", + "DMONITORCLK", "CLKRSVD0", "CLKRSVD1"]: + segmk.add_site_tag( + site, "ZINV_" + param, 1 ^ params[param]) + + gtp_channel_x = [ + "GTP_CHANNEL_0", + "GTP_CHANNEL_1", + "GTP_CHANNEL_2", + "GTP_CHANNEL_3", + ] + + gtp_channel_x_mid = [ + "GTP_CHANNEL_0_MID_LEFT", + "GTP_CHANNEL_1_MID_LEFT", + "GTP_CHANNEL_2_MID_LEFT", + "GTP_CHANNEL_3_MID_LEFT", + "GTP_CHANNEL_0_MID_RIGHT", + "GTP_CHANNEL_1_MID_RIGHT", + "GTP_CHANNEL_2_MID_RIGHT", + "GTP_CHANNEL_3_MID_RIGHT", + ] + + if tile_type in gtp_channel_x: + bitfilter = bitfilter_gtp_channel_x + elif tile_type in gtp_channel_x_mid: + bitfilter = bitfilter_gtp_channel_x_mid + else: + assert False, tile_type segmk.compile(bitfilter=bitfilter) segmk.write() diff --git a/fuzzers/064-gtp-channel-conf/generate.tcl b/fuzzers/064-gtp-channel-conf/generate.tcl index 338b4906..5caa57a2 100644 --- a/fuzzers/064-gtp-channel-conf/generate.tcl +++ b/fuzzers/064-gtp-channel-conf/generate.tcl @@ -18,6 +18,7 @@ proc run {} { 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}] + set_property IS_ENABLED 0 [get_drc_checks {REQP-1619}] place_design route_design diff --git a/fuzzers/064-gtp-channel-conf/pushdb.sh b/fuzzers/064-gtp-channel-conf/pushdb.sh new file mode 100644 index 00000000..f976e51b --- /dev/null +++ b/fuzzers/064-gtp-channel-conf/pushdb.sh @@ -0,0 +1,40 @@ +#!/bin/bash +# 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 + +if ! test $(find . -name "segdata_gtp_channel_[0123]_mid_*.txt" | wc -c) -eq 0 +then + ${XRAY_MERGEDB} gtp_channel_0_mid_left ${BUILD_DIR}/segbits_gtp_channelx.db + ${XRAY_MERGEDB} gtp_channel_1_mid_left ${BUILD_DIR}/segbits_gtp_channelx.db + ${XRAY_MERGEDB} gtp_channel_2_mid_left ${BUILD_DIR}/segbits_gtp_channelx.db + ${XRAY_MERGEDB} gtp_channel_3_mid_left ${BUILD_DIR}/segbits_gtp_channelx.db + ${XRAY_MERGEDB} mask_gtp_channel_0_mid_left ${BUILD_DIR}/mask_gtp_channelx.db + ${XRAY_MERGEDB} mask_gtp_channel_1_mid_left ${BUILD_DIR}/mask_gtp_channelx.db + ${XRAY_MERGEDB} mask_gtp_channel_2_mid_left ${BUILD_DIR}/mask_gtp_channelx.db + ${XRAY_MERGEDB} mask_gtp_channel_3_mid_left ${BUILD_DIR}/mask_gtp_channelx.db + ${XRAY_MERGEDB} gtp_channel_0_mid_right ${BUILD_DIR}/segbits_gtp_channelx.db + ${XRAY_MERGEDB} gtp_channel_1_mid_right ${BUILD_DIR}/segbits_gtp_channelx.db + ${XRAY_MERGEDB} gtp_channel_2_mid_right ${BUILD_DIR}/segbits_gtp_channelx.db + ${XRAY_MERGEDB} gtp_channel_3_mid_right ${BUILD_DIR}/segbits_gtp_channelx.db + ${XRAY_MERGEDB} mask_gtp_channel_0_mid_right ${BUILD_DIR}/mask_gtp_channelx.db + ${XRAY_MERGEDB} mask_gtp_channel_1_mid_right ${BUILD_DIR}/mask_gtp_channelx.db + ${XRAY_MERGEDB} mask_gtp_channel_2_mid_right ${BUILD_DIR}/mask_gtp_channelx.db + ${XRAY_MERGEDB} mask_gtp_channel_3_mid_right ${BUILD_DIR}/mask_gtp_channelx.db +fi + +if ! test $(find . -name "segdata_gtp_channel_[0123].txt" | wc -c) -eq 0 +then + ${XRAY_MERGEDB} gtp_channel_0 ${BUILD_DIR}/segbits_gtp_channelx.db + ${XRAY_MERGEDB} gtp_channel_1 ${BUILD_DIR}/segbits_gtp_channelx.db + ${XRAY_MERGEDB} gtp_channel_2 ${BUILD_DIR}/segbits_gtp_channelx.db + ${XRAY_MERGEDB} gtp_channel_3 ${BUILD_DIR}/segbits_gtp_channelx.db + ${XRAY_MERGEDB} mask_gtp_channel_0 ${BUILD_DIR}/mask_gtp_channelx.db + ${XRAY_MERGEDB} mask_gtp_channel_1 ${BUILD_DIR}/mask_gtp_channelx.db + ${XRAY_MERGEDB} mask_gtp_channel_2 ${BUILD_DIR}/mask_gtp_channelx.db + ${XRAY_MERGEDB} mask_gtp_channel_3 ${BUILD_DIR}/mask_gtp_channelx.db +fi diff --git a/fuzzers/064-gtp-channel-conf/top.py b/fuzzers/064-gtp-channel-conf/top.py index f90e385b..7e6dd642 100644 --- a/fuzzers/064-gtp-channel-conf/top.py +++ b/fuzzers/064-gtp-channel-conf/top.py @@ -25,21 +25,44 @@ BOOL = "BOOL" STR = "STR" -def gen_sites(): +def gen_sites(site): db = Database(util.get_db_root(), util.get_part()) grid = db.grid() + already_used = list() 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: + if gridinfo.tile_type not in [ + "GTP_CHANNEL_0", + "GTP_CHANNEL_1", + "GTP_CHANNEL_2", + "GTP_CHANNEL_3", + "GTP_CHANNEL_0_MID_LEFT", + "GTP_CHANNEL_1_MID_LEFT", + "GTP_CHANNEL_2_MID_LEFT", + "GTP_CHANNEL_3_MID_LEFT", + "GTP_CHANNEL_0_MID_RIGHT", + "GTP_CHANNEL_1_MID_RIGHT", + "GTP_CHANNEL_2_MID_RIGHT", + "GTP_CHANNEL_3_MID_RIGHT", + ] or gridinfo.tile_type in already_used: continue + else: + tile_type = gridinfo.tile_type + already_used.append(tile_type) for site_name, site_type in gridinfo.sites.items(): - if site_type != "GTPE2_CHANNEL": + if site_type != site: continue - return site_name + if "RIGHT" in tile_type and "X0" in site_name: + continue + + if "LEFT" in tile_type and "X1" in site_name: + continue + + yield tile_name, tile_type, site_name, site_type def main(): @@ -53,66 +76,78 @@ module top( assign out = in; ''') - site_name = gen_sites() + primitives_list = list() - params = dict() - params['site'] = site_name + for tile_name, tile_type, site_name, site_type in gen_sites( + "GTPE2_CHANNEL"): - verilog_attr = "" + params_list = list() + params_dict = dict() - verilog_attr = "#(" + params_dict["tile_type"] = tile_type + params = dict() + params['site'] = site_name - 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) + verilog_attr = "" - in_use = bool(random.randint(0, 9)) - params["IN_USE"] = in_use + verilog_attr = "#(" - for param, param_info in attrs.items(): - param_type = param_info["type"] - param_values = param_info["values"] - param_digits = param_info["digits"] + 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) - 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) + in_use = bool(random.randint(0, 9)) + params["IN_USE"] = in_use - params[param] = value + if in_use: + for param, param_info in attrs.items(): + param_type = param_info["type"] + param_values = param_info["values"] + param_digits = param_info["digits"] - verilog_attr += """ - .{}({}),""".format(param, value_str) + 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) - for param in ["TXUSRCLK", "TXUSRCLK2", "TXPHDLYTSTCLK", - "SIGVALIDCLK", "RXUSRCLK", "RXUSRCLK2", - "DRPCLK", "DMONITORCLK", "CLKRSVD0", "CLKRSVD1"]: - is_inverted = random.randint(0, 1) + params[param] = value - params[param] = is_inverted + verilog_attr += """ + .{}({}),""".format(param, value_str) - verilog_attr += """ - .IS_{}_INVERTED({}),""".format(param, is_inverted) + for param in ["TXUSRCLK", "TXUSRCLK2", "TXPHDLYTSTCLK", + "SIGVALIDCLK", "RXUSRCLK", "RXUSRCLK2", "DRPCLK", + "DMONITORCLK", "CLKRSVD0", "CLKRSVD1"]: + is_inverted = random.randint(0, 1) - verilog_attr = verilog_attr.rstrip(",") - verilog_attr += "\n)" + params[param] = is_inverted - print("(* KEEP, DONT_TOUCH, LOC=\"{}\" *)".format(site_name)) - print( - """GTPE2_CHANNEL {} gtp_channel (); - """.format(verilog_attr)) + 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 {} {} (); + """.format(verilog_attr, tile_type.lower())) + + params_list.append(params) + params_dict["params"] = params_list + primitives_list.append(params_dict) print("endmodule") with open('params.json', 'w') as f: - json.dump(params, f, indent=2) + json.dump(primitives_list, f, indent=2) if __name__ == '__main__': diff --git a/fuzzers/Makefile b/fuzzers/Makefile index 0debe850..4e96d661 100644 --- a/fuzzers/Makefile +++ b/fuzzers/Makefile @@ -159,7 +159,7 @@ endif ifeq ($(XRAY_DATABASE),artix7) $(eval $(call fuzzer,061-pcie-conf,005-tilegrid,all)) $(eval $(call fuzzer,063-gtp-common-conf,005-tilegrid,part)) -$(eval $(call fuzzer,064-gtp-channel-conf,005-tilegrid,all)) +$(eval $(call fuzzer,064-gtp-channel-conf,005-tilegrid,part)) endif endif endif From 1d7c55e0349701cd3b1fc2ab10b55d8bd081415a Mon Sep 17 00:00:00 2001 From: Jan Kowalewski Date: Tue, 19 Jan 2021 14:33:37 +0100 Subject: [PATCH 6/7] mergedb: add gtp_channel_mid Signed-off-by: Jan Kowalewski --- utils/mergedb.sh | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/utils/mergedb.sh b/utils/mergedb.sh index 9e144e6a..3ea1ac5b 100755 --- a/utils/mergedb.sh +++ b/utils/mergedb.sh @@ -181,6 +181,30 @@ case "$1" in gtp_channel_3) sed < "$2" > "$tmp1" -e 's/^GTP_CHANNEL\./GTP_CHANNEL_3./' ;; + gtp_channel_0_mid_left) + sed < "$2" > "$tmp1" -e 's/^GTP_CHANNEL\./GTP_CHANNEL_0_MID_LEFT./' ;; + + gtp_channel_1_mid_left) + sed < "$2" > "$tmp1" -e 's/^GTP_CHANNEL\./GTP_CHANNEL_1_MID_LEFT./' ;; + + gtp_channel_2_mid_left) + sed < "$2" > "$tmp1" -e 's/^GTP_CHANNEL\./GTP_CHANNEL_2_MID_LEFT./' ;; + + gtp_channel_3_mid_left) + sed < "$2" > "$tmp1" -e 's/^GTP_CHANNEL\./GTP_CHANNEL_3_MID_LEFT./' ;; + + gtp_channel_0_mid_right) + sed < "$2" > "$tmp1" -e 's/^GTP_CHANNEL\./GTP_CHANNEL_0_MID_RIGHT./' ;; + + gtp_channel_1_mid_right) + sed < "$2" > "$tmp1" -e 's/^GTP_CHANNEL\./GTP_CHANNEL_1_MID_RIGHT./' ;; + + gtp_channel_2_mid_right) + sed < "$2" > "$tmp1" -e 's/^GTP_CHANNEL\./GTP_CHANNEL_2_MID_RIGHT./' ;; + + gtp_channel_3_mid_right) + sed < "$2" > "$tmp1" -e 's/^GTP_CHANNEL\./GTP_CHANNEL_3_MID_RIGHT./' ;; + mask_*) db=$XRAY_DATABASE_DIR/$XRAY_DATABASE/$1.db ismask=true From b81df3fe0de24c78ab8c98dbae94e45e36876132 Mon Sep 17 00:00:00 2001 From: Alessandro Comodi Date: Fri, 22 Jan 2021 14:06:16 +0100 Subject: [PATCH 7/7] 064-gtp-channel-conf: add minor fixes to document missing features Features enabled with these fixes: - IN_USE (this seems to have 9 bits, so -c has been set to 9) - RXLPM_LF_CFG: this had wrong settings in the automatically generated attrs.json file, which resulted in many bits to be absent - RXSLIDE_MODE: this behaves as a tag group Signed-off-by: Alessandro Comodi --- fuzzers/064-gtp-channel-conf/Makefile | 4 +--- fuzzers/064-gtp-channel-conf/attrs.json | 6 +++--- fuzzers/064-gtp-channel-conf/bits.dbf | 2 ++ fuzzers/064-gtp-channel-conf/generate.py | 18 +++++++++++++----- 4 files changed, 19 insertions(+), 11 deletions(-) diff --git a/fuzzers/064-gtp-channel-conf/Makefile b/fuzzers/064-gtp-channel-conf/Makefile index 058b3f34..ebf729c9 100644 --- a/fuzzers/064-gtp-channel-conf/Makefile +++ b/fuzzers/064-gtp-channel-conf/Makefile @@ -19,8 +19,6 @@ FUZDIR ?= ${PWD} all: database -# generate.sh / top_generate.sh call make, hence the command must -# have a + before it. $(SPECIMENS_OK): $(SPECIMENS_DEPS) mkdir -p ${BUILD_DIR} bash ${XRAY_DIR}/utils/top_generate.sh $(subst /OK,,$@) @@ -39,7 +37,7 @@ clean: database: ${BUILD_DIR}/segbits_gtp_channelx.db ${BUILD_DIR}/segbits_gtp_channelx.rdb: $(SPECIMENS_OK) - ${XRAY_SEGMATCH} -o ${BUILD_DIR}/segbits_gtp_channelx.rdb $$(find $(SPECIMENS) -name "segdata_gtp_channel_[0123]*") + ${XRAY_SEGMATCH} -c 9 -o ${BUILD_DIR}/segbits_gtp_channelx.rdb $$(find $(SPECIMENS) -name "segdata_gtp_channel_[0123]*") ${BUILD_DIR}/segbits_gtp_channelx.db: ${BUILD_DIR}/segbits_gtp_channelx.rdb ${XRAY_DBFIXUP} --db-root ${BUILD_DIR} --zero-db bits.dbf \ diff --git a/fuzzers/064-gtp-channel-conf/attrs.json b/fuzzers/064-gtp-channel-conf/attrs.json index bca5f76d..f852a255 100644 --- a/fuzzers/064-gtp-channel-conf/attrs.json +++ b/fuzzers/064-gtp-channel-conf/attrs.json @@ -291,8 +291,8 @@ }, "RXLPM_LF_CFG": { "type": "BIN", - "values": [3, 65535], - "digits": 16 + "values": [262144], + "digits": 18 }, "RXLPM_HF_CFG": { "type": "BIN", @@ -1164,4 +1164,4 @@ "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 index e69de29b..0ec75595 100644 --- a/fuzzers/064-gtp-channel-conf/bits.dbf +++ b/fuzzers/064-gtp-channel-conf/bits.dbf @@ -0,0 +1,2 @@ +00_519 01_519 +28_519 29_519 diff --git a/fuzzers/064-gtp-channel-conf/generate.py b/fuzzers/064-gtp-channel-conf/generate.py index 45655e81..19dd98ee 100644 --- a/fuzzers/064-gtp-channel-conf/generate.py +++ b/fuzzers/064-gtp-channel-conf/generate.py @@ -13,7 +13,7 @@ import json import os from enum import Enum -from prjxray.segmaker import Segmaker +from prjxray.segmaker import Segmaker, add_site_group_zero INT = "INT" BIN = "BIN" @@ -97,10 +97,18 @@ def main(): else: assert param_type == STR - for param_value in param_values: - segmk.add_site_tag( - site, "{}.{}".format(param, param_value), - value == param_value) + # The RXSLIDE_MODE parameter has overlapping bits + # for its possible values. We need to treat it + # differently + if param == "RXSLIDE_MODE": + add_site_group_zero( + segmk, site, "{}.".format(param), param_values, + "OFF", value) + else: + for param_value in param_values: + segmk.add_site_tag( + site, "{}.{}".format(param, param_value), + value == param_value) for param in ["TXUSRCLK", "TXUSRCLK2", "TXPHDLYTSTCLK", "SIGVALIDCLK", "RXUSRCLK", "RXUSRCLK2", "DRPCLK",