Giter Site home page Giter Site logo

systemrdl / peakrdl Goto Github PK

View Code? Open in Web Editor NEW
79.0 79.0 16.0 128 KB

Control and status register code generator toolchain

Home Page: http://peakrdl.readthedocs.io

License: GNU General Public License v3.0

Python 99.03% Shell 0.97%
amba apb asic axi command-line-tool csr eda fpga hardware-description-language register-descriptions registers systemrdl-compiler systemverilog uvm uvm-register-model verilog

peakrdl's People

Contributors

amykyta3 avatar proukema-fidus 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  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

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

peakrdl's Issues

RuntimeError: Importer class <class 'peakrdl_ipxact.__peakrdl__.Importer'>

Hello,
I just installed peakrdl by following instructions in https://peakrdl.readthedocs.io/en/latest/index.html
But when I try to run peakrdl (for example: peakrdl --help), it returns this error message:

File ".local/lib/python3.8/site-packages/peakrdl/plugins/importer.py", line 52, in get_importer_plugins
raise RuntimeError(f"Importer class {cls} is expected to be extended from peakrdl.plugins.importer.ImporterPlugin")
RuntimeError: Importer class <class 'peakrdl_ipxact.peakrdl.Importer'> is expected to be extended from peakrdl.plugins.importer.ImporterPlugin

Did I miss something in my installation ?

Thank you.

Generating UVM Register Model

PeakRDL tool generates uvm register model not correctly. For all registers, the volatile field is always 1, it doesn't matter if I write in ip-xact volatile true or false. The tool ignores this field. And while generating SystemRDL from ip-xact is the same issue.
I used these commands`

  1. Convert other formats to SystemRDL - peakrdl systemrdl atxmega_spi.xml -o atxmega_spi.rdl
  2. Create a UVM Register Model - peakrdl uvm atxmega_spi.rdl -o atxmega_spi_uvm_pkg.sv

Integration of other tools

There seem to be some other tools being developed under the PeakRDL name including:PeakRDL-verilog

I also have a project to develop a python wrapper generator that follows a similar structure.

Is there a process or developers guidr for tools other people are developing, in order bring them into the PeakRDL project and command line tool.

[FEATURE]is there any interest to have a pyuvm exporter

Is this related to a PeakRDL sub-command?
If so, please open an issue in the appropriate PeakRDL-*** project: https://github.com/orgs/SystemRDL/repositories

Describe the problem/limitation you think should be addressed
A clear and concise description of what the problem is.

I’m trying to stitch together a complete set of free tools capable of generating an SoC infrastructure and be able to simulate and validate it. Currently, Icarus and ventilator do not support uvm.

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

The cleanest solution that I see is to write an exporter for the pyuvm format. I would be willing to take on or help with this.

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

The obvious choice that pops into my mind is for me to create a competing tool that creates pyuvm and all of the stuff this tool does. I honestly do not mean to sound brash, but while working for a very large tech company, I have written this tool, minus the pyuvm. So, it wouldn’t be a huge leap for me to recreate it. Since I have this industry experience, I think I would be an asset to helping make PeakRDL better.

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

Consider option to only install PeakRDL CLI without core plugins

Splitting this into a separate request described by @Risto97 in #17:

Did you think of separating peakrdl from all of the plugins, so they are not installed when installing peakrdl.

To illustrate my use case, I am using peakrdl-html, peakrdl-regblock and two of my plugins, but I am not using the rest of > the toolchain. I am invoking the tools sometimes from python script or cmake wrappers for peakrdl.
This way the unnecessary dependencies get pulled into my virtual environment.

Installation problems in Shell (pip install) vs. PyCharm

Hello Alex

As mentioned before (see #25 ) , i get peakrdl installed and running within PyCharm, but can not install properly directly on shell (with pip install).
It seems to be a compatibility problem as the installation goes through, but afterwards peakrdl commands are not recognised.
Error messages when typing any peakrdl commands in shell after installation are:

  File "/home/mdqe/PycharmProjects/pythonProject_shell/venv_peakrdl/lib64/python3.6/site-packages/tomli-2.0.1-py3.6.egg/tomli/_parser.py", line 5
    from __future__ import annotations
    ^
SyntaxError: future feature annotations is not defined

Thinking about compatibility issues, went on checking for installation status, and changed package versions in shell to match PyCharm versions. Error message changed, but still persists. Full error message, and pip list below.
Can you give further hints how to debug this?
Thanks for help & attention

==================================
ERROR MESSAGE after same packages
==================================
Traceback (most recent call last):
  File "/home/mdqe/PycharmProjects/pythonProject_shell/venv_peakrdl/bin/peakrdl", line 33, in <module>
    sys.exit(load_entry_point('peakrdl==0.8.0', 'console_scripts', 'peakrdl')())
  File "/home/mdqe/PycharmProjects/pythonProject_shell/venv_peakrdl/lib64/python3.6/site-packages/peakrdl-0.8.0-py3.6.egg/peakrdl/main.py", line 109, in main
    subcommands += get_exporter_plugins(cfg)
  File "/home/mdqe/PycharmProjects/pythonProject_shell/venv_peakrdl/lib64/python3.6/site-packages/peakrdl-0.8.0-py3.6.egg/peakrdl/plugins/exporter.py", line 44, in get_exporter_plugins
    cls = ep.load()
  File "/home/mdqe/PycharmProjects/pythonProject_shell/venv_peakrdl/lib64/python3.6/site-packages/pkg_resources/__init__.py", line 2465, in load
    return self.resolve()
  File "/home/mdqe/PycharmProjects/pythonProject_shell/venv_peakrdl/lib64/python3.6/site-packages/pkg_resources/__init__.py", line 2471, in resolve
    module = __import__(self.module_name, fromlist=['__name__'], level=0)
  File "/home/mdqe/PycharmProjects/pythonProject_shell/venv_peakrdl/lib64/python3.6/site-packages/peakrdl_html-2.10.1-py3.6.egg/peakrdl_html/__init__.py", line 1, in <module>
    from .exporter import HTMLExporter
  File "/home/mdqe/PycharmProjects/pythonProject_shell/venv_peakrdl/lib64/python3.6/site-packages/peakrdl_html-2.10.1-py3.6.egg/peakrdl_html/exporter.py", line 14, in <module>
    from gitmetheurl import GitMeTheURL
  File "<frozen importlib._bootstrap>", line 971, in _find_and_load
  File "<frozen importlib._bootstrap>", line 955, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 656, in _load_unlocked
  File "<frozen importlib._bootstrap>", line 626, in _load_backward_compatible
  File "/home/mdqe/PycharmProjects/pythonProject_shell/venv_peakrdl/lib64/python3.6/site-packages/git_me_the_url-2.1.0-py3.6.egg/gitmetheurl/__init__.py", line 6, in <module>
  File "<frozen importlib._bootstrap>", line 971, in _find_and_load
  File "<frozen importlib._bootstrap>", line 955, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 656, in _load_unlocked
  File "<frozen importlib._bootstrap>", line 626, in _load_backward_compatible
  File "/home/mdqe/PycharmProjects/pythonProject_shell/venv_peakrdl/lib64/python3.6/site-packages/git_me_the_url-2.1.0-py3.6.egg/gitmetheurl/base.py", line 5, in <module>
  File "/home/mdqe/PycharmProjects/pythonProject_shell/venv_peakrdl/lib64/python3.6/site-packages/GitPython-3.1.31-py3.6.egg/git/__init__.py", line 44, in <module>
    from git.objects import *  # @NoMove @IgnorePep8
  File "/home/mdqe/PycharmProjects/pythonProject_shell/venv_peakrdl/lib64/python3.6/site-packages/GitPython-3.1.31-py3.6.egg/git/objects/__init__.py", line 9, in <module>
    from .commit import *
  File "/home/mdqe/PycharmProjects/pythonProject_shell/venv_peakrdl/lib64/python3.6/site-packages/GitPython-3.1.31-py3.6.egg/git/objects/commit.py", line 11, in <module>
    from git.diff import Diffable
  File "/home/mdqe/PycharmProjects/pythonProject_shell/venv_peakrdl/lib64/python3.6/site-packages/GitPython-3.1.31-py3.6.egg/git/diff.py", line 8, in <module>
    from git.cmd import handle_process_output
  File "/home/mdqe/PycharmProjects/pythonProject_shell/venv_peakrdl/lib64/python3.6/site-packages/GitPython-3.1.31-py3.6.egg/git/cmd.py", line 6
    from __future__ import annotations
    ^
SyntaxError: future feature annotations is not defined
==================================
PIP LIST
==================================
Package                Version
---------------------- -------
antlr4-python3-runtime 4.11.1
colorama               0.4.6
git-me-the-url         2.1.0
gitdb                  4.0.10
GitPython              3.1.31
importlib-metadata     4.8.3
Jinja2                 3.1.2
Markdown               3.4.3
MarkupSafe             2.1.3
peakrdl                0.8.0
peakrdl-html           2.10.1
peakrdl-ipxact         3.4.1
peakrdl-regblock       0.15.0
peakrdl-systemrdl      0.3.0
peakrdl-uvm            2.3.0
pip                    21.3.1
python-markdown-math   0.8
setuptools             59.6.0
smmap                  5.0.0
systemrdl-compiler     1.26.0
tomli                  1.2.3
typing_extensions      4.1.1
wheel                  0.37.1
zipp                   3.6.0

SystemRDL community repository

Hello,

Is there any plan to create a user repository for systemRDL peripherals (like the one for plugins), especially ones with peakrdl-regblock adapter?
I typically get myself "inspired" by commercial microcontrollers for some basic peripheral specifications. As I don't want to reinvent the wheel.
I don't mind sharing some of them for others to use, maybe other people feel the same.

Of course, one needs to be careful how far we can get "inspired" until it gets into copyright issues. Any opinion on that?

[FEATURE] adding the register and fields name and description as comments in RTL and UVM

Hi!
Can we add a feature that will add the registers/fields names and descriptions from the RDL to the SystemVerilog files?

It will make debugging the modules much easier if the descriptions will also be embedded inside both regblock and UVM as comments, so we can easily understand which part is related to which register/field and what is its description and purpose (as given in the RDL)

Thanks!

Announcement: Deprecating the use of peakrdl.* namespace packages

Importing individual PeakRDL tools using their namespace packages will be deprecated.

What do I need to do?

Change the way you import PeakRDL packages to use the new packaging import name.

For example when using PeakRDL-html, change:

from peakrdl.html import HTMLExporter

to:

from peakrdl_html import HTMLExporter
#           ^ notice the underscore

When will this change take effect?

The new package imports will be available in the following versions:

  • peakrdl-html v2.6.0
  • peakrdl-ipxact v3.1.0
  • peakrdl-uvm v2.1.0

These updates will still retain the ability to import using the old style, but will emit a deprecation warning.
A future release will eventually remove the old import style entirely.

The peakrdl-regblock package will also be changed, but without the deprecation warning or backwards compatibility since it is still in pre-production beta.

Why the change?

Use of namespace packages initially seemed like a nifty way to encapsulate sub-components of the PeakRDL project, but in practice has ended up being pretty cumbersome.
Over the years, it has become clear that the numerous quirks of this packaging style are not worth the effort, and the benefit of using namespace packages is nearly non-existent. More traditional monolithic packaging is easier to maintain and makes development of the upcoming PeakRDL command line application easier.

[Discussion - Numerous unrelated topics]

According to documentation https://github.com/SystemRDL/PeakRDL-html it is possible to declare a internal addrmap in the RDL as top for the html output.
Tried to do so, declaring as top the Regfile addrmap instead as per default the last addrmap, which would be the Memorymap on my block.rdl file, but it was not accepted. The call and error messages are copied below:

...
top_node = 'BlocknameRegfile0'
peakrdl html --peakrdl-cfg {config_file} -t {top_node} -o {output_file} {input_file}

error msg
fatal: Elaboration target 'BlocknameRegfile0' not found

and double checked with "peakrdl dump" that the name is correct and recognised.

Any hints what could be the root cause?
thanks for your help and attention!

Migrate to `importlib_metadata` in entry point discovery

When you install a package in editable mode, the stdlib version of the metadata package reports duplicate entry points. This causes issues for PeakRDL as the plugin manager code finds these duplicates and bails out.

The solution seems to be to use the importlib_metadata package which fixes the underlying issue and can be used across all versions of Python. There is a migration guide here: https://importlib-metadata.readthedocs.io/en/latest/migration.html

Peakrdl-regblock output directory

Hey, great meeting at Latchup;-)

The tool crashes on a missing directory for "-o"

(when regblock is missing below, otherwise it seems to work!)

peakrdl regblock atxmega_spi.rdl -o regblock/ --cpuif apb3-flat

File "/home/aolofsson/.local/bin/peakrdl", line 8, in
sys.exit(main())
File "/home/aolofsson/.local/lib/python3.10/site-packages/peakrdl/main.py", line 165, in main
options.subcommand.main(importers, options)
File "/home/aolofsson/.local/lib/python3.10/site-packages/peakrdl/subcommand.py", line 154, in main
self.do_export(top, options)
File "/home/aolofsson/.local/lib/python3.10/site-packages/peakrdl_regblock/peakrdl.py", line 129, in do_export
x.export(
File "/home/aolofsson/.local/lib/python3.10/site-packages/peakrdl_regblock/exporter.py", line 203, in export
stream.dump(package_file_path)
File "/home/aolofsson/.local/lib/python3.10/site-packages/jinja2/environment.py", line 1609, in dump
fp = open(fp, "wb")
FileNotFoundError: [Errno 2] No such file or directory: 'regblock/atxmega_spi_pkg.sv'

Properties ignored in the translation XML to RDL

Hello dear PeakRDL developers

First of all, thanks a lot for the cool project and package. Started using it last week, and having helpful results!
Nevertheless having some difficulties, for example:

  1. XML => RDL
    while translating XML (ipxact 2009) to RDL, certain properties are ignored, like:
    for registers: hdl_path
    for register-files: range and width
    The register-file properties are ignored, but then if convert back RDL=>XML some kind of default value is taken...

  2. RDL => XML
    Here also the hdl_path property is ignored, when translating back into XML.
    So overall if hdl_path property supported?

  3. XML version
    then tried newer version of XML (ipxact 2014, converted with xsltproc and official stylesheet from accelera), but here the parsing in peakrdl crashes (error below)
    d['reset.value'] = self.parse_integer(get_text(value_el))
    File "/home/mdqe/PycharmProjects/pythonProject/venv/lib/python3.6/site-packages/peakrdl_ipxact/importer.py", line 691, in parse_integer
    raise ValueError

Are any of these limitations/issues already known? Any workaround available?

Why does PeakRDL require git

I have installed peakrdl in a clean python 3.10 virtual environment.

Then I try running:
peakrdl --help

I get the following error:

ImportError: Failed to initialize: Bad git executable.
The git executable must be specified in one of the following ways:
    - be included in your $PATH
    - be set via $GIT_PYTHON_GIT_EXECUTABLE
    - explicitly set via git.refresh()

All git commands will error until this is rectified.

This initial warning can be silenced or aggravated in the future by setting the
$GIT_PYTHON_REFRESH environment variable. Use one of the following values:
    - quiet|q|silence|s|none|n|0: for no warning or exception
    - warn|w|warning|1: for a printed warning
    - error|e|raise|r|2: for a raised exception

Example:
    export GIT_PYTHON_REFRESH=quiet

It is not clear why Git needs to be present to run the peakrdl tools, can you explain this requirement?

Compatibility issue with peakrdl-python

Hello dear all
today tried the plugin peakrdl-python, which unfortunately is not working on my side.
But then all of a sudden the basic commands of peakrdl like peakrdl uvm were no longer working...

Then erased the package peakrdl-python, and they work again.
So it seems a compatibility problem...
Any experience/tips on that?

OBS.:

  1. The other plugin available peakrdl-halcpp worked very smoothly, had no compatibility problems there.

  2. the error message after had installed peakrdl-python was:
    Traceback (most recent call last):
    File "/home/mdqe/PycharmProjects/pythonProject_rm_blocks/venv/bin/peakrdl", line 8, in
    sys.exit(main())
    File "/home/mdqe/PycharmProjects/pythonProject_rm_blocks/venv/lib/python3.6/site-packages/peakrdl/main.py", line 109, in main
    subcommands += get_exporter_plugins(cfg)
    File "/home/mdqe/PycharmProjects/pythonProject_rm_blocks/venv/lib/python3.6/site-packages/peakrdl/plugins/exporter.py", line 44, in get_exporter_plugins
    cls = ep.load()
    File "/home/mdqe/PycharmProjects/pythonProject_rm_blocks/venv/lib/python3.6/site-packages/pkg_resources/init.py", line 2465, in load
    return self.resolve()
    File "/home/mdqe/PycharmProjects/pythonProject_rm_blocks/venv/lib/python3.6/site-packages/pkg_resources/init.py", line 2471, in resolve
    module = import(self.module_name, fromlist=['name'], level=0)
    File "/home/mdqe/PycharmProjects/pythonProject_rm_blocks/venv/lib/python3.6/site-packages/peakrdl_python/init.py", line 4, in
    from .exporter import PythonExporter
    File "/home/mdqe/PycharmProjects/pythonProject_rm_blocks/venv/lib/python3.6/site-packages/peakrdl_python/exporter.py", line 29, in
    from .lib import get_array_typecode
    File "/home/mdqe/PycharmProjects/pythonProject_rm_blocks/venv/lib/python3.6/site-packages/peakrdl_python/lib/init.py", line 14, in
    from .base import AddressMap
    File "/home/mdqe/PycharmProjects/pythonProject_rm_blocks/venv/lib/python3.6/site-packages/peakrdl_python/lib/base.py", line 5
    from future import annotations
    ^
    SyntaxError: future feature annotations is not defined

Warning: Pinning peakrdl==0.6.0 may fail due to new plugin API changes

Hello, I just noticed a problem, because I was using PeakRDL for my plugins and I had the version of peakrdl fixed to 0.6.0 in setup.py.

The problem is that if someone installs peakrdl at tag 0.6.0, the setup will install new versions of peakrdl-ipxact,html....
And there is no ExporterSubcommandPlugin in peakrdl 0.6.0 so launching peakrdl fails.

Solution would be to change setup.py of peakrdl on tag 0.6.0 to limit the version of other packages.

There is probably nothing to fix here, I just wanted to leave it here if someone runs into the same problem, they should use the latest peakrdl and not fix to the old version.

[FEATURE] Add logic that represents an entire register and not just fields

Describe the problem/limitation you think should be addressed
Inability to view an entire register as a vector during the design verification process with tools such as Verdi, SimVision etc...
Since registers are constructed as structs, the current approach restricts the tracking to individual fields rather than the complete register value.

I often need to monitor multiple registers concurrently, which currently necessitates tracking each field of every register independently. Solving this problem would improve the efficiency, simplicity, and convenience of the verification process.

Describe the solution you'd like
Implementing a mechanism that represents the entirety of a register.
For example, adding a logic that represents an entire register.

Thank you for this great work!

PeakRDL command line tool development

Due to the ongoing health crisis, it looks like my plans for summer-time mountaineering have totally evaporated. May as well make the best of it and finally put together a command line tool 🤷‍♂️.
I will fill this page in with more details as I work things out. If you have an idea, please feel free to comment!

High-level goals:

  • Provide a command-line tool that allows users to easily compile SystemRDL files, and generate various exports without having to do anything in Python.
  • Glue together existing HTML, IP-XACT, and UVM tools.
  • Configure compilation & export as a batch job using a separate, intuitive configuration file.
  • Provide an interface for plugins to encourage development of community content that extends the tool.

The config file:

  • Uses YAML format to define the batch job
  • A single YAML file can define multiple top-levels to elaborate, as well as multiple export jobs.
  • Compilation settings:
    • List of input files
    • Include search paths
    • IP-XACT imports (if any)
  • Elaboration settings:
    • Select top-level elaboration object
    • Override top-level parameters
  • Export settings:
    • Define one or more export actions to perform (html, uvm, ip-xact, etc...)
    • Specify exporter-specific settings as appropriate

Command line usage:
Something brutally simple such as:

peakrdl path/to/my_peakrdl_config.yaml

Improve startup performance by lazy-loading extensions

Currently all extensions are discovered and imported unconditionally upon each invocation of the tool. This is not great.

Instead, rework the command-line processor so that the specific exporter plugin is only loaded if invoked.

There are some other situations where all extensions may need to be loaded, but thats limited to stuff like running the top-level --help command, or dumping plugin versions (may be able to avoid)

AttributeError: 'dict' object has no attribute 'select'

Hi,

I'm trying PearRDL, but simple peakrdl --help will report error:

PS C:\Users\xxx> peakrdl --help
Traceback (most recent call last):
  File "C:\Users\xxx\AppData\Roaming\Python\Python39\Scripts\peakrdl-script.py", line 33, in <module>
    sys.exit(load_entry_point('peakrdl==0.2.0', 'console_scripts', 'peakrdl')())
  File "C:\Users\xxx\AppData\Roaming\Python\Python39\site-packages\peakrdl\main.py", line 39, in main
    Dump(),
  File "C:\Users\xxx\AppData\Roaming\Python\Python39\site-packages\peakrdl\subcommand.py", line 90, in __init__
    self.importers = get_importer_plugins()
  File "C:\Users\xxx\AppData\Roaming\Python\Python39\site-packages\peakrdl\plugins\importer.py", line 82, in get_importer_plugins
    eps = metadata.entry_points().select(group='peakrdl.importers')
AttributeError: 'dict' object has no attribute 'select'

I'm using Python 3.9.13 on Windows 10

[BUG] Still seeing importlib.metadata issues.

Describe the bug
See #16 for the background.

In order to replicate, run the following to perform an editable installation of peakrdl-regblock:

$ mkdir testcase
$ cd testcase/
$ python3.10 -m venv venv
$ . venv/bin/activate
$ pip install peakrdl
$ to ../PeakRDL-regblock
$ pip install -e .
$ peakrdl help
Traceback (most recent call last):
  File "/home/shareefj/git/testcase/venv/bin/peakrdl", line 8, in <module>
    sys.exit(main())
  File "/home/shareefj/git/testcase/venv/lib/python3.10/site-packages/peakrdl/main.py", line 135, in main
    raise RuntimeError(f"More than one exporter plugin was registered with the same name '{sc.name}': \n\t{sc_dict[sc.name]}\n\t{sc}")
RuntimeError: More than one exporter plugin was registered with the same name 'regblock':
        <peakrdl_regblock.__peakrdl__.Exporter object at 0x7fe3f0835390>
        <peakrdl_regblock.__peakrdl__.Exporter object at 0x7fe3f0339bd0>

[FEATURE] Enable use of environment variables and/or relative paths in -f files

Imagine I want to pass a long list of RDL files or include dirs to peakrdl, and those files are scattered around my repository.
This seems like a good fit for a .f file. But I'd like to specify those paths relative to either the repository root, or to the .f file itself e.g.:

-I${REPO_ROOT}/some/path
${REPO_ROOT}/another/path/thing.rdl

or

-I../../some/path
../../another/path/thing.rdl

Relative paths already have the behaviour of being relative to the current working directory, so probably better to use environment variables here.

Clarify limits of licensing w.r.t generated output of tools

in https://github.com/orgs/SystemRDL/discussions/184, @CodeStillBroken requested:

Can your team make a clear and unambiguous statement on the PeakRDL website ( e.g. in the licensing section ) clarifying what license, if any, applies to the output generated by running the PeakRDL tools covered by GPL v3? My understanding is that the output of the program is not governed by the terms of the program's license. If that is the case, it would be helpful to clearly state that the customer owns all rights to the outputs generated by the PeakRDL tools on your website :)

Add a similar statement to what is described in regblock docs to the general PeakRDL docs.
Will need to clarify that this exemption only covers core PeakRDL components, and 3rd-party plugins may be licensed differently.

Alternatively, consider switching away from GPL and move to the more FOSS hardware-friendly Apache license, as it is less likely to spook the lawyers.

Announcement: Renaming all 'RALBot' projects to 'PeakRDL'

I've been procrastinating this change for a while, but its about time I go ahead and implement this rename.

What's wrong with "RALBot"?
Although the project name had a good run, I've come to notice that the keyword "RALBot" performs pretty poorly in web searches. Apparently all major search engines redirect the search to show results for "Talbot", a breed of hunting dog, and more notably "Talbots", a retail store for women's clothing in the US. Neither search results suit this project very well.

Why "PeakRDL"
Short and simple. And I enjoy climbing mountains. Why not?

How do I migrate to "PeakRDL-*" Projects?
In the next few days (by 2020-04-19) I will be publishing the following projects to PyPi:

  • peakrdl-html
  • peakrdl-ipxact
  • peakrdl-uvm
    Version numbering will continue, starting at v2.0.0

As these get published, you can simply rename your dependencies and imports to use the new prefix.

What will happen to the old "RALBot-*" Projects?
No earlier than 2020-05-01, these projects will all publish one final update.
This update will include the following deprecation warning that will be printed upon importing the package:

================================================================================
The RALBot-html project has been deprecated and renamed to PeakRDL-html.
Please update your dependencies to continue receiving the latest updates.
For details, see: https://github.com/SystemRDL/PeakRDL/issues/2
================================================================================

If you are not quite ready to migrate your project to use the new "PeakRDL" dependencies, you can suppress the warning by adding this when you import a ralbot module for the first time:

import warnings
with warnings.catch_warnings():
    warnings.simplefilter("ignore")
    import ralbot.html

[FEATURE] C header file output

Is it possible to add another output option for C header file (*.h)?
Or maybe there is a plugin that already does so (making C header file from SystemRDL input)?

LookupError: Unknown property 'buffered_writes' - only when running peakrdl regblock

When I run

python my_regblock.py

The contents of which are very simple (based on the intro page of peakrdl-regblock documentation), the above works and outputs my files.

peakrdl regblock system.rdl -o output_dir -cpuif axi4-lite-flat

I get the following exception:

Traceback (most recent call last):
  File "/PeakRDL-regblock/venv/bin/peakrdl", line 33, in <module>
    sys.exit(load_entry_point('peakrdl==0.3.0', 'console_scripts', 'peakrdl')())
  File "/PeakRDL-regblock/venv/lib/python3.10/site-packages/peakrdl/main.py", line 70, in main
    options.subcommand.main(options)
  File "/PeakRDL-regblock/venv/lib/python3.10/site-packages/peakrdl/subcommand.py", line 123, in main
    self.do_export(top, options)
  File "/PeakRDL-regblock/venv/lib/python3.10/site-packages/peakrdl/plugins/exporter.py", line 63, in do_export
    func(top_node, options)
  File "/PeakRDL-regblock/venv/lib/python3.10/site-packages/peakrdl_regblock/__peakrdl__.py", line 94, in do_export
    x.export(
  File "/PeakRDL-regblock/venv/lib/python3.10/site-packages/peakrdl_regblock/exporter.py", line 134, in export
    scanner.do_scan()
  File "/PeakRDL-regblock/venv/lib/python3.10/site-packages/peakrdl_regblock/scan_design.py", line 64, in do_scan
    RDLWalker().walk(self.exp.top_node, self)
  File "/PeakRDL-regblock/venv/lib/python3.10/site-packages/systemrdl/walker.py", line 159, in walk
    self.walk(child, *listeners)
  File "/PeakRDL-regblock/venv/lib/python3.10/site-packages/systemrdl/walker.py", line 150, in walk
    self.current_action = self.do_enter(node, listener)
  File "/PeakRDL-regblock/venv/lib/python3.10/site-packages/systemrdl/walker.py", line 193, in do_enter
    new_action = listener.enter_Reg(node) or WalkerAction.Continue
  File "/PeakRDL-regblock/venv/lib/python3.10/site-packages/peakrdl_regblock/scan_design.py", line 93, in enter_Reg
    self.has_buffered_write_regs = self.has_buffered_write_regs or bool(node.get_property('buffered_writes'))
  File "/PeakRDL-regblock/venv/lib/python3.10/site-packages/systemrdl/node.py", line 409, in get_property
    raise LookupError("Unknown property '%s'" % prop_name)
LookupError: Unknown property 'buffered_writes'
peakrdl --version
0.3.0
cat venv/lib64/python3.10/site-packages/peakrdl_regblock/__about__.py 
__version__ = "0.9.0"

Multiple output operations

In many cases multiple outputs from the same set of inputs are needed for example:

  • HTML
  • Registers
  • Test Bench
  • Header Files

Would it be possible to setup multiple output from a single set of definitions?

How to include rtl libraries while using peakrdl where the systemrdl file has a few instantiations from those libraries?

I am new to systemRDL and I am looking at the peakrdl library to extract headers, verilog code and documentation from .rdl files. I have an rtl library which is used to create instances in the actual .rdl file. But I am not sure how to let peakrdl know about the library location. I know that `include is something more that I can use for hierarchical register definition models but I don't think that will be useful in my case. I would really appreciate if I can get some help on using peakrdl in my case, thanks!

-f FILENAME arg broken

peakrdl adds a -f FILENAME argument to every exporter, described as "Specify a file containing more command line arguments".

However, regardless of file content, using the -f argument always elicits an error:

$ peakrdl uvm -f test.f test.rdl -o test.sv
peakrdl uvm: error: the following arguments are required: FILE, -o

Am I doing it wrong, or is it bust?

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.