56 SERVO 10.2017
the clock frequency as shown in Figure 4; then select Next,
If the part is recognized by the cable, the Program
Device option under the Hardware Manager heading in the
Flow Navigator will be active. Select Program Device and
xc7a35t_0. The pop-up window in Figure 5 should appear,
and point to the location of the bitstream
( top.bit) and the debug file ( debug_nets.ltx).
If, for some reason, the tool cannot find
these files (and you have done the steps to
build them), it may be necessary to browse
to the directory where the project was
created (similar directory structure as shown
in Figure 5) and identify them. Click
After this long journey, the tool should
now be showing the internal signals of the
FPGA. This will appear something like
Figure 6. There will be nothing in the Wave
window, since the design has not captured
anything and no trigger conditions are set
up. As a quick check to make sure the
debug core is operable, click on the Trigger
Immediate button (red arrow in Figure 6). If
the design is operating, the board is programmed, and the
debugger is communicating, then the green block on IDLE
should cycle quickly to FULL and some waveforms should
appear in the waveform window.
If no signals have been selected for display, click on the
+ symbol (green arrow in Figure 6) and add probe display
signals in the window. The trigger conditions can be
created using the + and the OR gate symbol (right blue
arrows in Figure 6), and then enabled using the Play
button (left blue arrows in Figure 6).
Additionally, the board should show some signs of life
if it’s programmed and the external 100 MHz clock is
present. LED5 should be blinking to show the presence of
the clock signal inside the design.
If the Reset pushbutton (red pushbutton at the corner
of the board) is pushed, LED5 should stop blinking, and
LED2 should illuminate red to show the MMCM (FPGA clock
manager) is not locked.
Pushing BTN0 will cause the I2C reset command to be
sent to the PMOD sensor, and both the Si1145 and Si7020
should reset themselves internally. Moving SW0 to the on
position (away from the edge of the board) selects the
ROM addresses that contain the I2C commands for the
Notice that all of this is arbitrary in the sense that the
design is written to do this. The functionality of the
pushbuttons or switches can be changed by altering the
Verilog and recompiling the design.
Of the two sensors, the Si1145 had the more
interesting capability: a proximity detection using reflected
light from an LED. Reviewing the Si114X Designer’s Guide
pages 26-27, I realized that useable proximity detection
would require additional dynamic baselining logic that I
hadn’t written yet. (Commands to set up and force
proximity measurements are available in the ROM micro-code.
However, the logic to make repeated measurements,
Figure 6. Hardware debug ILA window.