diff --git a/fuzzers/064-gtx-channel-conf/Makefile b/fuzzers/064-gtx-channel-conf/Makefile new file mode 100644 index 00000000..032e32ef --- /dev/null +++ b/fuzzers/064-gtx-channel-conf/Makefile @@ -0,0 +1,65 @@ +# 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 + +SHELL = bash + +N ?= 20 + +BUILD_DIR = build_${XRAY_PART} + +SPECIMENS := $(addprefix ${BUILD_DIR}/specimen_,$(shell seq -f '%03.0f' $(N))) +SPECIMENS_OK := $(addsuffix /OK,$(SPECIMENS)) +FUZDIR ?= ${PWD} + +CELLS_DATA_DIR = ${XRAY_FAMILY_DIR}/cells_data + +all: database + +$(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 + +# These are pins that are hard to parse as a regexp given that the port name ends with a number, which is misinterpreted +# as the index in the port bus +SPECIAL_PINS = CLKRSVD0,CLKRSVD1,GTREFCLK0,GTREFCLK1,GTNORTHREFCLK0,GTNORTHREFCLK1,GTSOUTHREFCLK0,GTSOUTHREFCLK1,RXUSRCLK,RXUSRCLK2,TXUSRCLK,TXUSRCLK2,RXOSINTID0,PMARSVDIN0,PMARSVDIN1,PMARSVDIN2,PMARSVDIN3,PMARSVDIN4,PMARSVDOUT0,PMARSVDOUT1 + +$(BUILD_DIR)/gtxe2_channel_ports.csv: + env FILE_NAME=$(BUILD_DIR)/gtxe2_channel_pins.csv ${XRAY_VIVADO} -mode batch -source generate_ports.tcl + +$(BUILD_DIR)/gtxe2_channel_ports.json: $(BUILD_DIR)/gtxe2_channel_ports.csv + python3 ${XRAY_UTILS_DIR}/make_ports.py $(BUILD_DIR)/gtxe2_channel_pins.csv $(BUILD_DIR)/gtxe2_channel_ports.json --special-pins $(SPECIAL_PINS) + +database: ${BUILD_DIR}/segbits_gtx_channelx.db $(BUILD_DIR)/gtxe2_channel_ports.json + +${BUILD_DIR}/segbits_gtx_channelx.rdb: $(SPECIMENS_OK) + ${XRAY_SEGMATCH} -c 9 -o ${BUILD_DIR}/segbits_gtx_channelx.rdb $$(find $(SPECIMENS) -name "segdata_gtx_channel_[0123]*") + +${BUILD_DIR}/segbits_gtx_channelx.db: ${BUILD_DIR}/segbits_gtx_channelx.rdb + ${XRAY_DBFIXUP} --db-root ${BUILD_DIR} --zero-db bits.dbf \ + --seg-fn-in ${BUILD_DIR}/segbits_gtx_channelx.rdb \ + --seg-fn-out ${BUILD_DIR}/segbits_gtx_channelx.db + ${XRAY_MASKMERGE} ${BUILD_DIR}/mask_gtx_channelx.db $$(find $(SPECIMENS) -name "segdata_gtx_channel_[0123]*") + +pushdb: + mkdir -p $(CELLS_DATA_DIR) + cp attrs.json $(CELLS_DATA_DIR)/gtxe2_channel_attrs.json + cp $(BUILD_DIR)/gtxe2_channel_ports.json $(CELLS_DATA_DIR)/gtxe2_channel_ports.json + BUILD_DIR=$(BUILD_DIR) source pushdb.sh + +.PHONY: database pushdb diff --git a/fuzzers/064-gtx-channel-conf/attrs.json b/fuzzers/064-gtx-channel-conf/attrs.json new file mode 100644 index 00000000..415f4c30 --- /dev/null +++ b/fuzzers/064-gtx-channel-conf/attrs.json @@ -0,0 +1,1000 @@ +{ + "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 + }, + "RXDFELPMRESET_TIME": { + "type": "BIN", + "values": [1], + "digits": 1 + }, + "RXPMARESET_TIME": { + "type": "BIN", + "values": [31], + "digits": 5 + }, + "RXPCSRESET_TIME": { + "type": "BIN", + "values": [31], + "digits": 5 + }, + "RXISCANRESET_TIME": { + "type": "BIN", + "values": [31], + "digits": 5 + }, + "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 + }, + "CPLL_INIT_CFG": { + "type": "BIN", + "values": [16777215], + "digits": 24 + }, + "CPLL_CFG": { + "type": "BIN", + "values": [16777215], + "digits": 24 + }, + "SATA_CPLL_CFG": { + "type": "STR", + "values": ["VCO_3000MHZ", "VCO_1500MHZ", "VCO_750MHZ"], + "digits": 2 + }, + "CPLL_REFCLK_DIV": { + "type": "INT", + "values": [1, 2, 3, 4, 5, 6, 8, 10, 12, 16, 20], + "encoding": [16, 0, 1, 2, 3, 5, 6, 7, 13, 14, 15], + "digits": 5 + }, + "CPLL_FBDIV_45": { + "type": "INT", + "values": [4, 5], + "encoding": [0, 1], + "digits": 1 + }, + "CPLL_FBDIV": { + "type": "INT", + "values": [1, 2, 3, 4, 5, 6, 8, 10, 12, 16, 20], + "encoding": [16, 0, 1, 2, 3, 5, 6, 7, 13, 14, 15], + "digits": 5 + }, + "CPLL_LOCK_CFG": { + "type": "BIN", + "values": [65535], + "digits": 16 + }, + "RX_DATA_WIDTH": { + "type": "INT", + "values": [16, 20, 32, 40, 64, 80], + "encoding": [2, 3, 4, 5, 6, 7], + "digits": 3 + }, + "RX_INT_DATAWIDTH": { + "type": "BIN", + "values": [1], + "digits": 1 + }, + "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 + }, + "TRANS_TIME_RATE": { + "type": "BIN", + "values": [255], + "digits": 8 + }, + "TX_PREDRIVER_MODE": { + "type": "BIN", + "values": [1], + "digits": 1 + }, + "TX_LOOPBACK_DRIVE_HIZ": { + "type": "BOOL", + "values": ["FALSE", "TRUE"], + "digits": 1 + }, + "TX_DRIVE_MODE": { + "type": "STR", + "values": ["DIRECT", "PIPE", "PIPEGEN3"], + "digits": 5 + }, + "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 + }, + "RX_DFE_GAIN_CFG": { + "type": "BIN", + "values": [8388607], + "digits": 23 + }, + "RX_DFE_LPM_HOLD_DURING_EIDLE": { + "type": "BIN", + "values": [1], + "digits": 1 + }, + "RX_DFE_H2_CFG": { + "type": "BIN", + "values": [4095], + "digits": 12 + }, + "RX_DFE_H3_CFG": { + "type": "BIN", + "values": [4095], + "digits": 12 + }, + "RX_DFE_H4_CFG": { + "type": "BIN", + "values": [2047], + "digits": 11 + }, + "RX_DFE_H5_CFG": { + "type": "BIN", + "values": [2047], + "digits": 11 + }, + "RX_DFE_KL_CFG": { + "type": "BIN", + "values": [8191], + "digits": 13 + }, + "RX_DFE_UT_CFG": { + "type": "BIN", + "values": [131071], + "digits": 17 + }, + "RX_OS_CFG": { + "type": "BIN", + "values": [8191], + "digits": 13 + }, + "RX_DFE_VP_CFG": { + "type": "BIN", + "values": [131071], + "digits": 17 + }, + "RX_DFE_XYD_CFG": { + "type": "BIN", + "values": [8191], + "digits": 13 + }, + "RX_DFE_LPM_CFG": { + "type": "BIN", + "values": [65535], + "digits": 16 + }, + "RXLPM_LF_CFG": { + "type": "BIN", + "values": [262144], + "digits": 18 + }, + "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, 4], + "encoding": [1, 2, 4], + "digits": 3 + }, + "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 + }, + "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 + }, + "TX_CLKMUX_PD": { + "type": "BIN", + "values": [1], + "digits": 1 + }, + "RX_CLKMUX_PD": { + "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 + }, + "TX_QPI_STATUS_EN": { + "type": "BIN", + "values": [1], + "digits": 1 + }, + "TX_INT_DATAWIDTH": { + "type": "BIN", + "values": [1], + "digits": 1 + }, + "PMA_RSV4": { + "type": "BIN", + "values": [15], + "digits": 4 + }, + "TX_DATA_WIDTH": { + "type": "INT", + "values": [16, 20, 32, 40, 64, 80], + "encoding": [2, 3, 4, 5, 6, 7], + "digits": 3 + }, + "TX_EIDLE_ASSERT_DELAY": { + "type": "BIN", + "values": [7], + "digits": 3 + }, + "TX_EIDLE_DEASSERT_DELAY": { + "type": "BIN", + "values": [7], + "digits": 3 + }, + "PCS_RSVD_ATTR": { + "type": "BIN", + "values": [281462092005375], + "digits": 48 + }, + "RX_DFE_KL_CFG2": { + "type": "BIN", + "values": [511], + "digits": 9 + }, + "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 + }, + "TX_RXDETECT_CFG": { + "type": "BIN", + "values": [16383], + "digits": 14 + }, + "RX_CM_TRIM": { + "type": "BIN", + "values": [15], + "digits": 4 + }, + "PMA_RSV2": { + "type": "BIN", + "values": [4294836225], + "digits": 32 + }, + "DMONITOR_CFG": { + "type": "BIN", + "values": [16711425], + "digits": 24 + }, + "TXOUT_DIV": { + "type": "INT", + "values": [1, 2, 4, 8, 16], + "encoding": [0, 1, 2, 3, 4], + "digits": 2 + }, + "RXOUT_DIV": { + "type": "INT", + "values": [1, 2, 4, 8, 16], + "encoding": [0, 1, 2, 3, 4], + "digits": 2 + }, + "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_RESET_ON_CB_CHANGE": { + "type": "BOOL", + "values": ["FALSE", "TRUE"], + "digits": 1 + }, + "RXBUF_RESET_ON_RATE_CHANGE": { + "type": "BOOL", + "values": ["FALSE", "TRUE"], + "digits": 1 + }, + "RXBUF_RESET_ON_COMMAALIGN": { + "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 + }, + "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 + } +} diff --git a/fuzzers/064-gtx-channel-conf/bits.dbf b/fuzzers/064-gtx-channel-conf/bits.dbf new file mode 100644 index 00000000..0ec75595 --- /dev/null +++ b/fuzzers/064-gtx-channel-conf/bits.dbf @@ -0,0 +1,2 @@ +00_519 01_519 +28_519 29_519 diff --git a/fuzzers/064-gtx-channel-conf/generate.py b/fuzzers/064-gtx-channel-conf/generate.py new file mode 100644 index 00000000..ba6c58ca --- /dev/null +++ b/fuzzers/064-gtx-channel-conf/generate.py @@ -0,0 +1,147 @@ +#!/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, add_site_group_zero + +INT = "INT" +BIN = "BIN" +BOOL = "BOOL" +STR = "STR" + + +def bitfilter_gtx_channel_x(frame, bit): + # Filter out interconnect bits. + # if frame not in [28, 29, 30, 31]: + # return False + + return True + + +def bitfilter_gtx_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") + + 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: + primitives_list = json.load(f) + + for primitive in primitives_list: + tile_type = primitive["tile_type"] + params_list = primitive["params"] + + for params in params_list: + site = params["site"] + + if "GTXE2_CHANNEL" not in site: + continue + + in_use = params["IN_USE"] + + segmk.add_site_tag(site, "IN_USE", in_use) + + 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"] + + 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 + + # 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", + "RXUSRCLK", "RXUSRCLK2", "DRPCLK"]: + segmk.add_site_tag(site, "INV_" + param, params[param]) + + gtx_channel_x = [ + "GTX_CHANNEL_0", + "GTX_CHANNEL_1", + "GTX_CHANNEL_2", + "GTX_CHANNEL_3", + ] + + gtx_channel_x_mid = [ + "GTX_CHANNEL_0_MID_LEFT", + "GTX_CHANNEL_1_MID_LEFT", + "GTX_CHANNEL_2_MID_LEFT", + "GTX_CHANNEL_3_MID_LEFT", + "GTX_CHANNEL_0_MID_RIGHT", + "GTX_CHANNEL_1_MID_RIGHT", + "GTX_CHANNEL_2_MID_RIGHT", + "GTX_CHANNEL_3_MID_RIGHT", + ] + + if tile_type in gtx_channel_x: + bitfilter = bitfilter_gtx_channel_x + elif tile_type in gtx_channel_x_mid: + bitfilter = bitfilter_gtx_channel_x_mid + else: + assert False, tile_type + + segmk.compile(bitfilter=bitfilter) + segmk.write() + + +if __name__ == '__main__': + main() diff --git a/fuzzers/064-gtx-channel-conf/generate.tcl b/fuzzers/064-gtx-channel-conf/generate.tcl new file mode 100644 index 00000000..b050e959 --- /dev/null +++ b/fuzzers/064-gtx-channel-conf/generate.tcl @@ -0,0 +1,43 @@ +# 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}] + set_property IS_ENABLED 0 [get_drc_checks {REQP-1619}] + set_property IS_ENABLED 0 [get_drc_checks {AVAL-17}] + set_property IS_ENABLED 0 [get_drc_checks {AVAL-18}] + set_property IS_ENABLED 0 [get_drc_checks {AVAL-19}] + set_property IS_ENABLED 0 [get_drc_checks {AVAL-19}] + set_property IS_ENABLED 0 [get_drc_checks {AVAL-20}] + set_property IS_ENABLED 0 [get_drc_checks {AVAL-20}] + set_property IS_ENABLED 0 [get_drc_checks {AVAL-21}] + set_property IS_ENABLED 0 [get_drc_checks {AVAL-22}] + set_property IS_ENABLED 0 [get_drc_checks {REQP-51}] + set_property IS_ENABLED 0 [get_drc_checks {REQP-51}] + set_property IS_ENABLED 0 [get_drc_checks {REQP-51}] + set_property IS_ENABLED 0 [get_drc_checks {REQP-51}] + set_property IS_ENABLED 0 [get_drc_checks {AVAL-23}] + + place_design + route_design + + write_checkpoint -force design.dcp + write_bitstream -force design.bit +} + +run diff --git a/fuzzers/064-gtx-channel-conf/generate_ports.tcl b/fuzzers/064-gtx-channel-conf/generate_ports.tcl new file mode 100644 index 00000000..352ea6fc --- /dev/null +++ b/fuzzers/064-gtx-channel-conf/generate_ports.tcl @@ -0,0 +1,15 @@ +# 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 + +source "$::env(XRAY_DIR)/utils/utils.tcl" + +create_project -force -name design -part $::env(XRAY_PART) +set_property design_mode PinPlanning [current_fileset] +open_io_design -name io_1 + +dump_pins $::env(FILE_NAME) GTXE2_CHANNEL diff --git a/fuzzers/064-gtx-channel-conf/pushdb.sh b/fuzzers/064-gtx-channel-conf/pushdb.sh new file mode 100644 index 00000000..28f271fa --- /dev/null +++ b/fuzzers/064-gtx-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 ${BUILD_DIR} -name "segdata_gtx_channel_[0123]_mid_*.txt" | wc -c) -eq 0 +then + ${XRAY_MERGEDB} gtx_channel_0_mid_left ${BUILD_DIR}/segbits_gtx_channelx.db + ${XRAY_MERGEDB} gtx_channel_1_mid_left ${BUILD_DIR}/segbits_gtx_channelx.db + ${XRAY_MERGEDB} gtx_channel_2_mid_left ${BUILD_DIR}/segbits_gtx_channelx.db + ${XRAY_MERGEDB} gtx_channel_3_mid_left ${BUILD_DIR}/segbits_gtx_channelx.db + ${XRAY_MERGEDB} mask_gtx_channel_0_mid_left ${BUILD_DIR}/mask_gtx_channelx.db + ${XRAY_MERGEDB} mask_gtx_channel_1_mid_left ${BUILD_DIR}/mask_gtx_channelx.db + ${XRAY_MERGEDB} mask_gtx_channel_2_mid_left ${BUILD_DIR}/mask_gtx_channelx.db + ${XRAY_MERGEDB} mask_gtx_channel_3_mid_left ${BUILD_DIR}/mask_gtx_channelx.db + ${XRAY_MERGEDB} gtx_channel_0_mid_right ${BUILD_DIR}/segbits_gtx_channelx.db + ${XRAY_MERGEDB} gtx_channel_1_mid_right ${BUILD_DIR}/segbits_gtx_channelx.db + ${XRAY_MERGEDB} gtx_channel_2_mid_right ${BUILD_DIR}/segbits_gtx_channelx.db + ${XRAY_MERGEDB} gtx_channel_3_mid_right ${BUILD_DIR}/segbits_gtx_channelx.db + ${XRAY_MERGEDB} mask_gtx_channel_0_mid_right ${BUILD_DIR}/mask_gtx_channelx.db + ${XRAY_MERGEDB} mask_gtx_channel_1_mid_right ${BUILD_DIR}/mask_gtx_channelx.db + ${XRAY_MERGEDB} mask_gtx_channel_2_mid_right ${BUILD_DIR}/mask_gtx_channelx.db + ${XRAY_MERGEDB} mask_gtx_channel_3_mid_right ${BUILD_DIR}/mask_gtx_channelx.db +fi + +if ! test $(find ${BUILD_DIR} -name "segdata_gtx_channel_[0123].txt" | wc -c) -eq 0 +then + ${XRAY_MERGEDB} gtx_channel_0 ${BUILD_DIR}/segbits_gtx_channelx.db + ${XRAY_MERGEDB} gtx_channel_1 ${BUILD_DIR}/segbits_gtx_channelx.db + ${XRAY_MERGEDB} gtx_channel_2 ${BUILD_DIR}/segbits_gtx_channelx.db + ${XRAY_MERGEDB} gtx_channel_3 ${BUILD_DIR}/segbits_gtx_channelx.db + ${XRAY_MERGEDB} mask_gtx_channel_0 ${BUILD_DIR}/mask_gtx_channelx.db + ${XRAY_MERGEDB} mask_gtx_channel_1 ${BUILD_DIR}/mask_gtx_channelx.db + ${XRAY_MERGEDB} mask_gtx_channel_2 ${BUILD_DIR}/mask_gtx_channelx.db + ${XRAY_MERGEDB} mask_gtx_channel_3 ${BUILD_DIR}/mask_gtx_channelx.db +fi diff --git a/fuzzers/064-gtx-channel-conf/top.py b/fuzzers/064-gtx-channel-conf/top.py new file mode 100644 index 00000000..6a8d65cc --- /dev/null +++ b/fuzzers/064-gtx-channel-conf/top.py @@ -0,0 +1,167 @@ +#!/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.lut_maker import LutMaker +from prjxray.db import Database + +INT = "INT" +BIN = "BIN" +BOOL = "BOOL" +STR = "STR" + + +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 gridinfo.tile_type not in [ + "GTX_CHANNEL_0", + "GTX_CHANNEL_1", + "GTX_CHANNEL_2", + "GTX_CHANNEL_3", + "GTX_CHANNEL_0_MID_LEFT", + "GTX_CHANNEL_1_MID_LEFT", + "GTX_CHANNEL_2_MID_LEFT", + "GTX_CHANNEL_3_MID_LEFT", + "GTX_CHANNEL_0_MID_RIGHT", + "GTX_CHANNEL_1_MID_RIGHT", + "GTX_CHANNEL_2_MID_RIGHT", + "GTX_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 != site: + continue + + 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(): + print( + ''' +module top( + input wire in, + output wire out +); + +assign out = in; +''') + + luts = LutMaker() + + primitives_list = list() + + for tile_name, tile_type, site_name, site_type in gen_sites( + "GTXE2_CHANNEL"): + + params_list = list() + params_dict = dict() + + params_dict["tile_type"] = tile_type + 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 + + 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"] + + 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) + + verilog_ports = "" + for param in ["TXUSRCLK", "TXUSRCLK2", "TXPHDLYTSTCLK", + "RXUSRCLK", "RXUSRCLK2", "DRPCLK"]: + is_inverted = random.randint(0, 1) + + params[param] = is_inverted + + verilog_attr += """ + .IS_{}_INVERTED({}),""".format(param, is_inverted) + verilog_ports += """ + .{}({}),""".format(param, luts.get_next_output_net()) + + verilog_attr = verilog_attr.rstrip(",") + verilog_attr += "\n)" + + print("(* KEEP, DONT_TOUCH, LOC=\"{}\" *)".format(site_name)) + print( + """GTXE2_CHANNEL {attrs} {site} ( + {ports} +); + """.format( + attrs=verilog_attr, + site=tile_type.lower(), + ports=verilog_ports.rstrip(","))) + + params_list.append(params) + params_dict["params"] = params_list + primitives_list.append(params_dict) + + for l in luts.create_wires_and_luts(): + print(l) + + print("endmodule") + + with open('params.json', 'w') as f: + json.dump(primitives_list, f, indent=2) + + +if __name__ == '__main__': + main()