One of the problems with copying the system.bit file to the SD card for a firmware change is that one has to take the SD card out of the Snickerdoodle and load it into a PC. This is fine once or twice but it can get very frustrating when you am making many firmware updates.. especially late at night. A better way is to purchase a Breaky Breaky and a JTAG programming cable from Digilent like the one shown below and program the FPGA via JTAG. JTAG not only allows for programming without taking the SD card out of the Snickerdoodle but one can also perform real-time debugging of the FPGA with logic viewers and advanced triggering.
There is one interesting point to note however regarding how SD cards and JTAG play together. If you do not put an SD card in the Snickerdoodle and try to program the .bit directly via JTAG, the FPGA clock will be frozen. The reason for this is that the FPGA clock is initialized via the SD card boot sequence in the first stage boot loader. The way to successfully program the Snickerdoodle via JTAG is to follow the steps below.
The first step that has to be done before anything though is to generate a Vivado project and a .bit file. This can be done by pulling down the blink firmware project and the blink IP and compiling a project.
Remember that it doesn't matter where you save your blink project or your blink IP as long as the ip_repo_paths property is correctly set in the project.tcl file as shown below.
Onc can see that my VHDL IP folder is located two folders above the blink project as shown in the image below. Once the .bit file has been created open up Vivado.
When Vivado opens up click on the "Open Hardware Manager" text.
After the Hardware Manager opens up click on "Open target" and then "Auto Connect." Make sure that the JTAG programmer is plugged into the Snickerdoodle and that the Snickerdoodle is powered on either via USB or wall plug.
Hopefully the JTAG chain will be found and then you can click on "Program device."
Navigate to the system.bit output file and click "Program."
That should do it. Hopefully you see the LED blinking just the same as in the previous blog. If you want to mix it up, change the blink rate and try programming it again via JTAG.