36 lines
920 B
Systemverilog
36 lines
920 B
Systemverilog
|
|
class transaction;
|
||
|
|
|
||
|
|
rand bit [1 : 0] addr;
|
||
|
|
rand bit [7 : 0] data;
|
||
|
|
|
||
|
|
constraint data_range { data > 'ha5; }
|
||
|
|
constraint addr_range { addr == 0; }
|
||
|
|
|
||
|
|
endclass : transaction
|
||
|
|
|
||
|
|
module top;
|
||
|
|
|
||
|
|
transaction tr;
|
||
|
|
|
||
|
|
initial begin
|
||
|
|
tr = new;
|
||
|
|
assert(tr.randomize()); // i data_range i addr_range ogranicenja su aktivna
|
||
|
|
$display("addr = %0h, data = %0h", tr.addr, tr.data);
|
||
|
|
|
||
|
|
tr.constraint_mode(0); // iskljucivanje svih ogranicenja
|
||
|
|
assert(tr.randomize()); // nema aktivnih ogranicenja
|
||
|
|
$display("addr = %0h, data = %0h", tr.addr, tr.data);
|
||
|
|
|
||
|
|
tr.data_range.constraint_mode(1); // ukljucivanje jednog ogranicenja
|
||
|
|
assert(tr.randomize()); // data_range je aktivno, dok addr_range nije
|
||
|
|
$display("addr = %0h, data = %0h", tr.addr, tr.data);
|
||
|
|
end
|
||
|
|
|
||
|
|
// Rezultat izvrsavanja:
|
||
|
|
//
|
||
|
|
// addr = 0, data = c7
|
||
|
|
// addr = 3, data = 19
|
||
|
|
// addr = 2, data = f0
|
||
|
|
|
||
|
|
endmodule : top
|