Atlantic778 has joined ##openfpga
Atlantic778 has joined ##openfpga
Atlantic778 has joined ##openfpga
Atlantic778 has joined ##openfpga
Atlantic778 has joined ##openfpga
Atlantic778 has quit [Ping timeout: 268 seconds]
Atlantic778 has quit [Ping timeout: 268 seconds]
Atlantic778 has quit [Ping timeout: 268 seconds]
Atlantic778 has quit [Ping timeout: 268 seconds]
Atlantic778 has quit [Ping timeout: 268 seconds]
Flea86 has joined ##openfpga
Flea86 has joined ##openfpga
Flea86 has joined ##openfpga
Flea86 has joined ##openfpga
Flea86 has joined ##openfpga
oter has joined ##openfpga
oter has joined ##openfpga
oter has joined ##openfpga
oter has joined ##openfpga
oter has joined ##openfpga
oter has quit [Client Quit]
oter has quit [Client Quit]
oter has quit [Client Quit]
oter has quit [Client Quit]
oter has quit [Client Quit]
oter has joined ##openfpga
oter has joined ##openfpga
oter has joined ##openfpga
oter has joined ##openfpga
oter has joined ##openfpga
oter has quit [Client Quit]
oter has quit [Client Quit]
oter has quit [Client Quit]
oter has quit [Client Quit]
oter has quit [Client Quit]
emeb has quit [Quit: Leaving.]
emeb has quit [Quit: Leaving.]
emeb has quit [Quit: Leaving.]
emeb has quit [Quit: Leaving.]
emeb has quit [Quit: Leaving.]
<xobs> I am suspicious. Though I hope to understand more by the end of the day. But on my Fomu EVT (UP5K) board, I just rebuilt the bitstream and nextpnr reports: "Info: Max frequency for clock 'clk48': 107.97 MHz (PASS at 48.00 MHz)"
<xobs> I am suspicious. Though I hope to understand more by the end of the day. But on my Fomu EVT (UP5K) board, I just rebuilt the bitstream and nextpnr reports: "Info: Max frequency for clock 'clk48': 107.97 MHz (PASS at 48.00 MHz)"
<xobs> I am suspicious. Though I hope to understand more by the end of the day. But on my Fomu EVT (UP5K) board, I just rebuilt the bitstream and nextpnr reports: "Info: Max frequency for clock 'clk48': 107.97 MHz (PASS at 48.00 MHz)"
<xobs> I am suspicious. Though I hope to understand more by the end of the day. But on my Fomu EVT (UP5K) board, I just rebuilt the bitstream and nextpnr reports: "Info: Max frequency for clock 'clk48': 107.97 MHz (PASS at 48.00 MHz)"
<xobs> I am suspicious. Though I hope to understand more by the end of the day. But on my Fomu EVT (UP5K) board, I just rebuilt the bitstream and nextpnr reports: "Info: Max frequency for clock 'clk48': 107.97 MHz (PASS at 48.00 MHz)"
<whitequark> does the critical path look sensible?
<whitequark> does the critical path look sensible?
<whitequark> does the critical path look sensible?
<whitequark> does the critical path look sensible?
<whitequark> does the critical path look sensible?
<xobs> How would I check that?
<xobs> How would I check that?
<xobs> How would I check that?
<xobs> How would I check that?
<xobs> How would I check that?
<whitequark> nextpnr puts the critical path in the report
<whitequark> nextpnr puts the critical path in the report
<whitequark> nextpnr puts the critical path in the report
<whitequark> nextpnr puts the critical path in the report
<whitequark> nextpnr puts the critical path in the report
<xobs> Oh, that makes a lot of sense. Wow that's cool. Looks sensible to me.
<xobs> Oh, that makes a lot of sense. Wow that's cool. Looks sensible to me.
<xobs> Oh, that makes a lot of sense. Wow that's cool. Looks sensible to me.
<xobs> Oh, that makes a lot of sense. Wow that's cool. Looks sensible to me.
<xobs> Oh, that makes a lot of sense. Wow that's cool. Looks sensible to me.
GenTooMan has joined ##openfpga
GenTooMan has joined ##openfpga
GenTooMan has joined ##openfpga
GenTooMan has joined ##openfpga
GenTooMan has joined ##openfpga
jevinskie has quit [Ping timeout: 252 seconds]
jevinskie has quit [Ping timeout: 252 seconds]
jevinskie has quit [Ping timeout: 252 seconds]
jevinskie has quit [Ping timeout: 252 seconds]
jevinskie has quit [Ping timeout: 252 seconds]
unixb0y has quit [Ping timeout: 244 seconds]
unixb0y has quit [Ping timeout: 244 seconds]
unixb0y has quit [Ping timeout: 244 seconds]
unixb0y has quit [Ping timeout: 244 seconds]
unixb0y has quit [Ping timeout: 244 seconds]
unixb0y has joined ##openfpga
unixb0y has joined ##openfpga
unixb0y has joined ##openfpga
unixb0y has joined ##openfpga
unixb0y has joined ##openfpga
dj_pi has joined ##openfpga
dj_pi has joined ##openfpga
dj_pi has joined ##openfpga
dj_pi has joined ##openfpga
dj_pi has joined ##openfpga
pie_ has quit [Remote host closed the connection]
pie_ has quit [Remote host closed the connection]
pie_ has quit [Remote host closed the connection]
pie_ has quit [Remote host closed the connection]
pie_ has quit [Remote host closed the connection]
pie_ has joined ##openfpga
pie_ has joined ##openfpga
pie_ has joined ##openfpga
pie_ has joined ##openfpga
pie_ has joined ##openfpga
dj_pi has quit [Ping timeout: 240 seconds]
dj_pi has quit [Ping timeout: 240 seconds]
dj_pi has quit [Ping timeout: 240 seconds]
dj_pi has quit [Ping timeout: 240 seconds]
dj_pi has quit [Ping timeout: 240 seconds]
futarisIRCcloud has joined ##openfpga
futarisIRCcloud has joined ##openfpga
futarisIRCcloud has joined ##openfpga
futarisIRCcloud has joined ##openfpga
futarisIRCcloud has joined ##openfpga
jevinskie has joined ##openfpga
jevinskie has joined ##openfpga
jevinskie has joined ##openfpga
jevinskie has joined ##openfpga
jevinskie has joined ##openfpga
Miyu has quit [Ping timeout: 240 seconds]
Miyu has quit [Ping timeout: 240 seconds]
Miyu has quit [Ping timeout: 240 seconds]
Miyu has quit [Ping timeout: 240 seconds]
Miyu has quit [Ping timeout: 240 seconds]
soylentyellow__ has joined ##openfpga
soylentyellow__ has joined ##openfpga
soylentyellow__ has joined ##openfpga
soylentyellow__ has joined ##openfpga
soylentyellow__ has joined ##openfpga
GenTooMan has quit [Quit: Leaving]
GenTooMan has quit [Quit: Leaving]
GenTooMan has quit [Quit: Leaving]
GenTooMan has quit [Quit: Leaving]
GenTooMan has quit [Quit: Leaving]
dj_pi has joined ##openfpga
dj_pi has joined ##openfpga
dj_pi has joined ##openfpga
dj_pi has joined ##openfpga
dj_pi has joined ##openfpga
rofl__ has joined ##openfpga
rofl__ has joined ##openfpga
rofl__ has joined ##openfpga
rofl__ has joined ##openfpga
rofl__ has joined ##openfpga
Bike has joined ##openfpga
Bike has joined ##openfpga
Bike has joined ##openfpga
Bike has joined ##openfpga
Bike has joined ##openfpga
rofl_ has quit [Ping timeout: 252 seconds]
rofl_ has quit [Ping timeout: 252 seconds]
rofl_ has quit [Ping timeout: 252 seconds]
rofl_ has quit [Ping timeout: 252 seconds]
rofl_ has quit [Ping timeout: 252 seconds]
m_w has quit [Ping timeout: 250 seconds]
m_w has quit [Ping timeout: 250 seconds]
m_w has quit [Ping timeout: 250 seconds]
m_w has quit [Ping timeout: 250 seconds]
m_w has quit [Ping timeout: 250 seconds]
Bike has quit [Quit: Lost terminal]
Bike has quit [Quit: Lost terminal]
Bike has quit [Quit: Lost terminal]
Bike has quit [Quit: Lost terminal]
Bike has quit [Quit: Lost terminal]
dj_pi has quit [Ping timeout: 246 seconds]
dj_pi has quit [Ping timeout: 246 seconds]
dj_pi has quit [Ping timeout: 246 seconds]
dj_pi has quit [Ping timeout: 246 seconds]
dj_pi has quit [Ping timeout: 246 seconds]
_whitelogger____ has joined ##openfpga
_whitelogger has joined ##openfpga
_whitelogger has joined ##openfpga
_whitelogger_ has joined ##openfpga
_whitelogger_ has joined ##openfpga
_whitelogger_ has joined ##openfpga
_whitelogger__ has joined ##openfpga
_whitelogger__ has joined ##openfpga
_whitelogger__ has joined ##openfpga
_whitelogger__ has joined ##openfpga
_whitelogger___ has joined ##openfpga
_whitelogger___ has joined ##openfpga
_whitelogger___ has joined ##openfpga
_whitelogger___ has joined ##openfpga
_whitelogger___ has joined ##openfpga
pie_ has quit [Remote host closed the connection]
pie_ has quit [Remote host closed the connection]
pie_ has quit [Remote host closed the connection]
pie_ has quit [Remote host closed the connection]
pie_ has quit [Remote host closed the connection]
pie_ has joined ##openfpga
pie_ has joined ##openfpga
pie_ has joined ##openfpga
pie_ has joined ##openfpga
pie_ has joined ##openfpga
rohitksingh has joined ##openfpga
rohitksingh has joined ##openfpga
rohitksingh has joined ##openfpga
rohitksingh has joined ##openfpga
rohitksingh has joined ##openfpga
ym has quit [Ping timeout: 250 seconds]
ym has quit [Ping timeout: 250 seconds]
ym has quit [Ping timeout: 250 seconds]
ym has quit [Ping timeout: 250 seconds]
ym has quit [Ping timeout: 250 seconds]
_whitelogger has joined ##openfpga
rohitksingh has quit [Ping timeout: 245 seconds]
rohitksingh_work has joined ##openfpga
ayjay_t has quit [Read error: Connection reset by peer]
ayjay_t has joined ##openfpga
ayjay_t has quit [Read error: Connection reset by peer]
ayjay_t has joined ##openfpga
futarisIRCcloud has quit [Quit: Connection closed for inactivity]
Miyu has joined ##openfpga
Miyu has quit [Ping timeout: 246 seconds]
pie_ has quit [Ping timeout: 250 seconds]
m4ssi has joined ##openfpga
m_w has joined ##openfpga
m_w has quit [Ping timeout: 245 seconds]
_whitelogger has joined ##openfpga
Atlantic778 has joined ##openfpga
<whitequark> hmm
<tnt> indeed
<whitequark> daveshah: the more i look at LUT optimization and abc the more i question whether abc is good at this job more than incidentally
<whitequark> well, it's not very good
<whitequark> i'm looking at this paper http://cadlab.cs.ucla.edu/~cong/papers/iccad92.pdf
<whitequark> it's written somewhat incomprehensibly but i can see that i can represent *any* combinatorial logic with their algorithm *directly*
<whitequark> so, for example, i could literally take the combinatorial definition of SB_CARRY and include it in the flow graph
<whitequark> so that if it happens to be efficient to pack carries into LUTs for some reason (see one of my new PRs), it's done
<whitequark> similarly, i wouldn't even have definitions for nodes like $_AND_ or $_OAI3_ or whatever
<whitequark> it's sufficient to use yosys consteval to interrogate them during packing
<daveshah> ABC can do optimisation of carry and similar primitives too
<whitequark> right but what internal representation does abc use for them?
<daveshah> It's all an AIG
<whitequark> don't you have to break them into an aig or something?
<whitequark> yeah
<whitequark> fuck aig
<whitequark> i don't want an aig
<whitequark> this just messes up my logic for no good reason and makes it harder to see where it went
<whitequark> why can't it directly represent multiple input primitives? this is dumb
<whitequark> i want an optimization pass that works directly on luts
<whitequark> its been thirty fucking years and we still have no tools that do this? what bullshit
<daveshah> ABC can definitely do something more like that
<daveshah> It's still AIG based but with partitions for LUTs and hard functions
<whitequark> is there more than one person on this planet who knows how to actually make it work with abc?
<daveshah> Yes
<daveshah> Clifford knows now
<daveshah> I think him and Eddie will work on a new pass in Yosys using the extended AIGER interface rather than BLIF
<daveshah> This will also enable timing aware synthesis
Atlantic778 has quit [Ping timeout: 268 seconds]
<whitequark> hrm
<whitequark> do you think i should write opt_flowmap, or defer to that?
<daveshah> I'm pretty sure you'll have opt_flowmap done much sooner than the new ABC pass :)
<whitequark> okay
<whitequark> gonna write it then
<daveshah> Might be worth talking to clifford though
<whitequark> I think there is definitely some, uh, potential synergy available with opt_flowmap, because of the reuse of Yosys IR
<whitequark> but at some point the benefit over abc_aiger may be marginal
<whitequark> it's hard to say offhand
<daveshah> The new ABC interface will also get us much better retiming
rohitksingh_work has quit [Read error: Connection reset by peer]
<daveshah> If it helps, I managed to redraw the ECP5 carry logic into a way that is much easier to work with, also much closer to Xilinx carry logic. This form does lose an input that would occasionally be useful, but brings the significant benefit of making the two LUT halves independent.
<daveshah> I'll need to write a small packer pass, probably in Yosys, to recombine the subcomponents to a CCU2
<whitequark> daveshah: interesting
<whitequark> daveshah: that looks like it still can't implement an add/sub?
<whitequark> since it now only has 3 inputs
<daveshah> It can
<whitequark> oh, wait
<daveshah> Diamond manages it
<whitequark> the carry logic is *after* the LUTs not before
<daveshah> yes
<whitequark> that's why it can
<daveshah> Xilinx has the same MUX&XOR arrangement
<daveshah> but of course bigger LUTs on the 7-series
<whitequark> what is S?
<daveshah> sum output
<daveshah> ie what would be the LUT output in non-carry mode routing wise
<whitequark> oh i see
<whitequark> interesting
<daveshah> it's also worth thinking about the LUT expansion muxes in Xilinx & Lattice devices
<sorear> PFUMUX&L6MUX?
<daveshah> yeah
<daveshah> F7MUX/F8MUX in Xilinx land
<daveshah> they should also make building large multiplexers much easier
<daveshah> s/large/wide/
<daveshah> probably the best option for these is to have a Yosys techmap that maps multiplexers with >N (N to be decided on an arch-specific basis) inputs to them
<daveshah> then use abc_xaig/flowmap/etc to optimise them
<sorear> does "flowmap" have a specific meaning?
<sorear> *reads whitequark's paper* oh.
<whitequark> it's lut techmapping using flow maximization algorithm
<whitequark> actually the use of flow there is pretty boneless
<whitequark> all capacities are 0 or 1
<whitequark> it's really an iterative pathfinding problem stated in terms of flow maximization for some weird reason
<whitequark> probably because there were facts proven about that or something
<whitequark> they really have to go out of their way to make it about flow
<daveshah> > Sun SPARC IPC workstation (14.8 MIPS)
<daveshah> it's weird to think that people were doing FPGA synthesis on machines beaten by the fancier Arduinos
<whitequark> 32 MB of RAM tho
<daveshah> yeah, realistically that's the limit
<daveshah> we do need to do something self-hosting one day
<daveshah> probably makes more sense for Xilinx or something that can self-partial-reconfigure
<whitequark> daveshah: how do you feel about this paper btw?
<whitequark> in the sense of
<whitequark> can i ask you to read it and assist me in understanding some of the finer points
<whitequark> i grasp the overall idea but i resent the style in which it's written because it's like the opposite of what i want to know to implement it
<daveshah> So I must remind that my techmapping experience is probably less than yours (I've only ever done a very naive implementation a few years ago)
<daveshah> but I'll see what I can make of it
<whitequark> i got the impression that you're better with, well, badly written academic prose
<whitequark> well i guess it's not very badly written
<whitequark> mediocre academic prose :D
<daveshah> yes, I somehow managed to get that vaguely described BFS-based timing optimiser to work
<whitequark> the reason i went with flowmap is
<whitequark> the same people released several very closely related algorithms
<whitequark> http://cadlab.cs.ucla.edu/~cong/papers/iccad93.pdf is slower but better at depth minimization
<whitequark> this one does depth and area minimization at the same time
<whitequark> ie it determines critical path, optimizes it for depth and optimizes the area
<daveshah> Speed is no concern imo, synthesis CPU time right now is basically free
<whitequark> that's actually the one i'm most interested in
<daveshah> given that PnR is often well over an order of magnitude slower
<whitequark> because it's exactly what you want
<whitequark> you can also combine cutmap (the last one) with a variation on flowmap to do depth relaxation
<whitequark> so, it looked to me like it's reasonable to invest some time into figuring out how flowmap works
<whitequark> especially given that it's very straightforward conceptually
_whitelogger has joined ##openfpga
<Flea86> "<daveshah> probably makes more sense for Xilinx or something that can self-partial-reconfigure" Or two ECP5 chips in master-slave mode :D
<daveshah> :D
<daveshah> how about an ECP5 reconfiguring an iCE40
<Flea86> That would be neat as well
<Flea86> All I have right now, is an ECP5 that can be reconfigured by a dumb micro heh
<whitequark> daveshah: or an iCE40 that reconfigures the ECP5
<whitequark> using an intermediate PSRAM or something
<daveshah> unfortunately I realised the PSRAM idea doesn't work
<whitequark> oh?
<daveshah> all the SPI PSRAMs I find have a maximum CSn low time of 8us because of the DRAM refresh
<Flea86> Also, man VME files are largely full of nothing... :(
<daveshah> I am pretty sure the ECP5 has CSn low during the entire bitstream read like the ICE40
<whitequark> daveshah: that's why I said an intermediate iCE40
<whitequark> with additional logic to arbiter the PSRAM
<daveshah> yeah, you could do that with slave serial
<daveshah> there's prior art, the icoboard had a machxo2 to do misc config management
<Flea86> Nice, I should give ice40 a spin sometime
<whitequark> ice40 is really nice.
<whitequark> nice40.
<daveshah> Buy an icebreaker :D
<Flea86> heh
<whitequark> it's not very powerful but it's so tiny, you can understand every single thing it offers you in no time
<daveshah> that's why clifford picked it in the first place
<zkms> qt smol ice40 :3
jcreus has joined ##openfpga
<whitequark> well, it's certainly powerful enough for glasgow
<Flea86> daveshah: Cool board!
<Flea86> daveshah: Not sure if you've seen my Ohm board offering.. rpi zero form factor isn't everyone's cup of tea I'd imagine.
<daveshah> It suits the iCE40 well imo
<daveshah> because you can run the tools on the Pi zero too
<daveshah> I think mithro is interested in doing this for a very low cost complete dev environment, no install needed
<Flea86> Cool.
<daveshah> The other neat thing about the iCE40 is its static power. 2 orders of magnitude lower static power per LC than Artix-7
<Flea86> Reminds me of the MachXO2.. that was easy on the juice too
<daveshah> <100µW static power for the UltraPlus
<Flea86> Not bad
<Flea86> Not bad at all
<Flea86> One of the things I miss about the MachXO2 that isn't on the ECP5: The uber-flexible PLL block :(
<daveshah> ditto
<daveshah> it's a real shame
<daveshah> particularly for video mode switching, etc
<Flea86> Why they gimped it like that I'll never understand lol
<Flea86> I could, for example, generate an accurate NTSC colorburst signal from a 50MHz input :D
<Flea86> That is nice
<noopwafel> are there ECP5 dev boards I can actually just go buy atm, other than the lattice ones?
<Flea86> noopwafel: I made some previously.. working on an Ohm2 currently :)
<daveshah> nice
<daveshah> noopwafel: there is some kind of availability of the ULX3S, but it's more a case of emailing them
<Flea86> noopwafel: I understand tinyfpga is also making some too :D
<daveshah> right now the Lattice boards are definitely the easiest to buy
<noopwafel> Flea86: yeah, looking forward.. :)
<Flea86> daveshah: Yes, forgot about ulx3s, I have one here :D
<noopwafel> and yes I regret having not found the ulx3s people at 35c3 :(
<noopwafel> will mail them, thanks
<daveshah> I think there will be some 85k ULX3Ss available soon
<Flea86> daveshah: They've put a lot of effort into their board, it uses a jtag solution that is borrowed from my Ohm xD
<Flea86> Which borrowed from my earlier work with the XO2
<daveshah> heh
<swetland> I strongly suspect that if the foss fpga toolchain stuff keeps pushing ahead, eventually we're going to see performance/quality exceeding the vendor tools
<swetland> just thinking... there are only a few vendors... they have a relatively small pool of folks working on this stuff... some of them are probably quite good... but the open source projects have the potential of getting contributions from amazing people who'd never consider going to work for an fpga vendor
<swetland> but based on the overall software quality I see from fpga vendors, I suspect they suffer from similar issues to the silicon vendors in software development -- not enough value placed on and compensation directed toward software teams, difficulty in hiring really excellent people, etc.
<daveshah> I'm not super comfortable disclosing exact benchmarks. But my testing of Yosys with all the latest optimisations (tnt's CE stuff and whitequark's relut) and nextpnr with opt-timing and we were less than 10% behind Radiant Fmax-wise on the designs I tested - with overlapping error bars in some cases
<daveshah> So the inversion point will be next year for sure
<daveshah> *this year
<daveshah> derp
<whitequark> lol
* swetland nods.
* swetland needs to see if he can trick his employer into paying him to work on this stuff fulltime ^^
<sorear> Fmax per MB of download
<whitequark> lol
* swetland dies
<daveshah> whitequark: So these papers seem reasonable enough I think
<daveshah> I still need to spend a bit more time thinking over them
<whitequark> okay, thanks
<whitequark> the specific issue i have is representation for the flow graph
<whitequark> what htey have on fig3c clearly doesn't have to actually exist
<whitequark> it's just a conceptual representation of a graph on fig3b
<whitequark> but i think i have to actually build the graph on fig3b in memory
<whitequark> and if i have to do this from scratch for every node it'll get slow pretty quickly
<whitequark> i think there are reuse opportunities, but i do not see them
<whitequark> well not offhand anyway
<swetland> I really want to dig in and play with tracking net/etc names across synthesys and placement and see if we can't improve the ability to understand what part of your design ended up where and better relate the final bitstream with the original design
<whitequark> swetland: do you want any specific suggestions?
<whitequark> the verilog frontend currently gives cells really dumb names
<whitequark> that would be a nice easy fix
<swetland> yeah that was something I was wondering about
<whitequark> i've looked at it
<daveshah> another thought - the JSON file can have multiple names for a signal
<whitequark> just never got around to fixing
<daveshah> at the moment nextpnr picks one according to a heuristic
<swetland> definitely would be up for some suggestions of things to poke at while I start learning how the codebase works
<daveshah> but it would be cool for nextpnr to have some kind of aliases
<daveshah> so any name works for timing constraints, etc
<daveshah> one day I'd love a cross-probing IDE
<swetland> I was wondering if clocks shouldn't be distinct entities (named when declared in constraints and attached to a pin/net/etc) and then they "stick" to that net
<daveshah> click a wire or bel in the device view; editor goes to a line in the source code
<daveshah> swetland: seems reasonable
<swetland> which also provides a nice hint for promote-to-global
<swetland> similarly interesting would be a mechanism for generating derived clocks -- give SB_PLL* and its parameters and a clock definition of the input, we should be able to make a pretty solid guess about downstream clocks
<whitequark> ooh
<swetland> I seem to recall the xilinx tools being able to do that, I don't think the lattice tools do
<tnt> swetland: they do
<tnt> and I think dave has derived clock in his todo list.
<swetland> I must be holding them wrong then
<daveshah> it's on the todo list for my master's thesis
<daveshah> effectively we already do it in nextpnr for the trivial case of global buffers
tmeissner has joined ##openfpga
<swetland> re: hw issues from last week: got to the bottom of the non-functional PLL on my second icebreaker -- either the resistor in front of vpll was busted or solder joint was not happy (lost the resistor swapping it... frakkin 0402s are too tiny) but replacing it made the world happy again.
<daveshah> good to know
<daveshah> guess esden needs a PLL test now
X-Scale has joined ##openfpga
<s_frit> is there currently any path to getting an icebreaker before mid-year? (for people who missed the early bird)
Laksen has joined ##openfpga
<daveshah> find someone who bought one at CCC and make them an offer they can't refuse /s
<swetland> board files are on github, no? the truly adventurous could have their own fabbed I suppose!
<tnt> Yeah, it's not that adventurous, it's not that complex.
<tnt> Making a glasgow rev.C, that's adventurous :p
<daveshah> or a tinyfpga ex
<whitequark> daveshah: so, for the example circuit in paper, opt_lut produces 10 LUTs of depth 4
<whitequark> this... really sucks
<whitequark> it's no wonder Fmax is shit
<s_frit> yeah, if i did it, it would be my first 0402 hand solder job
Flea86 has quit [Quit: Goodbye and thanks for all the dirty sand ;-)]
<whitequark> oh, if i tell it to do it with 3-LUTs like in the paper, still 10 LUTs, but depth 5
<whitequark> so over 2x of what's necessary
<daveshah> I almost wonder if the first step is just to look for better heuristics for opt_lut
<whitequark> I think opt_lut should be relegated to a cleanup role, tbh
<daveshah> I was thinking about that.
<daveshah> opt_lut would be very nice to do "LTO" in a hierarchical flow
<whitequark> yep
<daveshah> where you techmap modules individually with ABC/whatever, but might as well do some basic optimisations on the flattened netlist
rohitksingh has joined ##openfpga
<whitequark> ok, so what I'm thinking is
<whitequark> in the paper the nodes are cells
<whitequark> but this doesn't work all that well for rtlil
<whitequark> first, PI and PO aren't cells, they can well be module ports
<whitequark> second, cells can have multiple outputs
<whitequark> so I'm thinking about making *signals* the nodes
<whitequark> actually
<whitequark> i think if i make signals the nodes
<whitequark> i can do techmapping *directly* from coarse cells
<whitequark> or rather
<whitequark> we don't need to call simplemap at all on coarse cells with <=k inputs
<whitequark> because those can be flowmapped directly
<whitequark> and in fact the papers have some indication that this is preferable
<daveshah> Yes, that seems very reasonable
<daveshah> Might have to be a bit careful dealing with multibit signals for coarse cells
<whitequark> oh I'll sigmap everything to wires
<daveshah> Yeap
Miyu has joined ##openfpga
jevinskie has quit [Quit: My MacBook has gone to sleep. ZZZzzz…]
<whitequark> okay, i can extract what looks like a viable graph
<whitequark> time to look at dot again :S
jevinskie has joined ##openfpga
Atlantic778 has joined ##openfpga
<whitequark> looks similar to the paper?
rohitksingh has quit [Remote host closed the connection]
jcreus has quit [Read error: Connection reset by peer]
jcreus has joined ##openfpga
rohitksingh has joined ##openfpga
Atlantic778 has quit [Ping timeout: 252 seconds]
Atlantic778 has joined ##openfpga
<daveshah> yep, looks good
<tnt> whitequark: in glasgow, is there a way to get back the subtarget that was built in the Applet.build() method from a test setup routine ? Like in SPIMasterAppletTestCase.setup_loopback() you get self.applet.mux_interface but what I'd like is the SPIMasterSubtarget ?
<whitequark> tnt: mmm, you could assign it as a property
<tnt> ok tx, I was just wondering if there was some built-in way I wasn't seeing.
<whitequark> nope. glasgow doesn't really do a lot of magic
<whitequark> it does a bit but i try to make it plain python as much as i can
m_w has joined ##openfpga
X-Scale has quit [Quit: HydraIRC -> http://www.hydrairc.com <- Would you like to know more?]
ironsteel has joined ##openfpga
m4ssi has quit [Remote host closed the connection]
mumptai has joined ##openfpga
rohitksingh has quit [Ping timeout: 272 seconds]
tmeissner has quit [Quit: Textual IRC Client: www.textualapp.com]
rohitksingh has joined ##openfpga
ironsteel has quit [Ping timeout: 250 seconds]
Atlantic778 has quit [Ping timeout: 250 seconds]
emeb has joined ##openfpga
<whitequark> lmao
<whitequark> i segfaulted dot
<cpresser> from graphviz?
<whitequark> yeah
<jn__> somehow i first read that as "i segfaulted qDot"
<jn__> plz, brain
<tnt> ... fuck that FXMA ...
<tnt> trying to flash a spi flash ... but of course there are 10k pull ups on the line :/
<whitequark> tnt: i know right.
Atlantic778 has joined ##openfpga
Atlantic778 has quit [Client Quit]
X-Scale has joined ##openfpga
<whitequark> daveshah: i wrote exactly half of the pass.
<daveshah> awesome
<kc8apf> I applied for a job at Lattice to see what would happen. Rejected right away.
<daveshah> :(
<whitequark> what did they reject you for?
<kc8apf> just got a generic rejection letter
ironsteel has joined ##openfpga
<whitequark> huh.
ironsteel has quit [Remote host closed the connection]
octycs has joined ##openfpga
<kc8apf> guess I don't have enough experience in writing FPGA tools *eyeroll*
<daveshah> s/don't have enough/have too much/
<sorear> or maybe the reason has very little to do with anything about you
<kc8apf> sure. they could have had a candidate already lined up but the paperwork wasn't finished
<sorear> a thing Rocket relies on synthesis tools doing: recognizing long chains of multiplexers and converting them into logarithmic priority encoders
<whitequark> i think yosys can do that?
rohitksingh has quit [Ping timeout: 246 seconds]
<whitequark> daveshah: ... and now that i managed to write a DFS correctly, it even works
<whitequark> aaaand we have cuts!
<plaes> o_O
<plaes> cuts?
<whitequark> graph cut
<plaes> and DFS is depth first search? ;)
<whitequark> yes
<plaes> \o/
ayjay_t has quit [Read error: Connection reset by peer]
ayjay_t has joined ##openfpga
pie__ has joined ##openfpga
<whitequark> yes
<whitequark> i'm using that one
<m_w> I used this for circuit partitioning in the past
<m_w> max flow min cut
<whitequark> yes
<m_w> wonder if I still have that code somewhere
<jcreus> it can also be formulated as an LP
<jcreus> not sure how the complexity compares in practice tbh
pie___ has joined ##openfpga
pie__ has quit [Ping timeout: 252 seconds]
tlwoerner has joined ##openfpga
GuzTech has quit [Remote host closed the connection]
GuzTech has joined ##openfpga
<tnt> I removed the FXMA and just connected it through and now at least I can talk to the flash ... rework is ugly though, will have to redo it. Maybe a 0ohm resistor pack would work to cross that gap.
inquisitiv3 has joined ##openfpga
kristianpaul has quit [Quit: leaving]
kristianpaul has joined ##openfpga
octycs has quit [Remote host closed the connection]
Flea86 has joined ##openfpga
jcreus has quit [Ping timeout: 250 seconds]
genii has joined ##openfpga
mumptai has quit [Quit: Verlassend]
Laksen has quit [Quit: Leaving]
<tnt> whitequark: did you actually use the 25c spi flash applet with a real device ?
<tnt> This looks highly suspicious to me: https://pastebin.com/15nbsP5R especially all the incoming 0xff ... since there was no read commands at all requesting that much data.
pie___ has quit [Ping timeout: 260 seconds]
futarisIRCcloud has joined ##openfpga
genii has quit [Remote host closed the connection]
pie___ has joined ##openfpga
Bike has joined ##openfpga
pie___ has quit [Remote host closed the connection]
<tnt> looks like it doesn't like the write of > 256 bytes for the page write command. splitting that into 2 CMD_WRITE commands (using SS_HOLD for the first) solves the issue.
pie__ has joined ##openfpga