This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

C6713B HPI read buffer problem

Other Parts Discussed in Thread: TMS320C6713B

For the last few years we have made about 30 processor boards using the TMS320C6713BZDP running at 200MHz. We use an FPGA to perform block reads of data through the HPI. However, the last batch of 10 boards did not work in our system. I traced the problem to the HPI read. 

FPGA uses HPI signals to read and write to HPI registers. So to do a block read, it does the following sequence.

Write start address to HPIA

Read from HPID auto increment mode

Repeat Read for HPID auto increment mode

Until final two reads from HPID in fixed mode (as per silicon errata document)

The FPGA takes care of the signal timing and monitors the HRDY signal.

This code has worked for years across all our boards with version 2.0 DSPs.

 

The last batch however will sometimes get the read from the first address wrong. It returns the contents of the address 6 words beyond the last word in the block.

So if want to read N words from address P then sometimes I will get the contents of P+N+6 as the first word. Rest of the words are OK.

This happens about 1 in 100 block reads so is fairly predictable.

 

I eventually worked out that the HPI read buffer was not getting cleared by the write to HPIA register as in SPRU578C 4.2.2 and data was left over from previous block read.

To fix this I added in a dummy read of the HPID in fixed mode before writing to the HPIA in the sequence above.

Now, the block reads work without problems. 

Has the operation of the DSP changed or is there a subtle change to the latest version 2.0 chips? 

 

Is this user's problem related to mine?

http://e2e.ti.com/support/dsp/tms320c6000_high_performance_dsps/f/115/p/32049/111570.aspx#111570

 

 

  • Gary,

    Will you please do the following:

    • Connect CCS to your device
    • Open a memory window in 32-bit view
    • Report back the contents of 0x01B7C000

    Thanks,
    Brad

  • Can you provide a few examples that contain the precise address you attempt to read and the address of the data that is returned?  I'm interested specifically in the address to see if the issue is related to a bit-flip in one of the address signals.  Perhaps that might give us a clue as to what the issue is.

  • Hi Brad,

    Read of 0x01B7C000 returns 0x00100101

    I initially thought it was an address bit error but tried all sorts of addresses. Our multi channel control system runs on the DSP and a supervisor PC can read or write to any address using the host port via USB. Lots of different addresses are being used all the time, reading signal values, reading data logging buffers as well as writing to outgoing data buffers.

    The biggest clue I had was that if I changed the buffer size then the error word was always 6 words beyond the buffer. In my test program I was always reading from the same start address. I used 0x10000 in internal ram but had the same problem in my external SDRAM using 0x80000000.

    All the DSP boards in the latest batch of 10 now all work with the extra dummy read in the FPGA.

    Regards,

    Gary

  • Gary Dodd said:
    Read of 0x01B7C000 returns 0x00100101

    Will you compare that to the value seen at the same address in some of your previous lots, i.e. the ones that were working fine?

    This sounds crazy, but reading your first post it sounded to me like you were seeing the issue described in the errata (Advisory 1.1.1).  The only way that could be possible is if you are actually using 1.1 silicon!  So I had you read the PLLPID register.  See Advisory 1.1.4 (Incorrect PLL Controller Peripheral Identification (PID) Register Value).  It looks to me like this particular errata is also present.

    Where did you get your parts?  Take a look at the silk screen and compare with the info toward the front of the silicon errata.  It has a "decoder ring".

    Brad

  • My previous working reference DSP returns 0x00010801(although it is a 300 MHz speed grade)

    It does sound like the suspect parts are 1.1

    The silkscreen on one suspect chip says

    TMS320C6713BZDP

    C20-96P3K13

    9544123 E1

    All the chips I have seen have had C20 although the errata says it should be Dxx. The errata does not mention ZDP parts though.

    It does seem that the latest batch are 1.1 inside although labelled 2.0

    We actually had to buy the latest batch on the grey market after all the distributors were out of stock

    Gary

  • Looks like the company took old Rev 1.1 devices and re-labeled them as Rev 2.0 devices.  Well, at least you know what's "different" about these latest devices.  Unfortunately TI cannot make any kind of guarantees for "grey market" silicon.  We have no idea if those are devices that have been pulled off old boards or what.  The device may be damaged.

  • Hi Brad,

    Thanks for your help. It certainly seems to be the case. We will probably use these boards for in house testing.

    Regards,

    Gary

  • Sorry for resurrecting this old thread, but I'm having a similar problem. I made a bunch of boards that worked well with the Rev 2.0 silicon, and I just got a single board in from the factory, fitted with a TMS320C6713B, 300MHz, Rev 1.1. A combination that I didn't even know existed.

    I experienced between 4 and 6 words bad data at the beginning of a block, as described in the first post, but by tinkering with dummy reads and flushes I managed to get rid of that. The problem I still have (and can't get rid of so far) is that the HPI will sometimes corrupt one halfword of data in a random location within a larger block read. I've verified with a scope that the bad data is coming out of the DSP's HPI bus, and have been unable to find any timing violations in the hardware that might explain it.

    Can anyone shed any light on this? Do I maybe have some old DSPs that someone has relabelled as C6713B 300MHz?

    The PLL register reads as Rev 1.1 and the silkscreen says "300 TMS320C6713BZDP D11-82Z1048 3364239"

    Thanks, Steve

  • Steve Conner said:
    I just got a single board in from the factory, fitted with a TMS320C6713B, 300MHz, Rev 1.1. A combination that I didn't even know existed.

    You are correct.  That combination does not exist.

    Steve Conner said:
    I experienced between 4 and 6 words bad data at the beginning of a block, as described in the first post, but by tinkering with dummy reads and flushes I managed to get rid of that.

    Sounds like Advisory 1.1.1 which affected Rev 1.1 silicon.

    Steve Conner said:
    Can anyone shed any light on this? Do I maybe have some old DSPs that someone has relabelled as C6713B 300MHz?

    That would be my guess.  You'll need to take this up with your sourcing department.

  • Hi Brad

    Thanks for the info. I've taken this up with the quality manager at our factory and we'll see what comes of it.

    I discovered that I was a bit tight on the HPI cycle timing during the boot process. After slowing it down a bit, the fixes given in Advisory 1.1.1 started to work and the system ran the HPI test suite overnight with no errors. However, I'm still concerned that I might be overclocking a part that is really a lower speed grade.

    Steve

  • Steve Conner said:
    However, I'm still concerned that I might be overclocking a part that is really a lower speed grade.

    Without a doubt the device is being over-clocked if it's a Rev 1.1 device.  If you have a supplier relabeling parts, they might be doing even worse things such as selling parts that have been pulled from landfills, etc.