簡體   English   中英

Isim 未測試測試夾具中的所有位

[英]Isim is not testing all bits in test fixture

我正在嘗試為我的 Verilog 代碼測試所有可能的輸入情況。 我用 for 循環設置它。

for(sel = 0;sel < 4;sel=sel+1) begin
            for(a = 0;a < 8;a=a+1) begin
                    for(b = 0;b < 8;b=b+1) begin
                        #50;
                    end
            end
    end

它更早工作,但我必須更改某些內容,否則 Isim 可能有錯誤。 我也初始化了 a、b 和 sel。

reg [2:0] a;
reg [2:0] b;
reg [1:0] sel;

當我嘗試模擬 tb 文件時,它只會重復循環 b! 為什么會這樣?

此外,當我將 b 邊界更改為 <7 時,它將開始循環遍歷 a,但我必須將 a 邊界更改為 <7 以循環遍歷 sel。 雖然這部分有效,但它跳過了 a 和 b 的 111 和 sel 的 11 的情況。

此外,我決定在所有情況下手動測試這些位,它顯示了正確的結果。

您有一個無限循環,因為您的結束條件 ( b < 8 ) 始終為真。 您可以使用以下代碼輕松地向自己證明這一點。 你可以看到 0-7 重復了很多次:

module tb;

reg [2:0] b;
initial begin
    for (b = 0;b < 8;b=b+1) begin
        $display(b);
        #50;
    end
end
initial #1000 $finish;

endmodule

輸出:

0
1
2
3
4
5
6
7
0
1
2
3
4
5
6
7
0
1
2
3

由於您將b聲明為 3 位信號,因此它的值范圍是 0 到 7。因此,b 始終小於 8。當 b=7 時,b+1=0,而不是 8。

將 8 更改為 7 僅顯示 0-6 一次,因為結束條件 ( b < 7 ) 變為假。

這是從 0 到 7 循環一次的一種方法:

module tb;

reg [2:0] b;
initial begin
    b = 0;
    repeat (8) begin
        $display(b);
        #50;
        b=b+1;
    end
end

endmodule

另一種常用方法是將b聲明為integer而不是 3 位reg 然后for (b = 0;b < 8;b=b+1) begin循環 0-7 一次,因為 b 可以增加到 8。 integer是 32 位有符號值(請參閱 IEEE Std 1800-2012,第 6.11 節整數數據類型)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM