fixed_addr_o <= "00000000000000000001001000110100";
This flows into the cmd_gen.vhd module and turns into addr_out, which then becomes masked in two different places:
ELSIF ((NUM_DQ_PINS = 32) OR (NUM_DQ_PINS = 40) OR (NUM_DQ_PINS = 48) OR (NUM_DQ_PINS = 56)) THEN
IF (MEM_BURST_LEN = 8) THEN
pipe_data_in(31 DOWNTO 0) <= (addr_out(31 DOWNTO5) & "00000") ;
ELSE
pipe_data_in(31 DOWNTO 0) <= (addr_out(31 DOWNTO4) & "0000") ;
END IF;
ELSIF ((NUM_DQ_PINS = 32) OR (NUM_DQ_PINS = 40) OR (NUM_DQ_PINS = 48) OR (NUM_DQ_PINS = 56)) THEN
m_addr_o(31 DOWNTO 0) <= (addr_out(31 DOWNTO 4) &"0000") ;
Note that the pipe_data_in is masking off five LSBs for BL8, but the m_addr_o is only masking off four LSBs regardless of burst length, and that the fixed address specified by default has a '1' bit at bit 4. So this means that the resulting values are going to be different.
Because of the above code statements, a situation can occur where the write generator is seeded with one value and the read generator is seeded with another, because the fixed address was masked differently up stream.Therefore, thecomparison fails.
As a workaround, you can change the fixed address in the init_mem_pattern_ctr.vhd module so that it ends up aligned regardless of the two different masks being applied by the rest of the code:
fixed_addr_o <= "00000000000000000001001000110100";
fixed_addr_o <= "00000000000000000001001000100100";
Theother tests work fine because they are going to generate BL8-aligned addresses. This is scheduled to be fixed in the ISE 13.3 software release.
| Answer Number | Answer Title | Version Found | Version Resolved |
|---|---|---|---|
| 43130 | MIG Virtex-6 and Spartan-6 v3.9 - Release Notes and Known Issues for ISE Design Suite 13.3 | N/A | N/A |
| 39128 | MIG Virtex-6 and Spartan-6 v3.7 - Release Notes and Known Issues for ISE Design Suite 13.1 | N/A | N/A |
| 41347 | MIG Virtex-6 and Spartan-6 v3.8 - Release Notes and Known Issues for ISE Design Suite 13.2 | N/A | N/A |