This week’s work was focused on writing the code to operate the design flow tools for the Xilinx 7 series, Intel Cyclone V, and Lattice ECP5. I had to gather all the tools I have found during the first few weeks of internship and integrated it into the K3rangka code. One main challenge to writing the code was to become familiar with the external library, Poco. My supervisor told me to operate the tools using only functions of Poco without writing any shell scripts to improve the speed.
For Vivado and Quartus, the project files had to be zipped and sent back and forth between S3padu and K3rangka, which required me to be familiar with the terminal commands to operate the tools as well as handling path names. The path names were handled using Poco::Path and Poco::File which made it simple as creating a Poco::File class to represent a specific file in a directory, and assign the path of the file using Poco::Path. The Poco::File class included some handy functions such as path() which returns the absolute path of the file in std::string. Executing the programs used the ‘Launch’ function in the Poco::Process which had different methods to execute programs based on the arguments that were put into the function. The two methods I used the most was specifying an std::string for the command to execute in a specific directory, which made it easy to use ‘zip’ command, and specifying a Poco::Pipe variable to retrieve the output of a command as an stream and push the stream into a newly created log file.