Let's start with Windows. I compile the example as a release build, click on the yellow XTA icon, set from and to endpoints in the code at points A and B respectively in the code
Code: Select all
       // Output start bit
       txd <: 0 @ time; // Endpoint A
       // Output data bits
       for (int i = 0; i < 8; i++) {
          time += BIT_TIME;
          txd @ time <: >> byte; // Endpoint B
Code: Select all
    Node: 0, Core :0
    Fail with 23 unknowns, Num Paths 481
    Worst Case:Unresolved
    Required 8.7ns, 115.21 MHz, 0 thread cycles
    Violation:Unresolved
Show route in console(right click menu of selected route) gives:
Code: Select all
    xta 9>version
    This is an unreleased/unsupported version. (build 1752)
    xta 10>xta 10>print routeinfo 0
    endpoints: C:/Documents and Settings/Administrator/XMOS/workspace/UART-loopback-example/src/uart-loopback.xc:54 to C:/Documents and Settings/Administrator/XMOS/workspace/UART-loopback-example/src/uart-loopback.xc:59
    Node: 0, Core: 0
    Fail with 23 unknowns, Num Paths: 481
    Worst Case:  Unresolved
    Required:      8.7 ns,  115.21 MHz,       0 thread cycles
    Violation:  Unresolved
    xta 3>print trace 0
    * 0.0: (10.0ns) 0x1015a txByte + 10            out (r2r)    res[r1], r0 (P)
      10.0: (10.0ns) 0x1015c txByte + 12            ldw (ru6)    r0, sp[0x0]
    * 20.0: (10.0ns) 0x1015e txByte + 14            syncr (1r)   res[r0] (P)
      30.0: (10.0ns) 0x10160 txByte + 16            ldw (ru6)    r0, sp[0x0]
      40.0: (10.0ns) 0x10162 txByte + 18            getts (2r)   r0, res[r0]
      50.0: (10.0ns) 0x10164 txByte + 20            stw (ru6)    r0, sp[0x2]
      60.0: (10.0ns) 0x10166 txByte + 22            ldc (ru6)    r0, 0x0
      70.0: (10.0ns) 0x10168 txByte + 24            stw (ru6)    r0, sp[0x3]
      80.0: (10.0ns) 0x1016a txByte + 26            ldw (ru6)    r1, sp[0x3]
      90.0: (10.0ns) 0x1016c                        --FNOP--     
      100.0: (10.0ns) 0x1016c txByte + 28            ldc (ru6)    r0, 0x8
      110.0: (10.0ns) 0x1016e txByte + 30            lss (3r)     r0, r1, r0
      120.0: (10.0ns) 0x10170 txByte + 32            bt (ru6)     r0, 0x1
      130.0: (10.0ns) 0x10172 txByte + 34            bu (u6)      0x10
      140.0: (10.0ns) 0x10194 txByte + 68            ldw (ru6)    r1, sp[0x2]
      150.0: (10.0ns) 0x10196                        --FNOP--     
      160.0: (10.0ns) 0x10196 txByte + 70            ldc (lru6)   r0, 0x364
      170.0: (10.0ns) 0x1019a txByte + 74            add (3r)     r0, r1, r0
      180.0: (10.0ns) 0x1019c txByte + 76            stw (ru6)    r0, sp[0x2]
      190.0: (10.0ns) 0x1019e txByte + 78            ldw (ru6)    r1, sp[0x0]
      200.0: (10.0ns) 0x101a0                        --FNOP--     
      210.0: (10.0ns) 0x101a0 txByte + 80            ldw (ru6)    r0, sp[0x2]
    * 220.0: (10.0ns) 0x101a2 txByte + 82            setpt (r2r)  res[r1], r0 (P)
      230.0: (10.0ns) 0x101a4 txByte + 84            ldw (ru6)    r1, sp[0x0]
      240.0: (10.0ns) 0x101a6 txByte + 86            mkmsk (rus)  r0, 0x1
    * 250.0: (10.0ns) 0x101a8 txByte + 88            out (r2r)    res[r1], r0 (P)
    etc.
On typing version at the XTA prompt it reports that
This adds but little reassurance to a process that I feel, already, is not going well.This is an unreleased/unsupported version. (build 1752)
I have asked to trace six lines and, indeed ,one can see that, at some level, that this is acknowledged:
However, the tool then completely ignores this and tells me it has found 481 paths through this small section of code, with 23 unknowns. There's about 23 lines of assembler between the endpoints: it seems not to know what it's doing for any of them. Which brings me on to the next feature: it doesn't know how long any I/O instructions take. It marks them all with a warning triangle exclamation. This is a little sad, as it's pretty much the whole point of this tool's existence. The ports used here are simple sampled I/O; there is no external handshaking configured on them. There is no unspecified external timing dependency, their timing operation is completely determined from within the core and should be completely deterministic. The XN config file specifies all the clock frequencies being used.example/src/uart-loopback.xc:54 to C:/Documents and Settings/Administrator/XMOS/workspace/UART-loopback-example/src/uart-loopback.xc:59
The instructions for which the tool could not fathom a timing were, amongst others:
Code: Select all
                       0x1015a    out (r2r) res[r1], r0
                        0x1015e    syncr (1r) res[r0]
                        0x10182    setpt (r2r) res[r1], r0
I'm much deflated by the whole experience. The XTA tool shows promise but, for me, its usefulness is currently dismal. I may be missing something. If you've made it work I'd love to hear from you! If you're involved in developing it I hope this helps and the issues can be resolved. It would be good news for all of us!
Max.

