4

PSLアサーションについて興味深い質問があります。これがVHDLモニタープロセスです。これはアサーション専用のプロセスであるため、合成できないプロセスです。input1このモニターは、現在のFSM状態をチェックし、「 」と「」の2つのレジスターの値を保管しますreg136assert最後に、これらのレジスタの値を比較するために""ステートメントをトリガーします。

process (clk)
  variable var_a : signed(7 downto 0);
  variable var_b : signed(7 downto 0);
begin
  if (rising_edge(clk)) then
    case state is
      when s0 =>
        var_a := signed(input1);
      when s22 =>
        var_t34 := signed(reg136);
      when s85 =>
        assert (var_t34 < var_a)
          report "Assertion xxx failed : (t34 < a)";
    end case;
  end if;
end process;

質問は次のとおりです。このモニターをPSL(プロパティ仕様言語)アサーションに変換する方法はありますか?

重要:レジスタ「input1」と「reg136」は、fsm状態がそれぞれ状態s0とs22にある場合にのみ読み取ることができます。それ以外の場合、これらのレジスタに含まれるデータは、アサートされた変数「a」および「t34」に属しません。結果として、PSLステートメントは正しいfsm状態の値を読み取って保存する方法を必要とします。

ありがとうございました !

4

1 に答える 1

0

prev実際、 PSL関数を使用してそれを行う方法を見つけたと思います。

常にアサート (state = s85) -> (prev(reg136, 85-22) < prev(input1, 85-0)) @rising_edge(clk)

fsm は、クロック サイクルごとに状態レジスタを 1 ずつインクリメントするか、状態 s0 または s22 から状態 s85 に移行するのに必要なクロック サイクル数を知る必要があります。

誰かがこれが機能することを確認できますか? これを確認するための PSL 対応のシミュレーターがありません...

于 2010-07-28T14:31:58.403 に答える