fdalleau`` has quit [Quit: It is time for you to leave]
jopdorp has quit [Read error: Connection reset by peer]
sorear has quit [Read error: Connection reset by peer]
sorear has joined #prjmistral
jopdorp has joined #prjmistral
pepijndevos has quit [Ping timeout: 260 seconds]
pepijndevos has joined #prjmistral
<daveshah>
So, as I continue to work on placer improvements in nextpnr (which seems to be dragging on, but hopefully should have big long-run improvements), I am looking at APIs that would give the placer more visibility into the packing situation (e.g. a basic understanding of control sets, rather than having to check validity for every move.) Also, some kind of clock region legalisation would be useful
<daveshah>
Is there a good summary of the Intel arch, or any thoughts any of you have, that would be helpful for the design process for this?
<daveshah>
so, looks like 6 clocks per row (a bit like a clock region)
<daveshah>
two clocks per LAB
<Lofty>
Although the LABs have clock inverters
<daveshah>
I see
<daveshah>
what is the clk[2:0] about in 1-6?
<Lofty>
Figure 1-4 has labclk0, labclk1 and labclk2
<daveshah>
how does clk[2:0] correspond to "two unique clock signals"?
<Lofty>
I'm presuming it lets you do things like clk0, ~clk0 and clk1
<daveshah>
ah, I see
<Lofty>
Since the muxes have optional inverters
<daveshah>
that's definitely the most complicated arrangement yet, so a good basis for API design
<daveshah>
going to need to think some more about that
<daveshah>
usually inversion would either be per unique clock, or per 'SLICE' etc, rather than 2 clocks but 3 inversion possibilities
<Lofty>
I'm not expecting this to come up very often
<Lofty>
So, two unique clocks is probably good enough
<daveshah>
another question, is a MLAB a superset of a LAB (like a Xilinx SLICEM)
<Lofty>
Yes
<Lofty>
MLABs can be LABs, though the timings seem to differ
<daveshah>
that's fine, I think Xilinx is the same
<Lofty>
But anything you can place on a LAB you can place on an MLAB
<daveshah>
I'm thinking if I can create some generic code for this kind of stuff, it should enable slightly more powerful and faster legalisation code then always calling into the arch-specific "is this tile legal" function
<Lofty>
Which is fair
<daveshah>
The clock region stuff is also hard to do in pure arch-specific code, so it would be nice to make a placer clock region aware
<daveshah>
This way we can also deal with stuff that has been ignored for now like the fact the ECP5 supports 64 global clocks - 16 per quadrant - currently I assume that all quadrants use the same clock
<daveshah>
Looks like Intel has a similar quadrant scheme going on, actually
<Lofty>
Yeah, GCLK, RCLK and PCLK
<Lofty>
16 global clocks, and up to 88 regional clocks, it seems
<daveshah>
I do wonder who is actually using that many clock domains
<mwk>
quadrants are common, yea
<mwk>
spartan3e/3a also involve quadrants
<mwk>
and virtex2 maybe?
<Lofty>
Though one of the quadrants isn't available on FPGA SoCs
<Lofty>
So keep that in mind :P
<daveshah>
I guess the large number of global signals is also useful for doing things like resets, enables, etc
<daveshah>
particurlaly the regional ones
<mwk>
hmm
<mwk>
aren't the regional ones supposed to be used for stuff like interface logic?
<Lofty>
There's PCLKs for that, it seems
<mwk>
I mean xilinx has IOCLKs, RCLKs, GCLKs
<daveshah>
Yeah, that is another use
<daveshah>
ECP5 also has edge clocks that are only useful for the "high speed" side of the IO gearboxen
<mwk>
IOCLK can only be used by IO registers (and gearboxes), and are *fast*, RCLK would be divided by some factor and used for the actual logic