promach
Advanced Member level 4
I got some "tri-state" related errors during mapping process.
The root cause is at the T input port of IOBUF which has to be made to use ODDR primitive as well, but I am not sure how to do this exactly.
Now that adding ODDR2 for dq_iobuf_enable signal got me into another different error :
I tried to solve this new error using (* IOB = "FORCE" *), but it is NOT helping.
Any advice ?
Code:
NGDBUILD done.
Process "Translate" completed successfully
Started : "Map".
Running map...
Command Line: map -intstyle ise -p xc6slx16-ftg256-3 -w -logic_opt off -ol high -t 1 -xt 0 -register_duplication off -r 4 -global_opt off -mt off -ir off -pr off -lc off -power off -o test_ddr3_memory_controller_map.ncd test_ddr3_memory_controller.ngd test_ddr3_memory_controller.pcf
Using target part "6slx16ftg256-3".
Mapping design into LUTs...
ERROR:LIT:675 - In Spartan-6 devices when the data path on a TBUF is driven by
an ODDR2, tri state path of the same TBUF must also be driven by an ODDR2.
TBUF symbol "ddr3_control/dq_io[0].IO_dq/OBUFT" (output signal=dq<0>) has its
I input pin driven by
'ddr3_control/physical_group_dq_w<0>/dq_io[0].ODDR2_dq_w/D1' which is a D1
pin of an ODDR2. However, no ODDR2 was found driving the corresponding T
input pin 'ddr3_control/dq_io[0].IO_dq/OBUFT/E', which will result in only
half of the ODDR2's data path being enabled. This will cause the design to
not work in hardware. Please ensure that TBUF symbol
"ddr3_control/dq_io[0].IO_dq/OBUFT" (output signal=dq<0>) has its T input pin
driven by an ODDR2.
ERROR:LIT:675 - In Spartan-6 devices when the data path on a TBUF is driven by
an ODDR2, tri state path of the same TBUF must also be driven by an ODDR2.
TBUF symbol "ddr3_control/dq_io[1].IO_dq/OBUFT" (output signal=dq<1>) has its
I input pin driven by
'ddr3_control/physical_group_dq_w<1>/dq_io[1].ODDR2_dq_w/D1' which is a D1
pin of an ODDR2. However, no ODDR2 was found driving the corresponding T
input pin 'ddr3_control/dq_io[1].IO_dq/OBUFT/E', which will result in only
half of the ODDR2's data path being enabled. This will cause the design to
not work in hardware. Please ensure that TBUF symbol
"ddr3_control/dq_io[1].IO_dq/OBUFT" (output signal=dq<1>) has its T input pin
driven by an ODDR2.
The root cause is at the T input port of IOBUF which has to be made to use ODDR primitive as well, but I am not sure how to do this exactly.
Code:
IOBUF IO_dq (
.IO(dq[dq_index]),
.I(dq_w[dq_index]),
.T(((wait_count > TIME_RL) && (main_state == STATE_READ_AP)) ||
(main_state == STATE_READ_DATA)),
.O(dq_r[dq_index])
);
Now that adding ODDR2 for dq_iobuf_enable signal got me into another different error :
ERROR : Pack:2531 - The dual data rate register "ddr3_control/ODDR2_dq_iobuf_en"
failed to join the "OLOGIC2" component as required. The output signal for
register symbol ddr3_control/ODDR2_dq_iobuf_en requires general routing to
fabric, but the register can only be routed to ILOGIC, IODELAY, and IOB.
I tried to solve this new error using (* IOB = "FORCE" *), but it is NOT helping.
Any advice ?