class conf;
typedef struct packed
{
int ns_size;
int limit;
} ns;
int num_ns_supported;
ns num_ns[];
function new(input int s=5);
num_ns_supported = s;
num_ns = new[s];
foreach(num_ns[i])
begin
num_ns[i].ns_size = (1000 * (i+1));
end
endfunction
endclass
class pac;
int nsid=1;
int slba;
endclass
class c;
pac p;
conf cfg;
covergroup x;
option.per_instance = 1;
a : coverpoint p.slba
{
bins range[3] = {[32'h0000_0000 : cfg.num_ns[p.nsid-1].ns_size]};
}
endgroup
function new(input conf ca);
p = new();
cfg = ca;
x = new();
endfunction
function void sample(input pac p1);
p = p1;
x.sample();
endfunction
endclass
program p1;
conf cfg = new(6);
pac p = new();
c co = new(cfg);
initial
begin
p.nsid = 1;
p.slba = 550;
co.sample(p);
p.nsid = 2;
co.sample(p);
end
endprogram
在此代碼中,我需要覆蓋與尊重的num_ns結構關聯的範圍的slba。覆蓋範圍內的動態覆蓋點SystemVilog
但是,在這種代碼中,範圍將根據num_ns被劃分[0]只。
所以,我怎麼能重複使用相同的coverpoint生成動態範圍取決於對採樣時間變量的值?
確定,所以,如果動態coverpoints是不可能的,那麼有沒有其他的辦法來解決thorugh正常/固定coverpoints的問題,因爲我有這樣的場景在我的報道? –
您將不得不解釋您是如何計算覆蓋範圍的,即如果您更改每個樣本的垃圾箱結構,您希望如何達到100%的覆蓋率? 覆蓋範圍應該工作的方式是在模擬開始時設置一組容器,並且每個樣本點擊一個容器。如果在模擬結束時所有箱都被擊中,那麼您將獲得該覆蓋點的100%覆蓋率。試着用一個較小的例子來解釋你想要做什麼,顯示每個樣本會碰到哪個箱,並顯示足夠的樣本來解釋如何獲得100%的覆蓋率。 –
這裏我會試着向你解釋你的要求。 (1)我想覆蓋所有num_ns結構的ns_size字段的3個範圍。 (2)現在,在這種情況下,num_ns結構數量是動態的,並作爲新方法中的參數傳遞。所以我不能使用不同的覆蓋點來達到同樣的目的,因爲我不知道會需要多少個覆蓋點......由於systemverilog中沒有動態覆蓋點,那麼爲什麼我可以符合要求? –