Learn More

Strength in Verilog

The strength is used to have more accurate modeling that specifies a value on a net.

The strength of a net is derived based on the strength of multiple drivers and the final strength will get the strength of the strongest driver.

Verilog provides three types of strength.

  1. Driving strength
  2. Capacitive strength
  3. High impedance

Strength type

Name of strength

Driving strength

Supply drive, strong drive, pull drive, weak drive

Capacitive strength

Large capacitive, medium capacitive, small capacitive


High impedance

Keywords used in Verilog strength

Strength level

Name of strength



High impedance

highz0, highz1


Small capacitive



Medium drive



Weak drive

weak0, weak1


Large capacitive



Pull drive

pull0, pull1


Strong drive

strong0, strong1


Supply drive

supply0, supply1


  1. The default strength is the strong drive.
  2. The default strength for pullup and pulldown gates is the pull drive.
  3. The default strength for trireg is medium capacitive.
  4. The default strength for supply nets is the supply driver.
  5. A net can not be driven with a high impedance strength.
  6. The (highz1, highz0) and (highz0, highz1) strength combinations are not allowed.
  7. If a net is driven with 0 (low) and 1 (high) simultaneously, the result will be ‘x’.


( <strength0>, <strength1> )  
( <strength1>, <strength0> ) 

strength1 = highz1,  pull1,  strong1,  supply1, weak1
strength0 = highz0, pull0, strong0, supply0, weak0
cap_strength = large,  medium, small

strength0: When net drivers drive the value as 0, then strength is specified by strength0.

strength1:  When net drivers drive the value as 1, then strength is specified by strength1.

cap_strength:  For trireg nets, the only cap_strenth is applicable.

For example:

or (strong0, weak1) o1(out, i1, i2)

assign (weak0, strong1) out = i1 & i2;

trireg (large) tr1

Verilog strength Example

When below ‘OR’ and ‘AND’ operation drives the same output,  the final strength of the output be the strength of the strongest driver.

or (supply1, pull0) o1(out, i1, i2)

and (strong1, supply0) a1(out, i1, i2)

Input driven

Output strength


i0 = 0, i1 = 0

out = 0 (pull0)

pull0 strength (= 5) > weak0 strength (=3)

i0 = 0, i1 = 1

out = x

The out net is driven as 0 (supply0) and 1 (supply1) simultaneously.

i0 = 1, i1 = 0

out = x

The out net is driven as 0 (supply0) and 1 (supply1) simultaneously.

i0 = 1, i1 = 1

out = 1 (supply1)

supply1 strength (= 7) > strong1 strength (=6)

module strength(
  input i1, i2,
  output out);
  //assign (supply1, pull0) out = (i1 | i2);
  //assign (strong1, supply0) out = i1 & i2;
  or (supply1, pull0) o1(out, i1, i2);
  and (strong1, supply0) a1(out, i1, i2);



At time = 0: i1 = 0, i2 = 0 -> out = 0
At time = 1: i1 = 0, i2 = 1 -> out = x
At time = 2: i1 = 1, i2 = 0 -> out = x
At time = 3: i1 = 1, i2 = 1 -> out = 1