-2

以前に割り当てられたセグメントに入ってはならないアドレスをランダム化しようとしています。たとえば、アドレス 0、10、40 が割り当てられ、ブロック長が 5 の場合、アドレスをランダム化したときに、 (0-4) 、( 10-14) 、(40-44)。システム Verilog でこれを制約するにはどうすればよいですか。方法を試しましたが、うまくいきません。
これが私のコードです:

constraint con {

foreach(keys[i]){

    !(address inside {[keys[i]:keys[i]+BLOCK_SIZE]});    
}

}

keys は既に割り当てられているアドレスの配列であり、生成されたアドレスは上記の範囲に入ってはなりません。ありがとうシヴァ

4

2 に答える 2

0

それは私のために働いた。完全なテストケースと、得られた誤った結果を示してください。

class a;

   rand bit [5:0] address;
   bit [5:0] keys[] = {0,10,40};
   int       BLOCK_SIZE = 5;
   constraint con {

           foreach(keys[i]) {
      !(address inside {[keys[i]:keys[i]+BLOCK_SIZE-1]}) ; }    
           }

endclass

module top;
   a a_h;
   initial begin
      a_h = new;
      repeat (200) begin
     if (!a_h.randomize())
       $error("randomize failed"); 
     $display(a_h.address);
     assert (!(a_h.address inside {[0:4],[10:14],[40:44]}));
      end
   end
endmodule // top
于 2013-10-29T22:17:59.517 に答える