0

タスクを使ったトランザクションについて説明したいと思います。クロッキングブロックCBを使用しています。このタスクは私がやりたいことのようなものですが、このようにする場合、書き込みシームの値はランダムになるため、誰が最後に書き込みを行うかについて定義された順序はないと思います。

task automatic write_trans(input int data);
    fork
        begin
            cb.write <= '1;
            cb.data <= data;
        end
        begin
            ##1;
            //But only if there is no other transactions driving write to 1
            cb.write <= '0; 
        end
    join_any
endtask

したがって、トランザクションwriteを 1 つだけ実行すると、次のクロック サイクルで Low になります。

//for isolated transactions write should be 0,1,0;
write_trans('h17);
##2;
//for these two transactions write should be 0,1,1,0;
write_trans('h18);
##1;
write_trans('h19);
4

1 に答える 1

0

成熟 (更新) する予定のスロット内でドライブ ステートメントが実行される順序に基づいて、最後のドライブ ステートメントが優先されます。タスクは次のように記述できます。

task automatic write_trans(input int data);
  cb.write <= '1;
  cb.data <= data;
  cb.write <= ##1 '0; 
endtask

これは、1800-2012 LRM §14.16.2 クロック出力信号の駆動で説明されています。

于 2016-01-30T01:37:04.950 に答える