OpenCores
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);

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.