I have a timing issue I would like some input on, I just can't see the wood for the trees!
Using Xilinx Vivado, I have a small true dual port memory, 64x32 bits that sits between two clock domains.
The A port is read-only, with 0 latency, for a very quick lookup, in a fast clock domain.
The B port is read/write, with 1 latency, in slow clock domain, use to set the contents.
Both ports are guarded with an 'enable' signal, ensuring that only one port is being used at a time.
The idea being that the slower domain writes the contents of the memory, enables the data path in the faster domain, and the values get used like it is table in a ROM.
My timing issue is that the slow clock's constraints are leaking though to the fast port and breaking timing. This is correct, because if both ports were active at the same time and accessing the same address bad things could happen with data being corrupted and so on.
However, I can't find the right constraint to say "the two ports still need to meet their own clock domain's constraints, but there is no cross-domain dependency from the read/write port to the read port". I don't what to flag it as the start of a false path, because I need timing analysis on the read port's d_out signals.
It's not that it can't close timing - if I give both clocks the same period, or the slow one half that of the fast domain I get timing closure with slack.
I also don't want to put a blanket "ignore timing between these two clock domains" because there are other clock crossings that need to be analyzed and reported on.
I'm using an XPM dual-port macro, which I thought would have sorted this all for me....