はじめに
「GHDLとVunitでVHDLのテスト環境を構築する」のDocker版です
波形確認用にGTKWaveを追加しています
開発環境
- Windows10 Pro 64bit
- Docker for Windows Community Edition Version 2.0.0.3
- VcXsrv X Server Version "1.20.1.4"
- ghdl/ext:ls-vunit-gtkwave
- Python 3.7.4
- GHDL : 0.37-dev
- vunit-hdl : 4.0.9rc0
- GTKWave Analyzer v3.3.102
- X11 libraries
環境構築
Windows上でテストおよび波形確認を行うためVcXsrvのインストールとDockerイメージの作成を行います
VcXsrv
VcXsrvのインストール
VcXsrvをインストールします
今回はchocolateyからインストールしました
choco install vcxsrv -y
VcXsrvの起動
VcXsrvを起動します
設定はすべてデフォルトでOKです
Docker
Docker for Windowsのインストールについては他の記事を参考にしてください
ディレクトリ構成
下記のようなディレクトリ構成を想定しています
C:.
├─docker-compose.yml
├─ghdl
│ └─Dockerfile
└─project
├─run.py # テスト実行ファイル
├─src
│ └─*.vhd
├─test
│ └─*.vhd
└─vunit_out # テスト結果出力フォルダ
Dockerfileの作成
自動テストおよび波形確認を行うためghdl/ext:latest
を使用します
VcXsrvでgtkwaveの波形を確認するためENV DISPLAY host.docker.internal:0.0
を設定します
FROM ghdl/ext:latest
# VcXsrvでWindows上にGUIを表示するための設定
ENV DISPLAY host.docker.internal:0.0
docker-compose.ymlの作成
volumesを使用するため、事前にDocker for WindowsのShared Drivesを設定しておくようにしてください
version: '3'
services:
ghdl:
restart: always
build: ./ghdl
working_dir: "/project"
volumes:
- ./project:/project
tty: true
テスト実行ファイルrun.pyの作成
Vunitの例にあるVHDL User Guideを元にテスト実行ファイルを作成します
from os.path import join, dirname
from vunit import VUnit
root = dirname(__file__)
project = VUnit.from_argv()
lib = project.add_library("lib")
lib.add_source_files(join(root, "src", "*.vhd"), "lib")
lib.add_source_files(join(root, "test", "*.vhd"), "lib")
project.main()
dockerイメージの作成
docker-composeでghdlイメージを作成します
docker-compose build ghdl
テストの実行
GUIなしでテスト実行
srcおよびtestフォルダにファイルを入れて
docker-composeからrun.pyを実行するとテストが実行され結果が表示されます
docker-compose run --rm ghdl python run.py
(省略)
==== Summary ===============================================
pass lib.tb_uartreceiver_0.o_EN (0.6 seconds)
pass lib.tb_uartreceiver_0.normal (0.5 seconds)
pass lib.tb_uartreceiver_0.parity error (0.8 seconds)
pass lib.tb_uartreceiver_0.framing error (0.7 seconds)
============================================================
pass 4 of 4
============================================================
Total time was 2.7 seconds
Elapsed time was 2.7 seconds
============================================================
All passed!
GUIありでテスト実行
-g
オプションをつけるとVcXsrvでGTKWaveの波形もあわせて確認することができます
docker-compose run --rm ghdl python run.py -g
参考
GHDL
ghdl/docker
ghdl/docker usecase.md
Vunit
VcXsrv
GTKWave
Docker for windowsのコンテナ内でGUIアプリを実行
GHDLとVunitでVHDLのテスト環境を構築する
更新履歴
2019/09/23
イメージ名をghdl/ext:ls-vunit-gtkwave
からghdl/ext:latest
に変更