1
+ # --------------------------------------------------------------------------------------------------
2
+ # Constraint File for the Zybo-Z7 20 Board
3
+ # --------------------------------------------------------------------------------------------------
4
+
5
+ # --------------------------------------------------------------------------------------------------
6
+ # Clock Source
7
+ # --------------------------------------------------------------------------------------------------
8
+ set_property -dict { PACKAGE_PIN K17 IOSTANDARD LVCMOS33 } [get_ports { sys_clk_p }]; # IO_L12P_T1_MRCC_35 Sch=sysclk
9
+ create_clock -add -name sys_clk -period 8.00 -waveform {0 4} [get_ports { sys_clk_p }];
10
+
11
+
12
+ # SoC clock is generated by clock wizard and its constraints
13
+ set SOC_TCK 50.0
14
+ set soc_clk [get_clocks -of_objects [get_pins i_clkwiz/clk_20]]
15
+
16
+ # --------------------------------------------------------------------------------------------------
17
+ # Switches
18
+ # --------------------------------------------------------------------------------------------------
19
+ set_property -dict { PACKAGE_PIN G15 IOSTANDARD LVCMOS33 } [get_ports { fetch_en_i }]; # IO_L19N_T3_VREF_35 Sch=sw[0]
20
+ set_property -dict { PACKAGE_PIN P15 IOSTANDARD LVCMOS33 } [get_ports { gpio_i[0] }]; # IO_L24P_T3_34 Sch=sw[1]
21
+ set_property -dict { PACKAGE_PIN W13 IOSTANDARD LVCMOS33 } [get_ports { gpio_i[1] }]; # IO_L4N_T0_34 Sch=sw[2]
22
+ set_property -dict { PACKAGE_PIN T16 IOSTANDARD LVCMOS33 } [get_ports { gpio_i[2] }]; # IO_L9P_T1_DQS_34 Sch=sw[3]
23
+
24
+ # set_false_path -from [get_ports {fetch_en_i}] -to *
25
+ # set_input_delay -clock sys_clk 0.0 [get_ports {fetch_en_i}]
26
+
27
+ set_false_path -from [get_ports {gpio_i*}] -to *
28
+ set_input_delay -clock sys_clk 0.0 [get_ports {gpio_i*}]
29
+
30
+ # --------------------------------------------------------------------------------------------------
31
+ # Buttons
32
+ # --------------------------------------------------------------------------------------------------
33
+ set_property -dict { PACKAGE_PIN K18 IOSTANDARD LVCMOS33 } [get_ports { sys_reset }]; # IO_L12N_T1_MRCC_35 Sch=btn[0]
34
+ set_property -dict { PACKAGE_PIN P16 IOSTANDARD LVCMOS33 } [get_ports { gpio_i[3] }]; # IO_L24N_T3_34 Sch=btn[1]
35
+
36
+
37
+ # --------------------------------------------------------------------------------------------------
38
+ # LEDs
39
+ # --------------------------------------------------------------------------------------------------
40
+ set_property -dict { PACKAGE_PIN M14 IOSTANDARD LVCMOS33 } [get_ports { status_o }]; # IO_L23P_T3_35 Sch=led[0]
41
+ set_property -dict { PACKAGE_PIN M15 IOSTANDARD LVCMOS33 } [get_ports { gpio_o[0] }]; # IO_L23N_T3_35 Sch=led[1]
42
+ set_property -dict { PACKAGE_PIN G14 IOSTANDARD LVCMOS33 } [get_ports { gpio_o[1] }]; # IO_0_35 Sch=led[2]
43
+ set_property -dict { PACKAGE_PIN D18 IOSTANDARD LVCMOS33 } [get_ports { gpio_o[2] }]; # IO_L3N_T0_DQS_AD1N_35 Sch=led[3]
44
+ set_property -dict { PACKAGE_PIN F17 IOSTANDARD LVCMOS33 } [get_ports { gpio_o[3] }]; # IO_L6N_T0_VREF_35 Sch=led6_g
45
+
46
+ set_false_path -from * -to [get_ports {status_o}]
47
+ set_output_delay -clock sys_clk 0.0 [get_ports {status_o}]
48
+
49
+ set_false_path -from * -to [get_ports {gpio_o*}]
50
+ set_output_delay -clock sys_clk 0.0 [get_ports {gpio_o*}]
51
+
52
+
53
+
54
+ # --------------------------------------------------------------------------------------------------
55
+ # Pmod Header JB (Zybo Z7-20 only)
56
+ # --------------------------------------------------------------------------------------------------
57
+ set_property -dict { PACKAGE_PIN V8 IOSTANDARD LVCMOS33 } [get_ports { jtag_tms_i }]; # IO_L15P_T2_DQS_13 Sch=jb_p[1]
58
+ set_property -dict { PACKAGE_PIN W8 IOSTANDARD LVCMOS33 } [get_ports { jtag_tdi_i }]; # IO_L15N_T2_DQS_13 Sch=jb_n[1]
59
+ set_property -dict { PACKAGE_PIN U7 IOSTANDARD LVCMOS33 } [get_ports { jtag_tdo_o }]; # IO_L11P_T1_SRCC_13 Sch=jb_p[2]
60
+ set_property -dict { PACKAGE_PIN V7 IOSTANDARD LVCMOS33 } [get_ports { jtag_tck_i }]; # IO_L11N_T1_SRCC_13 Sch=jb_n[2]
61
+
62
+ # --------------------------------------------------------------------------------------------------
63
+ # Pmod Header JC
64
+ # --------------------------------------------------------------------------------------------------
65
+ set_property -dict { PACKAGE_PIN V15 IOSTANDARD LVCMOS33 } [get_ports { uart_rx_i }]; # IO_L10P_T1_34 Sch=jc_p[1]
66
+ set_property -dict { PACKAGE_PIN W15 IOSTANDARD LVCMOS33 } [get_ports { uart_tx_o }]; # IO_L10N_T1_34 Sch=jc_n[1]
67
+
68
+
69
+
70
+ # ###########
71
+ # Switches #
72
+ # ###########
73
+
74
+ set_input_delay -min -clock $soc_clk [expr { $SOC_TCK * 0.10 }] [ \
75
+ get_ports {fetch_en_i}]
76
+ set_input_delay -max -clock $soc_clk [expr { $SOC_TCK * 0.35 }] [ \
77
+ get_ports {fetch_en_i}]
78
+
79
+ set_max_delay [expr { 2 * $SOC_TCK }] -from [get_ports {fetch_en_i}]
80
+ set_false_path -hold -from [get_ports {fetch_en_i}]
81
+
82
+ # ################
83
+ # Clock routing #
84
+ # ################
85
+
86
+ # JTAG is on non-clock-capable GPIOs (if not using BSCANE)
87
+ set_property CLOCK_DEDICATED_ROUTE FALSE [get_nets -of [get_ports jtag_tck_i]]
88
+ set_property CLOCK_BUFFER_TYPE NONE [get_nets -of [get_ports jtag_tck_i]]
89
+
90
+ set_property CLOCK_DEDICATED_ROUTE FALSE [get_nets -of [get_ports sys_reset*]]
91
+ set_property CLOCK_BUFFER_TYPE NONE [get_nets -of [get_ports sys_reset*]]
92
+
93
+ # Remove avoid tc_clk_mux2 to use global clock routing
94
+ set all_in_mux [get_nets -of [ get_pins -filter { DIRECTION == IN } -of \
95
+ [get_cells -hier -filter { ORIG_REF_NAME == tc_clk_mux2 || REF_NAME == tc_clk_mux2 }]]]
96
+ set_property CLOCK_DEDICATED_ROUTE FALSE $all_in_mux
97
+ set_property CLOCK_BUFFER_TYPE NONE $all_in_mux
98
+
99
+ # #######
100
+ # JTAG #
101
+ # #######
102
+
103
+ # 10 MHz (max) JTAG clock
104
+ set JTAG_TCK 100.0
105
+
106
+ # JTAG Clock
107
+ create_clock -period $JTAG_TCK -name clk_jtag [get_ports jtag_tck_i]
108
+ set_input_jitter clk_jtag 1.000
109
+
110
+ # JTAG Clock is asynchronous to all other clocks
111
+ set_clock_groups -name jtag_async -asynchronous -group {clk_jtag}
112
+
113
+ set_input_delay -min -clock clk_jtag [expr { 0.10 * $JTAG_TCK }] [get_ports {jtag_tdi_i jtag_tms_i}]
114
+ set_input_delay -max -clock clk_jtag [expr { 0.20 * $JTAG_TCK }] [get_ports {jtag_tdi_i jtag_tms_i}]
115
+
116
+ set_output_delay -min -clock clk_jtag [expr { 0.10 * $JTAG_TCK }] [get_ports jtag_tdo_o]
117
+ set_output_delay -max -clock clk_jtag [expr { 0.20 * $JTAG_TCK }] [get_ports jtag_tdo_o]
118
+
119
+ # set_max_delay -from [get_ports jtag_trst_ni] $JTAG_TCK
120
+ # set_false_path -hold -from [get_ports jtag_trst_ni]
121
+
122
+ # #######
123
+ # UART #
124
+ # #######
125
+
126
+ # UART speed is at most 5 Mb/s
127
+ set UART_IO_SPEED 200.0
128
+
129
+ set_max_delay [expr { $UART_IO_SPEED * 0.35 }] -from [get_ports uart_rx_i]
130
+ set_false_path -hold -from [get_ports uart_rx_i]
131
+
132
+ set_max_delay [expr { $UART_IO_SPEED * 0.35 }] -to [get_ports uart_tx_o]
133
+ set_false_path -hold -to [get_ports uart_tx_o]
134
+
135
+ # #######
136
+ # CDCs #
137
+ # #######
138
+
139
+ # Disable hold checks on CDCs
140
+ set_property KEEP_HIERARCHY SOFT [get_cells -hier \
141
+ -filter {ORIG_REF_NAME==" sync" || REF_NAME==" sync" }]
142
+ set_false_path -hold -through [get_pins -of_objects [get_cells -hier \
143
+ -filter {ORIG_REF_NAME==" sync" || REF_NAME==" sync" }] -filter {NAME=~*serial_i}]
144
+
145
+ set_false_path -hold -through [get_pins -of_objects [get_cells -hier \
146
+ -filter {ORIG_REF_NAME =~ cdc_*src* || REF_NAME =~ cdc_*src*}] -filter {NAME =~ *async*}]
147
+ set_false_path -hold -through [get_pins -of_objects [get_cells -hier \
148
+ -filter {ORIG_REF_NAME =~ cdc_*dst* || REF_NAME =~ cdc_*dst*}] -filter {NAME =~ *async*}]
0 commit comments