12

簡単な VHDL プログラムを作成しました。ファイルを .vhd ファイルとして保存しました。それから私はそれをコンパイルしました

ghdl -a test.vhd

そして、ビルドされた実行可能ファイル

ghdl -e test

そして最後にそれを実行しようとしました

ghdl -r test

何が起こったのかというと、1work-obj93.cfつのファイルが表示され、他の 2 つのファイル、すなわち...が何らかの形で表示されないということです。

Mac で vhdl プログラムを正確にテストする方法を誰か教えてもらえますか? おそらくGTKWaveと組み合わせて。

4

4 に答える 4

22

彼らが言うように、それは大きな質問です!

バージョン 10.5、10.6、10.7、および 10.8 の Intel プロセッサで動作する OS X 用の ghdl のバージョンが、ghdl.free.fr から入手できます ( Mac OS X 用の GHDL でダウンロードできます)。これは mcode バージョン (Windows の場合と同様) であり、外部オブジェクト (サブプログラム) をモデルにバインドできないため、オブジェクト コードや VHDL モデルのスタンドアロン実行可能ファイルを生成しないことを意味します。

エラボレートされたモデルは実行時にのみメモリ内に存在し、作業ライブラリ .cf ファイル内のエントリを除いて、-e精巧なコマンドは不要です。ghdl の mcode バージョンでは、-r run コマンドも詳しく説明します。表示されるのは、作業ディレクトリ用の work-obj93.cf ファイルと、事前に分析されたライブラリ用の .cf ファイルだけです。デフォルトでは、これらは /usr/local/ghdl/libraries に表示され、実行可能な ghdl は次の場所にあります。 /usr/local/bin は /usr/local/ghdl/translate/ghdldrv/ghdl_mcode にリンクしており、/usr/local/ghdl は、ghdl_mcode バージョンのコンパイルの結果として作成された、削除されたツリーです。

このバージョンは svn129 (ghdl-0.29 リリースに続くもの) から派生したもので、i386 バイナリが含まれています。

ghdl のドキュメントは /usr/local/ghdl/doc/ にあります。ghdl のマニュアル ページは別の場所にリンクされています。ghdl.html では、「Windows」をすべて検索して、mcode バージョンへの参照を見つけることができます。見落としとして、ghdl マニュアルを修正して、Windows が表示される場所に mcode という単語を含め、修正されたマニュアルをリリースすることは考えていませんでした。

「Windows」が表示されている場合は常に、「Windows またはその他の mcode バージョン」と読む必要があります。

ghdl マニュアルの 1.3 What is GHDL? を参照してください (GHDL の Windows(TM) バージョンは GCC に基づいていませんが、内部コード ジェネレータに基づいています)。また、2.1 hello world プログラム:

2.1 The hello world program

VHDL の大きな目的を説明するために、コメント付きの VHDL "Hello world" プログラムを次に示します。

 --  Hello world program.
 use std.textio.all; --  Imports the standard textio package.

 --  Defines a design entity, without any ports.
 entity hello_world is
 end hello_world;

 architecture behaviour of hello_world is
 begin
    process
       variable l : line;
    begin
       write (l, String'("Hello world!"));
       writeline (output, l);
       wait;
    end process;
 end behaviour;

このプログラムがファイル hello.vhdl に含まれているとします。まず、ファイルをコンパイルする必要があります。これは、VHDL 用語ではデザイン ファイルの解析と呼ばれます。

 $ ghdl -a hello.vhdl

このコマンドは、ライブラリ「work」を記述するファイル work-obj93.cf を作成または更新します。GNU/Linux では、このコマンドにより、VHDL プログラムに対応するオブジェクト ファイルである hello.o ファイルが生成されます。オブジェクト ファイルは、Windows では作成されません。

次に、実行可能ファイルをビルドする必要があります。

 $ ghdl -e hello_world

「-e」オプションは精巧を意味します。このオプションを使用すると、GHDL は、階層の最上位にある 'hello' エンティティを使用して、設計を精緻化するためにコードを作成します。

GNU/Linux では、実行可能な hello という実行可能プログラムが生成されます。

 $ ghdl -r hello_world

または直接:

 $ ./hello_world

Windows では、ファイルは作成されません。シミュレーションは、次のコマンドを使用して開始されます。

 > ghdl -r hello_world

シミュレーションの結果が画面に表示されます。

 Hello world!

hello_world コマンドのソース コードをファイル hello.vhdl に保存し、コマンドを実行します。

david_koontz@Macbook: ghdl -a hello.vhdl

david_koontz@Macbook: ghdl -e hello_world

david_koontz@Macbook: ghdl -r hello_world

収量:

こんにちは世界!

標準出力 (端末ウィンドウの TTY セッション)。

現在の作業ディレクトリに work-obj93.cf ライブラリ構成ファイルがあり、他の出力ファイルはありません。-r run コマンド (セクション 3.1.3) の影響についても理解しておく必要があります。コマンド ラインでオプションのセカンダリ ユニットが渡されない場合、VHDL のデフォルトは最後にコンパイルされたアーキテクチャになります。

Tony Bybell のgtkwave gtkwave.appを入手すると、ドキュメントは /Applications/gtkwave.app/Contents/Resources/doc にあり、ソース .odt ファイルと PDF ファイルの両方があります。(アプリケーション フォルダでアプリケーションを選択し、[パッケージの内容を表示] をクリックして doc ディレクトリに移動できます)。

ghw と呼ばれる ghdl に固有の波形形式があり、実行コマンド オプション '--wave=.ghw' で呼び出すことができます。ghdl マニュアル 4.1 シミュレーション オプションを参照してください。代わりに VCD を使用する場合は、そのディレクトリの vcd オプションも参照してください。

また、テスト ベンチがフリー ランニング クロックを提供する場合は、ガード タイマーを使用して実行時間を制限する必要があります。VHDL は、スケジュールされた信号の更新がなくなるか、実行時間が上限に達した場合にのみ実行を停止します。これは、「--stop-time=587200ns」の行に沿った実行コマンド オプションです。

OS X gtkwave.app は、拡張子が .ghw と .gtkw の 2 つのファイル タイプに対応しています。1 つ目は ghdl 波形ダンプ ファイル、2 つ目は gtkw ファイルをクリックして gtkwave を起動できる OS X サフィックスが付いた gtkwave の構成ファイルです。設定ファイルは、gtkwave で波形表示を設定した後、存在する前に保存する必要があります。gtkwave のマニュアルを参照してください。ghw ファイルをクリックすると、gtkwave には該当する gtkw ファイルを検索するために使用される一連のルールがあります。

ghw ファイル形式を使用することには、いくつかの利点があります。ファイルをクリックすることによる gtkwave アプリの自動呼び出しはその 1 つです。もう 1 つは、ghdl がすべてのシグナル トランザクションを ghw ダンプ ファイルに保存することです。より多くの情報を表示するために、いつでも gtkwave でさらに選択することができます。これは大規模なモデルでは不利になる可能性がありますが、ghw 形式では、任意のタイプまたはサブタイプの列挙リテラル表示が可能です。

GHDL ディスカッション リストに参加して質問を投稿することは、ghdl の専門家の注目を集める良い方法です。(もちろん、gna.org の証明書は期限切れか無効です)。Tony Bybell は gtkwave の Web ページで電子メールの連絡先を提供していますが、有給雇用の必要性により、彼の連絡先は限られています。


ghdl と gtkwave の使用方法を例を挙げて詳しく説明します。

元の投稿者は、コマンド ライン値を使用した実際の例を求めました。ただし、例と使用された VCD を含むGHDL/GTKWave チュートリアル(PDF、234 KB) があります。

GHDL Waveform フォーマット バージョンのコマンド ラインを次に示します。

david_koontz@Macbook: ghdl -a CarryRipple.vhd

david_koontz@Macbook: ghdl -a CarryRipple_tb.vhd

david_koontz@Macbook: ghdl -e CarryRipple_tb

david_koontz@Macbook: ghdl -r キャリーリップル_tb --wave=キャリーリップル_tb.ghw

gtkwave.app を呼び出すには、結果の CarryRipple_tb.ghw をクリックするか、OS X の open コマンドを使用します。

david_koontz@Macbook: open -a gtkwave CarryRipple_tb.ghw

Gtkwave の SST ウィンドウ (左上) が上部に表示され、+ ボックスをクリックして展開します。公開された Carryripple_tb についても同じことを行います。をクリックします。シグナル ウィンドウで a[3:0] を選択し、挿入ボタンを押します。b について繰り返します。

SST ウィンドウで U0 を選択し、シグナル ウィンドウで cin を選択し、挿入ボタンを押してから、cout についても同じ操作を行います。

SST ウィンドウで s を選択し、シグナル ウィンドウで s[3:0] を選択して挿入を押します。

そして、「チュートリアル」から 2 つの VHDL ファイルのソースを取得するのは大変でした。私はそれをしませんでした。

また、gtkwave 表示の 60 ns での Cin への「X」の割り当てに注意してください。これは、テストベンチで最後に割り当てられた値を表示するために行いました。

私はそれが良いチュートリアルだとは言いませんが、あなたはここで支払ったものを手に入れています. より良いことをすることは、より大きな質問だったでしょう。

テスト ベンチ (carryRipple_tb.vhd) は、シミュレーション中にモデル (CarryRipple.vhd) を駆動する刺激を提供します。モデルは最後の信号イベントの後に実行を終了するため、実行コマンドに停止時間を渡す必要はありません (例: --stop-time=587200ns)。

Chad Kerseyによる 5 部構成の GHDL/GTKWave チュートリアルも Youtube にあります。解像度はあまり良くなく、Linux 中心です。パート 0 は、2 つのツールのインストールについてです。私の例での唯一の実際の違いは、ghw 波形形式を使用していることです。ほとんどのブラウザーでは、以下の gtkwave ウィンドウをフルサイズで表示できます。

ここに画像の説明を入力

追加した

Toggle Flip Flop を使用したデモ、元の VHDL コードのエラー、および 3 つの可能な修正を示す最近の回答があります。構成宣言を使用して、さまざまな修正バージョンを実行します。VHDL の単純なプロセス ステートメントの出力の遅延を回避する方法を参照してください。

于 2013-06-12T23:18:43.087 に答える