This guide covers the basics of programming Xilinx FPGAs using VHDL, including setup, coding, simulation, and synthesis.
π§ 1. Required Tools
Before starting, install these tools:
1.1 Xilinx Vivado (Free WebPACK Edition)
- Download from: Xilinx Downloads
- Supports Artix, Kintex, and Zynq FPGAs
- Includes VHDL simulator & synthesis tools
1.2 FPGA Development Board (Optional but Recommended)
Example boards:
π 2. Creating a Simple VHDL Project
2.1 Open Vivado & Create a New Project
- Launch Vivado β Click "Create Project"
- Select RTL Project β Choose VHDL as the language.
- Select your FPGA board model (or manually pick the chip).
2.2 Write a Basic VHDL Example (Blinking LED)
π File: led_blink.vhd
vhdl
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity led_blink is
Port (
clk : in STD_LOGIC; -- 100MHz clock input
led : out STD_LOGIC -- LED output
);
end led_blink;
architecture Behavioral of led_blink is
signal counter : STD_LOGIC_VECTOR(26 downto 0) := (others => '0');
begin
process(clk)
begin
if rising_edge(clk) then
counter <= counter + 1;
end if;
end process;
led <= counter(26); -- Blink LED at ~1Hz (100MHz / 2^27)
end Behavioral;
2.3 Assign FPGA Pins (Constraints File)
π File: constraints.xdc
tcl
# Basys 3 Example
set_property PACKAGE_PIN W5 [get_ports clk] # 100MHz Clock
set_property PACKAGE_PIN U16 [get_ports led] # LED0
set_property IOSTANDARD LVCMOS33 [get_ports {led clk}]
βοΈ 3. Compile & Program the FPGA
3.1 Run Synthesis & Implementation
- Click "Run Synthesis" β Wait for completion.
- Click "Run Implementation" β Generates a bitstream.
3.2 Generate & Flash the Bitstream
- Click "Generate Bitstream".
- Connect your FPGA via USB-JTAG (Digilent/USB-Blaster).
- Click "Open Hardware Manager" β "Program Device".
β The LED should now blink at ~1Hz!
π 4. Simulating VHDL (Optional but Recommended)
Vivado includes a built-in simulator (XSim).
4.1 Create a Testbench
π File: tb_led_blink.vhd
vhdl
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
entity tb_led_blink is
end tb_led_blink;
architecture Behavioral of tb_led_blink is
signal clk : STD_LOGIC := '0';
signal led : STD_LOGIC;
begin
-- Instantiate the design
DUT: entity work.led_blink
port map (
clk => clk,
led => led
);
-- Generate a 100MHz clock
clk <= not clk after 5 ns; -- 10ns period = 100MHz
-- Stop simulation after 1ms
process
begin
wait for 1 ms;
std.env.stop;
end process;
end Behavioral;
4.2 Run Simulation
- Right-click "Simulation Sources" β "Add Sources" β Select testbench.
- Click "Run Simulation" β "Run Behavioral Simulation".
- View waveforms in XSim.
π 5. Key VHDL Concepts for FPGAs
π 6. Next Steps
- Try UART communication (send/receive serial data).
- Learn Finite State Machines (FSMs) for complex logic.
- Explore Xilinx IP Integrator for pre-built modules (PLLs, RAM, etc.).
Top comments (0)