rmachado
Member level 2
Hi everyone,
I don't really know if this is the right place to do this post, so if it is not, please redirect me to the right place.
With that being said, let me explain the problem I am working on right now.
Some time ago someone in the company at which I am currently doing my PhD developed an ASIC with an analog and digital part. The analog part is responsible for doing some measurements and the digital one is composed by an SPI slave, a register bank, that has the registers responsible for configuring the entire ASIC, and some other components that are not relevant for the problem at hand.
The design passed all the functional and timing verification and they tape-off the chip for manufacturing. When the ASIC chip was ready, they find out that the SPI Slave communication was not working properly. Most of the masters that they use to communicate with the slave are not able to write to it, and the one that works, the MCP2210, only writes to it sometimes and most of the times when they use it to read from the slave, the values are wrong. As I am doing my PhD in the ASIC design field, they ask me if I could look into the problem but right now I am at a dead end. So I hope that someone here can give me at least some hints on what tests should I do next and what kind of stuff should I search for.
Here is what I have done so far:
1- I run the functional and timing tests again just to double check the validation process and to look at the communication waveforms and timings. As I was expecting, the ASIC passed the test.
2- Looking into the problem, I guessed that the problem could be related with the SPI slavve or the writing/reading from the register bank so I picked that code and implemented it in a ZYBO FPGA (I know that the hardware result from this implementation is completely different from the real ASIC, nevertheless I decided to do it using the same constraints file just to see if I could get a similar behavior. Some time ago I discovered a reset problem in a I2C ASIC by adopting this process). The FPGA system works perfectly as expected. no matter the master SPI device I use, being it the aardvark, mcp2210, or even the arduino zero board, the communication between the SPI masters and the FPGA SPI slave works perfectly, even at the maximum SPI Master clock frequencies.
3- I monitored all the tests using an oscilloscope with probes for the Sclk, MISO, MOSI and CS signals. The master generates all the signals correctly but the slave just simply does not respond on the MISO line (I attached a picture with the waveforms from the oscilloscope, although i don't believe that it will help a lot).
I check the SPI mode as well and I know both master and slave are in the same operation mode (in this case, mode 0 CPOL=0 and CPHA=0)
Clearly, the verilog code is functionally correct, otherwise the design would not work on the FPGA. So there must be something on the ASIC chip behind the failure but i can not understand what is it. maybe the pads? right now I am out of ideas.
So can anyone give me some hints on what could be causing the problem to appear on the ASIC but not in the FPGA? And does anyone have some test ideas for me to perform so I could dig deeper into the problem?
Thanks in advanced,
Rui
I don't really know if this is the right place to do this post, so if it is not, please redirect me to the right place.
With that being said, let me explain the problem I am working on right now.
Some time ago someone in the company at which I am currently doing my PhD developed an ASIC with an analog and digital part. The analog part is responsible for doing some measurements and the digital one is composed by an SPI slave, a register bank, that has the registers responsible for configuring the entire ASIC, and some other components that are not relevant for the problem at hand.
The design passed all the functional and timing verification and they tape-off the chip for manufacturing. When the ASIC chip was ready, they find out that the SPI Slave communication was not working properly. Most of the masters that they use to communicate with the slave are not able to write to it, and the one that works, the MCP2210, only writes to it sometimes and most of the times when they use it to read from the slave, the values are wrong. As I am doing my PhD in the ASIC design field, they ask me if I could look into the problem but right now I am at a dead end. So I hope that someone here can give me at least some hints on what tests should I do next and what kind of stuff should I search for.
Here is what I have done so far:
1- I run the functional and timing tests again just to double check the validation process and to look at the communication waveforms and timings. As I was expecting, the ASIC passed the test.
2- Looking into the problem, I guessed that the problem could be related with the SPI slavve or the writing/reading from the register bank so I picked that code and implemented it in a ZYBO FPGA (I know that the hardware result from this implementation is completely different from the real ASIC, nevertheless I decided to do it using the same constraints file just to see if I could get a similar behavior. Some time ago I discovered a reset problem in a I2C ASIC by adopting this process). The FPGA system works perfectly as expected. no matter the master SPI device I use, being it the aardvark, mcp2210, or even the arduino zero board, the communication between the SPI masters and the FPGA SPI slave works perfectly, even at the maximum SPI Master clock frequencies.
3- I monitored all the tests using an oscilloscope with probes for the Sclk, MISO, MOSI and CS signals. The master generates all the signals correctly but the slave just simply does not respond on the MISO line (I attached a picture with the waveforms from the oscilloscope, although i don't believe that it will help a lot).
I check the SPI mode as well and I know both master and slave are in the same operation mode (in this case, mode 0 CPOL=0 and CPHA=0)
Clearly, the verilog code is functionally correct, otherwise the design would not work on the FPGA. So there must be something on the ASIC chip behind the failure but i can not understand what is it. maybe the pads? right now I am out of ideas.
So can anyone give me some hints on what could be causing the problem to appear on the ASIC but not in the FPGA? And does anyone have some test ideas for me to perform so I could dig deeper into the problem?
Thanks in advanced,
Rui