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
<sb0> rjo, I still dislike the double-buffering controlling CS. if you put that core in a CPU system, having the CPU timing change the semantics of SPI is weird and obscure, it is difficult to debug, and it is difficult to guarantee the correct transaction
<sb0> using the freescale SPI controller would annoy me for those reasons.
<sb0> what is wrong with a "total number of bits during which CS should be asserted" register? you can still mix reads and writes with that
<sb0> rjo, did you test the bridge with e.g. the LED?
<sb0> rjo, those unittests I can run without a physical TTL loopback are fine.
fengling has quit [Quit: WeeChat 1.4]
fengling has joined #m-labs
cr1901_modern1 has joined #m-labs
sj_mackenzie has joined #m-labs
<GitHub51> [artiq] sbourdeauducq pushed 2 new commits to master: https://git.io/v21te
<GitHub51> artiq/master 946bd84 Sebastien Bourdeauducq: protocols/pc_rpc: support retrieving selected target
<GitHub51> artiq/master d0d50d7 Sebastien Bourdeauducq: rpctool: interactive mode
<GitHub56> [artiq] sbourdeauducq pushed 1 new commit to master: https://git.io/v21t3
<GitHub56> artiq/master 763a4d3 Sebastien Bourdeauducq: rpctool: use pprint in interactive mode
mumptai has quit [Ping timeout: 248 seconds]
mumptai has joined #m-labs
cr1901_modern1 has quit [Ping timeout: 248 seconds]
cr1901_modern has joined #m-labs
<sb0> mithro, ok. i'm only going misoc master (not legacy)
<sb0> *to modify
<whitequark> rjo: re pipistrello: underprovisioned RAM?
<whitequark> rjo: are gateware and runtime up to date?
<sb0> whitequark, try it on yours...
<whitequark> is there a way to flash it yet without wasting hours fighting xc3sprog?
<sb0> connect it to the build server, conda install artiq-pipistrello-nist_qc1, artiq_flash -t pipistrello
<whitequark> ah great
<sb0> you should run a conda build for pipistrello before though
<whitequark> bb-m-labs: force build artiq-pipistrello-nist_qc1
<bb-m-labs> build forced [ETA 42m39s]
<bb-m-labs> I'll give a shout when the build finishes
<sb0> yes.
<sb0> openocd is in /usr/local/bin
<mithro> sb0: Do you know if there is any way to dynamically change IO standards that a Spartan 6 pin is using?
<sb0> mithro, not in a xilinx documented way. but if you reverse engineer the IOB frame a bit, writing it into the ICAP should do the trick.
<sb0> you can prepare two bitstreams with the different io standards you want and diff them
<sb0> the slightly tricky part is to figure out the FAR value, location, and size of the IOB frame in the ISE-generated bitfile, but I think Wolfgang sorted that out
<mithro> sb0: I saw a while back you had some tools for doing something like that?
<mithro> It would be really awesome to have a GSoC student work on reverse engineering the Spartan 6 bitstream format, but I doubt we'd get a suitable student
<bb-m-labs> Hey! build artiq-pipistrello-nist_qc1 #154 is complete: Success [build successful]
tmbinc___ has joined #m-labs
<sb0> whitequark, did it work?
mumptai has quit [Remote host closed the connection]
<GitHub159> [artiq] sbourdeauducq pushed 1 new commit to master: https://git.io/v21X6
<GitHub159> artiq/master f5dee45 Sebastien Bourdeauducq: test/worker: test exception logging
<sb0> whitequark, ?
<whitequark> testing
<whitequark> hm proxy gateware bitstream bscan_spi_xc6slx45.bit not found
<sb0> is that not installed or something?
<sb0> oh, -m qc1.
<whitequark> it is installed
<whitequark> oh
<sb0> artiq_flash -t pipistrello -m qc1
<whitequark> qc1, not nist_qc1
<whitequark> okay. Error: unable to open ftdi device with vid 0403, pid 6010, description 'Pipistrello LX45' and serial '*'
<sb0> yes, this is #290
<sb0> not a complicated one, but someone needs to test and all to avoid idiotic bugs that never miss an opportunity to manifest themselves in such refactorings
<whitequark> hm, wtf
<whitequark> Error: libusb_open() failed with LIBUSB_ERROR_ACCESS
<whitequark> but I'm a member of dialout
<sb0> are the permissions set?
<whitequark> oh, it's using libusb, not ttyUSB
<sb0> isn't it supposed to be plugdev?
<sb0> there are also udev rules in the artiq doc iirc. would be a good opportunity to test them.
<whitequark> crw-rw---- 1 root dialout 188, 3 Mar 2 17:36 /dev/ttyUSB3
<whitequark> I'm in plugdev too.
<sb0> artiq doc says
<sb0> $ sudo cp contrib/99-openocd.rules /etc/udev/rules.d
<sb0> $ adduser $USER plugdev
<whitequark> we don't ship openocd, right?
<sb0> not yet
<whitequark> yes, that worked
<whitequark> sb0: ok. there is some crap on the serial line. how do I use pppd?
<sb0> that's in the doc, too
<sb0> "FPGA board ports" section
<whitequark> ah, found it
<whitequark> hm, wonder if I can put it on our internal network
<whitequark> probably not
<whitequark> well, not without annoying iptables shit
<GitHub133> [migen] sbourdeauducq pushed 1 new commit to master: https://git.io/v21ND
<GitHub133> migen/master bc21743 Sebastien Bourdeauducq: build/xilinx: fix error message when Xilinx toolchain directory exists but does not contain a ISE version directory. Closes #39
Gurty has joined #m-labs
<rjo> sb0: the double buffer is needed in any case. it has little to do with controlling cs.
<rjo> sb0: for us, having a "total transaction counter controlling cs" does not really help because we have rtio. if somebody wants to change the core accordingly that's fine by me.
<sb0> why is the double buffer needed? for meeting timing?
<rjo> sb0: bridge works fine here on pipistrello but the gui sometimes does not react to right clicks.
<rjo> whitequark: yes. all are up to date. did you check that the memory you are using for the cache also fits on pipistrello?
<sb0> rjo, what part of the gui, the TTL injection?
<sb0> did that work before your changes?
key2 has joined #m-labs
<rjo> sb0: pretty sure it is a gui-only issue. if i undock the ttl dock and re-dock it it reacts for one click again.
<rjo> sb0: because you have to do two wb transactions per (chained) transfer: one to read the previous data and one to write the next and trigger the (chained) transfer.
<sb0> by "react" do you mean "opening the menu" or "the menu option does something"?
<rjo> it does not open a context menu on right click anymore after a while.
<rjo> works three times. then stops working.
<sb0> are you clicking the number?
<rjo> also broken before the spimaster merge.
<rjo> might be general business of the ppp link.
<rjo> it persists over gui restarts.
<sb0> nothing is sent to the core device when you open the meny
<rjo> LMB on the number does not do anything.
<sb0> *menu
<sb0> and RMB?
<rjo> as i said. works sometimes.
<rjo> ah it is only sensitive on the number?
<rjo> not on the button ?!
<rjo> then it was just the fact that the button is not actually sensitive.
<rjo> the thing that concerns me currently is that the buildbot does not meet timing anymore with spimaster. but each time i run it myself it does meet timing just fine. both failure and success are reproducible on kc705 and pipistrello.
<GitHub83> [migen] sbourdeauducq pushed 1 new commit to master: https://git.io/v2Mvi
<GitHub83> migen/master ba8f576 Sebastien Bourdeauducq: sim: add more signals to VCD (#36)
<sb0> rjo, yes, only on the number...
<sb0> this could be changed
<rjo> if it looks like a button it should behave like a button if possible.
<sb0> whitequark, probably the buildbot should mark the build as failed, or at least show a warning, when timing is not met
<sb0> rjo, there is a discussion on github about replacing the menu with buttons that are shown only when the cursor is over the widget
<sb0> whitequark, have you been able to reproduce the cache unittest failure?
<whitequark> sb0: no, it succeeds locally
<whitequark> artiq.test.coredevice.test_cache, right?
<sb0> rjo, ^
<rjo> yes
<rjo> pipistrello
<rjo> i suspect that it is printing something (crash or log) on the console. but pppd is smart enough to gloss over it.
<whitequark> strace pppd?
<rjo> instead i went on to look at other things.
<sb0> rjo, would you think a CF35 6-way to be a good vacuum chamber for a "simple" ion trap?
<sb0> this way it's a standard part and there won't be any CAD, machining or welding involved
<rjo> sb0: yes. we frequently build traps like that.
<rjo> sb0, _florent_: i suspect the ethernet mac is the underlying timing issue that makes the artiq soc fail timing (on 2015.4 consistently, reproduciblt and for a long time already, on 2014.2 on the buildbot intermittently before and now more reliably due to probably unrelated changes in the gateware).
<rjo> _florent_: did liteth never have timing issues for you?
<rjo> iirc the artiq soc never met timing for vivado >= 2014.4 for me.
<felix_> mithro: why s6 and not a7? a7 is much better and newer. at least i wouldn't spent time reversing s6, but i'm interested in reversing a7. but currently not time for that
<rjo> the timing problem on pipistrello seems rare enough (both here and on the buildbot) to ignore it.
<felix_> mithro: oh, and at least for the coreboot gsoc thing it was said that reverse engineering projects can't (or was is shouldn't?) be done in the context of gsoc
<rjo> whitequark: ARTIQ-Python, if i have the usual pattern of '__init__(self, foo_name=None): if foo_name is None: self.foo=dmgr(foo_name); else: self.foo=None' the compiler complains about not being able to unify None with the object. How do i handle an attribute that is either an object or a "NULL pointer"?
<whitequark> you cannot.
<rjo> whitequark: any way to do what i want to achieve?
<whitequark> not without complex changes to the compiler, I'm afraid.
<whitequark> I'm not yet sure how complex. I'll need to think about it.
<rjo> well i can leave it to the user to not call the kernel that would make use of of the object if it is not None.
<whitequark> what do you mean?
<whitequark> i.e. not call the kernel that needs an object if the object is not available?
<rjo> the kernel methods that use the attribute are like "if self.foo is not None: self.foo.do_something()"
<whitequark> yes, that's the easiest way to solve this
<whitequark> the problem with optional types (what you want) is that not everything has an indirection.
<whitequark> well, the first problem, that is. for things that have a pointer, it is relatively easy to handle this, but not for things that are expanded inline
<whitequark> e.g. tuples
<whitequark> a "tuple or None" would need to become a proper optional i.e. have an explicit "is present" flag.
<rjo> ack
<whitequark> the second problem is that representing union types (like "Foo or NoneType") rather than sum types (like "SomeWrapper (that has methods that may return Foo or raise)") is quite awkward
<whitequark> in the type system that we have, that is.
<rjo> and is there really no way to prevent me from sprinkling int() everywhere to keep it from makeing an int64 out of an int32 each time i e.g. add something to it?
<whitequark> it doesn't really mesh with the ML-style unification and combined with Python's weak typing would become a complete nightmare i.e. require annotations everywhere
<whitequark> and we don't even have a syntax for annotations on non-arguments
<whitequark> hm, your int problem is odd.
<whitequark> are you saying that... x = int32(0); x + 1 returns an int64?
<whitequark> that should not happen for sure
<rjo> it hink so. at least that's how i read the complaint.\
<whitequark> try that. you'll see this is not the case
<rjo> maybe i read it wrong then. maybe another thing why can't delay_mu(int32) simply cast to int64?
<rjo> whitequark: http://paste.debian.net/411018/ could you explain this to me? what is really wrong with that code?
<whitequark> ahhh
<rjo> what is 64 and what is 32?
<whitequark> width
<rjo> there are four things: the a, the b, the (a*b) and the argument expected in delay_mu()
<whitequark> first it shows the overall type, then it shows the exact parts that are incompatible
<whitequark> oh
<whitequark> I misunderstood your question
<whitequark> delay_mu expects an int64 parameter.
<whitequark> and, in ARTIQ Python coercion does not happen automatically for function call arguments.
<whitequark> so, I will need to add a delay_mu overload for int32.
<rjo> does it say that or is that relevant at all?
<whitequark> it does.
<whitequark> hm.
<rjo> it says something about unification and about the expression. but nothing about the argument expected.
<whitequark> hang on.
<_florent_> rjo: do you have a timing report to share for artiq soc? (otherwise I'll try an implementation in the next days)
<rjo> _florent_: sure.
<whitequark> rjo: yes, I agree that this error message is very bad. I should have fixed it long ago.
<rjo> what is the nicest tool to use a pastebin/gist from the command line (preferrably one that doesn't need perl)
<whitequark> and it seems to be buggy too, it should say that expression is int32, whereas it says that expression is int64
<rjo> whitequark: yes.
<whitequark> needs, uh, ruby.
<rjo> good enough.
<rjo> bah. nc termbin.com 9999 was easier.
<rjo> _florent_: http://termbin.com/cc0b that is the current artiq "kc705-nist_clock".
<rjo> _florent_: verilog is at http://termbin.com/csrg
<_florent_> ok thanks, this is probably just a false path constraint that is not set or not set correctly
<_florent_> "nist_clock_ethmac_tx_cdc_graycounter1_ce"
<_florent_> we have to put a false path between sys_clk<-->eth_rx
<rjo> _florent_: with 2015.4 it is a bit different. but still ethmac stuff in there: http://termbin.com/8vb5
<_florent_> same for sys_clk<-->eth_tx
<rjo> yay. that sounds right.
<_florent_> I'm not able to do it now, but if you want to check we need something similar to that:
<rjo> _florent_: but the big violations are not between clocks. they are from eth_rx to eth_rx.
<rjo> maybe they are triggered by problems on the CDCs though.
<_florent_> yes that's probably safer to check CDC constraints first
<_florent_> if there are still timing issue I'll fix that
<rjo> sb0: i would like to make pulse(level=True) to allow for active low pulses
<rjo> _florent_: will try
<sb0> rjo, TTL?
<sb0> I think Chris Ballance already added something about inverted TTLs...
<sb0> whitequark, for connecting the scroll pump to the turbopump: we need a KF25 hose, that's all?
<sb0> we have stock on clamps and o-rings.
<whitequark> sb0: yes but I have a larger list of things I need from taobao
<sb0> hm, the CF stuff isn't too cheap
<whitequark> I can give you the list of URLs tomorrow
<sb0> I'm looking at this store right now https://mb-technology.world.taobao.com which has great quality
<sb0> you even commented on the quality of their welds :)
<whitequark> any fluid feedthroughs?
<whitequark> oooh nice, they have a lot of VCR stuff
<whitequark> very cheap too
<sb0> starts at 3000 RMB
<sb0> though I'm pretty sure that one can take UHV. the cheaper ones, hmm
<sb0> whitequark, for bakeout, I guess we can take a kitchen oven and hook that up to your PID controller?
<whitequark> do you want to fit the entire chamber into the oven?
<whitequark> I doubt that will go well
<sb0> does it come with a temperature probe and a power switch for the resistor?
<sb0> if the chamber is small enough, then it's fine
<whitequark> it uses a type K thermocouple and has a relay
<whitequark> btw I don't have any spare thermocouples
<whitequark> sb0: what about hoses and instruments?
<whitequark> I would get this: http://world.taobao.com/item/17445382264.htm
<whitequark> and wrap it around the chamber. much more convenient and controllable
<whitequark> even has a controller.
<whitequark> some custom part
<sb0> the other CF stuff from this store isn't too pricy
<sb0> only the 6-way is particularly expensive
<whitequark> very complex weld job
<rjo> sb0: yes ttl. or maybe better bundle that inversion flag with the latency compensation numbers into general channel properties.
<rjo> whitequark: do you need an issue for that (above) or are you tracking it?
<whitequark> rjo: please create one.
mumptai has joined #m-labs
<sb0> the CF flange dimension units are ridiculous
<whitequark> the KF ones are stupid too.
<whitequark> absolutely nothing about a KF25 flange has the dimension 25
<whitequark> or 25eN for any n.
<whitequark> this is actually true for NPT threads, piping, basically anything that involves a tube
sb0_ has joined #m-labs
<sb0_> rjo, how do those electronic solders you have in your chambers survive bakeout? do you just bake at a low enough temperature?
<rjo> we bake around 200C. that is the limit of most cf windows anyway.
<mumptai> ohh, uhv applications?
<rjo> yes
<rjo> sb0_: i played with some gold eutectic that works to higher temperatures but it is not much fun.
<mumptai> .. high-temperature solder fluxes can be a bit annoying ;)
ylamarre has joined #m-labs
rohitksingh has joined #m-labs
<sb0_> whitequark, http://www.nat.vu.nl/~koel/131023_IonTech2_Koelemeij.pdf see p.23 "hammer test" to distinguish between viton and rubber
<sb0_> rjo, ok. speaking of windows, anything special about them or can i pick the cheapest chinese thing that will do UHV?
<rjo> there is uhv and then there is uhv.
<rjo> how far do you want to go? do you need excellent optical pumping?
<rjo> then the stress birefringence inhomogeneity across the beam will come it at some point
<rjo> the windows should be reasonably flat as well. and you want your imaging to be of as high numerical aperture as you can get.
<rjo> and they should be bakeable
<whitequark> sb0_: re test: nice. and the rest of pdf too.
<rjo> and sometimes the covar/invar whatever is pretty ferromagnetic which can be problmenatic
<rjo> if you can get AR coatings, get them for the right wavelengths. they give you 8% more light...
<rjo> and we generally prefer 316LN over other steels because of better bake behavior and lower permeability.
<rjo> sb0_, _florent_: why would vivado ever be unable to do [get_nets sys_clk] if there is clearly and obviously such a net in the design?
<sb0_> rjo, if vivado is anything like ISE (I have less experience with the former), it sometimes renames nets
<sb0_> how do you know there is such a net in the design?
_whitelogger has quit [Ping timeout: 264 seconds]
_whitelogger_ has joined #m-labs
<sb0_> rjo, no, ISE sometimes renames verilog nets.
<sb0_> can you grep the synthesis log for all mentions of sys_clk?
<rjo> sb0_: yes. then it has renamed it to rsys_clk
<sb0_> what is the renaming message?
<sb0_> is there any?
<rjo> does vivado have a synthesis log?
<rjo> i don't see any message.
<rjo> well renamed is a bit strong here.
<rjo> rsys_clk = rsys_clk anyway.
<rjo> but there must be a vivado way to find the net that a verilog name corresponds to.
<sb0_> you are optimistic
<rjo> sb0_: how is the order of the clock domains in the verilog? alphabetical?
_whitelogger_ has quit [Excess Flood]
_whitelogger has joined #m-labs
<sb0_> yes, alphabetical
evilspirit has joined #m-labs
rohitksingh has quit [Ping timeout: 244 seconds]
<_florent_> rjo: on ISE I was using the verilog keep attribute to be sure that the constaints was correctly applied
<_florent_> was/were
<_florent_> it seems to be this now with Vivado:
<_florent_> (* dont_touch = "true" *) wire sig1;
<_florent_> BTW it seems the attributes we are using on Xilinx for NoRetiming and MultiReg are not supported by Vivado
<_florent_> but I still have to integrate that in misoc
<_florent_> while doing that we could also add the dont_touch attribute that can be useful for timing constraints
evilspirit has quit [Ping timeout: 260 seconds]
_whitelogger has quit [Excess Flood]
_whitelogger has joined #m-labs
<rjo> _florent_: ack.
sj_mackenzie has quit [Remote host closed the connection]
<GitHub166> [migen] jordens pushed 2 new commits to master: https://git.io/v2DD2
<GitHub166> migen/master cd62dc3 Robert Jordens: vivado: find clock nets by get_nets, not get_ports
<GitHub166> migen/master cd55748 Robert Jordens: build: support platform-independent false path designation
<GitHub11> [artiq] jordens pushed 2 new commits to master: https://git.io/v2DyI
<GitHub11> artiq/master 9969cd8 Robert Jordens: ad53xx: ldac may be none
<GitHub11> artiq/master d3f36ce Robert Jordens: kc705: add false paths for ethernet phy...
<bb-m-labs> build #311 of artiq is complete: Exception [exception interrupted] Build details are at http://buildbot.m-labs.hk/builders/artiq/builds/311
<bb-m-labs> build #312 of artiq is complete: Success [build successful] Build details are at http://buildbot.m-labs.hk/builders/artiq/builds/312
key2 has quit [Ping timeout: 250 seconds]
<rjo> _florent_: i know that you might see misoc/migen to be a bit of a fast moving target (that's why you forked them in litex, i presume). but i think it would be really really beneficial if those parts could be merged/reintregrated again, and misoc/migen be released. maybe mithro's GSoC students can help here.
<_florent_> yes I'm willing to reintegrate that, just that I was very busy these last months
<_florent_> I'll have more time for that in the next weeks
<_florent_> are timings better with the false path constraints?
<rjo> _florent_: that's fine. i wasn't complaining. might also be a nice task for a migen/misoc beginner like the GSoC students.
<rjo> the timing paths seem better
<rjo> i'll do a 2015.4 run now
<rjo> it is impressive and suspicious that there can be path delays longer than 7 ns on that chip.
<rjo> also it systematically starts with lots of hold violation. afaict that is indicative of slock skew. but i could not see the how and why for that.
<_florent_> yes that can be a nice task for a student, maybe I should create MiSoC issues for these things (at least if that's not a student that do it that will be me)
<rjo> it think issues are fine for that in any case.
<_florent_> ok
<_florent_> do you still have timing violations?
<rjo> *clock skew
<_florent_> if so, can you share it?
<rjo> no. not currenyl.
<rjo> currently
<rjo> and in the iterations i tested it is fine
<rjo> vivado 2015.4 is also happy with the timing now.
ylamarre has quit [Quit: ylamarre]
mumptai has quit [Quit: Verlassend]
fengling has quit [Ping timeout: 240 seconds]