EMBS 2025 Assessment Information
Packet Formats
Your solution will communicate with the server to request worlds to solve. The server is at IP 192.168.10.1
on port 51050
. Remember to use your IP address.
All numbers are big-endian, meaning that the integer 10 is stored as 0x00, 0x00, 0x00, 0x0A
and the integer 500 as 0x00, 0x00, 0x01, 0xF4
etc.
You have to send two messages to fully request a scenario. One to request the walls, and one to request the waypoints. To request data:
Field Name | Width in bytes | Details |
Request type | 1 |
or
|
Seed | 4 | 4 byte unsigned integer used to identify the world. |
Size | 2 | (10-2000) The size of the world you want. Worlds are all square. |
the server will reply to a walls request with:
Field Name | Width in bytes | Details | ||||||||
Message ID | 1 |
| ||||||||
Seed | 4 | The seed that you used to make the request. | ||||||||
Size | 2 | The size you requested. | ||||||||
Num Walls | 1 | The number of walls in the world. (0-240) | ||||||||
Wall Data | Num Walls * 6 | Each wall is described as:
|
or a waypoints request with:
Field Name | Width in bytes | Details | ||||
Message ID | 1 |
| ||||
Seed | 4 | The seed that you used to make the request. | ||||
Size | 2 | The size you requested. | ||||
Num Waypoints | 1 | The number of waypoints in the world. (0-250) | ||||
Waypoint Data | Num Waypoints * 4 | Each waypoint is described, in order, as:
|
To attempt to solve the world send the following:
Field Name | Width in bytes | Details |
Request type | 1 |
|
Seed | 4 | 4 byte unsigned integer used to identify the world. |
Size | 2 | The size of the world. |
Answer | 4 | The path length (includes the end but not the start) |
The server will reply:
Field Name | Width in bytes | Details |
Request type | 1 |
|
Seed | 4 | 4 byte unsigned integer used to identify the world. |
Size | 2 | The size of the world. |
Result | 1 |
|
World Sizes
You can request worlds of any size (between 10 and 2000), and the number of walls and waypoints will be determined by the chosen size. However for the purposes of assessment, “small” and “large” worlds are defined as follows:
| Size | Waypoints | Walls |
---|---|---|---|
Small worlds | 30 | 8 | 15 |
Large worlds | 500 | 16 | 240 |
The maximum number of walls in any world will be 240.
Impossible Worlds
I have made reasonable efforts to stop the server making impossible worlds, but it can still happen. If a world is impossible then just ignore it. If a world seed manages to crash the server then bonus marks to whoever finds it! *
* not actual marks
Graphics
The graphics core that you should use is detailed here. It should be pretty straightforward, and example code is provided. However you will not be able to test it over the VLAB.
Stack and Heap
If you start to run out of stack or heap memory, altering your linker script can help. A linker script tells the tools where in memory to place certain types of code. To alter your linker settings, in your software project in SDK you should see a file ldscript.ld
. Double-click it.
The default values of 0x2000 (8KiB) are fairly small when we have 1GiB of DDR on the Zybo Z7, so you can increase these (within reason) if you need more dynamic memory space for your C/C++ code.
Do not try to use dynamic memory (stacks, queues, etc.) in HLS. Define things statically.