Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to check signal drive strength?

How do we check the signal drive strength on wire? Is it possible? Normally, we can only check the logical value of a wire either 1 or 0 using conditional check == or triple equals ===. But it doesn't tell us the strength, e.g. pull, strong or weak etc.

So is there a way to check drive strength? For example, it would be used something like this:

wire a;
//... your a assignment
initial begin
//...
if (a && is_weak1(a)) $display("a is weak 1");
end
like image 954
AldoT Avatar asked Oct 19 '25 04:10

AldoT


1 Answers

Drive strength is shown using the special %v character.

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

The values shown by %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

To check a value for conditional statement in SystemVerilog:

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

NB: because the value 1 is encoded in the string the check that a is high is redundant and could just be:

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

As Greg pointed out the $psprintf is not actually part of the system verilog standard we should use $sformatf instead. IEEE Std 1800-2012 Section 21.3.3 Formatting data to a string.

like image 118
Morgan Avatar answered Oct 21 '25 07:10

Morgan