問題タブ [ghdl]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
vhdl - GHDL や VHDL-2002 がループ内の範囲を非常に制限しているのはなぜですか?
ここにいくつかの有効な VHDL コードがあります。
- GHDL 0.31 (--std は設定されていません)
- ISE 14.7 (XST および iSim、std = 200x)
- Vivado (シンセおよび xSim)
- Altera Quatus II 13.1 および最後になりましたが、少なくとも
- クエスタシム 10.0d
オプション '--std' が設定されていない場合、GHDL はこのコードを理解します。「--std」を VHDL-2002 に設定すると、for ループの範囲に関するエラーが表示されます。うーん、2002年より前のモードでは、この行はすでに警告をスローします:(
だからここに私の機能があります:
GHDL エラー メッセージ:
障害のあるライン 249 はFOR I IN 0 TO (slv'length / 4) - 1 LOOP
です。ユーザー定義型 T_SLVV_4 は次のように定義されます。
私のコードにはそのような8つのエラーがあります。'length
そのうちの 2 つをからそう に書き換えることができた'range
ので、残り 6 つです。しかし、これらのいくつかは書き換えることができません...
'length
では、GHDL および/または VHDL >=2002 でループ境界の計算が許可されないのはなぜですか?
vhdl - 列挙型の文字リテラルへのエイリアスの正しい構文は何ですか?
教育目的で、文字リテラルである列挙値へのエイリアスを宣言しようとしています。以下の例では、列挙型(std.standard で宣言)bit_one
の値「1」のエイリアスを作成しようとしています。bit
以下の最初の形式が 2 つのコンパイラ (GHDL 0.29.1 と Quartus II 13.01) によって拒否され、2 番目の形式が同じ 2 つに加えて ModelSim と ActiveHDL によって受け入れられる理由について、私は困惑しています。したがって、質問: 以下のコメントアウトされた行のように、このエイリアスを宣言することは違法ですか?
GHDL では VHDL-2002 スイッチを使用し、他のツールでは VHDL-2008 を使用しています。
少し推測すると、VHDL-2008 LRM では、すべての例が次の形式で記述されています。
しかし、それらは暗黙の宣言であり、例が選択された名前を使用している場合でも、すべてのエイリアスをこのように宣言する必要があるという意味ではありません.IMO . では、一部のベンダーが標準を誤解したのではないでしょうか?
vhdl - GHDL: コンポーネントをバインドするにはどうすればよいですか?
ghdl (0.32rc1) で自動テストベンチを実行しています。一部のテストベンチでは、Xilinx ISE の unisim プリミティブが必要です。
私の例をテストしたい場合は、 2 つの外部ファイルを用意しました。この例を実行するには、MUXCY プリミティブを見つけることができるように、Xilinx ISE または Vivado をインストールする必要があります。フォルダにあります<InstallDir>\ISE_DS\ISE\vhdl\src\unisims\primitive
。
次のghdlコマンドで3つのファイルを分析しました。
これまでのところエラーはありません。
ここでシミュレーションを開始しました。Windows では ghdl.exe -r です (Linux: -e および -r):
現在、ghdl はmux
バインドできなかったと報告しています。パラメータと
も試しましたが、何も変わりませんでした。--syn-binding
-P.
MUXCY コンポーネントをバインドするにはどうすればよいですか?
PS 誰かが 'ghdl' タグを作成できますか? 私は十分な評判を持っていません:)
vhdl - GHDL: 演算子「and」の関数宣言がありません
これが私の削除された例です:
この行は次のとおりです。
生産する
実行中
GHDL 0.32rc1 (20141104) [Dunoon edition]
Arch Linux で。
VHDL 演算子によると、両方の比較がブール値を返しand
、2 つのブール値の定義があります。それで、私は何を間違っていますか?
vhdl - GHDL の 'protected_enter(2)' エラーを解決する方法
PoC.Simulation
ヘルパー パッケージの VHDL-08 バージョンを実装しようとしています。
元のパッケージは共有変数を使用してシミュレーション ステータスを追跡します。
- pass : 渡されたすべてのアサート
- stop : すべてのプロセスを停止します
その内部状態を使用する関数と手順がいくつかあります。たとえば、tbGenerateClock()
プロシージャはクロック信号を作成するために使用されます。
私の VHDL-08 バージョンでは、共有変数に保護された型を使用しています。内部状態変数を使用または変更するいくつかの「メソッド」(そのための正しい終端は?) を実装しました。
GHDL はすべてのソースをコンパイルし、実行時にエラーをスローします。
C:\Tools\GHDL\0.33dev\bin\ghdl.exe:internal error: protected_enter(2)
C:\Tools\GHDL\0.33dev\bin\ghdl.exe:error: simulation failed
これは GHDL の内部エラーですか、それとも保護された型を間違った方法で使用していますか?
手順が 2 つしかない(できれば) 最小限の例 ( Gist からダウンロードgenerateClock
) を作成しましたstopSimulation
。
tb*
VHDL-93 実装への互換性のあるインターフェイスを確保するためのラッパー プロシージャもあります。
解決:
- クロック生成コードを
tbGenerateClock
プロシージャに移動 - 保護された型に関数を追加して、内部停止状態を取得します
- この関数を次のようにマークします
impure
変更されたシミュレーション パッケージは次のとおりです。
vhdl - VHDL クロック テスト ベンチ
オンラインで入手したコードを実行しようとしていますが、どういうわけかテストベンチが GHDL で期待される出力を実行できません。
アーキテクチャ コード ライブラリ IEEE。IEEE.STD_LOGIC_1164.ALL を使用します。
テストベンチ:
上下にパルスするクロックを形成する波を期待していますが、そうではないようです。デザインのどこが悪いのか気になります。
次のコマンドを実行しました。
これは私の出力
ですが、クロック出力については、0 の信号ではなく、アップとダウンの信号が必要です。
ありがとう
powershell - PowerShell が stderr でメッセージを切り刻むのはなぜですか?
PowerShell スクリプトを使用して、コンパイラ (ghdl.exe) のさまざまなコンパイル手順を制御しています。
コンパイラには 3 つの異なる出力形式があります。
- 出力もエラーもありません => $LastExitCode = 0
- stderr (警告) に出力しますが、エラーはありません => $LastExitCode = 0
- stderr (エラー) での出力、およびおそらく警告 => $LastExitCode != 0
stderr および stdout シームの処理は非常にバグが多いため、この StackOverflow の投稿で示されている方法を使用しました: PowerShell: Invoke-Expression でエラーを管理する
メッセージの色付けを追加した私の実装は次のとおりです。
使用法:
通常、コンパイラは 1 行に 1 つのメッセージ (エラーまたは警告) を発行します。以下のスクリーンショットに示すように、一部のメッセージは最大 8 行に分割されています。これが、出力の色付けが期待どおりに機能しない理由です。さらにいくつかの行がエラー (誤検知) として検出されるため、ログで実際のエラーを見つけることができません。
例:
期待される結果:
私が見る限り、コンパイラ (ghdl.exe) はメッセージを完全な行として出力します。
質問:
- なぜこれが起こるのですか?
- 誰がこれを解決できますか?