R
Rob Dekker
Jonathan Bromley said:Sorry, I emphatically disagree with you here.
It is absolutely NOT the purpose of synthesisable HDL to guarantee
that your code will synthesise on any platform. FPGA users (at least,
the non-naive ones) already know this - they understand how to write
behavioural code that will synthesise, for example, to dual-port RAM
that may or may not exist in a certain target. The code is completely
valid even if the target can't implement it.
Mmm. I think this is different. The RAM extraction is optional in most tools,
and there is an acceptable replacement pattern : plain old RTL synthesis
using latches or dff, with address decoders and select latch/dff-enables.
The front-end can recognize the RAM, but if the technology mapper does
not have a RAM that fits there, they put the replacement pattern in there and proceed.
Simulation-synthesis behavioral consistency is still guaranteed.
The RAM thing IS similar to the support of tristate drivers from Z value assignments:
Some target technologies do not have (internal) tristates.
But if that is the case, the synthesis tool (after the front-end) will replace
the tristates with muxes, and proceed. As long as there are no bus-conflicts
or internal dangling busses (and there should not be any in a good design),
the again simulation-synthesis behavioral consistency is still guaranteed.
Either way, you can code-up Z values and RAM-like behavior and synthesis
WILL synthesize it to something that is behaviorally consistent with the RTL model.
The dual-edge problem is different since there is no 'general' replacement
pattern that will synthesize to something that fits in any technology (standard primitives)
and is still behaviorally consistent with simulation.
Until now : Andy Jones came up with an elegant solution, and we will implement that.
See side-thread.
[...]
Absolutely. But I think you are looking at this from the point of
view of a writer of an HDL front-end. That is absolutely the wrong
place to ask technology-specific questions. It is the right place to
decide what hardware the HDL implies, leaving it up to a later
stage of the synthesis to decide whether the target technology
can implement that function. That later stage is perfectly capable
of issuing fatal errors on its own account. The front end should
only ask "is the code synthesisable in principle, given the standard
synthesis subset". That subset can, and should, include stuff that
is synthesisable to some hardware platforms but not to others.
I agree. "is the code synthesisable in principle, given the standard synthesis subset".
The standard set of rules is written down in 1076.6,
Now where do you see that there is anthing technology-specific about these rules ?
Once again I ask: what is different about saying "register
initialisation is OK, but this device can't do it" and saying
"a megabit of embedded RAM is OK, but this device can't
fit it"? In both examples, the front end should correctly
infer the desired function and a mapper should correctly
determine that it can't be done.
I think you are comparing apples and oranges....
Are you implying that the front-end should synthesize the entire
language, preserve ALL info and pass it through to the back-end
(mapper and such), who will then decide what should be done with it ?
Now, the Verific RTL front-end is very flexible, and we are preserving
initial values, delay info, event expressions and messages for some of our
customers, so this is something that we can already do to a great extend.
But our customers' application decides what they want to allow and what they
want to block from getting to the back-end.
RTL synthesis back-end does not need all that info, and it would
be a terrible waste of cpu time and memory if we would compute it and
pass it along to the back-end.
So the front-end warns, ignores, or errors out on some of the constructs
that will not go through to the back-end.
We typically error out when the simulation-synthesis behavioral consistency is seriously
compromised, given the primitive set that the front-end needs to use.
Not while there are cost/performance/size/power/time-to-market
tradeoffs, no, we're not. Until you can provide us with a tool that
will, without designer intervention, translate a spec into an
optimised design on an automatically-chosen optimal target,
please support us properly in our efforts to explore those tradeoffs.
Say hi to Doris from me..