From 0e0d57c12498d12cee173c7e804ce3655e4c76da Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Philipp=20G=C3=BChring?= <pg@futureware.at>
Date: Sun, 30 Apr 2023 23:06:30 +0200
Subject: [PATCH] Improved placement of power rail vias

---
 lclayout/standalone.py | 16 +++++++++-------
 1 file changed, 9 insertions(+), 7 deletions(-)

diff --git a/lclayout/standalone.py b/lclayout/standalone.py
index 875f7c5..6502f83 100644
--- a/lclayout/standalone.py
+++ b/lclayout/standalone.py
@@ -290,15 +290,17 @@ class LcLayout:
                     via_layer=via_layers[tech.power_layer[i]][tech.power_layer[i+1]]['layer']
                     via_size=self.tech.via_size[via_layer]
                     via_spacing=self.tech.min_spacing[via_layer,via_layer]
-                    x1=self._cell_width//2;
-                    w=via_size//2;
-                    num=(x1-via_size-via_spacing)//(via_size+via_spacing)
+                    x1=tech.unit_cell_width//2 # self._cell_width//2
+                    logger.debug('unit_cell_width: {} cell_width: {} x1:{} range:{}'.format(tech.unit_cell_width, self._cell_width, x1,(self._cell_width//tech.unit_cell_width)-1))
+                    w=via_size//2
+                    num=((x1-via_size-via_spacing)//(via_size+via_spacing))
                     logger.debug('Draw via: {} ({}, {}) i:{} w:{} size:{} spacing:{} num:{} x1:{}'.format(via_layer, x1, y1, i, w, via_size, via_spacing,num,x1))
                     for xoff in range(-num,num+1):
-                        x=x1+xoff*(via_size+via_spacing)
-                        viar = pya.Box(pya.Point(x - w, y1 - w),pya.Point(x + w, y1 + w))
-                        logger.debug('Draw via: {} ({}, {}) i:{} w:{} size:{} spacing:{} num:{} x1:{} x:{} viar:{}'.format(via_layer, x1, y1, i, w, via_size, via_spacing,num,x1,x,viar))
-                        self.shapes[via_layer].insert(viar).set_property('net', self.SUPPLY_VOLTAGE_NET if y1>0 else self.GND_NET)
+                        for cellpart in range(0,(self._cell_width//tech.unit_cell_width)):
+                            x=x1+xoff*(via_size+via_spacing)+cellpart*tech.unit_cell_width
+                            viar = pya.Box(pya.Point(x - w, y1 - w),pya.Point(x + w, y1 + w))
+                            logger.debug('Draw via: {} ({}, {}) i:{} w:{} size:{} spacing:{} num:{} x1:{} x:{} viar:{}'.format(via_layer, x1, y1, i, w, via_size, via_spacing,num,x1,x,viar))
+                            self.shapes[via_layer].insert(viar).set_property('net', self.SUPPLY_VOLTAGE_NET if y1>0 else self.GND_NET)
 
 
 
-- 
GitLab