πŸ„ Surfer Blog

Surfer 0.3.0 Released!

Posted 2024-12-20 by The Surfer Developers

Changelog - GitLab Release - Zenodo

Sunday (22. Dezember) will be Surfer’s birthday. Two years ago, Frans created the first commit of what would develop into Surfer. To celebrate this special day, today we released Surfer v0.3.0. This release is packed full of new features, improvements, and bug fixes. This blog post will highlight some important additions, you can read the full changelog at https://gitlab.com/surfer-project/surfer/-/wikis/0.3-changelog.

New FeaturesπŸ”—

SurverπŸ”—

Yes, pun intended. We spun-off the remote waveform viewing feature into a separate binary called surver. If you have a waveform on machine A which you want to view on machine B you can now run surver waveform.vcd/fst/ghw on machine A to start the surver. Then, surver will show you instructions how to view the file, such as:

[INFO] Loaded header of counter.fst in 302.41Β΅s
[INFO] Starting server on 127.0.0.1:8911. To use:
[INFO] 1. Setup an ssh tunnel: -L 8911:localhost:8911
[INFO]    The correct command may be: ssh -L 8911:localhost:8911 user@machineA
[INFO] 2. Start Surfer: surfer http://127.0.0.1:8911/AHKL98aSDFHKH988HJJK
[INFO] or, if the host is directly accessible:
[INFO] 1. Start Surfer: surfer http://machineA:8911/AHKL98aSDFHKH988HJJK

Custom Instruction DecodersπŸ”—

You can now define custom instruction decoders via the instruction-decoder crate. Decoders can be added using toml configuration files and without recompiling Surfer. To show what instruction decoders can do, we used the crate to also provide support for nearly all official RISC-V extensions out-of-the box.

Decoders are not only useful to decode instructions. They can also be used for example to convert structs or enums to strings.

To add a new decoder, just add them to your global Surfer configuration or to your project directory according to the documentation.

Automatic File ReloadingπŸ”—

Surfer will now notice when the opened file is changed. In that case, you can choose to keep showing the old file, update the file, or enable auto-updating whenever the file changes.

Waveform Viewer Control Protocol (WCP)πŸ”—

Did you ever dream of controlling a waveform viewer from a different program? We did! Now you can load waveforms, add or remove signals, change colors, and more from external programs. This works by sending JSON messages in the WCP protocol to Surfer via a TCP connection. For example, a new signal can be added to Surfer using the following command.

{
    "type": "command",
    "command": "add_variables",
    "names": [
        "TOP.clk",
        "TOP.clk"
    ]
}

In addition, you can also make queries to Surfer, for example, to get the already shown signals or their properties.

Of course, sending JSON messages can be some work. Therefore, we plan to provide some simple wrappers for WCP at the WCP repository.

We already allowed injecting messages into Surfer, for example in the web version or using the startup messages. However, these interfaces were never meant to be stable. With WCP, we want to add a more stable API to Surfer (and possibly to other viewers as well) that allow more EDA tools to talk to each other.

WCP is still in its early stages, and we have many more ideas how we can make it even more useful. This means that updates are still likely and that feedback is appreciated.

Transaction StreamsπŸ”—

Surfer can now also show streams of higher-level transactions. We currently support the open-source Fast Transaction Recording (FTR) format, however adding new formats should be no problem. Having the ability to show transactions allows Surfer to be used in new and exciting applications such as Virtual Prototyping.

LUBIS EDA Becomes Our First Corporate SponsorπŸ”—

We're excited to announce that Lubis EDA has become our first corporate Sponsor. Lubis EDA is a German formal verification company that's using Surfer in their new cloud-based EDA platform. Their platform is a great example of what is possible with Surfer's APIs and the possibility to run on the web.

Surfer is now a FOSSi Foundation ProjectπŸ”—

In the past two years, Surfer has developed from a small and fun side-project to a growing and fun community project with many contributors (thanks again!). With more contributors and a growing user-base, including commercial users, this also brings new challenges. Since we want to make sure that the future of the Surfer project is secured, we have decided to make Surfer a FOSSI Foundation project. The FOSSi Foundation is a not-for-profit organization with the goal of promoting and protecting the open-source silicon chip movement.

Here we would like to give a big thanks to Philipp Wagner, who is a director at the FOSSi Foundation and who helped us immensely!

New ContributorsπŸ”—

  • Andreas Wallner
  • Robin Heinemann
  • Lukas Scheller
  • luposmi
  • James Conolly
  • Todd Strader
  • Lars Kadel
  • Theodor Lindberg
  • Paul Blume
  • Christian Dattinger
  • Gustav SΓΆrnΓ€s
  • Kasper Uminski

Thanks everyone!