R
Rob Dekker
Guest
"Jonathan Bromley" <jonathan.bromley@MYCOMPANY.com> wrote in message news:rbqpr1p86c9fgsj49r8obil8h90d0pe12h@4ax.com...
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.
[...]
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 ?
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.
Mmm. I think this is different. The RAM extraction is optional in most tools,On Thu, 05 Jan 2006 06:22:44 GMT, "Rob Dekker"
rob@verific.com> wrote:
If there is appropriate hardware in the target technology, map it,
and if not, error out and don't produce any hardware. I just posted
more on this in my response in the other thread.
No, no, no. Cannot do that. It would create technology dependency in RTL code.
Designer can then no longer rely on their code to run on different tools, with
different target technologies, and that would be like going back to
promoting proprietary data types and non-portable HDL code.
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.
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.
[...]
I agree. "is the code synthesisable in principle, given the standard synthesis subset".Now we ask : "is the code synthesizable".
After introducing technology-specific coding rules, we would need to ask :
"is the code synthesizable to XYZ technology".
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.
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 ?
I think you are comparing apples and oranges....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.
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.
Say hi to Doris from me..I thought we were beyong that point.
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.
--
Jonathan Bromley, Consultant
DOULOS - Developing Design Know-how
VHDL * Verilog * SystemC * e * Perl * Tcl/Tk * Project Services
Doulos Ltd,, 22 Market Place, Ringwood, Hampshire, BH24 1AW, UK
Email: jonathan.bromley@MYCOMPANY.com
Web: http://www.MYCOMPANY.com
The contents of this message may contain personal views which
are not the views of Doulos Ltd., unless specifically stated.
--
Jonathan Bromley, Consultant
DOULOS - Developing Design Know-how
VHDL * Verilog * SystemC * e * Perl * Tcl/Tk * Project Services
Doulos Ltd. Church Hatch, 22 Market Place, Ringwood, Hampshire, BH24 1AW, UK
Tel: +44 (0)1425 471223 Email: jonathan.bromley@MYCOMPANY.com
Fax: +44 (0)1425 471573 Web: http://www.MYCOMPANY.com
The contents of this message may contain personal views which
are not the views of Doulos Ltd., unless specifically stated.