sb0 changed the topic of #m-labs to: ARTIQ, Migen, MiSoC, Mixxeo & other M-Labs projects :: fka #milkymist :: Logs http://irclog.whitequark.org/m-labs
fengling_ has joined #m-labs
fengling_ has quit [Ping timeout: 240 seconds]
fengling has joined #m-labs
fengling has quit [Client Quit]
fengling has joined #m-labs
fengling has quit [Client Quit]
fengling has joined #m-labs
fengling has quit [Client Quit]
fengling has joined #m-labs
<rjo> GCLK_IN->IBUFG->BUFIO2->PLL->BUFG->DCM->BUFGMUX->PLL->BUFPLL->IOSERDES2 ...
<GitHub23> [migen] jordens pushed 1 new commit to master: http://git.io/vYXbb
<GitHub23> migen/master a11d065 Robert Jordens: pipistrello: fix cts/rts...
travis-ci has joined #m-labs
<travis-ci> m-labs/migen#65 (master - a11d065 : Robert Jordens): The build passed.
travis-ci has left #m-labs [#m-labs]
<GitHub185> [artiq] jordens pushed 4 new commits to master: http://git.io/vYXpi
<GitHub185> artiq/master 9ac5bc5 Robert Jordens: rtio: add spartan6 serdes, 4x and 8x
<GitHub185> artiq/master 8e92cc9 Robert Jordens: pipistrello: use 4x serdes for rtio ttl
<GitHub185> artiq/master e95b06e Robert Jordens: pipistrello: tie unused dds.p low
<sb0> rjo, I'd keep the ifdef CSR_RTIO_CRG_PLL_RESET_ADDR
<rjo> ok.
<rjo> i'll revert
<sb0> this way, you can quickly run on a new platform with just ttl_simple
<GitHub14> [artiq] jordens pushed 1 new commit to master: http://git.io/vYXpF
<GitHub14> artiq/master f0a7078 Robert Jordens: Revert "rtiocrg.c: pipistrello also has pll_reset"...
<rjo> ack.
<rjo> how broken is the bios/runtime compilation ATM? on a scale from 0 to 10?
<sb0> the runtime should also support configurations without DDSes at some point...
<sb0> the bios doesn't build, the runtime builds but doesn't boot. so pretty broken.
<rjo> yep. that would be nice. a bit of autodetection.
<sb0> it works fine if you revert the misoc commit that switches to clang
<rjo> the bios builds here but is broken.
travis-ci has joined #m-labs
<travis-ci> m-labs/artiq#342 (master - f0a7078 : Robert Jordens): The build has errored.
travis-ci has left #m-labs [#m-labs]
<sb0> on kc705 or pipistrello?
<rjo> pipistrello
<sb0> whitequark, what happens on yours?
<whitequark> sb0: builds and runs, with CRC passing
<whitequark> rjo: are you using whitequark/llvm-or1k? I've just noticed the instructions incorrectly direct the reader to openrisc/llvm-or1k
<whitequark> sb0: we will need a fork of llvmlite in m-labs org after all, since our LLVM is 3.5 and upstream llvmlite is 3.6
<whitequark> so it needs a backport.
<sb0> checkout an older commit?
<sb0> but you made modifications, right?
<whitequark> I have a dozen on top of that, unmerged by upstream yet
<whitequark> yes
<whitequark> that's why.
<sb0> so many complications. sjlj was great.
* whitequark shrugs
<sb0> you should have write access
<rjo> i tried what is in get-toolchain.sh
<rjo> but it might be the bitstream. i messed with that as well.
<whitequark> rjo: how does the brokenness look?
<rjo> no output on serial port
<whitequark> it is very unlikely that that would be the result of a bios miscompilation
<whitequark> the banner print is one of the first things it does and there is little that can go wrong before that
<rjo> i cab imagine a bunch of things going wrong before that!
<whitequark> well, not inside the BIOS image, i mean.
<rjo> but it is likely the bistream in this particular case.
<whitequark> I'm not responsible for broken bitstream :p
<whitequark> ok, let's fix... all of these bugs
<rjo> that can change.
<whitequark> rjo: mhm?
<rjo> i presume you will start messing with the bitstream at some point.
<whitequark> sure
<whitequark> ... i should get an i7 and overclock it to 4GHz or something. xst is aggravating
<rjo> yeah. needs a different development style.
<whitequark> i have this R134a based refrigerator i assembled for some reason. could put it to a good use.
<whitequark> how high can you overclock a cpu that's at -20?
<rjo> not much.
<whitequark> also have a 20K cold head.
<whitequark> but it's only about 4W at that temp.
<rjo> i would guess 20% at most.
<rjo> you can parallelize trian-and-error compilations with ise or vivado pretty well. but you have to remember what they are.
<rjo> sb0: at some point i wanted to make ".add_constant()
<rjo> " look more like a CSR
<rjo> is that useful?
<sb0> you could push some of the constants into the cores I guess
<rjo> basically CSRConstant. Is a Signal(), can be used in FHDL, becomes a constant in csr.h
<sb0> self.some_value = ExportedConstant(42)
<rjo> self._fine_ts_width = CSRConstant(8)
<sb0> a Signal()? how?
<sb0> yes
<sb0> you can use numerical values in FHDL
<sb0> they don't need to be Signal
<rjo> ok. even better. then just a "Value()".
<sb0> the main issue is when you try to slice them
<sb0> and it seems you need ruby to monkey-patch integer operations
<rjo> is a Signal() to wasteful?
<sb0> create a Signal() and then assign it a constant?
<sb0> it will clutter the verilog output, but xst/vivado should generate the same netlist I think
<rjo> yes. which do you prefer? slicing would be nice.
<sb0> yes, but that's a general problem that is not limited to those constants that are exported
<sb0> a way to fix it is to encapsulate all ints
<sb0> but it clutters the syntax, e.g. x.eq(x + c(1))
<sb0> though that may be a lesser evil than the slice problems
<sb0> also easy to report errors when c() is omitted
<rjo> hmm. are we talking about the same thing?
<rjo> afaict CSRConstant would need encapsulation anyway
<sb0> no, two things
<rjo> because it needs a name etc to show up in the header
<sb0> 1) CSRConstant, that exports constants to csr.h
<rjo> you are talking about making python integers more fhdl-amenable.
<sb0> 2) C() that allows slicing integers
<rjo> ack. i'll look at 1)
<sb0> you were proposing to workaround for the lack of #2, a general problem with migen, in the specific case of #1
<rjo> no. just 1).
<rjo> 2) is pretty orthogonal to 1) afaict.
<sb0> yes
<sb0> so, slicing the value of a CSRConstant in FHDL will still break. no workaround with Signal().
<rjo> why?
<sb0> because all those workarounds have to be cleared up if/when C() or similar is introduced
<rjo> ah. "will break in the future". yes. is that ok?
<sb0> do you have the need to slice those constants right now?
<rjo> not specifically. but i can see people wanting to flen() etc them.
<sb0> flen(int) is fine
<sb0> (which is why it's flen() and not len())
<rjo> but it depends on the value, not the "type"
<sb0> I meant: flen(some int)
<rjo> ok. maybe a bad example.
<sb0> another way to fix the slice problem would be to introduce a slice() function instead of using the python slice syntax
<sb0> fslice
<rjo> ack. i'll make CSRConstant expose a real python int as its .value.
<rjo> did i not write fslice()?
<sb0> as slices are used less often than int constants, I guess the overall amount of syntax clutter is less
<rjo> there is fslice()
<sb0> ok, then deprecate []?
<rjo> [] is very sweet syntactical sugar compared to fslice().
<sb0> but it breaks on ints.
<rjo> even if it is not all that coherent.
<rjo> yes. so use fslice() if you can also cope with an int, and [] if you expect a Value()
<sb0> sounds a bit obscure ...
<rjo> it would not make a purist smile. true.
<sb0> also, you can be sure that someone will write a core that uses [], and then someone else will put an integer into it later
<sb0> or the same person a few years later
<rjo> yep. i guess i could cite a line from "import this" that anoints such an implementation ;)
<rjo> imho it would be better to restrict the use of unencapsulated ints (by convention or by code) to some notion of "local use" where it is obvious that you can not [] them. and then only allow C() to be passed around.
<sb0> how do you define "passed around"?
<sb0> function arguments?
<rjo> and and self attributes.
<sb0> how do you write general code that can detect things like f({"a": 1}) vs. f({"a": C(1)}) ?
<sb0> blocking "self.x = 1" would also be a problem
<rjo> yes. Modules would need to define their signature.
<sb0> modules have legitimate uses for int attributes
<rjo> as part of their public FHDL interface?
<sb0> public interface in general
<rjo> i am not saying enforcing a module signature is a good or beautiful idea. but afaict it would be the only way to keep []-slicing and ints as valid operands.
<rjo> well you would have to define a FHDL interface that Modules expose that only contains Signal(), Record(), Constant() etc things.
<whitequark> I think signature enforcement is good
<whitequark> you could return a proxy object from `params` or something
<whitequark> mod.params.a = 1
<rjo> but anyway. that fear of yours where somebody passes an into into a module that expects a Value() already works for passing a Record.
<sb0> what if a Module exposes a submodule (or any other class really) that contains Signals?
<sb0> or a module that exposes another class that exposes another class that contains signals
<rjo> i prefer the flexibility of migen without having to write up interfaces all the time.
<rjo> submodules would be part of the interface.
<rjo> i think.
<sb0> yes, Record should probably be more signal-like
<sb0> that's something that's fixable I think, unlike int slicing that python won't allow
<rjo> damn. i broke the gateware but have no idea how. head is broken on pipistrello. ae3a52c works, e95b06e doesn't.
<sb0> is the pll locking?
<rjo> would the rtio-pll not locking prevent the bios from booting?
<rjo> sys_clk runs from the other pll.
<sb0> does it have STARTUP_WAIT?
<rjo> STARTUP_WAIT="FALSE"
<sb0> for the DCM, not the PLL
<rjo> aeh
<sb0> i_RST=ResetSignal() on the DCM looks a bit suspicious
<rjo> that worked fine so far.
<rjo> what is wrong about it?
<sb0> maybe there's nothing wrong, but why is it necessary?
<rjo> do PLLs have STARTUP_WAIT? can't find it in ug382
<sb0> they do on 7 series
<sb0> is that new?
<rjo> that i_RST on the DCM. it is fed by the other pll. does it not need to be held in reset while the first pll is not locked?
<sb0> oh, you're cascading those things...
<sb0> why not connect the DCM directly to the clock pin? is PAR failing?
<rjo> GCLK_IN->IBUFG->BUFIO2->PLL->BUFG->DCM->BUFGMUX->PLL->BUFPLL->IOSERDES2 ...
<rjo> that is the full cascade.
<rjo> par is happy.
<rjo> iirc you added the DCM back in the days.
<sb0> ah yes, S6 PLLs don't have STARTUP_WAIT and they introduced it in 7 series
<rjo> hmm. too tired to fix that. i'll back out that thing.
<sb0> you may also try different PAR PRNG seeds
<rjo> tried a few runs already.
<rjo> but from the docs i don't think there is a par prng.
<rjo> this ...table... thingy does not look like a seed.
<sb0> it is a seed
<rjo> ha. does that make par reproducible?
<GitHub145> [artiq] jordens pushed 1 new commit to master: http://git.io/vY1t1
<GitHub145> artiq/master 1809a70 Robert Jordens: Revert "pipistrello: use 4x serdes for rtio ttl"...
<rjo> sb0: "-t (Placer Cost Table)"?
<sb0> yes
<sb0> "A cost table is nothing more than a random seed to placement."
<rjo> "This option is available for Spartan®-3, Spartan-3A, Spartan-3E, and Virtex®-4
<rjo> devices only"
<rjo> and given that "default is 1", i would expect much more reproducibility.
<sb0> Xilinx sometimes receive comments such as "All I did was change the net name and now my design does not meet timing"
<rjo> sure. i see that all the time.
<sb0> same :)
<rjo> but the placer cost table can't be it.
<sb0> that AR also lists S6
<rjo> ah.
<rjo> it is for MAP as well.
<rjo> but then, "default is 1" implies it is not the only randomnes factor.
<rjo> sb0: btw: i tried ppp on the new uart: no real change. but i suspect it might just be congestion and lack of flow control.
<rjo> which i think you already suspected as well.
<sb0> I think there are two bugs
<sb0> congestion plus something else
<sb0> even with a slow data rate on TCP it breaks
<rjo> i did not test that. ping -f with size < ~180 bytes was fine, above that it got bad very quickly.
<sb0> TCP crawls at one packet every 10 seconds or something like that
<rjo> yeah. maybe rts/cts would be cool. it is all wired up. would just need hooking up to the fifo.
<rjo> damn xilinx. i tolerated all the insults of ise when piecing together that clock cascade and made so many sacrifices to the xst/map/par gods. and no it won't make rain.
<rjo> ah well. need sleep. see y'all tomorrow.
<sb0> gn8
<sb0> and yes, this is my general experience with clocking spartan-6s as well...
travis-ci has joined #m-labs
<travis-ci> m-labs/artiq#343 (master - 1809a70 : Robert Jordens): The build has errored.
travis-ci has left #m-labs [#m-labs]
<whitequark> sb0: I have bad news and good news
<whitequark> bad news is that I don't know how to make clang use the right as
<sb0> well, worst case we can brutally patch that crap and hardcode or1k-linux-as in it
<whitequark> the good news is that I just implemented all the missing behavior in LLVM's assembler.
<sb0> is the runtime working now?
<whitequark> well, it was working before with external as, but both BIOS and runtime build on internal now
<sb0> er, runtime crashes on boot here
<sb0> ok, anyway, that fixes the as issue
<whitequark> yes. that's a different issue, which I cannot so far reproduce
<whitequark> yes
<whitequark> wasn't very hard
<whitequark> let me rebuild the tarball
<sb0> I'm just going to recompile
<whitequark> well, CI still needs it
<whitequark> I hope that has been the last LLVM fix for OR1k...
<sb0> famous last words :)
<whitequark> lol, yes
<whitequark> sb0: let me push the -integrated-as switch
<GitHub161> [misoc] whitequark pushed 1 new commit to master: http://git.io/vY1bK
<GitHub161> misoc/master 03ebc73 whitequark: Pass -integrated-as to clang....
<sb0> works. also the bios doesn't overflow anymore.
<sb0> I take it back
<sb0> I probably had an old object file somewhere first time I compiled
<whitequark> hmmm, sdram.o builds here. meaning you have some option I don't have
<whitequark> it gave you the files to attach to bug report.
<sb0> ./make.py -X XXX/artiq/soc -t artiq_kc705 build-bios
<whitequark> can you please do it?
<whitequark> oh, I guess that also works
<sb0> actually, run ./make.py -X XXX/artiq/soc -t artiq_kc705 clean before
<whitequark> ImportError: cannot import name 'ttl_serdes_7series'
<sb0> git pull artiq
<sb0> mh
<whitequark> same
<sb0> wtf?
<sb0> did you setup.py artiq?
<whitequark> ohh
<whitequark> is there some mode so that I don't have to do it all the time?
<sb0> PYTHONPATH=XXX/artiq or (Robert's favorite) setup.py --develop
<whitequark> option not recognized...
<sb0> ah, it's without --
<sb0> I use the first way
<whitequark> develop --user seems to have worked
<whitequark> errrr
<whitequark> mibuild.generic_platform.ConstraintError: Resource not found: user_sma_gpio_p:None
<sb0> same with migen
<whitequark> right
<whitequark> ok, reproduced
<whitequark> LLVM has this wonderful tool called bugpoint for these cases
<whitequark> you run something like "bugpoint -run-llc-ia file.bc" and go drink some tea
<whitequark> by the time you're back, you have a minimal test case.
<whitequark> hrm, that's not very reduced
<whitequark> well, whatever, should be easy to fix anyway
<GitHub131> [misoc] enjoy-digital pushed 2 new commits to master: http://git.io/vYMCU
<GitHub131> misoc/master 405efc5 Florent Kermarrec: update lm32 with "Switch to -fPIC" changes.
<GitHub131> misoc/master 5e61785 Florent Kermarrec: Merge branch 'master' of https://github.com/m-labs/misoc
<whitequark> oh, wrong args
<whitequark> so, it tries to generate:
<whitequark> l.lwz r3, got(.str11)(r4)
<whitequark> ... which is an instruction selection bug
<sb0> whitequark, are the llvmlite problems solvable by checking out an older revision?
<whitequark> on master, sure, you can just check out the revision that's specified in the manual anyway
<whitequark> I haven't modified anything llvmlite-related on master
<sb0> Release 0.5.1 looks ok, at least to the point that it compiles and installs
<sb0> and master works. at least, _that_ is not broken.
<whitequark> that's with clang, right?
<whitequark> oh, wait, you can't compile
<sb0> runtime/bios compiled with gcc
<sb0> latest llvm from your repository, llvmlite 0.5.1
<whitequark> ok, I've fixed this bug
<whitequark> let me write the commit
<sb0> i wonder how many PRs every tool or library we're using will have collected before artiq 1.0
<whitequark> many.
<whitequark> i consider this a feature
<whitequark> *someone* has to sweep all this shit. i can, therefore i (probably) should
<whitequark> interestingly, had i selected the path of least resistance, i would almost certainly not have the skills that bring me here, today
<whitequark> one of the things that could have never possibly worked
<whitequark> although
<whitequark> ohhhhh i see
<whitequark> or1k-linux-as accepts that relocation
<whitequark> still, the generated code would fail if you tried to link it while having over, uh, 8192 global symbols
<GitHub19> [artiq] sbourdeauducq pushed 1 new commit to master: http://git.io/vYMDO
<GitHub19> artiq/master 8e391e2 Sebastien Bourdeauducq: kc705: generate 10MHz clock on GPIO SMA...
<whitequark> i guess it means generating one instruction per global address load instead of three, but this has to be done consistently--why do loads like these use a 16-bit relocation and one instruction, but e.g. plain address calculations use three instructions and gotoffhi/gotofflo
<whitequark> this makes no sense
<whitequark> sb0: does the bios boot now?
<sb0> or1k-linux-ld: bios.elf section `.rodata' will not fit in region `rom'
<sb0> or1k-linux-ld: region `rom' overflowed by 908 bytes
<sb0> can probably increase, just make sure it doesn't bump into anything else
<sb0> otherwise, yes, sdram.c no longer crashes clang
<whitequark> well, that much I know, I fixed it
<whitequark> ohhhhhhh
<whitequark> no, it won't work
<whitequark> I completely misunderstood the point of that relocation.
<whitequark> gotoff(x) is an offset from GOT itself to x, whereas got(x) is an offset to the position of x inside GOT
<whitequark> so, the first is used in a pc-relative calculation of an address you already know, whereas the second is used in calculating the address of a pointer you *don't* know
<whitequark> it also tells the linker it should actually put the GOT entry there, etc
<whitequark> let me fix this...
<whitequark> hm, almost
<whitequark> ok, fixed
<whitequark> sb0: can you check?
<whitequark> ok, what is the next thing that is broken?
<sb0> mh, why do I get a merge after pulling llvm
<whitequark> rebased it
<sb0> I didn't modify anything
<sb0> ah
<sb0> the solution is "git reset --hard origin/master", correct?
<whitequark> yes
<sb0> flashing bios. hopefully that won't bork my board ...
<sb0> works :)
<whitequark> amazing
<whitequark> clang with -fPIC, right?
<sb0> yes
<sb0> runtime is still crashing. one major difference is that I have lwIP
<whitequark> how does it crash?
<sb0> "ARTIQ runtime bui" and freezes
<sb0> at boot
<whitequark> sounds like an interrupt-related problem
<sb0> if you want to try lwIP, you can get the ppp branch
<whitequark> ok
<sb0> or crashing while transmitting on UART
<whitequark> that's unlikely, it works well on pipistrello
<sb0> i.e. the banner gets put in the UART buffer, then slowly sent out while init continues and at some point crashes the CPU to the point that the UART ISR breaks
<sb0> well, lwIP may do some damage
<whitequark> ah I see
<sb0> ah, also: BIOS CRC failed (expected 6bebefff, got f6aa27c0)
<sb0> I missed that
<whitequark> that's odd.
<sb0> I disabled lwIP (and built a serial runtime like yours) and it still crashes the same
<whitequark> let me try and look at the kc705 binaries
<sb0> also, the UART ISR breakage theory is confirmed
<sb0> adding uart_sync() after the banner causes it to be displayed completely
<sb0> it apparently crashes in clock_init()
<whitequark> let's see
ylamarre has joined #m-labs
<whitequark> can you narrow it down to a particular function in clock_init?
<sb0> er, rtiocrg_init, sorry
<sb0> can you enter test mode by pressing 't'?
<sb0> that doesn't work either
<whitequark> on pipistrello, all that works
<whitequark> various test commands as well
<sb0> seems to be more precisely in rtiocrg_switch_clock
<sb0> busywait_us
<whitequark> hm, I am somehow not surprised
<whitequark> let's see
<sb0> ok what crashes it is
<sb0> us*(long long int)identifier_frequency_read()/1000000LL;
<sb0> and this code is never executed on the pipistrello runtime
<sb0> ethernet works, and loading the default kernel from flash also worked
<whitequark> i am guessing that what kills it is a call to __muldi3
<GitHub80> [misoc] sbourdeauducq pushed 1 new commit to master: http://git.io/vYyLB
<GitHub80> misoc/master f2eff4d Sebastien Bourdeauducq: soc: increase default BIOS size
ylamarre has quit [Quit: ylamarre]
<whitequark> yep, repro'd
<sb0> 't' also works actually, don't know why it didn't the time before
<sb0> pebkac, maybe
<whitequark> interesting
<whitequark> I hoisted that code into main and now it does this
<whitequark> ARTIQ ruAAAARAAAAAAAAAAARAAAAAAAAAAARAAAAAA
<whitequark> andso on
<sb0> the cries of the frightened pipistrello :-)
<whitequark> heh
stekern_ is now known as stekern
<whitequark> hm, no, has nothing to do with compiler-rt
<whitequark> well
<whitequark> it divides by zero.
<whitequark> l.ori r4, r12, 0
<whitequark> l.jal __divdi3
<whitequark> r12 is never used before.
<whitequark> ... that's a constant
<whitequark> that's 1000000
<whitequark> why does it pull a register out of thin air instead
<whitequark> i bet it tried to rematerialize something and failed at it
key2 has joined #m-labs
<whitequark> ah, that's just return registers for i64
<sb0> what is this "exciting books" thing? :)
<whitequark> some guy is paid to draw enormous amounts fake book covers on incredibly specific topics
<whitequark> it's a part of some kind of ARG. the pictures of books and ISBNs encode a message or something
<whitequark> whatever. I find the ARG boring. but the covers are great
<whitequark> sb0: say, is there some kind of instruction mor1kx doesn't implement?
<whitequark> barrel shifter?
<sb0> it has a barrel shifter, afaik
<whitequark> ... hrm
<whitequark> __builtin_clz.
<whitequark> yep
<whitequark> crashes at l.fl1 r3, r3
key2 has quit [Ping timeout: 246 seconds]
olofk has quit [Ping timeout: 246 seconds]
<whitequark> parameter FEATURE_FFL1 = "NONE",
<whitequark> by default
<whitequark> ok, I will add a predicate (-m flag)
<sb0> ah? is that not enabled in misoc?
<sb0> we have a large FPGA, we can just enable iot
<sb0> *it
<sb0> there's also ADDC and CMOV which are disabled
FabM has quit [Quit: ChatZilla 0.9.91.1 [Firefox 39.0/20150630154324]]
<sb0> whitequark, so the problem is solely that l.fl1?
<sb0> no r12 issue?
<whitequark> no r.12 issue. I was misreading the ABI.
<whitequark> we should enable it but there also should be a flag
<whitequark> for other users/uses etc
<whitequark> it's like three lines anyway
<sb0> ok, it works after enabling it
<sb0> cool!
<whitequark> ok
<whitequark> so master is now fully working?
<sb0> BIOS CRC fails
<whitequark> ah. hm.
<whitequark> I got that once, when I flashed it
<sb0> just rebuilt and flashed it again, the problem persists
<sb0> and that never happened with gcc
<whitequark> ok, I will try to reproduce
<whitequark> might be a linker script issue somehow
<GitHub31> [misoc] sbourdeauducq pushed 1 new commit to master: http://git.io/vYyAK
<GitHub31> misoc/master b7aff65 Sebastien Bourdeauducq: mor1kx: enable ADDC, CMOV and FFL1 instructions
<whitequark> garbage at end
<sb0> installing llvmlite backport-3.5 ...
<whitequark> why does mor1kx has optional /sra/?
<whitequark> not sll. not srl. just sra.
<sb0> yup, afaict everything works on master, except BIOS CRC, travis/conda, and doc
<sb0> ("doc" = update llvmlite url)
<whitequark> I will fix doc
<whitequark> can you fix travis? I don't understand the nature of the error
<sb0> ImportError: No module named 'mibuild'? wtf?
<sb0> how did that happen?
<sb0> it appeared between #328 and #334....
<sb0> meh and in between there was this clang glibc issue
<sb0> travis is completely borked
<sb0> didn't take long ...
travis-ci has joined #m-labs
<travis-ci> m-labs/artiq#325 (master - aba2d3f : Sebastien Bourdeauducq): The build has errored.
travis-ci has left #m-labs [#m-labs]
<cr1901_modern> I noticed mibuild has an fpgalink programmer now... is that the better alternative to x3scprog and friends?
<sb0> my favorite vacuum shop has changed its slogan. its no longer "the best for you love you forever", but "scinence (sic) initiates quality and sincerity creates a brand"
<cr1901_modern> English is terrible.
<rjo> i like how you can read it in different ways.
<rjo> whitequark, sb0: current breakage status? ok to work on top of misoc-master? which llvm/binutils?
<rjo> sb0: what's the rationale to LCK_cycle:6 per default in ise.py?
<sb0> upstream binutils + llvm from whitequark's repos + clang-or1k + llvmlite from whitequark's repos (backport3.5 branch) is fine
<rjo> in my exegesis of the xilinx scriptures that globally waits for all dcm/pll to lock irrespective of STARTUP_WAIT.
<sb0> the only problem I've seen so far is the BIOS CRC check fails, but it's minor
<rjo> do the tarballs suffice?
<sb0> for what? binutils? yes
<rjo> and llvm
<sb0> don't know about those
<sb0> the install instructions from source http://m-labs.hk/artiq/manual/installing.html#installing-from-source are fine except for the llvm and llvmlite URLs
<sb0> I don't remember about LCK_cycle. used that 5 years ago and it stuck...
<rjo> i am too lazy to compile llvm.
<sb0> the good news is gcc is no longer needed
<sb0> hmm, seems not
<rjo> now with 19 (i/o)serdes running at 500MHz this guy is getting a bit warm...
<rjo> isn't llvm supposed to be fast (-er than gcc)?
<rjo> that llvm tarball works (apart from the crc thing).
<rjo> sb0: i'll have pipistrello put a 4x serdes on pmt0/1 and ttl0/1 and a 8x serdes on ttl2, will leave the higher ttls on a simple to try to save power.
<GitHub44> [artiq] jordens pushed 3 new commits to master: http://git.io/vY9OP
<GitHub44> artiq/master 9dfbf07 Robert Jordens: pipistrello: use 4x serdes for rtio ttl...
<GitHub44> artiq/master fb339d2 Robert Jordens: serdes_s6: no need to reset
<GitHub44> artiq/master 67715f0 Robert Jordens: pipistrello: only put serdes on the lower ttls...
<cr1901_modern> sb0: Did you get any patches/emails from me? sendmail is being a POS
<cr1901_modern> Nevermind... I broke postfix, so no you didn't
cr1901_modern has left #m-labs [#m-labs]
<whitequark> rjo: yes, tarballs should be ok
cr1901_modern has joined #m-labs
<rjo> whitequark: why is llvm so slow?
<whitequark> rjo: huh?
<whitequark> in what use case?
<rjo> bios and runtime take ~3 times as long with llvm compared to gcc.
<rjo> maybe twice as long.
<rjo> but significantly longer.
<rjo> iirc llvm was very proud of being fast.
<whitequark> it is; building llvm itself, for example, used to be 2-3 times faster than gcc (then gcc caught up circa 4.9)
<whitequark> I'm guessing some poor choices in the backen
<whitequark> d
<whitequark> ohhh wait
<whitequark> no
<whitequark> it's built with -DLLVM_ENABLE_ASSERTIONS=ON
<whitequark> and I'm fairly sure -O1
<rjo> that needs a remove-before-flight tag if we benchmark kernel compilation or "release".
<whitequark> yes
<whitequark> the former is kept currently because I would like the backend bugs to not be silently swallowed
<whitequark> the latter, because -O3 or even -O4 takes a looooot of time
<rjo> i kinda liked -Os for embedded systems that don't have such a perfectly optimized icache path. also that made the bios fit onto small boards.
<whitequark> no, I mean LLVM itself is built with -O1
<whitequark> which is why it's slow
<whitequark> the code is still built with -Os; it's bloated right now because of -fPIC
<whitequark> that reminds me.
* whitequark hides from sb0
<whitequark> we don't *actually* need -fPIC in libbase and friends. i thought these would be built into kernels. but then sb0 said that a kernel .so would just consist of the sole kernel object file, linked as shared object
<whitequark> which makes sense
<whitequark> and if that's the case, all the support libs are at known locations already. so no -fPIC needed.
<whitequark> thus, yo'll get back your more compact code
<rjo> whitequark: ack.
<whitequark> I guess it is good that we debugged -fPIC anyway, since it will still be used for kernels themselves
<whitequark> and just as well, we now know that it's safe to use if needed.
<whitequark> er
<whitequark> flags done.
<GitHub73> [artiq] whitequark pushed 1 new commit to master: http://git.io/vYHvi
<GitHub73> artiq/master f355175 whitequark: Specify correct llvmlite branch in installation instructions.
<GitHub2> [artiq] whitequark force-pushed master from f355175 to b179430: http://git.io/vYgPK
<GitHub2> artiq/master b179430 whitequark: Specify correct llvmlite branch in installation instructions.
<whitequark> rjo: speaking of optimization flags
<whitequark> -Os is actually more like -O2 that seeks to compact code rather than make it faster
<whitequark> that is, if you look at the complexity of compiling
<whitequark> and the set of passes used
<rjo> yes.
travis-ci has joined #m-labs
<travis-ci> m-labs/artiq#346 (master - f355175 : whitequark): The build has errored.
travis-ci has left #m-labs [#m-labs]
<whitequark> grrr, why does that fail
<whitequark> I don't understand why can't it find mibuild
travis-ci has joined #m-labs
<travis-ci> m-labs/artiq#347 (master - b179430 : whitequark): The build has errored.
travis-ci has left #m-labs [#m-labs]
<rjo> whitequark: if we keep llvmlite in a repo, shipping the patches separate does not make sense.
<rjo> unfortunately that renaming breaks editable installs. needs a symlink.
<rjo> whitequark: llvmlite: OSError: libLLVMObjCARCOpts.so: cannot open shared object file: No such file or director
<rjo> do i have to mess with LD_LIBRARY_PATH?
ylamarre has joined #m-labs
<cr1901_modern> rpath >>> LD_LIBRARY_PATH, imho
ylamarre has quit [Quit: ylamarre]
<GitHub191> [artiq] jordens pushed 3 new commits to master: http://git.io/vYHi6
<GitHub191> artiq/master e95b66f Robert Jordens: ttl: remove spurious _mu
<GitHub191> artiq/master 5f5227f Robert Jordens: ttl: add timestamp()
<GitHub191> artiq/master 2640a57 Robert Jordens: test/coredevice: let output() settle longer
travis-ci has joined #m-labs
<travis-ci> m-labs/artiq#348 (master - 2640a57 : Robert Jordens): The build has errored.
travis-ci has left #m-labs [#m-labs]
cr1901_modern1 has joined #m-labs
cr1901_modern has quit [Disconnected by services]
cr1901_modern1 is now known as cr1901_modern