GGFront: A GHDL/GTKWave GUI Frontend
Copyright (C) 2018-2026 Naoki FUJIEDA. All rights reserved.

【パッケージの内容】
- GHDL/         : GHDL: VHDLシミュレータ（再配布）
- gtkwave/      : GTKWave: 波形ビューア（再配布）
- sources/      : 各プログラムのソースコード
- work/         : 作業用ディレクトリ
- COPYING       : 著作権表記
- GGFront[.exe] : GGFront本体（Windows 版は拡張子あり，他はなし）
- README.txt    : このファイル

このほか，GGFront が参照する外部ライブラリも含まれます．
拡張子は Windows 版が .dll，macOS 版が .dylib，Ubuntu 版が .so です．

【動作環境】
配布パッケージで想定するのは，以下のいずれかの環境です．
- Windows 版: 64-bit Intel プロセッサ + Windows 10 以降の Windows
- macOS 版: 64-bit Arm プロセッサ + macOS 15 Sequoia
- Ubuntu 版: 64-bit Intel プロセッサ + Ubuntu 24.04 LTS
  - Avalonia の制限により，ドラッグ&ドロップに非対応です
  - 別途 libgnat-13 ライブラリを apt でインストールする必要があります

動作確認はしていませんが，GHDL と GTKWave を何らかの方法でインストール
することで，Ubuntu 以外の Linux ディストリビューションでも使用できるかも
しれません．

【使い方】
1. GGFront[.exe] を実行
  メインのウィンドウが表示されます．必要ならば，GHDL・GTKWave の存在する
  場所や，VHDL のバージョン（VHDL-93 固定，VHDL-2008 固定，自動検出）を
  指定できます．指定する場合には，Setting ボタンから設定します．
2. ソースを追加
  ウィンドウ右側の Add ボタンをクリックして，追加したい VHDL ソースファ
  イルを選択してください．エクスプローラなどのファイルマネージャのアプリ
  からファイルを Source File(s) のリストにドロップすることでも，ソースを
  追加できます（Ubuntu 版を除く）．
3. シミュレーション対象の選択
  ソース内にある entity の階層関係が Hierarchy リストに表示され，そのう
  ちシミュレーション対象は太字で表示されます．テストベンチ（通常は一番上
  の階層にある）を選択して，Set as Top ボタンを押してください．
4. Compile & Simulation ボタンを押す
  正しくシミュレーションができていれば，「シミュレーションは ● ns 後に
  停止しました．」と表示されます．もしエラーが出た場合は「●●中にエラー
  が～～」と表示されたあと，エラー内容が別のウィンドウに表示されます．
  所定の制限時間までにシミュレーションが終了しなかった場合，「シミュレー
  ションは ● ns 以内に終了しませんでした」と表示されます．
  波形ファイルはエラーが発生した場合を除き，テストベンチと同じファイル名
  で，拡張子.vcdをつけて保存されます．
5. View Waveform ボタンを押す
  GTKWave が自動的に起動します．確認したい信号を選択して Append ボタンを
  押し，Zoom Fit/In/Out を用いて拡大率を調整して，波形を確認します．
6. ソースファイルを修正した場合
  GGFront 上で再度 Compile and Simulation ボタンを押すと，波形ファイルが
  更新されます．GTKWave 上で Reload ボタンを押すと更新が反映されます．

【注意事項】
作業用ディレクトリ（work/）は，GHDLのためにGGFrontが一時的に利用するディ
レクトリですので，中身はシミュレータのコンパイル時（Compile and Simulate
を押した時）に自動的に削除されます．重要なファイルを work/ に置かないよ
うに注意してください．

VHDL-93 の言語仕様には，シミュレーションを終了する標準的な手法がありませ
ん．GGFront における VHDL-93 のシミュレーションでは，その「終了」を「重
要度 failure の assert 文によってシミュレーションが失敗した場合」と定義
しています．これ以外の手法でシミュレーションを「終了」させているテストベ
ンチに対しては，正しく動作しない場合があります．

v0.8.0 より VHDL-2008 のシミュレーションに対応しました．VHDL-2008 では，
シミュレーションを終了するために，std.env.finish や std.env.stop が利用
できます．GGFront における VHDL-2008 のシミュレーションでは，その「終了」
を「finish や stop によりシミュレーションが終了・停止した場合」と定義し
ます．assert 文を用いた場合は失敗，エラーとみなされます．

v0.4.0 よりテストベンチ内でファイルを読み書きするケースに対応しました．
VHDL-93 の言語仕様である read_mode, write_mode を使った方法だけではなく，
VHDL-87 の言語仕様である in, out を使った方法にも対応しています．ただし，
いずれの場合も，ファイル名が文字列リテラルとして与えられている場合に限
ります．

【ライセンス】
パッケージ内のGHDLおよびGTKWaveは，GPL v2により再配布しているものです．
Noto Sans Japanese および Noto Sans Mono フォントを内部で使用しています．
GGFront自体には New BSD ライセンスが適用されます．詳しくは，COPYING を
参照してください．

【謝辞】
GGFront の改良の一部は，愛知工業大学ディジタルシステム研究室の卒業生の
卒業研究，および在学中の学生の卒業研究・修士特別研究をもとに実施されて
います．以下の学生・卒業生の貢献に感謝いたします．
・エラーメッセージの整形と日本語による解説機能:
　池田 朋弘 さん（2020年3月卒業）
・列挙型信号の波形表示機能:
　棚橋 元哉 さん（2023年3月卒業）
・Avalonia UI への対応:
　近藤 快斗 さん（2024年3月卒業）
　中山 滉陽 さん（2025年3月卒業，2025年7月時点で修士課程在学中）

【更新履歴】
v0.9.1 2026-03-10
・正規表現処理の高速化のため，正規表現にかかるコーディングを見直し．
・ファイル読み出し/書き込みの検出を正しく行えないことがある問題を修正．

v0.9.0a 2025-08-20
・mac 環境で GTKWave のライブラリ参照に問題が起こる場合がある問題を修正．

v0.9.0 2025-08-05
・.NET Framework + WPF の環境から .NET + Avalonia UI の環境へ移行するこ
　とにより，Windows 以外の環境に対応．
・エラーメッセージの詳細を，ツールチップではなくウィンドウ下部の別枠で
　表示するように変更．
・GHDL のバージョンアップへの対応漏れにより，エラー発生時にファイル名や
　行数が表示されなくなっていた問題を修正．
・ソースコードの構造を変更し，Model・View・ViewModel にあたるファイルを
　それぞれのサブフォルダへ移動．長すぎる行（おおむね120文字以上）の折り
　返し，データバインディングの積極的利用，null 許容型への対応など，内部
　処理・コーディングの見直しも併せて実施．
・エラーに対する説明・対処法を追加 (60種類 → 61種類)．

v0.8.0 2025-03-04
・VHDL-2008 に対応．VHDL-2008 特有の記法やパッケージを使っていない記述
　は，これまで同様 VHDL-93 でシミュレートされる．設定でバージョンを固定
　することも可能．
・設定ダイアログを追加し，GHDL・GTKWave のパスの指定をメインウィンドウ
　から設定ダイアログへと移動．
・使用する .NET Framework のバージョンを 4.8 に変更．
・パッケージに同梱している GHDL のバージョンを 5.0.1 に更新．
・エラーに対する説明・対処法を追加 (54種類 → 60種類)．

v0.7.4 2023-12-13
・文字列リテラル内に -- が含まれている場合に，誤ってコメントと認識して
　しまっていた問題を修正．
・列挙型信号の値の確認について，type 文や signal 文が複数行にまたがる
　場合に対応するとともに，そうした記述の読み込みに異常に長い時間を要し
　ていた問題を修正．

v0.7.3 2023-11-22
・v0.7.1 での修正時のミスにより，列挙型信号の値の確認機能が正しく動作
　しなくなっていた問題を修正．

v0.7.2 2023-10-25
・v0.7.0～v0.7.1 において，ファイル末尾にエラーが存在する VHDL 記述を
　解析した際に，エラーメッセージの整形でクラッシュしていた問題を修正．
・エラーに対する説明・対処法を追加 (53種類 → 54種類)．

v0.7.1 2023-05-19
・列挙型信号の値の確認機能について，波形ファイルのサイズが大きい場合の
　性能上の問題を修正．

v0.7.0 2023-03-31
・GHDL の仕様上これまで GTKWave 上で確認できなかった列挙型信号の値を，
　確認できるようにした．
・エラーに対する説明・対処法を追加および更新 (47種類 → 53種類)．

v0.6.0 2022-02-15
・パッケージに同梱している GHDL のバージョンを 1.0.0 に更新．これによ
　り表示されるようになったエラー発生箇所は，メッセージ画面では茶色の等
　幅フォントで表示されるようにした．
・GHDL を実行する際，個別のファイルを解析（Analyze）してから全体を再分
　析（Elaborate）するように変更．
・上記によりソースコードの順序入れ替えの機能が不要になったため，廃止．
・エラーに対する説明・対処法を追加 (42種類 → 47種類)．

v0.5.3 2021-11-13
・Set as Top ボタンが押されるまでは，トップモジュールを自動的に認識し
　て設定しつづけるように変更．
・component に対応する entity が見つからない場合，Hierarchy リストに茶
　色で表示されるようにした．
・設定項目が十分少なくなったため，プロジェクトのセーブロード機能を廃止．
・エラーに対する説明・対処法を追加 (40種類 → 42種類)．

v0.5.2 2021-08-24
・エラーメッセージの一部にカーソルを当てたときのツールチップが，一定時
　間後に自動で閉じないように変更．

v0.5.1 2021-08-20
・シミュレーション中のエラー (bound check failure など) が発生した際の
　エラーメッセージの整形に対応．
・エラーに対する説明・対処法を追加 (34種類 → 40種類)．

v0.5.0 2020-09-09
・エラー発生時のメッセージを，テキストファイルに関連付けられたアプリで
　開くのではなく，GGFront 上の子ウィンドウに表示するように変更．

v0.4.5 2020-04-30
・シミュレーション時間の制限で，一部の値が利用できなかった不具合を修正．
・シミュレーション終了時刻がミリ秒またはフェムト秒単位であった場合に，
　エラーと扱われていた不具合を修正．

v0.4.4 2020-04-21
・シミュレーション時間，実時間のタイムアウトの変更に対応．
・'X'や'Z'などのリテラルを含む記述を正しくコンパイルできなかった不具合
　を修正．

v0.4.3 2019-11-26
・entity の循環参照を判定するロジックに誤りがあったのを修正．

v0.4.2 2019-08-03
・ファイルを読み書きするentityがシミュレーション対象に含まれない場合で
　も，作業用ディレクトリとの間でファイルのコピーを行おうとしてしまって
　いた不具合を修正．
・パッケージに同梱しているGHDL，GTKWaveのバージョンを，それぞれ 0.36，
　3.3.100 へと更新．

v0.4.1 2019-07-24
・設定ファイル（setting.xml）に書き込めない状況下で，GGFrontが起動でき
　ない，または強制終了する不具合を修正．

v0.4.0 2019-04-26
・テストベンチ内でファイルを読み書きする場合（ただし，ファイル名が文字
　列リテラルとして与えられている場合に限る）に対応．
・ソースコードおよびクラスの構造を見直し．

v0.3.2 2018-12-14
・GHDLの実行にタイムアウトを設定することにより，GHDLがハングする状況
　（例えばテストベンチでwait文の含まれないprocessを書いてしまったなど）
　で，GGFrontがGHDLごとハングしてしまう不具合を修正．

v0.3.1 2018-11-06
・ソース修正後に参照関係を再解析するボタン（Refresh）を追加した．
・トップモジュールとして選択されたEntityを青字で表示するようにした．

v0.3.0 2018-08-24
・GHDLやGTKWaveが所定の相対パス（パッケージに含まれる通り）にある場合，
　それらをワンクリックで指定できるようにした．
・ソースを簡易解析して，Entityの参照関係を表示できるようにした．
　これにより，トップモジュールをリストから選択できるようになった．
・波形ファイルの保存先を，都度選択する方式ではなく，トップモジュールに
　対応するソースと同じ名前の.vcdファイルを自動選択する方式に変更した．
・ソースの解析順を変更するボタンを追加．
・ライブラリに起因するシミュレーション時の警告を出力しないようにした．
　（GHDLの --ieee-asserts=disable オプションを追加）

v0.2.1 2018-06-28
・GHDLから出力されるメッセージが多いとGGFrontがハングする不具合を修正．

v0.2.0 2018-05-11
・呼び出し先のentityが見つからない場合に警告を表示するようにした．
　（GHDLの --warn-default-binding オプションを追加）
・std_logic_unsigned を使用した場合に「=」演算子でエラーが出るのを修正．
　（GHDLの -fexplicit オプションを追加）

v0.1.0 2018-03-29
・最初のバージョン．