Home Forums Nazca Place a cell along the interconnect path Reply To: Place a cell along the interconnect path


Dear Tommaso,

Thank you for the wishes.

Interconnects are based on (curved) lines. A line can be assigned a (varying) thickness and thus becomes a waveguide (or metal line). Lines can be described in countless ways. Compare for example a curved Nazca cobra interconnect with a straight line. Finding positions along a line at equal distance requires in generic terms a parameterized description of the line [x(t), y(t)] that traces the line at a constant speed w.r.t. to parameter t. However, it is unlikely that the length of an arbitrary line is linear in t by default. For that to happen we would need condition “A” to be true:

A: (dx(t)/dt)^2 + (dy(t)/dt)^2) = C^2,

where C is a constant and C * dt describes the (local) distance between points on the line.

Fortunately, we can enforce condition “A” across the whole line having the same C by defining a new parameter s and function t = f(s) such that we obtain condition “B” for all s:

B: (dx(f)/df * df(s)/ds)^2 + (dy(f)/df * df(s)/ds)^2 = C^2.

If we consider an interconnect to be a series of N connected (and possibly different) line definitions (e.g. bend, straight, straight, bend etc), indexed as i = 0, … N-1, we need to create a function fi(s) for each line such that all N lines now have the same C value under condition “B”. Here we assume f(s) covers the full t domain monotonously. We also need to know the length of each line in the series to get to the same C along the whole interconnect. In short, we need to reparameterize all interconnect elements from t to s following “B”.

Obtaining exact positions along the interconnect may have varying difficulty levels depending on the line type. A straight line of length L described as x(t) = t * L, where t in [0, 1] will have C = L under condition “A”. If C is no longer free to choose we apply condition “B” and use t = f(s) = a * s and obtain L * a = C and find a = C / L.
Hence, the linearized and normalized “constant speed” parametric straight line in s can be expressed as
x(s) = s * C, where s in [0, L / C].

Similarly, for an arc bend defined by [R*cos(phi*t), R*sin(phi*t)], with t in [0, 1] and reparametrization with t = f(s) = a * s we obtain a = C /(phi * R) and the linearized and normalized “constant speed” parametric bend in s becomes
[x(s), y(s)] = [R*cos(s*C/R), R*sin(s*C/R)], for s in [0, phi*R/C]

For curves without an analytical solution we would need to resort to a (ideally generic) numerical solution to reparametrize them.

Still, when placing elements along the interconnect, as you describe in your question, one needs to be able access all the interconnect elements (line definitions) in the first place, and calculate [x(s), y(s)] for a certain list of s values. The good news is that Nazca already has been testing since last summer an interconnect upgrade which is a dict-based description of all the elements in an interconnect (versions > 0.5.13). Hence, you can simply scan through the those line elements, apply the reparametrization as described above, and generate equidistant positions along the interconnect. More elegantly, one would create an output terminal that generates these positions when provided with the interconnect dict as input. The default terminal generates gds layout. In addition, a final solution would store reparametrization options inside the interconnect line definitions from the start, or as a generic filter function. Reparameterization is also already an ongoing development in Nazca for other purposes. The website release is a bit overdue, not because little has happened, but rather the opposite.