{"id":249,"date":"2024-06-27T12:43:09","date_gmt":"2024-06-27T03:43:09","guid":{"rendered":"https:\/\/rtlearner.com\/?p=249"},"modified":"2025-12-29T16:34:21","modified_gmt":"2025-12-29T07:34:21","slug":"fpga-ila-setup-guide","status":"publish","type":"post","link":"https:\/\/rtlearner.com\/en\/fpga-ila-setup-guide\/","title":{"rendered":"[FPGA] ILA \ubaa8\ub4c8 \uc124\uc815 \ubc0f \uc0ac\uc6a9 \uac00\uc774\ub4dc"},"content":{"rendered":"<h2 class=\"wp-block-heading\">ILA(Integrated Logic Analyzer) Explanation<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">When conducting FPGA testing, there are times when you need to verify signals. While signals coming from IO pins can be verified with an oscilloscope, internal signals cannot. ILA is a monitoring module built into Vivado during bit file synthesis, and is used to monitor desired signals. Let's learn how to use it.<\/p>\n\n\n<style>.kb-table-of-content-nav.kb-table-of-content-id249_5b042a-d0 .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-id249_5b042a-d0 .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-id249_5b042a-d0 .kb-table-of-contents-title{font-weight:regular;font-style:normal;}.kb-table-of-content-nav.kb-table-of-content-id249_5b042a-d0 .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-id249_5b042a-d0 .kb-table-of-contents-title{font-size:var(--global-kb-font-size-md, 1.25rem);}.kb-table-of-content-nav.kb-table-of-content-id249_5b042a-d0 .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-column249_bfb2a1-11 > .kt-inside-inner-col{box-shadow:0px 0px 14px 0px rgba(0, 0, 0, 0.2);}.kadence-column249_bfb2a1-11 > .kt-inside-inner-col,.kadence-column249_bfb2a1-11 > .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-column249_bfb2a1-11 > .kt-inside-inner-col{column-gap:var(--global-kb-gap-sm, 1rem);}.kadence-column249_bfb2a1-11 > .kt-inside-inner-col{flex-direction:column;}.kadence-column249_bfb2a1-11 > .kt-inside-inner-col > .aligncenter{width:100%;}.kadence-column249_bfb2a1-11 > .kt-inside-inner-col:before{opacity:0.3;}.kadence-column249_bfb2a1-11{position:relative;}@media all and (max-width: 1024px){.kadence-column249_bfb2a1-11 > .kt-inside-inner-col{flex-direction:column;justify-content:center;}}@media all and (max-width: 767px){.kadence-column249_bfb2a1-11 > .kt-inside-inner-col{flex-direction:column;justify-content:center;}}<\/style>\n<div class=\"wp-block-kadence-column kadence-column249_bfb2a1-11\"><div class=\"kt-inside-inner-col\">\n<p class=\"wp-block-paragraph\"><strong>Related articles<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u2705<a href=\"https:\/\/rtlearner.com\/en\/fpga-xdc-setting\/\">xdc Setting Guide<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u2705<a href=\"https:\/\/rtlearner.com\/en\/fpga-dcm-setup-guide\/\">DCM module Setup and Usage Guide<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\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 class=\"wp-block-paragraph\">\u2705<a href=\"https:\/\/rtlearner.com\/en\/vio-setup-guide\/\">VIO user guide, pin test<\/a><\/p>\n<\/div><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">Creation Method<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">First, select IP Catalog in the Project Manager on the far left of the Xilinx Vivado window.<\/p>\n\n\n<style>.kb-image249_48ef52-9e.kb-image-is-ratio-size, .kb-image249_48ef52-9e .kb-image-is-ratio-size{max-width:410px;width:100%;}.wp-block-kadence-column > .kt-inside-inner-col > .kb-image249_48ef52-9e.kb-image-is-ratio-size, .wp-block-kadence-column > .kt-inside-inner-col > .kb-image249_48ef52-9e .kb-image-is-ratio-size{align-self:unset;}.kb-image249_48ef52-9e figure{max-width:410px;}.kb-image249_48ef52-9e .image-is-svg, .kb-image249_48ef52-9e .image-is-svg img{width:100%;}.kb-image249_48ef52-9e .kb-image-has-overlay:after{opacity:0.3;}.kb-image249_48ef52-9e img.kb-img, .kb-image249_48ef52-9e .kb-img img{box-shadow:0px 0px 14px 0px rgba(0, 0, 0, 0.2);}@media all and (max-width: 767px){.kb-image249_48ef52-9e.kb-image-is-ratio-size, .kb-image249_48ef52-9e .kb-image-is-ratio-size{max-width:290px;width:100%;}.kb-image249_48ef52-9e figure{max-width:290px;}}<\/style>\n<div class=\"wp-block-kadence-image kb-image249_48ef52-9e is-style-default\"><figure class=\"aligncenter\"><img decoding=\"async\" src=\"https:\/\/blog.kakaocdn.net\/dn\/de7FrK\/btsDmVl5BM6\/8Z2jeWJJ8kMGIn02xrbrnK\/img.png\" alt=\"vivado \uba54\ub274\uc5d0\uc11c IP Catalog \uc120\ud0dd\" class=\"kb-img\"\/><figcaption>Select IP Catalog from the vivado menu<\/figcaption><\/figure><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">When you select IP Catalog, the following window appears; search for ILA and select it.<\/p>\n\n\n<style>.kb-image249_b50cbc-46.kb-image-is-ratio-size, .kb-image249_b50cbc-46 .kb-image-is-ratio-size{max-width:648px;width:100%;}.wp-block-kadence-column > .kt-inside-inner-col > .kb-image249_b50cbc-46.kb-image-is-ratio-size, .wp-block-kadence-column > .kt-inside-inner-col > .kb-image249_b50cbc-46 .kb-image-is-ratio-size{align-self:unset;}.kb-image249_b50cbc-46 figure{max-width:648px;}.kb-image249_b50cbc-46 .image-is-svg, .kb-image249_b50cbc-46 .image-is-svg img{width:100%;}.kb-image249_b50cbc-46 .kb-image-has-overlay:after{opacity:0.3;}.kb-image249_b50cbc-46 img.kb-img, .kb-image249_b50cbc-46 .kb-img img{box-shadow:0px 0px 14px 0px rgba(0, 0, 0, 0.2);}@media all and (max-width: 767px){.kb-image249_b50cbc-46.kb-image-is-ratio-size, .kb-image249_b50cbc-46 .kb-image-is-ratio-size{max-width:251px;width:100%;}.kb-image249_b50cbc-46 figure{max-width:251px;}}<\/style>\n<div class=\"wp-block-kadence-image kb-image249_b50cbc-46\"><figure class=\"aligncenter\"><img decoding=\"async\" src=\"https:\/\/blog.kakaocdn.net\/dn\/cCXcnH\/btsDkPUk2Gs\/1gZqkYSyDt4GcyUUXKlKPK\/img.png\" alt=\"IP Catalog \uc120\ud0dd \uc2dc \ub098\uc624\ub294 \ucc3d\" class=\"kb-img\"\/><figcaption>Window that appears when selecting IP Catalog<\/figcaption><\/figure><\/div>\n\n\n<style>.kb-image249_16b464-17 .kb-image-has-overlay:after{opacity:0.3;}.kb-image249_16b464-17 img.kb-img, .kb-image249_16b464-17 .kb-img img{box-shadow:0px 0px 14px 0px rgba(0, 0, 0, 0.2);}@media all and (max-width: 767px){.kb-image249_16b464-17.kb-image-is-ratio-size, .kb-image249_16b464-17 .kb-image-is-ratio-size{max-width:250px;width:100%;}.kb-image249_16b464-17 figure{max-width:250px;}}<\/style>\n<div class=\"wp-block-kadence-image kb-image249_16b464-17\"><figure class=\"aligncenter\"><img decoding=\"async\" src=\"https:\/\/blog.kakaocdn.net\/dn\/T0v6m\/btsDmU8xRHI\/F9Z7vsnJBpnuuOsy5wUJNK\/img.png\" alt=\"ILA \uc120\ud0dd\" class=\"kb-img\"\/><figcaption>Select module<\/figcaption><\/figure><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Then the following window appears, and I will explain the parts you need to input one by one.<\/p>\n\n\n<style>.kb-image249_214971-dd.kb-image-is-ratio-size, .kb-image249_214971-dd .kb-image-is-ratio-size{max-width:515px;width:100%;}.wp-block-kadence-column > .kt-inside-inner-col > .kb-image249_214971-dd.kb-image-is-ratio-size, .wp-block-kadence-column > .kt-inside-inner-col > .kb-image249_214971-dd .kb-image-is-ratio-size{align-self:unset;}.kb-image249_214971-dd figure{max-width:515px;}.kb-image249_214971-dd .image-is-svg, .kb-image249_214971-dd .image-is-svg img{width:100%;}.kb-image249_214971-dd .kb-image-has-overlay:after{opacity:0.3;}.kb-image249_214971-dd img.kb-img, .kb-image249_214971-dd .kb-img img{box-shadow:0px 0px 14px 0px rgba(0, 0, 0, 0.2);}@media all and (max-width: 767px){.kb-image249_214971-dd.kb-image-is-ratio-size, .kb-image249_214971-dd .kb-image-is-ratio-size{max-width:250px;width:100%;}.kb-image249_214971-dd figure{max-width:250px;}}<\/style>\n<div class=\"wp-block-kadence-image kb-image249_214971-dd\"><figure class=\"aligncenter\"><img decoding=\"async\" src=\"https:\/\/blog.kakaocdn.net\/dn\/lZx82\/btsDmUHtWEM\/DEISCfSgmlmIbDTyznUpw1\/img.png\" alt=\"ILA \uc635\uc158 \ucc3d\" class=\"kb-img\"\/><figcaption>Options<\/figcaption><\/figure><\/div>\n\n\n\n<h4 class=\"wp-block-heading\">Component name<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">First, you need to check the&nbsp;<strong>Component Name<\/strong>. There's a default, but you can change it. You'll want to make sure you enter this name correctly when instantiating it in RTL to avoid errors, right?<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Number of probes, Sample Data Depth<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">Next, you need to modify the<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-theme-palette-1-color\">&nbsp;<\/mark><strong>Number of probes<\/strong>and&nbsp;<strong>Sample Data Depth<\/strong>. The Number of Probes indicates the number of signals you want to monitor. The Sample Data Depth indicates the size of the memory being monitored. Increasing the Depth allows you to observe how signals change over time, but it consumes resources, extending synthesis time and potentially causing tests to not run properly.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">After modifying the settings,&nbsp;<strong>the diagram<\/strong>will automatically change as shown below.<\/p>\n\n\n<style>.kb-image249_ee939c-c6.kb-image-is-ratio-size, .kb-image249_ee939c-c6 .kb-image-is-ratio-size{max-width:547px;width:100%;}.wp-block-kadence-column > .kt-inside-inner-col > .kb-image249_ee939c-c6.kb-image-is-ratio-size, .wp-block-kadence-column > .kt-inside-inner-col > .kb-image249_ee939c-c6 .kb-image-is-ratio-size{align-self:unset;}.kb-image249_ee939c-c6 figure{max-width:547px;}.kb-image249_ee939c-c6 .image-is-svg, .kb-image249_ee939c-c6 .image-is-svg img{width:100%;}.kb-image249_ee939c-c6 .kb-image-has-overlay:after{opacity:0.3;}.kb-image249_ee939c-c6 img.kb-img, .kb-image249_ee939c-c6 .kb-img img{box-shadow:0px 0px 14px 0px rgba(0, 0, 0, 0.2);}@media all and (max-width: 767px){.kb-image249_ee939c-c6.kb-image-is-ratio-size, .kb-image249_ee939c-c6 .kb-image-is-ratio-size{max-width:250px;width:100%;}.kb-image249_ee939c-c6 figure{max-width:250px;}}<\/style>\n<div class=\"wp-block-kadence-image kb-image249_ee939c-c6\"><figure class=\"aligncenter\"><img decoding=\"async\" src=\"https:\/\/blog.kakaocdn.net\/dn\/UINyG\/btsDh9fhGA4\/5T40wlqTEwk51klNPRsbk0\/img.png\" alt=\"\uc218\uc815\ub41c ILA \uc635\uc158 \ucc3d\" class=\"kb-img\"\/><figcaption>Modified Options Window<\/figcaption><\/figure><\/div>\n\n\n\n<h4 class=\"wp-block-heading\">2nd page<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">In the second window, you can change the width of each signal. Signals like address are usually 32 bits, so of course you'll need to change them, right? I set the option to monitor two signals.<\/p>\n\n\n<style>.kb-image249_922066-e2.kb-image-is-ratio-size, .kb-image249_922066-e2 .kb-image-is-ratio-size{max-width:591px;width:100%;}.wp-block-kadence-column > .kt-inside-inner-col > .kb-image249_922066-e2.kb-image-is-ratio-size, .wp-block-kadence-column > .kt-inside-inner-col > .kb-image249_922066-e2 .kb-image-is-ratio-size{align-self:unset;}.kb-image249_922066-e2 figure{max-width:591px;}.kb-image249_922066-e2 .image-is-svg, .kb-image249_922066-e2 .image-is-svg img{width:100%;}.kb-image249_922066-e2 .kb-image-has-overlay:after{opacity:0.3;}.kb-image249_922066-e2 img.kb-img, .kb-image249_922066-e2 .kb-img img{box-shadow:0px 0px 14px 0px rgba(0, 0, 0, 0.2);}@media all and (max-width: 767px){.kb-image249_922066-e2.kb-image-is-ratio-size, .kb-image249_922066-e2 .kb-image-is-ratio-size{max-width:250px;width:100%;}.kb-image249_922066-e2 figure{max-width:250px;}}<\/style>\n<div class=\"wp-block-kadence-image kb-image249_922066-e2\"><figure class=\"aligncenter\"><img decoding=\"async\" src=\"https:\/\/blog.kakaocdn.net\/dn\/cRpis7\/btsDkDGvZMF\/3DngikDwnx1qwKhS2Vpe2k\/img.png\" alt=\"ILA \uc635\uc158 \ucc3d 2nd page\" class=\"kb-img\"\/><figcaption>ILA Options Window 2nd page<\/figcaption><\/figure><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">After setting this up and pressing OK, the following window will appear. If you press Generate, it will be automatically generated and you can then check the creation in IP sources.<\/p>\n\n\n<style>.kb-image249_da6398-2f .kb-image-has-overlay:after{opacity:0.3;}.kb-image249_da6398-2f img.kb-img, .kb-image249_da6398-2f .kb-img img{box-shadow:0px 0px 14px 0px rgba(0, 0, 0, 0.2);}@media all and (max-width: 767px){.kb-image249_da6398-2f.kb-image-is-ratio-size, .kb-image249_da6398-2f .kb-image-is-ratio-size{max-width:250px;width:100%;}.kb-image249_da6398-2f figure{max-width:250px;}}<\/style>\n<div class=\"wp-block-kadence-image kb-image249_da6398-2f\"><figure class=\"aligncenter\"><img decoding=\"async\" src=\"https:\/\/blog.kakaocdn.net\/dn\/TDoug\/btsDjZJPVE0\/1vyF7AxbQ7vR4zApk4KFok\/img.png\" alt=\"ILA \uc0dd\uc131 \ucc3d\" class=\"kb-img\"\/><figcaption>Generation Window<\/figcaption><\/figure><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">Instantiation<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Now that it's created, you can instantiate it in RTL by writing the following code:<\/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>ila_0  u_ila0 (\n     .clk    (clk0  )\n    ,.probe0 (wire_0)\n    ,.probe1 (wire_1)\n);<\/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: #D8DEE9FF\">ila_0 u_ila0 (<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">     .clk (clk0 )<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    ,.probe0 (wire_0)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    ,.probe1 (wire_1)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">);<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Here, wire_0 and wire_1 are the signals I want to monitor, and clk0 is the sampling clock. Naturally, I need to assign them to the internal clock, right? However, one thing to note is that you need to connect a clock that starts as soon as the board powers up. I'll explain what this means in the final note.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">How to use<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Bit File Download<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">When you synthesize the bit file with ILA included in the RTL design, an ltx file is generated. When loading the bit file onto the board, you must also include this ltx file to enable monitoring.<\/p>\n\n\n<style>.kb-image249_34b39a-04.kb-image-is-ratio-size, .kb-image249_34b39a-04 .kb-image-is-ratio-size{max-width:650px;width:100%;}.wp-block-kadence-column > .kt-inside-inner-col > .kb-image249_34b39a-04.kb-image-is-ratio-size, .wp-block-kadence-column > .kt-inside-inner-col > .kb-image249_34b39a-04 .kb-image-is-ratio-size{align-self:unset;}.kb-image249_34b39a-04 figure{max-width:650px;}.kb-image249_34b39a-04 .image-is-svg, .kb-image249_34b39a-04 .image-is-svg img{width:100%;}.kb-image249_34b39a-04 .kb-image-has-overlay:after{opacity:0.3;}.kb-image249_34b39a-04 img.kb-img, .kb-image249_34b39a-04 .kb-img img{box-shadow:0px 0px 14px 0px rgba(0, 0, 0, 0.2);}@media all and (max-width: 767px){.kb-image249_34b39a-04.kb-image-is-ratio-size, .kb-image249_34b39a-04 .kb-image-is-ratio-size{max-width:250px;width:100%;}.kb-image249_34b39a-04 figure{max-width:250px;}}<\/style>\n<div class=\"wp-block-kadence-image kb-image249_34b39a-04\"><figure class=\"aligncenter\"><img decoding=\"async\" src=\"https:\/\/blog.kakaocdn.net\/dn\/bWV3RA\/btsDnEL9ram\/zw0RNUDVUKD3kVsLVkhbYK\/img.png\" alt=\"FPGA \ubcf4\ub4dc\uc5d0 bit, ltx \ud30c\uc77c \ub2e4\uc6b4\ub85c\ub4dc\" class=\"kb-img\"\/><figcaption>Download bit, ltx files to the board<\/figcaption><\/figure><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">Actual Usage Example<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">After installing the bit file on the board, the following window will appear in vivado.<\/p>\n\n\n<style>.kb-image249_15dca1-96.kb-image-is-ratio-size, .kb-image249_15dca1-96 .kb-image-is-ratio-size{max-width:650px;width:100%;}.wp-block-kadence-column > .kt-inside-inner-col > .kb-image249_15dca1-96.kb-image-is-ratio-size, .wp-block-kadence-column > .kt-inside-inner-col > .kb-image249_15dca1-96 .kb-image-is-ratio-size{align-self:unset;}.kb-image249_15dca1-96 figure{max-width:650px;}.kb-image249_15dca1-96 .image-is-svg, .kb-image249_15dca1-96 .image-is-svg img{width:100%;}.kb-image249_15dca1-96 .kb-image-has-overlay:after{opacity:0.3;}.kb-image249_15dca1-96 img.kb-img, .kb-image249_15dca1-96 .kb-img img{box-shadow:0px 0px 14px 0px rgba(0, 0, 0, 0.2);}@media all and (max-width: 767px){.kb-image249_15dca1-96.kb-image-is-ratio-size, .kb-image249_15dca1-96 .kb-image-is-ratio-size{max-width:250px;width:100%;}.kb-image249_15dca1-96 figure{max-width:250px;}}<\/style>\n<div class=\"wp-block-kadence-image kb-image249_15dca1-96\"><figure class=\"aligncenter\"><img decoding=\"async\" src=\"https:\/\/blog.kakaocdn.net\/dn\/kzQOq\/btsDlocpSpW\/p7wkDkbIIFONYYftvIT2dK\/img.png\" alt=\"\ub2e4\uc6b4 \ud6c4 vivado \ucc3d\" class=\"kb-img\"\/><figcaption>After downloading, vivado window<\/figcaption><\/figure><\/div>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>the red box<\/strong>shows the signals I wanted to monitor. I want to monitor 1-bit wire_0 and 32-bit wire_1.<br>Now, we need to configure the signal monitoring options. First, let's look at&nbsp;<strong>the blue box<\/strong>&nbsp;\ubd80\ubd84\uc744 \uc0b4\ud3b4\ubcf4\uaca0\uc2b5\ub2c8\ub2e4.<\/p>\n\n\n<style>.kb-image249_552b4e-e0.kb-image-is-ratio-size, .kb-image249_552b4e-e0 .kb-image-is-ratio-size{max-width:650px;width:100%;}.wp-block-kadence-column > .kt-inside-inner-col > .kb-image249_552b4e-e0.kb-image-is-ratio-size, .wp-block-kadence-column > .kt-inside-inner-col > .kb-image249_552b4e-e0 .kb-image-is-ratio-size{align-self:unset;}.kb-image249_552b4e-e0 figure{max-width:650px;}.kb-image249_552b4e-e0 .image-is-svg, .kb-image249_552b4e-e0 .image-is-svg img{width:100%;}.kb-image249_552b4e-e0 .kb-image-has-overlay:after{opacity:0.3;}.kb-image249_552b4e-e0 img.kb-img, .kb-image249_552b4e-e0 .kb-img img{box-shadow:0px 0px 14px 0px rgba(0, 0, 0, 0.2);}@media all and (max-width: 767px){.kb-image249_552b4e-e0.kb-image-is-ratio-size, .kb-image249_552b4e-e0 .kb-image-is-ratio-size{max-width:250px;width:100%;}.kb-image249_552b4e-e0 figure{max-width:250px;}}<\/style>\n<div class=\"wp-block-kadence-image kb-image249_552b4e-e0\"><figure class=\"aligncenter\"><img decoding=\"async\" src=\"https:\/\/blog.kakaocdn.net\/dn\/ILF88\/btsDri167zZ\/epxVLOZtkd3ql29WATWzH0\/img.png\" alt=\"ILA \uc0ac\uc6a9 \uc635\uc158\" class=\"kb-img\"\/><figcaption>Usage Options<\/figcaption><\/figure><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Remember how I explained that Sample Data Depth refers to the size of the monitored memory?&nbsp;<strong>Trigger position in window<\/strong>determines which part of the user-defined depth will trigger. For example, if the depth is 8192 and the trigger position is 4096, you'll be able to see halfway around the user-defined trigger point. However, this isn't always necessary, so I usually set it to a small value (like 100 or 1000).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Next, you need to modify the&nbsp;<strong>the yellow box.<\/strong>&nbsp;\ubd80\ubd84\uc758 \uc635\uc158\uc744 \uc218\uc815\ud574 \ubd05\uc2dc\ub2e4.<\/p>\n\n\n<style>.kb-image249_3e21ac-35.kb-image-is-ratio-size, .kb-image249_3e21ac-35 .kb-image-is-ratio-size{max-width:650px;width:100%;}.wp-block-kadence-column > .kt-inside-inner-col > .kb-image249_3e21ac-35.kb-image-is-ratio-size, .wp-block-kadence-column > .kt-inside-inner-col > .kb-image249_3e21ac-35 .kb-image-is-ratio-size{align-self:unset;}.kb-image249_3e21ac-35 figure{max-width:650px;}.kb-image249_3e21ac-35 .image-is-svg, .kb-image249_3e21ac-35 .image-is-svg img{width:100%;}.kb-image249_3e21ac-35 .kb-image-has-overlay:after{opacity:0.3;}.kb-image249_3e21ac-35 img.kb-img, .kb-image249_3e21ac-35 .kb-img img{box-shadow:0px 0px 14px 0px rgba(0, 0, 0, 0.2);}@media all and (max-width: 767px){.kb-image249_3e21ac-35.kb-image-is-ratio-size, .kb-image249_3e21ac-35 .kb-image-is-ratio-size{max-width:250px;width:100%;}.kb-image249_3e21ac-35 figure{max-width:250px;}}<\/style>\n<div class=\"wp-block-kadence-image kb-image249_3e21ac-35\"><figure class=\"aligncenter\"><img decoding=\"async\" src=\"https:\/\/blog.kakaocdn.net\/dn\/ooNAT\/btsDqnbPoZ8\/zlIwse03M94WvvuxItT63k\/img.png\" alt=\"\uc0ac\uc6a9 \uc808\ucc28\" class=\"kb-img\"\/><figcaption>How to use<\/figcaption><\/figure><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Here, you set the trigger conditions. You need to select the trigger signal and set the trigger condition. (High level, Low level, Rising edge, Falling edge, etc.)<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Now that you've completed all the settings, simply click Run to begin monitoring. This will change the status from IDLE to Waiting for Trigger, and once you start testing, you'll see a signal at the trigger point you specified.<\/p>\n\n\n<style>.kb-image249_394c6e-40.kb-image-is-ratio-size, .kb-image249_394c6e-40 .kb-image-is-ratio-size{max-width:650px;width:100%;}.wp-block-kadence-column > .kt-inside-inner-col > .kb-image249_394c6e-40.kb-image-is-ratio-size, .wp-block-kadence-column > .kt-inside-inner-col > .kb-image249_394c6e-40 .kb-image-is-ratio-size{align-self:unset;}.kb-image249_394c6e-40 figure{max-width:650px;}.kb-image249_394c6e-40 .image-is-svg, .kb-image249_394c6e-40 .image-is-svg img{width:100%;}.kb-image249_394c6e-40 .kb-image-has-overlay:after{opacity:0.3;}.kb-image249_394c6e-40 img.kb-img, .kb-image249_394c6e-40 .kb-img img{box-shadow:0px 0px 14px 0px rgba(0, 0, 0, 0.2);}@media all and (max-width: 767px){.kb-image249_394c6e-40.kb-image-is-ratio-size, .kb-image249_394c6e-40 .kb-image-is-ratio-size{max-width:250px;width:100%;}.kb-image249_394c6e-40 figure{max-width:250px;}}<\/style>\n<div class=\"wp-block-kadence-image kb-image249_394c6e-40\"><figure class=\"aligncenter\"><img decoding=\"async\" src=\"https:\/\/blog.kakaocdn.net\/dn\/noEwL\/btsDnyyG3JD\/tPh1zUxSdzhkgAH8Zl0BA1\/img.png\" alt=\"Waiting for Trigger\" class=\"kb-img\"\/><figcaption>Waiting for Trigger<\/figcaption><\/figure><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Then it will change from IDLE to Waiting for Trigger and when you start the test you will be able to see the signal of the trigger point you set.<\/p>\n\n\n<style>.kb-image249_8f73ba-b9.kb-image-is-ratio-size, .kb-image249_8f73ba-b9 .kb-image-is-ratio-size{max-width:650px;width:100%;}.wp-block-kadence-column > .kt-inside-inner-col > .kb-image249_8f73ba-b9.kb-image-is-ratio-size, .wp-block-kadence-column > .kt-inside-inner-col > .kb-image249_8f73ba-b9 .kb-image-is-ratio-size{align-self:unset;}.kb-image249_8f73ba-b9 figure{max-width:650px;}.kb-image249_8f73ba-b9 .image-is-svg, .kb-image249_8f73ba-b9 .image-is-svg img{width:100%;}.kb-image249_8f73ba-b9 .kb-image-has-overlay:after{opacity:0.3;}.kb-image249_8f73ba-b9 img.kb-img, .kb-image249_8f73ba-b9 .kb-img img{box-shadow:0px 0px 14px 0px rgba(0, 0, 0, 0.2);}@media all and (max-width: 767px){.kb-image249_8f73ba-b9.kb-image-is-ratio-size, .kb-image249_8f73ba-b9 .kb-image-is-ratio-size{max-width:250px;width:100%;}.kb-image249_8f73ba-b9 figure{max-width:250px;}}<\/style>\n<div class=\"wp-block-kadence-image kb-image249_8f73ba-b9\"><figure class=\"aligncenter\"><img decoding=\"async\" src=\"https:\/\/blog.kakaocdn.net\/dn\/mAR3A\/btsDqlZs81e\/NK4n3NwFUQ4lUjx06yGpDk\/img.png\" alt=\"\ud2b8\ub9ac\uac70\ub9c1 \ub41c \ud6c4 \uc2e0\ud638 \ud655\uc778\" class=\"kb-img\"\/><figcaption>Confirm signal after triggering<\/figcaption><\/figure><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">Precautions for Use<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\">Clock Type<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">There are some caveats to using the ILA module. First, the sampling clock fed into the module must be a clock that starts as soon as the board is powered on. Depending on the user's design, there may be multiple clock sources in the synthesized project, but you must use a clock that comes in as soon as the power is turned on, such as EXT_clock. Otherwise, the following warning message appears, and monitoring may become impossible.<\/p>\n\n\n<style>.kb-image249_56888e-ce.kb-image-is-ratio-size, .kb-image249_56888e-ce .kb-image-is-ratio-size{max-width:650px;width:100%;}.wp-block-kadence-column > .kt-inside-inner-col > .kb-image249_56888e-ce.kb-image-is-ratio-size, .wp-block-kadence-column > .kt-inside-inner-col > .kb-image249_56888e-ce .kb-image-is-ratio-size{align-self:unset;}.kb-image249_56888e-ce figure{max-width:650px;}.kb-image249_56888e-ce .image-is-svg, .kb-image249_56888e-ce .image-is-svg img{width:100%;}.kb-image249_56888e-ce .kb-image-has-overlay:after{opacity:0.3;}.kb-image249_56888e-ce img.kb-img, .kb-image249_56888e-ce .kb-img img{box-shadow:0px 0px 14px 0px rgba(0, 0, 0, 0.2);}@media all and (max-width: 767px){.kb-image249_56888e-ce.kb-image-is-ratio-size, .kb-image249_56888e-ce .kb-image-is-ratio-size{max-width:300px;width:100%;}.kb-image249_56888e-ce figure{max-width:300px;}}<\/style>\n<div class=\"wp-block-kadence-image kb-image249_56888e-ce\"><figure class=\"aligncenter\"><img decoding=\"async\" src=\"https:\/\/blog.kakaocdn.net\/dn\/mVAO8\/btsDnAwfpqj\/0rwIQk1AYJK1mt6Zu2Gzn0\/img.png\" alt=\"ILA \uacbd\uace0 \uba54\uc138\uc9c0\" class=\"kb-img\"\/><figcaption>Warning message<\/figcaption><\/figure><\/div>\n\n\n\n<pre class=\"wp-block-code\"><code>WARNING: [Xicom 50-38] xicom: No CseXsdb register file specified for CseXsdb slave type: 0, cse driver version: 0. Slave initialization skipped.\nINFO: [Labtools 27-1434] Device xc7k410t (JTAG device index = 0) is programmed with a design that has no supported debug core(s) in it.\nWARNING: [Labtools 27-3361] The debug hub core was not detected.\nResolution:\n1. Make sure the clock connected to the debug hub (dbg_hub) core is a free running clock and is active. 2.\n2. Make sure the BSCAN_SWITCH_USER_MASK device property in Vivado Hardware Manager reflects the user scan chain setting in the design and refresh the device. To determine the user scan chain setting in the design, open the implemented design and use 'get_property C_USER_SCAN_CHAIN [get_debug_cores dbg_hub]'.\nFor more details on setting the scan chain property, consult the Vivado Debug and Programming User Guide (UG908).<\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">Clock Frequency<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">The next thing to note is that you cannot monitor signals that have a frequency faster than the sampling clock frequency. In my experience, monitoring didn't work even if the frequency was similar to the ILA clock...<br>Therefore, it is recommended to use the fastest clock possible for the ILA sampling clock. Of course, the first condition above must also be met!!<\/p>\n\n\n<style>.kadence-column249_0b7bf0-f2 > .kt-inside-inner-col{box-shadow:0px 0px 14px 0px rgba(0, 0, 0, 0.2);}.kadence-column249_0b7bf0-f2 > .kt-inside-inner-col,.kadence-column249_0b7bf0-f2 > .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-column249_0b7bf0-f2 > .kt-inside-inner-col{column-gap:var(--global-kb-gap-sm, 1rem);}.kadence-column249_0b7bf0-f2 > .kt-inside-inner-col{flex-direction:column;}.kadence-column249_0b7bf0-f2 > .kt-inside-inner-col > .aligncenter{width:100%;}.kadence-column249_0b7bf0-f2 > .kt-inside-inner-col:before{opacity:0.3;}.kadence-column249_0b7bf0-f2{position:relative;}@media all and (max-width: 1024px){.kadence-column249_0b7bf0-f2 > .kt-inside-inner-col{flex-direction:column;justify-content:center;}}@media all and (max-width: 767px){.kadence-column249_0b7bf0-f2 > .kt-inside-inner-col{flex-direction:column;justify-content:center;}}<\/style>\n<div class=\"wp-block-kadence-column kadence-column249_0b7bf0-f2\"><div class=\"kt-inside-inner-col\">\n<p class=\"wp-block-paragraph\"><strong>Related articles<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u2705<a href=\"https:\/\/rtlearner.com\/en\/fpga-xdc-setting\/\">xdc Setting Guide<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u2705<a href=\"https:\/\/rtlearner.com\/en\/fpga-dcm-setup-guide\/\">DCM module Setup and Usage Guide<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\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 class=\"wp-block-paragraph\">\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 class=\"wp-block-paragraph\">References: <a href=\"https:\/\/docs.amd.com\/r\/en-US\/ug908-vivado-programming-debugging\/ILA\" target=\"_blank\" rel=\"noopener\">ILA Data sheet<\/a><\/p>","protected":false},"excerpt":{"rendered":"<p>ILA is a monitoring module built into Vivado during FPGA synthesis, used to monitor desired signals. So, let's learn how to use it.<\/p>","protected":false},"author":1,"featured_media":268,"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-249","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-fpga","tag-fpga","tag-xilinx","tag-vivado"],"_links":{"self":[{"href":"https:\/\/rtlearner.com\/en\/wp-json\/wp\/v2\/posts\/249","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=249"}],"version-history":[{"count":24,"href":"https:\/\/rtlearner.com\/en\/wp-json\/wp\/v2\/posts\/249\/revisions"}],"predecessor-version":[{"id":1241,"href":"https:\/\/rtlearner.com\/en\/wp-json\/wp\/v2\/posts\/249\/revisions\/1241"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/rtlearner.com\/en\/wp-json\/wp\/v2\/media\/268"}],"wp:attachment":[{"href":"https:\/\/rtlearner.com\/en\/wp-json\/wp\/v2\/media?parent=249"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/rtlearner.com\/en\/wp-json\/wp\/v2\/categories?post=249"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/rtlearner.com\/en\/wp-json\/wp\/v2\/tags?post=249"}],"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: 6a588749d36f73a90a601ae0. Config Timestamp: 2026-07-16 07:24:54 UTC, Cached Timestamp: 2026-09-02 10:26:08 UTC, Optimization Time: 4.3ms -->