[Fpga-synth] Starting points?

Mike Ravkine krypt at mountaincable.net
Sat Mar 7 01:11:53 CET 2009


Magnus Danielson wrote:
> VHDL being an ADA decendent has typing being HARD. This can be a bit 
> annoying for a C programmer like yourself, but eventually you pick up 
> on it.
>
All of this is true, but you can save yourself a lot of un-necessary 
type-coverting pain by skipping past VHDL and just learning Verilog.  
Then again I was personally forced to go through VHDL first, and it 
probably made me a better hardware designer due to it's anal-retentive 
nature :)

In either case, free simulators are avilable for both languages .. the 
best way to learn is to pick something simple .. say, a counter. Design 
it and test it.. then add features (up/down, clear, preset, etc..) and 
test it again..  Then, try building a state machine..  Learn about 
pipelining, and all the other stuff that Magnus talked about.
>
> You will also have to learn to build testbenches. I cannot stress the 
> importance of that to aid towards your sucsess. A good testbench 
> generates a bunch of signals and confirms the responses from the DUT.
SystemVerilog is really effective for building testbenches.. it works 
with both VHDL and Verilog designs, and allows object-oriented classes 
to be instantiated alongside and communicate with your prototype 
hardware, alongside built-in means to automatically gather and report 
the test results.  Unfortunately, I don't think there are any free 
simulators.  However, even just Verilog has the ability to do 
hierarchical references, which makes writing testbenches much easier 
then VHDL.

> You should also learn to number your buses downwards:
> signal data : std_logic_vector(31 downto 0)
> or by using the generic N:
> signal data : std_logic_vector(N-1 downto 0)

It's really funny that you bring this up :)

Today at work, the ASIC design manager and one of our most Senior ASIC 
designers were talking about adding this rule to our 
(manditory-to-pass-cleanly) lint checker.  

The manager wanted to enforce this rule company-wide, but the designer 
pointed out that if you're making a right-shifting single bit delay 
chain (data always seems to go left-to-right on any dataflow diagram 
I've seen), then numbering your bus 'backwards' in the rtl has the 
desirable aspect of the least delayed version being delay[0], the next 
delayed version is delay[1], etc..

I guess you could just shift left instead...

--Mike


More information about the Fpga-synth mailing list