Open source is hard, because without access to the data, it is hard to do a good tool like a timing analyzer. Heck, when you do have access to the data and you can talk to the physical chemist that designed the process because his desk is 5 rows over it is still hard to get it better than "close enough".
I've thought many times about doing an open source event-driven logic simulator. At one point, I was a top guru of that technology. The thing is, I doubt if a sufficient number of people would care, and it is basically worthless without all the tools that feed it and drive it.
I think the market would create itself with the right ingredients present. I think a high level language, a well defined intermediate representation with an eye toward synthesis but initially just targeting simulation, and a cycle accurate high performance simulator for said intermediate language would be explosive.
(bonus points for writing the sim in WASM, heh)
Explosive? I remain unconvinced. There just aren't enough people doing that kind of work.
I am excited to see progress in open source FPGA fitters. I've always felt those would be hard to do because without access to the performance model, it is hard to do a good job of auto-placement. So that is cool, even though the current open source tool (I forget the name...) only does a few FPGAs.
So there's that.
I would very much like to hear about your progress on this, FWIW.
Also, I'm not sure, but just in case the following things I was reminded of are directly/indirectly useful/helpful (for ideas or parts, or maybe some of the engineers may be interesting to talk to..?)...
- MARSSx86 - a cycle-accurate x86 emulator built on top of QEMU: http://www.marss86.org/~marss86/index.php/Home
- Cling - a C++ interpreter built on top of LLVM's JIT: https://root.cern.ch/cling
There are several cycle-accurate emulators out there, MARSSx86 is the first I discovered. I'm not sure if it's useful.
I'm not entirely sure why I'm mentioning Cling. It used to be based on a custom runtime (and called CINT) that was absolutely massive and was basically its own C++ implementation. Cling is effectively a very small patch/driver on top of LLVM's C++ implementation and its JIT runtime.
Verilog is still used for a very good reason, it is not because the EDA industry is stuck in time.
https://www.fbo.gov/spg/ODA/DARPA/CMO/HR001117S0054/listing....
The past and present are mired in "national interests"; but the real obstacle seems to be the idea that you can prevent other people from having what you have (an idea, a weapon, a key, etc.).
EDIT: I was responding to this quote from your link: "The goal of the ERI is to more constructively enmesh the technology needs and capabilities of the defense enterprise with the commercial and manufacturing realities of the electronics industry." I didn't mean to imply that what your company is working on won't work. Unless, of course, that is what your company is working on.
- you're absolutely right that the tools are horrible to use, and Verilog's time is up
- existing chip design companies are extremely conservative and hate adopting anything new even from their own preferred vendor, because risk
- a lot of the key knowledge is spread by apprenticeship and oral culture; analog IC engineers are another culture altogether
There is still something magical when a new chip design comes back from the fab and boots up!
For the rest; yeah, it looks like it's pretty eye-bleeding and hacked together from decades worth of odd little one-off tools: http://opencircuitdesign.com/qflow/, https://opencores.org/howto/eda, https://chitlesh.fedorapeople.org/papers/FEL12ReleaseNotes.p...
I do prefer VHDL to verilog. My main reason is Verilog does not make a distinction between variables and other objects. Verilog treats almost everything as if it were an assignment type. Furthermore, variables in verilog are shared by default. VHDL shows how it should be done. There is a clear distinction between signals and variables. Additionally, variables are local by default.
My opinion of course. Although VHDL can be bit more wordy. However, that's least of my worries (wordiness) when designing something. I would rather have clear semantics for me and other people on what the heck is going on.
However, Verilog is just as capable.
But it brings with it the full flexibility of a general purpose programming language which makes it a lot easier to make parameterizable designs which can be more easily reused.
It also supports direct programming interfaces. For instance you have a chip your designing that needs to run software. Your test bench can call that C function to also test some software at the same time. You can also use it to speed up simulations by just modeling the input and output in C for a module. However, I prefer SystemC for this. It's great for behavior level simulation, and also runs quickly. It also is much easier to interface with any software you want to test with the design.
So I prefer SystemC for behavior models, and VHDL for gate level implementation. However, you can't really ignore verilog. Although, that depends where you are working and who you are working with. System Verilog is kinda of in between SystemC and VHDL.
https://preview.ibb.co/hRz8qc/Screen_Shot_2018_02_07_at_9_21...
I agree with the assessment of hw engineers doing software.
For a public example, our simulator is very similar to Level 2 of the PARADISE flow being developed at LBNL.
Frankly, the closed source tools are pretty awful from a user interface perspective. Under the hood, amazing things happen, but the tools are pretty awful to use.
and the languages... ugh, the languages. Our big leap forward was SystemVerilog. It's a bastardization of three languages: of 80's c++, 80's Verilog, and an interesting constraint solver in a distinct dialect.
We need (in my humble opinion):
* Open source high performance discrete event simulator (language agnostic, use an intermediate representation like a source mapped netlist)
* Said simulator, but distributed (multi core, process, data center)
* An ecosystem that encourages language development (Said simulator could help)
* An open source synthesis framework that can read the intermediate representation netlist.
* GUIs that don't cause eye hemorrhaging and monitor punching.