問題タブ [quartus]
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.
verilog - Verilog は、プッシュボタン アクティベーション、FSM で常にブロックします。
アルテラ Cyclone II FPGAボードにVerilog
プログラムするコードを書いています。キー スイッチを押すとアクティブになるブロックがあります。always
私は有限状態マシンのプログラムを書いています。このキーの押下は、ユーザーがプログラムの使用を開始したいことを示し、初期状態から次の状態に移行する必要があることを示しているはずです。レジスタの初期化は合成できないため、START
0 から始まるとは想定できません。
問題は、ボードをプログラムして電源always
を入れると、 に割り当てられたキーを押す前に、このブロックが既に 1 回実行されていることkey[3]
です。START
プログラムの実行時に の値を確認しましたが、既に1
です。キーが押されたときにのみキーが負のエッジにあるため、なぜこれが起こるのかわかりません。START
以前の状況で常に同じ条件のブロックを使用しましたが、正常に機能したため、これは?の初期化と関係があると思います。
vhdl - 関数に EOF がありません
私はこの VHDL コードを持っています。ルックアップ テーブルを備えたサイン ジェネレーターとして動作するはずです。
「関数に EOF がありません」というエラー、またはモデルシムで単に「構文エラー」というエラーが発生し続けます。
いくつかのオンライン チュートリアルの構文があり、正しいようです。なにが問題ですか?
quartus - プロジェクトを開こうとすると、Quartus が開いてから閉じます
なぜこれが起こっているのか完全にはわかりません。また、これは私の特定のプロジェクトの 1 つだけで発生していると言うことも重要だと思います。私はまだ他の完璧に開くことができます。
vhdl - Quartus II は line.all をサポートしていますか?
コンパイル時に FSM ステート エンコーディングをエクスポートする VHDL コードをインプリメントしました。これはザイリンクスの ChipScope で読み取ることができます。この機能は、Xilinx ISE 14.7、iSim 14.7、Mentor Graphic の QuestaSim 10.2c でテストされています。私のデザインは、アルテラ FPGA の代替トップレベルでも合成できますが、Quartus II には問題があるようreturn line.all;
です。
Quartus II (14.0) エラー メッセージ:
- エラー (10351): sata_PhysicalLayer.vhdl (504) での VHDL サブプログラム本体エラー: 関数 "dbg_GenerateEncodings" が常に値を返すとは限らない
- エラー (10346): debug.vhdl(47) での VHDL エラー: 正式なポートまたはパラメーター「エンコーディング」には、実際の値またはデフォルト値が必要です
- エラー (10657): sata_PhysicalLayer.vhdl(514) での VHDL サブプログラム エラー: サブプログラム "dbg_ExportEncoding" への呼び出しを作成できませんでした
以下では、私のコードについて説明します。
VHDL コード
この設計では、3 つの関数を使用して FSM 状態エンコーディングをエクスポートします。
- 現在のローカル FSM ステートをバイナリ値としてエンコード -> dbg_EncodeState
(この関数の結果は ILA ポートに接続されます) - ローカル FSM のすべての状態をセミコロンで区切られた文字列に変換します -> dbg_GenerateEncodings
- この文字列をフォーマットし、その要素をトークン ファイルに書き込みます -> dbg_ExportEncoding
(この関数はパッケージにあります)
FSM 宣言:
ローカル関数 - エンティティ関数ごと:
グローバル関数 - debug.pkg.vhdl で定義:
コードの最後の部分は、エクスポート関数を呼び出すエンティティ内のダミー定数です。
使用される補助機能:
- log2ceilnz(x) は、x シンボルをバイナリでエンコードするために必要なビットを計算します。
- to_slv はすべてを std_logic_vector に変換します。この場合、slv への整数
- str_replace は文字列を文字列に置き換えます
- str_trim は、str'low から最初に出現する NUL までの文字列を返します。
- raw_format_nat_hex は、自然から 16 進文字列にフォーマットします
追記事項:
すべての vhdl ファイルは VHDL-2008 としてマークされています。
私の質問:
- Quartus 環境で line.all を使用した経験のある人はいますか?
- 回避策はありますか?
- 一定の長さの文字列を使用せずにエクスポート タスクを達成するためのより良い解決策はありますか?
回避策:
関数 dbg_GenerateEncodings を生成ステートメントでラップしました。
XST とは対照的に、Quartus は生成ブロック内の関数をチェックしません。
vhdl - Quartus II が変数を信号として認識するのはなぜですか?
私は VHDL プログラミングが初めてで、これが私の最初のプロジェクトです。正規/逆カウント順序の両方の機能を備えたバイナリ カウンターを作成することです。私の計画は単純です:
- 分周器プロセスを記述して、目的のクロック周波数を取得し、この新しいクロックをビット信号として出力します
flag
。 - 「フラグ」を別のプロセスの機密リストに入れ、通常/逆の状態に従ってカウントします-
curr_s
私のコードに保存されています。 - 3番目のプロセスは入力
ctl
信号をセンシティブとして受け取り、最後のプロセスのカウントを保存するように設定されている -curr_s
の値を切り替えてリセットします。count
ただし、Quartus II は次のエラー メッセージを返します。
エラー (10028): bi_counter.vhd(35) で、ネット "count[31]" の複数の定数ドライバーを解決できません
エラー (10029): bi_counter.vhd(46) の定数ドライバー
エラー (10028): bi_counter.vhd(35) でネット "count[30]" の複数の定数ドライバーを解決できません
...
エラー (10028): bi_counter.vhd(35) でネット "count[14]" の複数の定数ドライバーを解決できません
少しグーグルで調べたところ、複数のプロセスで a の値を変更することは許可されていないなどのルールがありますが、問題は、 myをシグナルではなく共有変数としてsignal
宣言していることです-このようなエラーは発生しません。そして、プロセス間で情報を交換する変数としてcount
使用したいので、これを行うつもりでした-これは理にかなっていますか?そうでない場合、回避策はありますか?count
これが私のコードです:
verilog - Quartus および modelsim - コンパイル サイズのキャスト
Quartus でコンパイルし、ModelSim でいくつかのモジュールをシミュレートしてみます。
これを参照してください:
ということで、modelsimでコンパイル。エラーも警告もありません。シミュレーションは成功です。すべてが順調です。次に、Quartus でコンパイル (合成) すると、次の警告が表示されます。
したがって、警告を理解し、サイズキャストで修正します。
Quartus でのコンパイルは成功です。しかし、ModelSim でこのコードを再度コンパイルしようとすると、エラーが発生します。
どこが間違っていて、modelSim がサイズ キャストをコンパイルできないのはなぜですか?
modelsim - modelsim でのタイミング シミュレーションの実行
非常に単純な .vo ファイル (quartus コンパイルの出力) をシミュレートしようとしました。コード、.v ファイル、および quartus 出力 .vo ファイルを添付しました。モデルのシミュレーションには、sim-altera が使用されます。シミュレーションを実行しようとすると、次のエラーが画面に表示されました。どうすればこれを修正できますか?
ありがとう
CA.v :
CA.vo :
qsim 出力:
flip-flop - 非同期リセットを備えた Quartus D フリップフロップ
ダイアグラムで非同期リセットを使用する DFF が必要です。クォータスにはありますか?そうでない場合、どうすれば実装できますか?
memory - Verilog/SystemVerilog でのラッチの推論
手続き型ブロックのステートメントは順次実行されるのに、ブロック 1、ブロック 2、またはブロック 3 のいずれもラッチを推論しないのはなぜでしょうか?
block1 では、tmp1 の新しい値が使用可能になる前に、ブロッキング割り当てを使用して y が計算されます。
block2 では、tmp2 は非ブロッキング割り当てを使用して計算されます。これにより、always ブロックが終了するまで割り当てが延期されます。一方、z はブロッキング割り当てを使用して計算され、tmp2 の新しい値はまだ利用できません。
ブロック 3 には不完全なセンシティビティ リストがあり、まだラッチがありません。
Quartus II 14.1 からの合成結果は次のとおりです。
このブロックを追加した場合にのみ、ラッチが推測されます。
値が更新される前に不完全な機密リストまたは変数を使用すると、組み合わせブロックのラッチが推論されない理由を誰かが説明できますか?