Light Up ZC706 LEDs Using Push Buttons with VHDL
- Zach Pfeffer
- Apr 28, 2020
- 2 min read
Updated: May 14, 2023

This post shows how to use VHDL to connect SW7, SW9 and SW8 to LCR PL GPIO LEDS using VHDL.
This post picks up right after [link].
Prerequisites
This post assumes Vivado 2018.2 and the Digilent cable drivers have been installed.
Push Buttons



LEDs



Note: This table is correct. Table 1-28 on page 60 of the ZC706 Evaluation Board User Guide UG954 (v1.8) August 6, 2019 is not correct (GPIO_LED_CENTER's I/O Standard is not right)
Steps
Step 1: Right-click Design Sources

Step 2: Click Add Sources...

Step 3: (A) Click Add or create design sources and (B) click Next >

Step 4: Click Create File

Step 5: (A) Click the down arrow and click (B) VHDL

Step 6: (A) Enter buttoned as the File name: and (B) click OK

Step 7: Click Finish

Step 8: Define the module
A)
Enter in:
GPIO_SW_LEFT
GPIO_SW_CENTER
GPIO_SW_RIGHT
...and
GPIO_LED_LEFT
GPIO_LED_CENTER
GPIO_LED_RIGHT
...and mark the Direction of the 3 GPIO_LED Port Names: out
B) Click OK

Step 9: Double click buttonled

You should see:

Step 10:
Enter the following between begin and end Behavioral;
GPIO_LED_LEFT <= GPIO_SW_LEFT; GPIO_LED_CENTER <= GPIO_SW_CENTER; GPIO_LED_RIGHT <= GPIO_SW_RIGHT;
buttonled.vhd should look like this:

Step 11: Click save

Step 12: Click Open Elaborated Design

Step 13: Click OK

You should see pop-up status windows like:

...and then:

Step 14: (A) Click Window and (B) click I/O Ports

Step 15: (A) Click I/O Ports, (B) fill in the Package Pin as listed and (C) set in the I/O Std to LVCMOS15 for the CENTER ports and LVCMOS25 for the other ports (as shown above):

Step 16: Click Run Synthesis

Step 17: Click Save

Step 18: (A) Set File name: to constraints0 and (B) click OK

Step 19: Accept the defaults and click OK

You should see some status in the upper right corner:

Step 20: Click OK to Run Implementation

Step 21: Accept defaults and click OK

You should see the status of Implementation in the upper right corner:

Note: implementation will take longer than synthesis
Step 22: (A) Select Generate Bitstream and (B) click OK

Step 23: Accept defaults and click OK

You will see the status of Generate Bitstream in the upper right corner

Note: This will take a little bit of time to complete (not as much as Implementation)
Step 24: (A) Click Open Hardware Manager and (B) click OK

Step 25:
Plug the power supply into the board:

Plug the Micro-B end of a Micro-B to Standard-A USB cable into the Digilent USB-to-JTAG interface:

Plug the Standard-A end of a Micro-B to Standard-A USB cable into the computer

Power on the ZC706

Step 26: Click Open target

Step 27: Click Auto Connect

Step 28: Click Program device

Step 29: Click Program

You should see:

Now when you press SW7, SW9 and SW 8, the PL LEDs will light up as seen here:
Extra
To see the constraints that get saved:
A) Click PROJECT MANAGEMENT
B) Expand Constraints (1)
C) Double click on constraints0.xdc (target)
D) Examine

Here is the content of constraints0.xdc as text:
set_property PACKAGE_PIN G2 [get_ports GPIO_LED_CENTER]
set_property PACKAGE_PIN Y21 [get_ports GPIO_LED_LEFT]
set_property PACKAGE_PIN W21 [get_ports GPIO_LED_RIGHT]
set_property PACKAGE_PIN K15 [get_ports GPIO_SW_CENTER]
set_property PACKAGE_PIN AK25 [get_ports GPIO_SW_LEFT]
set_property PACKAGE_PIN R27 [get_ports GPIO_SW_RIGHT]
set_property IOSTANDARD LVCMOS15 [get_ports GPIO_LED_CENTER]
set_property IOSTANDARD LVCMOS25 [get_ports GPIO_LED_LEFT]
set_property IOSTANDARD LVCMOS25 [get_ports GPIO_LED_RIGHT]
set_property IOSTANDARD LVCMOS15 [get_ports GPIO_SW_CENTER]
set_property IOSTANDARD LVCMOS25 [get_ports GPIO_SW_LEFT]
set_property IOSTANDARD LVCMOS25 [get_ports GPIO_SW_RIGHT]
References
Xilinx ZC706 User Guide [link] (no login required)
Xilinx ZC706 Schematics [link] (login required)
Xilinx logo from https://twitter.com/xilinxinc