-
Patrick Robbe authoredPatrick Robbe authored
pcie40_program 2.81 KiB
#!/bin/bash
#ug`pcie40_pgm.description`
# This simple tool just serves as a shortcut to the ``quartus_pgm`` command. It is preconfigured with the default JTAG chain definition used in a PCIe40 readout board. _
# NOTE: Programming .rbf files is not yet supported.
JTAG_CABLE=1
#ug`pcie40_pgm.synopsis`
# *pcie40_pgm* [-c _jtagcable_] _file.sof_|_file.pof_
function usage {
echo "pcie40_pgm [-c jtagcable] file.sof|file.pof" >&2
}
while getopts ":c:h" opt; do
case $opt in
#ug`pcie40_pgm.options`jtagcable
# *-c* _jtagcable_::
# Use given JTAG cable interface. _jtagcable_ is an integer as printed by ``quartus_pgm -l``. The default value is 1.
c) JTAG_CABLE=${OPTARG}
;;
h)
usage
exit 1
;;
\?)
echo "Invalid option: -${OPTARG}" >&2
exit 1
;;
:)
echo "Option -${OPTARG} requires an argument" >&2
exit 1
;;
esac
done
# Discard options
shift $(($OPTIND - 1))
if [ -z "$1" ]; then
usage
exit 1
fi
IMAGE_PATH=$1
if [ ! -e ${IMAGE_PATH} ]; then
echo "File does not exist: ${IMAGE_PATH}" >&2
exit 1
fi
tmpcdf=`mktemp -t pcie40_pgm.XXXXXX.cdf`
IMAGE_DIRNAME=`dirname "${IMAGE_PATH}"`/
IMAGE_BASENAME=`basename "${IMAGE_PATH}"`
case "${IMAGE_BASENAME##*.}" in
#ug`pcie40_pgm.options`sof
# _ _file.sof_::
# The SRAM Object File file to program on the PCIe40 FPGA. _
sof)
cat << EOF > $tmpcdf
JedecChain;
FileRevision(JESD32A);
DefaultMfr(6E);
P ActionCode(Cfg)
Device PartName(10AX115S4F45) Path("${IMAGE_DIRNAME}") File("${IMAGE_BASENAME}") MfrSpec(OpMask(1));
P ActionCode(Ign)
Device PartName(5M2210Z) MfrSpec(OpMask(0) SEC_Device(CFI_1GB) Child_OpMask(1 0));
ChainEnd;
AlteraBegin;
ChainType(JTAG);
AlteraEnd;
EOF
;;
#ug`pcie40_pgm.options`pof
# _ _file.pof_::
# The Programmer Object File file to store on the PCIe40 flash memory. _
pof)
cat << EOF > $tmpcdf
JedecChain;
FileRevision(JESD32A);
DefaultMfr(6E);
P ActionCode(Ign)
Device PartName(10AX115S4F45) MfrSpec(OpMask(0));
P ActionCode(Ign)
Device PartName(5M2210Z) MfrSpec(OpMask(0) SEC_Device(CFI_1GB) Child_OpMask(3 1 1 1) PFLPath("${IMAGE_PATH}"))
ChainEnd;
AlteraBegin;
ChainType(JTAG);
AlteraEnd;
EOF
;;
rbf)
>&2 echo ".rbf files are not yet supported"
exit 1
;;
*)
>&2 echo "Unknown file type: ${IMAGE_BASENAME}"
exit 1
;;
esac
#cat $tmpcdf
#ug`pcie40_pgm.env`
# *QUARTUS_ROOTDIR*::
# The path to the Quartus installation to use. If defined, the programmer binary must be located at ``${QUARTUS_ROOTDIR}/bin/quartus_pgm``.
QUARTUS_PGM=quartus_pgm
if [ ! -z "${QUARTUS_ROOTDIR}" ]; then
QUARTUS_PGM=${QUARTUS_ROOTDIR}/bin/quartus_pgm
fi
${QUARTUS_PGM} -c ${JTAG_CABLE} $tmpcdf
pgm_result=$?
rm $tmpcdf
#ug`pcie40_pgm.exit`
# After programming, the tool simply returns the exit status produced by the internal call to the ``quartus_pgm`` command.
exit $pgm_result