J
John Providenza
Guest
I'm trying to create DDR SRAM data I/O pads and am having problems
"pushing" the tri-state enable flip-flop into the IOB. I get the
DDR in/out DATA flip-flops packed into the IOB correctly, but XST 5.2
refuses to use the IOB's tri-state enable flip-flop. This is
targeted at a V2-Pro part.
I'm "hand" instantiating the output DATA ddr "flops", but, for
a variety of reasons, I REALLY don't want to hand instantiate
components to control the tri-state, I'd really like to infer them.
In this design the tri-state control signals are not really "ddr",
they only need to change on posedge clock.
Here's a snippet of my code:
// instantiate 72 DDR output cells
FDDRRSE u0ddr_q (
.C0 (clk_outn), .C1 (clk_out),
.R (1'b0), .S (1'b0), .CE (1'b1),
.D0 (sr_dout[0]), .D1 (sr_dout[72]), .Q (sr_q[0])
);
FDDRRSE u1ddr_q (
.C0 (clk_outn), .C1 (clk_out),
.R (1'b0), .S (1'b0), .CE (1'b1),
.D0 (sr_dout[1]), .D1 (sr_dout[73]), .Q (sr_q[1])
);
FDDRRSE u2ddr_q (
.C0 (clk_outn), .C1 (clk_out),
.R (1'b0), .S (1'b0), .CE (1'b1),
.D0 (sr_dout[2]), .D1 (sr_dout[74]), .Q (sr_q[2])
);
.......
// infer the tri-state output control
// try to get the control bit 'pushed' into the IOB tri-state control f/f
reg sr_oe;
// synthesis attribute IOB of sr_oe "TRUE"
always @(posedge clk_outn)
sr_oe <= bar;
assign sram_dq[71:0] = (sr_oe) ? 72'bz : sr_q[71:0];
a) I have tried a BUNCH of variations on this scheme with no luck.
1) force sr_oe to be a 72 bit vector
2) add KEEP attributes
3) remove the IOB attribute
4) change the tri-state assign statement to be 72 individual
statements, one for each bit.
b) I have set the synthesis options to use IOB flip-flops.
I suspect the Xilinx tools don't like the combination of instantiated
DDR data output flops and inferred tri-state registers pushed into the
IOB.
Any ideas?
John P
"pushing" the tri-state enable flip-flop into the IOB. I get the
DDR in/out DATA flip-flops packed into the IOB correctly, but XST 5.2
refuses to use the IOB's tri-state enable flip-flop. This is
targeted at a V2-Pro part.
I'm "hand" instantiating the output DATA ddr "flops", but, for
a variety of reasons, I REALLY don't want to hand instantiate
components to control the tri-state, I'd really like to infer them.
In this design the tri-state control signals are not really "ddr",
they only need to change on posedge clock.
Here's a snippet of my code:
// instantiate 72 DDR output cells
FDDRRSE u0ddr_q (
.C0 (clk_outn), .C1 (clk_out),
.R (1'b0), .S (1'b0), .CE (1'b1),
.D0 (sr_dout[0]), .D1 (sr_dout[72]), .Q (sr_q[0])
);
FDDRRSE u1ddr_q (
.C0 (clk_outn), .C1 (clk_out),
.R (1'b0), .S (1'b0), .CE (1'b1),
.D0 (sr_dout[1]), .D1 (sr_dout[73]), .Q (sr_q[1])
);
FDDRRSE u2ddr_q (
.C0 (clk_outn), .C1 (clk_out),
.R (1'b0), .S (1'b0), .CE (1'b1),
.D0 (sr_dout[2]), .D1 (sr_dout[74]), .Q (sr_q[2])
);
.......
// infer the tri-state output control
// try to get the control bit 'pushed' into the IOB tri-state control f/f
reg sr_oe;
// synthesis attribute IOB of sr_oe "TRUE"
always @(posedge clk_outn)
sr_oe <= bar;
assign sram_dq[71:0] = (sr_oe) ? 72'bz : sr_q[71:0];
a) I have tried a BUNCH of variations on this scheme with no luck.
1) force sr_oe to be a 72 bit vector
2) add KEEP attributes
3) remove the IOB attribute
4) change the tri-state assign statement to be 72 individual
statements, one for each bit.
b) I have set the synthesis options to use IOB flip-flops.
I suspect the Xilinx tools don't like the combination of instantiated
DDR data output flops and inferred tri-state registers pushed into the
IOB.
Any ideas?
John P