URL
https://opencores.org/ocsvn/srdydrdy_lib/srdydrdy_lib/trunk
Subversion Repositories srdydrdy_lib
Compare Revisions
- This comparison shows the changes necessary to convert path
/srdydrdy_lib/trunk/env
- from Rev 18 to Rev 19
- ↔ Reverse comparison
Rev 18 → Rev 19
/verilog/scoreboard/sb_monitor.v
24,22 → 24,70
input [width-1:0] p_data |
); |
|
|
localparam pat_dep = 8; |
|
reg [width-1:0] sbmem [0:items-1]; |
reg [7:0] drdy_pat; |
integer dpp; |
reg nxt_p_drdy; |
|
reg [width-1:0] outbuf[0:items-1]; |
|
initial |
begin |
drdy_pat = {pat_dep{1'b1}}; |
dpp = 0; |
end |
|
always @* |
begin |
nxt_p_drdy = p_drdy; |
|
if (p_srdy & p_drdy) |
begin |
if (drdy_pat[dpp]) |
begin |
nxt_p_drdy = 1; |
end |
else |
nxt_p_drdy = 0; |
end |
else if (!p_drdy) |
begin |
if (drdy_pat[dpp]) |
begin |
nxt_p_drdy = 1; |
end |
else |
nxt_p_drdy = 0; |
end |
end // always @ * |
|
always @(posedge clk) |
begin |
if ((c_srdy & p_drdy) | !p_drdy) |
dpp = (dpp + 1) % pat_dep; |
|
p_drdy <= #1 nxt_p_drdy; |
end |
|
always @(posedge clk) |
begin |
if (c_srdy & c_drdy & (c_req_type == 1)) |
begin |
sbmem[c_itemid] <= #20 (sbmem[c_itemid] & ~c_mask) | (c_data & c_mask); |
sbmem[c_itemid] <= #18 (sbmem[c_itemid] & ~c_mask) | (c_data & c_mask); |
end |
else if (c_srdy & c_drdy & (c_req_type == 0)) |
begin |
outbuf[c_itemid] = sbmem[c_itemid]; |
end |
|
if (p_srdy & p_drdy) |
begin |
if (p_data != sbmem[p_txid]) |
if (p_data != outbuf[p_txid]) |
begin |
$display ("%t: ERROR: sb returned %x, expected %x", |
$time, p_data, sbmem[p_txid]); |
$time, p_data, outbuf[p_txid]); |
end |
end |
end |
/verilog/scoreboard/sb_bench.v
10,7 → 10,6
localparam txid_sz = asz; |
|
reg clk, reset; |
wire p_drdy = 1'b1; |
|
initial |
begin |
20,16 → 19,17
|
/*AUTOWIRE*/ |
// Beginning of automatic wires (for undeclared instantiated-module outputs) |
wire [width-1:0] c_data; // From driver of sb_driver.v |
wire c_drdy; // From sboard of sd_scoreboard.v |
wire [asz-1:0] c_itemid; // From driver of sb_driver.v |
wire [width-1:0] c_mask; // From driver of sb_driver.v |
wire c_req_type; // From driver of sb_driver.v |
wire c_srdy; // From driver of sb_driver.v |
wire [txid_sz-1:0] c_txid; // From driver of sb_driver.v |
wire [width-1:0] p_data; // From sboard of sd_scoreboard.v |
wire p_srdy; // From sboard of sd_scoreboard.v |
wire [txid_sz-1:0] p_txid; // From sboard of sd_scoreboard.v |
wire [width-1:0] c_data; // From driver of sb_driver.v |
wire c_drdy; // From sboard of sd_scoreboard.v |
wire [asz-1:0] c_itemid; // From driver of sb_driver.v |
wire [width-1:0] c_mask; // From driver of sb_driver.v |
wire c_req_type; // From driver of sb_driver.v |
wire c_srdy; // From driver of sb_driver.v |
wire [txid_sz-1:0] c_txid; // From driver of sb_driver.v |
wire [width-1:0] p_data; // From sboard of sd_scoreboard.v |
wire p_drdy; // From monitor of sb_monitor.v |
wire p_srdy; // From sboard of sd_scoreboard.v |
wire [txid_sz-1:0] p_txid; // From sboard of sd_scoreboard.v |
// End of automatics |
|
/* sb_driver AUTO_TEMPLATE |
38,25 → 38,25
); |
*/ |
sb_driver #(/*AUTOINSTPARAM*/ |
// Parameters |
.width (width), |
.items (items), |
.use_txid (use_txid), |
.use_mask (use_mask), |
.txid_sz (txid_sz), |
.asz (asz)) driver |
// Parameters |
.width (width), |
.items (items), |
.use_txid (use_txid), |
.use_mask (use_mask), |
.txid_sz (txid_sz), |
.asz (asz)) driver |
(/*AUTOINST*/ |
// Outputs |
.p_srdy (c_srdy), // Templated |
.p_req_type (c_req_type), // Templated |
.p_txid (c_txid[txid_sz-1:0]), // Templated |
.p_mask (c_mask[width-1:0]), // Templated |
.p_itemid (c_itemid[asz-1:0]), // Templated |
.p_data (c_data[width-1:0]), // Templated |
.p_srdy (c_srdy), // Templated |
.p_req_type (c_req_type), // Templated |
.p_txid (c_txid[txid_sz-1:0]), // Templated |
.p_mask (c_mask[width-1:0]), // Templated |
.p_itemid (c_itemid[asz-1:0]), // Templated |
.p_data (c_data[width-1:0]), // Templated |
// Inputs |
.clk (clk), |
.reset (reset), |
.p_drdy (c_drdy)); // Templated |
.clk (clk), |
.reset (reset), |
.p_drdy (c_drdy)); // Templated |
|
/* sd_scoreboard AUTO_TEMPLATE |
( |
71,45 → 71,45
.txid_sz (txid_sz)) sboard |
(/*AUTOINST*/ |
// Outputs |
.c_drdy (c_drdy), |
.p_srdy (p_srdy), |
.p_txid (p_txid[txid_sz-1:0]), |
.p_data (p_data[width-1:0]), |
.c_drdy (c_drdy), |
.p_srdy (p_srdy), |
.p_txid (p_txid[txid_sz-1:0]), |
.p_data (p_data[width-1:0]), |
// Inputs |
.clk (clk), |
.reset (reset), |
.c_srdy (c_srdy), |
.c_req_type (c_req_type), |
.c_txid (c_txid[txid_sz-1:0]), |
.c_mask (c_mask[width-1:0]), |
.c_data (c_data[width-1:0]), |
.c_itemid (c_itemid[asz-1:0]), |
.p_drdy (p_drdy)); |
.clk (clk), |
.reset (reset), |
.c_srdy (c_srdy), |
.c_req_type (c_req_type), |
.c_txid (c_txid[txid_sz-1:0]), |
.c_mask (c_mask[width-1:0]), |
.c_data (c_data[width-1:0]), |
.c_itemid (c_itemid[asz-1:0]), |
.p_drdy (p_drdy)); |
|
sb_monitor #(/*AUTOINSTPARAM*/ |
// Parameters |
.width (width), |
.items (items), |
.use_txid (use_txid), |
.use_mask (use_mask), |
.txid_sz (txid_sz), |
.asz (asz)) monitor |
// Parameters |
.width (width), |
.items (items), |
.use_txid (use_txid), |
.use_mask (use_mask), |
.txid_sz (txid_sz), |
.asz (asz)) monitor |
(/*AUTOINST*/ |
// Outputs |
.p_drdy (p_drdy), |
.p_drdy (p_drdy), |
// Inputs |
.clk (clk), |
.reset (reset), |
.c_srdy (c_srdy), |
.c_drdy (c_drdy), |
.c_req_type (c_req_type), |
.c_txid (c_txid[txid_sz-1:0]), |
.c_mask (c_mask[width-1:0]), |
.c_data (c_data[width-1:0]), |
.c_itemid (c_itemid[asz-1:0]), |
.p_srdy (p_srdy), |
.p_txid (p_txid[txid_sz-1:0]), |
.p_data (p_data[width-1:0])); |
.clk (clk), |
.reset (reset), |
.c_srdy (c_srdy), |
.c_drdy (c_drdy), |
.c_req_type (c_req_type), |
.c_txid (c_txid[txid_sz-1:0]), |
.c_mask (c_mask[width-1:0]), |
.c_data (c_data[width-1:0]), |
.c_itemid (c_itemid[asz-1:0]), |
.p_srdy (p_srdy), |
.p_txid (p_txid[txid_sz-1:0]), |
.p_data (p_data[width-1:0])); |
|
/* -----\/----- EXCLUDED -----\/----- |
task send; |
151,15 → 151,31
end |
|
// mix updates with requests |
for (i=0; i<1024; i=i+1) |
for (i=0; i<4096; i=i+1) |
begin |
entry = {$random} % items; |
// choose random entry but space requests apart |
//entry = {$random} % items; |
case (i%2) |
0 : entry = {$random} % (items/2); |
1 : entry = {$random} % (items/2) + items/2; |
//2 : entry = {$random} % (items/4) + 2*(items/4); |
//3 : entry = {$random} % (items/4) + 3*(items/4); |
endcase |
|
op = {$random} % 8; |
|
case (i) |
512 : monitor.drdy_pat = 8'h55; |
1024 : monitor.drdy_pat = 8'h0F; |
1500 : monitor.drdy_pat = 8'h82; |
2000 : monitor.drdy_pat = 8'hFE; |
endcase |
|
if (op == 0) |
driver.send (1, {width{1'b1}}, $random, entry); |
else if (op == 1) |
driver.send (1, 32'h0000FFFF, $random, entry); |
else if (op == 2) |
driver.send (1, $random, $random, entry); |
else |
driver.send (0, 0, 0, entry); |