Giter Site home page Giter Site logo

ahmed-agiza / edaviewer Goto Github PK

View Code? Open in Web Editor NEW
65.0 3.0 12.0 3.16 MB

EDAV: Open-Source EDA Viewer; render design LEF/DEF files in your browser!

Home Page: https://edaviewer.com

License: MIT License

Makefile 1.98% Dockerfile 0.41% JavaScript 46.92% CSS 24.40% Shell 0.53% Go 13.34% C++ 10.68% C 1.74%
webgl serverless hardware viewer eda server-side-rendering serverless-side-rendering cgo pixijs hardware-design

edaviewer's Introduction

EDAV: Cloud EDA Viewer

EDAV

EDAV is a cloud-based open-source viewer for electronic design automation (EDA) design files: Library Exchange Format (LEF) & Design Exchange Format (DEF)

Website: https://edaviewer.com

What is included:

  • Go server for parsing LEF & DEF files into JSON using OpenDB LEF/DEF 5.8 parsers to be rendered with the viewer.
  • Go interface for OpenDB to process design files using Go language.
  • Client interface to easily upload design files to the parsing server and render the resulting JSON into the browser (without storage on the server).
  • WebGL based LEF/DEF viewer with various features to view and navigate the parsed design.
  • Serverless SAM templates to deploy directly to the cloud.

Using EDAV

Running on the Cloud

You can access EDAV directly at https://edaviewer.com and start rendering your designs right away.

If you would like to deploy to a private cloud, check the deploy folder for the serverless configuration and templates.

Running in Docker

You can build and run EDAV server and client directly using Docker by running:

./run-docker.sh

This will build the server and client's docker images and run them on ports 8080 & 3000, respectively. You can then access EDAV through http://localhost:3000.

Running on Bare-metal

Building and running the server

The server is built using Go, so you need to have Go installed. Also, the Makefile automatically pulls and builds OpenDB, but you need to have OpenDB prerequisites (CMake, Tcl, SWIG, flex, bison..) installed for the build to succeed. After installing Go and OpenDB prerequisites, run Make to build the server binary (includes OpenDB):

make build

Then run the server:

make server

Ther server should be accessible at port 8080 by default unless modified by the environment variable PORT.

Building and running the client

The client is built on Next.js, so you need to have Node.js (v10+) and yarn installed. To install the node dependencies, you can either:

cd client && yarn install

or

make build-client

Then run the client:

cd client && yarn run dev

or

make client

Ther server should be accessible at port 3000 by default unless modified by the environment variable PORT. You might also need to set the environment variable NEXT_PUBLIC_EDAV_SERVER_URL to the server URL if you have changed the defaults.

WebGL Viewer

EDAV renders the parsed design using EDAV LEF/DEF viewer. The viewer is based on PixiJS, which uses a WebGL engine by default (and falls back to canvas if needed) for high-performance rendering in the browser. The viewer has various features, such as:

  • Viewport pan & zoom support.
  • Visibility control panel to hide and show different parts of the design.
  • Components explorer to search and view various design components.
  • Viewer customization from the settings window (changing colors, render settings, etc.).
  • Component details dialog on double click from the viewport or the components explorer.
  • Exporting the design to PNG or JPEG images.

OpenDB Go Bindings

The server includes a clean interface into OpenDB for parsing design files using CGO. The interface can be used in any project that desires to process LEF/DEF files using Go instead of regular C++ or Tcl; feel free to ask for support for more features from OpenDB.

Example:

var db goopendb.OpenDB
db, err := goopendb.NewDatabase()
if err != nil {
       fmt.Fprintf(os.Stderr, "%v", err)
       return
}
defer db.FreeDatabase() // Cleanup for C structs
err = db.ParseLEF("server/example/Nangate45/NangateOpenCellLibrary.mod.lef")
if err != nil {
       fmt.Fprintf(os.Stderr, "%v", err)
       return
}
err = db.ParseDEF("server/example/Nangate45/gcd.def")
if err != nil {
       fmt.Fprintf(os.Stderr, "%v", err)
       return
}
design, err := db.GetDesign()
if err != nil {
       fmt.Fprintf(os.Stderr, "%v", err)
       return
}
/**
* The design struct should hold the parsed design objects:
 type Design struct {
    Name           string
    Instances      []*Instance
    Nets           []*Net
    InstancePins   []*Pin
    BlockPins      []*Pin
    RoutingVias    []*Via
    ViaDefinitions []*Via
    Layers         []*Layer
    CoreArea       float64
    DieArea        float64
    DesignArea     float64
    Utilization    float64
    BoundingBox    *Rect
    Core           *Rect
    Die            *Rect
    Rows           []*Row
    Tracks         []*Grid
    Sites          []*Site
    GCell          *Grid
    Geometries     []*Geometry
}
*/

Main libraries and technologies:

Contribution

Community contributions are welcome, feel free to open a pull request with any new features/fixes you would like to provide.

Issues

If you encounter any bug or you want to request any new feature, please open a GitHub issue using the templates provided.

License

EDAV is open-source under the MIT license.

edaviewer's People

Contributors

ahmed-agiza avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

edaviewer's Issues

Macros viewing feature can be added for better visualization.

Is your feature request related to a problem? Please describe.
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]

Describe the solution you'd like
A clear and concise description of what you want to happen.

Describe alternatives you've considered
A clear and concise description of any alternative solutions or features you've considered.

Additional context
Add any other context or screenshots about the feature request here.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.