3

system-verilog を使用してテストベンチしたい verilog モジュールのシリアル出力があります。

「SO」と呼ばれる出力は、たとえば 8'h9A の値を持つ正しいシリアル入力「SI」が与えられると、8'hC6 のようなものを出力します。

各信号を明示的に記述せずにシリアル I/O をエンコード/デコードする簡単な方法はありますか?

例えば:

assert property @(posedge clk) $rose(EN) |-> ##[1:3] SI ##1 !SI[*2] ##1 SI[*2] ##1 !SI ##1 SI ##1 !SI
                                             ##[1:3] SO[*2] ##1 !SO[*3] ##1 SO[*2] ##1 !SO;

ごちゃ混ぜのように見え、ほとんど読めません。私はただ書きたいだけです

8'h9A ##[1:3] 8'hC6

しかし、明らかにこれは機能しません。アドバイスや例は大歓迎です。前もって感謝します。

4

2 に答える 2

3

通常、アサーションを使用してデータ項目のチェックを記述するのではなく、制御信号を記述します。この場合に必要なのは、入力ストリーム全体を 16 ビットのベクトルに収集し、出力ストリーム全体を収集して、SO 行で取得したものが取得する必要があるものと一致することを確認することです (SI にあったもののいくつかの変換)ライン)。

私の SystemVerilog はさびていますが、私の言いたいことの簡単な例を示します。コンパイルできないことに注意してください。

// collect input
always @(posedge clk) begin
  if en == 1 begin
    collect_input();
  end
end

logic[7:0] si;

task collect_input();
  for i from 0 to 7 begin
    si[i] = SI;  // take care of endianness here, might be si[7-i];
  end
endtask


// collect output
...

logic[7:0] so;

...

collect_output();
  for ...

  // after collecting so, check that it's correct
  if so != transform(si) begin
    $error("wrong output data");
  end
endtask

それがあなたにアイデアを与えることを願っています。

于 2013-06-11T15:13:12.333 に答える