Hello Marc, Thanks for the comments - I've just sat down with Paul and he's mentioned similar things to what you have.
The only challenge with that is tcpborphserver3 doesn't run on ROACH yet, only ROACH2 as I understand. I'm going to have a bit of a go at using the casperfpga library anyway and seeing if I can get it to work with ROACH using a work-around which Paul suggested. I'll post my findings to the mailing list next week sometime. Regards, James On Fri, Mar 20, 2015 at 10:01 AM, Marc Welz <[email protected]> wrote: > > > On Fri, Mar 20, 2015 at 7:08 AM, James Smith <[email protected]> wrote: > >> Hello all, >> >> I've given some thought to the topic of writing (and reading) registers >> on the ROACH using the python corr module. Often in a design a single >> register may be sliced into many bits to control various things. The way >> I've normally seen such a register written in python looks something like >> this: >> >> fpga.write_int('control',1<<9|1<<10|0<<25|1<<2|1<<3) >> >> My feeling is that this approach is difficult to maintain - inheriting >> code from someone else (or even from one's self 6 months down the line) is >> likely to bring about some confusion in this case, and lead to a fair >> amount of spelunking through the Simulink model in order to figure out what >> bit 9 and bit 10 etc. do. On top of this, it places limitations on changing >> one of the bits later without modifying the other ones - bitwise or >> functions work well enough when you're over-writing zeros, but if there's >> something there already it might not work so well. >> > > So it turns out that it is possible to define registers which aren't full > word sizes long in tcpborphserver itself - and then the powerpc will do the > shifts for you - this is particularly useful, > for writes as that then cuts out a network operation (which would be > needed to fetch the adjacent bits so that they aren't clobbered by the > write). > > In the fpg file (or on the telnet connection), use optional [:bits] after > an offset or a length to define the register - it is fine if such a > register overlaps with something else, as long as the name is unique. > > The downside of all this: It isn't tested at all, as nobody is using it > yet. And the code to make it work is a bit tricky - search for the > read/write functions in > https://github.com/ska-sa/katcp_devel/blob/master/tcpborphserver3/raw.c, > for example write_cmd > > regards > > marc > >

