[sv-dc] Examples of how back-annotated parasitics would be modeled without resolutions functions tied to nets

From: Lear, Jim <Jim.Lear@cirrus.com>
Date: Thu Feb 10 2011 - 12:45:05 PST

I've received enough calls and emails that my previous communications haven't been clear. Here's are three examples of back annotation methods that Scott and I went through, and hopefully it will clear up some confusion. In each example, the only language features needed are resolution functions tied to a type, and user-defined types on ports. Feel free to call or email me if there are any questions.

In modeling parasitic resistance between three devices, a distributed parasitic resistance provided by the drives will solve the problem very accurately. For example, consider this Thevenin driver module and interconnect:

module driver #(parameter rParasitic=0.0) (Thev_t w1);

  initial w1 <= {internalDriverVoltage, inernalDriverResistance+rParasitic);

endmodule

module BackAnnotatedNetlist ();

  parameter rParasitic1 = 1.2e3;

 parameter rParasitic2 = 1.5e3;

  parameter rParasitic2 = 1.8e3;

  Thev_t interconnectNet;

  driver #(rParasitic1) inst1(interconnectNet);

  driver #(rParasitic2) inst2(interconnectNet);

  driver #(rParasitic3) inst3(interconnectNet);

endmodule

This is a trivial case and the accuracy degrades for more interconnect branches. For more devices, the branches of the wires get complicated. In this case, actual discrete resistances and/or capacitors can be used. There's probably a limit to how many discrete devices one would be able to use for a net, but that's difficult to determine without a lot of investigation. Here is an example of such an netlist in which three driver devices and two resistors are connected in a Daisy chain (one resistance between driver 1 and driver 2, and a second resistor between driver 2 and driver 3). The resistors are similar to the discrete resistor example I provided in VHDL. Other wiring parasitic topologies are implemented in similar ways.

module BackAnnotatedNetlist ();

  parameter rParasitic1 = 1.2e3;

  parameter rParasitic2 = 1.5e3;

  Thev_t interconnectBranch1, interconnectBranch2, interconnectBranch3;

  driver #(0) inst1(interconnectBranch1);

  resistor #(rParasitic1) branch1(interconnectBranch1, interconnectBranch2);

  driver #(0) inst2(interconnectBranch2);

  resistor #(rParasitc2) branch2(interconnectBranch2, interconnectBranch3);

  driver #(0) inst3(interconnectBranch3);

endmodule

Finally, to solve Achim's desire to have a module for the interconnect, we simply instantiate one specific to an interconnect. This interconnect module can also take in heterogeneous driver types. However, it can not always be implemented in a hierarchically accurate netlist. It must be a flat netlist. This may be a problem in some cases. Maybe someone can comment if this is a concern.

module BackAnnotatedNetlist ();

  parameter rParasitic1 = 1.2e3;

  parameter rParasitic2 = 1.5e3;

  Thev_t interconnectBranch1, interconnectBranch2, interconnectBranch3;

  driver #(0) inst1(interconnectBranch1);

  driver #(0) inst2(interconnectBranch2);

  driver #(0) inst3(interconnectBranch3);

  interconnectModel123 #(rParasitic1, rParasitic2) interconnect(interconnectBranch1, interconnectBranch2, interconnectBranch3);

endmodule

Kindest Regards,
Jim Lear
Cirrus Logic
(512) 851-4612
(512) 293-7248 (mobile)

-- 
This message has been scanned for viruses and
dangerous content by MailScanner, and is
believed to be clean.
Received on Thu Feb 10 12:46:04 2011

This archive was generated by hypermail 2.1.8 : Thu Feb 10 2011 - 12:46:05 PST