C
Christopher Head
Guest
Hi all,
I'm using XST 14.2 and trying to use block RAMs to store constant data
(i.e. as ROMs) for program code that will be run by a CPU. I want to
infer the block RAMs during synthesis and then actually put data into
them from an ELF during bitgen (in concert with a BMM file), so the data
will be part of the bitstream and the FPGA will configure with the RAMs
preloaded.
Hereâs the problem: XST keeps noticing that the great big arrays have
nothing in them, and declares that âSignal <PMem_0> is used but never
assigned. This sourceless signal will be automatically connected to
value GND.â. Then it turns it into a LUT RAM for some reason, but only
a tiny one.
Iâve gone through the Spartan 6 XST user guide and the Xilinx
constraint guide. Iâve tried attaching the KEEP attribute (set to
âyesâ), the S attribute (set to âyesâ), and the
EQUIVALENT_REGISTER_REMOVAL attribute (set to ânoâ) to the PMem signal.
Iâve tried attaching all three of them at the same time. Iâve even
tried simultaneously attaching all those attributes to both the memory
block, the address lines going into it, the clock line, and the data
lines coming out of it. Nothing helps! XST insists that the RAM is
useless and destroys it.
Surely this is a pretty common use case? What am I missing here?
Thanks!
Chris
I'm using XST 14.2 and trying to use block RAMs to store constant data
(i.e. as ROMs) for program code that will be run by a CPU. I want to
infer the block RAMs during synthesis and then actually put data into
them from an ELF during bitgen (in concert with a BMM file), so the data
will be part of the bitstream and the FPGA will configure with the RAMs
preloaded.
Hereâs the problem: XST keeps noticing that the great big arrays have
nothing in them, and declares that âSignal <PMem_0> is used but never
assigned. This sourceless signal will be automatically connected to
value GND.â. Then it turns it into a LUT RAM for some reason, but only
a tiny one.
Iâve gone through the Spartan 6 XST user guide and the Xilinx
constraint guide. Iâve tried attaching the KEEP attribute (set to
âyesâ), the S attribute (set to âyesâ), and the
EQUIVALENT_REGISTER_REMOVAL attribute (set to ânoâ) to the PMem signal.
Iâve tried attaching all three of them at the same time. Iâve even
tried simultaneously attaching all those attributes to both the memory
block, the address lines going into it, the clock line, and the data
lines coming out of it. Nothing helps! XST insists that the RAM is
useless and destroys it.
Surely this is a pretty common use case? What am I missing here?
Thanks!
Chris