The above blinking LEDs are not regular blinking LEDs. These LEDs are connected to the output of a GPIO. That GPIO is controlled by the AEMB2 microprocessor and the AEMB2 microprocessor is fetching it’s instructions from a 16K block RAM that has been loaded with data using the DATA2MEM software.
It has took me way longer that acceptable to finish this simple prototype. In this post I’ll explain the error that I stumbled upon and my steps to debug the system and convince AEMB2 to play along!
The cause of error was that I often left the unused ports of the processor hanging as wires or register. Hence during optimization ISE would remove them all the way through which basically meant that I was synthesizing something else entirely. The proper way is that any unused output or input from a module should be left as an IO and ISE will assign it to a random IO in the FPGA this way it’s prevented from being removed by ISE during design optimization. If the IO pins are not enough any configuration should be adapted provided it prevents ISE from removing your unused ports and doesn’t affect your design.
Here is my steps in Debuging the design
- Test the block RAM content loaded by the Data2MEM tool. This is done by manually adjusting the address lines of the RAM and displaying the data output on the LEDs. This step proves that the DATA2mem and Block RAMs are functioning as intended.
- Test that the Processor is working when connected to the RAMs. This is done on two steps, the first one is displaying the Processor clock and Instruction strobe signal. The second step is displaying the address lines of the processors instructions interface. Of course through both steps the clock was slowed down.
- Lastly is to connect the GPIO and configure the multiplexers to choose between the data memory and the GPIO.