Skip to content

Commit 1b9f5d1

Browse files
committed
fpga/mqnic/ZCU102: Add 10G mqnic design for ZCU102
Signed-off-by: Alex Forencich <alex@alexforencich.com>
1 parent 171c2a9 commit 1b9f5d1

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

56 files changed

+9781
-0
lines changed

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ Corundum currently supports devices from both Xilinx and Intel, on boards from s
4141
* Xilinx VCU108 (Xilinx Virtex UltraScale XCVU095)
4242
* Xilinx VCU118 (Xilinx Virtex UltraScale+ XCVU9P)
4343
* Xilinx VCU1525 (Xilinx Virtex UltraScale+ XCVU9P)
44+
* Xilinx ZCU102 (Xilinx Zynq UltraScale+ XCZU9EG)
4445
* Xilinx ZCU106 (Xilinx Zynq UltraScale+ XCZU7EV)
4546

4647
For operation at 10G and 25G, Corundum uses the open source 10G/25G MAC and PHY modules from the verilog-ethernet repository, no extra licenses are required. However, it is possible to use other MAC and/or PHY modules.

docs/source/devicelist.rst

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -177,6 +177,7 @@ This section details SoC targets, which interface with CPU cores on the same dev
177177
============ ================= ==================== ==========
178178
Manufacturer Board FPGA Board ID
179179
============ ================= ==================== ==========
180+
Xilinx ZCU102 XCZU9EG-2FFVB1156E 0x10ee9066
180181
Xilinx ZCU106 XCZU7EV-2FFVC1156E 0x10ee906a
181182
============ ================= ==================== ==========
182183

@@ -185,6 +186,7 @@ This section details SoC targets, which interface with CPU cores on the same dev
185186
================= ========= ========== =============================== =====
186187
Board PCIe IF Network IF DDR HBM
187188
================= ========= ========== =============================== =====
189+
ZCU102 \- 4x SFP+ 2 GB DDR4 2400 (256M x64) \-
188190
ZCU106 Gen 3 x4 2x SFP+ 2 GB DDR4 2400 (256M x64) \-
189191
================= ========= ========== =============================== =====
190192

@@ -193,6 +195,7 @@ This section details SoC targets, which interface with CPU cores on the same dev
193195
================= ============ ============ ==========
194196
Board I2C :sup:`1` MAC :sup:`2` FW update
195197
================= ============ ============ ==========
198+
ZCU102 Y Y :sup:`3` N
196199
ZCU106 Y Y :sup:`3` N
197200
================= ============ ============ ==========
198201

@@ -205,5 +208,6 @@ This section details SoC targets, which interface with CPU cores on the same dev
205208
================= ========================= ==== ======= ==== =====
206209
Board Design IFxP RXQ/TXQ MAC Sched
207210
================= ========================= ==== ======= ==== =====
211+
ZCU102 mqnic/fpga/fpga 2x1 32/32 10G RR
208212
ZCU106 mqnic/fpga_zynqmp/fpga 2x1 32/32 10G RR
209213
================= ========================= ==== ======= ==== =====

docs/source/index.rst

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ Corundum currently supports devices from both Xilinx and Intel, on boards from s
3333
* Xilinx VCU108 (Xilinx Virtex UltraScale XCVU095)
3434
* Xilinx VCU118 (Xilinx Virtex UltraScale+ XCVU9P)
3535
* Xilinx VCU1525 (Xilinx Virtex UltraScale+ XCVU9P)
36+
* Xilinx ZCU102 (Xilinx Zynq UltraScale+ XCZU9EG)
3637
* Xilinx ZCU106 (Xilinx Zynq UltraScale+ XCZU7EV)
3738

3839
Publications

fpga/mqnic/ZCU102/fpga/Makefile

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
# Targets
2+
TARGETS:=
3+
4+
# Subdirectories
5+
SUBDIRS = fpga
6+
SUBDIRS_CLEAN = $(patsubst %,%.clean,$(SUBDIRS))
7+
8+
# Rules
9+
.PHONY: all
10+
all: $(SUBDIRS) $(TARGETS)
11+
12+
.PHONY: $(SUBDIRS)
13+
$(SUBDIRS):
14+
cd $@ && $(MAKE)
15+
16+
.PHONY: $(SUBDIRS_CLEAN)
17+
$(SUBDIRS_CLEAN):
18+
cd $(@:.clean=) && $(MAKE) clean
19+
20+
.PHONY: clean
21+
clean: $(SUBDIRS_CLEAN)
22+
-rm -rf $(TARGETS)
23+
24+
program:
25+
#djtgcfg prog -d Atlys --index 0 --file fpga/fpga.bit

fpga/mqnic/ZCU102/fpga/README.md

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
# Corundum mqnic for ZCU102 using ZynqMP PS as host system
2+
3+
## Introduction
4+
5+
This design targets the Xilinx ZCU102 FPGA board. The host system of the NIC is
6+
the Zynq US+ MPSoC.
7+
8+
FPGA: xczu9eg-ffvb1156-2-e
9+
PHY: 10G BASE-R PHY IP core and internal GTH transceiver
10+
11+
## How to build
12+
13+
Run make in this directory to build the bitstream and the .xsa
14+
file. Ensure that the Xilinx Vivado toolchain components are in PATH.
15+
16+
Then change into sub-directory ps/petalinux/ and build the PetaLinux project.
17+
Ensure that the Xilinx PetaLinux toolchain components are in PATH.
18+
19+
make -C ps/petalinux/ build-boot
20+
21+
## How to test
22+
23+
Copy the following, resulting files of building the PetaLinux project onto an
24+
SDcard suitable for then booting the ZCU102 in SDcard boot mode.
25+
26+
ps/petalinux/images/linux/:
27+
BOOT.BIN
28+
boot.scr
29+
Image
30+
system.dtb
31+
rootfs.cpio.gz.u-boot

fpga/mqnic/ZCU102/fpga/app

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
../../../app/
Lines changed: 129 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,129 @@
1+
###################################################################
2+
#
3+
# Xilinx Vivado FPGA Makefile
4+
#
5+
# Copyright (c) 2016 Alex Forencich
6+
#
7+
###################################################################
8+
#
9+
# Parameters:
10+
# FPGA_TOP - Top module name
11+
# FPGA_FAMILY - FPGA family (e.g. VirtexUltrascale)
12+
# FPGA_DEVICE - FPGA device (e.g. xcvu095-ffva2104-2-e)
13+
# SYN_FILES - space-separated list of source files
14+
# INC_FILES - space-separated list of include files
15+
# XDC_FILES - space-separated list of timing constraint files
16+
# XCI_FILES - space-separated list of IP XCI files
17+
#
18+
# Example:
19+
#
20+
# FPGA_TOP = fpga
21+
# FPGA_FAMILY = VirtexUltrascale
22+
# FPGA_DEVICE = xcvu095-ffva2104-2-e
23+
# SYN_FILES = rtl/fpga.v
24+
# XDC_FILES = fpga.xdc
25+
# XCI_FILES = ip/pcspma.xci
26+
# include ../common/vivado.mk
27+
#
28+
###################################################################
29+
30+
# phony targets
31+
.PHONY: fpga vivado tmpclean clean distclean
32+
33+
# prevent make from deleting intermediate files and reports
34+
.PRECIOUS: %.xpr %.bit %.mcs %.prm
35+
.SECONDARY:
36+
37+
CONFIG ?= config.mk
38+
-include ../$(CONFIG)
39+
40+
SYN_FILES_REL = $(patsubst %, ../%, $(filter-out /% ./%,$(SYN_FILES))) $(filter /% ./%,$(SYN_FILES))
41+
INC_FILES_REL = $(patsubst %, ../%, $(filter-out /% ./%,$(INC_FILES))) $(filter /% ./%,$(INC_FILES))
42+
XCI_FILES_REL = $(patsubst %, ../%, $(filter-out /% ./%,$(XCI_FILES))) $(filter /% ./%,$(XCI_FILES))
43+
IP_TCL_FILES_REL = $(patsubst %, ../%, $(filter-out /% ./%,$(IP_TCL_FILES))) $(filter /% ./%,$(IP_TCL_FILES))
44+
CONFIG_TCL_FILES_REL = $(patsubst %, ../%, $(filter-out /% ./%,$(CONFIG_TCL_FILES))) $(filter /% ./%,$(CONFIG_TCL_FILES))
45+
46+
ifdef XDC_FILES
47+
XDC_FILES_REL = $(patsubst %, ../%, $(filter-out /% ./%,$(XDC_FILES))) $(filter /% ./%,$(XDC_FILES))
48+
else
49+
XDC_FILES_REL = $(FPGA_TOP).xdc
50+
endif
51+
52+
###################################################################
53+
# Main Targets
54+
#
55+
# all: build everything
56+
# clean: remove output files and project files
57+
###################################################################
58+
59+
all: fpga
60+
61+
fpga: $(FPGA_TOP).bit
62+
63+
vivado: $(FPGA_TOP).xpr
64+
vivado $(FPGA_TOP).xpr
65+
66+
tmpclean::
67+
-rm -rf *.log *.jou *.cache *.gen *.hbs *.hw *.ip_user_files *.runs *.xpr *.html *.xml *.sim *.srcs *.str .Xil defines.v
68+
-rm -rf create_project.tcl update_config.tcl run_synth.tcl run_impl.tcl generate_bit.tcl
69+
70+
clean:: tmpclean
71+
-rm -rf *.bit *.xsa program.tcl generate_mcs.tcl *.mcs *.prm flash.tcl
72+
73+
distclean:: clean
74+
-rm -rf rev
75+
76+
###################################################################
77+
# Target implementations
78+
###################################################################
79+
80+
# Vivado project file
81+
create_project.tcl: Makefile $(XCI_FILES_REL) $(IP_TCL_FILES_REL)
82+
rm -rf defines.v
83+
touch defines.v
84+
for x in $(DEFS); do echo '`define' $$x >> defines.v; done
85+
echo "create_project -force -part $(FPGA_PART) $(FPGA_TOP)" > $@
86+
echo "add_files -fileset sources_1 defines.v $(SYN_FILES_REL)" >> $@
87+
echo "add_files -fileset constrs_1 $(XDC_FILES_REL)" >> $@
88+
for x in $(XCI_FILES_REL); do echo "import_ip $$x" >> $@; done
89+
for x in $(IP_TCL_FILES_REL); do echo "source $$x" >> $@; done
90+
for x in $(CONFIG_TCL_FILES_REL); do echo "source $$x" >> $@; done
91+
92+
update_config.tcl: $(CONFIG_TCL_FILES_REL)
93+
echo "open_project -quiet $(FPGA_TOP).xpr" > $@
94+
for x in $(CONFIG_TCL_FILES_REL); do echo "source $$x" >> $@; done
95+
96+
$(FPGA_TOP).xpr: create_project.tcl update_config.tcl
97+
vivado -nojournal -nolog -mode batch $(foreach x,$?,-source $x)
98+
99+
# synthesis run
100+
%.runs/synth_1/%.dcp: %.xpr $(SYN_FILES_REL) $(INC_FILES_REL) $(XDC_FILES_REL) $(CONFIG_TCL_FILES_REL)
101+
echo "open_project $*.xpr" > run_synth.tcl
102+
echo "reset_run synth_1" >> run_synth.tcl
103+
echo "launch_runs -jobs 4 synth_1" >> run_synth.tcl
104+
echo "wait_on_run synth_1" >> run_synth.tcl
105+
vivado -nojournal -nolog -mode batch -source run_synth.tcl
106+
107+
# implementation run
108+
%.runs/impl_1/%_routed.dcp: %.runs/synth_1/%.dcp
109+
echo "open_project $*.xpr" > run_impl.tcl
110+
echo "reset_run impl_1" >> run_impl.tcl
111+
echo "launch_runs -jobs 4 impl_1" >> run_impl.tcl
112+
echo "wait_on_run impl_1" >> run_impl.tcl
113+
vivado -nojournal -nolog -mode batch -source run_impl.tcl
114+
115+
# bit file
116+
%.bit: %.runs/impl_1/%_routed.dcp
117+
echo "open_project $*.xpr" > generate_bit.tcl
118+
echo "open_run impl_1" >> generate_bit.tcl
119+
echo "write_bitstream -force $*.runs/impl_1/$*.bit" >> generate_bit.tcl
120+
echo "write_hw_platform -fixed -force -include_bit $*.xsa" >> generate_bit.tcl
121+
vivado -nojournal -nolog -mode batch -source generate_bit.tcl
122+
ln -f -s $*.runs/impl_1/$*.bit .
123+
mkdir -p rev
124+
EXT=bit; COUNT=100; \
125+
while [ -e rev/$*_rev$$COUNT.$$EXT ]; \
126+
do COUNT=$$((COUNT+1)); done; \
127+
cp $*.bit rev/$*_rev$$COUNT.bit; \
128+
cp $*.xsa rev/$*_rev$$COUNT.xsa; \
129+
echo "Output: rev/$*_rev$$COUNT.$$EXT";

fpga/mqnic/ZCU102/fpga/fpga.xdc

Lines changed: 109 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,109 @@
1+
# XDC constraints for the Xilinx ZCU102 board
2+
# part: xczu9eg-ffvb1156-2-e
3+
4+
# General configuration
5+
set_property BITSTREAM.GENERAL.COMPRESS true [current_design]
6+
7+
# System clocks
8+
# 125 MHz
9+
set_property -dict {LOC G21 IOSTANDARD LVDS_25} [get_ports clk_125mhz_p]
10+
set_property -dict {LOC F21 IOSTANDARD LVDS_25} [get_ports clk_125mhz_n]
11+
create_clock -period 8.000 -name clk_125mhz [get_ports clk_125mhz_p]
12+
13+
# LEDs
14+
set_property -dict {LOC AG14 IOSTANDARD LVCMOS33 SLEW SLOW DRIVE 8} [get_ports {led[0]}]
15+
set_property -dict {LOC AF13 IOSTANDARD LVCMOS33 SLEW SLOW DRIVE 8} [get_ports {led[1]}]
16+
set_property -dict {LOC AE13 IOSTANDARD LVCMOS33 SLEW SLOW DRIVE 8} [get_ports {led[2]}]
17+
set_property -dict {LOC AJ14 IOSTANDARD LVCMOS33 SLEW SLOW DRIVE 8} [get_ports {led[3]}]
18+
set_property -dict {LOC AJ15 IOSTANDARD LVCMOS33 SLEW SLOW DRIVE 8} [get_ports {led[4]}]
19+
set_property -dict {LOC AH13 IOSTANDARD LVCMOS33 SLEW SLOW DRIVE 8} [get_ports {led[5]}]
20+
set_property -dict {LOC AH14 IOSTANDARD LVCMOS33 SLEW SLOW DRIVE 8} [get_ports {led[6]}]
21+
set_property -dict {LOC AL12 IOSTANDARD LVCMOS33 SLEW SLOW DRIVE 8} [get_ports {led[7]}]
22+
23+
set_false_path -to [get_ports {led[*]}]
24+
set_output_delay 0 [get_ports {led[*]}]
25+
26+
# Reset button
27+
#set_property -dict {LOC AM13 IOSTANDARD LVCMOS33} [get_ports reset]
28+
29+
#set_false_path -from [get_ports {reset}]
30+
#set_input_delay 0 [get_ports {reset}]
31+
32+
# Push buttons
33+
set_property -dict {LOC AG15 IOSTANDARD LVCMOS33} [get_ports btnu]
34+
set_property -dict {LOC AF15 IOSTANDARD LVCMOS33} [get_ports btnl]
35+
set_property -dict {LOC AE15 IOSTANDARD LVCMOS33} [get_ports btnd]
36+
set_property -dict {LOC AE14 IOSTANDARD LVCMOS33} [get_ports btnr]
37+
set_property -dict {LOC AG13 IOSTANDARD LVCMOS33} [get_ports btnc]
38+
39+
set_false_path -from [get_ports {btnu btnl btnd btnr btnc}]
40+
set_input_delay 0 [get_ports {btnu btnl btnd btnr btnc}]
41+
42+
# DIP switches
43+
set_property -dict {LOC AN14 IOSTANDARD LVCMOS33} [get_ports {sw[0]}]
44+
set_property -dict {LOC AP14 IOSTANDARD LVCMOS33} [get_ports {sw[1]}]
45+
set_property -dict {LOC AM14 IOSTANDARD LVCMOS33} [get_ports {sw[2]}]
46+
set_property -dict {LOC AN13 IOSTANDARD LVCMOS33} [get_ports {sw[3]}]
47+
set_property -dict {LOC AN12 IOSTANDARD LVCMOS33} [get_ports {sw[4]}]
48+
set_property -dict {LOC AP12 IOSTANDARD LVCMOS33} [get_ports {sw[5]}]
49+
set_property -dict {LOC AL13 IOSTANDARD LVCMOS33} [get_ports {sw[6]}]
50+
set_property -dict {LOC AK13 IOSTANDARD LVCMOS33} [get_ports {sw[7]}]
51+
52+
set_false_path -from [get_ports {sw[*]}]
53+
set_input_delay 0 [get_ports {sw[*]}]
54+
55+
# UART
56+
#set_property -dict {LOC F13 IOSTANDARD LVCMOS33 SLEW SLOW DRIVE 8} [get_ports uart_txd]
57+
#set_property -dict {LOC E13 IOSTANDARD LVCMOS33} [get_ports uart_rxd]
58+
#set_property -dict {LOC D12 IOSTANDARD LVCMOS33} [get_ports uart_rts]
59+
#set_property -dict {LOC E12 IOSTANDARD LVCMOS33 SLEW SLOW DRIVE 8} [get_ports uart_cts]
60+
61+
#set_false_path -to [get_ports {uart_txd uart_cts}]
62+
#set_output_delay 0 [get_ports {uart_txd uart_cts}]
63+
#set_false_path -from [get_ports {uart_rxd uart_rts}]
64+
#set_input_delay 0 [get_ports {uart_rxd uart_rts}]
65+
66+
# I2C interfaces
67+
#set_property -dict {LOC J10 IOSTANDARD LVCMOS33 SLEW SLOW DRIVE 8} [get_ports i2c0_scl]
68+
#set_property -dict {LOC J11 IOSTANDARD LVCMOS33 SLEW SLOW DRIVE 8} [get_ports i2c0_sda]
69+
#set_property -dict {LOC K20 IOSTANDARD LVCMOS33 SLEW SLOW DRIVE 8} [get_ports i2c1_scl]
70+
#set_property -dict {LOC L20 IOSTANDARD LVCMOS33 SLEW SLOW DRIVE 8} [get_ports i2c1_sda]
71+
72+
#set_false_path -to [get_ports {i2c1_sda i2c1_scl}]
73+
#set_output_delay 0 [get_ports {i2c1_sda i2c1_scl}]
74+
#set_false_path -from [get_ports {i2c1_sda i2c1_scl}]
75+
#set_input_delay 0 [get_ports {i2c1_sda i2c1_scl}]
76+
77+
# SFP+ Interface
78+
set_property -dict {LOC D2 } [get_ports sfp0_rx_p] ;# MGTHRXP0_230 GTHE4_CHANNEL_X1Y12 / GTHE4_COMMON_X1Y3
79+
set_property -dict {LOC D1 } [get_ports sfp0_rx_n] ;# MGTHRXN0_230 GTHE4_CHANNEL_X1Y12 / GTHE4_COMMON_X1Y3
80+
set_property -dict {LOC E4 } [get_ports sfp0_tx_p] ;# MGTHTXP0_230 GTHE4_CHANNEL_X1Y12 / GTHE4_COMMON_X1Y3
81+
set_property -dict {LOC E3 } [get_ports sfp0_tx_n] ;# MGTHTXN0_230 GTHE4_CHANNEL_X1Y12 / GTHE4_COMMON_X1Y3
82+
set_property -dict {LOC C4 } [get_ports sfp1_rx_p] ;# MGTHRXP1_230 GTHE4_CHANNEL_X1Y13 / GTHE4_COMMON_X1Y3
83+
set_property -dict {LOC C3 } [get_ports sfp1_rx_n] ;# MGTHRXN1_230 GTHE4_CHANNEL_X1Y13 / GTHE4_COMMON_X1Y3
84+
set_property -dict {LOC D6 } [get_ports sfp1_tx_p] ;# MGTHTXP1_230 GTHE4_CHANNEL_X1Y13 / GTHE4_COMMON_X1Y3
85+
set_property -dict {LOC D5 } [get_ports sfp1_tx_n] ;# MGTHTXN1_230 GTHE4_CHANNEL_X1Y13 / GTHE4_COMMON_X1Y3
86+
set_property -dict {LOC B2 } [get_ports sfp2_rx_p] ;# MGTHRXP2_230 GTHE4_CHANNEL_X1Y14 / GTHE4_COMMON_X1Y3
87+
set_property -dict {LOC B1 } [get_ports sfp2_rx_n] ;# MGTHRXN2_230 GTHE4_CHANNEL_X1Y14 / GTHE4_COMMON_X1Y3
88+
set_property -dict {LOC B6 } [get_ports sfp2_tx_p] ;# MGTHTXP2_230 GTHE4_CHANNEL_X1Y14 / GTHE4_COMMON_X1Y3
89+
set_property -dict {LOC B5 } [get_ports sfp2_tx_n] ;# MGTHTXN2_230 GTHE4_CHANNEL_X1Y14 / GTHE4_COMMON_X1Y3
90+
set_property -dict {LOC A4 } [get_ports sfp3_rx_p] ;# MGTHRXP3_230 GTHE4_CHANNEL_X1Y15 / GTHE4_COMMON_X1Y3
91+
set_property -dict {LOC A3 } [get_ports sfp3_rx_n] ;# MGTHRXN3_230 GTHE4_CHANNEL_X1Y15 / GTHE4_COMMON_X1Y3
92+
set_property -dict {LOC A8 } [get_ports sfp3_tx_p] ;# MGTHTXP3_230 GTHE4_CHANNEL_X1Y15 / GTHE4_COMMON_X1Y3
93+
set_property -dict {LOC A7 } [get_ports sfp3_tx_n] ;# MGTHTXN3_230 GTHE4_CHANNEL_X1Y15 / GTHE4_COMMON_X1Y3
94+
set_property -dict {LOC C8 } [get_ports sfp_mgt_refclk_0_p] ;# MGTREFCLK0P_230 from U56 SI570 via U51 SI53340
95+
set_property -dict {LOC C7 } [get_ports sfp_mgt_refclk_0_n] ;# MGTREFCLK0N_230 from U56 SI570 via U51 SI53340
96+
#set_property -dict {LOC B10 } [get_ports sfp_mgt_refclk_1_p] ;# MGTREFCLK1P_230 from U20 CKOUT2 SI5328
97+
#set_property -dict {LOC B9 } [get_ports sfp_mgt_refclk_1_n] ;# MGTREFCLK1N_230 from U20 CKOUT2 SI5328
98+
#set_property -dict {LOC R10 IOSTANDARD LVDS} [get_ports sfp_recclk_p] ;# to U20 CKIN1 SI5328
99+
#set_property -dict {LOC R9 IOSTANDARD LVDS} [get_ports sfp_recclk_n] ;# to U20 CKIN1 SI5328
100+
set_property -dict {LOC A12 IOSTANDARD LVCMOS33 SLEW SLOW DRIVE 8} [get_ports sfp0_tx_disable_b]
101+
set_property -dict {LOC A13 IOSTANDARD LVCMOS33 SLEW SLOW DRIVE 8} [get_ports sfp1_tx_disable_b]
102+
set_property -dict {LOC B13 IOSTANDARD LVCMOS33 SLEW SLOW DRIVE 8} [get_ports sfp2_tx_disable_b]
103+
set_property -dict {LOC C13 IOSTANDARD LVCMOS33 SLEW SLOW DRIVE 8} [get_ports sfp3_tx_disable_b]
104+
105+
# 156.25 MHz MGT reference clock
106+
create_clock -period 6.400 -name sfp_mgt_refclk_0 [get_ports sfp_mgt_refclk_0_p]
107+
108+
set_false_path -to [get_ports {sfp0_tx_disable_b sfp1_tx_disable_b sfp2_tx_disable_b sfp3_tx_disable_b}]
109+
set_output_delay 0 [get_ports {sfp0_tx_disable_b sfp1_tx_disable_b sfp2_tx_disable_b sfp3_tx_disable_b}]
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
*
2+
!/config.tcl
3+
!/Makefile

0 commit comments

Comments
 (0)