diff --git a/build_id.v b/build_id.v index fd7cb77..7acead5 100644 --- a/build_id.v +++ b/build_id.v @@ -1,2 +1,2 @@ -`define BUILD_DATE "200510" -`define BUILD_TIME "113233" +`define BUILD_DATE "210506" +`define BUILD_TIME "213518" 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.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/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 0000000..e05ff64 Binary files /dev/null and b/docker/QuartusPrime/files/libjtag_hw_arrow.so differ diff --git a/docker/QuartusPrime/files/license.dat b/docker/QuartusPrime/files/license.dat new file mode 100755 index 0000000..5fe9c98 --- /dev/null +++ b/docker/QuartusPrime/files/license.dat @@ -0,0 +1 @@ +# Place your license in this file. diff --git a/docker/QuartusPrime/files/quartus2.ini b/docker/QuartusPrime/files/quartus2.ini new file mode 100755 index 0000000..18cc7b0 --- /dev/null +++ b/docker/QuartusPrime/files/quartus2.ini @@ -0,0 +1,4 @@ + +[General 17.1] +LICENSE_FILE = /opt/altera/license.dat +WAIT_FOR_LICENSE = off diff --git a/docker/QuartusPrime/files/quartus2.qreg b/docker/QuartusPrime/files/quartus2.qreg new file mode 100755 index 0000000..8d3e39e --- /dev/null +++ b/docker/QuartusPrime/files/quartus2.qreg @@ -0,0 +1,172 @@ +[17.1] +Registry_version=27 +Altera_Foundation_Class\quartusQuartus_Prime_17.1_Lite_EditionDialogGeometry=@ByteArray(\x1\xd9\xd0\xcb\0\x1\0\0\0\0\f\x17\0\0\x6\xb8\0\0\xe\xf5\0\0\a\xc8\0\0\f\x17\0\0\x6\xb8\0\0\xe\xf5\0\0\a\xc8\0\0\0\0\0\0) +Toolbar\Large_icons=true +Quartus_UI_Framework\startup_failed=No +Messages\id_column_in_quartus_12_1_and_later=true +General\Check_for_New_Info_Message_at_Startup=Yes +General\Confirm_Before_Connect_to_Internet=No +General\Current_Message_Release_Number=0 +General\TalkForward_Message_URL= +General\quartusShow_welcome_screen=true +General\quartusClose_welcome_screen_after_project_load=true +General\Tooltip_enable=true +General\Tooltip_interval=5 +General\Tooltip_hide_interval=1 +Chip_Viewer\Tooltip_enable=true +Chip_Viewer\Tooltip_interval=5 +Chip_Viewer\Tooltip_hide_interval=1 +Logical_Floorplan\Tooltip_enable=true +Logical_Floorplan\Tooltip_interval=5 +Logical_Floorplan\Tooltip_hide_interval=1 +Atom_Property_Editor\Tooltip_enable=true +Atom_Property_Editor\Tooltip_interval=5 +Atom_Property_Editor\Tooltip_hide_interval=1 +RTL_Viewer\Tooltip_enable=true +RTL_Viewer\Tooltip_Interval=5 +RTL_Viewer\Tooltip_Hide_Interval=1 +State_Machine_Viewer\Tooltip_enable=true +State_Machine_Viewer\Tooltip_Interval=5 +State_Machine_Viewer\Tooltip_Hide_Interval=1 +Pin_Planner\Tooltip_enable=true +Pin_Planner\Tooltip_interval=5 +Pin_Planner\Tooltip_hide_interval=1 +Altera_Foundation_Class\quartusOptionsDialogGeometry="@ByteArray(\x1\xd9\xd0\xcb\0\x1\0\0\0\0\x3;\0\0\x1r\0\0\b\xb2\0\0\x4\x91\0\0\x3;\0\0\x1r\0\0\b\xb2\0\0\x4\x91\0\0\0\x2\0\0)" +Altera_Foundation_Class\quartusSelect_FileFileDialogGeometry=@ByteArray(\x1\xd9\xd0\xcb\0\x1\0\0\0\0\b\x8a\0\0\x1y\0\0\v\x4\0\0\x3/\0\0\b\x8a\0\0\x1y\0\0\v\x4\0\0\x3/\0\0\0\x2\0\0) +Quartus_UI_Framework\quartussld_bnlqmdiGeometry=@ByteArray(\x1\xd9\xd0\xcb\0\x1\0\0\0\0\x2p\0\0\0W\0\0\x6.\0\0\x2\xc4\0\0\x2p\0\0\0m\0\0\x6.\0\0\x2\xc4\0\0\0\x2\0\0) +Quartus_UI_Framework\quartussld_bnlqmdiState=@ByteArray(\0\0\0\xff\0\0\0\0\xfd\0\0\0\0\0\0\x3\xbf\0\0\x2\x1f\0\0\0\x4\0\0\0\x4\0\0\0\b\0\0\0\b\xfc\0\0\0\x4\0\0\0\0\0\0\0\x2\0\0\0&\0L\0\x65\0\x66\0t\0 \0\x42\0u\0t\0t\0o\0n\0 \0T\0o\0o\0l\0\x62\0\x61\0r\x2\0\0\0\0\xff\xff\xff\xff\0\0\0\0\0\0\0\0\0\0\0\x10\0\x46\0\x65\0\x65\0\x64\0\x62\0\x61\0\x63\0k\x2\0\0\0\0\xff\xff\xff\xff\0\0\0\0\0\0\0\0\0\0\0\x1\0\0\0\x1\0\0\0(\0R\0i\0g\0h\0t\0 \0\x42\0u\0t\0t\0o\0n\0 \0T\0o\0o\0l\0\x62\0\x61\0r\x2\0\0\0\0\xff\xff\xff\xff\0\0\0\0\0\0\0\0\0\0\0\x2\0\0\0\x1\0\0\0$\0T\0o\0p\0 \0\x42\0u\0t\0t\0o\0n\0 \0T\0o\0o\0l\0\x62\0\x61\0r\0\0\0\0\0\xff\xff\xff\xff\0\0\0\0\0\0\0\0\0\0\0\x3\0\0\0\x1\0\0\0*\0\x42\0o\0t\0t\0o\0m\0 \0\x42\0u\0t\0t\0o\0n\0 \0T\0o\0o\0l\0\x62\0\x61\0r\0\0\0\0\0\xff\xff\xff\xff\0\0\0\0\0\0\0\0) +Quartus_UI_Framework\quartussld_atcqmdiGeometry=@ByteArray(\x1\xd9\xd0\xcb\0\x1\0\0\0\0\0\xf7\0\0\0Z\0\0\x4\x16\0\0\x2\xc7\0\0\0\xf7\0\0\0p\0\0\x4\x16\0\0\x2\xc7\0\0\0\x2\0\0) +Quartus_UI_Framework\quartussld_atcqmdiState=@ByteArray(\0\0\0\xff\0\0\0\0\xfd\0\0\0\0\0\0\x3 \0\0\x2\x1f\0\0\0\x4\0\0\0\x4\0\0\0\b\0\0\0\b\xfc\0\0\0\x4\0\0\0\0\0\0\0\x2\0\0\0&\0L\0\x65\0\x66\0t\0 \0\x42\0u\0t\0t\0o\0n\0 \0T\0o\0o\0l\0\x62\0\x61\0r\x2\0\0\0\0\xff\xff\xff\xff\0\0\0\0\0\0\0\0\0\0\0\x10\0\x46\0\x65\0\x65\0\x64\0\x62\0\x61\0\x63\0k\x2\0\0\0\0\xff\xff\xff\xff\0\0\0\0\0\0\0\0\0\0\0\x1\0\0\0\x1\0\0\0(\0R\0i\0g\0h\0t\0 \0\x42\0u\0t\0t\0o\0n\0 \0T\0o\0o\0l\0\x62\0\x61\0r\x2\0\0\0\0\xff\xff\xff\xff\0\0\0\0\0\0\0\0\0\0\0\x2\0\0\0\x1\0\0\0$\0T\0o\0p\0 \0\x42\0u\0t\0t\0o\0n\0 \0T\0o\0o\0l\0\x62\0\x61\0r\0\0\0\0\0\xff\xff\xff\xff\0\0\0\0\0\0\0\0\0\0\0\x3\0\0\0\x1\0\0\0*\0\x42\0o\0t\0t\0o\0m\0 \0\x42\0u\0t\0t\0o\0n\0 \0T\0o\0o\0l\0\x62\0\x61\0r\0\0\0\0\0\xff\xff\xff\xff\0\0\0\0\0\0\0\0) +Altera_Foundation_Class\quartusOpen_ProjectFileDialogGeometry=@ByteArray(\x1\xd9\xd0\xcb\0\x1\0\0\0\0\x2\xc9\0\0\x1\r\0\0\x5\x43\0\0\x2\xc3\0\0\x2\xc9\0\0\x1\r\0\0\x5\x43\0\0\x2\xc3\0\0\0\x2\0\0) +Quartus_UI_Framework\quartusQuartus_Primedock_widget0=true +Quartus_UI_Framework\quartusQuartus_Primedock_widget0Area=8 +Quartus_UI_Framework\quartusQuartus_Primedock_widget0Floating=false +Quartus_UI_Framework\quartusQuartus_Primedock_widget0Pinned=true +Quartus_UI_Framework\quartusQuartus_Primedock_widget0Minimized=false +Quartus_UI_Framework\quartusQuartus_Primedock_widget0Closed=false +Quartus_UI_Framework\quartusQuartus_Primedock_widget1=true +Quartus_UI_Framework\quartusQuartus_Primedock_widget1Area=1 +Quartus_UI_Framework\quartusQuartus_Primedock_widget1Floating=false +Quartus_UI_Framework\quartusQuartus_Primedock_widget1Pinned=true +Quartus_UI_Framework\quartusQuartus_Primedock_widget1Minimized=false +Quartus_UI_Framework\quartusQuartus_Primedock_widget1Closed=false +Quartus_UI_Framework\quartusQuartus_Primedock_widget2=false +Quartus_UI_Framework\quartusQuartus_Primedock_widget2Area=1 +Quartus_UI_Framework\quartusQuartus_Primedock_widget2Floating=true +Quartus_UI_Framework\quartusQuartus_Primedock_widget2Pinned=false +Quartus_UI_Framework\quartusQuartus_Primedock_widget2Minimized=false +Quartus_UI_Framework\quartusQuartus_Primedock_widget2Closed=true +Quartus_UI_Framework\quartusQuartus_Primedock_widget3=false +Quartus_UI_Framework\quartusQuartus_Primedock_widget3Area=8 +Quartus_UI_Framework\quartusQuartus_Primedock_widget3Floating=false +Quartus_UI_Framework\quartusQuartus_Primedock_widget3Pinned=false +Quartus_UI_Framework\quartusQuartus_Primedock_widget3Minimized=false +Quartus_UI_Framework\quartusQuartus_Primedock_widget3Closed=true +Quartus_UI_Framework\quartusQuartus_Primedock_widget4=false +Quartus_UI_Framework\quartusQuartus_Primedock_widget4Area=1 +Quartus_UI_Framework\quartusQuartus_Primedock_widget4Floating=false +Quartus_UI_Framework\quartusQuartus_Primedock_widget4Pinned=false +Quartus_UI_Framework\quartusQuartus_Primedock_widget4Minimized=false +Quartus_UI_Framework\quartusQuartus_Primedock_widget4Closed=true +Quartus_UI_Framework\quartusQuartus_Primedock_widget5=true +Quartus_UI_Framework\quartusQuartus_Primedock_widget5Area=1 +Quartus_UI_Framework\quartusQuartus_Primedock_widget5Floating=false +Quartus_UI_Framework\quartusQuartus_Primedock_widget5Pinned=true +Quartus_UI_Framework\quartusQuartus_Primedock_widget5Minimized=false +Quartus_UI_Framework\quartusQuartus_Primedock_widget5Closed=false +Quartus_UI_Framework\quartusQuartus_Primedock_widget6=false +Quartus_UI_Framework\quartusQuartus_Primedock_widget6Area=8 +Quartus_UI_Framework\quartusQuartus_Primedock_widget6Floating=false +Quartus_UI_Framework\quartusQuartus_Primedock_widget6Pinned=false +Quartus_UI_Framework\quartusQuartus_Primedock_widget6Minimized=false +Quartus_UI_Framework\quartusQuartus_Primedock_widget6Closed=true +Quartus_UI_Framework\quartusQuartus_Primedock_widget7=false +Quartus_UI_Framework\quartusQuartus_Primedock_widget7Area=8 +Quartus_UI_Framework\quartusQuartus_Primedock_widget7Floating=false +Quartus_UI_Framework\quartusQuartus_Primedock_widget7Pinned=false +Quartus_UI_Framework\quartusQuartus_Primedock_widget7Minimized=false +Quartus_UI_Framework\quartusQuartus_Primedock_widget7Closed=true +Quartus_UI_Framework\quartusQuartus_Primedock_widget8=false +Quartus_UI_Framework\quartusQuartus_Primedock_widget8Area=8 +Quartus_UI_Framework\quartusQuartus_Primedock_widget8Floating=false +Quartus_UI_Framework\quartusQuartus_Primedock_widget8Pinned=false +Quartus_UI_Framework\quartusQuartus_Primedock_widget8Minimized=false +Quartus_UI_Framework\quartusQuartus_Primedock_widget8Closed=true +Quartus_UI_Framework\quartusQuartus_Primedock_widget11=true +Quartus_UI_Framework\quartusQuartus_Primedock_widget11Area=2 +Quartus_UI_Framework\quartusQuartus_Primedock_widget11Floating=false +Quartus_UI_Framework\quartusQuartus_Primedock_widget11Pinned=true +Quartus_UI_Framework\quartusQuartus_Primedock_widget11Minimized=false +Quartus_UI_Framework\quartusQuartus_Primedock_widget11Closed=false +Quartus_UI_Framework\current_project= +Quartus_UI_Framework\quartussys_sscqmdiState=@ByteArray(\0\0\0\xff\0\0\0\0\xfd\0\0\0\0\0\0\x2\xb3\0\0\x1\xfa\0\0\0\x4\0\0\0\x4\0\0\0\b\0\0\0\b\xfc\0\0\0\x4\0\0\0\0\0\0\0\x2\0\0\0&\0L\0\x65\0\x66\0t\0 \0\x42\0u\0t\0t\0o\0n\0 \0T\0o\0o\0l\0\x62\0\x61\0r\x2\0\0\0\0\xff\xff\xff\xff\0\0\0\0\0\0\0\0\0\0\0\x10\0\x46\0\x65\0\x65\0\x64\0\x62\0\x61\0\x63\0k\x2\0\0\0\0\xff\xff\xff\xff\0\0\0\0\0\0\0\0\0\0\0\x1\0\0\0\x1\0\0\0(\0R\0i\0g\0h\0t\0 \0\x42\0u\0t\0t\0o\0n\0 \0T\0o\0o\0l\0\x62\0\x61\0r\x2\0\0\0\0\xff\xff\xff\xff\0\0\0\0\0\0\0\0\0\0\0\x2\0\0\0\x1\0\0\0$\0T\0o\0p\0 \0\x42\0u\0t\0t\0o\0n\0 \0T\0o\0o\0l\0\x62\0\x61\0r\0\0\0\0\0\xff\xff\xff\xff\0\0\0\0\0\0\0\0\0\0\0\x3\0\0\0\x1\0\0\0*\0\x42\0o\0t\0t\0o\0m\0 \0\x42\0u\0t\0t\0o\0n\0 \0T\0o\0o\0l\0\x62\0\x61\0r\0\0\0\0\0\xff\xff\xff\xff\0\0\0\0\0\0\0\0) +Quartus_UI_Framework\quartussys_qgqmainGeometry="@ByteArray(\x1\xd9\xd0\xcb\0\x1\0\0\0\0\x2\xb5\0\0\0\xe3\0\0\b,\0\0\x4\x18\0\0\x2\xb5\0\0\0\xf9\0\0\b,\0\0\x4\x18\0\0\0\x2\0\0)" +Quartus_UI_Framework\quartussys_qgqmainState=@ByteArray(\0\0\0\xff\0\0\0\0\xfd\0\0\0\x3\0\0\0\0\0\0\x1W\0\0\x2\x16\xfc\x2\0\0\0\x4\xfb\0\0\0\"\0P\0r\0o\0j\0\x65\0\x63\0t\0 \0N\0\x61\0v\0i\0g\0\x61\0t\0o\0r\x1\0\0\0O\0\0\x1/\0\0\0\x94\0\xff\xff\xff\xfb\0\0\0\n\0T\0\x61\0s\0k\0s\x1\0\0\x1\x84\0\0\0\xe1\0\0\0n\0\xff\xff\xff\xfb\0\0\0\x16\0N\0o\0\x64\0\x65\0 \0\x46\0i\0n\0\x64\0\x65\0r\x2\0\0\0\0\0\0\0\x10\0\0\x1+\0\0\x1'\xfb\0\0\0\f\0S\0t\0\x61\0t\0u\0s\0\0\0\0\0\xff\xff\xff\xff\0\0\0\x64\0\xff\xff\xff\0\0\0\x1\0\0\x1\x62\0\0\x2\x16\xfc\x2\0\0\0\x1\xfb\0\0\0\x14\0I\0P\0 \0\x43\0\x61\0t\0\x61\0l\0o\0g\x1\0\0\0O\0\0\x2\x16\0\0\0\xc8\0\xff\xff\xff\0\0\0\x3\0\0\x5x\0\0\0\x9d\xfc\x2\0\0\0\x5\xfb\0\0\0\x16\0T\0\x63\0l\0 \0\x43\0o\0n\0s\0o\0l\0\x65\0\0\0\0\0\xff\xff\xff\xff\0\0\0K\0\xff\xff\xff\xfb\0\0\0\x1c\0\x43\0h\0\x61\0n\0g\0\x65\0 \0M\0\x61\0n\0\x61\0g\0\x65\0r\0\0\0\0\0\xff\xff\xff\xff\0\0\0\x92\0\xff\xff\xff\xfb\0\0\0\x32\0L\0o\0g\0i\0\x63\0 \0L\0o\0\x63\0k\0 \0R\0\x65\0g\0i\0o\0n\0s\0 \0W\0i\0n\0\x64\0o\0w\0\0\0\0\0\xff\xff\xff\xff\0\0\0\x81\0\xff\xff\xff\xfb\0\0\0\x30\0\x44\0\x65\0s\0i\0g\0n\0 \0P\0\x61\0r\0t\0i\0t\0i\0o\0n\0s\0 \0W\0i\0n\0\x64\0o\0w\0\0\0\0\0\xff\xff\xff\xff\0\0\0\x81\0\xff\xff\xff\xfb\0\0\0\x10\0M\0\x65\0s\0s\0\x61\0g\0\x65\0s\x1\0\0\x2k\0\0\0\x9d\0\0\0\x9d\0\xff\xff\xff\0\0\x2\xb3\0\0\x2\x16\0\0\0\x4\0\0\0\x4\0\0\0\b\0\0\0\b\xfc\0\0\0\x5\0\0\0\0\0\0\0\x1\0\0\0&\0L\0\x65\0\x66\0t\0 \0\x42\0u\0t\0t\0o\0n\0 \0T\0o\0o\0l\0\x62\0\x61\0r\x2\0\0\0\0\xff\xff\xff\xff\0\0\0\0\0\0\0\0\0\0\0\x1\0\0\0\x1\0\0\0(\0R\0i\0g\0h\0t\0 \0\x42\0u\0t\0t\0o\0n\0 \0T\0o\0o\0l\0\x62\0\x61\0r\x2\0\0\0\0\xff\xff\xff\xff\0\0\0\0\0\0\0\0\0\0\0\x2\0\0\0\x4\0\0\0$\0T\0o\0p\0 \0\x42\0u\0t\0t\0o\0n\0 \0T\0o\0o\0l\0\x62\0\x61\0r\0\0\0\0\0\xff\xff\xff\xff\0\0\0\0\0\0\0\0\0\0\0\b\0\x46\0i\0l\0\x65\x1\0\0\0\0\xff\xff\xff\xff\0\0\0\0\0\0\0\0\0\0\0\x10\0S\0t\0\x61\0n\0\x64\0\x61\0r\0\x64\x1\0\0\x1\x81\xff\xff\xff\xff\0\0\0\0\0\0\0\0\0\0\0\x10\0\x46\0\x65\0\x65\0\x64\0\x62\0\x61\0\x63\0k\x1\0\0\x4\xb5\xff\xff\xff\xff\0\0\0\0\0\0\0\0\0\0\0\x2\0\0\0\x3\0\0\0\x1e\0U\0t\0i\0l\0i\0t\0y\0 \0W\0i\0n\0\x64\0o\0w\0s\0\0\0\0\0\xff\xff\xff\xff\0\0\0\0\0\0\0\0\0\0\0\x18\0\x41\0p\0p\0l\0i\0\x63\0\x61\0t\0i\0o\0n\0s\0\0\0\0\0\xff\xff\xff\xff\0\0\0\0\0\0\0\0\0\0\0\x14\0P\0r\0o\0\x63\0\x65\0s\0s\0i\0n\0g\0\0\0\0\0\xff\xff\xff\xff\0\0\0\0\0\0\0\0\0\0\0\x3\0\0\0\x1\0\0\0*\0\x42\0o\0t\0t\0o\0m\0 \0\x42\0u\0t\0t\0o\0n\0 \0T\0o\0o\0l\0\x62\0\x61\0r\0\0\0\0\0\xff\xff\xff\xff\0\0\0\0\0\0\0\0) +Quartus_UI_Framework\quartusQuartus_Primedock_widgetProject_Navigator=true +Quartus_UI_Framework\quartusQuartus_Primedock_widgetProject_NavigatorArea=1 +Quartus_UI_Framework\quartusQuartus_Primedock_widgetProject_NavigatorFloating=false +Quartus_UI_Framework\quartusQuartus_Primedock_widgetProject_NavigatorPinned=true +Quartus_UI_Framework\quartusQuartus_Primedock_widgetProject_NavigatorMinimized=false +Quartus_UI_Framework\quartusQuartus_Primedock_widgetProject_NavigatorClosed=false +Quartus_UI_Framework\quartusQuartus_Primedock_widgetTasks=true +Quartus_UI_Framework\quartusQuartus_Primedock_widgetTasksArea=1 +Quartus_UI_Framework\quartusQuartus_Primedock_widgetTasksFloating=false +Quartus_UI_Framework\quartusQuartus_Primedock_widgetTasksPinned=true +Quartus_UI_Framework\quartusQuartus_Primedock_widgetTasksMinimized=false +Quartus_UI_Framework\quartusQuartus_Primedock_widgetTasksClosed=false +Quartus_UI_Framework\quartusQuartus_Primedock_widgetIP_Catalog=true +Quartus_UI_Framework\quartusQuartus_Primedock_widgetIP_CatalogArea=2 +Quartus_UI_Framework\quartusQuartus_Primedock_widgetIP_CatalogFloating=false +Quartus_UI_Framework\quartusQuartus_Primedock_widgetIP_CatalogPinned=true +Quartus_UI_Framework\quartusQuartus_Primedock_widgetIP_CatalogMinimized=false +Quartus_UI_Framework\quartusQuartus_Primedock_widgetIP_CatalogClosed=false +Quartus_UI_Framework\quartusQuartus_Primedock_widgetNode_Finder=false +Quartus_UI_Framework\quartusQuartus_Primedock_widgetNode_FinderArea=1 +Quartus_UI_Framework\quartusQuartus_Primedock_widgetNode_FinderFloating=true +Quartus_UI_Framework\quartusQuartus_Primedock_widgetNode_FinderPinned=false +Quartus_UI_Framework\quartusQuartus_Primedock_widgetNode_FinderMinimized=false +Quartus_UI_Framework\quartusQuartus_Primedock_widgetNode_FinderClosed=true +Quartus_UI_Framework\quartusQuartus_Primedock_widgetTcl_Console=false +Quartus_UI_Framework\quartusQuartus_Primedock_widgetTcl_ConsoleArea=8 +Quartus_UI_Framework\quartusQuartus_Primedock_widgetTcl_ConsoleFloating=false +Quartus_UI_Framework\quartusQuartus_Primedock_widgetTcl_ConsolePinned=false +Quartus_UI_Framework\quartusQuartus_Primedock_widgetTcl_ConsoleMinimized=false +Quartus_UI_Framework\quartusQuartus_Primedock_widgetTcl_ConsoleClosed=true +Quartus_UI_Framework\quartusQuartus_Primedock_widgetStatus=false +Quartus_UI_Framework\quartusQuartus_Primedock_widgetStatusArea=1 +Quartus_UI_Framework\quartusQuartus_Primedock_widgetStatusFloating=false +Quartus_UI_Framework\quartusQuartus_Primedock_widgetStatusPinned=false +Quartus_UI_Framework\quartusQuartus_Primedock_widgetStatusMinimized=false +Quartus_UI_Framework\quartusQuartus_Primedock_widgetStatusClosed=true +Quartus_UI_Framework\quartusQuartus_Primedock_widgetChange_Manager=false +Quartus_UI_Framework\quartusQuartus_Primedock_widgetChange_ManagerArea=8 +Quartus_UI_Framework\quartusQuartus_Primedock_widgetChange_ManagerFloating=false +Quartus_UI_Framework\quartusQuartus_Primedock_widgetChange_ManagerPinned=false +Quartus_UI_Framework\quartusQuartus_Primedock_widgetChange_ManagerMinimized=false +Quartus_UI_Framework\quartusQuartus_Primedock_widgetChange_ManagerClosed=true +Quartus_UI_Framework\quartusQuartus_Primedock_widgetLogic_Lock_Regions_Window=false +Quartus_UI_Framework\quartusQuartus_Primedock_widgetLogic_Lock_Regions_WindowArea=8 +Quartus_UI_Framework\quartusQuartus_Primedock_widgetLogic_Lock_Regions_WindowFloating=false +Quartus_UI_Framework\quartusQuartus_Primedock_widgetLogic_Lock_Regions_WindowPinned=false +Quartus_UI_Framework\quartusQuartus_Primedock_widgetLogic_Lock_Regions_WindowMinimized=false +Quartus_UI_Framework\quartusQuartus_Primedock_widgetLogic_Lock_Regions_WindowClosed=true +Quartus_UI_Framework\quartusQuartus_Primedock_widgetDesign_Partitions_Window=false +Quartus_UI_Framework\quartusQuartus_Primedock_widgetDesign_Partitions_WindowArea=8 +Quartus_UI_Framework\quartusQuartus_Primedock_widgetDesign_Partitions_WindowFloating=false +Quartus_UI_Framework\quartusQuartus_Primedock_widgetDesign_Partitions_WindowPinned=false +Quartus_UI_Framework\quartusQuartus_Primedock_widgetDesign_Partitions_WindowMinimized=false +Quartus_UI_Framework\quartusQuartus_Primedock_widgetDesign_Partitions_WindowClosed=true +Quartus_UI_Framework\quartusQuartus_Primedock_widgetMessages=true +Quartus_UI_Framework\quartusQuartus_Primedock_widgetMessagesArea=8 +Quartus_UI_Framework\quartusQuartus_Primedock_widgetMessagesFloating=false +Quartus_UI_Framework\quartusQuartus_Primedock_widgetMessagesPinned=true +Quartus_UI_Framework\quartusQuartus_Primedock_widgetMessagesMinimized=false +Quartus_UI_Framework\quartusQuartus_Primedock_widgetMessagesClosed=false +Quartus_UI_Framework\sys_sscqsingleton_attach_state=false +Quartus_UI_Framework\sys_qgqsingleton_attach_state=true +Task_Manager_Window\Task_Manager_File=tmwq_tasks_compile.tmf +Task_Manager_Window\Task_Manager_Expanded_Nodes=0 +UNB\Filters\count=0 +UNB\Filters\selection%20index=0 +UNB\column_settings\node_found=23 +Tcl_Toolbar\tcl_console_command_history=@Invalid() diff --git a/docker/QuartusPrime/files/quartus_web_rules_file.txt b/docker/QuartusPrime/files/quartus_web_rules_file.txt new file mode 100755 index 0000000..e69de29 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/docker/QuartusPrime/run_quartus.sh b/docker/QuartusPrime/run_quartus.sh new file mode 100755 index 0000000..a7c26d8 --- /dev/null +++ b/docker/QuartusPrime/run_quartus.sh @@ -0,0 +1,69 @@ +#!/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/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