Resistance

DC resistance per polygon / shape.

Per-segment formula:

\[R = \rho_\text{sh} \cdot \frac{L}{W}\]

where ρ_sh is the metal layer’s sheet resistance (Ω/sq), L is the segment length and W its width. The total DC resistance of a shape is the sum over its segments. Vias contribute the per-via-cell resistance from the tech file.

This mirrors the simplest path through compute_dc_resistance_per_polygon (asitic_kernel.c:267) — that decompiled function additionally splits the sum into “primary” / “secondary” buckets at a tap point and computes microstrip capacitances; the bare resistance summation is all we need for the standard Res REPL command.

reasitic.resistance.dc.segment_dc_resistance(segment, tech)[source]

Return the DC resistance of one segment in Ω.

Resolves the metal layer from tech to read its sheet resistance. Zero-length or zero-width segments contribute 0.

Parameters:
Return type:

float

reasitic.resistance.dc.compute_dc_resistance(shape, tech)[source]

Return the total DC resistance of shape in Ω.

Sums segment_dc_resistance() over every segment, treating the spiral as a single series chain (which is correct for the standard one-port self-resistance reported by ASITIC’s Res command).

Parameters:
Return type:

float

AC resistance with skin-effect correction.

Mirrors the per-segment formula in compute_inductance_inner_kernel (asitic_kernel.c:142), which is the diagonal contribution to the binary’s impedance matrix. Despite the function name in the binary the body computes an AC resistance — the inductance part lives elsewhere.

The kernel uses Wheeler-style empirical fits in two regimes, selected by a dimensionless skin parameter

\[\xi = \sqrt{\,8\pi \, f_\text{GHz}\, W_\text{cm} / \rho_\text{sh}\,}\]
  • ξ 2.5 (high-frequency / well-developed skin effect):

    \[R(f) = R_\mathrm{dc} \cdot \Bigl[ 0.0035 \cdot u + \frac{1.1147 + 1.2868\,\xi}{1.2296 + 1.287\,\xi^{3}} + \frac{0.43093\,\xi}{1 + 0.041\,(\,W/T\,)^{1.8}} \Bigr]\]

    where u = (W/T)^{1.19}.

  • ξ < 2.5 (low-frequency, slight correction):

    \[R(f) = R_\mathrm{dc} \cdot \bigl(1 + 0.0122 \cdot \xi^{p}\bigr)\]

    with p = 3 + 0.01·ξ².

The constants come straight from the decompiled output and trace to the empirical fit Niknejad reports in the original ASITIC paper (Niknejad & Meyer, “Analysis of Eddy-Current Losses Over Conductive Substrates with Applications to Monolithic Inductors and Transformers,” IEEE Trans. MTT, 2001).

reasitic.resistance.skin.skin_depth(rho_ohm_cm, freq_hz, mu_r=1.0)[source]

Return the classical skin depth in metres.

\[\delta = \sqrt{\rho / (\pi\, \mu\, f)}\]

Inputs rho in Ω·cm, freq in Hz, mu_r dimensionless.

Parameters:
Return type:

float

reasitic.resistance.skin.ac_resistance_segment(*, length_um, width_um, thickness_um, rsh_ohm_per_sq, freq_ghz)[source]

AC resistance of one straight rectangular segment, in Ω.

Pure port of the metal-layer branch of compute_inductance_inner_kernel (asitic_kernel.c:142). The via branch is handled separately in reasitic.resistance.dc via the tech file’s per-via R.

Parameters:
Return type:

float

reasitic.resistance.skin.compute_ac_resistance(shape, tech, freq_ghz)[source]

Total AC resistance of shape at freq_ghz, in Ω.

Sums ac_resistance_segment() over every segment using the metal layer’s rsh and thickness from tech.

Parameters:
Return type:

float