Charles Clarkeworai aiIdris Somoye
Published

Custom LED Blink IP on AUP-ZU3 Zynq UltraScale+

Designed a Verilog LED IP, integrated it on AUP-ZU3 with PS clocking, handled constraints, and validated on hardware.

BeginnerWork in progress1 hour141
Custom LED Blink IP on AUP-ZU3 Zynq UltraScale+

Things used in this project

Hardware components

AMD Zynq UltraScale+ MPSoC ZU3EG
×1

Software apps and online services

VS Code
Microsoft VS Code
Verilog
AMD Vivado Design Suite
AMD Vitis Unified Software Platform

Story

Read more

Schematics

block diagram and design

Code

led_design_wrapper.v

Verilog
`timescale 1ns / 1ps
//////////////////////////////////////////////////////////////////////////////////
// Company: 
// Engineer: 
// 
// Create Date: 04/19/2026 10:37:44 AM
// Design Name: Charles Clarke
// Module Name: led_blink101
// Project Name: led_blink101
// Target Devices: ZU3 AUP
// Tool Versions: 
// Description: Simple LED blink module for IP creation
// 
// Dependencies: 
// 
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
// Blinks an LED using the input clock
//
//////////////////////////////////////////////////////////////////////////////////

module led_blink101 #
(
    parameter integer CLK_FREQ_HZ = 100_000_000, // 100 MHz input clock
    parameter integer BLINK_HZ    = 1            // 1 Hz LED blink
)
(
    input  wire clk,
    input  wire rst,
    output reg  led
);

    localparam integer COUNT_MAX = CLK_FREQ_HZ / (2 * BLINK_HZ);

    reg [31:0] counter;

    always @(posedge clk) begin
        if (rst) begin
            counter <= 32'd0;
            led     <= 1'b0;
        end
        else begin
            if (counter == COUNT_MAX - 1) begin
                counter <= 32'd0;
                led     <= ~led;
            end
            else begin
                counter <= counter + 1'b1;
            end
        end
    end

endmodule

led_design_wrapper.v

Verilog
`timescale 1ns / 1ps
//////////////////////////////////////////////////////////////////////////////////
// Company: 
// Engineer: 
// 
// Create Date: 04/19/2026 10:37:44 AM
// Design Name: Charles Clarke
// Module Name: led_blink101
// Project Name: led_blink101
// Target Devices: ZU3 AUP
// Tool Versions: 
// Description: Simple LED blink module for IP creation
// 
// Dependencies: 
// 
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
// Blinks an LED using the input clock
//
//////////////////////////////////////////////////////////////////////////////////

module led_blink101 #
(
    parameter integer CLK_FREQ_HZ = 100_000_000, // 100 MHz input clock
    parameter integer BLINK_HZ    = 1            // 1 Hz LED blink
)
(
    input  wire clk,
    input  wire rst,
    output reg  led
);

    localparam integer COUNT_MAX = CLK_FREQ_HZ / (2 * BLINK_HZ);

    reg [31:0] counter;

    always @(posedge clk) begin
        if (rst) begin
            counter <= 32'd0;
            led     <= 1'b0;
        end
        else begin
            if (counter == COUNT_MAX - 1) begin
                counter <= 32'd0;
                led     <= ~led;
            end
            else begin
                counter <= counter + 1'b1;
            end
        end
    end

endmodule

Constraints_File

Tcl
pin Assignment to the AUP board
## led_blink101.xdc
## External output port from your block design wrapper: led_0
## Map it to AUP-ZU3 white user LED 0

set_property PACKAGE_PIN AF5 [get_ports led_0]
set_property IOSTANDARD LVCMOS12 [get_ports led_0]

Credits

Charles Clarke
2 projects • 1 follower
Hardware/ Software Engineer in embedded systems, FPGA design, and circuit development,
worai ai
2 projects • 1 follower
Idris Somoye
1 project • 1 follower

Comments