如何查看信号驱动强度?

How to check signal drive strength?

我们如何检查线上的信号驱动强度?可能吗? 通常,我们只能使用条件检查 == 或三重等于 === 来检查连线的逻辑值 10。 但它并没有告诉我们强度,例如pullstrongweak

那么有没有办法检查驱动强度?例如,它会像这样使用:

wire a;
//... your a assignment
initial begin
//...
if (a && is_weak1(a)) $display("a is weak 1");
end

使用特殊的 %v 字符显示驱动强度。

$display("a is %v" a);

%v显示的值

Strength   Value   %v
supply     7       Su
strong     6       St
pull       5       Pu
large      4       La
weak       3       We 
medium     2       Me
small      1       Sm
highz      0       HiZ

Source.

检查 SystemVerilog 中条件语句的值:

string str; 
initial begin
  //...
  str = $sformatf("%v", my_net);
  if (a && (str == "We1")) $display("a is weak 1");

注意:因为值 1 在字符串中编码,所以检查 a 是否高是多余的,可能只是:

str = $sformatf("%v", my_net);
if (str == "We1") $display("a is weak 1");

作为 Greg pointed out the $psprintf is not actually part of the system verilog standard we should use $sformatf instead. IEEE Std 1800-2012 第 21.3.3 节 将数据格式化为字符串