Does anyone know of a simple way in Verilog to add a delay without
adding the delay to the seperate in, out, and tristate components of the
signal source?
Thanks,
Pete
(if you reply by e-mail, please remove the spam block in the address)
--
Peter Young
Hardware Designer
AMIRIX Systems - Halifax, N.S.
http://www.amirix.com
module bidirdelay (a, b);
/*************
* Parameters *
*************/
parameter sig_width = 1;
/*************
* Module I/O *
*************/
inout [sig_width-1:0] a;
inout [sig_width-1:0] b;
/****************
* Specify Block *
****************/
specify
specparam ab_delay = 0.527;
( a => b ) = ab_delay;
( b => a ) = ab_delay;
endspecify
endmodule
One solution can be usingverilog "tran" .
A tran switch cannot provide a bidirectional delay. The delay on
the primitive is just a delay on changes to the control input
taking effect.
The implementation of a bidirectional delay is far more complex
than it might appear. There are reasons why it isn't readily
available in the language.
You might be able to get the desired effect by back-annotating
interconnect delays from all of the drivers to all of the readers,
such that any path that goes through your desired bidirectional
delay has an increased delay. I am not sure it would work, and
it would take a lot of effort.
Also, delays can be placed before inout channel loads (sinks - values that
use inout channel value as input) so that newly calculated inout tran
channel strength value does not change input until delay elapses. These
are called MIPDs (module input port delays). Delay calculators and SDF
files handle this. Unfortunately, the only way to set a MIPD requires
either using SDF or PLI delay annotation.
I do not think there is reasonable digital alternative for the
Verilog semantics. Or am I wrong?
/Steve
--
Steve Meyer Phone: (612) 371-2023
Pragmatic C Software Corp. email: sjm...@pragmatic-c.com
520 Marquette Ave. So., Suite 900
Minneapolis, MN 55402