Lofty changed the topic of #prjmistral to: Project Mistral: Yosys (and hopefully nextpnr) on Cyclone FPGAs - https://github.com/ZirconiumX/mistral - logs: https://freenode.irclog.whitequark.org/prjmistral
peepsalot has joined #prjmistral
peeps[zen] has quit [Ping timeout: 258 seconds]
fdalleau`` has joined #prjmistral
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> Thanks
<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
<daveshah> yeah that sounds quite similar