/
EMBS 2025 Assessment Information

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 51050Remember 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

0x01 (just send the value 0x01) to request walls

or

0x03 to request waypoints

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

0x02

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:

2 bytes

x coordinate of wall’s top left corner

2 bytes

y coordinate of wall’s top left corner

1 byte

wall length

1 byte

wall direction. 0 = vertical, 1 = horizontal.

or a waypoints request with:

Field Name

Width in bytes

Details

Message ID

1

0x04

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:

2 bytes

x coordinate

2 bytes

y coordinate

To attempt to solve the world send the following:

Field Name

Width in bytes

Details

Request type

1

0x05

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

0x06

Seed

4

4 byte unsigned integer used to identify the world.

Size

2

The size of the world.

Result

1

  • 0 if your answer was incorrect

  • 1 if correct

  • 2 if the server gave up trying to solve the scenario for some reason

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

 

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.