Pinout to XDC / QSF Converter

Convert a pin assignment table (port, pin, I/O standard) into Vivado XDC and Quartus QSF constraint files, with duplicate pin and port checking. Handles bus ports like led[3] and per-pin I/O standard overrides.

Results

Pins converted
10
I/O standards used
LVCMOS18, LVCMOS33
Errors found
none

Notes

Vivado XDC
# Vivado pin constraints - generated by libfpga.com/tools/pinout-converter
# Remember create_clock for every clock pin (see /ref/xdc-constraints).
set_property PACKAGE_PIN E3     [get_ports {clk}]
set_property IOSTANDARD  LVCMOS33  [get_ports {clk}]
set_property PACKAGE_PIN C12    [get_ports {rst_n}]
set_property IOSTANDARD  LVCMOS33  [get_ports {rst_n}]
set_property PACKAGE_PIN D10    [get_ports {uart_tx}]
set_property IOSTANDARD  LVCMOS33  [get_ports {uart_tx}]
set_property PACKAGE_PIN A9     [get_ports {uart_rx}]
set_property IOSTANDARD  LVCMOS33  [get_ports {uart_rx}]
set_property PACKAGE_PIN H5     [get_ports {led[0]}]
set_property IOSTANDARD  LVCMOS33  [get_ports {led[0]}]
set_property PACKAGE_PIN J5     [get_ports {led[1]}]
set_property IOSTANDARD  LVCMOS33  [get_ports {led[1]}]
set_property PACKAGE_PIN T9     [get_ports {led[2]}]
set_property IOSTANDARD  LVCMOS33  [get_ports {led[2]}]
set_property PACKAGE_PIN T10    [get_ports {led[3]}]
set_property IOSTANDARD  LVCMOS33  [get_ports {led[3]}]
set_property PACKAGE_PIN B11    [get_ports {vga_hs}]
set_property IOSTANDARD  LVCMOS18  [get_ports {vga_hs}]
set_property PACKAGE_PIN B12    [get_ports {vga_vs}]
set_property IOSTANDARD  LVCMOS18  [get_ports {vga_vs}]
Quartus QSF
# Quartus pin assignments (paste into the project .qsf)
# Generated by libfpga.com/tools/pinout-converter
set_location_assignment PIN_E3 -to clk
set_instance_assignment -name IO_STANDARD "3.3-V LVCMOS" -to clk
set_location_assignment PIN_C12 -to rst_n
set_instance_assignment -name IO_STANDARD "3.3-V LVCMOS" -to rst_n
set_location_assignment PIN_D10 -to uart_tx
set_instance_assignment -name IO_STANDARD "3.3-V LVCMOS" -to uart_tx
set_location_assignment PIN_A9 -to uart_rx
set_instance_assignment -name IO_STANDARD "3.3-V LVCMOS" -to uart_rx
set_location_assignment PIN_H5 -to led[0]
set_instance_assignment -name IO_STANDARD "3.3-V LVCMOS" -to led[0]
set_location_assignment PIN_J5 -to led[1]
set_instance_assignment -name IO_STANDARD "3.3-V LVCMOS" -to led[1]
set_location_assignment PIN_T9 -to led[2]
set_instance_assignment -name IO_STANDARD "3.3-V LVCMOS" -to led[2]
set_location_assignment PIN_T10 -to led[3]
set_instance_assignment -name IO_STANDARD "3.3-V LVCMOS" -to led[3]
set_location_assignment PIN_B11 -to vga_hs
set_instance_assignment -name IO_STANDARD "1.8 V" -to vga_hs
set_location_assignment PIN_B12 -to vga_vs
set_instance_assignment -name IO_STANDARD "1.8 V" -to vga_vs

This exact result is bookmarkable — the URL contains all your inputs. Need it in a script? Append &format=json (API docs).

About this tool

Every board bring-up starts with transcribing a pinout table into constraint syntax, and every transcription session ends with one pin assigned twice or one port misspelled — errors the tools report late (or worse, route around). This converter takes the table as you'd paste it from a spreadsheet (spaces, tabs or commas), checks for duplicate pins and ports up front, and emits both the Vivado XDC (PACKAGE_PIN + IOSTANDARD) and Quartus QSF (set_location_assignment) forms. A third column overrides the default I/O standard per pin. Remember XDC also wants clock constraints — pin placement is only half the file.

Related tools