----- Original Message -----
From: DJ Delorie
Date: Wednesday, April 22, 2009 12:43 am
Subject: gEDA-user: bidirectional delay in verilog?
Post by DJ DelorieI want to simulate the propogation delay through the fpga IOBs
and the
traces on the board. However, some of the lines are bidirectional
(specifically, the data lines). It's easy enough (I'm assuming) to
assign a delay on a unidirectional line, but what about bidirectional
lines?
Are you modeling the FPGA and the DRAM (I'm assuming it's the DRAM, not that it
matters so much)? Are you using a test bench to run this? You could do something like
this:
| FPGA | --------- | DRAM |
Make the DRAM a purely functional model, very simple, and add the flight time into to the
input and output delays. You can model the DRAM IO as a dedicated input plus a wire-
or'd tristate output device. So maybe the flight time on the wire is 1 nS, you setup the
DRAM input delay as 1 nS. Then add 1 nS onto the output buffer of the DRAM to model
the flight time back to the FPGA.
Use a test bench to combine the FPGA and the DRAM into one device, wired together as
needed. Then just excercise it anyway you like. It doesn't have to be a test bench per-
se, since a hierarchical verilog source file is the same thing, and you can simulate that
as well.
As for the IOB's. Hmm. One way is to use the timing simulation file that XST creates,
post layout. I think it is in verilog, or can be made in verilog via some selection. You can
just plug it into the setup I was just mentioning. If that is not the case, then you can
model the IOB as a dedicated input and tri-stated output and add the delays you like.
(this is how the fpga builds bidirectional lines anyway, they can't build wire-or inside the
part)
FPGA IOB the wire DRAM IOB
|Tri-state output |->>----------------------- >>-| input buffer|
|Input Buffer |-<<-| <<-| Tristate output |