Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/augustunderground/pyal
Python parser for MCNC benchmark netlists
https://github.com/augustunderground/pyal
floorplanning mcnc placement python yal
Last synced: about 6 hours ago
JSON representation
Python parser for MCNC benchmark netlists
- Host: GitHub
- URL: https://github.com/augustunderground/pyal
- Owner: AugustUnderground
- License: mit
- Created: 2024-01-10T08:43:07.000Z (10 months ago)
- Default Branch: master
- Last Pushed: 2024-02-07T10:28:38.000Z (9 months ago)
- Last Synced: 2024-02-07T16:33:02.249Z (9 months ago)
- Topics: floorplanning, mcnc, placement, python, yal
- Language: Python
- Homepage: https://augustunderground.github.io/pyal
- Size: 33.2 KB
- Stars: 1
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# PYAL
A quick and dirty parser for an even dirtier language. YAL is the language used
to describe the
[MCNC benchmark netlist circuits](https://s2.smu.edu/~manikas/Benchmarks/MCNC_Benchmark_Netlists.html).
See the
[YAL documentation](https://s2.smu.edu/~manikas/Benchmarks/YalDescription.txt)
for further details.## Dependencies
- `pyparsing`
- `pyaml`## Usage
The `example/example.yal` is taken from the
[YAL documentation](https://s2.smu.edu/~manikas/Benchmarks/YalDescription.txt).Module:
```python
import yalmodules = yal.read('./example/example.yal')
```See the [API documentation](https://augustunderground.github.io/pyal/core.html)
for more information.CLI:
```
$ yal2yaml ./example/example.yal > ./exmaple/example.yaml
$ cat ./example/example.yal | yal2yaml > ./example/example.yaml
```If the the set of `*.yal` files comprising the MCNC data set are in a folder
called `mcnc` they can be converted to `*.yaml` like so:```sh
for y in ./mcnc/*.yal; do yal2yaml $y > "${y%.yal}.yaml"; done
```## Installation
From git with pip:
```
$ pip install git+https://github.com/augustunderground/pyal.git
```From source with pip:
```
$ git clone https://github.com/augustunderground/pyal.git
$ cd pyal
$ pip install . --use-feature=in-tree-build
```## Grammar
Due to the conflicting defintions of the YAL grammar a slightly revised version
is used here:```
modulename ::= [a-zA-Z0-9_]+ ;
moduletype ::= "STANDARD" | "PAD" | "GENERAL" | "PARENT" | "FEEDTHROUGH" ;
width ::= [0-9]+ ;
height ::= [0-9]+ ;
signalname ::= [a-zA-Z0-9_]+ ;
terminaltype ::= "I" | "O" | "B" | "PI" | "PO" | "PB" | "F" | "PWR" | "GND" ;
side ::= "BOTTOM" | "RIGHT" | "TOP" | "LEFT" ;
layer ::= "PDIFF" | "NDIFF" | "POLY" | "METAL1" | "METAL2" ;
xposition ::= -?[0-9]+ ;
yposition ::= -?[0-9]+ ;
position ::= -?[0-9]+ ;
instancename ::= [a-zA-Z0-9_]+ ;
xlocation ::= -?[0-9]+ ;
ylocation ::= -?[0-9]+ ;
current ::= -?[0-9]+(\.[0-9]+)? ;
voltage ::= -?[0-9]+(\.[0-9]+)? ;
maximumlength ::= [0-9]+ ;
reflection ::= "RFLNONE" | "RFLY" ;
rotation ::= "ROT0" | "ROT90" | "ROT180" | "ROT270" ;
dimension ::= x y ;
dimensions ::= dimension+ ;
x ::= -?[0-9]+ ;
y ::= -?[0-9]+ ;
io ::= signalname terminaltype ( xposition yposition [ width layer ]
| side position [ width layer ] )
[ "CURRENT" current ] [ "VOLTAGE" voltage ] ;
ios ::= (io ';')+ ;
network ::= instancename modulename signalname (net+) ;
networks ::= (network ';')+ ;
net ::= [a-zA-Z0-9_]+ ;
placement ::= instancename xlocation ylocation [reflection] [rotation] ;
placements ::= (placement ';')+ ;
critnet ::= signalname maximumlength ;
critnets ::= (critnet ';')+ ;
module ::= 'MODULE' modulename ';'
'TYPE' moduletype ';'
'DIMENSIONS' dimensions ';'
'IOLIST;'
ios
'ENDIOLIST;'
'NETWORK'
networks
'ENDNETWORK;'
['PLACEMENT'
placements
'ENDPLACEMENT;']
['CRITICALNETS;'
critnets
'ENDCRITICALNETS;']
'ENDMODULE;' ;
```