Where communities thrive


  • Join over 1.5M+ people
  • Join over 100K+ communities
  • Free without limits
  • Create your own community
People
Activity
  • 07:12
    ajelinski review_requested #36
  • 07:12
    ajelinski commented #36
  • 06:53
    ajelinski review_requested #36
  • 06:53
    ajelinski opened #36
  • 00:34

    github-actions[bot] on gh-pages

    update e588ea77898f6e74af7b26e8… (compare)

  • Oct 21 13:18

    ajelinski on aj-fix-gcc-deps

    gcc/newlib: Drop gcc-nostdc dep… gcc/newlib: Mainly use `$TOOLCH… (compare)

  • Oct 21 01:14

    github-actions[bot] on gh-pages

    update 0201d4e49b84fdafce17f3a5… (compare)

  • Oct 21 00:37

    github-actions[bot] on gh-pages

    update 368f3eaae4e77b5d45fa65f1… (compare)

  • Oct 21 00:18

    github-actions[bot] on gh-pages

    update 9e3c5ca5e4e35f9f0095ad11… (compare)

  • Oct 18 15:11
    andagel starred hdl/Termux-packages
  • Oct 18 14:05
    michael-etzkorn commented #1
  • Oct 18 13:44

    github-actions[bot] on gh-pages

    update 368f3eaae4e77b5d45fa65f1… (compare)

  • Oct 18 13:44

    umarcor on main

    doc/tools: add ref to Verilator… (compare)

  • Oct 17 22:11

    github-actions[bot] on gh-pages

    update e588ea77898f6e74af7b26e8… (compare)

  • Oct 17 22:09

    umarcor on develop

    surelog: update github repo name UHDM: update github repo name (compare)

  • Oct 17 22:08

    github-actions[bot] on gh-pages

    update 5a4251f6f884f3a304f88894… (compare)

  • Oct 17 22:07

    umarcor on develop

    verible: update github repo name (compare)

  • Oct 17 22:07

    github-actions[bot] on gh-pages

    update 90e39e285ada93a07ecc97f6… (compare)

  • Oct 17 22:06

    umarcor on develop

    verible: add web url (compare)

  • Oct 17 22:03

    github-actions[bot] on gh-pages

    update f176f6f91c575964644d58f8… (compare)

T. Meissner
@tmeissner
We are introducing some formal property testing for the interfaces (AXI, WB or custom) of our design units.
The algorithms (crypto, mathematics) are mostly tested with cosimulation against reference implementations (openSSL etc.) or more "classic" against pre-generated golden vectors.
Lars Asplund
@LarsAsplund
@tmeissner I get a feeling that they aren't talking about formal proofs in the same way that we do. I should probably dive into their unit tests to find out what they mean.
Lars Asplund
@LarsAsplund
I think they use nmigen which I believe has a wrapper around SymbiYosys.
So nothing special.
Chips4Makers
@fatsiefs:matrix.org
[m]
@LarsAsplund: I think they do some test driven development, e.g. first write tests than develop code. And than use Formal proofs for their tests so they cover the corner cases.
I think their FPU for example has been formally proven.
They have an IRC channel on Libera.
Rodrigo A. Melo
@rodrigomelo9
Hi everybody. I am not sure exactly what is solved by ARM Socrates (not sure if only ARM IPs or also others), but I know that in my work it is a suggested alternative for the top-level integration of an SoC. Could you suggest me FLOSS alternatives to investigate? Our source code is mainly System Verilog, with some Verilog modules. Maybe Litex? (I am not sure if it only integrates Python-based source code or also SV), others? Thanks
Unai Martinez-Corral
@umarcor

I think using GPL would be the highest evidence of being ethical. "all mine is yours to use"

@svenn71 that's an interesting statement. I might agree with it. GHDL is the project I most contribute to, it's core is GPL and I want it to stay like that (see ghdl/ghdl#1812). However, categorizing individuals and organisations ethically depending on the licenses they use feels blunt and rather useless to me. Licenses are a technical mechanism for dealing with an artificial legal structure built for economic reasons. Economics have ethical implications, but those are a subset.
Open source and copyleft licenses grant some privileges by default under certain conditions, mainly being in a position for playing according to the rules. Being able to play the game is a privilege itself.
I personally do not have the capability to run my own servers and infrastructure for all the projects I maintain or colaborate on. I am dependent on third-party resources. However, I do also have a portable architecture (based on git and CI), so it can be easily migrated if necessary. Therefore, while I can be sympathetic with Luke's statements, that reality is out of my scope unless some "ethical entity" funds my work.

Unai Martinez-Corral
@umarcor

@ktbarrett, I've been having a look at https://github.com/ktbarrett/ktbarrett.github.io/blob/master/_drafts/tool-automation.md. There are a couple of statements which I'm unsure about:

task interdependency is defined by dependencies between individual outputs and inputs of tasks

I believe that interdependencies can be defined between tasks, without having explicit outputs or inputs. Well, the minimal implicit output might be the exit code of the task.

Related to that, in the section about doit:

Additionally, the types of targets and dependencies is limited to the file, much like Make.

According to https://pydoit.org/dependencies.html#task-dependency, task_dep allows specifying the name of a task as a dependency:

To define a dependency on another task use the task name (whatever comes after task_ on the function name) in the “task_dep” attribute.

This example we make sure we include a file with the latest revision number of the mercurial repository on the tar file.

def task_tar():
    return {'actions': ["tar -cf foo.tar *"],
            'task_dep':['version'],
            'targets':['foo.tar']}

def task_version():
    return {'actions': ["hg tip --template '{rev}' > revision.txt"]}

https://pydoit.org/dependencies.html#groups

You can define a group of tasks by adding tasks as dependencies and setting its actions to None.

def task_foo():
    return {'actions': ["echo foo"]}

def task_bar():
    return {'actions': ["echo bar"]}

def task_mygroup():
    return {'actions': None,
            'task_dep': ['foo', 'bar']}
8 replies
Maybe your are using some older version of pydoit internally? Or did I misunderstand your words?
Overall, I'm not yet convinced about the syntax used in pydoit (all dictionaries, lists and tuples), but from a "principles" point of view I found reading the documentation to be really inspiring.
Unai Martinez-Corral
@umarcor

I think the only feature I miss is being able to more intuitively define which tasks are executed/skipped, based on the nodes of the DAG. However, the functionality is there: https://github.com/umarcor/neorv32/blob/pydoit/dodo.py#L37 (see https://pydoit.org/dependencies.html#uptodate).

The next step I want to try is not using a dodo.py file and the doit CLI, but wrapping it: https://pydoit.org/extending.html?highlight=import#example-pre-defined-task

Did you try this workflow?
84 replies
Unai Martinez-Corral
@umarcor

@rodrigomelo9 I think Litex is the most used open source SoC composition tool. I know migen, litex and nmigen have some concepts in common, but none of them is compatible with others. I've seen nmigen used mostly for all Python designs and Litex for integrating existing HDL cores. There might be a reason for that, or I might just be biased. There are several Litex examples in https://github.com/antmicro. In the context of SymbiFlow (symbiflow_cli) I guess that Litex is the answer.

However, I want to recall that someone told me about a SoC tool based on FuseSoC. So, FuseSoC can download all the cores that belong to a project but AFAIK it cannot generate the top-level file connecting them, or the memory maps or registers. Someone did that on top of FuseSoC. I cannot remember who... (@m-kru? @kgugala?)

Karol Gugala
@kgugala
one comment to Litex - it uses migen
Unai Martinez-Corral
@umarcor
@kgugala, "exactly" migen, or a variant/fork of it?
Karol Gugala
@kgugala
mainline migen
Unai Martinez-Corral
@umarcor
:thumbsup:
Rodrigo A. Melo
@rodrigomelo9
Thanks @umarcor, but it is not for symbiflow_cli, it is to be introduced where I work . @kgugala can I use Litex for SV cores (our SoC is already build based on System Verilog/ Verilog IPs)? could you point me an example?
Karol Gugala
@kgugala
@rodrigomelo9 LiteX itself does not tie you to any specific HDL
you can wrap what you want
Rodrigo A. Melo
@rodrigomelo9
Sounds good :-D
Karol Gugala
@kgugala
it's more a tool issue
if your tool supports SV (and mixing it with Verilog genereted from migen) it should work
Rodrigo A. Melo
@rodrigomelo9
Got it, I will try LiteX :-D
Chips4Makers
@fatsiefs:matrix.org
[m]

@ktbarrett:

I will continue to use the "best" currently available tool.

And which tool is that ?
I agree that doit is still far from the ideal automation framework but it is currently the best fit for me. I moved to it from (GNU) make because I was stumbling on the need to use shell syntax for scripting which can be done in python for doit.
The question is can an ideal automation framework exists or will it always be task and user specific ?

2 replies
Chips4Makers
@fatsiefs:matrix.org
[m]
@ktbarrett: thanks.
Unai Martinez-Corral
@umarcor
@fatsiefs:matrix.org I cannot remember whether I wrote it down explicitly, but your previous comments about switching from make to doit were the trigger for me to try pydoit in NEORV32.
I still need to have a better feel of airflow (and variants), but so far doit fits rather perfectly for the "an ideal automation framework with all ready to use workflows will never exist". We need to provide building blocks for users to compose their own custom workflows, because users are developers.
Oh, I did mention it in the Context of stnolting/neorv32#110.
Chips4Makers
@fatsiefs:matrix.org
[m]
@umarcor: I got github notification because you mentioned me in the commit I think. I am currently mainly using it as a Makefile replacement so I do use the file depenency feature because that's what a lot of tools do: generate files.
But I would love it that for example FuseSOC (ping @olofk (Olof Kindgren) would be a python module that can spit out doit tasks and not implement it's own task management.
Unai Martinez-Corral
@umarcor

@fatsiefs:matrix.org that is exactly my point of view. On both points you mentioned:

  • In NEORV32, I'm proposing to use doit as a replacement of Makefiles which allows scripting in Python instead of make/bash only.
  • In the mid term, I'm pushing so that edalize, pyfpga and others are "task and workflow providers". Ideally, "workflow providers" only because there would be a common source for tasks. That common source of tasks should not be for FPGA simulation/synthesis only, but bring in the tools used in openroad and libre-soc.

Therefore, the discussion with Kaleb and Patrick is relevant because we are trying to shape those reusable tasks.

They do have a Python and software background which I lack.
Unai Martinez-Corral
@umarcor

I would probably debase VUnit's regression/runner interface. It's not currently reusable for cocotb (or other) tests. The regression/runner only really works for HDL tests and the test spec and result formats are not documented.

@ktbarrett, yes, I am aware of that. However, there were some relevant changes since we last talked about it 4 months ago:

  • The entrypoint to OSVVM tests are VHDL Configurations (which are not the same as the "configuration" term used in VUnit). Although OSVVM can also use entities, I want to be able to execute existing OSVVM entrypoints. @LarsAsplund is open to it if that implies that OSVVM will use/support VUnit's py plumbing.
    • I'm working with @JimLewis, for introducing him to CI by using his TCL plumbing on MSYS2 (OSVVM/OsvvmLibraries#2), which is the main workflow he uses and teaches. I added a Linux job too.
    • I want to convert OSVVM's *.pro files to *.core files, and let VUnit use those (instead of distributing the core of OSVVM only with VUnit). I'm not sure about OSVVM + FuseSoC making sense, but that would be just a useful outcome in case anyone needs it.
    • I want to understand the similarities with regard to in-GUI commands that both OSVVM and VUnit provide. @GlenNicholls and nfranque (can't remember the specific nick) were working on that in the context of VUnit only. Does cocotb provide any feature in this regard?
  • I need to support custom environment variables for each testbench/test in VUnit. That's something that a contributor of cocotb brought up (I remember his green avatar, the nick starts with 'j', and he reads several rooms frequently, but I cannot remember his nick now) in Feb. In May, I found I needed that feature myself in a different use case.
  • pyVHDLModel allows to generate a VHDL testbench programmatically after parsing an existing entity. The main stopper for VUnit to run cocotb testbenches as-is was the need to autogenerate that testbench (or to require the users to do it). Now that can be hidden from the users. It is arguable whether implementing this is faster/easier than adapting VUnit's runner for executing cocotb's testbenches (similarly to running OSVVM's Configurations). I'm not doing any claim in that regard.

Those are my notes for layer 3. I hope to propose reshaping VUnit's runner for covering those use cases and hopefully running cocotb tests without a top-level testbench. But I need several months of knowledge yet, including learning more about pydoit, airflow and Patrick's layers 1-2.

Jim Lewis
@JimLewis
@umarcor WRT generating *.core files or anything else, it would be possible to create an application layer in the OSVVM scripts that could do that. Look at the VendorScripts_GHDL.tcl for an idea. All it would have to do is instead of doing an action that executed something, it could do a tcl "puts" to output the appropriate .core file information.
Jim Lewis
@JimLewis
To understand what I mean, look at the log file for GHDL created by OSVVM .pro script - it contains a log of all the commands run - and for the simulations the output.
Unai Martinez-Corral
@umarcor
It's @jwprice100 the user whose nick I did not remember above.
Unai Martinez-Corral
@umarcor
@JimLewis I thought about using Patrick's powershell vendor scripts, which are equivalent to the TCL scripts in that regard. Both of them parse the *.pro files. However, I could also do it manually once. Using an editor with vertical/block selection is probably faster than reusing either the TCL or the pwsh scripts. Nevertheless, it didn't make much sense until those sources are usable. That is, until VUnit can execute OSVVM Configurations.
There is another recent motivation for doing it: instead of converting the *.pro files explicitly, use wildcards and have it as a "cursed" example for implementing dependency scanning based on pyVHDLModel :smiley:. I like that idea because it's an exciting demo and it's also more idiomatic to feed wildcards into VUnit, rather than explicit filesets.
Jim Lewis
@JimLewis
Ok. I noticed on the core file someone manually generated for osvvm that there is a problem. Osvvm.pro has a conditional in it.
Do core files specify what to run in the simulator?
BTW, .pro files are executable tcl. This is the difference between the .pro and our older formats.
Unai Martinez-Corral
@umarcor

Do core files specify what to run in the simulator?

@JimLewis, it depends on which core files. In the ones currently supported by FuseSoc, I think it does. See, for instance, https://github.com/m-kru/fsva/blob/master/dummy_fusesoc_lib/osvvm/div_by_3.core#L21-L26. However, in https://github.com/umarcor/osvb/blob/main/AXI4Stream/AXI4Stream.core the "targets" are specified elsewhere.

Unai Martinez-Corral
@umarcor
In https://github.com/antonblanchard/microwatt/blob/master/microwatt.core, a *.core file is used for synthesis and implementation with FuseSoC/edalize, but simulation is done with a Makefile, as well as implementation for some boards including Lattice devices.
GlenNicholls
@GlenNicholls

@umarcor

I want to understand the similarities with regard to in-GUI commands that both OSVVM and VUnit provide. @GlenNicholls and nfranque (can't remember the specific nick) were working on that in the context of VUnit only. Does cocotb provide any feature in this regard?

If you want/need more info about the objective of that lmk

Unai Martinez-Corral
@umarcor
:thumbsup: :heart:
Jim Lewis
@JimLewis
@GlenNicholls OSVVMs's in-GUI commands are documented in GitHub readme: https://github.com/OSVVM/OSVVM-Scripts/tree/master or in pdf: https://github.com/OSVVM/Documentation/blob/master/Script_user_guide.pdf
In either case it is short and simple.
svenn71
@svenn71
Where can I find the container for Cadence Xcelium? :smile:
ktbarrett
@ktbarrett:matrix.org
[m]
They call that one the garbage bin 😏