Hi Matt,

Looking at your model, you have write enable pulses coinciding with every
second address location. Even though a write enable pulse writes two 36 bit
values, each address location addresses a full 72 bit data burst, so if you
want to write the entire qdr you need to increment the address line at half
the rate of your current model.

I also think there might be an issue with your read code. I think when you
do bin(int(binascii.hexlify(data),16)) and carve up the result in 32 digit
chunks you end up with some bitstring offset errors, because bin(1) returns
0b1, rather than 0b00000000000000000000000000000001. I'd guess there may
well be some endian issues too.
For reading integers from the qdr, you might be better off with
struct.unpack(), or numpy.fromstring()

I compiled your model with the address line rate changed (and, FWIW, using
sys_clk2x as the clock source), and read the qdr with a:
data_str = roach.read('qdr0_memory',1024*4)
struct.unpack('>1024L', data_str) #or numpy.fromstring(data_str,
dtype=numpy.uint32).byteswap()

The data looks like it should (i.e, a counter, starting at 1)

Hope that helps,
Jack


On 10 September 2012 08:00, Matt Strader <[email protected]> wrote:

> Hi all,
>
> I'm still working on a simple design to write to qdr in firmware and
> read it out using the CPU interface.  I can read out the contents of
> qdr0_memory but the results are not what I expect.  I have attached a
> model file in which I attempt to write a sequence from a counter to a
> qdr, and the python script that reads the result and prints the bits
> read.  I expect the script to print out the simple sequence:
>
> 00000000000000000000000000000001 00000000000000000000000000000010
> 00000000000000000000000000000011 00000000000000000000000000001000
> 00000000000000000000000000001001 00000000000000000000000000001010
> 00000000000000000000000000001011 00000000000000000000000000001100
> 00000000000000000000000000001101 00000000000000000000000000001110
> 00000000000000000000000000001111 00000000000000000000000000010000
> ...
>
> Instead I see something like this:
>
> 10000000000000000001000000000000 10000000000000000010000000000000
> 00000000000000000111000000000000 00000000000000001000000000000000
> 10000000000000000011000000000000 10000000000000000100000000000000
> 00000000000000001111000000000000 00000000000000010000000000000000
> 10000000000000000101000000000000 10000000000000000110000000000000
> 00000000000000010111000000000000 00000000000000011000000000000000
> ...
>
> What am I missing this time?
>
> Thanks,
> Matt
>
> On Mon, Aug 27, 2012 at 12:09 AM, Matt Strader
> <[email protected]> wrote:
> > I have a simple model file that writes a constant value to all of
> > addresses in a QDR in the firmware and then reads it with katcp in
> > python.  I thought I'd try this before putting QDR in more complicated
> > designs.  When I try reading the QDR, I get all zeros.  I have
> > attached my mdl and python script.  Could someone tell me what I'm
> > missing?
> >
> > Thanks,
> > Matt
>

Reply via email to