{"id":1150,"date":"2025-12-16T09:41:26","date_gmt":"2025-12-16T00:41:26","guid":{"rendered":"https:\/\/rtlearner.com\/?p=1150"},"modified":"2025-12-18T11:29:30","modified_gmt":"2025-12-18T02:29:30","slug":"fpga-timing-violation-solution","status":"publish","type":"post","link":"https:\/\/rtlearner.com\/en\/fpga-timing-violation-solution\/","title":{"rendered":"[FPGA] Timing Violation \ud574\uacb0: False Path\uc640 Multicycle Path"},"content":{"rendered":"<p>I ran <code>Implementation<\/code>in Vivado, and a red number appeared in the <strong>Design Timing Summary<\/strong>showing a negative WNS (Worst Negative Slack).<\/p>\n\n\n\n<p>At this point, FPGA engineers often wonder, \"Is there something wrong with the design?\" and try to fix the code. However, in most cases like this, the problem lies in the <strong>Constraints files.<\/strong> This is because the error may have occurred because the system was trying to force a path that physically cannot be reached within one clock cycle.<\/p>\n\n\n\n<p>In this article, we'll explain the correct setup and precautions for <strong>False Path<\/strong>and <strong>Multicycle Path<\/strong>, two of the most powerful methods for eliminating timing errors.<\/p>\n\n\n<style>.kb-table-of-content-nav.kb-table-of-content-id1150_424455-12 .kb-table-of-content-wrap{padding-top:var(--global-kb-spacing-sm, 1.5rem);padding-right:var(--global-kb-spacing-sm, 1.5rem);padding-bottom:var(--global-kb-spacing-sm, 1.5rem);padding-left:var(--global-kb-spacing-sm, 1.5rem);box-shadow:0px 0px 14px 0px rgba(0, 0, 0, 0.2);}.kb-table-of-content-nav.kb-table-of-content-id1150_424455-12 .kb-table-of-contents-title-wrap{padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px;}.kb-table-of-content-nav.kb-table-of-content-id1150_424455-12 .kb-table-of-contents-title{font-weight:regular;font-style:normal;}.kb-table-of-content-nav.kb-table-of-content-id1150_424455-12 .kb-table-of-content-wrap .kb-table-of-content-list{font-weight:regular;font-style:normal;margin-top:var(--global-kb-spacing-sm, 1.5rem);margin-right:0px;margin-bottom:0px;margin-left:0px;}@media all and (max-width: 767px){.kb-table-of-content-nav.kb-table-of-content-id1150_424455-12 .kb-table-of-contents-title{font-size:var(--global-kb-font-size-md, 1.25rem);}.kb-table-of-content-nav.kb-table-of-content-id1150_424455-12 .kb-table-of-content-wrap .kb-table-of-content-list{font-size:var(--global-kb-font-size-sm, 0.9rem);}}<\/style>\n\n<style>.kadence-column1150_264a6b-37 > .kt-inside-inner-col{box-shadow:0px 0px 14px 0px rgba(0, 0, 0, 0.2);}.kadence-column1150_264a6b-37 > .kt-inside-inner-col,.kadence-column1150_264a6b-37 > .kt-inside-inner-col:before{border-top-left-radius:0px;border-top-right-radius:0px;border-bottom-right-radius:0px;border-bottom-left-radius:0px;}.kadence-column1150_264a6b-37 > .kt-inside-inner-col{column-gap:var(--global-kb-gap-sm, 1rem);}.kadence-column1150_264a6b-37 > .kt-inside-inner-col{flex-direction:column;}.kadence-column1150_264a6b-37 > .kt-inside-inner-col > .aligncenter{width:100%;}.kadence-column1150_264a6b-37 > .kt-inside-inner-col:before{opacity:0.3;}.kadence-column1150_264a6b-37{position:relative;}@media all and (max-width: 1024px){.kadence-column1150_264a6b-37 > .kt-inside-inner-col{flex-direction:column;justify-content:center;}}@media all and (max-width: 767px){.kadence-column1150_264a6b-37 > .kt-inside-inner-col{flex-direction:column;justify-content:center;}}<\/style>\n<div class=\"wp-block-kadence-column kadence-column1150_264a6b-37\"><div class=\"kt-inside-inner-col\">\n<p><strong>Related articles<\/strong><\/p>\n\n\n\n<p>\u2705<a href=\"https:\/\/rtlearner.com\/en\/fpga-ila-setup-guide\/\">ILA module Setup and Usage Guide<\/a><\/p>\n\n\n\n<p>\u2705<a href=\"https:\/\/rtlearner.com\/en\/fpga-dcm-setup-guide\/\">DCM module Setup and Usage Guide<\/a><\/p>\n\n\n\n<p>\u2705<a href=\"https:\/\/rtlearner.com\/en\/fpga-block-memory-setup-guide\/\">Block memory module setup and usage guide<\/a><\/p>\n\n\n\n<p>\u2705<a href=\"https:\/\/rtlearner.com\/en\/vio-setup-guide\/\">VIO user guide, pin test<\/a><\/p>\n<\/div><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">1. Why are Timing Constraints Necessary?<\/h2>\n\n\n\n<p>Vivado's Static Timing Analyzer (STA) basically assumes that \"data transmission between all registers must be completed within 1 clock cycle.\"<\/p>\n\n\n\n<p>However, exceptions exist in real circuits.<\/p>\n\n\n\n<ol start=\"1\" class=\"wp-block-list\">\n<li><strong>CDC (Clock Domain Crossing):<\/strong> Timing cannot be met between different clocks. (Impossible to check)<\/li>\n\n\n\n<li><strong>Slow Signals:<\/strong> What if you use a 100MHz clock, but a specific control signal changes only once every 2-3 clocks? There is no need to push it to arrive within 1 clock.<\/li>\n<\/ol>\n\n\n\n<p>If you do not specify these exceptions in the xdc (Xilinx Design Constraints) file, the Vivado tool spits out a <strong>Timing Violation<\/strong>while trying to solve an impossible homework assignment.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">2. False Path: \"Do Not Check This Path\"<\/h2>\n\n\n\n<p><strong>False Path<\/strong>is a command that <strong>completely excludes<\/strong>a path from timing analysis.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">2.1. When to Use?<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>CDC (Clock Domain Crossing):<\/strong> <code>clk_A<\/code> domain to <code>clk_B<\/code> domain crossing signal. (Must be handled at the circuit level with a 2-FF Synchronizer, etc.)<\/li>\n\n\n\n<li><strong>Asynchronous Reset:<\/strong> A path from an asynchronous reset pin to a register.<\/li>\n\n\n\n<li><strong>Configuration Signals:<\/strong> Mode setting pins that are set once at boot and do not change.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">2.2. XDC command syntax (Tcl)<\/h3>\n\n\n\n<p>This is the most used pattern. You can enter it in the Vivado Tcl Console or in an xdc file.<\/p>\n\n\n\n<p><strong>\u2460 Breaking the relationship between clocks (most common)<\/strong><\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewbox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#d8dee9ff;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly># clk_a\uc5d0\uc11c clk_b\ub85c \uac00\ub294 \ubaa8\ub4e0 \uacbd\ub85c\ub294 \ubb34\uc2dc\ud574\ub77c\nset_false_path -from &#91;get_clocks clk_a&#93; -to &#91;get_clocks clk_b&#93;\n\n# \ubc18\ub300 \ubc29\ud5a5\ub3c4 \ubb34\uc2dc (\uc591\ubc29\ud5a5 CDC\uc778 \uacbd\uc6b0)\nset_false_path -from &#91;get_clocks clk_b&#93; -to &#91;get_clocks clk_a&#93;<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewbox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki nord\" style=\"background-color: #2e3440ff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #616E88\"># Ignore all paths from clk_a to clk_b<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">set_multicycle_path <\/span><span style=\"color: #81A1C1\">-from<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">&#91;<\/span><span style=\"color: #D8DEE9FF\">get_clocks clk_a<\/span><span style=\"color: #ECEFF4\">&#93;<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">-<\/span><span style=\"color: #D8DEE9FF\">to <\/span><span style=\"color: #ECEFF4\">&#91;<\/span><span style=\"color: #D8DEE9FF\">get_clocks clk_b<\/span><span style=\"color: #ECEFF4\">&#93;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #616E88\"># Ignore the opposite direction (if it's bidirectional CDC)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">set_multicycle_path <\/span><span style=\"color: #81A1C1\">-from<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">&#91;<\/span><span style=\"color: #D8DEE9FF\">get_clocks clk_b<\/span><span style=\"color: #ECEFF4\">&#93;<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">-<\/span><span style=\"color: #D8DEE9FF\">to <\/span><span style=\"color: #ECEFF4\">&#91;<\/span><span style=\"color: #D8DEE9FF\">get_clocks clk_a<\/span><span style=\"color: #ECEFF4\">&#93;<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p><strong>\u2461 Ignore specific pins (Reset, etc.)<\/strong><\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewbox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#d8dee9ff;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly># 'sys_rst_n' \ud3ec\ud2b8\uc5d0\uc11c \uc2dc\uc791\ub418\ub294 \ubaa8\ub4e0 \uacbd\ub85c\ub294 \ubb34\uc2dc\nset_false_path -from &#91;get_ports sys_rst_n&#93;<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewbox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki nord\" style=\"background-color: #2e3440ff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #616E88\"># Ignore all paths starting from 'sys_rst_n' port<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">set_multicycle_path <\/span><span style=\"color: #81A1C1\">-from<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">&#91;<\/span><span style=\"color: #D8DEE9FF\">get_ports sys_rst_n<\/span><span style=\"color: #ECEFF4\">&#93;<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><strong>\u26a0\ufe0f Caution:<\/strong> <code>set_multicycle_path<\/code>is very powerful. If you accidentally place this on a valid data path, the tool will abandon timing checks and place it arbitrarily. This will result in the worst-case scenario: <strong>random chip malfunctions.<\/strong>Be sure to apply this only where the CDC circuit (synchronizer) is present.<\/p>\n<\/blockquote>\n\n\n\n<h2 class=\"wp-block-heading\">3. Multicycle Path: \"Take Your Time\"<\/h2>\n\n\n\n<p><strong>Multicycle Path<\/strong>allows data to take <strong>more than one clock cycle (N Cycles)<\/strong> to arrive.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">3.1. When to use?<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Enable-based logic:<\/strong> If a 100MHz clock is used, but the <code>enable<\/code> signal turns on once every 4 clocks, data is transferred.<\/li>\n\n\n\n<li><strong>Complex arithmetic operations:<\/strong> such as multiplication or division, where the combinational circuit delay is large and cannot be calculated within 1 clock, but the result can be obtained 2-3 clocks later through pipeline design.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">3.2. Key Pitfall: Hold Time (N-1 Rule)<\/h3>\n\n\n\n<p>This is a <strong>senior's know-how.<\/strong>Many people simply increase the setup and feel secure, but then a <strong>Hold Violation<\/strong>occurs.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Default behavior:<\/strong> Setup checks are performed at cycle 1 (default), and Hold checks are performed at cycle 0 (on the same edge).<\/li>\n\n\n\n<li><strong>Setup is increased to 2:<\/strong> The tool will attempt to send data as slowly as possible, as it has more setup time.<\/li>\n\n\n\n<li><strong>Problem:<\/strong> Data may start too late, potentially violating the Hold check threshold (cycle 0).<\/li>\n\n\n\n<li><strong>Solution:<\/strong> If Setup is increased to <code>N<\/code>, the Hold check threshold must also be pushed back by <code>N-1<\/code>.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">3.3. XDC command syntax (Tcl)<\/h3>\n\n\n\n<p><strong>Setup N cycles, Hold N-1 cycles<\/strong><\/p>\n\n\n\n<p>For example, let's assume the path from <code>cpu_core<\/code>to <code>mem_ctrl<\/code>has 3 clocks of headroom.<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewbox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#d8dee9ff;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly># 1. Setup\uc744 3\uc8fc\uae30\ub85c \uc644\ud654 (\uae30\ubcf8\uac12 1 -> 3)\nset_multicycle_path -setup 3 -from &#91;get_pins cpu_core\/reg_out&#93; -to &#91;get_pins mem_ctrl\/reg_in&#93;\n\n# 2. Hold\ub97c 2\uc8fc\uae30(3-1) \ub4a4\ub85c \uc774\ub3d9 (\ud544\uc218!)\nset_multicycle_path -hold 2 -from &#91;get_pins cpu_core\/reg_out&#93; -to &#91;get_pins mem_ctrl\/reg_in&#93;<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewbox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki nord\" style=\"background-color: #2e3440ff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #616E88\"># 1. Relax the setup to 3 cycles (default 1 -&gt; 3)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">xdc <\/span><span style=\"color: #81A1C1\">-<\/span><span style=\"color: #D8DEE9FF\">setup <\/span><span style=\"color: #B48EAD\">3<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">-from<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">&#91;<\/span><span style=\"color: #D8DEE9FF\">get_pins cpu_core<\/span><span style=\"color: #81A1C1\">\/<\/span><span style=\"color: #D8DEE9FF\">reg_out<\/span><span style=\"color: #ECEFF4\">&#93;<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">-<\/span><span style=\"color: #D8DEE9FF\">to <\/span><span style=\"color: #ECEFF4\">&#91;<\/span><span style=\"color: #D8DEE9FF\">get_pins mem_ctrl<\/span><span style=\"color: #81A1C1\">\/<\/span><span style=\"color: #D8DEE9FF\">reg_in<\/span><span style=\"color: #ECEFF4\">&#93;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #616E88\">#2. Move Hold back 2 cycles (3-1) (Required!)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">xdc <\/span><span style=\"color: #81A1C1\">-<\/span><span style=\"color: #D8DEE9FF\">hold <\/span><span style=\"color: #B48EAD\">2<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">-from<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">&#91;<\/span><span style=\"color: #D8DEE9FF\">get_pins cpu_core<\/span><span style=\"color: #81A1C1\">\/<\/span><span style=\"color: #D8DEE9FF\">reg_out<\/span><span style=\"color: #ECEFF4\">&#93;<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">-<\/span><span style=\"color: #D8DEE9FF\">to <\/span><span style=\"color: #ECEFF4\">&#91;<\/span><span style=\"color: #D8DEE9FF\">get_pins mem_ctrl<\/span><span style=\"color: #81A1C1\">\/<\/span><span style=\"color: #D8DEE9FF\">reg_in<\/span><span style=\"color: #ECEFF4\">&#93;<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><strong>\ud83d\udca1 Summary formula:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Setup = <strong>N<\/strong><\/li>\n\n\n\n<li>Hold = <strong>N &#8211; 1<\/strong><\/li>\n<\/ul>\n<\/blockquote>\n\n\n\n<h2 class=\"wp-block-heading\">4. Practical Guide: The Order of Application in Vivado<\/h2>\n\n\n\n<p>This is the flow for reporting timing errors and writing constraints.<\/p>\n\n\n\n<ol start=\"1\" class=\"wp-block-list\">\n<li><strong>Check Timing Report:<\/strong>\n<ul class=\"wp-block-list\">\n<li>After Vivado Implementation is complete, <code>Open Implemented Design<\/code>.<\/li>\n\n\n\n<li><code>Report Timing Summary<\/code> Click.<\/li>\n\n\n\n<li><strong>Intra-Clock Paths<\/strong> error? -&gt; Logic is too long. (Need to add pipeline or consider Multicycle)<\/li>\n\n\n\n<li><strong>Inter-Clock Paths<\/strong> error? -&gt; 99% probability it's CDC. (Consider False Path)<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Path Analysis:<\/strong>\n<ul class=\"wp-block-list\">\n<li>Double-click the Failing Path to view its <code>Path Properties<\/code>.<\/li>\n\n\n\n<li>Make sure the Start Point and End Point are in different clock domains.<\/li>\n\n\n\n<li>Check the<code>Schematic<\/code>to see if there's a synchronizer (2-FF) in the middle.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Create XDC:<\/strong>\n<ul class=\"wp-block-list\">\n<li>If it's safe to do so, add the <code>set_false_path<\/code> or <code>set_multicycle_path<\/code> commands described above to the <code>xdc<\/code>file.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Re-run:<\/strong>\n<ul class=\"wp-block-list\">\n<li>Rerun the implementation. Verify that the WNS value has changed to positive.<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading\">5. Conclusion: Constraints Are Not Magic<\/h2>\n\n\n\n<p>When a timing error occurs, novice engineers inevitably want to eliminate it by implementing a <code>False Path<\/code>. This is like driving blindfolded.<\/p>\n\n\n\n<ol start=\"1\" class=\"wp-block-list\">\n<li><strong>Is the circuit safe?<\/strong> (Check CDC processing)<\/li>\n\n\n\n<li><strong>Is the slowness truly acceptable?<\/strong> (Check design intent)<\/li>\n<\/ol>\n\n\n\n<p>Constraints should only be used when these two factors are confirmed. Correctly applied constraints are the ultimate tool for accelerating your workday.<\/p>\n\n\n<style>.kadence-column1150_871085-a9 > .kt-inside-inner-col{box-shadow:0px 0px 14px 0px rgba(0, 0, 0, 0.2);}.kadence-column1150_871085-a9 > .kt-inside-inner-col,.kadence-column1150_871085-a9 > .kt-inside-inner-col:before{border-top-left-radius:0px;border-top-right-radius:0px;border-bottom-right-radius:0px;border-bottom-left-radius:0px;}.kadence-column1150_871085-a9 > .kt-inside-inner-col{column-gap:var(--global-kb-gap-sm, 1rem);}.kadence-column1150_871085-a9 > .kt-inside-inner-col{flex-direction:column;}.kadence-column1150_871085-a9 > .kt-inside-inner-col > .aligncenter{width:100%;}.kadence-column1150_871085-a9 > .kt-inside-inner-col:before{opacity:0.3;}.kadence-column1150_871085-a9{position:relative;}@media all and (max-width: 1024px){.kadence-column1150_871085-a9 > .kt-inside-inner-col{flex-direction:column;justify-content:center;}}@media all and (max-width: 767px){.kadence-column1150_871085-a9 > .kt-inside-inner-col{flex-direction:column;justify-content:center;}}<\/style>\n<div class=\"wp-block-kadence-column kadence-column1150_871085-a9\"><div class=\"kt-inside-inner-col\">\n<p><strong>Related articles<\/strong><\/p>\n\n\n\n<p>\u2705<a href=\"https:\/\/rtlearner.com\/en\/fpga-ila-setup-guide\/\">ILA module Setup and Usage Guide<\/a><\/p>\n\n\n\n<p>\u2705<a href=\"https:\/\/rtlearner.com\/en\/fpga-dcm-setup-guide\/\">DCM module Setup and Usage Guide<\/a><\/p>\n\n\n\n<p>\u2705<a href=\"https:\/\/rtlearner.com\/en\/fpga-block-memory-setup-guide\/\">Block memory module setup and usage guide<\/a><\/p>\n\n\n\n<p>\u2705<a href=\"https:\/\/rtlearner.com\/en\/vio-setup-guide\/\">VIO user guide, pin test<\/a><\/p>\n<\/div><\/div>\n\n\n\n<p>References: <a href=\"https:\/\/share.google\/cKUYoaiRZ0mtsvWd6\" target=\"_blank\" rel=\"noopener\">xilinx<\/a><\/p>","protected":false},"excerpt":{"rendered":"<p>I ran the implementation in Vivado, and the WNS (Worst Negative Slack) was negative, which is the Design Timing\u2026<\/p>","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_kadence_starter_templates_imported_post":false,"_kad_post_transparent":"","_kad_post_title":"","_kad_post_layout":"","_kad_post_sidebar_id":"","_kad_post_content_style":"","_kad_post_vertical_padding":"","_kad_post_feature":"","_kad_post_feature_position":"","_kad_post_header":false,"_kad_post_footer":false,"_kad_post_classname":"","footnotes":""},"categories":[8],"tags":[10,35,36],"class_list":["post-1150","post","type-post","status-publish","format-standard","hentry","category-fpga","tag-fpga","tag-xilinx","tag-vivado"],"_links":{"self":[{"href":"https:\/\/rtlearner.com\/en\/wp-json\/wp\/v2\/posts\/1150","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/rtlearner.com\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/rtlearner.com\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/rtlearner.com\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/rtlearner.com\/en\/wp-json\/wp\/v2\/comments?post=1150"}],"version-history":[{"count":3,"href":"https:\/\/rtlearner.com\/en\/wp-json\/wp\/v2\/posts\/1150\/revisions"}],"predecessor-version":[{"id":1208,"href":"https:\/\/rtlearner.com\/en\/wp-json\/wp\/v2\/posts\/1150\/revisions\/1208"}],"wp:attachment":[{"href":"https:\/\/rtlearner.com\/en\/wp-json\/wp\/v2\/media?parent=1150"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/rtlearner.com\/en\/wp-json\/wp\/v2\/categories?post=1150"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/rtlearner.com\/en\/wp-json\/wp\/v2\/tags?post=1150"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}<!-- This website is optimized by Airlift. Learn more: https://airlift.net. Template:. Learn more: https://airlift.net. Template: 69b92da9d36f73cd2808d6e8. Config Timestamp: 2026-03-17 10:32:09 UTC, Cached Timestamp: 2026-04-18 14:31:03 UTC -->