Я думаю, ты почти у цели. Я думаю, что вы имели в виду:
addr[11:0] + size <= 32'h1000 ;
Я бы порекомендовал , а не , используя нестандартные литералы , то есть я бы порекомендовал сказать 32'h1000
, а не 'h1000
. Это связано с тем, что поведение таких литералов изменялось между Verilog-1995 и Verilog-2001, поэтому, вероятно, лучше всего избегать их.
module M;
class packet;
rand bit [13:0] addr; // start address
rand bit [15:0] size; // size of packet
constraint size_c { size inside {[1:4096]}; }
constraint addr_c { addr[1:0]==0; // for 4 byte alignment
addr[11:0] + size <= 32'h1000; }
endclass
initial
begin
packet p = new;
repeat (10)
begin
p.randomize;
$display("%p - %d", p, p.addr[11:0] + p.size);
end
end
endmodule
https://www.edaplayground.com/x/3gtq