Subject: RE: (* synthesis, keep [=
My take is no. In my opinion the main reason one uses "keep" is
thanks,
Muzaffer
Hi Ben,
I think keep on something, means keep it no matter what. This
For instances, it can be assumed that the "keep" makes the port
My question is if a synthesis tool needs to replicate an object
Thanks,
VhdlCohen@aol.com wrote:
Krishna,
2. Sequential element: If I have the following:
3. instantiated instances: Is the question : "what if I 'keep' instance
Above are initial thoughts. We need to address this issue.
Having a universal "keep" is a neat idea. But what about
Thanks, - Krishna.
VhdlCohen@aol.com wrote:
There are several objects that a user may wish to "keep" during
2. sequential element: This assures that no optimizations cross a
3. instantiated instances: This is used to assure that instantiated
After thinking about it, I think that we could just restrain this
------------------------------------------------------------------------
--
- Krishna.
Synplicity Inc.
(408)215-6152
This archive was generated by hypermail 2b28
: Thu Jan 31 2002 - 08:39:29 PST
From: Muzaffer Kal (muzaffer@dspia.com)
Date: Thu Jan 31 2002 - 08:43:35 PST
predictability. For some reason or another, one wants that double inverter,
that extra/unused DFF etc. remain in the design and not have the synthesizer
change it in any way. So I think keep means "don't touch" and this includes
replication. If it turns out that a net/reg I am keeping needs to be
replicated, I'd rather do it by hand because I am paying special attention
to it to start with and I'd like to know exactly what the result will be.
-----Original Message-----
From: owner-vlog-synth@server.eda.org
[mailto:owner-vlog-synth@server.eda.org]On Behalf Of Krishna Garlapati
Sent: Wednesday, January 30, 2002 6:15 PM
To: VhdlCohen@aol.com
Cc: vlog-synth@server.eda.org
Subject: Re: (* synthesis, keep [=<optional_value>] *)
automatically means that the driver(s) of the kept object remain and so
on.
connections
of the instance to be kept no matter what. This would in turn keep all the
drivers
at the containing hierarchy and so on...
(for better timing, or to meet fanout constraints in the FPGA world)
that has a keep on it, should it do it be allowed to replicate the
object ??
- Krishna.
I am not clear as to what you mean.
1. Wire: Is question "what if I have a 'keep' on a wire inside a level
of hierarchy, and that wire propagates all the way to the top level of the
design?
I guess 'keep' should be maintained thru all the levels of the
hierarchy, up or down, from the level in which the 'keep' is declared.
Good question! Perhaps you can enlighten us on this topic.
reg [7:0] b, c, d (* synthesis, keep *);
Then it would apply to reg a, b, and c for the 'keep'. Maybe I am not
answering the question. Wires connected to those sequential elements may be
blown away if no 'keep'. ?? Don't know! Good question!
A, and ports of A connects to wires and ports at the top level. Then if
instance A is really not used, but 'keep' keeps it, then what to do about
all the wires that it connects to? If A did not have a 'keep', then A, and
all unused wires would have been blown away.
My guess is that if A is 'keep', then signals connections to 'A' are
'keep' (i.e., inputs), but other instances connected to connections of A may
be blown away if there is no 'keep' attribute. Also, unused output wires
with no keep will be blown away if not used. Again, perhaps you can
enlighten us on this. Good question!
Ben
In a message dated 1/30/02 4:56:56 PM Pacific Standard Time,
krishna@synplicity.com writes:
replication ??
Does "keep" on an object means that it cannot be replicated as well ??
synthesis.
1. Wire: This assures that (1) a wire will be kept during synthesis
and (2)
that no optimizations will cross the wire. This is for nets and
combinational logic. Example:
wire [7:0] out_a (* synthesis, keep *);
sequential element. It
is usually used break unwanted optimizations which go through
sequential
elements. Example:
reg [7:0] b (* synthesis, keep *);
instances are not optimized away. This will prevent the optimizations from
removing an unconnected instance.
my_design my_design1 (out1, in1, clk_in)(* synthesis, keep= 1*); //
keep
my_design my_design2 (out, in, clk_in)(* synthesis, keep= 0*); //
may optimize out
attribute to just one.
SOme vendors provide different attribute names for each class of
object.
We'll discuss this at out meeting, but comments are always welcomed.
----
Ben Cohen Publisher, Trainer, Consultant (310) 721-4830
http://www.vhdlcohen.com/ vhdlcohen@aol.com
Author of following textbooks:
* Real Chip Design and Verification Using Verilog and VHDL, 2002 isbn
0-9705394-2-8
* Component Design by Example ", 2001 isbn 0-9705394-0-1
* VHDL Coding Styles and Methodologies, 2nd Edition, 1999 isbn
0-7923-8474-1
* VHDL Answers to Frequently Asked Questions, 2nd Edition, isbn
0-7923-8115
------------------------------------------------------------------------
------