Modify AN01024

Technical discussions around xCORE processors (e.g. xcore-200 & xcore.ai).
fabian
Member++
Posts: 23
Joined: Wed Apr 12, 2017 9:13 pm

Post by fabian »

Hi, all.
Hi, mon2.

Regarding plink status register and channel ends:

AN01024 is implemented and tested on two L16 sliceKIT core boards. Each core board uses a XS1-L16-128-QF124 device. If you take a look into the XS1-L16A-128-QF124 datasheet you will find a chapter "C Tile Configuration" which introduces the register 0x10 .. 0x13 "PLink status" and 0x80 .. 0x9F "Chanend status". Be aware of: they are related to the tile configuration and not to the node configuration. These registers cannot be found in the XEF232-1024-FB374-Datasheet.

But in the application software of AN01024 you will find some print-Functions in link.xc, which read the contents of these register. It is not possible to compile the application software when adapting it to custom boards which use devices like XEF232-1024-FB374. The print-Functions are only implemented but not used in the application, though. Ok, it is not a big deal, since the print-Functions aren't used anyway, you just uncomment these code-parts.

But what are the registers good for and why are they not needed anymore in XEF232 ?
Is it needed to understand that to get the application software running on my custom boards?
I do not know.

If you take a look into the registers you will notice, that these are about processor links, ChannelEnds, network identifier switches etc .... My topic is about all of this, so I believe it might matter to know about all this stuff.

And mon2, I'm aware of Section D.16 and D.18 of the XEF232 Datasheet which you mentioned in one of your posts in this thread. The registers described there are related to the node configuration not to the tile configuration. Though, these registers
touches communication by xlinks, definitly.

Again, a lot of text. But still the questions:
What is going on with xlinks?
How to adapt the application note to get used by XEF232?
And many more ....

Best regards.


fabian
Member++
Posts: 23
Joined: Wed Apr 12, 2017 9:13 pm

Post by fabian »

Hello, all.
Hello, mon2.
1) Noted above in your post that you are using LVDS transceivers. Can you post the relevant schematic or wiring details? Are these correct and in the proper direction between XMOS CPU # 1 to the remote PCB with XMOS CPU # 2?
The connection between the two XMOS CPUs is correct. There are a lot of testpoints on every board and test-signals are measured by oscilloscope. Hardware is ok.
2) Do not believe the project has any dependency to the XN file for your interconnect. Instead, you will be assigning the static links (ie. non routed) as per AN01024 for the reasons raised in section 2.2 of the same document. You will manually select the point to point communication parameters, just like this application note.
I'm still not sure about the link configuration. I'm using xlink1 so registers 0x21, 0x81 and 0xA1 of the node configuration are applied.

In Register 0x21 the direction needs to be set in bits 11:8. The software in the application node sets this to 0x1 for app_links_b1 and to 0x0 for app_links_b2. I have no idea what "direction" means in this context and which values are valid.

In Register 0xA1 Bit 8 needs to be set to 1 because tile 1 is used on every board.
Bits [4:0] are set to 0x0 because channel 0 is in use.
And of course Bit 31 is set to 1 to enable static forwarding.
3) Suggesting to start with the same example code from this appnote. On the node id,
I use two terminals. One for board 1 which runs app_links_b1 and the other for board 2 which runs app_links_b2. After downloading the two software on the corresponding boards, both terminals show "Got credit". So I believe the link setup is correct and communication is working on that level.
This can also be measured at the testpoints: during that state there are reasonable signals on the wires.

But the channel setup seems not to be correct. The report shows "Communication rate: 0 bytes per sec ..." and there is also no traffic on the wires measured by the oscilloscope anymore.

What I'm wondering is, that app_links_b1 and app_links_b2 are both allocating chanend 0x80110002. Well I'm not wondering about the id, that seems totally correct to me. In the XN-File the RoutingId of node 0 is set to 0x8010 and the processor in use is tile 1 of that node. So 0x8011 is ok. Channel 0 is used and the resourceId is 0x2. So the id 0x80110002 is correct.
But in app_links_b1 this id is also used as the destination id of the chanend itself. That means to me that on app_links_b1 the allocated channel is sending data to itself.
Am I wrong? Can anyone explain this to me?

Best regards.
fabian
Member++
Posts: 23
Joined: Wed Apr 12, 2017 9:13 pm

Post by fabian »

Hello, all.

What is that "RoutingTable" all about?

In "Manually-specify-xCONNECT-link-network-routing_A.pdf" you can read about "routing Id" and "routing table" which must be configured for each node on the network. It's telling about "Bit numbers" and "directions". But no word about what that all means and what values are available.

There is a thread
http://www.xcore.com/viewtopic.php?f=26 ... hilit=DrNo
in which the member "segher" is writing
There are two things you need to set up for the links: the routing, and the links
themselves.
And he is showing a little example, but no chance to see where all the values are coming from?

Is there anyone out there who is capable of that topic and willing to explain it to me?

Thanks and best regards.
User avatar
mon2
XCore Legend
Posts: 1913
Joined: Thu Jun 10, 2010 11:43 am
Contact:

Post by mon2 »

fabian
Member++
Posts: 23
Joined: Wed Apr 12, 2017 9:13 pm

Post by fabian »

Hello, all.
Hello, mon2.

Thank you for the links to the documentation. Though, I already know that documentation and believe it or not: the content of the document is something like a checklist but no explanation to what I want to know. For example look to
"XN Bit element": it has an attribute "direction" and the description is "The direction to route message" ?? So what is a direction? Is it "in" or "out", "left" or "right", "up" or "down" etc. ? What is the explanation of the attribute "direction"? What does it mean? Which values does it take? Why is it needed?

After all the posts in this topic, I still have no answers to my questions. I'm wondering if anyone in the forum is capable to answer my questions. If so, and I really believe in that there must be someone, why is no one answering my questions in a manner which is straight forward.

I actually want to know what to do to hot plug two XEF232. AN01024 does not work. And I can't find any solution. So I ended up in asking question like: "What does direction mean?" And all the other questions in the posts before.
There are other threads like
http://www.xcore.com/viewtopic.php?f=44&t=5893
which are dealing the same problem and in which the users are running into the same problems, without any solution described here in the forum.

Is there any kind of information barrier in this topic?

Best regards.
fabian
Member++
Posts: 23
Joined: Wed Apr 12, 2017 9:13 pm

Post by fabian »

Hello all.
At least I got it to work. It was all about understanding the meaning of "direction", how to set up individual routingIds and how to get the direction out of a nodeId/routingId.

But for me a "direction" is more like a routing id, because in the end "direction" names or identifies a certain connection or way or routing between two nodes. This was quite confusing and put me in the wrong track for a while.

After understanding that it actually was quite easy to find a solution. It was just about finding the right direction (id).

Regards.
User avatar
fabriceo
XCore Addict
Posts: 181
Joined: Mon Jan 08, 2018 4:14 pm

Post by fabriceo »

Hi Fabian,
in your last post above you seem to have found a solution and some explanation. Could you share and describe this further please ?
I m trying to connect two boards based on xu216, and would like to understand how this really works.
All the questions you wrote over the 2 pages are the one I have and after reading all pdf and trying couple of things, I end up in the dark.

considering 2 separated boards with 2 tiles each (xu216) for hot plug with 2 separated XTC programs A & B,
- how do you define and allocate routing ID for these 4 tiles. is it just about choosing 8001/2/3/4 and putting that in the xn routingID field ??
assuming link 7 on first board connected to link 3 on second board, how do you define and set the directions ? what is the rational or reason ?
about the chanend on each of the 4 tiles, how do you choose the channels number (0..31) and how do you manage to avoid any conflicts (numbering) with the others channels in use in your application ?

anyone else having experienced on that ? thanks in advance
Post Reply