C
creon100
Hi everyone, I'm using Xilinx tools again for the first time in a few
years so I'm hoping this is something simple I'm doing wrong in the
options, so I'll ask first before I actually post any code.
Basically, I have a design that implements an asynchronous EMIF bus
interface to a Virtex-4. In the Virtex-4 is logic that controls some
other peripherals in the system using state machine and also has
configuration registers for those devices embedded in it so that the
processor can do configuration of the devices over the EMIF bus.
My VHDL top-level is two instantiated components, 1) my EMIF bus
interface, 2) the control system. The EMIF interface just takes data
from the bus and latches it onto the appropriate latches based on the
address. The latch outputs are just tied directly to the inputs of the
control system. Many of these are control signals that are simply
passed through the FPGA and out to the devices's configuration pins.
One register is used to load a count load value for an internal counter
in the control system. Basically, the counter continuously counts down
from the load value, and whenever the count is lower than 600 it raises
an external signal high, otherwise the signal is low. This all works
fine behaviorally, but after I implement everything it seems the tools
are removing a bytes worth of the load value latches as well as many of
the configuration latches that just pass through the device.
I'm not sure if it's doing this to the load value latches due to the <=
comparison to 600 or not, but I was hoping someone could tell me if
there was some kind of option I'm overlooking that can prevent this
kind of removal of signals. I'm optimizing for speed, not area, and
setting all the usual normal synthesis options as well.
When I view the design in the Floorplanner after the PAR alot of these
apparently removed latches are present in the latch listing, but don't
actually show up in the graphic display, so I'm assuming that even
though they're listed they've actually been removed (which seems to be
born out by my post-route simulation.
Does anyone have any ideas. I could post some simplified code if
anyone needs to see it to get a better idea. Thanks.
years so I'm hoping this is something simple I'm doing wrong in the
options, so I'll ask first before I actually post any code.
Basically, I have a design that implements an asynchronous EMIF bus
interface to a Virtex-4. In the Virtex-4 is logic that controls some
other peripherals in the system using state machine and also has
configuration registers for those devices embedded in it so that the
processor can do configuration of the devices over the EMIF bus.
My VHDL top-level is two instantiated components, 1) my EMIF bus
interface, 2) the control system. The EMIF interface just takes data
from the bus and latches it onto the appropriate latches based on the
address. The latch outputs are just tied directly to the inputs of the
control system. Many of these are control signals that are simply
passed through the FPGA and out to the devices's configuration pins.
One register is used to load a count load value for an internal counter
in the control system. Basically, the counter continuously counts down
from the load value, and whenever the count is lower than 600 it raises
an external signal high, otherwise the signal is low. This all works
fine behaviorally, but after I implement everything it seems the tools
are removing a bytes worth of the load value latches as well as many of
the configuration latches that just pass through the device.
I'm not sure if it's doing this to the load value latches due to the <=
comparison to 600 or not, but I was hoping someone could tell me if
there was some kind of option I'm overlooking that can prevent this
kind of removal of signals. I'm optimizing for speed, not area, and
setting all the usual normal synthesis options as well.
When I view the design in the Floorplanner after the PAR alot of these
apparently removed latches are present in the latch listing, but don't
actually show up in the graphic display, so I'm assuming that even
though they're listed they've actually been removed (which seems to be
born out by my post-route simulation.
Does anyone have any ideas. I could post some simplified code if
anyone needs to see it to get a better idea. Thanks.