Skip to content
Artur Nóbrega edited this page Sep 2, 2024 · 2 revisions
  1. What Is Py2HWSW?
  2. What Is Py2HWSW For?
  3. What Problem Does Py2HWSW Solve?
  4. What Design Principles Underlie Py2HWSW?
  5. How Does Py2HWSW Accomplish Its Goals?

What Is Py2HWSW?

In the rapidly evolving landscape of hardware design, the need for efficient and flexible tools is paramount. Enter py2hwsw, a powerful tool designed to streamline the process of generating Verilog cores from high-level descriptions provided in Python or JSON dictionaries. With py2hwsw, engineers can easily translate their design specifications into functional hardware components, significantly reducing development time and complexity.

What Is Py2HWSW For?

Py2HWSW is designed to do the following:

  • Core Generation: Generates Verilog cores from descriptions in Python or JSON dictionaries.
  • Framework Compatibility: Integrates seamlessly with existing Verilog cores and frameworks.
  • High-Level Configuration: Allows configuration of cores via high-level Python parameters.
  • Automated Resources: Produces scripts and Makefiles for deployment in various FPGAs, simulators, and synthesis tools, along with documentation.
  • Readable Code: Generates legible Verilog code with comments for better understanding and maintenance.

What Problem Does Py2HWSW Solve?

Py2hwsw addresses several key challenges in the hardware design process:

Complexity of Verilog Coding: Writing Verilog code can be intricate and error-prone, especially for those who may not be deeply familiar with hardware description languages. Py2hwsw simplifies this by allowing designers to specify their hardware requirements using high-level Python or JSON dictionaries, reducing the need for extensive Verilog knowledge.

Integration of Existing Designs: Many projects involve legacy Verilog cores that need to be integrated with new designs. Py2hwsw facilitates this integration, enabling users to leverage existing components while still benefiting from the tool's advanced features.

Configuration Challenges: Customizing hardware components often requires deep dives into low-level code. Py2hwsw allows for high-level configuration through Python parameters, making it easier for designers to adjust their designs without getting bogged down in the details of Verilog.

Resource Generation: The process of preparing scripts and Makefiles for various deployment environments can be tedious and time-consuming. Py2hwsw automates this process, providing users with the necessary resources to run their designs on different FPGAs, simulators, and synthesis tools.

Code Readability and Maintenance: Maintaining and debugging hardware designs can be challenging, especially when the code is not well-documented. Py2hwsw generates legible Verilog code with comments, enhancing readability and making it easier for teams to collaborate and maintain their designs over time.

In summary, Py2hwsw streamlines the hardware design workflow, making it more accessible, efficient, and manageable for engineers and designers.

What Design Principles Underlie Py2HWSW?

Py2HWSW works by:

  • TODO: Describe design principles here

How Does Py2HWSW Accomplish Its Goals?

Py2HWSW does this by:

  • Two-Step Development Process: The core development is divided into two distinct phases: the setup phase and the build phase. During the setup phase, Verilog source files are generated based on high-level descriptions provided in Python or JSON format. The build phase then utilizes these Verilog sources to produce the necessary FPGA bitstreams, netlists, and other deployment files.
  • Independent Setup Folders: Each core is organized within its own independent setup folder, containing high-level description files and, if needed, low-level files as well.
  • Core Description Input: The core's specifications are provided to Py2hwsw in the form of JSON or a Python dictionary, utilizing standard Py2hwsw attributes.
  • Flexible Attribute Handling: When generating the cores dictionary via a Python script, users can include a set of standard Py2hwsw attributes alongside their own custom-defined attributes.

Learn more about How It Works and How To Use.