3

整数比較を行う単純なCコードがあります。

void evaluate_comparison (int addr, int expected, int got)
{
    if (got == expected) tunnel_pass (addr, got);
    else                 tunnel_fail (addr, expected, got);
}

expected&は、got実際には24ビットDSPコアに書き込まれる/読み取られる値に対応する24ビット値です。(このCコードはアセンブリにコンパイルされてDSPコアにロードされます)

シミュレーションでは、場合によっては(特に、一部addrがDSPでサポートされていない場合)、DSPコアが読み取りますgot = 24'hxxxxxx(未定義の24ビット値)。この場合、上記の比較は合格ですが、私はそれを望んでいません。

===!==Case Equality演算子(Verilogと同様)を使用してみましたが、コードがコンパイルされません。Cでこれを行う方法はありますか?

4

1 に答える 1

1

多分あなたは次のようなものを書くことができます:

if (IsSupported(addr) && got == expected)
   tunnel_pass (addr, got);
else
   tunnel_fail (addr, expected, got);

IsSupported()ただし、あなたの場合に機能 を実装することが実現可能かどうかはわかりません。
少なくとも、サポートされているアドレス範囲を手動でハードコーディングできるかもしれません。

于 2012-05-02T07:11:33.160 に答える