/A-Primer-For-Physical-Design-Automation

This repository contains python code snippets that implement several algorithms for automating the VLSI Physical Design process. This is based on the learnings from the course - EE5333W (Introduction to Physical Design Automation) at IITM.

Primary LanguageJupyter NotebookGNU General Public License v3.0GPL-3.0

WORK IN PROGRESS!!!

Here's a guide to understand the repository contents:

Partitioning

Bipartitioning with Fiduccia-Mattheyses Algorithm

-->Source: https://web.eecs.umich.edu/~mazum/fmcut1.pdf

-->FM_Partition.ipynb: A python notebook containing the function (defined as 'partitionFM()') for bipartitioning with Fiduccia-Mattheyses. The inputs to the function include a dictionary of vertices (representing the nodes in the netlist) and a dictionary of hyper-edges (representing the nets in the netlist).

-->FM Partitioning.pdf: A PDF containing the slides explaining the Fiduccia-Mattheyses algorithm steps.

Bipartitioning with Kernighan-Lin and Integer Linear Programming

-->Source: https://ieeexplore.ieee.org/document/6771089

-->Partition.ipynb: A python notebook containing the function (defined as 'KLPart()') for bipartitioning with Kernighan-Lin algorithm. The notebook also includes the implementation of ILP based approaches to bipartitioning.

-->KL Partitioning: A PDF containing the slides explaining the KL Partitioning algorithm steps.