Answers Database


Vitex BRAM VHDL simulation: setup violation on CLK A with respect to CLK B, or setup violation on CLKB with respect to CLK A


Record #6733

Product Family: Software

Product Line: Merged Core

Product Part: univhd

Problem Title:
Vitex BRAM VHDL simulation: setup violation on CLK A with respect to CLK B, or setup violation on CLKB with respect to CLK A



Problem Description:
General Description:

I am doing a VHDL simulation and I am getting a setup violation on
CLKA with respect to CLK B, or setup violation on CLKB with
respect to CLKA. It does this for every clock edge.

I am using a Virtex Block ram in my design, and I am using the same
clock for PORT A and PORT B. I have the Port A and Port B
adress' at different locations.

How can I be getting setup violation on the clocks when I am using
the same clock for both ports?


Solution 1:

The problem you are experiencing is an error in the VHDL simulation model
for the RAMB4. The following is the change that will fix the problem. This
fix is implemented in the Xilinx 2.1i release. After making the following
changes the library will have to be re-compiled.

In every model for [X_]RAMB4_S*_S* in simprim and unisim libraries in
Port B code, the following lines should change:

    line 11832(In my copy) in 1.5 was
if (VALID_ADDRB AND Tviol_CLKB_CLKA_posedge /= 'X') then
   DOB_zd := MEM((ADDRESS_B*DIBW + DIBW_1)
   downto (ADDRESS_B*DIBW));
else
   DOB_zd := (others => 'X');
end if;

    should change to:

if (VALID_ADDRB ) then
   if ( WEA_ipd = '0' OR Tviol_CLKB_CLKA_posedge /= 'X'
   OR (HAS_OVERLAP = FALSE)) then
       DOB_zd := MEM((ADDRESS_B*DIBW + DIBW_1)
       downto (ADDRESS_B*DIBW));
   end if;
else
   DOB_zd := (others => 'X');
end if;

The vhd file will need to be re-compiled for the changes to take
effect.

This is fixed in 2.1i




End of Record #6733 - Last Modified: 06/26/99 08:28

For the latest news, design tips, and patch information on the Xilinx design environment, check out the Technical Tips!