f4pga/wrappers/sh/quicklogic: rm generate_constraints.f4pga.sh

Signed-off-by: Unai Martinez-Corral <umartinezcorral@antmicro.com>
This commit is contained in:
Unai Martinez-Corral 2022-08-11 02:47:15 +02:00
parent 3ae5760017
commit a6f4fbd481
2 changed files with 83 additions and 104 deletions

View File

@ -26,11 +26,15 @@ from shutil import which
from subprocess import check_call
python3 = which('python3')
f4pga_environ = environ.copy()
ROOT = Path(__file__).resolve().parent
FPGA_FAM = f4pga_environ.get('FPGA_FAM', 'xc7')
isQuickLogic = FPGA_FAM == 'eos-s3'
SH_SUBDIR = 'quicklogic' if isQuickLogic else FPGA_FAM
F4PGA_INSTALL_DIR = f4pga_environ.get('F4PGA_INSTALL_DIR')
@ -59,7 +63,7 @@ def p_run_bash_cmds(cmds):
def p_run_pym(module):
stdout.flush()
stderr.flush()
check_call([which('python3'), '-m' , module]+sys_argv[1:], env=f4pga_environ)
check_call([python3, '-m' , module]+sys_argv[1:], env=f4pga_environ)
def p_vpr_common_cmds(log_suffix = None):
@ -136,7 +140,81 @@ def p_vpr_run():
def generate_constraints():
print("[F4PGA] Running (deprecated) generate constraints")
if isQuickLogic:
p_run_sh_script(ROOT / SH_SUBDIR / "generate_constraints.f4pga.sh")
(pcf, eblif, net, part, device, arch_def, corner) = sys_argv[1:8]
place_file_prefix = Path(eblif).stem
share_dir = Path(f4pga_environ['F4PGA_SHARE_DIR'])
scripts_dir = share_dir / 'scripts'
archs_dir = share_dir / 'arch'
p_run_bash_cmds(f"""
set -e
if [[ '{device}' =~ ^(qlf_.*)$ ]]; then
if [[ '{device}' =~ ^(qlf_k4n8_qlf_k4n8)$ ]];then
DEVICE_PATH='qlf_k4n8-qlf_k4n8_umc22_{corner}'
PINMAPXML="pinmap_qlf_k4n8_umc22.xml"
elif [[ '{device}' =~ ^(qlf_k6n10_qlf_k6n10)$ ]];then
DEVICE_PATH="qlf_k6n10-qlf_k6n10_gf12"
PINMAPXML="pinmap_qlf_k6n10_gf12.xml"
else
echo "ERROR: Unknown qlf device '{device}'"
exit -1
fi
'{python3}' '{scripts_dir}/qlf_k4n8_create_ioplace.py' \
--pcf '{pcf}' \
--blif '{eblif}' \
--pinmap_xml '{archs_dir}'/"${{DEVICE_PATH}}_${{DEVICE_PATH}}/${{PINMAPXML}}" \
--csv_file '{part}' \
--net '{net}' \
> '{place_file_prefix}_io.place'
elif [[ '{device}' =~ ^(ql-.*)$ ]]; then
if ! [[ '{part}' =~ ^(PU64|WR42|PD64|WD30)$ ]]; then
PINMAPCSV="pinmap_PD64.csv"
CLKMAPCSV="clkmap_PD64.csv"
else
PINMAPCSV='pinmap_{part}.csv'
CLKMAPCSV='clkmap_{part}.csv'
fi
echo "PINMAP FILE : $PINMAPCSV"
echo "CLKMAP FILE : $CLKMAPCSV"
DEVICE_PATH='{device}_wlcsp'
PINMAP='{archs_dir}'/"${{DEVICE_PATH}}/${{PINMAPCSV}}"
'{python3}' '{scripts_dir}/pp3_create_ioplace.py' \
--pcf '{pcf}' \
--blif '{eblif}' \
--map "$PINMAP" \
--net '{net}' \
> '{place_file_prefix}_io.place'
'{python3}' '{scripts_dir}/pp3_create_place_constraints.py' \
--blif '{eblif}' \
--map '{archs_dir}'/"${{DEVICE_PATH}}/${{CLKMAPCSV}}" \
-i '{place_file_prefix}_io.place' \
> '{place_file_prefix}_constraints.place'
# EOS-S3 IOMUX configuration
if [[ '{device}' =~ ^(ql-eos-s3)$ ]]; then
""" + '\n'.join([f"""
'{python3}' '{scripts_dir}/pp3_eos_s3_iomux_config.py' \
--eblif '{eblif}' \
--pcf '{pcf}' \
--map "$PINMAP" \
--output-format={fmt[0]} \
> '{place_file_prefix}_iomux.{fmt[1]}'
""" for fmt in [['jlink', 'jlink'], ['openocd', 'openocd'], ['binary', 'bin']]]) + f"""
fi
else
echo "FIXME: Unsupported device '{device}'"
exit -1
fi
""")
else:
(eblif, net, part, device, arch_def) = sys_argv[1:6]
pcf_opts = f"'--pcf' '{sys_argv[6]}'" if len(sys_argv) > 6 else ''
@ -319,7 +397,7 @@ DESIGN=${EBLIF/.eblif/}
[ ! -z "${PCF_PATH}" ] && PCF_ARGS="--pcf-constraints ${PCF_PATH}" || PCF_ARGS=
""" + f"""
PYTHONPATH=$F4PGA_SHARE_DIR/scripts:$PYTHONPATH \
'{which('python3')}' "$F4PGA_SHARE_DIR"/scripts/repacker/repack.py \
'{python3}' "$F4PGA_SHARE_DIR"/scripts/repacker/repack.py \
--vpr-arch ${{ARCH_DEF}} \
--repacking-rules ${{ARCH_DIR}}/${{DEVICE_1}}.repacking_rules.json \
$JSON_ARGS \
@ -402,7 +480,7 @@ fi
ARCH_DIR="$F4PGA_SHARE_DIR"/arch/${DEVICE_1}_${DEVICE_1}
PINMAP_XML=${ARCH_DIR}/${PINMAPXML}
""" + f"""
'{which('python3')}' "$F4PGA_SHARE_DIR"/scripts/create_lib.py \
'{python3}' "$F4PGA_SHARE_DIR"/scripts/create_lib.py \
-n "${{DEV}}_0P72_SSM40" \
-m fpga_top \
-c '{part}' \
@ -456,7 +534,7 @@ if ! [[ "$DEVICE" =~ ^(ql-eos-s3|ql-pp3e)$ ]]; then echo "ERROR: Unsupported dev
if [ -z "{PCF}" ]; then PCF_ARGS=""; else PCF_ARGS="--input-pcf ${PCF}"; fi
echo "Running fasm2bels"
""" + f"""
'{which('python3')}' "`readlink -f ${{SHARE_DIR_PATH}}/scripts/fasm2bels.py`" "${{BIT}}" \
'{python3}' "`readlink -f ${{SHARE_DIR_PATH}}/scripts/fasm2bels.py`" "${{BIT}}" \
--phy-db "`readlink -f ${{SHARE_DIR_PATH}}/arch/${{DEVICE}}_wlcsp/db_phy.pickle`" \
--device-name "${{DEVICE/ql-/}}" \
--package-name "$PART" \

View File

@ -1,99 +0,0 @@
#!/usr/bin/env bash
#
# Copyright (C) 2020-2022 F4PGA Authors.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
# SPDX-License-Identifier: Apache-2.0
set -e
PCF=$1
EBLIF=$2
NET=$3
PART=$4
DEVICE=$5
ARCH_DEF=$6
CORNER=$7
PROJECT=$(basename -- "$EBLIF")
IOPLACE_FILE="${PROJECT%.*}_io.place"
SHARE_DIR_PATH=${SHARE_DIR_PATH:="$F4PGA_SHARE_DIR"}
PYTHON3=$(which python3)
if [[ "$DEVICE" =~ ^(qlf_.*)$ ]]; then
if [[ "$DEVICE" =~ ^(qlf_k4n8_qlf_k4n8)$ ]];then
DEVICE_PATH="qlf_k4n8-qlf_k4n8_umc22_$CORNER"
PINMAPXML="pinmap_qlf_k4n8_umc22.xml"
elif [[ "$DEVICE" =~ ^(qlf_k6n10_qlf_k6n10)$ ]];then
DEVICE_PATH="qlf_k6n10-qlf_k6n10_gf12"
PINMAPXML="pinmap_qlf_k6n10_gf12.xml"
else
echo "ERROR: Unknown qlf device '${DEVICE}'"
exit -1
fi
"${PYTHON3}" "`realpath ${SHARE_DIR_PATH}/scripts/qlf_k4n8_create_ioplace.py`" \
--pcf "$PCF" \
--blif "$EBLIF" \
--pinmap_xml "`realpath ${SHARE_DIR_PATH}/arch/${DEVICE_PATH}_${DEVICE_PATH}/${PINMAPXML}`" \
--csv_file "$PART" \
--net "$NET" \
> "${IOPLACE_FILE}"
elif [[ "$DEVICE" =~ ^(ql-.*)$ ]]; then
if ! [[ "$PART" =~ ^(PU64|WR42|PD64|WD30)$ ]]; then
PINMAPCSV="pinmap_PD64.csv"
CLKMAPCSV="clkmap_PD64.csv"
else
PINMAPCSV="pinmap_${PART}.csv"
CLKMAPCSV="clkmap_${PART}.csv"
fi
echo "PINMAP FILE : $PINMAPCSV"
echo "CLKMAP FILE : $CLKMAPCSV"
DEVICE_PATH="${DEVICE}_wlcsp"
PINMAP=`realpath ${SHARE_DIR_PATH}/arch/${DEVICE_PATH}/${PINMAPCSV}`
"${PYTHON3}" `realpath ${SHARE_DIR_PATH}/scripts/pp3_create_ioplace.py` \
--pcf "$PCF" \
--blif "$EBLIF" \
--map "$PINMAP" \
--net "$NET" \
> ${IOPLACE_FILE}
"${PYTHON3}" `realpath ${SHARE_DIR_PATH}/scripts/pp3_create_place_constraints.py` \
--blif "$EBLIF" \
--map "`realpath ${SHARE_DIR_PATH}/arch/${DEVICE_PATH}/${CLKMAPCSV}`" \
-i "$IOPLACE_FILE" \
> "${PROJECT%.*}_constraints.place"
# EOS-S3 IOMUX configuration
if [[ "$DEVICE" =~ ^(ql-eos-s3)$ ]]; then
IOMUXGEN=`realpath ${SHARE_DIR_PATH}/scripts/pp3_eos_s3_iomux_config.py`
"${PYTHON3}" "${IOMUXGEN}" --eblif "$EBLIF" --pcf "$PCF" --map "$PINMAP" --output-format=jlink > "${PROJECT%.*}_iomux.jlink"
"${PYTHON3}" "${IOMUXGEN}" --eblif "$EBLIF" --pcf "$PCF" --map "$PINMAP" --output-format=openocd > "${PROJECT%.*}_iomux.openocd"
"${PYTHON3}" "${IOMUXGEN}" --eblif "$EBLIF" --pcf "$PCF" --map "$PINMAP" --output-format=binary > "${PROJECT%.*}_iomux.bin"
fi
else
echo "FIXME: Unsupported device '${DEVICE}'"
exit -1
fi