{"id":391,"date":"2017-01-24T18:56:15","date_gmt":"2017-01-24T17:56:15","guid":{"rendered":"http:\/\/www.gtronic.it\/test\/?page_id=391"},"modified":"2020-03-04T23:57:49","modified_gmt":"2020-03-04T22:57:49","slug":"fpga-soc","status":"publish","type":"page","link":"https:\/\/www.gtronic.it\/test\/index.php\/fpga-soc\/","title":{"rendered":"FPGA SoC"},"content":{"rendered":"<p><strong>Corso G-Tronic di programmazione FPGA con SoC.\u00a0<\/strong><\/p>\n<p>Da gennaio 2017 \u00e8 stato attivato presso la G-Tronic Robotics Didactic Division il corso di programmazione dei sistemi basati su FPGA e ARM multicore SoC (system on chip).<\/p>\n<p><strong>Esempio di creazione di un custom IP in ambiente Vivado xilinx 2015.4<\/strong><\/p>\n<p>La scheda di riferimento, in attesa che venga progettata una piattaforma Micro-GT basata su ZYNQ \u00e8 la RedPitaya.\u00a0 Questa ha dei vincoli hardware (contraints) e dei preset che abilitano sul processore xc7z010clg400-1 le periferiche in uso e disabilitano quelle non connesse all&#8217;hardware di contorno.<\/p>\n<p>Il file di preset \u00e8 questo -&gt;<a href=\"http:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/red_pitaya_rfxpreset.zip\">red_pitaya_rfxpreset<\/a><\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-full wp-image-688 aligncenter\" src=\"http:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/Libro_FPGA_gottardo_2017.jpg\" alt=\"Libro_FPGA_gottardo_2017\" width=\"212\" height=\"320\" srcset=\"https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/Libro_FPGA_gottardo_2017.jpg 212w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/Libro_FPGA_gottardo_2017-199x300.jpg 199w\" sizes=\"(max-width: 212px) 100vw, 212px\" \/><\/p>\n<p>Il libro ti testo di riferimento per il corso \u00e8 -&gt;\u00a0<a href=\"http:\/\/www.lulu.com\/shop\/marco-gottardo\/first-step-on-fpga-xilinx-introduzione-alla-progettazione-dei-sistemi-soc\/paperback\/product-22886982.html\">First step on FPGA Xilinx<\/a><\/p>\n<p>E&#8217; disponibile un tutorial acquistabile gratuitamente a condizioni Amazon (carta del docente, bonus cultura o App18). -&gt; <a href=\"https:\/\/www.amazon.it\/dp\/1986100936\">Tutorial FPGA libretto<\/a><\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-full wp-image-2746\" src=\"http:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/FPGA-primo-tutorial.png\" alt=\"FPGA primo tutorial\" width=\"950\" height=\"467\" srcset=\"https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/FPGA-primo-tutorial.png 950w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/FPGA-primo-tutorial-300x147.png 300w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/FPGA-primo-tutorial-768x378.png 768w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/FPGA-primo-tutorial-500x246.png 500w\" sizes=\"(max-width: 950px) 100vw, 950px\" \/><\/p>\n<p>Configurazioni e primi passi -&gt; <a href=\"http:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/Corso-FPGA-SoC.docx\">Corso FPGA SoC<\/a><\/p>\n<p>Acquisire\u00a0nozioni VHDL\u00a0e il glossario -&gt; <a href=\"http:\/\/www.gtronic.it\/test\/index.php\/concetti-base-e-glossario\/\">pagina delle nozioni base e glossario termini<\/a><\/p>\n<p>File .LIC -&gt; <a href=\"http:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/Xilinx.zip\">.Xilinx<\/a>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 File AXI_write -&gt;<a href=\"http:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/axi_write.zip\">axi_write<\/a>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Teoria AXI -&gt; <a href=\"http:\/\/www.gtronic.it\/test\/index.php\/bus-axi\/\">pagina AXI<\/a><\/p>\n<ul>\n<li>Esempio come serializzare dati a alta velocit\u00e0 -&gt; <a href=\"http:\/\/www.gtronic.it\/test\/index.php\/serializzare-un-segnale-a-alta-velocita\/\">Acquisire ADC a 2MHZ<\/a><\/li>\n<li>Esempio implementazione funzioni logiche -&gt;<a href=\"http:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/playboard.zip\">playboard<\/a><\/li>\n<li><a href=\"http:\/\/www.gtronic.it\/test\/?page_id=1112&amp;preview=true\">Procedura guidata creazione progetto per Pitaya.<\/a><\/li>\n<li><a href=\"http:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/red-pitaya-notes-master.zip\">red-pitaya-notes-master (file TCL con molti esempi)<\/a><\/li>\n<li>immagini progetto <a href=\"http:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/read_write_AXI.zip\">read_write_AXI<\/a><\/li>\n<li>documentazione generica <a href=\"http:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/componenti_sequenziali.pdf\">componenti_sequenziali<\/a><\/li>\n<\/ul>\n<p><a href=\"http:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/MDSPlus-librerie-Pitaya.zip\">MDSPlus librerie Pitaya<\/a>\u00a0 MDSplus \u00e8 un sistema di monitoraggio e acquisizione dati utilizzato nella ricerca in ambito di fusione termo nucleare controllata. Ho ricompilato queste librerie in ambiente Linux e messe a disposizione dei gruppi di ricerca che\u00a0ne potessero avere bisogno.<\/p>\n<p>Programma di test del bus AXI lite -&gt; scarica template uso AXI lite<\/p>\n<p><a href=\"http:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/Red-Pitaya-register-map.pdf\">RedPitaya Register memory map\u00a0<\/a><\/p>\n<p><strong>Isolated hig speed ADC Full project.<\/strong><\/p>\n<p>On this page is presents a project\u00a0 of an electrically isolated interface\u00a0 from the machine to be used in industrial or research environments.\u00a0 <a href=\"http:\/\/www.gtronic.it\/test\/index.php\/fpga-high-speed-isolated-adc-redpitaya-shield\/\">Go to the page<\/a><\/p>\n<p>&nbsp;<\/p>\n<p><strong>Vivado by Xilinx.<\/strong><\/p>\n<p>Il sistema di sviluppo IDE \u00e8 il Vivado 2015.4, sviluppato in TCL, un linguagio di Scripting che impartisce direttive a un interprete inline. Vivado \u00e8\u00a0scaricabile dal sito ufficiale in varie forme, ad esempio WebPack e con licenze anche gratuite. Questi \u00e8 in grado di effettuare\u00a0lo sviluppo\u00a0del design e visualizzarlo in modalit\u00e0 IP block design, la sintesi della rete, e la simulazione. Le componenti principali sono:<\/p>\n<ol>\n<li><strong>Vivado High-Level Synthesis<\/strong><\/li>\n<li><strong>Vivado Simulator<\/strong><\/li>\n<li><strong>Vivado IP Integrator<\/strong><\/li>\n<li><strong>Vivado TCL Store<\/strong><\/li>\n<\/ol>\n<p>Il TCL \u00e8 un linguaggio di Scripting che permette di sviluppare oggetti di Vivado o anche nuove funzionalit\u00e0 dell&#8217;IDE. D&#8217;altro canto ogni funzione standard di Vivado pu\u00f2 essere evocata dalla console TCL anche in pipeline cos\u00ec che \u00e8 possibile memorizzare un intero design o ricostruire un intero design semplicemente passando alla console tutto il file di script. Idem per quanto riguarda i preset dei sistemi centrali and esempio al configurazione dello ZYNQ, o il caricamento dei vincoli hardware dovuto allo schema della scheda di destinazione, come presenza di pullup, detti constraints.<\/p>\n<p>Il Vivado presentato in questo sito e utilizzato ai corsi FPGA &amp; SoC della G-Tronic Robotics (vedi calendario o chiedi informazioni via mail) \u00e8 in grado di sviluppare per i device Ultrascale, Virtex-7, Kintex-7, Artix-7, and <strong>Zynq-7000<\/strong>.<\/p>\n<p>La famiglia ZYNQ7000 \u00e8 utilizzata nella board RedPitaya, presa come riferimento per i nostri corsi fino a che non sar\u00e0 disponibile un prodotto Micro-GT.<\/p>\n<p><strong>IP<\/strong> = Intellectual property, \u00e8 un blocchetto grafico che contiene un&#8217;implementazione di codice funzionale scritto in Verilog oppure VHDL che pu\u00f2 essere agganciato a un&#8217;architettura pi\u00f9 grande mostrata nella sezione &#8220;Block design&#8221; della\u00a0piattaforma di sviluppo software Vivado.<\/p>\n<p><strong>RTL<\/strong> = register transfer level<\/p>\n<p><strong>Focus:<\/strong> Vogliamo realizzare l&#8217;AND logico tra due ingressi fisici\u00a0del\u00a0chip ZYNQ, internamente connessi alla sezione FPGA, e sincronizzarli a un segnale di clock interno generato nella sezione ARM multicore allo scopo di\u00a0produrre il risultato logico combinatorio in un pin fisico di uscita a cui sia connesso un LED. Useremo la RedPitaya.<\/p>\n<p><strong>Fase 1) Creazione del Top module e preset.<\/strong><\/p>\n<p>Creiamo un nuovo progetto. La pagina iniziale ha questo aspetto:<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-full wp-image-449\" src=\"http:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/1-lanciare-Vivado.png\" alt=\"1- lanciare Vivado\" width=\"932\" height=\"686\" srcset=\"https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/1-lanciare-Vivado.png 932w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/1-lanciare-Vivado-300x221.png 300w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/1-lanciare-Vivado-768x565.png 768w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/1-lanciare-Vivado-408x300.png 408w\" sizes=\"(max-width: 932px) 100vw, 932px\" \/><\/p>\n<p>Clicchiamo su &#8220;Create New Project&#8221; , forniamo un nome e una cartella di destinazione per il nuovo progetto.<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-full wp-image-451\" src=\"http:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/2-mome-e-locazione-progetto.png\" alt=\"2 - mome e locazione progetto\" width=\"583\" height=\"271\" srcset=\"https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/2-mome-e-locazione-progetto.png 583w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/2-mome-e-locazione-progetto-300x139.png 300w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/2-mome-e-locazione-progetto-500x232.png 500w\" sizes=\"(max-width: 583px) 100vw, 583px\" \/><\/p>\n<p>Il progetto creato sar\u00e0 di tipo RTL.<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-full wp-image-452\" src=\"http:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/3-Tipo-progetto-RTL.png\" alt=\"3 - Tipo progetto RTL\" width=\"584\" height=\"273\" srcset=\"https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/3-Tipo-progetto-RTL.png 584w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/3-Tipo-progetto-RTL-300x140.png 300w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/3-Tipo-progetto-RTL-500x234.png 500w\" sizes=\"(max-width: 584px) 100vw, 584px\" \/><\/p>\n<p>selezioniamo la corretta versione del chip ZYNQ montato nella RedPitaya. (potr\u00e0 variare in funzione della board di sviluppo che avete disponibile).<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-full wp-image-454\" src=\"http:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/4-Selezione-Zynq-montato-nella-RedPitaya.png\" alt=\"4 - Selezione Zynq montato nella RedPitaya\" width=\"584\" height=\"484\" srcset=\"https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/4-Selezione-Zynq-montato-nella-RedPitaya.png 584w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/4-Selezione-Zynq-montato-nella-RedPitaya-300x249.png 300w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/4-Selezione-Zynq-montato-nella-RedPitaya-362x300.png 362w\" sizes=\"(max-width: 584px) 100vw, 584px\" \/><\/p>\n<p>viene mostrato il summary (riassunto) del progetto che stiamo impostando.<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-full wp-image-455\" src=\"http:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/5-Summary-del-progetto-impostato.png\" alt=\"5 - Summary del progetto impostato\" width=\"581\" height=\"334\" srcset=\"https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/5-Summary-del-progetto-impostato.png 581w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/5-Summary-del-progetto-impostato-300x172.png 300w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/5-Summary-del-progetto-impostato-500x287.png 500w\" sizes=\"(max-width: 581px) 100vw, 581px\" \/><\/p>\n<p>Agiamo su &#8220;Finish&#8221; per attivare la creazione del progetto. Si apre l&#8217;ambiente di sviluppo che si comporr\u00e0 di alcune sezioni principali:<\/p>\n<ol>\n<li>il <strong>Flow navigator <\/strong>che suddivide in 7 passi lo sviluppo del progetto ovvero la creazione della struttura e la sua manipolazione nella prima voce &#8220;Project manager&#8221;, una sezione in cui \u00e8 possibili inserire e manipolare nuovi IP e vedere la struttura di interconnessione &#8220;IP Integrator&#8221;, una sezione in cui \u00e8 possibile simulare anche un IP alla volta il funzionamento della rete sviluppata &#8220;Simulation&#8221;,\u00a0una sezione in cui \u00e8 possibile vedere l&#8217;implementazione della rete rete sia in forma di circuito multifilare che a blocchi come superficie interna del silicio impegnato o come possibilit\u00e0 di connessione dei segnali ai pin esterni \u00a0&#8220;RTL Analysis&#8221;, un&#8217;azione di &#8220;Synthesis&#8221; in cui avviene una compilazione dei vari codici degli IP, un&#8217;area\u00a0di implementazione in cui\u00a0viene realizzata la rete logica, anche separatamente per gli IP componenti\u00a0del design\u00a0&#8220;Implementation&#8221;, Un&#8217;ultima sezione, &#8220;Program and Debug&#8221;\u00a0in cui si genera il file in formato bitstream, da inserire nel chip di destinazione e che gestisce e utilizza le board di sviluppo ad esempio la Zed board, consigliata da Xilix.<\/li>\n<li>Nel project manager abbiamo disponibili le sezioni in cui verr\u00e0 mostrata una gerarchia a cui si devono attenere le parti componenti del progetto, gestita a cura del progettista.<\/li>\n<li>sezione &#8220;Design Runs&#8221; in cui vediamo le azioni intraprese a la situazione in tempo reale del progetto in realizzazione.<\/li>\n<li>In basso al centro \u00e8 possibile attivare la console TCL, a cui passare dei file batch che lanciano sequenze che Vivado pu\u00f2 eseguire per ricreare un\u00a0design salvato da un altro progettista, messages, log, reports, Design Runs.<\/li>\n<\/ol>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-full wp-image-457\" src=\"http:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/6-Ambiente-Vivado.png\" alt=\"6 - Ambiente Vivado\" width=\"1676\" height=\"860\" srcset=\"https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/6-Ambiente-Vivado.png 1676w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/6-Ambiente-Vivado-300x154.png 300w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/6-Ambiente-Vivado-768x394.png 768w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/6-Ambiente-Vivado-1024x525.png 1024w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/6-Ambiente-Vivado-500x257.png 500w\" sizes=\"(max-width: 1676px) 100vw, 1676px\" \/><\/p>\n<p>L&#8217;immagine sovrastante \u00e8 visualizzabile nelle dimensioni reali. Alla voce Project Manager\u00a0clicchiamo si &#8220;Project Setting&#8221;.\u00a0 Qui impostiamo il linguaggio di creazione come VHDL.<\/p>\n<p><strong>Attenzione: <\/strong>Il linguaggio qui selezionato sar\u00e0 il medesimo per tutti i blocchi e sorgenti inseriti nella gerarchia da questo livello in poi. Se successivamente si tenta di modificare il linguaggio, ad esempio da Verilog a VHDL, di uno degli IP di gerarchia inferiore viene segnalato un errore la cui correzione richiede di cambiare prima il linguaggio del progetto TOP ovvero dei livelli gerarchici superiori.<\/p>\n<p>Dobbiamo fornire un nome per il top_module, \u00e8 buona norma che ricordi il nome del progetto seguito dal suffisso top_module.<\/p>\n<p>agire su:Tools -&gt; Project Settings<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-full wp-image-460\" src=\"http:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/7-Project-setting_.png\" alt=\"7 - Project setting_\" width=\"682\" height=\"499\" srcset=\"https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/7-Project-setting_.png 682w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/7-Project-setting_-300x220.png 300w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/7-Project-setting_-410x300.png 410w\" sizes=\"(max-width: 682px) 100vw, 682px\" \/><\/p>\n<p>Il modulo che stiamo creando \u00e8 il primo e il sistema si accorge che non ne esistono altri. ci viene chiesta conferma della volont\u00e0 di inserire questo come nodo principale del nostro progetto. Confermiamo.<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-full wp-image-462\" src=\"http:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/8-confermare-come-top-module.png\" alt=\"8 - confermare come top module\" width=\"514\" height=\"143\" srcset=\"https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/8-confermare-come-top-module.png 514w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/8-confermare-come-top-module-300x83.png 300w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/8-confermare-come-top-module-500x139.png 500w\" sizes=\"(max-width: 514px) 100vw, 514px\" \/><\/p>\n<p>Portiamoci alla voce IP Integrator\u00a0 del flow navigator e clicchiamo su &#8220;Create block Design&#8221;.\u00a0 Creiamo l&#8217;IP dando un nome coerente Micro-GT_FPGA_AND (sostituendo il default design_1)\u00a0e instanziandolo in &#8220;<strong>local to project<\/strong>&#8220;.<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-full wp-image-465\" src=\"http:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/9-Create-block-design_.png\" alt=\"9 - Create block design_\" width=\"426\" height=\"248\" srcset=\"https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/9-Create-block-design_.png 426w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/9-Create-block-design_-300x175.png 300w\" sizes=\"(max-width: 426px) 100vw, 426px\" \/><\/p>\n<p>Si rientra nell&#8217;istanza principale di Vivado e nell&#8217;editor Diagram mi viene permesso di inserire il nuovo IP che diventer\u00e0 il top ovvero il processore ZYNQ.<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-full wp-image-466\" src=\"http:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/10-Aggiungi_nuovo_IPtop_module.png\" alt=\"10 - Aggiungi_nuovo_IPtop_module\" width=\"948\" height=\"556\" srcset=\"https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/10-Aggiungi_nuovo_IPtop_module.png 948w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/10-Aggiungi_nuovo_IPtop_module-300x176.png 300w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/10-Aggiungi_nuovo_IPtop_module-768x450.png 768w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/10-Aggiungi_nuovo_IPtop_module-500x293.png 500w\" sizes=\"(max-width: 948px) 100vw, 948px\" \/><\/p>\n<p>Si apre la finestra di ricerca nelle librerie degli IP che siamo interessati a inserire nel design, in questo momento il top_module ovvero lo ZYNQ.<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-full wp-image-468\" src=\"http:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/11-Search-1.png\" alt=\"11 - Search 1\" width=\"265\" height=\"202\" \/><\/p>\n<p>digitando &#8220;zynq&#8221; si applica un filtro come mostrato sotto. Qui selezioniamo la prima voce &#8220;ZYNQ7 Processing System&#8221;.<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-full wp-image-469\" src=\"http:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/12-Select-top-module.png\" alt=\"12 - Select top module\" width=\"267\" height=\"208\" \/><\/p>\n<p>Alla conferma viene inserito il chip ZYNQ che abbiamo richiesto e osserviamo la comparsa di una voce &#8220;Run Block Automation&#8221; che \u00e8 di fatto una procedura automatizzata per connettere le parti essenziali alle periferiche di default tramite il bus AXI.<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-full wp-image-470\" src=\"http:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/13-standard-Zynq.png\" alt=\"13 - standard Zynq\" width=\"499\" height=\"276\" srcset=\"https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/13-standard-Zynq.png 499w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/13-standard-Zynq-300x166.png 300w\" sizes=\"(max-width: 499px) 100vw, 499px\" \/><\/p>\n<p>Questo IP per\u00f2 non \u00e8 configurato come da hardware disponibile, viene quindi distribuito un file di preset che permette di portare questo ZYNQ alla situazione di quello installato nella Pitaya abilitando o disabilitando le periferiche usate o non usate. Assomiglia un po&#8217; al concetto dei constraints ma questa \u00e8 una configurazione interna al chip mentre i constraints sono relativi a collegamenti dei GPIO verso l&#8217;esterno e ai livelli\/protocolli utilizzati.<\/p>\n<p>Clicchiamo su &#8220;Run block automation&#8221; e confermiamo le impostazioni proposte relative alle porte attualmente attive.<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-full wp-image-471\" src=\"http:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/14-Run-Automation.png\" alt=\"14 - Run Automation\" width=\"754\" height=\"433\" srcset=\"https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/14-Run-Automation.png 754w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/14-Run-Automation-300x172.png 300w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/14-Run-Automation-500x287.png 500w\" sizes=\"(max-width: 754px) 100vw, 754px\" \/><\/p>\n<p>Vengono automaticamente connesse\u00a0le periferiche AXI alle DDR e al bus dei\u00a0PORT di IO.<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-full wp-image-472\" src=\"http:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/15-Run-Automation-done.png\" alt=\"15 - Run Automation done\" width=\"559\" height=\"244\" srcset=\"https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/15-Run-Automation-done.png 559w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/15-Run-Automation-done-300x131.png 300w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/15-Run-Automation-done-500x218.png 500w\" sizes=\"(max-width: 559px) 100vw, 559px\" \/><\/p>\n<p>Nota bene: La connessione dell&#8217;unica periferica AXI attiva &#8220;M_AXI_GP0_ACLK&#8221; va impostata a mano puntando\u00a0con il mouse sul segnale di clock FCLK_CLK0 e trascinando nella destinazione del segnale, come mostrato in figura.<\/p>\n<p><strong>Aggiungere i &#8220;Preset&#8221;<\/strong> tramite il file di configurazione fornito dal costruttore della board in uso.<\/p>\n<p>Il file di preset \u00e8 questo -&gt;<a href=\"http:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/red_pitaya_rfxpreset.zip\"><u><span style=\"color: #0066cc;\">red_pitaya_rfxpreset<\/span><\/u><\/a><\/p>\n<p>un altro file di impostazione generico -&gt; <a href=\"http:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/ps7_init.zip\">ps7_init<\/a><\/p>\n<p>doppio click\u00a0sull&#8217;IP del TOP_Module, diveter\u00e0 marrone, si apre la finestra Zynq processing system (5.5) in cui \u00e8 presente il comando preset.<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-full wp-image-474\" src=\"http:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/16-zynq-processor.png\" alt=\"16 - zynq processor\" width=\"866\" height=\"691\" srcset=\"https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/16-zynq-processor.png 866w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/16-zynq-processor-300x239.png 300w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/16-zynq-processor-768x613.png 768w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/16-zynq-processor-376x300.png 376w\" sizes=\"(max-width: 866px) 100vw, 866px\" \/><\/p>\n<p>si apre la tendina mostrata in figura\u00a0con cui possiamo\u00a0 caricare il file di preset che nella sostanza \u00e8 una procedura TCL. (approfondimenti nel libro di testo indicato a inizio pagina).<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-full wp-image-475\" src=\"http:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/17-zynq-processor-apply-presets.png\" alt=\"17 - zynq processor apply presets\" width=\"438\" height=\"367\" srcset=\"https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/17-zynq-processor-apply-presets.png 438w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/17-zynq-processor-apply-presets-300x251.png 300w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/17-zynq-processor-apply-presets-358x300.png 358w\" sizes=\"(max-width: 438px) 100vw, 438px\" \/><\/p>\n<p>Confermando il caricamento del file potremmo gi\u00e0 osservare le impostazioni fisiche ad esempio esplorando le voci di &#8220;Peripherls I\/O pins&#8221; , &#8220;Clock Configuration&#8221;, &#8220;MIO Configuration&#8221;, ecc.\u00a0 Questa esperienza viene lasciata al visitatore del sito come utile esercizio.<\/p>\n<p>Se l&#8217;operazione va a buon fine vedremo comparire degli &#8220;spunti&#8221; sulle periferiche abilitate dal file caricato come mostrato sotto.<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-full wp-image-1162\" src=\"http:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/selected_peripherals_pitaya.png\" alt=\"selected_peripherals_pitaya\" width=\"253\" height=\"88\" \/><\/p>\n<p>Dopo l&#8217;esecuzione della procedura automatica l&#8217;IP del TOP module cambia aspetto perch\u00e9 ora mette a disposizione anche altre porte, segnali e periferiche\u00a0che nella versione di default non erano abilitate.<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-full wp-image-478\" src=\"http:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/18-zynq-processor-apply-presets.png\" alt=\"18 - zynq processor apply presets\" width=\"589\" height=\"398\" srcset=\"https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/18-zynq-processor-apply-presets.png 589w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/18-zynq-processor-apply-presets-300x203.png 300w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/18-zynq-processor-apply-presets-444x300.png 444w\" sizes=\"(max-width: 589px) 100vw, 589px\" \/><\/p>\n<p>Per analogia a quanto visto in precedenza le periferiche AXI vanno connesse almeno a un segnale di clock al fine di evitare errori di compilazione, syntesis ecc.<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-full wp-image-521\" src=\"http:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/review1.png\" alt=\"review1\" width=\"544\" height=\"403\" srcset=\"https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/review1.png 544w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/review1-300x222.png 300w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/review1-405x300.png 405w\" sizes=\"(max-width: 544px) 100vw, 544px\" \/><\/p>\n<p>Nota bene: Lo stesso clock &#8220;FCLK_CLK0&#8221; nel presente esempio piloter\u00e0 le 4 periferiche AXI che risultano citate, e quindi introdotte nell&#8217;IP, nel file di preset indicato in precedenza. Effettuiamo i collegamenti cliccando prima sul FCLK_CLK0 e trascinando con lo strumento matita sul lato sinistro dell&#8217;IP (per quattro volte).<\/p>\n<p><strong>Solo in caso di redpitaya con sue specifiche funzioni (non caricare per progetti custom)<\/strong><\/p>\n<p>Notiamo che non sono presenti file di &#8220;Constrains&#8221;.\u00a0Dobbiamo aggiungere questo file cliccando con il tasto\u00a0destro del mouse sulla cartella vuota &#8220;Constrains&#8221;,\u00a0selezionando &#8220;Add Sources&#8221;. Nella successiva finestra selezionare &#8220;add or create constrains&#8221;, premere il tasto &#8220;next&#8221; e aggiungere il file con estensione &#8220;.xdc&#8221;.<\/p>\n<p>Scarica il file di constrains standard della Pitaya -&gt;<a href=\"http:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/red_pitaya_2015.4.zip\"><u><span style=\"color: #0066cc;\">red_pitaya_2015.4<\/span><\/u><\/a><\/p>\n<p><strong>Fase 2) Creazione di un custom IP.<\/strong><\/p>\n<p>Nei precedenti passaggi abbiamo predisposto il sistema all&#8217;aggancio di nuovi altri moduli in cui implementare in VHDL le funzioni logiche di nostro interesse o anche cose pi\u00f9 complesse. Per il momento limitiamoci a volere eseguire\u00a0 un AND logico tra due ingressi e produrre un&#8217;uscita su un PIN a cui \u00e8 collegato un LED della Pitaya.<\/p>\n<p>Sul men\u00f9 &#8220;<strong>Tools<\/strong>&#8221; clicchiamo su &#8220;<strong>Create and package IP<\/strong>&#8221;<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-full wp-image-492\" src=\"http:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/n-create-and-pakager-IP.png\" alt=\"n -create and pakager IP\" width=\"447\" height=\"323\" srcset=\"https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/n-create-and-pakager-IP.png 447w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/n-create-and-pakager-IP-300x217.png 300w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/n-create-and-pakager-IP-415x300.png 415w\" sizes=\"(max-width: 447px) 100vw, 447px\" \/><\/p>\n<p>Il nuovo IP lo vogliamo creare come nuova periferica AXI 4, quindi mettiamo lo spunto dove mostrato nella prossima figura.<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-full wp-image-494\" src=\"http:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/21-create-nex-AXI4.png\" alt=\"21 -create nex AXI4\" width=\"677\" height=\"522\" srcset=\"https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/21-create-nex-AXI4.png 677w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/21-create-nex-AXI4-300x231.png 300w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/21-create-nex-AXI4-389x300.png 389w\" sizes=\"(max-width: 677px) 100vw, 677px\" \/><\/p>\n<p>Agiamo su next e diamo un nome coerente al progetto che stiamo sviluppando al nuovo IP, nel nostro esempio Micro_GT_AND_logicIP.<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-full wp-image-496\" src=\"http:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/22-create-new-IP-logico-con-nome.png\" alt=\"22 -create new IP logico con nome\" width=\"425\" height=\"318\" srcset=\"https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/22-create-new-IP-logico-con-nome.png 425w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/22-create-new-IP-logico-con-nome-300x224.png 300w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/22-create-new-IP-logico-con-nome-401x300.png 401w\" sizes=\"(max-width: 425px) 100vw, 425px\" \/><\/p>\n<p>Ora creiamo la connessione basata su interfaccia AXI lite la quale avr\u00e0 solo 4 registri che saranno parametrizzabili dal tool di lancio &#8220;AXI_write&#8221; che useremo nella console Linux quando manderemo in esecuzione il progetto sulla Pitaya.<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-full wp-image-498\" src=\"http:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/23-create-new-IPAXI_lite.png\" alt=\"23 -create new IPAXI_lite\" width=\"567\" height=\"385\" srcset=\"https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/23-create-new-IPAXI_lite.png 567w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/23-create-new-IPAXI_lite-300x204.png 300w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/23-create-new-IPAXI_lite-442x300.png 442w\" sizes=\"(max-width: 567px) 100vw, 567px\" \/><\/p>\n<p>Il nuovo IP va creato spuntando il menu &#8220;<strong>edit IP<\/strong>&#8221; ovvero la seconda voce.<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-full wp-image-500\" src=\"http:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/24-create-new-IPAXI_lite.png\" alt=\"24 -create new IPAXI_lite\" width=\"651\" height=\"470\" srcset=\"https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/24-create-new-IPAXI_lite.png 651w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/24-create-new-IPAXI_lite-300x217.png 300w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/24-create-new-IPAXI_lite-416x300.png 416w\" sizes=\"(max-width: 651px) 100vw, 651px\" \/><\/p>\n<p>Agendo su finish si apre una nuova istanza di Vivado. Entrati nel nuovo IP dovremo aprire i suoi sorgenti per aggiungere le porte e l&#8217;istanza di queste porte (non \u00e8 questo il blocco che funger\u00e0 da wrapper).<\/p>\n<p>&nbsp;<\/p>\n<hr \/>\n<p><b>\u00a0<\/b><\/p>\n<hr \/>\n<p>Facciamo tasto destro sul file principale denominato &#8220;arch_imp&#8221;, add sources, mettere il pallino su &#8220;Add or create design sources&#8221;, -&gt; next -&gt; create file,\u00a0 definire il nome del nuovo sorgente con\u00a0aggiunta behaviural.<\/p>\n<p>Come file location scegliere il progetto attivo<\/p>\n<p>Facciamo doppio click sul file indicato nella foto (il primo nella gerarchia), vengono mostrati i sorgenti.<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-full wp-image-505\" src=\"http:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/25-Add-port-in-top-new-IP.png\" alt=\"25 -Add port in top new IP\" width=\"715\" height=\"229\" srcset=\"https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/25-Add-port-in-top-new-IP.png 715w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/25-Add-port-in-top-new-IP-300x96.png 300w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/25-Add-port-in-top-new-IP-500x160.png 500w\" sizes=\"(max-width: 715px) 100vw, 715px\" \/><\/p>\n<p>Ora dobbiamo aggiungere al sorgente la definizione delle nuove porte abbinate al behevioral.<\/p>\n<p>Agire su &#8220;add sources&#8221; del flow navigator:<\/p>\n<p>nuovamente agiamo su add or create defign sources<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-full wp-image-1163\" src=\"http:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/addsourrces_IP.png\" alt=\"addsourrces_IP\" width=\"806\" height=\"528\" srcset=\"https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/addsourrces_IP.png 806w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/addsourrces_IP-300x197.png 300w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/addsourrces_IP-768x503.png 768w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/addsourrces_IP-458x300.png 458w\" sizes=\"(max-width: 806px) 100vw, 806px\" \/><\/p>\n<p>Agiamo su\u00a0Create files\u00a0 &#8230; selezionare VHDL&#8230;non mettere local project<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-full wp-image-1164\" src=\"http:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/addsourrces_IP_path.png\" alt=\"addsourrces_IP_path\" width=\"806\" height=\"528\" srcset=\"https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/addsourrces_IP_path.png 806w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/addsourrces_IP_path-300x197.png 300w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/addsourrces_IP_path-768x503.png 768w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/addsourrces_IP_path-458x300.png 458w\" sizes=\"(max-width: 806px) 100vw, 806px\" \/><\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-full wp-image-1165\" src=\"http:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/definisce_porte.png\" alt=\"definisce_porte\" width=\"549\" height=\"361\" srcset=\"https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/definisce_porte.png 549w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/definisce_porte-300x197.png 300w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/definisce_porte-456x300.png 456w\" sizes=\"(max-width: 549px) 100vw, 549px\" \/><\/p>\n<p>verr\u00e0 posto inizialmente fuori dalla gerarchia<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-full wp-image-1166\" src=\"http:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/fuori-gerarchia.png\" alt=\"fuori gerarchia\" width=\"398\" height=\"236\" srcset=\"https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/fuori-gerarchia.png 398w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/fuori-gerarchia-300x178.png 300w\" sizes=\"(max-width: 398px) 100vw, 398px\" \/><\/p>\n<p>doppio click sul nuvo file per entrare nel VHDL<\/p>\n<p>Aggiungere le porte al file top level module<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-full wp-image-1169\" src=\"http:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/definizioneP.png\" alt=\"definizioneP\" width=\"434\" height=\"370\" srcset=\"https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/definizioneP.png 434w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/definizioneP-300x256.png 300w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/definizioneP-352x300.png 352w\" sizes=\"(max-width: 434px) 100vw, 434px\" \/><\/p>\n<p>aggiungere il ocmponente al top level module<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-full wp-image-1167\" src=\"http:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/componente-aggiunto.png\" alt=\"componente aggiunto\" width=\"556\" height=\"529\" srcset=\"https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/componente-aggiunto.png 556w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/componente-aggiunto-300x285.png 300w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/componente-aggiunto-315x300.png 315w\" sizes=\"(max-width: 556px) 100vw, 556px\" \/><\/p>\n<p>sotto va creata l&#8217;istanza<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-full wp-image-1168\" src=\"http:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/istanza.png\" alt=\"istanza\" width=\"364\" height=\"250\" srcset=\"https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/istanza.png 364w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/istanza-300x206.png 300w\" sizes=\"(max-width: 364px) 100vw, 364px\" \/><\/p>\n<p>Al salvataggio il file del beheviural entra correttamente nella gerarchia<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-full wp-image-1170\" src=\"http:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/gerarchia-corretta.png\" alt=\"gerarchia corretta\" width=\"482\" height=\"250\" srcset=\"https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/gerarchia-corretta.png 482w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/gerarchia-corretta-300x156.png 300w\" sizes=\"(max-width: 482px) 100vw, 482px\" \/><\/p>\n<p>il sorgente del file contenete il Behavioral (quello pi\u00f9 interno nella gerarchia) conterr\u00e0 questo sorgente minimo in cui non pu\u00f2 mancare il comportamento, ovvero la logica ovvero il behavioral.<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-full wp-image-1175\" src=\"http:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/behavioral-del-file-and-logic.png\" alt=\"behavioral del file and logic\" width=\"510\" height=\"609\" srcset=\"https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/behavioral-del-file-and-logic.png 510w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/behavioral-del-file-and-logic-251x300.png 251w\" sizes=\"(max-width: 510px) 100vw, 510px\" \/><\/p>\n<p>fare &#8220;Review and Package&#8221; delle varie voci da aggiornare (eventuali merge changes); Verr\u00e0 proposto di chiudere l&#8217;istanza alla fine del salvataggio con revisione. Potremmo decidere di lasciarla aperta ma il risultato sar\u00e0 un aggiornamento dell&#8217; IP in copia temporanea. Se invece chiudiamo l&#8217;istanza il nuovo IP verr\u00e0 salvato nella cartella &#8220;ip_repo&#8221; selezionata come default nelle impostazioni del progetto e la copia temporanea rimossa. L&#8217;effetto del lavoro in copia temporanea si manifesta con la mancanza delle nuove porte, visualizzate nella grafica del nuovo IP. Eseguendo la giusta procedura, al momento dell&#8217;aggiunta del nuovo IP nel Block Design noteremo invece la presenza delle nuove porte di input\/output.<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-full wp-image-1172\" src=\"http:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/IP-repaccato.png\" alt=\"IP repaccato\" width=\"940\" height=\"405\" srcset=\"https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/IP-repaccato.png 940w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/IP-repaccato-300x129.png 300w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/IP-repaccato-768x331.png 768w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/IP-repaccato-500x215.png 500w\" sizes=\"(max-width: 940px) 100vw, 940px\" \/><\/p>\n<p>Colleghiamo il pin-out del nuovo IP a delle connessioni fisiche interne con il comando &#8220;make external&#8221; eseguibile semplicemente con control+t in ogni pin di input\/output (attenzione: non modificare ne bus ne\u00a0pin AXI&#8230;).<\/p>\n<p>Aggiorniamo il catalogo IP agendo su refresh ip catalogue, e successivamente premere rerun al fine di visualizzare lo stato corretto attuale del design.<\/p>\n<p>Andiamo cos\u00ec nel block design, tasto destro sul nodo principale (con icona gialla), create HDL wrapper; noteremo la creazione di un nuovo sorgente, posizionato in radice della struttura nel cui nome compare la voce &#8220;wrapper&#8221;.<\/p>\n<p>&nbsp;<\/p>\n<p>Dopo il synthesis dovrebbe comparire la realizzazione interna della rete logica, con l&#8217;aspetto simile a questo:<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-full wp-image-1176\" src=\"http:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/rete_interna.png\" alt=\"rete_interna\" width=\"906\" height=\"621\" srcset=\"https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/rete_interna.png 906w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/rete_interna-300x206.png 300w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/rete_interna-768x526.png 768w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/rete_interna-438x300.png 438w\" sizes=\"(max-width: 906px) 100vw, 906px\" \/><\/p>\n<p>Agiamo sul segno &#8220;+&#8221; del nostro IP visibile in alto, con nome and_logic_inst<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-full wp-image-1177\" src=\"http:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/and_logic.png\" alt=\"and_logic\" width=\"390\" height=\"173\" srcset=\"https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/and_logic.png 390w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/and_logic-300x133.png 300w\" sizes=\"(max-width: 390px) 100vw, 390px\" \/><\/p>\n<p>Possiamo quindi procedere con la creazione del file bitstream riversabile nella scheda usando winScp e Putty.<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-full wp-image-1178\" src=\"http:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/winscp.png\" alt=\"winscp\" width=\"1077\" height=\"671\" srcset=\"https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/winscp.png 1077w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/winscp-300x187.png 300w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/winscp-768x478.png 768w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/winscp-1024x638.png 1024w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/winscp-482x300.png 482w\" sizes=\"(max-width: 1077px) 100vw, 1077px\" \/><\/p>\n<p>scaricare le immagine per vederle nelle dimensioni reali.<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-full wp-image-1179\" src=\"http:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/putty.png\" alt=\"putty\" width=\"643\" height=\"360\" srcset=\"https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/putty.png 643w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/putty-300x168.png 300w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/putty-500x280.png 500w\" sizes=\"(max-width: 643px) 100vw, 643px\" \/><\/p>\n<p>Ora, chiudendo con due jumper i primi due pin in basso del connettore E1 della Pitaya 1 con 3 ovvero 3v3 con DIO0_P (collegato al pin \u00a0G17), e il pin 2 con 4 ovvero l&#8217;altro 3v3 con DIO0_N (collegato al pin G18)\u00a0vedremo accendersi il LED 0 collegato al pin F16 dello Zynq.\u00a0 Funziona!.<\/p>\n<p>Scarica il progetto testato -&gt;\u00a0 <a href=\"https:\/\/www.dropbox.com\/pri\/get\/FPGA_project_tested\/porte_logiche.zip?_subject_uid=654685051&amp;w=AABwG7tZV6f26QeunpFW247d9Jizls7bvuJmDU_CABGzHw\">porte_logiche<\/a><\/p>\n<p>Torniamo a questioni teoriche e di programmazione:<\/p>\n<p>Il Vivado suggerisce, con\u00a0sezioni di commento, \u00a0i punti in cui inserire le customizzazioni del codice VHDL.<\/p>\n<div>\u00a0\u00a0&#8212; Users to add parameters here<\/div>\n<div>\u00a0\u00a0&#8212; User parameters ends<br \/>\n&#8212; Do not modify the parameters beyond this line<\/div>\n<div>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<\/div>\n<div>\n<div>\u00a0port (<br \/>\n&#8212; Users to add ports here<\/div>\n<div>\u00a0\u00a0&#8212; User ports ends<br \/>\n&#8212; Do not modify the ports beyond this line<\/div>\n<div>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<\/div>\n<\/div>\n<div>\n<div>&#8212; Add user logic here<\/div>\n<div>&#8212; User logic ends<\/div>\n<div>end arch_imp;<\/div>\n<div>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<\/div>\n<\/div>\n<div><\/div>\n<div>Istanzieremo in queste sezioni le porte di ingresso e la porta di uscita dell&#8217;operatore logico AND che vogliamo realizzare nel nostro nuovo IP.<\/div>\n<div>port (<br \/>\n&#8212; Users to add ports here<br \/>\ngt_porta1_in : in\u00a0 std_logic;<br \/>\ngt_porta2_in : in\u00a0 std_logic;<br \/>\ngt_porta_out : out std_logic;<br \/>\n&#8212; User ports ends<\/div>\n<div><\/div>\n<div>&#8230;&#8230; qui sono dichiarate le altre porte ad esempio l&#8217;AXI fino ad incontrare il comando \u00a0&#8220;);<br \/>\nend Micro_GT_AND_logicIP_v1_0;&#8221;\u00a0 nota: con ); si chiude l&#8217;area di\u00a0dichiarazione delle porte. Questo\u00a0\u00e8 gi\u00e0 presente nel codice VHDL prima dell&#8217;inserimento delle nostre nuove porte tra i commenti che fanno da guida per lo user.<\/div>\n<div>Nell&#8217;ultima sezione di commento andiamo a specificare la funzione logica tra le porte usando la sintassi VHDL, in questo\u00a0caso un semplice AND tra i segnali.<\/div>\n<div><\/div>\n<div>\u00a0&#8212; Add user logic here<br \/>\ngt_porta_out &lt;= gt_porta1_in AND gt_porta2_in;<br \/>\n&#8212; User logic ends<\/div>\n<div><\/div>\n<div>Non serve modificare l&#8217;area \u00a0&#8212; Users to add parameters here perch\u00e9 non sono stati definiti novi parametri nella definizione dell&#8217;IP.<\/div>\n<div><\/div>\n<div><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-full wp-image-514\" src=\"http:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/merge.png\" alt=\"merge\" width=\"592\" height=\"293\" srcset=\"https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/merge.png 592w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/merge-300x148.png 300w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/merge-500x247.png 500w\" sizes=\"(max-width: 592px) 100vw, 592px\" \/><\/div>\n<div>Cliccando su &#8220;Merge changes&#8221; compaiono le nuove porte<\/div>\n<div><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-full wp-image-516\" src=\"http:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/nuove-porte.png\" alt=\"nuove porte\" width=\"569\" height=\"170\" srcset=\"https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/nuove-porte.png 569w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/nuove-porte-300x90.png 300w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/nuove-porte-500x149.png 500w\" sizes=\"(max-width: 569px) 100vw, 569px\" \/><\/div>\n<div>eseguire merge change per ogni voce che mostra una modifica presente<\/div>\n<div><\/div>\n<div>\u00a0Agendo su customization gui vediamo l&#8217;IP con le nuove porte.<\/div>\n<div><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-full wp-image-518\" src=\"http:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/new-ip.png\" alt=\"new ip\" width=\"233\" height=\"141\" \/><\/div>\n<div>Review and package &#8211;repakage IP<\/div>\n<div>Si chiuder\u00e0 la nuova istanza e si torna all&#8217;istanza del top module<\/div>\n<div>Tasto destro inserisci new IP, e indichaimo il nome del nuovo modulo.<\/div>\n<div><\/div>\n<div><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-full wp-image-523\" src=\"http:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/review2.png\" alt=\"review2\" width=\"792\" height=\"502\" srcset=\"https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/review2.png 792w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/review2-300x190.png 300w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/review2-768x487.png 768w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/review2-473x300.png 473w\" sizes=\"(max-width: 792px) 100vw, 792px\" \/><\/div>\n<div><\/div>\n<div>procediamo facendo RUN Connection Automation<\/div>\n<div><\/div>\n<div><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-full wp-image-524\" src=\"http:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/review3.png\" alt=\"review3\" width=\"855\" height=\"516\" srcset=\"https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/review3.png 855w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/review3-300x181.png 300w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/review3-768x463.png 768w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/review3-497x300.png 497w\" sizes=\"(max-width: 855px) 100vw, 855px\" \/><\/div>\n<div><\/div>\n<div>Compare la nuova conformazione del design, a cui \u00e8 connesso il nuovo IP ma con le porte scollegate.<\/div>\n<div><\/div>\n<div><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-full wp-image-526\" src=\"http:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/design1.png\" alt=\"design1\" width=\"1017\" height=\"584\" srcset=\"https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/design1.png 1017w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/design1-300x172.png 300w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/design1-768x441.png 768w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/design1-500x287.png 500w\" sizes=\"(max-width: 1017px) 100vw, 1017px\" \/><\/div>\n<div><\/div>\n<div>ora colleghiamo le porte dell&#8217;IP alle porte fisiche dello ZYNQ facendo make external sui pin.<\/div>\n<div>TOOL &#8220;validate design&#8221; per vedere se il design \u00e8 accettato dal vivado.<\/div>\n<div>Ora definiamo i contraints.<\/div>\n<div><\/div>\n<div><strong>\u00e8 tempo di creare il wrapper<\/strong><\/div>\n<div>Clicchiamo su &#8220;Diagram&#8221; -&gt; Sources allo scopo di creare il wrapper.<\/div>\n<div><\/div>\n<div><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-full wp-image-528\" src=\"http:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/create-wrapper.png\" alt=\"create wrapper\" width=\"482\" height=\"253\" srcset=\"https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/create-wrapper.png 482w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/create-wrapper-300x157.png 300w\" sizes=\"(max-width: 482px) 100vw, 482px\" \/><\/div>\n<div><\/div>\n<div>let vivado autoupdate<\/div>\n<div><\/div>\n<div><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-full wp-image-529\" src=\"http:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/create-wrapper1.png\" alt=\"create wrapper1\" width=\"536\" height=\"161\" srcset=\"https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/create-wrapper1.png 536w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/create-wrapper1-300x90.png 300w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/create-wrapper1-500x150.png 500w\" sizes=\"(max-width: 536px) 100vw, 536px\" \/><\/div>\n<div><\/div>\n<div>Portiamoci su &#8220;Open elaborated&#8221; design. nel men\u00f9 &#8220;RTL analysis&#8221;. del flow navigator.<\/div>\n<div>Se nella barra degli strumenti, all&#8217;incirca a met\u00e0, compare &#8220;I\/O Planning&#8221;, verr\u00e0 visualizzato quanto sotto.<\/div>\n<div>Se nel tentativo di passare all&#8217;analisi RTL, viene esposto un errore\u00a0di tipo &#8220;missing Top Module&#8221;, cliccare con il tasto destro del mouse il primo file di tipo vhd che compare nella sezione &#8220;Source&#8221; &#8211;&gt; &#8220;Hierarchy&#8221; ,\u00a0il quale\u00a0supponendo correttamente eseguiti i passaggi fino qui descritti, indicher\u00e0 la dicitura &#8220;wrapper-STRUCTURE&#8221;. Nello scroll menu che cos\u00ec compare, selezionare &#8220;Herarchy Uptade&#8221; &#8211;&gt; &#8220;Automatic Update And Compile Order&#8221;, si aprir\u00e0 una finestra in cui andr\u00e0 selezionato la modalit\u00e0 automatic top module.<\/div>\n<div>In questo modo si ha accesso all&#8217;area RTL Analysis.<\/div>\n<div><\/div>\n<div><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-full wp-image-536\" src=\"http:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/Device-RTL0.png\" alt=\"Device RTL0\" width=\"903\" height=\"72\" srcset=\"https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/Device-RTL0.png 903w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/Device-RTL0-300x24.png 300w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/Device-RTL0-768x61.png 768w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/Device-RTL0-500x40.png 500w\" sizes=\"(max-width: 903px) 100vw, 903px\" \/><\/div>\n<div><\/div>\n<div><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-full wp-image-531\" src=\"http:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/Device-RTL1.png\" alt=\"Device RTL1\" width=\"595\" height=\"590\" srcset=\"https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/Device-RTL1.png 595w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/Device-RTL1-150x150.png 150w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/Device-RTL1-300x297.png 300w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/Device-RTL1-303x300.png 303w\" sizes=\"(max-width: 595px) 100vw, 595px\" \/><\/div>\n<div><\/div>\n<div>Ci viene mostrato il chip selezionato all&#8217;atto della creazione del progetto, in pianta, suddiviso in banchi e con i vincoli &#8220;contraints&#8221; dei pin non re locabili quali ad esempio le masse e le alimentazioni.<\/div>\n<div>Sulla barra in basso selezioniamo &#8220;I\/O Ports&#8221;.<\/div>\n<div>Nel men\u00f9 &#8220;<strong>Scalar Ports<\/strong>&#8221; possiamo assegnare i pin logici ai pin fisici dello ZYNQ portando i segnali a disposizione nella scheda elettronica.<\/div>\n<div><\/div>\n<div><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-full wp-image-540\" src=\"http:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/Device-RTL4.png\" alt=\"Device RTL4\" width=\"1074\" height=\"240\" srcset=\"https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/Device-RTL4.png 1074w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/Device-RTL4-300x67.png 300w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/Device-RTL4-768x172.png 768w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/Device-RTL4-1024x229.png 1024w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/Device-RTL4-500x112.png 500w\" sizes=\"(max-width: 1074px) 100vw, 1074px\" \/><\/div>\n<div><\/div>\n<div>Ora ci si deve adattare ai vincoli della scheda di destinazione, supponendo si tratti una RedPitaya ci si deve procurare il pinout dell&#8217;extension connector E1, in cui sono portati i pin dello ZYNQ.<\/div>\n<div><img decoding=\"async\" loading=\"lazy\" class=\"size-full wp-image-585 aligncenter\" src=\"http:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/Extension-connector.png\" alt=\"Extension connector\" width=\"517\" height=\"411\" srcset=\"https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/Extension-connector.png 517w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/Extension-connector-300x238.png 300w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/Extension-connector-377x300.png 377w\" sizes=\"(max-width: 517px) 100vw, 517px\" \/><\/div>\n<div>Attenzione!!! Le tensioni tollerate sono a <strong>3V3<\/strong> e una valore di cinque Volt potrebbe danneggiare il sistema.<\/div>\n<div>Potremmo ora definire gli ingressi in due maniere:<\/div>\n<ol>\n<li>16 punti single ended.<\/li>\n<li>8 punti differential digital I\/O.<\/li>\n<\/ol>\n<p>Facciamo attenzione perch\u00e9 il databook specifica chiaramente &#8220;all DIOx_y pins are LVCMOS33 asb max rating are: min -0,40V max 3v3 +0.55V. Nella colonna FPGA pin number \u00e8 specificata la locazione di collegamento del pin come visibile nella sezione RTL di Vivado. E&#8217; proprio in &#8220;RTL Analysis&#8221; che viene generato il file .XDC che contiene i constrants. Se carichiamo nel nostro progetto il file <a href=\"http:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/red_pitaya_2015.4.zip\">red_pitaya_2015.4<\/a> di fatto assegniamo i pin del connettore E1 (quello di sinistra) come da tabella sottostante.<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-full wp-image-1160\" src=\"http:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/Extension-connector-E1.png\" alt=\"Extension connector E1\" width=\"514\" height=\"723\" srcset=\"https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/Extension-connector-E1.png 514w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/Extension-connector-E1-213x300.png 213w\" sizes=\"(max-width: 514px) 100vw, 514px\" \/><\/p>\n<p>I led disponibili si trovano al pin out dello ZYNQ indicato con:<\/p>\n<ul>\n<li>LED 0 -&gt; F16<\/li>\n<li>LED 1 -&gt; F17<\/li>\n<li>LED 2 -&gt; G15<\/li>\n<li>LED 3 -&gt; H15<\/li>\n<li>LED 4 -&gt; K14<\/li>\n<li>LED 5 -&gt; G14<\/li>\n<li>LED 6 -&gt; J15<\/li>\n<li>LED 7 -&gt; J14<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<p><strong>Collegare i pin logici ai pin fisici dello ZYNQ.<\/strong><\/p>\n<p>La tabella fornita nel sito della RedPitaya indica con una lettera e un numero i pin del connettore di estensione E1, ad esempio DIO_P -&gt; G17 e DIO_N -&gt; G18. entrambi a 3V3.<\/p>\n<p>Alcune uscite sono vincolate in single ended (ovvero il riferimento del segnale \u00e8 la massa della scheda)\u00a0e portate a LED, ad esempio, il LED 0 della Pitaya si trova all&#8217;indirizzo fisico F16.<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-full wp-image-546\" src=\"http:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/Device-RTL5.png\" alt=\"Device RTL5\" width=\"645\" height=\"614\" srcset=\"https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/Device-RTL5.png 645w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/Device-RTL5-300x286.png 300w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/Device-RTL5-315x300.png 315w\" sizes=\"(max-width: 645px) 100vw, 645px\" \/><\/p>\n<p>Assegniamo i tre pin come detto prima. Si ottiene:<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-full wp-image-548\" src=\"http:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/Device-RTL7.png\" alt=\"Device RTL7\" width=\"1085\" height=\"237\" srcset=\"https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/Device-RTL7.png 1085w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/Device-RTL7-300x66.png 300w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/Device-RTL7-768x168.png 768w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/Device-RTL7-1024x224.png 1024w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/Device-RTL7-500x109.png 500w\" sizes=\"(max-width: 1085px) 100vw, 1085px\" \/><\/p>\n<p>Nota bene: \u00e8 importante definire nei\u00a0segnali di input se la loro azione sar\u00e0 diretta (normal 0 -&gt; present 1) oppure invertita (normali 1 -&gt; present 0). Nel primo caso metteremo alla voce &#8220;PULL Type&#8221; un PULLDOWN, mentre nell&#8217;uscita andr\u00e0 totalmente rimosso &#8220;NONE&#8221; per ovvie questioni elettriche.\u00a0 Dato che non stiamo realizzando linee di trasmissione non metteremo dei carichi di terminazione di linea su &#8220;FP_VTT_50&#8221;. Ingrandisci l&#8217;immagine sovrastante per vedere bene le impostazioni.<\/p>\n<p>E poi salviamo la configurazione in un file che rappresenta i nostri nuovi vincoli ovvero i <strong>constraints<\/strong>.<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-full wp-image-547\" src=\"http:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/Device-RTL6.png\" alt=\"Device RTL6\" width=\"590\" height=\"307\" srcset=\"https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/Device-RTL6.png 590w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/Device-RTL6-300x156.png 300w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/Device-RTL6-500x260.png 500w\" sizes=\"(max-width: 590px) 100vw, 590px\" \/><\/p>\n<p>Come vediamo sopra il file dei constraints avr\u00e0 estensione XDC.<\/p>\n<p>E&#8217;\u00a0scaricabile dal sito della redpitaya il suo specifico file di constraints.<\/p>\n<p>Se ci riportiamo nel block design vedremo l&#8217;esistenza del nuovo file dei constraints.<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-full wp-image-550\" src=\"http:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/Device-RTL8.png\" alt=\"Device RTL8\" width=\"393\" height=\"247\" srcset=\"https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/Device-RTL8.png 393w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/Device-RTL8-300x189.png 300w\" sizes=\"(max-width: 393px) 100vw, 393px\" \/><\/p>\n<p>Siamo pronti per effettuare sia la simulazione che la generazione del file bitstream da caricare nello ZYNQ. Vediamo prima altre visualizzazione della configurazione interna nel men\u00f9 RTL.<\/p>\n<p>In &#8220;flow navigator&#8221; andiamo ad agire su &#8220;Generate Bitstream&#8221;.<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-full wp-image-553\" src=\"http:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/bitstream.png\" alt=\"bitstream\" width=\"201\" height=\"96\" \/><\/p>\n<p>Il sistema chiede di chiudere\u00a0le operazione sul design con un salvataggio prima di procedere alla creazione della synthesis e del Bitstream.<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-full wp-image-554\" src=\"http:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/bitstream1.png\" alt=\"bitstream1\" width=\"410\" height=\"182\" srcset=\"https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/bitstream1.png 410w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/bitstream1-300x133.png 300w\" sizes=\"(max-width: 410px) 100vw, 410px\" \/><\/p>\n<p>In alto a destra compare in posizione poco visibile la segnalazione che il processo di creazione \u00e8 in corso:<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-full wp-image-555\" src=\"http:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/bitstream2.png\" alt=\"bitstream2\" width=\"296\" height=\"68\" \/><\/p>\n<p>Se la creazione del file \u00e8 andata a buon fine Vivado risponde con:<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-full wp-image-556\" src=\"http:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/bitstream3.png\" alt=\"bitstream3\" width=\"243\" height=\"73\" \/><\/p>\n<p>e compare la finestra:<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-full wp-image-558\" src=\"http:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/bitstream-ok.png\" alt=\"bitstream ok\" width=\"325\" height=\"283\" srcset=\"https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/bitstream-ok.png 325w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/bitstream-ok-300x261.png 300w\" sizes=\"(max-width: 325px) 100vw, 325px\" \/><\/p>\n<p>Alla fine siamo pronti per inserire il file &#8220;.bit&#8221; prodotto nello ZYNQ. Dovremmo quindi loggarci alla scheda usando unWinScP e con \u00a0Putty lanciare l&#8217;esecuzione eventualmente parametrizzando con il tool Linux AXI write.<\/p>\n<p>&nbsp;<\/p>\n<p><strong>Altre visualizzazione di RTL<\/strong><\/p>\n<div>RTL = Register Transfer Level. Se\u00a0selezioniamo &#8220;Default Layout&#8221; vedremo una sorta di schema elettrico, in realt\u00e0 \u00e8 il medesimo device visualizzato con il livello di dettaglio pi\u00f9 esterno.<\/div>\n<div><\/div>\n<div><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-full wp-image-537\" src=\"http:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/Device-RTL2.png\" alt=\"Device RTL2\" width=\"993\" height=\"586\" srcset=\"https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/Device-RTL2.png 993w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/Device-RTL2-300x177.png 300w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/Device-RTL2-768x453.png 768w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/Device-RTL2-500x295.png 500w\" sizes=\"(max-width: 993px) 100vw, 993px\" \/><\/div>\n<div><\/div>\n<div>Nella modalit\u00e0 di visualizzazione &#8220;Floor Planing&#8221; vediamo la disposizione del silicio impegnata dal nostro design.<\/div>\n<div><\/div>\n<div><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-full wp-image-538\" src=\"http:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/Device-RTL3.png\" alt=\"Device RTL3\" width=\"554\" height=\"586\" srcset=\"https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/Device-RTL3.png 554w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/Device-RTL3-284x300.png 284w\" sizes=\"(max-width: 554px) 100vw, 554px\" \/><\/div>\n<div><\/div>\n<div><strong>Occupazione delle risorse.<\/strong><\/div>\n<div>All&#8217;interno dello ZYNQ potrebbe essere di interesse vedere quante risorse ha impegnato il programma che abbiamo realizzato nell&#8217;area FPGA. E&#8217; disponibile una finestra informativa che mostra i seguenti componenti:<\/div>\n<ol>\n<li><strong>LUT<\/strong> =look up table, o elemento base composto di celle elementari. ha una composizione piuttosto standard e contiene una rete combinatoria.<\/li>\n<li><strong>LUTRAM<\/strong> = elementi di memoria di interconnessione tra le LUT utilizzate.<\/li>\n<li><strong>FF<\/strong> = Flip Flop.<\/li>\n<li><strong>IO<\/strong> = punti di collegamento con il mondo esterno.<\/li>\n<li><strong>BUFG<\/strong> = Buffer di collegamento con gli IO oppure i bus.<\/li>\n<\/ol>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-full wp-image-563\" src=\"http:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/post-implementation.png\" alt=\"post implementation\" width=\"513\" height=\"257\" srcset=\"https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/post-implementation.png 513w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/post-implementation-300x150.png 300w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/post-implementation-500x250.png 500w\" sizes=\"(max-width: 513px) 100vw, 513px\" \/><\/p>\n<p><strong>Simulazione.<\/strong><\/p>\n<p>La simulazione \u00e8 possibile tramite i tools integrati in Vivado che permettono un&#8217;analisi piuttosto realistica anche per i segnali a alta velocit\u00e0 sia nella sezione FPGA che nella regione di interconnessione ARM-&gt;FPGA via bus AXI. Gli IP possono (a volte devono) essere testati singolarmente. In questo caso vanno impostati come <strong>TOP module<\/strong> del sotto progetto.<\/p>\n<p>Per simulare l&#8217;IP che genera l&#8217;AND logico, costruito sopra, entriamo in\u00a0block design e editiamo in IP pakager il blocchetto interessato.<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-full wp-image-565\" src=\"http:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/simul-1.png\" alt=\"simul 1\" width=\"1003\" height=\"498\" srcset=\"https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/simul-1.png 1003w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/simul-1-300x149.png 300w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/simul-1-768x381.png 768w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/simul-1-500x248.png 500w\" sizes=\"(max-width: 1003px) 100vw, 1003px\" \/><\/p>\n<p>In basso a destra, <strong>Edit in IP packager<\/strong> del blocco Micro_GT_AND_logicIP_0<\/p>\n<p><strong>Attenzione:<\/strong> A questo punto delle volte viene segnalato un errore, probabilmente perch\u00e9 ci sono nel Vivado delle impostazioni che delegano solo il sistema a fare l&#8217;update della gerarchia e quindi di fatto la copia temporanea dell&#8217;IP che vogliamo simulare risulta protetta in scrittura. Se la simulazione non dovesse partire lanciamo una nuova istanza con un nuovo nome, ad esempio Micro_GT_AND_logicIP_0_sim1<\/p>\n<p>Nella cartella temporanea vedremo comparire una copia della parte di progetto che mandiamo in simulazione ovvero dello specifico IP. Essendo una copia potremmo anche cancellarla alla fine della simulazione.<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-full wp-image-567\" src=\"http:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/edit-IP-pakeger-1.png\" alt=\"edit IP pakeger 1\" width=\"600\" height=\"219\" srcset=\"https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/edit-IP-pakeger-1.png 600w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/edit-IP-pakeger-1-300x110.png 300w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/edit-IP-pakeger-1-500x183.png 500w\" sizes=\"(max-width: 600px) 100vw, 600px\" \/><\/p>\n<p>impostiamo come TOP module il blocco che vogliamo simulare, attenzione che i sorgenti disponibili potrebbero essere pi\u00f9 di uno, in genere sono almeno 2 perch\u00e9 il primo implementa l&#8217;interfacciamento AXI con il livello superiore di IP, ad esempio lo ZYMQ mentre il secondo implementa la logica con cui abbiamo customizzato l&#8217;IP che realizza la nostra funzione logica.<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-full wp-image-568\" src=\"http:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/edit-IP-pakeger-2.png\" alt=\"edit IP pakeger 2\" width=\"803\" height=\"241\" srcset=\"https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/edit-IP-pakeger-2.png 803w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/edit-IP-pakeger-2-300x90.png 300w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/edit-IP-pakeger-2-768x230.png 768w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/edit-IP-pakeger-2-500x150.png 500w\" sizes=\"(max-width: 803px) 100vw, 803px\" \/><\/p>\n<p>nell&#8217;immagine sotto mostriamo anche la cartella temporanea in cui siano presenti le due istanze della stessa simulazione aperta in IP pakager\u00a0impostando un nome diverso ovvero sim1.<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-full wp-image-572\" src=\"http:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/temp-sim.png\" alt=\"temp sim\" width=\"649\" height=\"243\" srcset=\"https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/temp-sim.png 649w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/temp-sim-300x112.png 300w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/temp-sim-500x187.png 500w\" sizes=\"(max-width: 649px) 100vw, 649px\" \/>\u00a0Nel flow navigator, nella sezione Simulation, agiamo su Run Simulation.<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-full wp-image-573\" src=\"http:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/sim2.png\" alt=\"sim2\" width=\"198\" height=\"77\" \/><\/p>\n<p><strong>Run behavioral simulation<\/strong> per creare l&#8217;ambiente di simulazione.<\/p>\n<p>L&#8217;ambiente mostra tutte le porte e i segnali impostabili o internamente generati all&#8217;IP. La parte pi\u00f9 complessa \u00e8 quella relativa alla gestione dell&#8217;AXI, ma tre i vari pin compariranno anche quelli con cui abbiamo customizzato il nostro IP.<\/p>\n<p>Ingrandire l&#8217;immagine usando il tasto destro del mouse o salvandola locale.<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-full wp-image-575\" src=\"http:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/sim3.png\" alt=\"sim3\" width=\"1017\" height=\"632\" srcset=\"https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/sim3.png 1017w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/sim3-300x186.png 300w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/sim3-768x477.png 768w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/sim3-483x300.png 483w\" sizes=\"(max-width: 1017px) 100vw, 1017px\" \/><\/p>\n<p>Nella lista delle porte, le prime due sono gli input della nostra logica AND implementata nella sezione FPGA. La terza porta \u00e8 l&#8217;uscita che abbiamo configurato come il primo LED della scheda RedPitaya.<\/p>\n<p>Le frecce azzurre hanno il seguente significato.<\/p>\n<ol>\n<li>doppia freccia a sinistra -&gt; Riavvolgi la simulazione che attiviamo per un certo tempo.<\/li>\n<li>Lancia la simulazione<\/li>\n<li>imposta il tempo di simulazione ovvero una finestra temporale in cui visualizare e registrare gli eventi.<\/li>\n<li>Le lenti di ingrandimento porteranno i segnali nel corretto fattore di scala dato che nell&#8217;area FPGA posso arrivare a commutazione dell&#8217;ordine del nano secondo.<\/li>\n<\/ol>\n<p>Impostiamo i segnali virtualizzati in input, ad esempio forziamo dei clock. Tasto destro sulla pima variabile e andiamo alla voce &#8220;force clock&#8221;.<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-full wp-image-577\" src=\"http:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/sim4.png\" alt=\"sim4\" width=\"462\" height=\"269\" srcset=\"https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/sim4.png 462w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/sim4-300x175.png 300w\" sizes=\"(max-width: 462px) 100vw, 462px\" \/><\/p>\n<p>Impostiamo questi valori (esemplificativi) per l primo input della porta AND. Questo significa che all&#8217;ingresso abbiamo posto uno stimolo da onda quadra (duty cycle del 50%) con un periodo di 100ns.<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-full wp-image-578\" src=\"http:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/sim5.png\" alt=\"sim5\" width=\"424\" height=\"364\" srcset=\"https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/sim5.png 424w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/sim5-300x258.png 300w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/sim5-349x300.png 349w\" sizes=\"(max-width: 424px) 100vw, 424px\" \/><\/p>\n<p>Impostiamo il secondo segnale in quadratura (sfasato di 90 gradi) e con un periodo doppio.\u00a0 Lo scopo e quello di poter valutare la logica AND nel pin di uscita.<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-full wp-image-580\" src=\"http:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/sim6.png\" alt=\"sim6\" width=\"425\" height=\"364\" srcset=\"https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/sim6.png 425w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/sim6-300x257.png 300w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/sim6-350x300.png 350w\" sizes=\"(max-width: 425px) 100vw, 425px\" \/><\/p>\n<p>Lanciare la simulazione agendo sulla freccia azzurra. Potremmo impostare per quanto tempo \u00e8 attivo e dovremmo agire sulle icone lenti di ingrandimento per dare il giusto zoom.\u00a0 L&#8217;effetto finale \u00e8 nell&#8217;immagine sottostante.<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-full wp-image-582\" src=\"http:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/sim7.png\" alt=\"sim7\" width=\"737\" height=\"259\" srcset=\"https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/sim7.png 737w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/sim7-300x105.png 300w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/sim7-500x176.png 500w\" sizes=\"(max-width: 737px) 100vw, 737px\" \/><\/p>\n<p>Il primo diagramma temporale oscilla con periodo 100ns ed \u00e8 il primo ingresso della porta AND. Il secondo ha periodo doppio. La sola intersezione dei due segnali di ingresso soddisfa la funzione booleana AND e fa oscillare il terzo diagramma temporale che rappresenta l&#8217;uscita.<\/p>\n<p><strong>Sintassi VHDL.<\/strong><\/p>\n<p>Un codice VHDL, pensato per prodotti Xilinx, \u00e8 una struttura gerarchica che descrive un design da implementare tramite il processo di syntesis nella superficie del silicio del circuito integrato.<\/p>\n<p>Il nodo principale sar\u00e0 detto top level o wrapper, nel caso di sistemi SoC ZYNQ7000 sar\u00e0 la struttura dei core ARM a cui interfacciare via bus AXI la sezione FPGA.<\/p>\n<p>Le librerie principali sono le seguenti e compaiono all&#8217;inizio di ogni programma VHDL:<\/p>\n<hr \/>\n<p>library IEEE;<br \/>\nuse IEEE.std_logic_1164.all;<br \/>\nuse IEEE.numeric_std.all;<\/p>\n<hr \/>\n<p>La progettazione comporta tre parti di implementazione software:<\/p>\n<ol>\n<li>Dichiarazione<\/li>\n<li>Istanza<\/li>\n<li>Mappatura<\/li>\n<\/ol>\n<p>Le entit\u00e0 che verranno create hanno due sezioni che devo coesistere ed essere cooerenti.<\/p>\n<ol>\n<li><strong>Behavioural <\/strong>in cui si definisce l\u2019architettura<strong> architecture.<\/strong><\/li>\n<li><strong>Structural <\/strong>in cui si descrivono le porte<strong> port <\/strong>e segnali <strong>signal <\/strong>impiegati nell\u2019architettura.<\/li>\n<\/ol>\n<p>I commenti in linguaggio VHDL seguono il doppio meno ad esempio:<\/p>\n<p>&#8212; Questa riga \u00e8 un commento.<\/p>\n<p>I segnali, definiti in VHDL, sono delle variabili che possono essere combinati tra loro tramite gli operatori logici nella lista. Possono essere dichiarati come standard logic.<\/p>\n<ul>\n<li>AND<\/li>\n<li>OR<\/li>\n<li>NOR<\/li>\n<li>NAND<\/li>\n<li>XOR<\/li>\n<li>XNOR<\/li>\n<li>NOT<\/li>\n<\/ul>\n<p>Definiamo i segnali con i nomi identificativi segnale1 e segnale2, ecco alcuni esempi di applicazione delle funzioni logiche.<\/p>\n<p>NOT segnale1<\/p>\n<p>Segnale1 AND segnale2<\/p>\n<p>(NOT segnal21) AND (segnale2 XOR (segnale3 OR (NOT segnale4)) XOR segnale5);<\/p>\n<p>Il costrutto if si applica a espressioni booleane, la valutazione dell\u2019espressione non richiede le parentesi tonde<\/p>\n<p>if segnale1 then<br \/>\nuscita &lt;= &#8216;1&#8217;;\u00a0 &#8212; associa il valore true al segnale booleano in uscita<br \/>\nend if;<\/p>\n<p>ecco un esempio di come associare un vettore di booleani con la valutazione di una singola condizione, oppure attivare un if multiplo:<\/p>\n<hr \/>\n<p>if condizione1 = &#8216;1&#8217; then<br \/>\nout_vector &lt;= &#8220;001&#8221;<br \/>\nelsif condizion2 = &#8216;1&#8217; then<br \/>\nout_vector &lt;= &#8220;110&#8221;<br \/>\n&#8212; altre condizioni<br \/>\nelse<br \/>\nout_vector &lt;= &#8220;000&#8221;<br \/>\nend if;<\/p>\n<hr \/>\n<p>Esiste il costrutto case e opera in maniere simile a quanto avviene in C. Si pu\u00f2 applicare ad esempio ad un flusso di dati di una trasmissione attraverso un buffer o analogamente nel buffer di una tastiera.<\/p>\n<hr \/>\n<p>case scancode is<br \/>\nwhen buffer&#8221;14&#8243; =&gt;\u00a0\u00a0\u00a0 &#8211;buffer \u00e8 il nome della variabile non una parola chiave<br \/>\ninteger_signal &lt;= 1;<br \/>\nwhen buffer&#8221;18&#8243; =&gt;<br \/>\ninteger_signal &lt;= 2;<br \/>\nwhen buffer&#8221;19&#8243; | buffer&#8221;20&#8243; | buffer&#8221;21&#8243; =&gt;<br \/>\ninteger_signal &lt;= 3;<br \/>\nwhen others =&gt;<br \/>\ninteger_signal &lt;= 0;<br \/>\nend case;<\/p>\n<hr \/>\n<table>\n<tbody>\n<tr>\n<td width=\"652\">L\u2019assegnazione delle variabili avviene tramite il costrutto <strong><strong>:=<\/strong><\/strong> mentre l\u2019assegnazione \u00a0dei segnali avviene tramite il costrutto <strong><strong>&lt;=<\/strong><\/strong><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Esempio di assegnazione del valore a una variabile booleana chiamata flag. Il valore da assegnare a una variabile potr\u00e0 anche arrivare da un segnale.<\/p>\n<p>flag := true;<br \/>\nvariabile_temporanea(3 downto 0) := segnale_vettore(7 downto 4);<\/p>\n<p><strong><strong>I processi.<\/strong><\/strong><\/p>\n<p>I processi sono generalmente la struttura portante di un comportamento di un\u2019entit\u00e0. L\u2019attivazione avviene tramite il collegamento a segnali di clock ai quali vengono sincronizzati. L\u2019attivazione avviene quando un segnale subisce una variazione oppure dipende dalla variazione di un altro segnale a cui \u00e8 correlato. Le dipendenze sono citate nella lista di sensibilit\u00e0 dei processi.<\/p>\n<hr \/>\n<p>output_process: process(segnale_stato)<br \/>\nbegin<\/p>\n<p>if segnale_stato = &#8216;1&#8217; then<br \/>\noutput_vector &lt;= &#8220;010&#8221;;<br \/>\nelse<br \/>\noutput_vector &lt;= &#8220;101&#8221;;<br \/>\nend if;<br \/>\nend process;<\/p>\n<hr \/>\n<p>Istanza delle componenti, sono delle evocazioni con il relativo lancio in esecuzione delle entit\u00e0 ed\u00a0avviene in questo modo:<\/p>\n<p>AND_ent_1: AND_entity\u00a0 &#8211;con significato di attivazione di una copia dell&#8217;entit\u00e0 AND.<br \/>\nport map(<br \/>\ninput_1 =&gt; input_1_sig,<br \/>\ninput_2 =&gt; input_2_sig,<br \/>\noutput =&gt; output_sig<br \/>\n);<\/p>\n<p><strong>I tipi di dato.<\/strong><\/p>\n<p>Il tipo di dato pi\u00f9 comune in VHDL \u00e8 lo <strong>std_logic<\/strong> che \u00e8 dfinito nella libreria std_logic_1164 della IEEE. Il suo impiego comporta la rappresentazione dei due stati booleani &#8216;1&#8217; o &#8216;0&#8217; con l&#8217;aggiunta dello stato di alta impedenza &#8216;z&#8217; comun nelle logiche digitali.<\/p>\n<p>I vettori sono rappresentati con la definizione di <strong>std_logic_vector<\/strong> che in VHDL definisce un bus. A tutti gli effetti \u00e8 un array di std_logic ovvero di bits accumunati da un unico punto di accesso.<\/p>\n<hr \/>\n<p>std_logic_signal &lt;= &#8216;1&#8217;;<br \/>\nstd_logic_signal &lt;= &#8216;0&#8217;;<\/p>\n<p>sl_vector_signal_8 &lt;= &#8220;11110000&#8221;; &#8212; an 8 bit vector<br \/>\nsl_vector_signal_8 &lt;= x&#8221;F0&#8243;; &#8212; equivalent to above<\/p>\n<p>sl_vector_signal_8 &lt;= sl_vector_signal_16(15 downto 8);<br \/>\n&#8212; you can assign from part of a larger vector<\/p>\n<p>std_logic_signal &lt;= sl_vector_signal_8(5) &#8212; access a single bit<\/p>\n<p>sl_vector_signal_8 &lt;= (others =&gt; &#8216;0&#8217;) &#8212; set all bits to &#8216;0&#8217;<\/p>\n<hr \/>\n<p>il booleano differisce dallo std_logic perch\u00e9 funge da variabile interna o costante interna come mostrato sotto:<\/p>\n<p>constant FLAG: boolean := false;<br \/>\nvariable flag_monitor: boolean := true;<\/p>\n<p><strong>Definizione di valori numerici.<\/strong><\/p>\n<p>La definizione dei valori numerici in VHDL pu\u00f2 avvenire in due diversi modi, la prima \u00e8 quella di definire un std_logic_vector in cui inputare una rappresentazione binaria o esadecimale, la seconda \u00e8 quella di allocare il dato nella memoria evitando cosi di rappresentarlo in linee e locazioni di silicio tramite un bus.<\/p>\n<p><strong>Entit\u00e0.<\/strong><\/p>\n<p>Le entit\u00e0 sono l&#8217;effettiva interfaccia tra il nuovo modulo di cui si sta implementando il design e quanto preesistente ad esempio il top module. si definiscono in questa maniera:<\/p>\n<hr \/>\n<p>entity is rete_combinatoria<\/p>\n<p>end entity<\/p>\n<hr \/>\n<p>Gli elementi dell&#8217;entity sono 2 due le porte e i generic, vediamo come si definiscono.<\/p>\n<p><strong>Definizione delle porte.<\/strong><\/p>\n<p>il costrutto <strong>port <\/strong>definisce i punti di ingresso e uscita del nuovo design. Sono l&#8217;effettiva interfaccia di collegamento e la dichiarazione e impostazione \u00e8 contemplata &#8220;nell&#8217;architettura&#8221; che esiste come costrutto &#8220;architetture&#8221;. Le porte possono essere raccolte in un\u00a0bus che funge da PORT. Ad esempio:<\/p>\n<hr \/>\n<p>enable: in std_logic;<br \/>\ndata_bus: out std_logic_vector(7 downto 0);<\/p>\n<hr \/>\n<p>il costrutto <strong>generic<\/strong> dichiara dei segnali in maniera simile a come avviene\u00a0nei linguaggi di programmazione procedurali. L&#8217;assegnazione del tipo avviene per assunzione dalla gerarchia in cui\u00a0compare il costrutto.<\/p>\n<hr \/>\n<p>bus_width: integer := 8;<br \/>\nmy_boolean: boolean := false;<\/p>\n<hr \/>\n<p>un esempio di dichiarazione di un&#8217;entit\u00e0 con le sue porte \u00e8 questa, si noti che l&#8217;ultimo elemento dichiarato non presenta il punto e virgola perch\u00e9 \u00e8 solo l&#8217;ultimo elemento di una lista di parametri e non un comando o richiamo di funzione:<\/p>\n<hr \/>\n<p>entity or_entity is<br \/>\nport(<br \/>\ninput_1: in std_logic;<br \/>\ninput_2: in std_logic;<br \/>\noutput: out std_logic<br \/>\n);<br \/>\nend or_entity;<\/p>\n<hr \/>\n<p>L&#8217;architettura\u00a0\u00e8 un contenitore di entit\u00e0 il cui esempio pi\u00f9 semplice pu\u00f2 essere:<\/p>\n<p>architecture AND_entity_arch of AND_entity is<br \/>\nbegin<br \/>\noutput &lt;= input_1\u00a0and input_2; &#8211;esegue l&#8217;AND dei segnali alle porte e\u00a0calcola l&#8217;uscita<br \/>\nend architecture;<\/p>\n<p><strong>I segnali<\/strong><\/p>\n<p>La dichiarazione dei segnali segue la sintassi:<\/p>\n<p>signal port_i : std_logic;<br \/>\nsignal bus_signal: std_logic_vector(15 downto 0);<br \/>\nsignal count: integer range 0 to 31;<\/p>\n<p><strong>Dichiarazione di costanti<\/strong>.<\/p>\n<p>&#8212; state values<br \/>\nconstant state_1 : std_logic_vector := &#8220;01&#8221;;<br \/>\nconstant state_2 : std_logic_vector := &#8220;10&#8221;;<br \/>\nconstant addr_max: integer := 1024; &#8212; maximum address value<\/p>\n<p><strong>Dichiarazione di funzioni.<\/strong><\/p>\n<hr \/>\n<p>function sign_extend (narrow_bus: std_logic_vector(15 downto 0))<br \/>\nreturn std_logic_vector(31 downto 0) is<br \/>\nvariable output: std_logic_vector(31 downto 0);<\/p>\n<p>begin<br \/>\noutput(15 downto 0) &lt;= narrow_bus(15 downto 0);&#8211; lower 16 are the same<br \/>\noutput(31 downto 16) &lt;= (others =&gt; narrow_bus(15));&#8211; upper 16 are sign-extension of MSB<br \/>\nreturn output;<br \/>\nend sign_extend;<\/p>\n<hr \/>\n<p><strong>Dichiarazione delle componenti delle entit\u00e0.<\/strong><\/p>\n<p>component or_entity is<br \/>\nport(<br \/>\ninput_1: in std_logic;<br \/>\ninput_2: in std_logic;<br \/>\noutput: out std_logic<br \/>\n);<br \/>\nend component;<\/p>\n<p><strong>Dichiarazione di variabili.<\/strong><\/p>\n<p>variable count_v: integer range 0 to 15;<br \/>\nvariable data_v: std_logic_vector(7 downto 0);<br \/>\nvariable condition_v: boolean;<\/p>\n<p><strong>Dichiarazione di tipi.<\/strong><\/p>\n<p>type enum_type is (a, b, c, &#8230;, z);<br \/>\ntype int_array is array(3 downto 0) of integer;<br \/>\ntype sl_vector_array is array(0 to 15) of std_logic_vector;<\/p>\n<p><strong>Dichiarazione di sottotipi.<\/strong><\/p>\n<p>subtype addr_int is integer range 0 to 65535;<br \/>\nsubtype sub_enum_type is enum_type range a to m;<\/p>\n<p><strong><strong>il behavioural (comportamento)<\/strong><\/strong><\/p>\n<p>Qui viene descritto il comportamento dell\u2019architettura del la logica la quale come impostazione di base definisce le porte su cui opera.<\/p>\n<hr \/>\n<p><strong>&#8211;behaviural<\/strong><br \/>\narchitecture Porta_AND\u00a0 of AND_1 is<br \/>\nbegin<br \/>\noutput &lt;= input_1 or input_2;<br \/>\nend Porta_AND;<br \/>\n<strong>&#8211;structural<\/strong><br \/>\narchitecture Porta_AND\u00a0 of AND_1 is<br \/>\ncomponent or_entity<br \/>\nport(<br \/>\noutput: out std_logic;<br \/>\ninput_1: in std_logic;<br \/>\ninput_2: in std_logic<br \/>\n); end component;<\/p>\n<p>begin<br \/>\nor_1: or_entity<br \/>\nport map(<br \/>\noutput =&gt; o,<br \/>\ninput_1 =&gt; i_1,<br \/>\ninput_2 =&gt; i_2<br \/>\n);<br \/>\nend Porta_AND ;<\/p>\n<hr \/>\n<p><em><br \/>\n<\/em><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Corso G-Tronic di programmazione FPGA con SoC.\u00a0 Da gennaio 2017 \u00e8 stato attivato presso la G-Tronic Robotics Didactic Division il corso di programmazione dei sistemi basati su FPGA e ARM multicore SoC (system on chip). Esempio di creazione di un &hellip; <a href=\"https:\/\/www.gtronic.it\/test\/index.php\/fpga-soc\/\">Continua a leggere<span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":[],"_links":{"self":[{"href":"https:\/\/www.gtronic.it\/test\/index.php\/wp-json\/wp\/v2\/pages\/391"}],"collection":[{"href":"https:\/\/www.gtronic.it\/test\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.gtronic.it\/test\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.gtronic.it\/test\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.gtronic.it\/test\/index.php\/wp-json\/wp\/v2\/comments?post=391"}],"version-history":[{"count":116,"href":"https:\/\/www.gtronic.it\/test\/index.php\/wp-json\/wp\/v2\/pages\/391\/revisions"}],"predecessor-version":[{"id":2747,"href":"https:\/\/www.gtronic.it\/test\/index.php\/wp-json\/wp\/v2\/pages\/391\/revisions\/2747"}],"wp:attachment":[{"href":"https:\/\/www.gtronic.it\/test\/index.php\/wp-json\/wp\/v2\/media?parent=391"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}