MyHDL – Design hardware with Python – Examples
myhdl.org
myhdl.org
lt : BoolOperation op => Vect n v -> Vect n v -> SSA op v v
lt [] [] = constOp False
lt (x :: xs) (y :: ys) = do
nX <- notOp x
t1 <- andOp [nX, y]
t2 <- xnorOp x y
t3 <- lt xs ys
t4 <- andOp [t2, t3]
orOp [t1, t4]In my (admittedly limited) experience with hardware design making correct pure combinational logic isn't generally too difficult, it's keeping track of the state and state transitions that's problematic.
When you need feedback, there will be a combinator that will look something like this:
feedback : Vect n Bool -> (Vect i v -> Vect n v -> SSA op v (Vect n v, Vect o v)) -> Vect i v -> SSA op v (Vect o v)
This is all up in the air. I'm still working it through.I'm very keen to end up with something that it nice to use, even at the expense of being difficult to implement.
I may be getting ahead of myself, but I'd like to have functions that do things like: take a combinational circuit and return a synchronous circuit where the logic is evenly separated (in terms of delay) over n clock cycles.
I haven't touched the code since I graduated last year, and I've had various ideas about how I should restructure it since then. The most interesting part of the project is probably the implementation of guarded channels, which turned out to admit useful Functor and Applicative instances.
I hope to start as a PhD student next year working on a new version of the language taking into account what I've learned since then. Most notably, GHC's recursive do-notation sounds like it will be incredibly useful for creating the kind of monadic cyclic graph structures needed for hardware.
Right now, we are held back by (at best) mediocre tools. We need better HDL software, better synthesis software, better EDA software before we have any hope of widespread use of open source hardware.
Imagine if the only compilers available were proprietary compilers locked behind hundreds of pages of licensing requirements and legal bullshit. Open source software would still be in the dark ages.
I applaud any effort to advance the open source hardware design toolset.
We need simple, easy, powerful, and free tools for FPGA development before open source FPGA cores take off.
But I am suggesting an alternative to your second point. When FPGA boards become available to more people, the tools will automatically come. Note that, the open-source tools can be built by software professionals, even though they might be amateurs in hardware design.
And I also suspect they're hard to impossible to reverse engineer.
That's pretty much what we did have, before RMS started GCC. I guess we need an RMS for hardware!
> Hoping to avoid the need to write the whole compiler myself, I obtained the source code for the Pastel compiler, which was a multi-platform compiler developed at Lawrence Livermore Lab. It supported, and was written in, an extended version of Pascal, designed to be a system-programming language. I added a C front end, and began porting it to the Motorola 68000 computer.
I presume that the Pastel compiler therefore didn't require "hundreds of pages ..." in order to use and redistribute it. Or if it did, it wasn't binding on those who acquired the source.
I picked it as an example of a compiler where others could distribute the source. Since you want to narrow it to C compilers, I'll instead point to the proprietary Aztec C compiler. It didn't come "locked behind hundreds of pages of licensing requirements and legal bullshit".
In fact, as far as I can tell, it had no licensing requirements outside of it being covered by copyright. Certainly there are fewer requirements than the GPL.
Here's a list of C compilers for micros of the 1980s. http://www.z80.eu/c-compiler.html . In a spot check, I can't find any which have hundreds (or even tens) of of pages licensing requirements.
Do you have any evidence to support your earlier statement? I've noticed that people sometimes emphasize Stallman's impact, but do so more out of ignorance of the other threads of history. How do I know that you aren't similarly inclined, given that it seems to be different than the written accounts from that time?
I wish, but no, there isn't. The problem is that even if you could create an amazing design, there is nowhere to run it. FPGA? Expensive and slow. ASICs? Out of the question.
There is a reason why software is eating the world. Everyone has a cpu handy. And even if everyone also had an FPGA attached, it wouldn't matter. Show me a killer [hw] app.
It seems there is no synthesis (which is to be expected without vendor support). With 'limited' conversion to VHDL/Verilog, I wonder how useful this is for actual implementation.
Also from the site I couldn't find any mention of higher level functionality such as generics, etc.
OTOH, one of the nice things is the ease of moving from a numpy model of the system to RTL. And using PyPy for running simulations really makes MyHDL hum along quickly [0]
Pretty cool to see this, and going forward as a roadmap there is much they could borrow from SystemC.
For parametrizability, you have the full Python power at your disposal. This is also true for conversion, because conversion happens after elaboration of the design.
Usually we first develop our algorithms using fixed point math at Matlab, which is a piece of cake.
After doing this, developing our VHDL based on Matlab implementation is very straight forward.
Python language isn't a very common knowledge for people developing hardware, so they really need to learn a complete new language made to another domain (software) in order to do the same thing!
VHDL/Verilog has been used for 30 years and in my opinion will continue to be used for many mores, Python's language structure just doesn't have what's needed to the hardware domain.
I see myself wasting a lot of time having to teach our old hardware guys Python and how to think in terms of RTL with a new Language. That's why i didn't try to switch.
Remember, most of the engineers working with hardware come from EE background, not CS. They are more familliar with Schematics than C.
What is the uptake of Chisel in the target audience? I have observed that hardware designers that are not familiar with general programming language concepts don't appreciate the benefits of type-safe and object-oriented languages. Heck, even the software developer community is divided over the subject.