gpt4 book ai didi

Verilog 中的断言语句

转载 作者:行者123 更新时间:2023-12-04 01:20:27 28 4
gpt4 key购买 nike

我对 Verilog 完全陌生,所以请耐心等待。

我想知道 Verilog 中是否有断言语句。在我的测试平台中,我希望能够断言模块的输出等于某些值。

例如,

mymodule m(in, out);
assert(out == 1'b1);

谷歌搜索给了我一个 few links ,但它们要么太复杂,要么似乎不是我想要的。

最佳答案

有一个用于断言的开源库,称为 OVL。 .然而,它相当沉重。我从那里得到的一个技巧是创建一个模块来进行断言。

module assert(input clk, input test);
always @(posedge clk)
begin
if (test !== 1)
begin
$display("ASSERTION FAILED in %m");
$finish;
end
end
endmodule

现在,任何时候你想检查一个信号,你所要做的就是在你的模块中实例化一个断言,就像这样:
module my_cool_module(input clk, ...);

...

assert a0(.clk(clk), .test(some_signal && some_other_signal));

...

endmodule

当断言失败时,您将收到如下消息:
ASSERTION FAILED in my_cool_module.a0

display 语句中的 %m 将向有问题的断言显示整个层次结构,当您在较大的项目中有很多这样的断言时,这很方便。

你可能想知道我为什么要检查时钟的边缘。这很微妙,但很重要。如果上面表达式中的 some_signal 和 some_other_signal 被分配到不同的 always block 中,则表达式可能会在短时间内为假,具体取决于 Verilog 模拟器安排 block 的顺序(即使逻辑完全有效)。这会给你一个假阴性。

上面要注意的另一件事是我使用了 !==,如果测试值为 X 或 Z,这将导致断言失败。如果它使用正常的 !=,在某些情况下它可能会默默地给出误报。

关于Verilog 中的断言语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13904794/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com