From 7ff20c49ae40b1555d2a8f5cf9e7f837865eab59 Mon Sep 17 00:00:00 2001 From: Philip Smart Date: Sat, 14 Aug 2021 22:23:08 +0100 Subject: [PATCH 1/3] Updates --- docker/QuartusPrime/Dockerfile.13.0.1.old | 13 ++++ docker/QuartusPrime/local/13.0 | 1 + docker/QuartusPrime/local/13.1 | 1 + docker/QuartusPrime/local/17.1 | 1 + docker/QuartusPrime/local/18.1 | 1 + docker/QuartusPrime/quartus_docker.sh | 79 ++++++++++++++++++++++ software/roms/tzfs.rom | Bin 18432 -> 18432 bytes 7 files changed, 96 insertions(+) create mode 100644 docker/QuartusPrime/Dockerfile.13.0.1.old create mode 120000 docker/QuartusPrime/local/13.0 create mode 120000 docker/QuartusPrime/local/13.1 create mode 120000 docker/QuartusPrime/local/17.1 create mode 120000 docker/QuartusPrime/local/18.1 create mode 100755 docker/QuartusPrime/quartus_docker.sh diff --git a/docker/QuartusPrime/Dockerfile.13.0.1.old b/docker/QuartusPrime/Dockerfile.13.0.1.old new file mode 100644 index 0000000..ebdf748 --- /dev/null +++ b/docker/QuartusPrime/Dockerfile.13.0.1.old @@ -0,0 +1,13 @@ +FROM fpga-base as install +ADD Quartus-web-13.0.1.232-linux.tar /quartus +RUN mkdir -p /opt/quartus && /quartus/setup.sh --mode unattended --installdir /opt/quartus + +FROM fpga-base +ARG user_uid +ARG user_gid +ARG user_name +RUN groupadd -g $user_uid $user_name && \ + adduser -u $user_uid -g $user_gid -N -M -d /home/$user_name $user_name + +COPY --from=install /opt/quartus /opt/quartus +CMD ["/opt/quartus/quartus/bin/quartus", "--64bit"] diff --git a/docker/QuartusPrime/local/13.0 b/docker/QuartusPrime/local/13.0 new file mode 120000 index 0000000..4b34781 --- /dev/null +++ b/docker/QuartusPrime/local/13.0 @@ -0,0 +1 @@ +/srv/dvlp/Projects/dev/github/docker/QuartusPrime/local/13.0 \ No newline at end of file diff --git a/docker/QuartusPrime/local/13.1 b/docker/QuartusPrime/local/13.1 new file mode 120000 index 0000000..c6cb9c1 --- /dev/null +++ b/docker/QuartusPrime/local/13.1 @@ -0,0 +1 @@ +/srv/dvlp/Projects/dev/github/docker/QuartusPrime/local/13.1 \ No newline at end of file diff --git a/docker/QuartusPrime/local/17.1 b/docker/QuartusPrime/local/17.1 new file mode 120000 index 0000000..ffa919f --- /dev/null +++ b/docker/QuartusPrime/local/17.1 @@ -0,0 +1 @@ +/srv/dvlp/Projects/dev/github/docker/QuartusPrime/local/17.1 \ No newline at end of file diff --git a/docker/QuartusPrime/local/18.1 b/docker/QuartusPrime/local/18.1 new file mode 120000 index 0000000..78a5b33 --- /dev/null +++ b/docker/QuartusPrime/local/18.1 @@ -0,0 +1 @@ +/srv/dvlp/Projects/dev/github/docker/QuartusPrime/local/18.1 \ No newline at end of file diff --git a/docker/QuartusPrime/quartus_docker.sh b/docker/QuartusPrime/quartus_docker.sh new file mode 100755 index 0000000..35bfab0 --- /dev/null +++ b/docker/QuartusPrime/quartus_docker.sh @@ -0,0 +1,79 @@ +#!/bin/bash -x +######################################################################################################### +## +## Name: run_quartus.sh +## Created: August 2019 +## Author(s): Philip Smart +## Description: A shell script to start the Quartus Prime Docker image. +## +## Credits: +## Copyright: (c) 2019 Philip Smart +## +## History: August 2019 - Initial module written. +## +######################################################################################################### +## This source file is free software: you can redistribute it and#or modify +## it under the terms of the GNU General Public License as published +## by the Free Software Foundation, either version 3 of the License, or +## (at your option) any later version. +## +## This source file is distributed in the hope that it will be useful, +## but WITHOUT ANY WARRANTY; without even the implied warranty of +## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +## GNU General Public License for more details. +## +## You should have received a copy of the GNU General Public License +## along with this program. If not, see . +######################################################################################################### + +# Configurable parameters. The MAC_ADDRESS is needed if you are using a licensed Quartus as it uses the hostid which is the mac address. +# Set a default for the X-Display if the environment hasnt set it. +# +MAC_ADDR="02:50:dd:72:03:01" +PROJECT_DIR_HOST=/srv/ +PROJECT_DIR_IMAGE=/srv/ +DISPLAY=${DISPLAY:-192.168.15.210:0} +VERSION=$1 +INSTANCE=$2 +UUID=`id -u` +UGID=`id -g` +USERNAME=`whoami` +HOMEDIR=/home/${USERNAME} +ALTERAHOME=/srv/altera +QUARTUSHOME=${ALTERAHOME}/${VERSION} + +if [ "${VERSION}" = "17.1.1" -o "X${VERSION}" = "X" ]; then + VERSION=17.1.1 +elif [ "${VERSION}" != "13.0.1" -a "${VERSION}" != "13.1" ]; then + echo "Unknown QuartusII version:$1" +fi +# In order to get X-Forwarding from the container, we need to update the X Authorities and bind the authorisation file inside the virtual machine. +XSOCK=/tmp/.X11-unix +XAUTH=/tmp/.docker.xauth +NLIST=`xauth nlist $DISPLAY | sed -e 's/^..../ffff/'` +if [ "${NLIST}" != "" ]; then + echo ${NLIST} | xauth -f $XAUTH nmerge - +fi +chmod 777 $XAUTH + +# Run the Ubuntu hosted Quartus Prime service. + #--volume ${QUARTUSHOME}:/opt/altera \ +docker run --rm \ + --mac-address "${MAC_ADDR}" \ + --env DISPLAY=${DISPLAY} \ + --ipc=host \ + --env XAUTHORITY=${XAUTH} \ + -u ${UUID}:${UGID} \ + --privileged \ + --volume /dev:/dev \ + --volume ${HOMEDIR}:${HOMEDIR} \ + --volume ${PROJECT_DIR_HOST}:${PROJECT_DIR_IMAGE} \ + --volume ${XAUTH}:${XAUTH} \ + --volume ${XSOCK}:${XSOCK} \ + --volume /sys:/sys:ro \ + --name quartus${VERSION}${INSTANCE} \ + quartus-ii:${VERSION} & + +# Bring up a terminal session for any local changes. +sleep 5 +docker exec -it quartus${VERSION}${INSTANCE} bash diff --git a/software/roms/tzfs.rom b/software/roms/tzfs.rom index da29abfef41e5e86da59544f30ee0b4a5f7d9b3b..d2bec6525ce343177e24315b6a937f5b3a45561c 100644 GIT binary patch delta 395 zcmZpez}PT>aYH*JWAfwsm>B*}ZsIIpyf^tX zr!k}MWOc4+CC9%&{dNpSv)`Qj$E3glq)!M+fy7Rp)n&NV`$^Dx^AfHVj1oWoofT!M zID42`koiB5b(WKXRbinZ=l{tmJU0AtAfXCdpzK*T20``7>v?p!44}#c9Vb8IS;ZJQ zc_MEqW8!3XzWt0XlaKRF;4JwAvPF>b@8kr2IiQ>B`6W5OfW#!;3bssM$Um2BIf!S+ zcvA4xWDfy*#+j2l1hg5qP2M7)$oB8A1he3g$+rb086QsmDxk&~GFe8@jaYH*Jqy6L#MlZ(b&6gQj85uJs-(*r@^ql;U$&hivW&`F&ETRJc&NjR_ zc{~3Z`#)w4mwzm$_I?l)n5@oW&S*3_p5q{6&}2nURi;;eCVOyNFx~kxxrwuYao6O} zoW_itlhwJRm1O?{_1iHR&3<$8ACm$LkUk;!?GMPzv$_nodOrz@Z(hQ+f>Gkizq6tY z6=x4K3*HB@&T=xaDl8Oy`fqXyj}8AXu%spquLXB{?sE#3bGdCQM$)KbNZ+#Is{O zDY$I1hk!j}>EsRpZN^EHw+JY*-TEuREVy9uZ2?Kfy_3HRs4*H$mJzgLjG7!RXu{?S xlFZyZRWO8|d)q$=4#CoYK!KT?zeq@NZ#Ggn$2@rgi^?R8XN=98pKD0U0|0o`kH-K2 From a09523b44f002241aed37e89dfd007a58a223b7e Mon Sep 17 00:00:00 2001 From: Philip Smart Date: Sun, 15 Aug 2021 10:27:52 +0100 Subject: [PATCH 2/3] Updates --- docker/QuartusPrime/Dockerfile.13.0.1 | 173 ++++++++++++++++++ docker/QuartusPrime/Dockerfile.13.0.1.old | 13 -- docker/QuartusPrime/Dockerfile.13.1 | 168 +++++++++++++++++ docker/QuartusPrime/Dockerfile.17.1.1 | 158 ++++++++++++++++ docker/QuartusPrime/files/13.0 | 1 + docker/QuartusPrime/files/13.1 | 1 + docker/QuartusPrime/files/17.1 | 1 + docker/QuartusPrime/files/70-usb.rules | 13 ++ docker/QuartusPrime/files/libjtag_hw_arrow.so | Bin 0 -> 173960 bytes docker/QuartusPrime/files/license.dat | 1 + docker/QuartusPrime/files/quartus2.ini | 4 + docker/QuartusPrime/files/quartus2.qreg | 172 +++++++++++++++++ .../files/quartus_web_rules_file.txt | 0 docker/QuartusPrime/local/13.0 | 1 - docker/QuartusPrime/local/13.1 | 1 - docker/QuartusPrime/local/17.1 | 1 - docker/QuartusPrime/local/18.1 | 1 - docker/QuartusPrime/run_quartus.sh | 69 +++++++ 18 files changed, 761 insertions(+), 17 deletions(-) create mode 100644 docker/QuartusPrime/Dockerfile.13.0.1 delete mode 100644 docker/QuartusPrime/Dockerfile.13.0.1.old create mode 100644 docker/QuartusPrime/Dockerfile.13.1 create mode 100644 docker/QuartusPrime/Dockerfile.17.1.1 create mode 120000 docker/QuartusPrime/files/13.0 create mode 120000 docker/QuartusPrime/files/13.1 create mode 120000 docker/QuartusPrime/files/17.1 create mode 100755 docker/QuartusPrime/files/70-usb.rules create mode 100755 docker/QuartusPrime/files/libjtag_hw_arrow.so create mode 100755 docker/QuartusPrime/files/license.dat create mode 100755 docker/QuartusPrime/files/quartus2.ini create mode 100755 docker/QuartusPrime/files/quartus2.qreg create mode 100755 docker/QuartusPrime/files/quartus_web_rules_file.txt delete mode 120000 docker/QuartusPrime/local/13.0 delete mode 120000 docker/QuartusPrime/local/13.1 delete mode 120000 docker/QuartusPrime/local/17.1 delete mode 120000 docker/QuartusPrime/local/18.1 create mode 100755 docker/QuartusPrime/run_quartus.sh diff --git a/docker/QuartusPrime/Dockerfile.13.0.1 b/docker/QuartusPrime/Dockerfile.13.0.1 new file mode 100644 index 0000000..dcc963b --- /dev/null +++ b/docker/QuartusPrime/Dockerfile.13.0.1 @@ -0,0 +1,173 @@ +######################################################################################################### +## +## Name: Dockerfile.13.0.1 +## Created: June 2020 +## Author(s): Philip Smart +## Description: A Docker build script to create an Ubuntu 16.04 OS with Quartus Prime 13.0.1 +## +## Credits: +## Copyright: (c) 2019 Philip Smart +## +## History: August 2019 - Initial module written. +## June 2020 - Need to use a CPLD MAX series device which is only supported in +## Quartus 13. +## +######################################################################################################### +## This source file is free software: you can redistribute it and#or modify +## it under the terms of the GNU General Public License as published +## by the Free Software Foundation, either version 3 of the License, or +## (at your option) any later version. +## +## This source file is distributed in the hope that it will be useful, +## but WITHOUT ANY WARRANTY; without even the implied warranty of +## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +## GNU General Public License for more details. +## +## You should have received a copy of the GNU General Public License +## along with this program. If not, see . +######################################################################################################### + +# Ubuntu 16.04 as the base. +FROM ubuntu:xenial + +# Maintainer! +MAINTAINER Philip Smart + +# Set build time environment variables. +ENV DEBIAN_FRONTEND=noninteractive + +# Set constants for the build, more simpler to adjust these than the script if you want to change Quartus version. +# Uncomment one of the QUARTUS= arguments below depending on wether your using the LITE or STANDARD version of Quartus. +ARG TARGET_DOWNLOAD_DIR=/tmp/ +ARG INSTALLATION_DIR=/opt/altera +ARG ALTERA_DOWNLOAD_SITE=http://download.altera.com/akdlm/software/acdsinst +ARG QUARTUS_VERSION_INSTALLER=/13.0sp1/232/ib_installers/ +#ARG QUARTUS_VERSION_UPDATE=/13.0.1/232/update/ +#ARG QUARTUS=QuartusSetup-13.0.1.232.run +ARG QUARTUS=QuartusSetupWeb-13.0.1.232.run +#ARG QUARTUS_UPDATE=QuartusSetup-13.0.1.232.run +ARG QUARTUS_PROGRAMMER=QuartusProgrammerSetup-13.0.1.232.run +ARG QUARTUS_HELP=QuartusHelpSetup-13.0.1.232.run +ARG QUARTUS_LINUX_SUPPORT_BIN=linux-socfpga-13.02-RC10-bin.tar.gz +ARG QUARTUS_LINUX_SUPPORT_SRC=linux-socfpga-13.02-RC10-src.bsx +ARG QUARTUS_DEVICE_FILES="arria_web-13.0.1.232.qdz cyclonev-13.0.1.232.qdz cyclone_web-13.0.1.232.qdz cyclone-13.0.1.232.qdz max-13.0.1.232.qdz" + +# Base Ubuntu install, add necessary packages for Quartus, command line editting and web-browser. +RUN dpkg --add-architecture i386 +RUN apt-get update +RUN apt-get install --no-install-recommends -y \ + ca-certificates \ + libstdc++6:i386 \ + libc6:i386 \ + libx11-dev:i386 \ + libxext-dev:i386 \ + libxau-dev:i386 \ + libxdmcp-dev:i386 \ + libfreetype6:i386 \ + libxtst6:i386 \ + libxi6:i386 \ + fontconfig:i386 \ + expat:i386 \ + lib32ncurses5-dev \ + libc6:i386 \ + libcrypto++9v5 \ + libfontconfig1 \ + libglib2.0-0 \ + libncurses5:i386 \ + libsm6 \ + libsm6:i386 \ + libssl-dev \ + libstdc++6:i386 \ + libxext6:i386 \ + libxft2:i386 \ + libxrender1 \ + libzmq3-dev \ + libxext6:i386 \ + libxrender-dev:i386 \ + locales \ + make \ + openjdk-8-jdk \ + pkg-config \ + unixodbc-dev \ + wget \ + xauth \ + xvfb \ + net-tools \ + x11-apps \ + aptitude \ + vim \ + sudo \ + firefox + +# Setup environment defaults. +RUN echo "en_US.UTF-8 UTF-8" >> /etc/locale.gen && locale-gen +ENV LANG en_US.UTF-8 +ENV LANGUAGE en_US:en +ENV LC_ALL en_US.UTF-8 +ENV EXEC_DIR ${INSTALLATION_DIR} + +# +# UNCOMMENT PRODUCTION OR DEVELOPMENT ACCORDING TO REQUIREMENTS. +# + +# PRODUCTION CYCLE, fetch files from Altera as needed. +RUN echo "Fetching ${TARGET_DOWNLOAD_DIR} ${ALTERA_DOWNLOAD_SITE}/${QUARTUS_VERSION_INSTALLER}/${QUARTUS}" +RUN wget -q --directory-prefix=${TARGET_DOWNLOAD_DIR} ${ALTERA_DOWNLOAD_SITE}/${QUARTUS_VERSION_INSTALLER}/${QUARTUS} +#RUN echo "Fetching ${TARGET_DOWNLOAD_DIR} ${ALTERA_DOWNLOAD_SITE}/${QUARTUS_VERSION_INSTALLER}/${QUARTUS_UPDATE}" +#RUN wget -q --directory-prefix=${TARGET_DOWNLOAD_DIR} ${ALTERA_DOWNLOAD_SITE}/${QUARTUS_VERSION_UPDATE}/${QUARTUS_UPDATE} +RUN echo "Fetching ${TARGET_DOWNLOAD_DIR} ${ALTERA_DOWNLOAD_SITE}/${QUARTUS_VERSION_INSTALLER}/${QUARTUS_PROGRAMMER}" +RUN wget -q --directory-prefix=${TARGET_DOWNLOAD_DIR} ${ALTERA_DOWNLOAD_SITE}/${QUARTUS_VERSION_INSTALLER}/${QUARTUS_PROGRAMMER} +RUN echo "Fetching ${TARGET_DOWNLOAD_DIR} ${ALTERA_DOWNLOAD_SITE}/${QUARTUS_VERSION_INSTALLER}/${QUARTUS_HELP}" +RUN wget -q --directory-prefix=${TARGET_DOWNLOAD_DIR} ${ALTERA_DOWNLOAD_SITE}/${QUARTUS_VERSION_INSTALLER}/${QUARTUS_HELP} +RUN echo "Fetching ${TARGET_DOWNLOAD_DIR} ${ALTERA_DOWNLOAD_SITE}/${QUARTUS_VERSION_INSTALLER}/${QUARTUS_LINUX_SUPPORT_BIN}" +RUN wget -q --directory-prefix=${TARGET_DOWNLOAD_DIR} ${ALTERA_DOWNLOAD_SITE}/${QUARTUS_VERSION_INSTALLER}/${QUARTUS_LINUX_SUPPORT_BIN} +RUN echo "Fetching ${TARGET_DOWNLOAD_DIR} ${ALTERA_DOWNLOAD_SITE}/${QUARTUS_VERSION_INSTALLER}/${QUARTUS_LINUX_SUPPORT_SRC}" +RUN wget -q --directory-prefix=${TARGET_DOWNLOAD_DIR} ${ALTERA_DOWNLOAD_SITE}/${QUARTUS_VERSION_INSTALLER}/${QUARTUS_LINUX_SUPPORT_SRC} +RUN for DEVICE_FILE in ${QUARTUS_DEVICE_FILES}; \ + do \ + echo "Fetching ${TARGET_DOWNLOAD_DIR} ${ALTERA_DOWNLOAD_SITE}/${QUARTUS_VERSION_INSTALLER}/${DEVICE_FILE}"; \ + wget -q --directory-prefix=${TARGET_DOWNLOAD_DIR} ${ALTERA_DOWNLOAD_SITE}/${QUARTUS_VERSION_INSTALLER}/${DEVICE_FILE}; \ + done + +# DEVELOPMENT CYCLE, quartus files cached locally. +#COPY ./files/13.0/*.qdz ${TARGET_DOWNLOAD_DIR} +#COPY ./files/13.0/*.run ${TARGET_DOWNLOAD_DIR} + +# Install Quartus. +RUN chmod +x ${TARGET_DOWNLOAD_DIR}${QUARTUS} +#RUN chmod +x ${TARGET_DOWNLOAD_DIR}${QUARTUS_UPDATE} +RUN chmod +x ${TARGET_DOWNLOAD_DIR}${QUARTUS_PROGRAMMER} +RUN chmod +x ${TARGET_DOWNLOAD_DIR}${QUARTUS_HELP} +RUN ${TARGET_DOWNLOAD_DIR}${QUARTUS} --mode unattended --installdir ${INSTALLATION_DIR}/ #--accept_eula 1 +#RUN ${TARGET_DOWNLOAD_DIR}${QUARTUS_UPDATE} --mode unattended --installdir ${INSTALLATION_DIR}/ #--accept_eula 1 +RUN ${TARGET_DOWNLOAD_DIR}${QUARTUS_PROGRAMMER} --mode unattended --installdir ${INSTALLATION_DIR}/ #--accept_eula 1 +RUN ${TARGET_DOWNLOAD_DIR}${QUARTUS_HELP} --mode unattended --installdir ${INSTALLATION_DIR}/ #--accept_eula 1 + +# Copy the license file, this would be a dummy for the Lite version or a genuine one for the Standard version coded to the host +# MAC Address. +COPY ./files/license.dat ${INSTALLATION_DIR}/ + +# Copy quartus config files to enable the license. +COPY ./files/quartus2.* /root/.altera.quartus/ +COPY ./files/quartus_web_rules_file.txt /root/.altera.quartus/ + +# Copy the Arrow USB Blaster and setup the udev rules to detect and mount USB-Blaster I and II devices. +COPY ./files/libjtag_hw_arrow.so ${INSTALLATION_DIR}/quartus/linux64/ +COPY ./files/70-usb.rules /etc/udev/rules.d/ + +# Setup necessary environment variables. +RUN echo "export PATH=\$PATH:${INSTALLATION_DIR}/quartus/bin:${INSTALLATION_DIR}/qprogrammer/bin" >> /root/.bashrc +RUN echo "export LM_LICENSE_FILE=${INSTALLATION_DIR}/license.dat" >> /root/.bashrc + +# Clean up, removing unnecessary installation files. +RUN rm -rf ${TARGET_DOWNLOAD_DIR}/* ${INSTALLATION_DIR}/uninstall ${INSTALLATION_DIR}/logs/* + +# Add the current user into the image. +ARG user_uid +ARG user_gid +ARG user_name +RUN groupadd -g $user_uid $user_name +RUN adduser --uid $user_uid --gid $user_gid --disabled-password --gecos $user_name --home /home/$user_name $user_name + +# Start Quartus +CMD ${EXEC_DIR}/quartus/bin/quartus --64bit diff --git a/docker/QuartusPrime/Dockerfile.13.0.1.old b/docker/QuartusPrime/Dockerfile.13.0.1.old deleted file mode 100644 index ebdf748..0000000 --- a/docker/QuartusPrime/Dockerfile.13.0.1.old +++ /dev/null @@ -1,13 +0,0 @@ -FROM fpga-base as install -ADD Quartus-web-13.0.1.232-linux.tar /quartus -RUN mkdir -p /opt/quartus && /quartus/setup.sh --mode unattended --installdir /opt/quartus - -FROM fpga-base -ARG user_uid -ARG user_gid -ARG user_name -RUN groupadd -g $user_uid $user_name && \ - adduser -u $user_uid -g $user_gid -N -M -d /home/$user_name $user_name - -COPY --from=install /opt/quartus /opt/quartus -CMD ["/opt/quartus/quartus/bin/quartus", "--64bit"] diff --git a/docker/QuartusPrime/Dockerfile.13.1 b/docker/QuartusPrime/Dockerfile.13.1 new file mode 100644 index 0000000..c8c29b6 --- /dev/null +++ b/docker/QuartusPrime/Dockerfile.13.1 @@ -0,0 +1,168 @@ +######################################################################################################### +## +## Name: Dockerfile.13.1.1 +## Created: June 2020 +## Author(s): Philip Smart +## Description: A Docker build script to create an Ubuntu 16.04 OS with Quartus Prime 13.1 +## +## Credits: +## Copyright: (c) 2019 Philip Smart +## +## History: August 2019 - Initial module written. +## June 2020 - Need to use a CPLD MAX series device which is only supported in +## Quartus 13. +## +######################################################################################################### +## This source file is free software: you can redistribute it and#or modify +## it under the terms of the GNU General Public License as published +## by the Free Software Foundation, either version 3 of the License, or +## (at your option) any later version. +## +## This source file is distributed in the hope that it will be useful, +## but WITHOUT ANY WARRANTY; without even the implied warranty of +## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +## GNU General Public License for more details. +## +## You should have received a copy of the GNU General Public License +## along with this program. If not, see . +######################################################################################################### + +# Ubuntu 16.04 as the base. +FROM ubuntu:xenial + +# Maintainer! +MAINTAINER Philip Smart + +# Set build time environment variables. +ENV DEBIAN_FRONTEND=noninteractive + +# Set constants for the build, more simpler to adjust these than the script if you want to change Quartus version. +# Uncomment one of the QUARTUS= arguments below depending on wether your using the LITE or STANDARD version of Quartus. +ARG TARGET_DOWNLOAD_DIR=/tmp/ +ARG INSTALLATION_DIR=/opt/altera +ARG ALTERA_DOWNLOAD_SITE=http://download.altera.com/akdlm/software/acdsinst +ARG QUARTUS_VERSION_INSTALLER=/13.1/162/ib_installers/ +ARG QUARTUS_VERSION_UPDATE=/13.1.0/162/update/ +ARG QUARTUS=QuartusSetup-13.1.0.162.run +#ARG QUARTUS=QuartusLiteSetup-13.1.0.162.run +ARG QUARTUS_UPDATE=QuartusSetup-13.1.0.162.run +ARG QUARTUS_PROGRAMMER=QuartusProgrammerSetup-13.1.0.162.run +ARG QUARTUS_HELP=QuartusHelpSetup-13.1.0.162.run +ARG QUARTUS_DEVICE_FILES="arria-13.1.0.162 arriav-13.1.0.162 arriavgz-13.1.0.162 arria_web-13.1.0.162 cyclone-13.1.0.162 cyclonev-13.1.0.162 cyclone_web-13.1.0.162 max-13.1.0.162 max-17.1.0.590 max_web-13.1.0.162 stratixv-13.1.0.162" + + +# Base Ubuntu install, add necessary packages for Quartus, command line editting and web-browser. +RUN dpkg --add-architecture i386 +RUN apt-get update +RUN apt-get install --no-install-recommends -y \ + ca-certificates \ + libstdc++6:i386 \ + libc6:i386 \ + libx11-dev:i386 \ + libxext-dev:i386 \ + libxau-dev:i386 \ + libxdmcp-dev:i386 \ + libfreetype6:i386 \ + libxtst6:i386 \ + libxi6:i386 \ + fontconfig:i386 \ + expat:i386 \ + lib32ncurses5-dev \ + libc6:i386 \ + libcrypto++9v5 \ + libfontconfig1 \ + libglib2.0-0 \ + libncurses5:i386 \ + libsm6 \ + libsm6:i386 \ + libssl-dev \ + libstdc++6:i386 \ + libxext6:i386 \ + libxft2:i386 \ + libxrender1 \ + libzmq3-dev \ + libxext6:i386 \ + libxrender-dev:i386 \ + locales \ + make \ + openjdk-8-jdk \ + pkg-config \ + unixodbc-dev \ + wget \ + xauth \ + xvfb \ + net-tools \ + x11-apps \ + aptitude \ + vim \ + sudo \ + firefox + +# Setup environment defaults. +RUN echo "en_US.UTF-8 UTF-8" >> /etc/locale.gen && locale-gen +ENV LANG en_US.UTF-8 +ENV LANGUAGE en_US:en +ENV LC_ALL en_US.UTF-8 +ENV EXEC_DIR ${INSTALLATION_DIR} + +# +# UNCOMMENT PRODUCTION OR DEVELOPMENT ACCORDING TO REQUIREMENTS. +# + +# PRODUCTION CYCLE, fetch files from Altera as needed. +RUN echo "Fetching ${TARGET_DOWNLOAD_DIR} ${ALTERA_DOWNLOAD_SITE}/${QUARTUS_VERSION_INSTALLER}/${QUARTUS}" +RUN wget -q --directory-prefix=${TARGET_DOWNLOAD_DIR} ${ALTERA_DOWNLOAD_SITE}/${QUARTUS_VERSION_INSTALLER}/${QUARTUS} +#RUN echo "Fetching ${TARGET_DOWNLOAD_DIR} ${ALTERA_DOWNLOAD_SITE}/${QUARTUS_VERSION_INSTALLER}/${QUARTUS_UPDATE}" +#RUN wget -q --directory-prefix=${TARGET_DOWNLOAD_DIR} ${ALTERA_DOWNLOAD_SITE}/${QUARTUS_VERSION_UPDATE}/${QUARTUS_UPDATE} +RUN echo "Fetching ${TARGET_DOWNLOAD_DIR} ${ALTERA_DOWNLOAD_SITE}/${QUARTUS_VERSION_INSTALLER}/${QUARTUS_PROGRAMMER}" +RUN wget -q --directory-prefix=${TARGET_DOWNLOAD_DIR} ${ALTERA_DOWNLOAD_SITE}/${QUARTUS_VERSION_INSTALLER}/${QUARTUS_PROGRAMMER} +RUN echo "Fetching ${TARGET_DOWNLOAD_DIR} ${ALTERA_DOWNLOAD_SITE}/${QUARTUS_VERSION_INSTALLER}/${QUARTUS_HELP}" +RUN wget -q --directory-prefix=${TARGET_DOWNLOAD_DIR} ${ALTERA_DOWNLOAD_SITE}/${QUARTUS_VERSION_INSTALLER}/${QUARTUS_HELP} +RUN for DEVICE_FILE in ${QUARTUS_DEVICE_FILES}; \ + do \ + echo "Fetching ${TARGET_DOWNLOAD_DIR} ${ALTERA_DOWNLOAD_SITE}/${QUARTUS_VERSION_INSTALLER}/${DEVICE_FILE}"; \ + wget -q --directory-prefix=${TARGET_DOWNLOAD_DIR} ${ALTERA_DOWNLOAD_SITE}/${QUARTUS_VERSION_INSTALLER}/${DEVICE_FILE}; \ + done + +# DEVELOPMENT CYCLE, quartus files cached locally. +#COPY ./files/13.1/*.qdz ${TARGET_DOWNLOAD_DIR} +#COPY ./files/13.1/*.run ${TARGET_DOWNLOAD_DIR} + +# Install Quartus. +RUN chmod +x ${TARGET_DOWNLOAD_DIR}${QUARTUS} +#RUN chmod +x ${TARGET_DOWNLOAD_DIR}${QUARTUS_UPDATE} +RUN chmod +x ${TARGET_DOWNLOAD_DIR}${QUARTUS_PROGRAMMER} +RUN chmod +x ${TARGET_DOWNLOAD_DIR}${QUARTUS_HELP} +RUN ${TARGET_DOWNLOAD_DIR}${QUARTUS} --mode unattended --installdir ${INSTALLATION_DIR}/ #--accept_eula 1 +#RUN ${TARGET_DOWNLOAD_DIR}${QUARTUS_UPDATE} --mode unattended --installdir ${INSTALLATION_DIR}/ #--accept_eula 1 +RUN ${TARGET_DOWNLOAD_DIR}${QUARTUS_PROGRAMMER} --mode unattended --installdir ${INSTALLATION_DIR}/ #--accept_eula 1 +RUN ${TARGET_DOWNLOAD_DIR}${QUARTUS_HELP} --mode unattended --installdir ${INSTALLATION_DIR}/ #--accept_eula 1 + +# Copy the license file, this would be a dummy for the Lite version or a genuine one for the Standard version coded to the host +# MAC Address. +COPY ./files/license.dat ${INSTALLATION_DIR}/ + +# Copy quartus config files to enable the license. +COPY ./files/quartus2.* /root/.altera.quartus/ +COPY ./files/quartus_web_rules_file.txt /root/.altera.quartus/ + +# Copy the Arrow USB Blaster and setup the udev rules to detect and mount USB-Blaster I and II devices. +COPY ./files/libjtag_hw_arrow.so ${INSTALLATION_DIR}/quartus/linux64/ +COPY ./files/70-usb.rules /etc/udev/rules.d/ + +# Setup necessary environment variables. +RUN echo "export PATH=\$PATH:${INSTALLATION_DIR}/quartus/bin:${INSTALLATION_DIR}/qprogrammer/bin" >> /root/.bashrc +RUN echo "export LM_LICENSE_FILE=${INSTALLATION_DIR}/license.dat" >> /root/.bashrc + +# Clean up, removing unnecessary installation files. +RUN rm -rf ${TARGET_DOWNLOAD_DIR}/* ${INSTALLATION_DIR}/uninstall ${INSTALLATION_DIR}/logs/* + +# Add the current user into the image. +ARG user_uid +ARG user_gid +ARG user_name +RUN groupadd -g $user_uid $user_name +RUN adduser --uid $user_uid --gid $user_gid --disabled-password --gecos $user_name --home /home/$user_name $user_name + +# Start Quartus +CMD ${EXEC_DIR}/quartus/bin/quartus --64bit diff --git a/docker/QuartusPrime/Dockerfile.17.1.1 b/docker/QuartusPrime/Dockerfile.17.1.1 new file mode 100644 index 0000000..ce16720 --- /dev/null +++ b/docker/QuartusPrime/Dockerfile.17.1.1 @@ -0,0 +1,158 @@ +######################################################################################################### +## +## Name: Dockerfile.17.1.1 +## Created: August 2019 +## Author(s): Philip Smart +## Description: A Docker build script to create an Ubuntu 16.04 OS with Quartus Prime 17.1.1 +## +## Credits: +## Copyright: (c) 2019 Philip Smart +## +## History: August 2019 - Initial module written. +## +######################################################################################################### +## This source file is free software: you can redistribute it and#or modify +## it under the terms of the GNU General Public License as published +## by the Free Software Foundation, either version 3 of the License, or +## (at your option) any later version. +## +## This source file is distributed in the hope that it will be useful, +## but WITHOUT ANY WARRANTY; without even the implied warranty of +## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +## GNU General Public License for more details. +## +## You should have received a copy of the GNU General Public License +## along with this program. If not, see . +######################################################################################################### + + +# Ubuntu 16.04 as the base. +FROM ubuntu:xenial + +# Maintainer! +MAINTAINER Philip Smart + +# Set build time environment variables. +ENV DEBIAN_FRONTEND=noninteractive + +# Set constants for the build, more simpler to adjust these than the script if you want to change Quartus version. +# Uncomment one of the QUARTUS= arguments below depending on wether your using the LITE or STANDARD version of Quartus. +ARG TARGET_DOWNLOAD_DIR=/tmp/ +ARG INSTALLATION_DIR=/opt/altera +ARG ALTERA_DOWNLOAD_SITE=http://download.altera.com/akdlm/software/acdsinst +ARG QUARTUS_VERSION_INSTALLER=/17.1std/590/ib_installers/ +ARG QUARTUS_VERSION_UPDATE=/17.1std.1/593/update/ +#ARG QUARTUS=QuartusSetup-17.1.0.590-linux.run +ARG QUARTUS=QuartusLiteSetup-17.1.0.590-linux.run +ARG QUARTUS_UPDATE=QuartusSetup-17.1.1.593-linux.run +ARG QUARTUS_PROGRAMMER=QuartusProgrammerSetup-17.1.0.590-linux.run +ARG QUARTUS_HELP=QuartusHelpSetup-17.1.0.590-linux.run +ARG QUARTUS_DEVICE_FILES="arria_lite-17.1.0.590.qdz cyclone10lp-17.1.0.590.qdz cyclone-17.1.0.590.qdz cyclonev-17.1.0.590.qdz max10-17.1.0.590.qdz max-17.1.0.590.qdz" + +# Base Ubuntu install, add necessary packages for Quartus, command line editting and web-browser. +RUN dpkg --add-architecture i386 +RUN apt-get update +RUN apt-get install --no-install-recommends -y \ + ca-certificates \ + libstdc++6:i386 \ + libc6:i386 \ + libx11-dev:i386 \ + libxext-dev:i386 \ + libxau-dev:i386 \ + libxdmcp-dev:i386 \ + libfreetype6:i386 \ + fontconfig:i386 \ + expat:i386 \ + lib32ncurses5-dev \ + libc6:i386 \ + libcrypto++9v5 \ + libfontconfig1 \ + libglib2.0-0 \ + libncurses5:i386 \ + libsm6 \ + libsm6:i386 \ + libssl-dev \ + libstdc++6:i386 \ + libxext6:i386 \ + libxft2:i386 \ + libxrender1 \ + libzmq3-dev \ + libxext6:i386 \ + libxrender-dev:i386 \ + locales \ + make \ + openjdk-8-jdk \ + pkg-config \ + unixodbc-dev \ + wget \ + xauth \ + xvfb \ + net-tools \ + x11-apps \ + vim \ + firefox + +# Setup environment defaults. +RUN echo "en_US.UTF-8 UTF-8" >> /etc/locale.gen && locale-gen +ENV LANG en_US.UTF-8 +ENV LANGUAGE en_US:en +ENV LC_ALL en_US.UTF-8 +ENV EXEC_DIR ${INSTALLATION_DIR} + +# +# UNCOMMENT PRODUCTION OR DEVELOPMENT ACCORDING TO REQUIREMENTS. +# + +# PRODUCTION CYCLE, fetch files from Altera as needed. +RUN wget -q --directory-prefix=${TARGET_DOWNLOAD_DIR} ${ALTERA_DOWNLOAD_SITE}/${QUARTUS_VERSION_INSTALLER}/${QUARTUS} +RUN wget -q --directory-prefix=${TARGET_DOWNLOAD_DIR} ${ALTERA_DOWNLOAD_SITE}/${QUARTUS_VERSION_UPDATE}/${QUARTUS_UPDATE} +RUN wget -q --directory-prefix=${TARGET_DOWNLOAD_DIR} ${ALTERA_DOWNLOAD_SITE}/${QUARTUS_VERSION_INSTALLER}/${QUARTUS_PROGRAMMER} +RUN wget -q --directory-prefix=${TARGET_DOWNLOAD_DIR} ${ALTERA_DOWNLOAD_SITE}/${QUARTUS_VERSION_INSTALLER}/${QUARTUS_HELP} +RUN for DEVICE_FILE in ${QUARTUS_DEVICE_FILES}; \ + do \ + echo "Fetching ${TARGET_DOWNLOAD_DIR} ${ALTERA_DOWNLOAD_SITE}/${QUARTUS_VERSION_INSTALLER}/${DEVICE_FILE}"; \ + wget -q --directory-prefix=${TARGET_DOWNLOAD_DIR} ${ALTERA_DOWNLOAD_SITE}/${QUARTUS_VERSION_INSTALLER}/${DEVICE_FILE}; \ + done + +# DEVELOPMENT CYCLE, quartus files cached locally. +#COPY ./files/17.1/*.qdz ${TARGET_DOWNLOAD_DIR} +#COPY ./files/17.1/*.run ${TARGET_DOWNLOAD_DIR} + +# Install Quartus. +RUN chmod +x ${TARGET_DOWNLOAD_DIR}${QUARTUS} +RUN chmod +x ${TARGET_DOWNLOAD_DIR}${QUARTUS_UPDATE} +RUN chmod +x ${TARGET_DOWNLOAD_DIR}${QUARTUS_PROGRAMMER} +RUN chmod +x ${TARGET_DOWNLOAD_DIR}${QUARTUS_HELP} +RUN ${TARGET_DOWNLOAD_DIR}${QUARTUS} --mode unattended --installdir ${INSTALLATION_DIR}/ --accept_eula 1 +RUN ${TARGET_DOWNLOAD_DIR}${QUARTUS_UPDATE} --mode unattended --installdir ${INSTALLATION_DIR}/ --accept_eula 1 +RUN ${TARGET_DOWNLOAD_DIR}${QUARTUS_PROGRAMMER} --mode unattended --installdir ${INSTALLATION_DIR}/ --accept_eula 1 +RUN ${TARGET_DOWNLOAD_DIR}${QUARTUS_HELP} --mode unattended --installdir ${INSTALLATION_DIR}/ --accept_eula 1 + +# Copy the license file, this would be a dummy for the Lite version or a genuine one for the Standard version coded to the host +# MAC Address. +COPY ./files/license.dat ${INSTALLATION_DIR}/ + +# Copy quartus config files to enable the license. +COPY ./files/quartus2.* /root/.altera.quartus/ +COPY ./files/quartus_web_rules_file.txt /root/.altera.quartus/ + +# Copy the Arrow USB Blaster and setup the udev rules to detect and mount USB-Blaster I and II devices. +COPY ./files/libjtag_hw_arrow.so ${INSTALLATION_DIR}/quartus/linux64/ +COPY ./files/70-usb.rules /etc/udev/rules.d/ + +# Setup necessary environment variables. +RUN echo "export PATH=\$PATH:${INSTALLATION_DIR}/quartus/bin:${INSTALLATION_DIR}/qprogrammer/bin" >> /root/.bashrc +RUN echo "export LM_LICENSE_FILE=${INSTALLATION_DIR}/license.dat" >> /root/.bashrc + +# Clean up, removing unnecessary installation files. +RUN rm -rf ${TARGET_DOWNLOAD_DIR}/* ${INSTALLATION_DIR}/uninstall ${INSTALLATION_DIR}/logs/* +# +# Add the current user into the image. +ARG user_uid +ARG user_gid +ARG user_name +RUN groupadd -g $user_uid $user_name +RUN adduser --uid $user_uid --gid $user_gid --disabled-password --gecos $user_name --home /home/$user_name $user_name + +# Start Quartus +CMD ${EXEC_DIR}/quartus/bin/quartus --64bit diff --git a/docker/QuartusPrime/files/13.0 b/docker/QuartusPrime/files/13.0 new file mode 120000 index 0000000..ff19dd2 --- /dev/null +++ b/docker/QuartusPrime/files/13.0 @@ -0,0 +1 @@ +/srv/dvlp/Projects/dev/github/docker/QuartusPrime/files/13.0 \ No newline at end of file diff --git a/docker/QuartusPrime/files/13.1 b/docker/QuartusPrime/files/13.1 new file mode 120000 index 0000000..60ba561 --- /dev/null +++ b/docker/QuartusPrime/files/13.1 @@ -0,0 +1 @@ +/srv/dvlp/Projects/dev/github/docker/QuartusPrime/files/13.1 \ No newline at end of file diff --git a/docker/QuartusPrime/files/17.1 b/docker/QuartusPrime/files/17.1 new file mode 120000 index 0000000..b9dd1e2 --- /dev/null +++ b/docker/QuartusPrime/files/17.1 @@ -0,0 +1 @@ +/srv/dvlp/Projects/dev/github/docker/QuartusPrime/files/17.1 \ No newline at end of file diff --git a/docker/QuartusPrime/files/70-usb.rules b/docker/QuartusPrime/files/70-usb.rules new file mode 100755 index 0000000..c1e53f4 --- /dev/null +++ b/docker/QuartusPrime/files/70-usb.rules @@ -0,0 +1,13 @@ +=== +# USB-Blaster +SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", ATTRS{idVendor}=="09fb", ATTRS{idProduct}=="6001", MODE="0666", SYMLINK+="usbblaster/%k" +SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", ATTRS{idVendor}=="09fb", ATTRS{idProduct}=="6002", MODE="0666", SYMLINK+="usbblaster/%k" +SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", ATTRS{idVendor}=="09fb", ATTRS{idProduct}=="6003", MODE="0666", SYMLINK+="usbblaster/%k" + +# USB-Blaster II +SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", ATTRS{idVendor}=="09fb", ATTRS{idProduct}=="6010", MODE="0666", SYMLINK+="usbblaster2/%k" +SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", ATTRS{idVendor}=="09fb", ATTRS{idProduct}=="6810", MODE="0666", SYMLINK+="usbblaster2/%k" +=== + +# Arrow-USB-Blaster +SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6010", MODE="0666", SYMLINK+="usbblasterarrow/%k" diff --git a/docker/QuartusPrime/files/libjtag_hw_arrow.so b/docker/QuartusPrime/files/libjtag_hw_arrow.so new file mode 100755 index 0000000000000000000000000000000000000000..e05ff645cf2baac60f61006b9b4cabf59fe3a22a GIT binary patch literal 173960 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 unj61 +## +## History: August 2019 - Initial module written. +## +######################################################################################################### +## This source file is free software: you can redistribute it and#or modify +## it under the terms of the GNU General Public License as published +## by the Free Software Foundation, either version 3 of the License, or +## (at your option) any later version. +## +## This source file is distributed in the hope that it will be useful, +## but WITHOUT ANY WARRANTY; without even the implied warranty of +## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +## GNU General Public License for more details. +## +## You should have received a copy of the GNU General Public License +## along with this program. If not, see . +######################################################################################################### + +# Configurable parameters. The MAC_ADDRESS is needed if you are using a licensed Quartus as it uses the hostid which is the mac address. +# Set a default for the X-Display if the environment hasnt set it. +# +MAC_ADDR="02:50:dd:72:03:01" +PROJECT_DIR_HOST=/srv/quartus +PROJECT_DIR_IMAGE=/srv/quartus +DISPLAY=${DISPLAY:-192.168.15.210:0} +VERSION=$1 + +if [ "${VERSION}" = "17.1.1" -o "X${VERSION}" = "X" ]; then + VERSION=17.1.1 +elif [ "${VERSION}" != "13.0.1" -a "${VERSION}" != "13.1" ]; then + echo "Unknown QuartusII version:$1" +fi +# In order to get X-Forwarding from the container, we need to update the X Authorities and bind the authorisation file inside the virtual machine. +XSOCK=/tmp/.X11-unix +XAUTH=/tmp/.docker.xauth +NLIST=`xauth nlist $DISPLAY | sed -e 's/^..../ffff/'` +if [ "${NLIST}" != "" ]; then + echo ${NLIST} | xauth -f $XAUTH nmerge - +fi +chmod 777 $XAUTH + +# Run the Ubuntu hosted Quartus Prime service. +docker run --rm \ + --mac-address "${MAC_ADDR}" \ + --env DISPLAY=${DISPLAY} \ + --ipc=host \ + --env XAUTHORITY=${XAUTH} \ + --privileged \ + --volume /dev:/dev \ + --volume ${PROJECT_DIR_HOST}:${PROJECT_DIR_IMAGE} \ + --volume ${XAUTH}:${XAUTH} \ + --volume ${XSOCK}:${XSOCK} \ + --volume /sys:/sys:ro \ + --name quartus${VERSION} \ + quartus-ii-${VERSION} & + +# Bring up a terminal session for any local changes. +sleep 5 +docker exec -it quartus${VERSION} bash From 46658ad6d7c548001407805435cda4264267ef5c Mon Sep 17 00:00:00 2001 From: Philip Smart Date: Sat, 21 Aug 2021 15:27:22 +0100 Subject: [PATCH 3/3] Updated ignore --- .gitignore | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 45c5a3e..6bbc617 100644 --- a/.gitignore +++ b/.gitignore @@ -171,4 +171,27 @@ FPGA/SW700/devices/ FPGA/SW700/functions.vhd FPGA/SW700/vidsav tools/Mars4_5.jar - +CPLD/SW700/v1.2/ +CPLD/SW700/v1.3.bak/ +CPLD/SW700/v1.3/ +FPGA/SW700/v1.2/ +FPGA/SW700/v1.3.bak/ +FPGA/SW700/v1.3/ +FPGA/a-z80/ +FPGA/a-z80_latest.tar.gz +FPGA/nextz80/ +FPGA/nextz80_latest.tar.gz +SD/ +cpu/zpu_core_evo.vhd.06052012 +devices/sysbus/BRAM/TZSW_DualPort32-64BootBRAM.vhd +devices/sysbus/BRAM/TZSW_DualPort3264BootBRAM.vhd +schematics/sep/ +software.bak/ +software/DSK +software/MZ800_IOCS.ref +software/asm/new/ +software/asm/savit +software/dz80.ini +software/full.asm +software/mif/monitor_SA1510.mif.bak +software/mif/monitor_SA1510.mif.tst