Thursday, 2020-04-16

*** tpb has joined #yosys00:00
*** emeb has quit IRC00:03
*** Degi has quit IRC00:23
*** Degi has joined #yosys00:24
*** elGamal has quit IRC01:40
*** elGamal has joined #yosys01:41
*** citypw has joined #yosys01:44
*** TFKyle has quit IRC02:03
*** _whitelogger has quit IRC02:15
*** _whitelogger has joined #yosys02:17
*** az0re has quit IRC02:54
*** az0re has joined #yosys02:54
*** _whitelogger has quit IRC05:48
*** _whitelogger has joined #yosys05:50
*** emeb_mac has quit IRC06:34
*** twnqx has joined #yosys06:58
*** dys has joined #yosys07:14
*** stroboko1p has joined #yosys07:40
twnqxis there a rule of thumb at which point a design becomes too large to be placed, or is that too varying?07:53
daveshahIn general <90% should be OK07:53
daveshahAbove that it can become marginal but that depends on the specifics of the design07:53
twnqxi am at 81% (312/384) and nextpnr fails (lp384) :(07:53
daveshahOn the iCE40 I've seen designs at 98% place and route fine07:54
daveshahDo you have a lot of different set/reset/ce signals?07:54
twnqxhm, i'd be tempted to say "no", but i guess i'll have to think about that07:55
daveshahYou can try the Yosys option -dffe_min_ce_use 407:56
daveshahor -dffe_min_ce_use 807:56
daveshahto synth_ice4007:56
twnqxfun, even 2 makes it work07:58
twnqxthank you!07:58
*** jakobwenzel has joined #yosys08:11
az0reIn Makefile, is `msys2-64` the MinGW 64 bit compiler?08:25
az0reLooks like it08:35
az0reI'm having trouble building on Windows in cygwin, `msys2-64` config, tcl-dev is installed in Cygwin setup08:39
az0reI get: "./kernel/yosys.h:81:12: fatal error: tcl.h: No such file or directory"08:39
az0reDespite tcl.h existing in /usr/include/08:41
az0reI wonder if the build config is missing some that include directory somehow?08:41
daveshahIs there any reason you need to use Cygwin and not msys2 itself?08:43
whitequarkdaveshah: i'm wondering if DFFEs can be legalized back in nextpnr08:44
whitequarkto avoid having dffe_min_ce08:44
daveshahThe problem is that if you want any kind of efficiency you need to re-pack the LUTs08:44
daveshahdffe_min_ce unmaps them before LUT mapping which is even more efficient08:44
whitequarkyup08:44
daveshahI don't want to do LUT transforms in nextpnr yet08:45
whitequarkit feels that maybe abc9 should be a part of nextpn... ahhh08:45
whitequark(not *literally* abc9)08:45
daveshahI have plans for a library that is a bit like that08:45
daveshahfor retiming, physical resynthesis etc08:45
whitequarkthat sounds awesome08:45
daveshahbut it could be a year off, don't get your hopes up08:45
daveshahI think by the time you start doing retiming it becomes needed08:45
whitequarkyup, i understand that08:45
whitequarkit does not sound like something that can be done in a few months, anyhow08:46
daveshahThe first challenge is just designing a netlist structure that is efficient for these kind of transformations, without being restrictive as abc's08:46
ZirconiumXI mean, for what it is, ABC is quite efficient08:47
ZirconiumXJust, lacking a lot of important metadata it seems08:47
daveshahYes, although I want first-class whitebox support08:47
daveshahit may be that AIGs aren't a bad way of representing the contents of boxes08:47
daveshahbut it's finding efficient ways of tracking things like attributes and source tags that's half the problem08:48
whitequarkwhat are the reasons to prefer AIGs or LUTs for whitebox contents?08:48
daveshahImagine a DSP whitebox08:48
whitequarkoh, point.08:48
daveshahIf you represent the whole whitebox as one LUT that is quite big08:48
daveshahYou could use a graph of LUTs, but at that point an AIG is probably just as good08:49
ZirconiumXFrom what I was reading on how FRAIG works, ABC has a library of precomputed optimal AIG for up to 20-inputs08:49
ZirconiumXWhich is a mildly terrifying thought, but08:49
az0redaveshah: Not *need*, I guess, but I prefer it if I must use Windows.  Anyway I just want to test something.08:50
daveshahaz0re: I don't know if anyone compiles Yosys in Cygwin often, but msys2 should be a better trodden path08:51
az0reI see now, though, that there is an explicit cygwin config08:51
az0reWhat exactly is msys2, anyway?08:51
* az0re is not a Windows user08:52
daveshahAs far as I know, msys2 is more of a gnu-style build environment in Windows than a build and runtime environment like Cygwin08:53
daveshahI haven't done much Windows stuff for a few years either08:53
daveshahso might not be quite correct here08:53
whitequarkcygwin provides a POSIX environment to the compiler, the build system, and the application. msys2 provides a POSIX environment to just the compiler and build system08:53
whitequarki.e. cygwin builds produce cygwin-dependent binaries that think they run on a POSIX platform. msys2 builds produce native Windows binaries08:54
az0reI see, thanks.  And how do I compile Yosys with MSVC?08:54
az0reIs it supported at all?  I recall seeing `#if defined(__MSVC)` or similar in the code base08:56
daveshahI think using https://github.com/YosysHQ/yosys/blob/master/misc/create_vcxsrc.sh to create a project is the official way08:56
tpbTitle: yosys/create_vcxsrc.sh at master · YosysHQ/yosys · GitHub (at github.com)08:56
daveshahnot sure if there are other options08:56
az0reAha08:58
az0reThanks08:58
az0reSo it requires Visual Studio and not just the build tools08:58
daveshahI think so08:59
daveshahnever tried myself08:59
az0reI see09:04
az0reThanks for the tips09:04
ZirconiumXThat should probably be added to CI09:04
daveshahYes, it would need someone to set up AppVeyor or similar09:05
daveshahthis could probably also be set up to push Windows nightlies somewhere09:05
*** vidbina_ has joined #yosys09:07
az0reBTW it's building fine now in cygwin with the `cygwin` config.09:16
ZirconiumXIf I want to write a function that returns a character (as part of a string), should it return an 8-bit-wide value?09:20
az0reYes09:22
az0resee `kernel/rtlil.h`: IdString is basically an index to a char*09:22
az0reAlso char* and std::string are common to see in the code base, but never wchar_t* or std::wstring09:24
ZirconiumXquartus_rename.v:111: ERROR: syntax error, unexpected $undefined09:32
ZirconiumXWell this is a terrible error09:32
daveshahPersonally that's usually been from when a UTF-8 char has crept into the wrong place09:33
daveshahor generally something else totally unexpected09:33
ZirconiumXhttps://gist.github.com/ZirconiumX/7efc74cd568d3db85923a54fe5a433e009:34
tpbTitle: string.v · GitHub (at gist.github.com)09:34
ZirconiumXdaveshah: ^09:35
ZirconiumX(I need this because Quartus takes RAM init as a hexadecimal string)09:38
daveshahYou use double quotes even for single characters in Verilog09:38
ZirconiumXOh, right, okay09:39
twnqxand now to understand what the fpga actually does after the changes, correct it do useful and adopt the controller code \o/09:55
*** elGamal has quit IRC10:44
*** elGamal has joined #yosys10:46
*** Vinalon has quit IRC11:02
SarayanOk, I have a RTLIL::SigSpec, and I want to make a new SigSpec that extract a bit of it, can I do that?11:30
mwka single bit?11:31
mwkjust spec[i]11:31
mwkI mean, that gets you a SigBit, but that's perfectly assignable to a SigSpec11:32
Sarayancool, thanks11:32
Sarayanand a bit range while I'm at it?11:32
mwkspec.extract(offset, length)11:33
mwkthis gives you a new SigSpec11:33
Sarayanexcellent, thanks11:34
whitequarkZirconiumX: have you seen how strings work in verilog? it's so cursed11:38
whitequarka n-character string is just a (n+1)*8 bit constant literal11:38
ZirconiumXI have, yes11:39
ZirconiumXAnd I need to manipulate strings in verilog to initialise LUTRAM, whitequark11:39
ZirconiumXBecause Altera fucking hate me I think.11:39
whitequarkright11:40
ZirconiumXSo after getting quite annoyed trying to do it myself, I'm going to see what Quartus does and then copy them11:41
Sarayanwq: You mean like in C? ;-)11:42
mwkSarayan: it's nothing like C...11:42
whitequarkit's very slightly like C?11:43
Sarayanyeah, it's bits and not bytes11:43
whitequarkthe difference is that verilog doesn't have bytes or pointer decay11:43
Sarayanyeah, verilog is decay11:44
mwkI mean, for one, C has types11:44
mwkit's not a high standard, C types, but it is one that Verilog fails to meet11:44
Sarayanwhat's the difference between $logic_not and $not?11:44
mwk$not is per bit, ie. ~signal11:45
whitequarkSarayan: have you looked at cxxrtl.h yet?11:45
mwk$logic_not is ~signal11:45
mwkerr11:45
mwk$logic_not is !signal11:45
whitequarkit has C++ implementations of many cells, which may be helpful11:45
mwkie. it's 1 if all the signal bits are 011:45
Sarayanwq: No, I only use it11:45
Sarayannwk: Ah I see, thanks11:45
Sarayanverilog has ! ?11:45
mwk... how do people keep making that typo11:45
mwkyes, it does11:46
Sarayan        if (!rstn)11:46
Sarayan            cnt <= 0;11:46
SarayanI guess that's a logic-not, whatever the width of rstn11:46
mwkyes11:46
Sarayanok, good11:46
mwkit's equivalent to $not for single-bit signals, of course11:46
Sarayanyeah11:47
Sarayanwhich is why I wasn't seeing the difference11:47
Sarayanif my example had been n:1, It's have guessed I think :-)11:47
SarayanI like the idea of integrating slang given I don't know verilog or rtlil :-)11:47
Sarayanfunniest thing is it's kinda going somewhere11:48
*** fengling has quit IRC12:44
*** vidbina_ has quit IRC14:03
*** jfcaron has joined #yosys14:06
ZirconiumXdaveshah: Does the Xilinx firmware.hex still count primes?14:10
ZirconiumXOr is it just counting up?14:10
*** emeb has joined #yosys14:23
SarayanIn verilog, can you have expression statements that are not assign?14:27
ZirconiumX"expression statements"?14:28
Sarayanwell, that a laguage grammar term, but that all expressions that are use in place of a statement14:29
Sarayane.g. in C you can write 'x++;' which is an expression turned into a statement14:29
Sarayanyou can even write 'x;' but that does nothing14:29
whitequarkdo you mean within processes?14:30
Sarayanand subroutine calls are expressions in C14:30
Sarayanyeah14:30
whitequarki think you can have at least a=b, a<=b, fn(a)14:30
whitequarkactually i'm not sure if "a=b" is an expression in verilog14:31
whitequarki thought it was only a statement?14:31
daveshahSystemVerilog has ++14:31
daveshahI think it is only valid inside always blocks or a few other places like that14:31
daveshahI don't know if it is a statement or expression though14:31
*** hexagon5un has quit IRC14:32
SarayanI think slang has it as expression14:32
Sarayanso I should expect more than just <=14:32
Sarayanoh, it has calls as expressions too, so yeah14:33
Sarayanalso, in rtlil, where is assign hiding?14:33
daveshahmodule->connections_14:33
Sarayaneven the conditional ones?14:34
whitequarkthose are in processes14:34
SarayanRTLIL::Process doesn't have much of an interface14:35
Sarayanlooks like you're supposed to hit RTLIL::Module::processes directly14:40
whitequarkdaveshah: i suspect your SNES thing might be suffering from #1944; can you check at -O2 or even -O0?14:46
daveshahWhat difference should I expect to see?14:47
whitequarkyou had corrupted memory, right?14:48
daveshahNo, that was just a typo on my part14:48
whitequarkahhh ok14:48
daveshahafter fixing that it all appears to work fine14:48
whitequarksweet14:48
whitequarkhow many fps? :D14:48
daveshahNot far off 1fps14:48
whitequarkhm, that's not that bad14:49
whitequarkdaveshah: so here's one theory i'd be interested to test but so far have been unable to14:49
daveshahno, I miscounted, in the proper working one it is about 0.2fps14:49
daveshah12fpm14:50
whitequarkthe theory is that cxxrtl simulation can get faster by exploiting the nature of input verilog, specifically, by translating processes to if/elif statements and just never computing results it doesn't need14:51
whitequarkrather than throwing them aay14:51
whitequarkthe problem is that flatten chokes on processes14:51
whitequarkand on non-flattened designs it makes no difference14:51
daveshahIn this case, that wouldn't help as ghdl doesn't create processes afaik14:51
whitequarkoh14:51
daveshahI think it only creates DFFs and I don't think there's any way to change that14:51
whitequarkok, i see14:52
whitequarkif you see any inefficiencies in the generated c++ i'm all ears14:52
whitequark(that can be fixed)14:52
daveshahSomething I would like is reading memory init from a file, but that depends on the $meminit  cell14:52
daveshah*$memfileinit14:53
daveshahor whatever the file variant would be called14:53
whitequarkwill happily add this if you add the cell14:53
whitequarkit would be also interesting to have some way to say "the contents of this memory is a placeholder called X"14:54
daveshahYeah, I'll think about that14:55
whitequarksweet :)14:55
daveshahIt would be nice to easily do those kind of changes post-PnR in a cleaner way than icebram etc14:55
whitequarkyes, exactly what's that for14:55
whitequarkand in cxxrtl i can just call a user function14:55
mwk... have been thinking the same thing for a while14:57
mwksomething like passing "relocation" attributes along with the blockrams / lutrams / lut roms14:58
mwk"insert file abc.bin bits 1234-1337 here"14:58
mwkprobably with some crazy permutation / bit slicing support14:58
mwkto support all the crazy shit that happens to memories as they get lowered14:59
*** Vinalon has joined #yosys15:13
*** npe has joined #yosys15:22
*** citypw has quit IRC15:39
ZirconiumXmwk: ironically that would probably be what I need15:50
*** brasilino has joined #yosys15:52
*** npe has quit IRC15:53
*** FFY00 has quit IRC16:03
whitequarkdaveshah: oh btw you can just write the entire memory at startup16:04
daveshahOh, that seems like a good option for now16:04
*** FFY00 has joined #yosys16:04
whitequarkI should add an overload for that case16:05
whitequarkor maybe just poke into `top.p_memory.data` directly16:06
*** jakobwenzel has quit IRC16:06
whitequarkthat actually seems like the most reasonable solution for your  case16:06
whitequarkoh, `top.p_memory[index]` should work just as well16:07
whitequarkI forgot I added that16:07
Sarayanthere's an easy direct access to memory?16:19
SarayanI've had to implement cpu write to fill it from c++ for now :-)16:26
*** stroboko1p has quit IRC16:27
whitequarksyre16:28
whitequark*sure16:28
whitequarkyou can do `top.p_memory[0] = value<32> {123u};`16:29
*** jfcaron has quit IRC16:33
*** futarisIRCcloud has quit IRC16:34
whitequarkdaveshah: https://github.com/YosysHQ/yosys/pull/194716:48
tpbTitle: cxxrtl: minor documentation and usability improvements by whitequark · Pull Request #1947 · YosysHQ/yosys · GitHub (at github.com)16:48
whitequarkthis removes const from ROMs so you can update them16:48
ZirconiumXIs there a way to see what memory_bram picks as init value for a memory?17:03
*** twnqx has quit IRC17:03
*** twnqx has joined #yosys17:04
whitequarkwhich cell or which value?17:16
ZirconiumXValue17:17
ZirconiumXI kinda added a hack for it17:17
ZirconiumXSo I can see if the LUTRAM values make sense17:23
*** dys has quit IRC17:28
ZirconiumXY'know, if memory_bram knows it's emitting a ROM (which it can tell by there being zero write ports), and it can tell that an initialiser is a constant value (which it can through initparam) it makes next to no sense for it to be emitting zero-initialised ROMs17:33
ZirconiumXInstead of constant drivers17:34
twnqxthese weird errors creep me out. i switch two values in an emulated ROM, and suddenly my design doesn't fit any more.17:46
ZirconiumXtwnqx: "emulated ROM"?17:47
ZirconiumXThe case statements?17:47
twnqxa case statement on a 3 bit address range, yes17:47
ZirconiumXAnd how many other variables do you use in that case statement?17:48
twnqxnoen17:48
twnqxnone17:48
ZirconiumXTo be fair, consider that ABC - the synthesis engine in Yosys - is heuristic, and subtle changes can cascade into major differences17:49
twnqxhowever, i know something else is broken, i just can't find it yet17:49
twnqxbecause one address is never reached, even though it comes from a counter.17:49
Sarayancounter reset issue, or it's full range?17:49
twnqxthe reset comes from the ROM, my bet is on insufficient sync (too much logic, not enough regs)17:50
twnqxhm, nearly any change too the "ROM" makes it not fit17:52
twnqxand the reset is synchronized even17:55
twnqxwhat does yosys consider a "dead case" for removal? if i have a decode of 2'b0?, 2'10, 2'b11, is there a dead case?18:04
VinalonSpeaking of how 'simplifying' logic can sometimes lead to larger and slower designs, does the ABC algorithm have any sort of 'seed' value that you can manually change?18:04
twnqxhm... what does "number of cells" in yosys output mean?18:11
twnqxif yosys claims 384 cells are needed in an lp384, nextpnr might not be right with 82% utilization...18:12
*** jfcaron has joined #yosys18:12
daveshahThat's total cells of all varieties, some of those will pack together18:12
Vinalonthe timing analysis lists the actual utilization once the design is packed under "Device utilisation:"18:14
twnqxwell, my deisgn is unplaceable18:14
Vinalonit still might show up; I have a design that's showing "ICESTORM_LC:  6755/ 5280   127%" right now :P18:14
ZirconiumXtwnqx: You can fit a LUT4 and a DFF together in an LC, but Yosys counts these as separate.18:15
twnqxboth variants are at 82%, one is mapable, one is not :/18:16
twnqxand in the mapable, one step is not reached18:16
twnqxaaand now it is, ok18:18
twnqxand now it's not again18:19
twnqxwow18:19
twnqxi really must be bad at this18:20
Vinalonas someone who is also still learning about digital design, the tooling can seem sort of opaque sometimes - don't worry if it doesn't feel intuitive18:26
Vinalonalso, I don't think the lp384 has any RAM resources; maybe that complicates memories a little bit?18:26
whitequarkas someone who maintains a HDL, it is frankly not much easier for me to figure out where the heck the resources went18:27
twnqxi have no real memories - just a few counters, buffers, shift registers18:27
whitequarktwnqx: you're not bad at it. the tools are. i even wrote a pass that should somewhat solve this problem, though it's not yet in a state where it'd help you18:27
twnqxwhitequark: the version that compiles changes behavior between different runs. that means i somewhere made a mistake, assuming the tooling isn't broken18:28
twnqxdifferenr runs = different compile runs18:29
whitequarktwnqx: philosophically, if the tools don't help you make deterministic designs, they are, in some ways, broken...18:29
whitequarkbut more concretely18:29
whitequarkis it a fully synchronous design? no generated clocks? only one `posedge x`?18:29
whitequark*only one `x` for every `posedge x` you use?18:29
whitequarkare the external inputs resynchronized to the clock?18:30
twnqxthe parts with two @posedge X are the only ones working reliably (SPI interface), and there are no other inputs, just clock and outputs18:30
whitequarkis the difference in behavor something you observe when using SPI, or is SPI totally unused?18:31
lambdahmm, `opt_muxtree` isn't turning (a ? x : (b ? x : (c ? x : (d ? x : y)))) (four 80-bit muxes) into (a || b || c || d ? x : y) (one 80-bit mux and a cheap or-reduce) - isn't that what it's supposed to do though?18:32
ZirconiumXlambda: no, it's not18:33
twnqxactually, thank you for this pointer... i might be having an issue with an asynchronous reset, though i wonder how i would handle a "load register with value froom shiftregister on CS going high, set to 0 on something internally" without "@(posegde X or posedge reset)"18:34
ZirconiumXlambda: "This pass analyzes the control signals for the multiplexer trees in the design and identifies inputs that can never be active. It then removes this dead branches from the multiplexer trees."18:34
lambdaZirconiumX: oh, right, I misread the manual. is there a pass that should do this then?18:34
whitequarktwnqx: is the SPI clock much slower than the FPGA clock?18:35
twnqxuhhhh and THAT asynchronous signal is not buffered18:35
twnqxsimple as that, that's the nondeterministic part18:35
twnqx(the reset)18:35
ZirconiumXlambda: at present, I don't think so, but whitequark has/had opt_match that I *think* would have detected this18:35
whitequarkZirconiumX: actually you just gave me a great idea18:36
ZirconiumX*proc_match18:36
lambdawell, let's hope ABC takes care of it during synthesis18:36
twnqxthanks again whitequark!18:36
whitequarkZirconiumX: the pass is called proc_match, but what if... it was called opt_match?18:36
ZirconiumX<obnoxious Shakespeare quote about "what's in a rose">18:37
whitequarkZirconiumX: i had the most problems with the part where it translated processes to muxes. what if i just ditch that, and instead make it optimize match order of bits in processes alone?18:37
ZirconiumXI mean, I saw it as an optimisation pass18:37
ZirconiumXBut sure18:37
whitequarkit was combined optimization plus codegen pass18:37
whitequarkbut I think I can extract just the optimization part into a much much smaller pass18:38
whitequarkin fact, I now see I can break it up into at least three different passes18:38
ZirconiumXYou're welcome?18:38
ZirconiumX^^;18:38
whitequarkZirconiumX: thank you. your typo was incredibly helpful actually18:38
twnqxand that one extra flip flop doesn't fit any more *cries*18:39
ZirconiumXwhitequark: I suppose sometimes it just takes that tiny thing to make things click18:40
lambdatwnqx: just stick an external 74xx flip-flop on the board :)18:42
twnqx:P18:42
twnqxtoo bad lattice doesn't make larger LP devices in the QFN casings18:42
twnqxLP1K in QFN32 or so would be nice18:43
ZirconiumXNow for another whitequark hug of Twitter notifications (I don't mind, it's just funny)18:45
* twnqx reduces camera trigger length to ~10µs and reduces the 6 bit counter to 1 bit18:46
twnqxdesign fits.18:46
twnqxnoidea if camera still works, though...18:46
lambdatwnqx: oh, high speed cameras? (sorry, your nick doesn't ring any bells here)18:48
twnqxno, not really, but external trigger18:48
twnqxtheoratically 160fps tops18:49
lambdaah, neat18:49
twnqxsadly the jetson nano connected to it can only process 20fps :P18:49
twnqxalso global shutter to not cause issues with PWM dimmed LED lighting... and the fpga controlls all of that (LED sequence, PWM dimming, camera trigger)18:51
lambdaI was wondering what the precise shutter control was about, that makes sense18:52
ZirconiumXtwnqx: You're doing all of that in an LP384, and I'm eating up a HX8K just to generate chess moves18:53
twnqxheh, it's just a bunch of counters and a shiftregister that can load some paramaters18:53
ZirconiumXI, uh, use quite a lot more than that18:54
twnqxback in university i did image processing on a... virtex 2 i think, that was also a bit more18:54
lambdagood news: synth_ice40 manages to figure out those mux chains and uses the same amount of LUTs as with only one mux in the RTLIL18:54
twnqxmy size problems really started when i needed a third 24bit brightness set and a one-of-three mux...18:55
*** Vinalon has quit IRC19:06
*** Vinalon has joined #yosys19:20
twnqx*sigh* now nextpnr fails with 78% device utilization19:44
twnqxdaveshah: following your suggestion of -dffe_min_ce_use 8 causes "Warning: Wire top.spislave.cmd has an unprocessed 'init' attribute." (unlike e.g. 4, which keeps the design unplaceable) - is that critical?19:48
*** ayazar has joined #yosys19:48
*** adjtm has quit IRC20:19
ZirconiumXtwnqx: Yes; I treat a similar situation in synth_intel_alm as a hard error20:25
ZirconiumXIt means Yosys was unable to implement a flop in logic20:25
ZirconiumXOr, well, emulate specific flop semantics20:26
mwkit means some register initial value was ignored due to being unimplementable20:26
mwkit could either be due to a FF type not supported in hardware (say some targets cannot support a ff with async set and initial value of 0), or due to an initial value attached to something where it doesn't make much sense in the first place20:27
mwkare you using FFs with async set/reset?20:27
daveshahIt sounds more like a bug in dffe_min_ce_use20:28
*** katharina has joined #yosys21:24
twnqxwell, in my particular case i'll just don't care... i am trying to init it to 0 anyway21:41
twnqxmwk: and yes, one bit of this has an async reset21:42
mwkreset or set?21:43
twnqxreset21:43
mwkthat should work21:44
twnqxit throws no warning in yosys until i go to -dffe_min_ce_use 8, but with less than that nextpnt can't route it21:44
twnqxand i am really a bit stumped as i am now below 80% utilization in nextpnr21:45
daveshahPlace, or route?21:46
twnqx"ERROR: Unable to find legal placement for all cells, design is probably at utilisation limit."21:47
twnqxso, place21:47
daveshahCan you try with --placer sa as a nextpnr argument?21:48
daveshahSometimes I think SA does slightly better at designs on the margins of placement21:49
twnqxthat works....21:49
twnqxthat even works without any --dffe_min_ce_use21:50
daveshahOh, that's interesting, I think there is definitely room for improvement in HeAP there then21:50
daveshahI'll add that to my TODO list21:50
*** adjtm has joined #yosys21:51
*** jfcaron has quit IRC22:03
*** ayazar has quit IRC22:34
*** twnqx has quit IRC22:51
*** X-Scale` has joined #yosys23:03
*** X-Scale has quit IRC23:04
*** X-Scale` is now known as X-Scale23:04
*** adjtm has quit IRC23:13
*** futarisIRCcloud has joined #yosys23:18
*** adjtm has joined #yosys23:27

Generated by irclog2html.py 2.17.2 by Marius Gedminas - find it at https://mg.pov.lt/irclog2html/!