![]() |
|
|
|
#1 |
|
Hello everyone,
I encountered a very strange singnal behaviour. I will try to sketch out the facts as precisely as possible: I am interfacing an FPGA (Virtex2) chip with an external I˛C interface (Philips PCA9564). I can send commands to the PCA9564, for which I have to wait until they are completed. The PCA9564 features an active low INT signal which tells me that a transaction on the bus has been completed. This INT signal is checked noumerous times in my VHDL code. Now this check reproducibly fails after only a few checks, which means e.g. the tenth time I have to wait for INT = 0 (which means to cycle on the INT = 0 condition), my VHDL code does cycle forever. I looked into this with a digital/analog oscilloscope (I am a student, and the university features some very nice hardware), and noted, that the analog INT signal indeed drop to a low level - as well as the digitalized signal that I for debug reasons routed to the outside and checked with a digital probe. So as far as I can see, all needed conditions are met. After some trying around, I changed the way the signal is read. Now, instead of reading the port signal directly wherever needed, I added a process and an internal signal (pca9564_int is the external signal from the chip): pca9564_interrupt <= pca9564_int WHEN clock'EVENT AND clock = '1'; In my understanding, this should lead to an additional register in synthesis. So now my code checks on the register value. And to my surprise, this works like a charm ... Now, so there is isn't really a problem here, since everything works fine. Yet I am courious why this is working. So has anyone an idea why my initial setup didn't work, and why it does work with the extra process? Could this be because of a fanout problem when accessing the external signal directly - and shouldn't the synthesis tool prevent this? Thanks for any oppinion provided. Christian Kraemer Christian Kraemer |
|
|
|
|
#2 |
|
Posts: n/a
|
Christian Kraemer skrev: > Hello everyone, > > I encountered a very strange singnal behaviour. I will try to sketch > out the facts as precisely as possible: > > Yet I am courious why this is working. So has anyone an idea why my > initial setup didn't work, and why it does work with the extra process? > Hi, Every asynchronous signal which goes into a synchronous system needs to be synchronized using registers. A single register may be insufficient to provide a reliable system. You may need two or even three registers to decrease the propability of metastability. Without a synchronizer, some parts of your design may read the input as low while others read it as high, if it's read when it's changing. That may lead to very interesting behaviour... /Peter Peter |
|
|
|
#3 |
|
Posts: n/a
|
check this thread..
http://groups.google.com/group/comp....8d231476233bd6 regards, Krishna Janumanchi mysticlol |
|
![]() |
| Thread Tools | Search this Thread |
|
|
Similar Threads
|
||||
| Thread | Thread Starter | Forum | Replies | Last Post |
| I am having trouble editing a signal in a sub program. | Haai | Hardware | 0 | 08-28-2007 02:58 PM |
| Need help on Modelsim VHDL syntax? ASAP:) | kaji | General Help Related Topics | 0 | 03-14-2007 10:43 PM |
| Need help on a Modelsim VHDL Syntax? ASAP:) | kaji | Software | 0 | 03-14-2007 10:43 PM |
| IMHO, Digital SECAM video is better than Analog NTSC video | Radium | DVD Video | 167 | 10-25-2006 04:16 AM |
| Strange DVD Diagnostic Problem... | Jack | DVD Video | 11 | 12-19-2004 02:43 PM |