Where communities thrive


  • Join over 1.5M+ people
  • Join over 100K+ communities
  • Free without limits
  • Create your own community
People
Activity
  • 23:14
    umarcor labeled #1899
  • 23:14
    umarcor labeled #1899
  • 23:03
    tmeissner edited #1899
  • 23:01
    tmeissner edited #1899
  • 22:50
    tmeissner edited #1899
  • 22:49
    tmeissner edited #1899
  • 22:46
    tmeissner opened #1899
  • Oct 21 15:29
    umarcor edited #1291
  • Oct 20 21:43
    alphanumericnonsense edited #1898
  • Oct 20 21:43
    alphanumericnonsense edited #1898
  • Oct 20 18:45
    umarcor labeled #1898
  • Oct 20 18:44
    umarcor commented #1898
  • Oct 20 17:11
    alphanumericnonsense opened #1898
  • Oct 20 00:37
    umarcor milestoned #1897
  • Oct 19 20:00

    github-actions[bot] on nightly

    vhdl-configuration.adb: avoid a… testsuite/gna: add a test for #… (compare)

  • Oct 19 19:10
    tgingold closed #1897
  • Oct 19 19:10

    tgingold on master

    vhdl-configuration.adb: avoid a… testsuite/gna: add a test for #… (compare)

  • Oct 19 16:32
    NicoPy commented #726
  • Oct 19 16:25
    tgingold commented #726
  • Oct 19 16:24
    tgingold commented #1896
promach
@promach:matrix.org
[m]
What does restrict { {reset = '1'; (reset = '0')[*8]}[+]}; do ?
T. Meissner
@tmeissner
It restricts the verification tool to constrain the verification so that it matches a SERE. In this case each verification tool run has to start with reset high for 1 cycle, than 8 cycles of reset low. This whole sequence has to occur at least one time.
In practice this means that the sequence is repeated all the time until the verification ends.
If you want your reset only at the start of verification, you can permit a potentially infinitely long sequence to only occur one time, for example like this: {reset; not reset[+]}[*1];
promach
@promach:matrix.org
[m]
wait, how does [*1] help here ?
@tmeissner
T. Meissner
@tmeissner
The sequence does occur exactly one time, so the [+] repetition operator is "expanded" to the run time of the verification tool.
Adrian Byszuk
@abyszuk

Does ghdl-ls supports adding external libraries during analysis stage?
What I mean is that I have hdl-prj.json file like this:

{
    "options": {
        "ghdl_analysis": [
            "--std=08",
            "-P/afs/cern.ch/work/a/adbyszuk/afs_work/praca/hdl_libs/ghdl-mcode/osvvm",
            "-P/afs/cern.ch/work/a/adbyszuk/afs_work/praca/hdl_libs/ghdl-mcode/vunit_lib"
        ]
    },
    "files": [
        { "file": "common/vhd/general-cores/common/gencores_pkg.vhd", "language": "vhdl" },
        { "file": "common/vhd/general-cores/genrams/genram_pkg.vhd", "language": "vhdl" },
        { "file": "common/vhd/general-cores/genrams/memory_loader_pkg.vhd", "language": "vhdl" },
        { "file": "common/vhd/general-cores/genrams/cheby/cheby_pkg.vhd", "language": "vhdl" },
        { "file": "common/vhd/general-cores/genrams/xilinx/generic_dpram.vhd", "language": "vhdl" },
   (... cut ....)
        { "file": "common/vhd/timing/pll/rtl/wb_pll.vhd", "language": "vhdl" }
    ]
}

Yet ghdl-ls stubbornly refuses to recognize and include Vunit and OSVVM libraries.

For comparison, I did tests with pure GHDL and this command works:
ghdl -a -v --std=08 -P/afs/cern.ch/work/a/adbyszuk/praca/hdl_libs/ghdl-mcode/osvvm -P/afs/cern.ch/work/a/adbyszuk/praca/hdl_libs/ghdl-mcode/vunit_lib tb_pf_top.vhd

tgingold
@tgingold
Libraries are supported, but I have to check about -P
Adrian Byszuk
@abyszuk
OK, great 👍 Thanks for fast response :-)
Unai Martinez-Corral
@umarcor
@abyszuk add the path to VUnit and OSVVM libraries in ghdl_analysis.
{
    "options": {
        "ghdl_analysis": [
            "--std=08",
            "-Pvunit_out/ghdl/libraries/osvvm",
            "-Pvunit_out/ghdl/libraries/vunit_lib"
        ]
    },
    "files": [
        { "file": "src/fifo.vhd", "language": "vhdl" },
        { "file": "src/axis_buffer.vhd", "language": "vhdl" },
        { "file": "src/test/tb_axis_loop.vhd", "language": "vhdl" }
    ]
}
Hmm, after reloading the chat. That's exactly what you did...
How did you build VUnit and OSVVM?
Adrian Byszuk
@abyszuk
I use standard Vunit/OSVVM from PIP install.
Vunit/OSVVM are built automatically when I run my run.py, so these are exactly libraries pointed by -Pvunit_out/ghdl/libraries/osvvm etc. I just copied them to different location.
ghdl-ls trace shows that file was parsed successfully. Here's a excerpt from vim-lsp.log:
[INFO] reading project file /afs/cern.ch/work/a/adbyszuk/praca/cce/cce/hdl-prj.json", "2021-10-13 18:24:40,434 [INFO] Using options: ['--std=08', '-P/afs/cern.ch/work/a/adbysz
uk/afs_work/praca/hdl_libs/ghdl-mcode/osvvm', '-P/afs/cern.ch/work/a/adbyszuk/afs_work/praca/hdl_libs/ghdl-mcode/vunit_lib']", "2021-10-13 18:24:40,434 [INFO] loading common/vhd/general-cores/common/gencores_pkg.vhd", ""]]                                                           
śro, 13 paź 2021, 18:24:40:["<---(stderr)", 3, "ghdl-ls", ["2021-10-13 18:24:40,675 [DEBUG] add_to_library(1290) -> 3670", ""]]
(... log continues ...)
Adrian Byszuk
@abyszuk
To be completely sure I reinstalled GHDL with mcode backend with latest master version yesterday, followed by pyGHDL installation.
(pyGHDL docs could use some love btw. - It took me some time to realize that's how you install ghdl-ls nowadays)
Unai Martinez-Corral
@umarcor
@abyszuk maybe let's frst try without moving the libs to somewhere else. Just use relative paths (as in my example above), and execute run.py. That should let GHDL find the content. If that works, we can think about how you moved the content (there might be some subdir missing).

To be completely sure I reinstalled GHDL with mcode backend with latest master version yesterday, followed by pyGHDL installation.
(pyGHDL docs could use some love btw. - It took me some time to realize that's how you install ghdl-ls nowadays)

There is http://ghdl.github.io/ghdl/quick_start/index.html -> http://ghdl.github.io/ghdl/quick_start/python/index.html.
Please, feel free to proposed enhancements. I'm not asking you to write PRs, but to tell us ideas about what content you miss.

I acknowledge it could be better, but I'm not sure about how to extend it (what content to add).
Adrian Byszuk
@abyszuk
Nevermind, I'm stupid :-/
I've had wrong paths in the JSON file. On a positive note, I confirm it's possible to use absolute paths :laughing:
Damn, I've spent whole day trying to fix this...
Adrian Byszuk
@abyszuk
@umarcor I'll try to describe it as a series of steps from user perspective who just heard about GHDL LSP and wants to try it.
  1. First of all, there's still problem of outdated docs on RTD, but I've already reported that in #1880
    This is really annoying as Google still stubbornly points mostly to RTD docs, I have to point my colleagues to github.io version every single time because no one realizes (or cares, TBH) that GHDL documentation is hosted on two different sites.
  2. Googling "ghdl lsp" or "ghdl ls" points to ghdl-language-server repo.
    Repo name and README.md contents gives strong impression that this "GHDL language server" is something I have to install from that repo.
    I think that "Usage" section there is especially misleading - why would one post a usage manual about a binary that isn't available from given repo?
    hdl-prj.json is a file specific to ghdl-ls server, not the client like VS Code or Emacs.
    There are two improvements to be done here IMHO:
    • I propose to move "Usage" section from that README to the docs here and just leave a link to the GHDL docs in that readme
    • Rephrase the wording in ghdl-language-server repo to clearly state that this project is just a client side part like VS Code extension and where to look for GHDL-LS
  3. In the docs, I think it would be better to rephrase this:
    "When installed through pip, pyGHDL provides executable entrypoints registered in the search PATH, such as ghdl-ls."
    to something less technical, maybe something like:
    "VHDL language server is part of pyGHDL package. You should install pyGHDL if you want to use ghdl-ls. By default ghdl-ls will be installed in your local PATH (/usr/local/bin or ~/.local/bin)"
  4. If the "Usage" section ends up in the docs, I would extend it with a "Practical setup" chapter.
    We could mention that ghdl-ls can use precompiled Xilinx/OSVVM/Vunit libraries and include, for example, the hdl-prj.json I've posted as an example how to do this:
    • link to Precompile Vendor Primitives section
    • description how to get precompiled Vunit/OSVVM libs (either precompile OSVVM or run Vunit example and copy/point to vunit_out/ghdl/libraries directory)
  5. You can point to/copy my description how to setup VIM client :-) https://github.com/prabirshrestha/vim-lsp/wiki/Servers-VHDL#ghdl-ls
Adrian Byszuk
@abyszuk
All in all, I think that current documentation isn't explaining clearly enough how to use ghdl-ls.
I've set it up for myself 2 years ago, so I'm supposed to know this, and yet I've had serious trouble repeating the necessary steps.
tgingold
@tgingold
@abyszuk Do not hesitate to create pull request that improve the documentation!
promach
@promach
@tgingold @tmeissner For PSL, default clock is rising_edge(clk); does not work for cover( some_combinational_signal ); How should I go around this ?
tgingold
@tgingold
@promach There is currently no support for unclocked properties. And I am not sure how useful it is.
Sukanta Dey
@thesukantadey
How do we install OpenROAD in RHEL systems? At present, the supported systems are CentOS 7 and Ubuntu 20.04. Any leads in this regard will be appreciated.
or How do we install RePlace instead of installing the whole OpenROAD, any idea?
promach
@promach
May I know if the PSL syntax for assume {eight_bits = "10101010"}; is correct or not ?
T. Meissner
@tmeissner
I think, assume works on properties, so it should work with assume eight_bits = "10101010"; if you defined a default clock before.
promach
@promach
no curly brackets ?
T. Meissner
@tmeissner
Curly brackets are around sequences. assumes and asserts work on properties, restrict & cover on sequences.
T. Meissner
@tmeissner
As every sequence is also a property, it maybe also work with curly brackets, but I'm not sure.
promach
@promach:matrix.org
[m]
default clock is rising_edge(clk16in);
restrict {reset; not reset[+]}[*1];
assume eight_bits = "10101010";
@tmeissner the assume property only hold for 1 cycle, why ?
T. Meissner
@tmeissner
You have to use the always operator, which leads to a property which has to hold at every cycle, not only the first one.
For example: assume always eight_bits = "10101010";
3 replies
Carlos Alberto Ruiz Naranjo
@qarlosalberto
Does anyone have an example: GHDL with GCC backend + GDB debugging?
tgingold
@tgingold
@qarlosalberto You need to compile with -g, and then you can use GDB almost normally (set a breakpoint on a line, step, next...)
Carlos Alberto Ruiz Naranjo
@qarlosalberto
Ok, thanks!
promach
@promach:matrix.org
[m]
Yes. By the way, what is the purpose of the exclamation operator in https://en.wikipedia.org/wiki/Property_Specification_Language#SERE-style_operators ? s |=> t!
@tmeissner
T. Meissner
@tmeissner
! means that the operator or sequence before has to hold strongly.
Many PSL operators come in two versions, a strong version, indicated by an exclamation mark suffix ( ! ), and a weak version. The strong version makes eventuality requirements (i.e. require that something will hold in the future), while the weak version does not.
promach
@promach:matrix.org
[m]
@tmeissner: what do you exactly mean by hold in the future ?
11 replies
promach
@promach:matrix.org
[m]
@tmeissner: thanks
promach
@promach:matrix.org
[m]
promach
@promach:matrix.org
[m]
@tmeissner: which following conditions to be exact ?