リセットされていないレジスタを検出する


8

Verilogを作成するとき、エラーや警告を表示するさまざまな「リンター」を使用します。これらは、リンター(Verilator)とともに、私のシミュレーター(ModelSim)、私のコンパイラー(Quartus II)です。まとめると、バスサイズの不一致や推論されたラッチなど、よくある落とし穴を十分にカバーできます。

残念ながら、3つのツールはいずれも、リセットされていないレジスタを検出しません。私の意味を理解するには、次のことを考慮してください。

reg a;
reg b;

always @(posedge clk_i or posedge rst_i) begin
  if(rst_i) begin
    a <= 1'b0; // Reset a
    // Ooops, forgot to reset b
  end else begin
    // Do stuff with a and b
  end
end

リセットされていないレジスタをツールで自動的に検出するにはどうすればよいですか?


2
「リセットされないレジスタ」は必ずしも悪いものではありません(少なくともシリコンデザインでは)。これが、lintツールの警告ではない理由かもしれません。一般に、リセットが必要なレジスタのみをリセットする必要があります。フリップフロップにリセットを追加すると、その面積とリセットネットワークの負荷が増加するためです。256ビットのデータバスと1ビットの「有効な」信号がある場合、有効をリセットしてもデータをリセットする必要はありません。
Tim

Synplicity(合成ツール)はそのようなことについて警告を出します。彼らはしばしば意図的であるので迷惑です...しかしあなたの状況を助けるかもしれません(SynplicityがVerilogを実行すると仮定して、私は試したことがない)
ブライアンドラモンド

質問では、ModelSim、Quartus II、およびVerilatorなど、さまざまなリンターが使用されていると述べています。これらのツールはリンティング機能が制限されており、チェックする問題の種類は非常に狭いです。
travisbartley

回答:


3

あなたが言及したツールはどれも本当のリンティングツールではありません。これらのツールは、十分なリンティングを提供するものではありません。

私は2つの商用リンティングツールを見ましたが、どちらにも非リセットフロップを検出するためのルールがありました。

3つのオプションが表示されます。

  1. デビッド・ケスナーの答えがあなたのために働くなら-行く方法。
  2. 仕事をするまともなリントツールを入手してください。
  3. 非リセットフロップを検出するスクリプトを記述します。

今、#2はそれほど単純ではないかもしれません。そこに無料の無料のリンターがあるかどうかはわかりませんが、プロのリンターは高価で、セットアップに長い時間がかかります。

#3は私が使用するアプローチです。スクリプト言語(Perl、Pythonなど)を知っている場合、リセットされていないフロップを検索するスクリプトを作成するには、せいぜい1日しかかかりません。スクリプト言語がわからない場合は、StackOverflowを使用して、助けを求めることができます-数日で完了です。これにより、別のツールが個人用ツールボックスに追加され、フロントエンドの設計者の間で非常に高く評価されます-テキスト処理スクリプトを作成します。

幸運を!


4

VHDLデザインでModelsimを実行すると、Time = 0psで「X」または「U」タイプの入力信号のロジックに関する警告が表示されます。正確な警告メッセージを忘れてしまいました。これらの警告を確認すると、初期化していないものがわかります。


1

私はこれをリントするツールではなく機能テストに依存しています。私はテストベンチのリセットと再生の部分をトグルする傾向があります。リセット後にデバイスが正しく動作する場合は、状態空間を十分にリセットしているか、テストベンチが正常ではありません。


0

時々、設計ツールはあらゆる種類の興味深い情報を提供する一連のレポートを出力します。たとえば、ザイリンクスはこれをマップレポートと呼び、どの論理コンポーネントがどの物理コンポーネントにマップされたかを示します。

上記の例では、reg aはFDCE(フリップフロップ、D、非同期クリア、およびクロックイネーブル)にマップされ、reg bはFDE(フリップフロップ、D、およびクロックイネーブル)にマップされます。これは、reg bにリセットがないことを示しています。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.