Giter Site home page Giter Site logo

Comments (2)

mballance avatar mballance commented on July 26, 2024

Hello Patrick,
Thanks for reaching out. I'd definitely be open to exploring how the two projects can better cooperate. Looking at what is in pyEDAA.UCIS at the moment, my impression is that the initial focus is on converting and formatting data (eg the ACDB to XML converter and the Coburtura output filter). Perhaps we can look at ways that pyUCIS can act as 'yet another data pipe' into the pyEDAA environment.
At the moment, pyUCIS is complete with respect to functional coverage (coverpoints, bins, crosses), but is incomplete with respect to representing code coverage. Based on the Coburtura integration, it seems enhancement in the code coverage space would be of interest to EDAA.
I'd certainly be open to setting up a Zoom call to better-understand the EDAA roadmap and discuss options for collaboration.

Best Regards,
Matthew

from pyucis.

Paebbels avatar Paebbels commented on July 26, 2024

You're right, currently pyEDAA.UCIS is more or less a conversion tool. Moreover, the UCIS variant understood by our tool is limited to a pre-standard XML-based dialect as used by Aldec in Riviera-PRO and Active-HDL. I assume your pyucis project is either fully UCIS compliant (for the parts implemented) or focused on Mentor Graphics / Siemens EDA "dialect", right?

Anyhow, the goal of pyEDAA.UCIS is a general data model for UCIS and the conversion features becomes a usage example or by-product. We started with v0.1.0 as a conversion tool as this was the initial donation from Aldec. Which is also a good sign to have a first EDA tool vendor contributing to the EDA² idea :).

What timeslots would be good for a meeting?
Portland (PST) is -09:00 hr from here (CET). I would prefer a late evening or night timeslot, so 20:00 - 24:00 (CET) => 11am - 3pm (PST). Do you prefer weekdays or is the weekend also possible?


To give an idea how we tackle problems I would like to highlight pyVHDLModel and pyEDAA.ProjectModel.

pyVHDLModel

Over 5 years ago, I started to work on a Python-based VHDL parser called pyVHDLParser. Is was planned as a demonstrator for the language, (maybe) reference implementation and to play with new features for the IEEE P1076 working group. In addition, it was planned to understand VHDL source files so comments and code documentation could be extracted. You can imaging, the work on such a tool is quite complicate :). Almost 2 years ago, GHDL added Python bindings to the Ada code base (libghdl), so internals like the IIR data structure are since then accessible. In discussions with Unai, we figured out that pyVHDLParser has a generalized - but internal - VHDL language model, which would be great for GHDL too.

So I extracted the language model from pyVHDLParser into pyVHDLModel. Technically, it's a code document object model (CodeDOM) or syntax model. Since restructuring, both tools are now using the same abstract language model. Moreover 3rd party projects are using the language model and can choose what "frontend" to use (purely Python based or with binary library/better performance). We have made several demonstrators like simple documentation extraction with Sphinx or a browsable hierarchy view. Other possible users are tools like Symbolator to generate icons for entities.

The concrete implementation of the pyVHDLModel is called pyGHDL.DOM using pyGHDL.libghdl as a C/Ada-Python binding interface.

pyEDAA.ProjectModel

Before I started working on pyEDAA.* and the overall EDA² idea, I developed the "IP Core Management Infrastructure" - pyIPCMI, which was formerly part of The PoC-Library. This is/was a huge monolithic project with lots of EDA tool knowledge and internal abstraction layers, but not accessible by other frameworks. It's also hard to maintain and has almost no unit tests :).

Again in a discussion with Unai, we figured out, pyIPCMI should be sliced into multiple layers so other frameworks can reuse parts of it. This can be a single layer, a group of layers or the whole stack. When layers/parts of pyEDAA.* are used, the original framework can keep all it's specialties and CLIs. So there is no behavior change to the end user, while the framework is sharing and reusing the code base under the hood. In a second step, a framework gets access to improvements done to pyEDAA. As an example, many Python-based EDA tools support Aldec and Siemens EDA tools, but just a few support Cadence, Lattice or Synopsys. When a tool support gets added to pyEDAA, all frameworks can benefit.

One example out of pyIPCMI is the pyEDAA.ProjectModel. It offers Projects, Designs, Filesets, Files, Testbenches, Testharnesses, etc. The ProjectModel provides an abstract set of Python classes, but also 2 variant implementations:

  1. Reading Xilinx Vivado *.xpr files
  2. Reading OSVVM's *.pro files

Both project file formats are read and translated into the same data model. Again 3rd party Python-based tools can now e.g. create makefiles, launch vlib/vcom/vlog/vsim or compute compile orders or package a project as an IP core.

We're in discussion with VUnit and CoCoTB, if and how to use ProjectModel under the hood.

Quality

To avoid mistakes done in pyIPCMI, each layer comes with:

  • documented code (doc-strings + manually written pages + installation instructions + examples or tutorials)
  • automated documentation generation (BuildTheDocs + Sphinx)
  • unit tests (pytest)
  • code coverage analysis (Coverage.py + pytest-cov)
  • static type checking (mypy)
  • automated release generation
  • excessive CI pipelines

image

from pyucis.

Related Issues (6)

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.