f4pga/wrappers/sh/fasm2bels: convert arg parser from shell to python

Signed-off-by: Unai Martinez-Corral <umartinezcorral@antmicro.com>
This commit is contained in:
Unai Martinez-Corral 2022-08-28 23:48:35 +01:00
parent 419da03f68
commit cd88d6e1a6
1 changed files with 30 additions and 44 deletions

View File

@ -798,54 +798,40 @@ def ql():
def fasm2bels(): def fasm2bels():
print("[F4PGA] Running (deprecated) fasm2bels") print("[F4PGA] Running (deprecated) fasm2bels")
parser = ArgumentParser(description=__doc__, formatter_class=RawDescriptionHelpFormatter)
parser.add_argument("--device", "-d", required=True, type=str, help="")
parser.add_argument("--bit", "-b", required=True, type=str, help="")
parser.add_argument("--part", "-P", required=True, type=str, help="")
parser.add_argument("--pcf", "-p", required=False, type=str, help="")
parser.add_argument("--out-verilog", "-v", required=False, type=str, help="")
parser.add_argument("--out-pcf", "-o", required=False, type=str, help="")
parser.add_argument("--out-qcf", "-q", required=False, type=str, help="")
args = parser.parse_args()
if args.device not in ["ql-eos-s3", "ql-pp3e"]:
raise Exception(f"[fasm2bels] Unsupported device '{args.device}'")
env = f4pga_environ.copy()
env["DEVICE"] = args.device
pcf_args = "" if args.pcf is None else f"--input-pcf {args.pcf}"
out_verilog = f"{args.bit}.v" if args.out_verilog is None else args.out_verilog
out_pcf = f"{args.bit}.v.pcf" if args.out_pcf is None else args.out_pcf
out_qcf = f"{args.bit}.v.qcf" if args.out_qcf is None else args.out_qcf
p_run_bash_cmds( p_run_bash_cmds(
f""" f"""
set -e '{python3}' '{F4PGA_SHARE_DIR}/scripts/fasm2bels.py' '{args.bit}' \
eval set -- "$( --phy-db '{F4PGA_SHARE_DIR}/arch/{args.device}_wlcsp/db_phy.pickle' \
getopt \
--options=d:P:p:b:v:o:q \
--longoptions=device:,part:,pcf:,bit:,out-verilog:,out-pcf:,out-qcf:, \
--name $0 -- {' '.join(sys_argv[1:])}
)"
"""
+ """
DEVICE=""
PART=""
PCF=""
BIT=""
OUT_VERILOG=""
OUT_PCF=""
OUT_QCF=""
while true; do
case "$1" in
-d|--device) DEVICE=$2; shift 2 ;;
-P|--part) PART=$2; shift 2 ;;
-p|--pcf) PCF=$2; shift 2 ;;
-b|--bit) BIT=$2; shift 2 ;;
-v|--out-verilog) OUT_VERILOG=$2; shift 2 ;;
-o|--out-pcf) OUT_PCF=$2; shift 2 ;;
-q|--out-qcf) OUT_QCF=$2; shift 2 ;;
--) break ;;
esac
done
if [ -z $DEVICE ]; then echo "Please provide device name"; exit 1; fi
if [ -z $BIT ]; then echo "Please provide an input bistream file name"; exit 1; fi
# $DEVICE is not ql-eos-s3 or ql-pp3e
if ! [[ "$DEVICE" =~ ^(ql-eos-s3|ql-pp3e)$ ]]; then echo "ERROR: Unsupported device '${DEVICE}' for fasm2bels"; exit -1; fi
if [ -z "{PCF}" ]; then PCF_ARGS=""; else PCF_ARGS="--input-pcf ${PCF}"; fi
echo "Running fasm2bels"
"""
+ f"""
'{python3}' '{F4PGA_SHARE_DIR}/scripts/fasm2bels.py' "${{BIT}}" \
--phy-db '{F4PGA_SHARE_DIR}/arch/'"${{DEVICE}}_wlcsp/db_phy.pickle" \
--device-name "${{DEVICE/ql-/}}" \ --device-name "${{DEVICE/ql-/}}" \
--package-name "$PART" \ --package-name '{args.part}' \
--input-type bitstream \ --input-type bitstream \
--output-verilog "${{OUT_VERILOG:-$BIT.v}}" \ --output-verilog '{out_verilog}' \
${{PCF_ARGS}} \ {pcf_args} \
--output-pcf "${{OUT_PCF:-$BIT.v.pcf}}" \ --output-pcf '{out_pcf}' \
--output-qcf "${{OUT_QCF:-$BIT.v.qcf}}" --output-qcf '{out_qcf}'
""" """,
env=env,
) )