Hi, I'm the author of MurmurHash and GateBoy, amongst other things.
About 6 months ago I started working on a tool to convert GateBoy's source code (after "lifting" it into more standard C++) to Verilog. This project turned out to be much more interesting than expected, so I broke it out into its own repo and built a pretty decent test suite and tutorial for it.
The repo contains a "live" demo version of Metron (compiled into WebAssembly via Emscripten) along with a tutorial that walks through how to build Metron modules and some of the rules that your C++ code is required to follow for it to be convertible.
There is a fairly thorough test suite with code coverage, but as this is the first public build of Metron bugs are expected and error messages aren't particularly useful. If you're a professional hardware dev, please let me know if Metron would be useful to you and what features you'd like to see added. If you're new to Verilog and FPGA development, take a look at the tutorial and point out where things need additional clarification.
"Metron should make it possible to write small, simple hardware peripherals that simulate in realtime (or faster) on a PC, work flawlessly when compiled for a FPGA, and that are understandable and debuggable by most C++ programmers without special tools. I look forward to seeing what people do with it."
"Sounds all very nice, but isn't it just hdl with a C++ syntax then? I am fluent in both C++ and VHDL, but I wouldn't think of trying HDL in C++ because the way of thinking is so different. I can see the purpose of HLS, but if this isn't HLS then what is the purpose?"
Yes, it's HDL with a C++ syntax. That's the point. Lower learning curve, easier experimentation, incremental conversion from general-purpose C++ to Verilog-compatible semantics, smaller code, faster simulation, easier debugging, no conversion pass needed for C++ testbenches. Metron source files are plain C++ headers with no special language annotations required, so you can start writing "hardware" without leaving your C++ IDE.
The way of thinking is very different, but with Metron you can get from "procedural" C++ to "hardware" C++ incrementally. Metron handles a lot of the plumbing details for you so that your converted modules behave more like C++ classes, though you can fall back to explicit port defintions if you need more control.
2 comments
[ 2.7 ms ] story [ 15.6 ms ] threadAbout 6 months ago I started working on a tool to convert GateBoy's source code (after "lifting" it into more standard C++) to Verilog. This project turned out to be much more interesting than expected, so I broke it out into its own repo and built a pretty decent test suite and tutorial for it.
The repo contains a "live" demo version of Metron (compiled into WebAssembly via Emscripten) along with a tutorial that walks through how to build Metron modules and some of the rules that your C++ code is required to follow for it to be convertible.
There is a fairly thorough test suite with code coverage, but as this is the first public build of Metron bugs are expected and error messages aren't particularly useful. If you're a professional hardware dev, please let me know if Metron would be useful to you and what features you'd like to see added. If you're new to Verilog and FPGA development, take a look at the tutorial and point out where things need additional clarification.
"Metron should make it possible to write small, simple hardware peripherals that simulate in realtime (or faster) on a PC, work flawlessly when compiled for a FPGA, and that are understandable and debuggable by most C++ programmers without special tools. I look forward to seeing what people do with it."
-Austin Appleby
"Sounds all very nice, but isn't it just hdl with a C++ syntax then? I am fluent in both C++ and VHDL, but I wouldn't think of trying HDL in C++ because the way of thinking is so different. I can see the purpose of HLS, but if this isn't HLS then what is the purpose?"
Yes, it's HDL with a C++ syntax. That's the point. Lower learning curve, easier experimentation, incremental conversion from general-purpose C++ to Verilog-compatible semantics, smaller code, faster simulation, easier debugging, no conversion pass needed for C++ testbenches. Metron source files are plain C++ headers with no special language annotations required, so you can start writing "hardware" without leaving your C++ IDE.
The way of thinking is very different, but with Metron you can get from "procedural" C++ to "hardware" C++ incrementally. Metron handles a lot of the plumbing details for you so that your converted modules behave more like C++ classes, though you can fall back to explicit port defintions if you need more control.