YosysHQ / nextpnr

nextpnr portable FPGA place and route tool
ISC License
1.33k stars 245 forks source link

Missing (or undocumented?) support for derived clocks #390

Open millerresearch opened 4 years ago

millerresearch commented 4 years ago

I have an ice40 design with a cpu running at 50MHz and an sdram controller running at 100MHz. The clocks are generated from the same PLL using GENCLK and GENCLK_HALF parameters and global buffers, so I'm expecting them to have minimal skew. After place & route, nextpnr reports timing PASS in spite of delays of 14+ nsec on clock-crossing paths. I'm assuming this means the clocks are being treated as asynchronous. I can insert synchronising FFs into the memory request/response handshake path, but that's a big latency cost. Is there any way to constrain nextpnr so that it will try to keep paths between the derived clock domains within the delay limit of the faster clock, and also ensure that setup+hold times are safe?

smunaut commented 4 years ago

Beware with assumption about the PLL clocks outputs alignements. A lot less modes are officially (by the lattice tools) than what you actually can do in yosys/nextpnr and I'm not sure there are actual specifications regarding alignements.

I have never checked GENCLK vs GENCLK_HALF but at least with SHIFTREG there are several nano-seconds of skew between outputs and I wouldn't be surprised if GENCLK_HALF was also delayed a bit because of the divider.

smunaut commented 4 years ago

Oh and also wrt to the original question, nextpnr doesn't support :

madscientist159 commented 4 years ago

Are cross clock constraints a planned feature? Would make a couple of designs we have a lot easier if so...

daveshah1 commented 4 years ago

Yes but I can't give an ETA