This commit is contained in:
2026-06-12 07:53:32 +02:00
commit 59e71f3297
259 changed files with 29010 additions and 0 deletions

View File

@@ -0,0 +1,35 @@
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

View File

@@ -0,0 +1,40 @@
class transaction;
rand bit [1 : 0] addr;
rand bit [7 : 0] data;
function void display_transaction();
$display("\taddr = %0h", this.addr);
$display("\tdata = %0h", this.data);
endfunction : display_transaction
function void pre_randomize();
$display("transaction pre_randomize:");
this.display_transaction();
endfunction : pre_randomize
function void post_randomize();
$display("transaction post_randomize:");
this.display_transaction();
endfunction : post_randomize
endclass : transaction
module top;
transaction tr;
initial begin
tr = new;
assert(tr.randomize());
end
// Rezultat izvrsavanja:
//
// transaction pre_randomize:
// addr = 0
// data = 0
// transaction post_randomize:
// addr = 2
// data = 1d
endmodule : top

View File

@@ -0,0 +1,40 @@
class transaction;
rand bit [1 : 0] addr;
rand bit [7 : 0] data;
function void display_transaction();
$display("\taddr = %0h", this.addr);
$display("\tdata = %0h", this.data);
endfunction : display_transaction
endclass : transaction
module top;
transaction tr;
initial begin
tr = new;
$display("Initial");
tr.display_transaction();
assert(tr.randomize());
$display("Randomize all");
tr.display_transaction();
assert(tr.randomize(data));
$display("Randomize just data");
tr.display_transaction();
end
// Rezultat izvrsavanja:
//
// Initial
// addr = 0
// data = 0
// Randomize all
// addr = 2
// data = 1d
// Randomize just data
// addr = 2
// data = 9a
endmodule : top

72
code/vezba4/v4_sudoku.sv Normal file
View File

@@ -0,0 +1,72 @@
class Sudoku;
bit unsigned [3:0] init[9][9];
rand bit[3:0] box[9][9];
// vrednost brojeva je izmedju 1 i 9
constraint box_c { /* TODO */ }
// kvadrati u jednom redu moraju imati jedinstvene vrednosti
constraint row_c { /* TODO */ }
// kvadrati u jednoj koloni moraju imati jedinstvene vrednosti
constraint column_c { /* TODO */ }
// unutar svakog kvadrata moraju biti jedinstvene vrednosti
constraint block_c { /* TODO */ }
// ukoliko je zadata pocetna konfiguracija, ona mora biti ispostovana
// broj je zadat ukoliko je init[red][kolona] != 0
constraint init_c { /* TODO */ }
function int solve_puzzle(bit[3:0] init[9][9]);
this.init = init;
return this.randomize();
endfunction: solve_puzzle
function string sprint();
string s = { {3{"+", {3{"-"}} }}, "+\n"};
for(int i = 0; i < 9; i++) begin
s = { s, "|" };
for (int j = 0; j < 9; j++) begin
s = {s, $sformatf("%1d", box[i][j])};
if (j % 3 == 2)
s = {s, "|"};
if (j == 8)
s = {s, "\n"};
end
if (i % 3 == 2)
s = {s, {{3{"+", {3{"-"}}}}, "+\n"}};
end
return s;
endfunction : sprint
endclass: Sudoku
module top;
bit[3:0] init[9][9];
Sudoku s;
initial begin
// neupisana polja = 0
init = '{'{ 0,2,3, 4,0,6, 7,8,0 },
'{ 4,0,6, 7,0,9, 1,0,3 },
'{ 7,8,0, 0,2,0, 0,5,6 },
'{ 2,3,0, 0,6,0, 0,9,1 },
'{ 0,0,7, 8,0,1, 2,0,0 },
'{ 8,9,0, 0,3,0, 0,6,7 },
'{ 3,4,0, 0,7,0, 0,1,2 },
'{ 6,0,8, 9,0,2, 3,0,5 },
'{ 0,1,2, 3,0,5, 6,7,0 }};
s = new;
if (s.solve_puzzle(init)) begin
$display("Resenje je\n%s", s.sprint);
end else begin
$display("Nije moguce resiti problem");
end
end
endmodule: top