Project Problems
The team encountered errors throughout the production of this project. The largest issues were related to communication issues between Xilinx boards. The teams sponsor tasked us with creating a method that would allow for communication between boards to allow for encryption and decryption on separate boards.
Synchronous
The team initially attempted to communicate synchrounously and in parallel. The error encountered with this technique was that when bits were being sent they would be recieved with random bits flipped. We were able to confirm that all bits being sent were accurate but that when they were being received there were errors.
This error was non-deterministic and as a result we were unable to implement any error handling to contain it. We ultimately decided that the error must have come from the difference in clock cycles for the read and write functions between the boards, as they differed by one clock cycle. Modifying the clock speed was not something the team was able to do so to overcome this error we switched from a synchronous and parallel communication technique to a serial technique.
Serial
There were a few communication problems associated with the serial communication technique used. The primary issue was that we were only able to send one character before data started being garbled. The team was seeing issues where the first byte would send correctly and then the data would start to flip and we were unable to get accurate data. To mediate this we implemented semaphores. The goal of the semaphores was to help the boards know when to listen for data and when to write data. This worked moderately. Through testing of this method we were able to get data to and from boards. However the first three bits of every packet were random as well as one bit attached to the end. Additionally we had difficulty running it in a loop that would allow us to get a complete message.
Resolution
In order to create a product that worked the team scrapped the idea of board to board communication over a direct link. Instead they implemented a method of writing to the SDK console that runs in the board design environment, copying that text to a .txt file, and then saving that .txt file to a USB device or SD card. From there users are able to take the external device to another computer/board and run the decryption algorithm by coping the text in the clipboard.