Delay with buffers

R

ratep2001

I have the following problem: I want to implement large delay
(50-100ns) on some signals in my VHDL code and fit them into a CPLD
and for that purpose I use chained buffers. However, I found tha
although I use the attributes for preservation of nodes/signal
("syn_keep" for Synplify and "opt" for the optimizer), I canno
preserve more than one single buffer.

For example, in the code below I want to fit 7 buffers between th
input and the output signal. However, I don't get 7 chained buffers i
my pre-fit equations, but just a single buffer buf7 on my input signal
So I end up with just a few nanoseconds of delay, which is far fro
sufficient.

Is there any elegant way to create more than one buffer, and preserv
it from collapsing? I can use either Synplify - Synplicity or Leonard
Spectrum - Menthor Graphics.

Best regards,
Petar

--------------------------------------
Example VHDL code

library ieee;
use ieee.std_logic_1164.all;

entity delay_block is
port
(
in_signal: IN STD_LOGIC;
out_signal: OUT STD_LOGIC
);

end;

architecture delay_block_arch of delay_block is

signal buf1, buf2, buf3, buf4, buf5, buf6, buf7: STD_LOGIC;

attribute syn_keep: integer;
attribute syn_keep of buf1, buf2, buf3, buf4, buf5, buf6, buf7: signa
is 1;

attribute OPT: string;
attribute OPT of buf1, buf2, buf3, buf4, buf5, buf6, buf7: signal i
"KEEP";

begin
buf1 <= in_signal;
buf2 <= buf1;
buf3 <= buf2;
buf4 <= buf3;
buf5 <= buf4;
buf6 <= buf5;
buf7 <= buf6;
out_signal <= buf7;

end delay_block_arch
 
M

Mike Treseler

ratep2001 said:
I have the following problem: I want to implement large delays
(50-100ns) on some signals in my VHDL code and fit them into a CPLD,
and for that purpose I use chained buffers. However, I found that
although I use the attributes for preservation of nodes/signals
("syn_keep" for Synplify and "opt" for the optimizer), I cannot
preserve more than one single buffer.

Consider using a shift register.

-- Mike Treseler
 
P

Peter Hermansson

Is there any elegant way to create more than one buffer, and preserve
it from collapsing? I can use either Synplify - Synplicity or Leonardo
Spectrum - Menthor Graphics.

Best regards,
Petar
Hi,

Using buffers as delay elements is never a good idea in programmable
logic.
They may (as you have already seen) be optimized away and the delay is
very unpredictable, varying over temperature, voltage and between
batches.
A better idea is to use synchronous logic to create delays (as Mike
Treseler suggest). Another solution (its a bit "dirty") would be to
feed the signal to an output pin, delay it with an external RC network
and feed it in to the chip again.

/Peter
 
C

cristian

Hi,
I do agree with Pet and Mike, the best solution is 'snychronous delay'.
However, in case you still want to implement your code detailed above,
I think the only way that the synthesis tool keep the node is that the
node has to involve a logic operation.. For intance
buf2 <= buf1;
to keep buf2 as internal node, there has to be a logic operation on
the rigth hand side of the signal assignment:
buf2 <= buf1 xor signalb; -- the synthesis will keep buf2. (signalb
could a constant, but some constants are also optimized away... )

rgds,

cristian
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,997
Messages
2,570,239
Members
46,828
Latest member
LauraCastr

Latest Threads

Top