TUTORIAL Using Integrated Logic Analyzer (ILA) and Virtual Input/Output (VIO) Wav.eform - llw_ilac.1 Q + ct ► » ■ e. • ►I ILA Status: Idle Name This tutorial covers using the Integrated Logic Analyzer (ILA) and Virtual Input/Output (VIO) cores to debug and monitor your VHDL design in the Xilinx Vivado IDE. In many cases, designers are in need to perform on-chip verification. That is, gaining access to an internal signal's behavior in their FPGA design for verification purposes. One option is to bring these signals to the FPGA pins and connect them to LEDs to see their behavior visually. This option is easy, fast, and works well for simple cases, but it is not flexible, scalable, or realistic. Another option is to have an external logic analyzer with advanced features that can display and depict these signals' behavior, but it requires external and relatively expensive equipment. The Integrated Logic Analyzer (ILA) is an alternative that combines the advantages of both previous options. It is easy, fast, flexible, and has many advanced features that help designers quickly view and check the chosen signals' behavior. Overview This article contains multiple screenshots from the Vivado GUI. Click the images to make them larger! Use the sidebar to navigate the outline for this tutorial, or scroll down and click the pop-up navigation button in the top-right corner if you are using a mobile device. ILAandVIO The ILA and VIO are free customizable IPs from Xilinx. The ILA IP helps you easily probe internal signals inside your FPGA and bring them out into a simulation-like environment to monitor them and verify their behavior. Unlike ILA, the VIO IP allows you to virtually drive internal signals inside your FPGA to stimulate or control your design, like driving the RESET signal. • Xilinx Intellectual ProP-fil!Y.: Integrated Logic Analyzer (ILA) • Xilinx Intellectual ProP-erzy.: Virtual lnP-ut/OutP-Ut (VIO) Requirements 1. A Xilinx FPGA board 2. The Vivado Design Suite 3. Basic VHDL knowledge I'm using the Kintex-7 FPGA KC705 Evaluation Kit but the methods shown in this tutorial should work on any modern Xilinx FPGA board. Download the example project You can download the example project and VHDL code using the form below. It should work in Vivado version 2020.2 or newer. Extract the Zip and open the ila_tutorial.xpr file in Vivado to view the example design, or read the rest of this article to learn to create it from scratch. Create a project with Vivado Start by opening Vivado. In Vivado's welcome screen, click the Create Project button. flle FJow Iools �nclow !:!@Ip Q· Qu!ckAccei» £ XILINX. VIVADO HLr Editions �.�!.��, � 1 tart Open ProJect ) Open Example ProJect ) Tasks Manage IP > Open Hardware Manager ) XHub Stores ) Learning Center Documentation and Tutorials ) Quick Take Videos > Release Notes Gulde > j Tel Console ] Clear Lisi Click on Next to continue. - X New Project VIVADO.' HLrEd1liot\S Create a New Viva do Project This w!Lard will guide you through the creation of a new project. To create a Viva do project you wlll need to provide a name and a location for your project files. Next, you will specify lhe type offiow you'll be working with. Finally, you will specify your project sources and choose a default part. £ XILIN Cancel Change the name of the project to ila_tutorial and click on Next. Note: Do not use spaces in the project name. Instead, use an underscore or dash. Add sources £ XILINX. Specify HDL netlist. Block Design, and IP files. or dlrec!ories containing those flies. to add to your project Create a new source flle on disk and add h to your project You can also add and create sources later. +. - / • AddSourceFiles Lookjn• design ecounler.vhdl I• counler_top.vhdll Recent Directories 2 C:JUsers/ahma�esklop/ila_Moriallde319n FHePreview 1--------------------------------------------� USi!AddFi Filename· ·c:.ounter.vlldl""counter_topvlldl" Files of type Design SourceFiles (.vhd. vhdl. vhf. vhdp, vho, v, vf. verilog. vr. Y!I, vb. If. vlog. vp. vm. veo. svo. vh. h. svh, vhp. s,ihp, edn. edf, edif. ngi:. s.. s.p, brrm nil, mern elf, dcp, bd.,,. ,- It ----------, Scan and aocl RTL include files ,nto pro1ed C{lpy�urce� ntopr ,ed Addsoyrr.esllomsI Target lanQuage: VHDL redone II MdFlles 4 S!rrulat r lanaua!le: MdDirector1es II CreateFlle MIXed G) I TdConsole ) New Project Wiz.ard will ;uide you through the process of selecting design sources and a target device !or .a new project Add the constraint file top.xdc from the design folder. Check Copy constraints files into project and click on Next to continue. Note:this constraint file is specific to the KC705 board. You need to change the elk pin and the led pin according to your board. And also, the -period of your board clock. , 'faado..2.0l0.2 file Fjow Iools :Wndo , Ci N� Project ----------------- Add constraints (optlonolJ £ XILINX. Specify or create constraint flies !or physical and tining constraints , +. - • • AddConrtr.,intFilH X Lookjn: 2 Tasks Manage IP > Open Hardware Man File name: XHub Stores ) Fllesoltype· Documentation and T Quick Take Videos C0Q)'COflslralrltsfilesintoprnJeCI > Release Notes Gulde to�udc Recent Olrectories CJ1.Jsers/ahmac110es1ctop/lla_Morialldesi9n set_pn,pert'J PAC'n..Gt_P1ll A88 [vet_ports tiiQ'Qe..i:_2) ( Oesi11nConstraintFlles{.scfc,xdc) 3 Learning X I 4 G) j TdConsole I New Project Wiz.ard will ;uide you through the processof selecting design sources and a target device !or a new project Search for your board and select it from the list. Click on Next to continue. ENTITY INSTANTIATION -- in:,tantiate counter 1 inst PORT MAP( => elk => reset enable => trigger => first counter : ENTITY work.counter(rtl) elk, reset (Q), tied_to_vec, trigger_l_o in:,tantiate counter 2 inst PORT MAP( elk => reset => enable => trigger => second counter : ENTITY work.counter(rtl) trigger_l_o, reset (0) , tied_to_vcc, trigger_2_o Creating the VIO core for RESET Now that you understand the design example, we will create a VIO to control the input port reset. That will give us the ability to manipulate (toggle) the reset from Vivado IDE so we can manually control when to start/stop the counters. Click on IP Catalog, then search for VIC, then double-click on VIC (Virtual Input/Output). : Default Layout FtowNevtgator ; ; ., _ Sources 0- Sett!n11s l=Q= Pr010ct Summary '? _ □ C X i) Add Sources v 1.....---- Languagelefll)lates IPCatalog ?X PROJECT MANAGER -ila_tutolial � ,' Seard!: > Constraints > Sil'TIJlation Sources(1) Name > UtllltySources .., ■ i) t.. {1 matdl} �1 AX14 status License VLNV Production lnduded xllinx.com:lp:vio:3.0 Debu0 & Verfficatlon "' Ubrnrtes [!] -c. .,. VfvadoRepos!tory Open Block Design Hierarchy $ E] ....--­ v Create Block Design GenernteBloCI\Oesagn ,i: Cores I Interfaces DeSignSources(i) > e.■• counter_top(rtj){counter_top.vhdll(2J ..., IP INTEGRATOR x I JP Catalog Corrcille Order J• Debug VIO{Virtual Input/Output),....--- Prwerues i) RunSirrulallon .., RTLANALYSIS Deta1ts > Open Elaborated Design Select an o:::1ect to see oropertles Select an IP or !nterlace or Repository to see details "' SYNTliESIS ► Run Synthesis > Open Syntllesized Design Td Console Messages v IM Pl.EM ENTATION Log Reports Desig11 Ru11s x ? - □ c.:: )) + % ► Run lfllllementallon Name > Open lrn:>lemented Des,0n constraints v ./ synth_1 lrrcil_1 Status constrs_1 synth_deSignCorrc,lete! consirs_1 Nol startea WNS TNS WHS THS TPWS Total Power Failed Routes LUT FF BRAM 10 10 0.0 URAM DSP 0 Start 2/'20121. B:07 PM Elapsed 00:00:52 Run StralelJY Vl\lado Synthesis Defaults IVN< VivadolrrcilerrnnlatonDefault: .., PROGRAM AND DEB UG 19 Generate BJtstream > Open HarctwareManai;ier v < ------------------------------• First, we change the name to vio_reset. Second, we only need an output port for the reset, so we put O in the input probe count box, and we put 1 in the output probe count box. After Vivado finishes synthesizing the VIO, we need to add it to our design by declaring a component for it and instantiating it in the counter_top.vhdl file as below. First, add a component declaration for the vio_reset in the component declaration section in the counter_top.vhdl file. -- Declare vio_reset COMPONENT vio_reset PORT( elk IN STD LOGIC; OUT STD_LOGIC_VECTOR(0 DOWNTO 0) probe_out0 ); END COMPONENT; 1 2 3 4 5 6 7 Now, the VIO is complete, and we are ready to synthesize the design. But before that, we need to change the synthesis setting flatten_hierarchy to None. file FJow fdlt Window Rep.Qrts Iools .. .., PROJE TMANAGE� � _ J 0- Seltin11s ).- ►• Laiout,---'=�=-"'-''"""..,.,--------------------------� X ELABORATED DES Sources l Add Sources " Lan11ua11elerl"l1lales '9' IPCatalO!I ,.: Ne Q· , PrOject Settings General IP\iJ {1lvl > CreateBlock Design > OpenBlockDeSi!ln > GenerateBlockOesa,;in Hierarchy .., SIMULATION E laboration I ..., 9■ vio_res "' IP INTEGRATOR Sirrulation Synthesis � 2 Synlfl Strate(IY: Too(Settings Slm..if 0 Write Incremental Syntriesls IP Defaults ) XHubstore IP S jncrementalsynthesis:: Source FIie Ja Vtvado SynlhesisDefaults' (Vtvado Synth WebTalk .Q.escripllon Help ) TextEdi!or ..., SYNTHESIS ) Colors v Synlh Design (VNado) 3rd Party Sirrulators ► RunSynlhesis let.pre 1-i,anen hierarc:ti]I" Shortcuts > Open SynmeStZeli □esian > Strategies TdConsole > Oper, lmp!emented DeSIQn -,;iated_doct_conversion off --d'irecti\le Default -t:,Ufg ) Window Behavior Me v □ WI VNado Syntriesis Delaults tci.posl Selectron Rules Run l!Tl)lementatton Notset Display > RTlANALYSIS v IMPLEMENTATION Iii VNado Syntriesis Dela ult Reports (Vtvado Synlhesis 2020) Settings Project Chan ? □ � X ReJ>Ort Settings ) IP �Vf ?X constrs_·1 (adiYe) Default �onstraint set l�lementation Propenies Run Sifll..lla�on I : Default Layout Synthesis Specify various settings associated to Synthesis 12 -retmn11 , ...,...-- □ □ 3 ? - □ C D Select an optioo aOO'o'e to see a descrIpnon 0111 ,.. • Synlhesis(38 .., • Out-of-Co v PROGRAM AND DEBUG v ;,.vlo_re Generate81tstream 0 > Open Harctware Mana11er Click on Run Synthesis and then on OK. file fdit Fjow Iools FIOWN8Vlgator v PROJECTMANAGER Rep,2rts -:' i; ? _ 0- Sellln11s 'fiindow Larout Yiew t!elp Q·Otflcli:Acc:ess PROJECT MANAGER - ila_tutorial ' .---------------------, Sources AddSources v Langua11eTe�lates =Q' IPCataI011 ) > > > CreateBlock Design ? _ □ t:l X DeSiansources(1l Sirn.Jlation sources(1l GenerateBloctDesagn - utility Sources IP Sources Libraries Colll)ile Or @1.aunc:tiruns onlocalhost Select an ob1ectto see prop ) Open Elaborated Design "'�_,/ � Tel Console > Open SynlheslZ.ed Design Na= -., IMPLEMENTATION v t synlh_1 (ac:trve) ► Run l�lementation r. lllllL1 ) Open l�lementedOesign vio_reset_synlt1_1 v PROGRAM AND DEBUG > Open Harctware Manager Mess.ages .., < Log QQ.eneratesoiptsonly Design Runs » % Constraints consm1_1 status Nolstllned constrs_i Not started vio_resel Notstarted Edit Ha tutorial X pesktop/ila_tutorialfila_tutor1al lmplementallon Nurrileroflobs: 2 summary I Route Status Status mings 002.nistiow ltlisdialo.;iagaln Reporu + Overview I Dashboard • .:OelaultLauncti□irectory> Options Run Sirrula�on ? □ � X Launc:ti lhe selected synthes1s or i�lementation runs Launcht;!irector,: Properties " RTL ANALYSlS ? X Pro·ectname Launch Run� Ready De!aultlay '" ' _ - -�- Protect Summary Settings e.■• co1mter_top[rt1)(counter_top.vhdl)(JJ Constraintst2) Hierarchy OpenBlock De�',ln ljj GenerateBltstream = Messages: No errors or warnings irrpl_1 AdiYerun· Part 2 xc7k70tfb!1484-2 Strategy s Defaults I Failed Nets Vivado l�ementafion Defau�s )( WNS TNS WHS THS TPWS Total Power Failed Routes LUT FF BRAM URAM DSP start Elapsed Run : Vl'lat Vlvac VNac When Vivado finishes synthesis, click on Open Synthesized Design. £lie £!tit Fjow Iools FtowNov1gator '=' v PROJECT MANAGER Rep.9:rts ; ? _ �ndow Larout !:ielp Q• Ouic:kAo:ess Synlt1eslsCofT1)1ete Add Sources .., Langua11elefT1)lates =Q= IPCatalog > v P I INTEGRATOR > > Create8lockDesi11n ?X x Netis1 Project Summary ? _ □ � Overview I Dashboard DeSignsourcest1l Settings > e.■• counter_top[rtl)(counler_lopvtidl) (2) Constraints SimJlation Sources(1) P roject location: 0 Libraries Colll!l!e Ofder ? _ v RTlANALYSIS > Open Elaborated Design 0Bun lfT1]1ementa!lon □ � J ® _Qpen SynllleSU:ed Design / Q Ylewf Analy:z_e and constra.71'°sl syntllesisnetlisl design QQon1shOWUlll>Ul<ll\/',i'iil,lr .2Jdata/boards/board_�les ► Run Synthesis Board overview. > Open Synthesll.ed Design Td Console .., IMPLEMENTATION ► Run lrll)lementallon Messa11es Name "./ synth_1 > Open 1fT1)lemented Design lfT111_, v PROGRAM AND DEBUG 19 Gener;,teBltstream > OpenHard'wareManao;ier I S!!'lect an oDJectto see pmpertJes v SYNTHESIS .., Log Constraints cons!rs_1 c onslrs_ 1 Repons Design Runs » % + status syntll_desio;inCorrcilele! Evaluation Plalform(lc7s100fg11a676--2) SynlllesisStJccessfultycorrcileled NeJtt .. .. Properties RunSlm.ilation lla_tutorial C-.JJsers/ahmadi1Jesktoplila_tuto!1al/lla_Morial �--------� Synt��is Completed utilltySources Hierarchy Ed!! Project name· OpenBloCTDesign Generate81oe11Desagn SpartaJ1-a-7 SP701 Evalua�on Platform )( WNS TNS WHS THS TPW S Total Power Falled Route s Not started LUT 10 FF 10 BRAM 0.0 URAM DSP 0 Start 212.0f21.B:07PM Elapsed 00:00:52 Run Slrate11y V!vadoSynlllesisDelaulls{Viv Vivado lfT1llementaton Default '"'L-==========================�!!!!!!!!!!_____________________ 2J Change the layout to debug by clicking on Layout and then Debug. Inserting debugging probe flow Our synthesized design now contains the vio_reset instance, and it is time to specify the signals that we want to probe. There are three ways to do that: 1. Insertion from VHDL file 2. Insertion from the Netlist 3. Insertion from xdc/tcl file We will use the first two methods and leave the third for a later tutorial. Insertion from VHDL file This method is the easiest and fastest way to insert a probe, especially when it's a composite type (array or record). But it requires adding code to the design files, VHDL code that's redundant in the real product. We can insert a probe in the VHDL design file by: 1. Declaring a special attribute called MARK_DEBUG 2. Attach the signal that we want to probe with this attribute 3. And activate it by giving it the value "true" as below: 1 2 3 ../ : Default Layout ELABORATED DESIGN -xc7s100lg11a676-2 Sources 0- Settings y-few -- ATTRIBUTE DECLARATION -ATTRIBUTE MARK_DEBUG : STRING; ATTRIBUTE MARK_DEBUG OF count : SIGNAL IS "true"; Note:we only need to declare the attribute once in each VHDL design file, allowing us to attach it to multiple signals. We can see from the synthesized design that the signal count in both counter_ 1_inst and counter_2_inst are listed under Unassigned Debug Nets and marked with a bug icon in both the Netlist and the Schematic. = SYNTHESIZED DESIGN· synltl_ 11 xc7s100f<JQa676-2 - - �. Soo,m N,W,. x ?X Schematic ? _ □ c;; '? □ c;; X - a: > Debug ';I counter_top C 11ceIIs <> 13Nets Nets{62) > LeafCells(4J v [I] counter_1_inst(counler_1) v NetsrH) > I• counl(4) > J plus0p(4) _J <const1> _f dk _J p_O_ln _J reset _Ibi<J<Jer ) leafCells(11) > II] c:£lunter_2_Ins!fcounterl JI dog_hub (dbg_hUb_CV) Tel Console Menages Log Reperts DfNer Cell N•= v I dbg_hubflabtools_xsdbm_v3) v Desl(Jn Runs Debllg Drtver Pin x <> Probe Type vio_resel_fnst{labtools_vIo_v3) > •dk(1) > • probe_oul0{1) Debug Cores Debug Nets Name: counter_1_instlcounij0Li_1 {ll1T1) Reference narre: Ll1T1 Type: LllT Insertion from the Netlist This insertion method is also easy, but it requires that you first synthesize the design and then manually click on each signal to mark it for debugging. It could be exhausting if the design is large and you want to monitor many signals. We will probe the output port trigger in both counters using the Netlist. We can do this either from the Netlist window or the Schematic by locating the signal net and then right-click on it and choose Mark Debug. From the Netlist window, find trigger under counter_ 1_inst flle _Ed!t Fjow Iools ..., PROJECT MANAGER 0- SeltlnQs Add Sources LanguageTer111Iates =Q= IP Calalog RepQrts �ndow i _ :z·•; Larout ~ constraintsWl!ard Edi!Tlninaconstraints ;j" Set UpDebug 1::J Report Tirring Sunmary Report Clock Networks Report Clock Interaction � Report Methadalogy ReportDRC + - Nets/131 C 7Cells counter_ 1 _Inst > J* counl/4) > .!I plus0p(4) elk _I <const1> _f dk ?X 21/0Ports <> 62Nels * _J p_O_jn Ireset ......-I_J trigger I > LeafCells(11) ) III counter_2_inst(counter) b ) : �1:��:�:1�: =��I�:���:) Tel Console I :t counter_ 1 -+- reset -+-"��='-"-------< trigger_2_0BUF_inst >_-0-_ ______ ___, OBUF MarkDebug ,......-- SelectDriver Pin !;1 .., I dbg_hub(laotoals_xsdb v "' a - - -e_oa_b_le Report Net Route status i: Messages Na= trigger � reset NelPraperlJes counter_2_inst a enable Sctiemalic: ShowConnecllvlty ShowHierardly vio_reset_fnst(\aotool ) •clk{1) F4 Ctrl .. T " > • probe_aut0(1) Unassij-.nedDebu11 Nets > 1"* counter_2_Inst/coun a@, Mark > _ ._ counter_1_Inst/caun.__ ___________. , Debug Cores ../ '? □ � X LearCells(4) ';I .., ..., SIMULATION "" Open Synlllesized Desl\jn Syn1t1es1scor111Iete "'II] counter_ 1_1nst(cnuntl'r_11 GenerateBlact.Design ► Run synthesis trigger. Then, right-click on it and choose Mark Debug. Q·QuiO:Acc:ess Nets(62\ > Open Block DeSign ..., SYNTHESIS ➔ Schematic CreateBlocllDesign > RTlANALYSIS !:ielp Nets : Debu11 /I( --------------------------------� ..., IP INTEGRATOR RunSim.JlaMn Yfew ➔ Debug Nets From the Schematic window, find trigger output from counter_2_inst. Then, right-click on it and choose Mark Debug. <> flle fllit Fjow Iools RepQrts �ndow Larout y1ew !::!.elp Q·OU1ckAccess = SYNTHESIZED DESIGN•· srntti_1 I xc7s1001QQa676-2 -�-� i .. - 7 Cells . + - C 0. e. :� ! 2 uo Pons SynltlesisCor111!ete DebuQ '? 62 Nets ../ ?X □ �X (> , z elk dbg_hub vio_reset_lnst p_or_t 0 �[36_co�] _s�,-�1 -+sl_fportO_o[36:0] ,____ probe out0 sl_oport.0(16:0] vio_reset 1port0_i[16:0] dbg_hub_CV * :ic elk counter_1_inst enable a reset cmmter_2_lnst trigger * counter_1 ;t,- .: enable reset N• IPrn_"_"_" •�- - _ ,.-­ countery t.. SeledDrlverPin StiowConnec!ivity CtrhT HiQtlllctit � Mark + AddSelededllemstoSctiernatic tb: Clrl+E MarkDeOUQ ExpandCone Remove Seledecl ltemsfromSctiemalic SelectAII Cyde Selectlon View I Td Console I Messaces I . ,. StlowWor1dVlew Loe I Desi11nRuns �I I Reports � ReportTIITlng Save as PDF File EJ:portSctiematlc We can see that they now are listed under Unassigned Debug Nets. flle fctit Fjow Iools FlowNav1g11tor ..., PROJECT MANAGER Rep.Qrts = � ., _ (> SettlnQs Add Sources q IPCatalog �ndow ao ►, LaJ'.Oul lfi � . _ Sources a. Create Bl odeDesign IP(1) EdilTiningConstraints 0 ReportTinin!I surrmary Report Clock Netw'orks ReportClock Interaction � ReportMel/iodolo,;i:y ReportORC :E ? - ------------------------------------ + Schematic □ � (> lnstanlialionTe�!ate(2) > Synlt1esis(8) + - C 7Cells 21/0Ports 62Nets = Syn1t1eslsCor111!ete Debuc ../ ?X ? □ DX (> al vio_resetvtio Cl vlo_resetveo Slm.ilalion{3) ChanlileLog(1) vlo_resetdcp • vio_reseLsim_ne�lstvhal e vlo_reset_srm_ne�Jst.v • vlo_reset_stub.vtlcll Run Sim.Jlalion • Se!UpDebU!I Q· Quiel A=ss ..., ..., SIIWLATION ConstraintsWlzard (> $ v-'Q'ii111io_resel(i!I) : > GenerateB1oe1<:QeSjgn "' Open Synthesized Design i'J x Netllsl > Open Block: Oe�<;in ► Runsynthesls !::!elp t!J SYNTHESIZED DESIGN • - synlh_1 lxc7s100fgga676--2 "" IP INTEGRATOR > RTLANALYSIS yiew >;1 • vlo_reset_stub.v H1erarctiy Tci console 0. : IP Sources $ Messaces Na= > • cll<{1) -. LI bran es� � :: Log +, .: > a proDe_outO(l) Una�lilned Debu!I Nets (iOl �eports --------� > • counler_2_!nst/caunt (4) > J • cotmter_1_1nstlcountt4l _J II tr1gger_2_0BUF Oe51gn Runs � O rt.erCell DrtlierP!n a FORE ___,,,,.,.,,,,, .,.FORE ProbeType (> O ---------�---············ _[11 counter_1_1nsWi!IQer Debug Cores Debui. Nels FORE a Creating the ILA debug core Now it is time to create the ILA debug core. We need to create a probe for each signal that we want to analyze. The easiest way is to take advantage ofVivado wizard Set Up Debug. Click on Set Up Debug and then click on Next. flle f!l!t Fjow rools Rep.Qrts �noow La�mJt .. ►• flowN;mgator �iew !:ielp ';I = Q·QwckAa::ess. (t :E Synlt1esisCo"1)lete SYNTHESIZED DESIGN -synltU lxc7k70lfb11484-2 :' � ? _ "' PROJECT MANAGER Sources 0 Settln11s it.ddSources > IP Catalog Nels(124) > " P I lmEGRA TOR LeafCells(4) □� X (t Tilis wizard will 11u!de you 1t1rau11h the process o! lll.xEd1!0\I > (I] counter_1_in 1. Choosln11 nets and connecting ttiem to debu11 cores. > [I] counter_2_in 2. Associating a clockdomaln with eadl ofttie nets chosen for debug. 3. Choosing additonal features on the debug cores like Data Depth. Advanced Tri1111er roode and Capture Contra! II u_lla_o (u_lla Open Block De!".ign '? Set Up Debug VIVADO II db!J_hubtdog Cre.iteBloCKDesl11n ? Nellist r->----------'L-....Cl.-'L-Sclu-"'---------------------� j S�UpDebug X counter_top Lan11ua11eTe!llllates J Debu!l Note: This setup wtzard does not apply to the VIO, IBERT or JTAG-to---AX!-Master debu11 cores. Please refer to Y!Yado Desl11ri SUili! User Guide Pro11rarmin11 and Detiu1111In11 (UG908) !or further lristructioris on how !o use these P I s > II Yio_resel_Jn� GenernteBtoc:KDesi11n Properties RunS1rrulallon "' Rn.ANALYSIS Sele > Open Elaboratea DEsl!Jn " SYNTHESIS TclCcn� Mes Runsynthe�s ..,, Open Syn!Jleslleil Deslan £ XILINX. Na� (t v II dbg_hub1Jabt Consuam1s W1ra1e1 ..., Ivlo_reset_l > • dk{1) > .. prabe_outO 1 0 Report Tlmn,;i Surrmary .., II u_11a_0(labtools_Ha_v6) > a dk(1) Ri!port Clock NelworkE­ Data and Trig11er v > lit praheO (4) Ri!port Clack/nleradian Debug Cores � ReportMel!ladolagy Debu11 Nets Vivado will list all the debug signals and capture the clock domain for you automatically. Here we see that our four signals are listed. You can remove the signals that you are not interested in or add extra signals, but we will use all of them. Note:we don't have to use all the signals that we have marked as Debug. Click on Next. ; X Set.Up D�ug Nets to Debug w Toe riets belowwlll be debugged with IL.A. cores. To add nets dlck"find Nets to Add". You cari also select rietsiri the Nellist or other windows. then drag them to the list or dick Add Selected Netsw. : sJ .: �earcn: " IUI + - I) Na,re Clock Domain Driver Cell Probe Type ..,, .!I a counter_2_!nst/courit (4) dk_lBUF _BUFG FDRE Data amf Tri9ger .f ■ counljOJ dk_lBUF_BUFG FORE Data arid Trigger I• countt1I dlUBUF_BUFG FORE Data and Trigger _f • counlj2J dk_lBUF_BUFG FORE Data arid Trigger S• counlj3J dk_lBUF_BUFG FORE Data arid Trigger dk_lBUF _BUFG FORE Data .indTrl(lger I• counll:OJ clk_lBUF_BUFG FORE Data arid Trigger I• counl{1J cik_lBUF _BUFG FORE Data arid Trigger I• couritj2J dk_lBUF_BUFG FORE Data arid Tri9ger .[Iii c:ounlj3J dk_lBUF_BUFG FORE Data arid Tr1i;iger S Ill counter 1 inst/trigger dk__lBUF_BUFG FORE Data arid Trigger trlgger 2 OBUF dk_lBUF _BUFG FORE Data and Trigger .., 11 r I fa• * counter_1_lristlcounl(4) Flnd Nets to �dd .. Nets to debug: 10 � l■•iM■I �"� � Now we configure the ILA by choosing the FIFO depth and checking Capture control. We can leave the FIFO at 1024 as it is enough depth for our example. Click on Next. =. £He f!l!t Fjow rools =; Iii FlowN1mgator v PROJECT MANAGER Rep.9:rts ? _ Yfindow l.aJ'.Oul 0- Settings : : �. Language Tefll}lates f:ielp Q·QuickAccess = SYNTHESIZED DESIGN' - synth_ 1 lxc7s100fgga576-2 •� Add Sources y-iew > =Q= IPCatalog � Hallist X Schematic Nets(124) LearCells(-1) > III counter_1_1nst(counlllr_1) > III counler_2_inst(co1mler) v P I N I TEGRATOR I dO!I hUD ldD!LhUO CV) _ O{u Ila o cvi � jll u 11a CreateBlock.Desl,;in I 01JenBloct-Design > I[ vio_reset_lnst (vto_reset) GenerateBloCl!.Desagn RunSi!TlJlalion Tel Console "' Rn.ANALYSIS Messages log Reports DrNerCell v II cH>!l_hubf!abtools_xsdbnt_v3) v v SYNTHESIS ► RunSynthesls Design Runs ?X '? □ � X C 7CE!lls 21/0Ports 62Nets • �- �,.:::-:=:./=�'biQ.��• • :::-� --� Na= > 01Jen Elaborated Design + - counter_top Debu,;i ----.-. j '? - □ � � DrtverP!n c-• ProbeType vlo_reseUnst(lamools_vlo_v3) > •clk.(1) 1-....;.>_•...:;;P';;.;°'"-'..;;'�;;;0'-'(1._l ______________�� v Open Synthesized Desr11n v II u_lla_Ollabtools_ila_v5) Con strainls'Nizard > •clk.(1) EditTIITTngConstraints > • probeO{J} Data andTrlgger v > .., probe2(1) Data andTrigger v > • probe1(4) ;t· SetUpOebu,;i c;, Re1Jort Til'Tln,;i Surrmary Data andTrigger v > •probe3(1) ReportClockNetworks Dataand Tri1111er v Un assigned DebugNets{O) Re1JortClock.lnteraction Debug Cores � Re1JortMethodology Debug Nets IMPORTANT: It is very important to save the constraint in this stage so it can be added to the design. Otherwise, we risk losing our ILA core. Click the Save icon or hit Ctrl+S. =. £lie fdlt Fjow Iools Iii Rep2rts I;] Wfndow Add Sources Languagelefll}lales =Q= IPCatalO!I Yiew l::lelp Q· OU1DCAccess soo,�, � 'a' Nelli" X = )I( SYNTHESIZED DESIGN ' - synth_1 lxc7s100fgga676-2 .., PROJECT MANAGER 0- Sell!n!JS La�out ? _ □� Debug ? X Schemalic + - ';I > J sl_iport1_o_1 {37) C 7 Cells 21/DPorts 62 Nets > I sl_oportO (17) > J st_oport1_1_ 1 (17) _f <const1> J" dk _f dk_lBUF CrealeBlock.DEsi!ln _f d�_IBUF _BUFG OpenBloc!< Desi11n S• reset J trigger_,_o GenerateBlock Design 0 _J trigger_2 _f • tr111ger_2_0BUF RunSiITTJlalion "' RTLANALYSJS > Open Elaborated DeSi11n ..,. SYNTHESIS ► RunSynthesls v Open SynU!esized Design Constrain1s'Nizard Edil TIITTngConstraints ;t" SetUpDebu,;i � ReportTlnin11Sun-mary Report Clock.Networks Report Clock I n teraction � Repor!Methodology Tel Consol'e Message$ log R a Jn 1 i � :;�si��o�::��::�� �� ��i� r:����;�:::ie5!:. ��un��:r:�� �:��n up-lo-date by seledlng the run in the Desi11n Runs tab, rfght dlcidn11, and selectin11 'Force Up-to-Date' D Q.oni show ltlis dialog agafn Name "' II dbg_hub(!ablools_xsdbnt_v3i v JI vlo_reset_insl(la1ltools_vlo_v3) > •clk.(1) > a probe_out0(1) v II u_lla_Or\abiools_!la_v5) > •clk.(1) > IJprobe0/4} Data andTli!l!IBf V > •probe2(1) Data andTrl11ger v > It probe1 f4) > •probe3(1) Unassigned Debu11Nets (0) Debug Cores Debu,;i Nets Save the constraintslorthe currentdesi11n Name the file ila_core and click OK. Data andTrigger .., DataandTrigger v 1 - □ � Note:the clock connected to ILA and Debug_hub must be a free-running clock. Now, the ILA is completed and saved. We need to rerun the synthesis so the ILA can be added to the synthesized design. Click Run Synthesis and then on OK. When Vivado finishes running the synthesis, click on Open Synthesized Design and then on Schematic. We can see now that Vivado has added the ILA and Debug_Hub to our design and has connected the debug signals to the ILA probes. -i"' file Edit Flow Iools ll Repo.rts Window Laiout '1.i- Help Synthesis Complete Q· Quick Access : Default layout SYNTHESIZED DESIGN - synth.J I xc7k325tffg900-2 .E Project Summary E ii• � x counter_top.\lhdl x Schematic a a :: � o z - x + - c 8 Cells 21/0 Ports 124 Nets ✓ ? X 0 � _!_ u_ila_O SL IPORT 1[36!'.l] G_inst ,---- probe0[0:3] - prob l[0:3] e � '""'" P'"'" I I Tel Console ] Messages I Sl._OPORT_0[16:0] "-'•-O_CV dbg_hub ;_>pMO_,,,.,. I ::::: I Reports Log ru::J'" ::� :::''"'� h" "" a I Fl vio_reset_inst �,• prob _outO il e t• I '--''"' "M"""'"''m "t - - --'➔ "'� ., _, ,.re , i w : er_ljnst triQQPI' � ____.___,..._ r uilaOcouruiOl o uilaOcountnl 1 u il�Ocoun1m 1 u 1la O rnunUJl , -';'.,.,�, , �""'° �,_-_-, -,�_'"_""_"_'-_''_'°_" '--'--- -+ l 1 i cou er_2jnst ; tri9gff � t ee & r5 � counter * u 11� o rount[O u1la0coumm , ui(a0countl71 z u i\aocoumrJ] .,� trigge I Design Runs I Now we are ready to implement our design and generate the bitstream so we can test our design. Click on Run Implementation and then on OK. £lie fd!t Fjow Ioals FIOWN8VIIJ8lOr ,., PROJECTMANAGER Rep2rts -:' ,; ? _ 0 Sellln11s Add Sources Lan11ua11e lefll}lates '9' IPCatalog > IP INTEGRATOR "' SIIAUL.ATION Run Sim.Jlation "' RTLANALYS/S 1flindow Larout Yiew J::!_elp Q· Orncil:AcceS9 PROJECT MANAGER -ila_l1Jlofial sources v v □eSignSourcesri1 Settings Constraints(1) .., > constrs_1 (1 - t: lla_core.xdc(targel) Slm.Jlation Sources (1) Hierarchy IPSources Libraries Cofll}i!e or Seled an obied lo see prop > Open Synthesized Des!vn Run lfll}lementatlon ,., PROGRAM ANO DEBUG Ill Generate Blt�eam > Open HardWare t� anager lfll}lemenlthe acti\fesynlhesl.!:ed netlist Td Console Messages Na� v ✓ synth_1 (ac:uve.) L lrf1ll_i LOiJ % Nun"'ber of iobs: 2 aluation Platform r101_0 )( Sl;atus synth_design Complern! constrs_, Not started vio_reset syntti_design Cofll}le!el Oul-of-ConleIIModuleRuns ✓ vio_reset_synth_1 Design Runs conslJs_1 eskloplila_tutorial/ila_tutor1al Evaluation Plallorm[xc7s1DO!gga576-2) 0 D_g_nl stiow this dialog again » Constraints X • «Delault Launch Directory> QQenerate scriptsonly Reports + llallrtortal Launch tt,e selected synltlesls or ifll}lementaMn runs @ ,Launch runs on local host ► RunSynthesls Edit Launch Runs Launch giredory· Net l'roperties ✓ ? □ � X 0¥er.iew I Dashboard > e.■• counter_tc,p[rt1)(counter_top...-hdll !3) "' SYNTHESIS > Open lfll}lementedDeslgn Protect Summary ? _ □ � X > Open Elaborated Design .., IMPLEMENTATION SynlllesisCofll}lete : Default La ''"' :.. - -�? X \/\INS TNS \IVHS THS TPWS Total Power Failed Routes LVT 10 102 FF 10 231 BRAM 0.0 00 URAM DSP 0 start 2/21121,8:32AM morn, 11:59 PM Elapsed 00:01:0-4 oo:oi:Jo Runstrate1n V"rvadoSynthe VNadOlrf11lem VNadoSynlhei After Vivado finish running the implementation, click on Generate Bitstream and then on OK. FlowN11v1uator :' � ? _ v PROJECT MA.NA.GER 0- Sen!n11s = PROJECT MANAGER -i!a_tutorial Add Sources v Languagele"lllates V' IPCatalog v > IP INTEGRATOR > "' SIMULATION DeSiQnSourcesrii Constraints(1) constrs_1 (1) Sim.Jlation Sources(1J IP Sources Net Properties "' RTl.ANALYSIS > Open E laborated Desi11r1 Utlrar!es CofllJi!e On Launch _11iredory: O�enerate sciptsonly Select an otlJE<dto see prop ) Open .Synlheslzed Design .., IM PLEM ENTATION Tel Console ► Run l"lllemenlallon > Open l"lllemenled Design Mess�es LOIi Na= I ..t IOlJL1 v > Open HarctwareManager WNS �io_reset - Nurrberoflolls: 2 TNS W HS 27.769 0.000 0.048 route_deslqn COOlJletel O ut-of-ContextModuleRuns Ha tutortal X Desk1opfila_Morlal/i!a_tulorlal Evaluation Plalform[xc7s100fgga676-2J aluaUonP1atform rt0:1.0 X synth_design Com pie le! constrs_1 ✓ vlo_reset_synlt1_1 Design Runs status constJs_ 1 Edit D D2.ni stiow this dialog a<;lain » + % ConslTaints v ..t synth_1 (ac:t1ve) .., PROGR AM AND DEBUG Repons Settings • .:Default Launch Oiredorp @J.aunch runsonlocalhost ► RunSynthesls ?X overview I Dashboard Launch the selected synthesis or il'T"Cllemenla�on runs and <;lenerate bltstream. Options v SYNTHESIS J 1n Generate Bllstream , Launch Run§ ['_ lla_core.xdc(targel) Hierarchy RunSim.Jlallon I > e-■• co1mter_toprrtO(counter_lop.�hdl} (JJ .., Project Summary ? _ □� X Sources ----- DefaultLayout synth_desir;inCo"l)letel THS 0.000 TPWS 0.000 Total Power 0.099 FailedRoutes 0 LUT 10 FF 10 1471 2419 102 231 BRAM 0.0 0.5 00 URAfJ DSP 0 0 Start 2121/21,8:32AM 2121'21. 9:31 AIA 2fl0f21, 9:59 PIA Elapsed 00:01:04 00:08:25 00'.01:30 RunStrate V-JYadoSy VIYado Im VNadoSy Generate a prograrrrring file after i�lerrenla�an After Vivado finishes generating the bitstream, click on Open Hardware Manager and then on Open Target, and finally on Auto connect. file fdit Fjow Iools Iii Rep.11rts La�out Yiew J:ielp Sources =Q= IPCatala11 ..., IPINTEGRATOR v Create Block.Desi11n v Ooen Block Design Genera!eBlockDesign ..., Sll�ULATION > RunSirrulation > x Hetllst = .., constrs_1 (2) l: lla_core.xdc C? top.1dc(largetl SirrulationSaurces(1) Name: ► RunSynlhesis General > Open Synthesited Design TciConsole ., IMPL.EMENTATION ► RunlfT"C}lementallon .., PROGRAM AND DEBUG I v O pen Harctware Manager I IP Sources Libraries ...,,,..- - Co�le Order bigger_..2_0BUF Properties Mess11ges Connectrvlly Name > Open l�lementedDesign LOIi v JI u_lla_O(labl:001s_11a_v6) Power Reports Alf,.1 ► ;; D&sl011 Runs OrlYerCe11 DriverPln > • dk(1) > D protleO (4) > 8 pratle1(41 > iw prabe2[1) �o, 1 l +-l o,ea_r ) _ _ .,. ..__ ___u.._",.�) � _ Program Dtl ti AutoCanned s a ne r,_ :�.!J· · d · · �:��51.�!: _t?� ••••••• OpenNewTar<;lel. ?X ? _ a a e.-. coun1er_top(rt1){counter_topvl1dl)l3) S • triqger_2_0BUF ..., SYNTHESIS 0 Desi11nSources[1) Properties > Open Elaborated Deslr;in Debug Constralntst2) Hierarchy .., RTLANALYSIS A.lfdConffg l write_bltstreamERROR Q· Omcil:Access SYNTHESIZED DESIGN syntt1_1 I xc7k.701fbg484-2 Langua11eTefT"C}lales Iii Generate Bitstream !llindow t:ores I Debug x ? - a� PratleType Data ancfTrl!Jger v Data and Tr19ger v Data andTrtgqer v Data and Trt11ger v I Debu!JNets Next, we need to program the FPGA with the bit file (*.bit) and the debug probe file (*.ltx). Vivado automatically finds them for you. Click on Program Device and then on Program. file "' fdit Flow !ools RepQrts ►. Window (I " �out �- Help write_bitstream Complete Q· U ' .,/ : Default Layout D.ishboard • I: HARDWARE MANAGER localhosVxilirur_td/DigilenV210203337626A 0 There a1e no debug cores. Prog1am de...ice Refresh device v IP INTEGRATOR Create Block Design 0J)Pfl81odr: De!>ign » ■ Cienefate Block Design v v SIMULATION I loc.alhos111) v ■ • xitirur_td/DigilenV2 S xc7k32St_O (1) Run Simulation Not program._ ► Run Synthesis > Open Sy,ithesii.ed Design xc7k32St Q > Open Implemented Design v Opeo H••dw•,o Mmg" ProgramDevice Pait Tel Console ► Run Implementation OpenTar�t xc7k32St_O I x Messagn e : 11 Serial 1/0 links II )rial/i\a_tutorial/ila_tutorial.runs/impl_t/counter_top.bli 0 Enable end of startup check □ □ 0 .� ....................................... . General Prope,lies ,., IMPLEMENTATION tD Generate Bitstream Bitstreamflle: Name: X Debug probes file: oriaVila_tutofiaVila_tutorial.runs/impl_ 1/coumer_top.ltx (I ,., SYNTHESIS Program Device Select II bitstream programming file and download it to your hardware device. You can optionally select a debug probes file that corresponds to the debug cores contained in the bitstream progr11mming file. Hardw•re Device Properties > Open Elaborated Design ,., PROGRAM ANO DEBUG - Open XAOC (Sr,tem ,., RTlANAtVSIS (I Status Connected Hrial 1/0 Saons 7 - □ [:; II : INFO: [Labtool:!!tcl 4.4-466] Opening hw target loc:alhost:3121/xilinx tc:t/Digi.lent/210203ll7626A : open_hw_target.: Time (s): c:pu • 00:00--;-07 ; elap:sed • 00:00:07 . He;;;.,ry (MB): peak• 2416.469 ; 9ain • 1408.211 ' set property PROGRAM.f"IL?: fC:/O"sers/11hlllad/Desktop/il,1 tutoral/i.la tutoriAl/ila tutorial.ru.n:s/i111pl 1/counter top.bit! [get hli' dev1ces xc1k32St OJ :set.J'ropeny PR01!£5. nLE IC: /users/ahmad/Dellktop/ 1111_lutori<'ll/ila_tutorilll/ila_lutorlal. runs/ lmpt_l/counter_toi,. ltx) [Qet_hw_dev1ces xc1kl2St_01 set._property nJt.1._PROB!':S. nu: IC: /Users/ illmQ3d/�sktop/ ila_tutorial/ ila_tutori-,.1/ .1-l•_tutorial. runs/Ul!pl _ 1/counter_ top. l tx l (get _hw_devices xc:1kl2St_OJ current_hw_devic:t! [get_hw_devicea xc71r;32St_OJ retresh_hw_df!vice [11.ndex [get_hw_�v1.ces ,u:1kl2St_O] 01 [Labtool:s 27-1435) oevic;:e xc;:1k325t (JTAG device index • 01 is not pi:o,;i-n,mrned (PONE statu:s • OJ. J ,_- AddConfigurationMefl'lOf)'.., �• •--------------------------------------------------•-h_• � Configuring the ILA triggers After programming the device, we can see that Vivado's GUI layout has changed, and a new hw_ila_1 dashboard has opened, containing several windows. We will minimize some windows that we don't need so we can work comfortably. file "'· fdit Flow !ools Reparts ►. v IP INTEGRATOR Create Blodc Design Ge-nerale Block °'"'19" v SIMULATION Window (I Laiout V SYNTHESIS write_bitstream Complete Q 0\ ? _ □ □ X St11tus No= v I localhostll) v (I XAOC [System hw_ila_t {u_1la Idle Hardwue Device Properties E> xc71<32St_O (I Programmed Pfogramming file: ,1/ila_tutorial.!uns/impl_ 1/counter_top, v PROGRAM ANO DEBUG IU Generate Bitstre-am v O�n H•rdwo1re Mo1no1ger OpenTarget ProgramDevice A ddConfigurationM@m01y v W•veform hw_il._1 hw_vio_ 1 (vio_, OK ·Outputs_ > Open Sy,ithesized Ot>slgn > Open Implemented Design X Programmed Status; ► Run Jmplemencation x hw \OOs Conoected ► Run Synthe>sis " IMPLEMENTATION ? X hw_i1•_1 ■ • xi!irur_tcf{DigilenV2 Open e xc7k325t_O (3) Prnbesfile: Use.- chain count Settings - hw_ib1 1 ,1/ila_tutmial.runs/impl_t/counter_lop. 4 tt ► Statu1 - hw_ila_l x TriggerSetup-hw_il,1_1 x Muwges � Seri•I 1/0 Links x C.ptureSetup-hw_il•_l » ■ -�- ·······-··-· ........................ .. Genenil Propert,es Td Console ../ : Default Ulywt Dashboard • Hardware " RTlANAI.YSIS Open Elaborated Design Help HARDWARE MANAGER localhosVxiliroi:_td/[)igilenV210203337626A Run Simulation > �- I: Pres5 lhe + buttoo lo add probl''i SelUll 1/0 X'ilns- Q : e II IJ 11 : INro: [Labtool!I 27-3164) End of !ltartup !ltat.u!I: H.IGH : proqram_hw_devices: Time (s): cpu• 00:00:07 ; elapsed• 00:00:07 . Me111oi:y tMBJ peak• 2463.930 ; gain• 0.000 retresh_hw_dl!'vice []index [get_hw_dev1ces xc1kl25t_OJ 01 : TNm, rr... hr..,...1-, ,7_,-lo,1 n.-vtr,- 11rT1,1,<,r !,1'T'Ar. <"l"vlrp inrlP>< "'0\ i� nrnnr"""""<"I with;,, rt,--,;,,., th11r hll"< 1 TT.A r-nr..,!"<l. < From the dashboard options, check hw_vio_1 and uncheck Capture Setup. Also, close the hw_vios tab because when we checked hw_vio_1, it has been added to the Trigger setup window. ? - □ .. file Edit Flow I;) !ools Repo.115 ► " Window 0 l: L�t 'y.- HARDWARE MANAGER· localhosVxilinx_td/Digilent/210203337626A ► ••= v » Status I localhost 11 v ■ 0 Coonected ■ • xllinx_td/Digilenl/2 Open Programmed m xc71t3251_0 (3) XAOC[System hw_vio_l(vio_r OIC·Outputs ... hw_ila_l (u_�il_ r Idle I hw_il&_1 Help f>. Q • X hw vios DHhbo&rd Options Q W&veform - hw_ila_ 1 • - write_bitstream Complete : Default layout Dashboard • ./ ? X 1 - □ X ...-(j):71t32:t _O ..., I!} hw_ila_l (u_,ta_0) 0 Status --------.. 0 Settings 0 Tr[gg!'fSetlJp 0 Capture Setup �Wavef01m 0 hw_vio_l(vio_reset...Jnst 0 XADC fSy,>em M=i<o 1 Setting,· hw_ila_l JC SOit.us • hw_ih1_1 ? -□ Trigger Mode Settin!J5 TriggerSe,tup• hw_11a_1 >Clhw_vto_l + - .{}. I ? - □ T,iggermocle: Capture Modi! Settings Capture mode: ALWAYS v Window data depth: 1024 V Numbef of windows: Trigger position in window: �nenit Settings \1 [O 32 10241 (1 + Press thE 1024] button 10 add proOOS 10231 Refresh ,ate: S00 Td Console M�si,ges Now, we need to add the reset button to the VIO so we can control the reset. Click on hw_vio_ 1 and then add reset as shown in the picture below. .. file Edit Flow !ools Repo.ru ► " Window 0 l: L�t !llew HARDWARE MANAGER - localhost/xiUnx_td/DigilenV210203337626A Q ••= ' � v I localhost{1) v Status ■ 0 Connected ■ • xllinx_td/Digiletil/2 Open l!l xc7k325t_O (3] XAOC (System Programmed hw_vio_l(vio_r OIC ·Outputs ... hw_ila_1 (u_Ua_ r Idle Help hw_ila_l � l O I Q Q Q Dashboard • write_bitstream Complete � :; Default Layout 0 5.earch: Q· i . �:: "-- , I◄ ILAl Ptobesfc»"hw_vio_l(T) ►I i:. 1 -□ / ? X ? □ a X X Add Probes > < TriggerSetvp-hw_ila_1 ,r 2 1 - □ X • .r 0 4 3 jhw_vio_\ x !. 6 1 8 9 10 I ?-□ Pre-ss the + b\Juon to add prohes. � Td Console Debug Probe: reset Messages Serial 110 Links Sena) 1/0Scans We can see that hw_vio_ 1 now contains the reset probe. Change the value of the reset in vio_reset to 1 if it's not 1. Now, we will add the triggers that we will use. A change of value on a trigger signal will cause the ILA to start recording the probed signals. Let us say that we want to trigger (start recording) on the rising edge of the output port trigger of counter_ 1_inst. To do that, follow these steps: 1. Go to the Trigger Setup - hw_ila_1 window ./ 2. Click on the+ icon to add a new trigger and choose counter_1_inst/trigger and click on OK. .. fdit file Flow Re-PQ{ts !ools ► L�t Window .. (t 'f- Help Hudwar� v I ► I localhost 1) v ■• » w,veforn � Kllinx_td/DigilenV2 Open XAOC (System Programmed Add Probes r• I: =�7'�� ' j Idle �,ch:Q· ILASta11.1 • counter_1JnsVcount{3:0] Name hw_vio_l(vio_r Oit;•Outputs ... hw_ila_1 (u_ila_ write_bitstream Complete :Default� l ✓ ? ? □ C X la + Coooected v El xc7k325t_0 (3) ,. hw_ila_l (t ■ Status Q ll D.lshboard • :!: HARDWARE MANAGER· localhost/xilinx_td/Oigileot/210203337626A 1• 6_1E!iiiJ '- +r 1 2 1 - 0 X (t • .r J 4 � 6 1 B 9 10 > < Trigger Setup· hw_ija_l x hw_vio_l Settings + - Triggert �] ►I I< ? - □ 0 �2 ea•• 1 Numl Prl"S'i" the 4 Wied + buttoo lo add probes. Trigg Refresh rilte: 500 Td Console Serial 1/0 Links Messages Se11aJ 1/0 Scans 3. We can see that the trigger has been added, and now we need to set up the condition. Click on the Value box and choose R(O to 1 transition). Click on the Operator box and choose == (equal) We will also change the trigger position to 32, meaning that it will record 32 samples before the trigger event in addition to what comes after. Now, the trigger is set up and ready to be armed. file .Edit FJow Iools RePQrt:s Y{indow L.:iitout �iew HARDWARE MANAGER localhosVxilinx_tcf/DfgilenV210203337626A l�i H � 1l : • $ S Name I "' ■• c:;: � 0 � dw ► » ? V I localhost (1) 0 - ; □ � : Status It tlelp 0- Quick Access write_bltstre<1m Complete : Default Layout Dashboard � Waveform hw_ila_1 1 Conll&led • XADC (System Monit Programmed ◄ ►I 'l! !.r +r r. ? - □ X (t ..r • hw_vio_l (vio_resel_i1 OK - Outputs R If hw_ila_l (u_1la_O) Cldle < ) < Settings• hw_ila_l x Status - hw_ila_1 Capture Mode Settings ALWAYS v Window data depth: 1024 V Trigger position in window: General Settings Refresh rate Tel Console Mes;ages Debug Probe Value: counter_ l_insVtrigger ? - □ Capture mode Number of windows· [ ? X hw_ila_t xiliru1_tcf/Dfgilent/2102:0C Open ..,, 13 xc7k325t_0 (3) I Serial 1/0 Links I Serial 1/0 Scans I 500 32 11-1024] [1 •1024] !0-1023) I I Trigger Snup - hw_ila_l x hw_vio_t Q Name + - o. counteJ_ Unst/trigger ,"O�••�"�'o�, ----, Radix I J ,_I =_• ____v� !B v ,,/ / Value Port ( t-X-(d-0-,,-,-,,-,. ---1 probe2 0J 0 (logical zero) 1 (logical one) X don't care R (0·to· 1 transition) ../ F (1-to·0 tran_sition) / B (both trans1t1ons) N (no transitions) Now, we move to the waveform window to add the signals that we want to view. First, let's maximize the inner window to gain a better view. Second, we need to add some missing signals to the probe. Vivado usually adds all the assigned signals automatically, but in this case, it didn't. ✓ file "' fdit Flow 61 !ools Repnrts ► " Window (> L�t l: �- Help HARDWARE MANAGER· localhost/xilinx_td/Digilent/210203337626A Hudwar� Q I v 'a ■• � Coonected O KilinxJd/Digilenl/2 Open v m xc7k325t_0 (3) Programmed XAOC (System : Default Layout Add Probes hw_ila_l (> Status I localhost (1) v » • ► write_bil!itream Complete Q ...LL Dashboard • Waveform� QGJ- ILA Status: Idle ct ► » ■ D El El X ✓ ? X •• hw_vio_l!vio_t OK·OutpuU ... hw_ila_1 (u_�a_ I Idle TdConsole Serial 1/0 Links Messages Debug Probe: counter_1_insVcount(3:0] Serial 1/0 Scans Now, we change the radix of the count signal to Unsigned as it is easier to follow. Right-click on the count signal name and then choose radix and then Unsigned. file Edit Flow 61 Iools R� ► " Window (> l: La:l()Ut � HARDWARE MANAGER localhost/:cilinK_ld/DigilenV210203337626A � Help Q , Dashboard • � hwJI.J_I i ·& t ILA Status: Idle ► » • [) El El •• Copy End.• Find �alue,. Selec!AII "'""" Waveform Style SigrlalColor !Ii Unsigned Decimal ./ ? X ?CC X Wo1veform - hw_ila_1 -�la+- � write_bitstream Complete ;; Default layout ¥ ReverseBitOrdei NewGrQUp New Divider New �rtu11I Bus Cre.-te U5el' Defined Probe.• Running the ILA and VIO Now, we have finished configuring and customizing the ILA, and we are ready to run it. ILA has two running modes: Immediate and trigger. Immediate mode Immediate mode triggers the ILA immediately and starts recording the samples directly until the FIFO is full. Click on the Run trigger immediate button. We can now see the recorded samples in the waveform window. We see that both count signals are 0, and both trigger signals are low ·o· because the reset is active. file Edit Flow Rf!P!2(ts !ools ► L�t Window :i: (t " }ftw1 Help Q � Dllshboold • A.i. write_bitstrYm Complete : Default Layout ? X HARDWARE MANAGER· localhost/Milinx_td/Oigilent/210203337626A ! i ·f £ hw_ il" -'---� � - ?□ax Wo1vefonn - hw_ila_1 z • I� I a - g + - llA Status: Idle ✓ .. ► Td Console Messitge!> Run lrigg� imm@diate fOf this HA core � ■ » [l Senal 1/0 links 0. ,.0. :: I◄ • 1 - 61 X .r ►I (t Serial 1/0 Scans Trigger mode Trigger mode requires that we set up a condition for at least one trigger and arm it. The ILA will keep waiting for the armed trigger's condition to become true, and then it will start recording the samples directly until the FIFO is full. We have already added the trigger and set it up to R(O to 1 transition). Running ILA with one trigger Change reset back to 1 from vio_reset. file Edit Flow !ools 61 Repg_rts ► Window :i: (t " Laiout !Liew Help Q .Ju wril@_bitstrNm Complete f> iiii Default Layout Dashboard • /I( ? , HARDWARE MANAGER localhostbrilini_td/DigilenV21O2O3337626A .., J loailhost 1) ..., ■ • xilinx_td/DigHent/2 "' 0 xc7k32St_O (3] XAOC[System su,tus ■ ?□OX (t Connected Open Waveform - hwjla_l 1 0 0+-&► ILA Status: Idle ■ » G 0. hw_vio_l(vio_r Ol<·Outputs ... <a •• 1• Value Programmed • hwJla_1 (u_�a_ r Idle 'W , t r r 1 'W 11 1 ,r ? - □ X (t ►I l 2 J 4 !, 6 7 B 9 10 > < Settings - hw_ila_1 >< St•tus - hw_il• 1 7 _ □ Trigger Mode Settings Trigger Setup- hw il•_I ? - □ Value Triggl!f mode: Activity Direction Oulput v,o hw_vio_1 Capture Mode Settings Al.WAYS v Window data depth· 1024 v Trigger position in window: 32 Capture mode: Number of windows: {l -10241 !l 102--1] 10 10231 Genenil Settings Refresh rate: S00 Td Console Debug Probe.: reset Me�s;tges Sen.ii 1/0 Links ./ Se,ial l/0 Scans Click on the window Status hw_ila_ 1. We see that the core status is Idle as there are no triggers armed. Click on the Run trigger button, and that will arm the trigger. We see now that the core status changed to waiting for trigger. As the reset is high, there is no activity on our trigger signal (port trigger of counter_1_inst), and I LA is waiting. file Edit Flow !ools ReP!2{ts e ► Window " 0 L�t �- Help :i: Q Qu write_bitstrNm Complete Ai. HARDWARE MANAGER· localhost/xilinxJd,OigileoV210203337626A hw_il.,_1 Wo1veform - hw_ila_1 � a + - tt�» ■ [} ©. llA Status: Waitina For Tri< Run triggei for this ILA c:01 Value ? X I "' " "' '" ,:. '" '" '" '" .,, ©. I◄ •• up<Uted .. t 1 - ►I .r Core status • Walling forTrigger □ X 0 ioa Feb n 11 tz 46 ? _ O I ./ : Default Layout Dashboard • Trigge.-Setup-hw_il.,_1 I hw_vio_l X Value ?-□ Activity [Bl 1 Direction VIO Output hw_vio_l Capture status - Wlfldow 1 of 1 Window sample 32 of 1024 3% Td Console Messages Serial l/0 links Se,ia! VO Scans Run trigger fo, this 1LA core Now, let us change the reset to O so that the counters start working. .. file Flow Edit RepQrts !ools Laiout Window ► " 0 � Help :i: Q Ou writ@_bilstream Complet@ f>. ./ ;;; Default Layout Dashboard· HARDWARE MANAGER- kxalhort/xillnx_td/Digilent/210203337626A hw_il.1_1 W.aveform - hw_ila_l » ■ [} ©. ©. I◄ •• 1 - 0 X ►I 0 .r llA Status: Waitina Fot Triaoet !32 out of 1024 same Value .OO 00 lOO 400 SOO 600 70C 800 900 l 00 0 Upd.ot<td Settings-hw_ih, 1 t.t ► » Coremtus Shltu5- hw_ila_l X Waiting for Trigger C.apture status - W1t1dow 1 of 1 Window sample 32 of 1024 3% Td Console Messages Serial 1/0 Links 20n Feb 22: 11 12 46 ? - 0 ■ • •t TrigguSetup-hw_il.11 � ?-□ u ;; e Value 1E !Bl t V Activity ..----- Direction VIO Output hw_vio_1 Seiial VO Scam; Debug Probe: reset We see now the ILA has got triggered and has recorded the samples, and the core status changed back to Idle. We see the red vertical line (marker) on the rising edge of our trigger signal {port trigger of counter_ 1_inst), and it is in position 32. We also can verify that the signal count is behaving correctly and the signal counter_ 1_instltriggeris high for four clock cycles between 12 and 15 (the output is delayed by one clock cycle). file fdit Flow Iools Repo.rt:s ► Window Ill O Lay_out 'i_ie:w Help I: Q· Quick Access Dashboard T = write_bitstream Complete ./ Default Layout HARDWARE MANAGER- localhost/xilinx_tcf/Digilent/210203337626A ? X If we zoom out a little bit, we can also verify the behavior of count and trigger signals for counter_2_inst. file fdit Flow Iools Repo.rts ► . Window Ill O Lay_out 'i_ie:w I: Help Q· Quiet Access Dashboard T write_bltstream Complete ./ :;; Default Layout HARDWARE MANAGER localhost/xilinx_tcf/Digilent/210203B7626A ? X Running ILA with multiple triggers We can use a combination of triggers for complex or advanced conditions. To capture several disjoint time frames in the same waveform, we can use multiple triggers that fire repeatedly. For example, let's say we want to trigger when the count signal from counter_ 1_inst is equal to 9 (count== 9) and when the count signal from counter_2_inst is greater than 2 (count> 2). To do that and split the FIFO into four time windows, follow these steps: 1. Change reset back to 1 from vio_reset 2. Remove the previous trigger probe: file fdit FJow Iools Repo.rts .W.iOOow Lay_out 'i_ie:w 1::1.elp 61 Q· Qwck Access write__bitstream Complete = Default Layout Dashboard � HARDWARE MANAGER-localhost/xilinx_tct/Digilent/210203B7626A ? X Settings • hw_ila_ 1 x Status• hw_ila_1 ? _ □ Capture Mode Settings Name v ALWAYS Number of windows: {1-1024) 32 !0-511] General Settings Refresh rate: Remove selected probe{s) 500 I Mes;ages Serial 1/0 Links I + ? - □ El .,., Remove selected probe(s) (Delete) adix V Bl v v R Port probe2!0] Comparator Us.age 1 of 1 J E311-s121 Window data depth: Triggerposition in window. j Tel Console Trigger Setup- hw_ila_l x hw_vio_1 Q Capture mode ✓ Serial 1/0 Scans ] 3. Add both count signals as triggers: file fdit FJow Iools Repo.rts 61 ► .W.iOOow ,11 . (I Lal{out 'i_iew 1::1.elp Q· Quick Access write__bltstream Complete HARDWARE MANAGER localhost/xilinx_tct/Oigilent/210203337626A _ ii - � ?X hw_n,_1 � _!,_ ��... ! �arch: Q• + - � L. counter_l_inst/count[3:0] I I · ·· � 8' ? □ (5 X Add Probes Waveform - hw_ila_ 1 Q ILA Status: Idle I- • rnunter_l_inst!trigger �ounter_2_inst/count[3:0�I l. trigger_2_0BUF Settings- hw_ila_l x 5tatus-hw_ila_1 ? _ □ Trigger Setup- hw_ila_l x hw_vio_1 ? - □ Capture Mode Settings ALWAYS v Window data depth: S12 v Trigger position in window. 32 Capture mode [1-1024] Number of windows: [1-S121 [0-511] General Settings Refresh rate: 500 [ Tel Console Mes;ages Debug Probe:counter_l_inst/count{3:0] I Seriall/Ollnks I ✓ :: Default layout Dashboard � I: Serial l/OScans] 4. Configure the signal count for counter_1_inst to (count== 9): Pless the + button to add probes. 101 Cancel file fdit FJow Iools Repo.rts ► .W.ir.dow " 0 Lay_out 'i_ie:w 1::1.elp Q· Qwck Access write_bitstream Complete ✓ = Default Layout Dashboard � I: HARDWARE MANAGER- localhost/xilinx_tcf/Digilent/21020 3337626A ? X □ X ? - □ ? - ¥counter 1 rist count[J0 ¥lourter 2 r\1tcou1t[30 • tr ager 2 oeur Settings • hw_ila_ 1 x Status - hw_ila_1 ? _ Q Capture Mode Settings ALWAYS Capture mode Number of windows: counter_2_inst/count{3:0] {1-1024) 256 V Trigger position in wir.dow. 32 [0-255} Refresh rate: 500 I Mes>ages Debug Probe Value: counter_ 1_inst/count[3:0] v [HJ !�I - [1 ·256] General Settings I + - ""· Radix N,_m_• _____o.. ,._"_,o_, -,--, counter_1_inst/count!3:0] V IHI v Wir.dow data depth: j Td Console Trigger Setup- hw_ila_l x hw_vio_1 □ Serial 1/0 Links [ Serial 1/0 Scans] Value ,--------, Port Comparator Usage v v probe0(3:0J _x_____ _1 probe1!3:0J Value: 9 5. Configure the signal countfor counter_2_inst to (count> 2): write_bitstream Complete "'· ► ,11 0 HARDWARE MANAGER localhost/xilinx_td/Oigilent/210203337626A 11 � -=-. _ �- ? X hwJla_\ Wa11eform ���I Q hw_ila_ 1 - .. + 11 · ·· "' 0 llA Status: Idle 'tl'counter1 ristcount[30 ¥couriter 2 flitcou l1 30 • tr qqer" OBUf Settings• hw_ila_l x Status- hw_ila_1 ? _ Capture mode: ALWAYS [1 · 10241 Wir.dow data depth: 256 V Trigger position in window. 32 (0-2SSJ [1-256] Td Console I 500 Mes>ages I Debug Probe Value: caunter_2_inst/caunt[3:0] Serial 1/0 Links I Serial 1/0 Scans] ? - + - ""· counter_ UnsVcaurit!3:0] General Settings I Trigger Setup- hw_ila_l x hw_vio_1 Name v Number of windows: Refresh rate: □ Q Capture Mode Settings ✓ : Default Layout Dashboard � I: counter_2_inst/caunt(3:0] Radix Operator v [HJ V IHI Value � v Port v __,prabe0!3:0J V�9_____ X v � ---, Value: 2 Probe1!3:0J Comparator Us.age l of 1 □ file fdit FJow Iools Repo.rts ► .W.ir.dow ID O Lay_out Y.iew Help I: write_bitstream Complete Q· Qu,ck Access HARDWARE MANAGER- localhost/xiliro:_tcf/Digilent/21020.B37626A I llI ? X hwJl•_I I !1 ✓ = Default Layout Dashboard � ? Waveform - hw_ila_l 1◄ ►I ,! !r ? - •r r. .1 □ □ CX X (I 'Ill' lOUnt�r I n,t LOU 11[30 'lll'counter 2•rist cou•7t30 •troog<'r 2 OBUf Scttin515- hw_ila_l x Statu5-hw_ila_1 ? _ □ Tri!it51erSetup- hw_ila_l )( hw_vio_1 Capture Mode Sctting5 Capture mode Name v ALWAYS Number of wi11dows: Wir.dow data depth: 256 32 V Value V 9 v probe0!3:0J 1 of 1 v [H :�0]-••__ (eq / _ 0"_"'_(3 ,_ _ ,_ll ____,. J 1-'°"_ -" te,_ _2J _ n>l_ <_ V 2 v probe1[3:0J 1 of 1 V □ Comparator Us.age Port [HJ a== (equal) [1-256] != (not equal} {0-255] < {lessthanJ <= (less lh<m or equal) GeneralSettlng5 > {greater than) >= (greater than or equal) Refresh rate: 500 j Tel Console Radix Operator rnunter_Unst/rnurit(3:0] [1-10241 Trigger positiori in window: ? - � Serial I/0Links ] Seriall/OScans I Debug Probe Value: <:ounter_2.j11stjcount[3:0J 6. Configure the number of windows to 4 and FIFO depth to 256, and position to 32. ... file fdit FJow Iools RePQrts ► .W.ir.dow Ill (I Lay_out Y.iew Help I: Q· Qu1dc Access write_bltstream Complete HARDWARE MANAGER localhost/xiliruc_tcf/Digile11t/2102.03H7626A ? X □ BX ? - □ ? I < I > < Settings hwjla_ 1 )( status -hw_lla_1 ? _ ALWAYS v Window data depth: 256 V Trigger position in window: 32 Capture mode: Number of wi11dows: □ TriggerSetup- hwjla_l )( hw_vio_t Q [1- 1024] [1-256] + - o-. Name Operator Radix Pon Value Comparator Usage cou11ter_ 1_inst/count(3:0] v [HJ V 9 v probe1[3:0] 1 of 1 cou11ter_2._inst/count!3:0] V IHI V 2 v probe0[3:0J 1 of 1 !0-255} GeneralSetting5 Refresh rate: 500 I Serial 1/0Links I Serial 1/0Sca11s ] 7. Click on the Run trigger button, and that will arm the trigger. Notice that in the window Status hw_ila_1, the capture status is now window 1 of 4 because we have four windows. Change reset back to O from vio_reset. ✓ :;; Default layout Dashboard � file fdit FJow Iools '" Repo.rts ► .W.ir.dow " 0 Lay_out 'i_ie:w 1::1.elp write__bitstream Complete Q· Qwck Access HARDWARE MANAGER- localhost/xilinx_tcf/Digilent/210203B7626A �j I ? X hwjl•_1 � � Waveform - hw_il.i_l i-�i- 8'� l 0 iI 0 ✓ = Def.iutt Lllyout Dashbo.ird � I: � ? - □ X + - <>0» ■ [J rlA Status; Waitina Forlrtoaer (32 out of 1024, N,m, .v ,1"' 'lil'Lcunter1 n,twu1t[30 i 'lll'counter 2 nstcou•1t30 •tr(lqer 2 OBUf Settin51s - hw_ila_1 t! I < status - hw_il.i_l x » ■ ., ► Core status • I ' < 2 ggerSetup-hw_ila_1 ? - □ � Q ame Waitir,g for Trigger ;; $ [;;d-•to_l x + - Value . . ActIvIty Capture status - Wir.dow 1 of 4 ? - □ . Direction VIO Output hw_vio_l Window sample32 of 256 I ,,. I j Tci Console Debug Probe: reset I Messages Serial 1/0 Links ] Serial 1/0 Scans ] Maximize the waveform window. We see now that we have four windows and a trigger associated with each window. Notice that these windows are independent and not continuous. The ILA waits for the trigger event to happen, and when it does, the ILA uses the first window to record 256 samples. It then immediately waits for the next trigger until all the windows are full. file -]~ ii fdit Flow '" Iools RePQns ► . .W.ir.dow " 0 Laiout 'i_iew I: Help Q· Quick Access Dashbo.ird � write_bitstream Complete HARDWARE MANAGER localhost/xiliruc_td/Digilent/210203337626A � �1 � � hwjl•_1 ✓ ;: Defaultlilyout ? X ? □ C5 X Waveform - hw_ila_ 1 '1 j Tel Console Mestages Running ILA with Auto re-trigger mode ILA has a nice feature called Auto re-trigger that will automatically arm the trigger after it gets triggered. It is useful when monitoring events that occur seldom and you want to run a test overnight. Or you can use it when the trigger happens so often and fast that you cannot arm the trigger manually to capture the samples repeatedly. Let us assume that the output port trigger of counter_2_inst gets asserted every 3 hours, and you want to record the data each time it happens. To use the Auto trigger, follow these steps: 1. Change reset back to 1 from vio_reset 2. Remove the previous trigger probe 3. Add trigger_2_0BUFsignal as trigger: file ,Edit FJow Iool5 RePQrts ► Window " 0 l..ll(OUt �iew H.elp write_bitstream Complete ./ 0.- Quiel: Access = Defauttlayout Dashboard• I: HARDWARE MANAGER lrn:alho5tfxilinx._td/Oigilentf210203337626A ? X Add Probes .Search: Q· 1◄ 7 iii- ►I ,!: !r +r r. .r t. counter_1_instjcount[3:0] ... counter_2_inst}count[3:0J Value ¥counter l ,nit coult 30 'If counter 2 r,st coult 'JO otnoaer 2 oeur < 'l. trigger_Z_OBUF > < Settings• hw_ila_l x Status• hw_ila_1 Trigger Setup- hw_ila_l x hw_vio_1 ? _ □ Q Capture Mode Settings Capture mode 0 1. counter_l_inst/trigger ALWAYS v 1024 V Number of wi11dows: ? - □ + - <>, [1-1024] Window d.itil depth: Trigger position in window: 32 [1-102_4] l'Tess the {0-1023] + button to add probes. General Settings Refresh rate: 500 I let Console I Serial I/Olinks ] Seriall/OScans I I Messages 4. Configure the trigger to the condition to equal(==} and falling edge F(1-to-0 transition} 5. Configure the number of windows to 1 and FIFO depth to 1024, and position to 32: file .Edit Flow Iools RePQ.rts ► WiOOow " 0 La;tout Y'.iew I: tlelp )>{ Q- Ou•ck Access write_bitstream Complete ../ = Default Layout Dashboard � HARDWARE MANAGER localhosVxiliruUcf/DigilenV210203337626A ?X ? - □ X ► » ■ IJ <a <a ,. iii- 1◄ ►I ,! !,- +r r. 0 .. r Value 'ti'counter 1 nst co,111130 Wcouner Z nst countlJO • tr qqer 2 08Uf < > < Settings hwjla_l ic Status-hw_ila_1 Trigger Setup- hwjla_l x hw_vio_1 Q Capture Mode Settings Capture mode ALWAYS v 1024 V Name trigger_2_OBUF [l -10241 Number of windows: WiOOow data depth: Trigger position in window: 32 [1-1024) !0-1023] General Settings ] Tci Console I Message> Operator ? - □ Radix V 16] Value , c- a-ce_) v rj X-(d-o -, 0 (logical zero) 1 (logical one) X(don"tcare) R {0-to-1 transition) F(l-to-0 transition) B (both transitions) I Serial 1/0 Links I Serial 1/0Scans I 6. Click on Auto re-trigger button: Port _�I probe 3(0] N (oo transitions) Refresh rate : 500 Debug Probe Value: trigger_2_OBUF + - <>, Comparator Us.age file Edit FJow Iools Repo.rts ► .W.ir.dow " 0 La�ut 'i_ie:w Help write_bitstream Complete Q· Quick Access HARDWARE MANAGER- localhost/xilinx_tcf/DigilenV210203337626A ■ » Settings hw_ila_1 t!' IJ El El ? X :: • Status- hw_ila_1 x Corestatus • 1◄ ►J 'I! !r •r r. .r Trigger Setup- hwJ1a_1 ? _ □ » ■ ► ✓ = Default Layout Dashboard � I: Name Idle Value 1. reset Capturestatus - Window 1 of 1 hw_vio_l x Activity !BJ 1 ? - □ Direction VIO Output hw_vio_l Window sampleOof 1024 Idle I j Tci Console I Messages Serial 1/0 Links ] Serial 1/0 Scans Toggle auto re-trigger mode for this I LA core I 7. Finally, change reset back to O from vio_reset: file fdit FJow Iools Repo.rts .W.ir.dow " ► . 0 La�ut 'i_ie:w Help Q· QJ1ci: Access write_bitstream Complete ✓ : Default Layout Dashboard � I: ?X HARDWARE MANAGER localhost/xilinx_td/DigilenV210203337626A �counter1 ristcount[30 lllllcounter 2 nst countl30 • tr,oger 2 OBUf Settings- hw_ila_1 t!' ► » Status- hw_ilcU x ■ • ? - □ Waiting for Trigger r;;gger Setup hw 1la 1 IQ"' � + Name Capturestatus - Window 1 of 1 Value reset [Bl 1 hw v10 1 x Activity ? - □ Direction VIO Output hw_vio_l Window sample 32 of 1024 I_ ] Tel Console Debug Probe: reset " I Messages I Serial 1/0 Links I Serial 1/0 Scans ] We can see now that the waveform window is getting refreshed and updated as the trigger happen. It is fast, but the behavior is noticeable. Click on Stop trigger and toggle Auto re-trigger. Running ILA with Capture mode Another feature of ILA is the Capture mode. In some cases, you are not interested in recording all the data but rather capture a specific sample. Capture mode helps you filter out data and record only the samples you are interested in. Let's say we are only interested in sampling when the output port trigger of counter_ 1_inst is '1' AND the output port trigger of counter_2_inst is 'O'. To use Capture mode to achieve this, follow these steps: 1. Change reset back to 1 from vio_reset 2. Remove the previous trigger probe 3. From the dashboard, Uncheck Trigger Setup and check Capture Setup. Notice that a Capture Setup window will appear. From the Settings - hw_ila_ 1 window, Change Capture mode to BASIC, the window to 1, the FIFO depth to 1024, and position to 1: write_bitstream Complete ../ OlJ•(� Access " 0 I: . HARDWARE MANAGER lrn:alho<;t/xilinx_td/Digilentf210203337626A _ - ii � � z �• � � i = Default Layout Dashboard• ► ? X hw,I• 1 Waveform - hwjla_1 Dashboard Options 1◄ ►I Q � $ v Ii) xc7k32St_O Settings- hwjla_l x Status hw_ila_1 hw_vio_1 ? - □ Q Capture Mode Settings Capture mode: + I t! !r ? - •r r. .r Capture Setup- hwjla_l x □ X 0 I ? - □ o-, BASIC r, - ,024, Number of windows: Window data depth 1024 Trigger position i11 window: 1 [1-1024] I I Pre55 the + button to <1dd probes [0 -10231 General Settings Refresh rate: 500 I Td Console I Serial 1/0links I 5eriall/05cans] I Mes�ges 4. Add trigger_2_0BUF, and counter_1_inst/triggerfrom the Capture Setup window: file ~ ]~ FJow Edit Iools RePQrts ► .W:iOOow ,11 0 Laiout 'i_iew l: .!::l_elp Q· Owck Access write_bitstream Complete ./ = Default Layout Dashboard � HARDWARE MANAGER localhosVxiliruc_tcf/OigilenV210203337626A ii hwjl,_1 ? □ C X ��!Q + - e /!j f£ ) i Add Probes Waveform - hw_ila_ 1 � _i_ � ? X llA Status: Idle ► X □ X 0 » ■ cl Settings• hw_ila_l -.c Status• hw_ila_1 ? _ □ Number of windows: s-I hw_vio_1 Q BASIC Capture mode: Capture Setup • hwjla_ 1 -.c j - □ o-, {1-10241 Window data depth: 1024 Trigger position in window: 32 V [1-1024) [0-10231 Press the General Settings Refresh rate: 500 [ Tel Console Mes�ges Debug Probe Value: counter_ l_instftrigger I Serial 1/0links I 5eriall/05cans I 5. Configure counter_1_inst/triggerto the condition equal (==) and 1 (logical one): + button to add probet file fdit FJow Iools '" RePQrts ► .W.ir.dow " 0 Laiout Y.ie:w Q· Qwck Access 1::1.elp write__bitstream Complete ✓ = Default Layout Dashboard 7 I: HARDWARE MANAGER- localhost/xilinx_tcf/Digilent/210203B7626A ? X ? □ t:, X ? - □ X 'tl'counter1 nstcount[:lO <> cour !er I nst,tr ager o tr ager 2 oeur Settings • hw_ila_ 1 x Status- hw_ila_1 ? - □ Capture Mode Settings BASIC Capture mode {1-1024) Number of windows: Wir.dow data depth: 1024 Trigger position in wir.dow: 1 V I hw vI0 1 Q Capture Setup- hw Ila 1 x + - ? - □ o-. Name Radix Operator c0tmter_Unst/trigger V [Bl trigger_2_0BUF V [Bl Value 1 (logical one) [1 • 1024] X(don'tcare) R(O-to-1 transition) [0 -1023] F(1-to-Otransition) General Settings Refresh rate: ) Td Console I Port v r X-(d-o-,,-ca-,.-, -�1 probe2(0] l probe3!0J v j O(logical zero) B (both transitions) N (no transitions) 500 Mes,ages Debug Probe Value: counter_ l_inst/trigger j Serial 1/0 Links I Serial 1/0 Scans ] 6. Configure trigger_2_0BUFto the condition equal(==) and O (logical zero): file fdit FJow Iools Repo.rts ► .W.ir.dow ,11 . 0 Laiout Y.ie:w Q· Qwck Access 1::1.elp write__bitstream Complete Dashboard 7 I: ✓ : Default Layout HARDWARE MANAGER localhost/xilinx_tcf/Digilent/210203337626A ? X 'tl'counter! rist coul1[30 <> couriter I r>st tr qqer o tr aqer 2 OBUf Settings· hw_ila_l x Status- hw_ila_1 7 - □ hw_vio_1 Q Capture Mode Settings Number of windows: [1 ·10241 Wir.dow data depth: 1024 Trigger position in window: I Capture Setup- hw_ila_l x - V ] Td Console I Radix Operator V [Bl trigger_2_0BUF V (Bl [1 - 1024] General Settings Refresh rate: ? - □ counter_Unst{trigger !0 -1023] 1 I o-. Name BASIC Capture mode + Value v 0 (logical zero) 1 (logical one) X(don'tcare) R(O-to-1 transition) F(Ho-Otransition) B (both transitions) 500 Mes,ages Debug Probe Value: trigger_2_0BUF I Serial 1/0 Links I N (no transitions) Serial 1/0 Scans ] 7. Change the Capture Condition to Global AND: Port 1 v probe2(0J � - - � prabe3(0J v X(don'tcare) file .Edit FJow Iools Repo.rts ► Y[ir.dow Ill O LaJ"_out lliew l: HARDWARE MANAGER- localhost/xilinx_tcf/Digilent/210203B7626A ? X ? _ □ BASIC Name [1-1024] Window data depth: 1024 Trigger position in window: 32 hw_vio_1 Q Number of windows: V ✓ = Default Layout Dashbo;ud � Settings hw_ila_l x Status - hw_ila_1 Capture mode: write__bitstream Complete Q· Quick Access 1::1.elp " Capture Setup hw_ila_ 1 x -ro:: �'-1------------, + Set Capture Cor.dition to Global AND' counter_ l_inst/trigger [1-1024) 5€1 Capture Condition to 'Global OR' trigger_2_0BUF (0-10231 ? - □ Value Set Capture Condition to GlobalNAND' Set Capture Condition to 'GlobalNOR' V V Port probe2[0] probe3[0] General Settings Refresh rate: 500 I J serial 1/0Links Seriall/05<:ans Set capture condition to Gtoba1 ANO, OR.NAND orNOR function I 8. Click on the Run trigger button and then change resetto O from vio_reset: file .Edit FJow Iools Repo.rts ► Y[iOOow " . 0 LaJ"_out HARDWARE MANAGER localhost/xilinx_tcf/Digilent/2102.03B7626A I �I Ii z • J hw ,l::v.form - hwjla_1 i I ·-· .c O + - Q t! 0» ■ lJ llA Status Pre-tnaaerCacture (Oout of 1024 s; ca " lliew l: Q· Quick Access 1::1.elp write__bitstream Complete ? X e. �" •f 1◄ ►I 'I! !r +r r. ...r 0 Value 'll'counter 1 nst cm lt ,0 o counter I r,st tr qqe • tr oqer 2 OBUf Settings-hw_ila_1 t! ► » Core status 7 _ □ Status- hw_ila_l x ■ • �CapturcSnup-hw_lla_1 �¼ + Name Pre-Trigger Capture status - Window 1 of 1 Value Activity Direction Output VIO hw_vio_1 Window ,ample O of 1024 I Tel Console Debug Probe: reset Mes>ages I Serial 1/0Links I ✓ ::: Default layout Dashboard � Seriall/OScans] As we can see from the image below, the waveform has only recorded data when counter_ 1_inst's count signal is 13, 14, 15, or 0. Any other counts are filtered out because counter_ 1_inst/triggeris high on these counts only. file Edit FJow Iools Repo_rt:s Window Lay_out Jliew Help Q· Quick An:es� 61 wrlte_bitstream Complete HARDWARE MANAGER- localhost/xillnx_tcf/Digilent/210203B7626A Conclusion In this tutorial, we learned about ILA and VIO and different use-cases for them. ILA and VIO are excellent options for on-chip debugging. They are free, easy to use, flexible, scalable, and simple yet offer advanced features. The use of multiple triggers and Capture mode helps you achieve a complex debugging scheme. ✓ = Default Layout ? X