Intel Quartus LiteをVagrantで動かした話

Page content

諸般の理由でIntel Quartus Liteを動かす必要がありましたが、Quartus LiteはWindowsとLinuxしかサポートしていません。僕は普段macOSを使っているためデュアルブートか仮想マシンを使う必要がありますが、わざわざQuartus Liteのためにデュアルブートを設定するのも大変なので仮想マシンを使うことにしました。Virutalbox等の仮想マシンを直接使ってQuartus Liteを動かしても良いですが、今回はVagrantとansibleを使って環境構築を行いました。

今回使ったIntel Quartus Liteのバージョンは17.1です。Windows版とLinux版を両方とも無料で https://fpgasoftware.intel.com/17.1/?edition=lite からダウンロードができます(Intelへの会員登録は必要です)。Linux用のファイルである Quartus-lite-17.1.0.590-linux.tarVagrantfileplaybook.yaml と同じディレクトリに置かれていることを想定しています。

VagrantとVirtualboxのインストール

VagrantとVirtualboxは両方ともHomebrewからインストールできます。具体的には以下のコマンドでインストールできます。

brew install vagrant virtualbox

Vagrantfile

まず、vagrantでのvmの設定ファイルである Vagrantfile は以下の様になります。

# frozen_string_literal: true

Vagrant.configure('2') do |config|
  config.vm.box = 'bento/ubuntu-16.04'

  # Create a private network, which allows host-only access to the machine
  # using a specific IP.
  config.vm.network 'private_network', ip: '192.168.33.10'

  # Share an additional folder to the guest VM. The first argument is
  # the path on the host to the actual folder. The second argument is
  # the path on the guest to mount the folder. And the optional third
  # argument is a set of non-required options.
  config.vm.synced_folder './working', '/home/vagrant/working'

  # Envable X11 forwarding via SSH
  config.ssh.forward_x11 = true

  # Provider-specific configuration so you can fine-tune various
  # backing providers for Vagrant. These expose provider-specific options.
  config.vm.provider 'virtualbox' do |vb|
    # Customize the amount of memory on the VM:
    vb.memory = '16384' # 16GiB
    vb.cpus = 4
  end

  # Provision by Ansible
  config.vm.provision 'ansible' do |ansible|
    ansible.playbook = 'playbook.yaml'
    ansible.inventory_path = 'hosts'
    ansible.limit = 'all'
  end
end

ここから Vagrantfile の中身を説明していきます。

Boxの指定

まず始めに今回の環境を構築する元になる環境を指定します。Intel Quartus Lite 17.1でサポートされている最新のUbuntuはUbuntu 16.04なので、ここではUbuntu 16.04を指定します。

config.vm.box = 'bento/ubuntu-16.04'

プライベートネットワークの設定

次にプライベートネットワークを設定します。本来プライベートネットワークは設定しなくてもvagrantを使うことはできますが、今回はansibleを使ってプロビジョンするためにプライベートネットワークを使います。

# Create a private network, which allows host-only access to the machine
# using a specific IP.
config.vm.network 'private_network', ip: '192.168.33.10'

同期されるフォルダ

次に ./working というフォルダを同期される様な設定を行います。この設定も本来不要ですが、同期されるフォルダを設定しておくとQuartus Liteで扱うファイルをホストと共有するのが非常に楽になるのでオススメです。

# Share an additional folder to the guest VM. The first argument is
# the path on the host to the actual folder. The second argument is
# the path on the guest to mount the folder. And the optional third
# argument is a set of non-required options.
config.vm.synced_folder './working', '/home/vagrant/working'

SSHでX11転送の有効化

次はSSHでX11転送を有効化します。今回Quartus LiteはSSHのX11転送で実行するのでこの設定は必須となります。

# Envable X11 forwarding via SSH
config.ssh.forward_x11 = true

Virtualboxでの仮想マシンの設定

次にVirtualboxでの仮想マシンの設定を行います。具体的には仮想マシンに割り振るRAMやCPUの個数を設定します。以下では4つのCPUと16GiBのRAMを割り振る様な設定を行っていますが、ホストマシンのリソースに合わせて上手く変更してください。

# Provider-specific configuration so you can fine-tune various
# backing providers for Vagrant. These expose provider-specific options.
config.vm.provider 'virtualbox' do |vb|
  # Customize the amount of memory on the VM:
  vb.memory = '16384' # 16GiB
  vb.cpus = 4
end

Ansibleでの環境構築

最後にAnsibleで環境構築を行う設定を行います。ここで使っている playbook.yamlhosts のファイルはこれから解説していきます。

# Provision by Ansible
config.vm.provision 'ansible' do |ansible|
  ansible.playbook = 'playbook.yaml'
  ansible.inventory_path = 'hosts'
  ansible.limit = 'all'
end

Ansibleの設定

以下ではAnsibleでの環境構築を説明します。まず、Ansibleでの環境構築内容を記述した、 playbook.yaml は以下の様になります。

- hosts: vagrant
  tasks:
    # ModelSim requires i386 support
    - name: add i386 support
      command: dpkg --add-architecture i386
      become: true
    - name: install required packages
      apt:
        name: "{{ item }}"
        update_cache: yes
      with_items:
        - libglib2.0-0
        - libpng12-0
        - libfreetype6
        - libsm6
        - libxrender1
        - libfontconfig1
        - libxext6
        - xinit
        # ModelSim requires i386 support
        - libc6:i386
        - libstdc++6:i386
        - libx11-6:i386
        - libxext6:i386
        - libxft2:i386
        - libncurses5:i386
        become: true

    - name: unarchive Quartus file
      unarchive:
        src: ./Quartus-lite-17.1.0.590-linux.tar
        dest: /tmp
    - name: execute Quartus installer
      shell: ./setup.sh --accept_eula 1 --mode unattended
      args:
        chdir: /tmp
    - name: set up PATH
      lineinfile:
        path: /home/vagrant/.bashrc
        regexp: '^export PATH=$PATH:/home/vagrant/intelFPGA_lite/17.1/quartus/bin/'
        line: 'export PATH=$PATH:/home/vagrant/intelFPGA_lite/17.1/quartus/bin/'

ここから playbook.yaml の中身を説明していきます。

i386サポートを追加

まず、ModelSimを動かすために32bit環境のサポートを追加します。

# ModelSim requires i386 support
- name: add i386 support
  command: dpkg --add-architecture i386
  become: true

必要なパッケージをインストール

次にaptで必要なパッケージをインストールします。ここでも、ModelSimを動かすために32bitアプリケーション用のライブラリもインストールします。

- name: install required packages
  apt:
    name: "{{ item }}"
    update_cache: yes
  with_items:
    - libglib2.0-0
    - libpng12-0
    - libfreetype6
    - libsm6
    - libxrender1
    - libfontconfig1
    - libxext6
    - xinit
    # ModelSim requires i386 support
    - libc6:i386
    - libstdc++6:i386
    - libx11-6:i386
    - libxext6:i386
    - libxft2:i386
    - libncurses5:i386
    become: true

Quartus Liteのファイルを展開

次にQuartus Liteのファイルを展開します。ここで、 Quartus-lite-17.1.0.590-linux.tarVagrantfileplaybook.yaml と同じディレクトリに置かれている必要があります。

- name: unarchive Quartus file
  unarchive:
    src: ./Quartus-lite-17.1.0.590-linux.tar
    dest: /tmp

Quartus Liteのインストーラを実行

次にQuartus Liteのインストーラを非対話的に実行します。非対話的実行のためのオプションは --accept_eula 1 (ソフトウェア利用許諾の承認) と --mode unattended (非対話で実行) となります。

- name: execute Quartus installer
  shell: ./setup.sh --accept_eula 1 --mode unattended
  args:
    chdir: /tmp

PATH の設定

最後にquartusをコマンドラインから実行できる様に、 PATH 環境変数を設定します。複数回実行した場合に同じ内容が何度も .bashrc に追記されない様に、lineinfileを使って設定しています。

- name: set up PATH
  lineinfile:
    path: /home/vagrant/.bashrc
    regexp: '^export PATH=$PATH:/home/vagrant/intelFPGA_lite/17.1/quartus/bin/'
    line: 'export PATH=$PATH:/home/vagrant/intelFPGA_lite/17.1/quartus/bin/'

ホストファイル

最後に host を設定します。ここでは vagrantで作った仮想マシンにアクセスするためのIPアドレスである 192.168.33.10 (Vagrantfile でプライベートネットワークのIPアドレスとして指定したもの)を設定します。

[vagrant]
192.168.33.10