{"id":702,"date":"2017-02-13T15:29:17","date_gmt":"2017-02-13T14:29:17","guid":{"rendered":"http:\/\/www.gtronic.it\/test\/?page_id=702"},"modified":"2017-05-24T19:03:33","modified_gmt":"2017-05-24T17:03:33","slug":"bus-axi","status":"publish","type":"page","link":"https:\/\/www.gtronic.it\/test\/index.php\/bus-axi\/","title":{"rendered":"Bus AXI"},"content":{"rendered":"<p><strong>AXI: Nozioni di base.<\/strong><\/p>\n<p>Le parti interne del SoC ZYNQ7000 sono tra loro interconnesse tramite il bus AXI. Questo \u00e8 l&#8217;evoluzione del predecessore AMBA.\u00a0 La funzionalit\u00e0 di base \u00e8 quella di interconnettere in maniera bidirezionale la\u00a0sezione PS (processor unit oppure programmable system) con la PL (programmable Logic) appoggiandosi a dei registri configurabili in indirizzo e in lunghezza.<\/p>\n<p>Abbiamo predisposto un applicativo, da compilare in ambiente Linux, utilizzabile come template per ogni possibile futura applicazione, in linguaggio C, compilabile direttamente nel sistema operativo della Redpitaya.\u00a0 -&gt; <a href=\"http:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/01\/axi_write.zip\">axi_write<\/a>\u00a0\u00a0\u00a0\u00a0 Per compilare copiamo il file sorgente nel file sytem del sistema SoC, ad esempio usando WinSCP oppure PuTTy.<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-full wp-image-706\" src=\"http:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/02\/compilazione.png\" alt=\"compilazione\" width=\"634\" height=\"312\" srcset=\"https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/02\/compilazione.png 634w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/02\/compilazione-300x148.png 300w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/02\/compilazione-500x246.png 500w\" sizes=\"(max-width: 634px) 100vw, 634px\" \/><\/p>\n<p>Il compilatore gcc \u00e8 in linea quindi baster\u00e0 fornire, come nell&#8217;immagine, il comando di compilazione\u00a0 gcc -o (con &#8220;-o&#8221; si intende &#8220;generando un file in output&#8221;) segue il nome del file compilato seguito dal nome del file sorgente completo di estensione.<\/p>\n<p>Per mandare in esecuzione il file compilato baster\u00e0 digitare .\/My_Axi_write<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-full wp-image-707\" src=\"http:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/02\/lancio.png\" alt=\"lancio\" width=\"635\" height=\"120\" srcset=\"https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/02\/lancio.png 635w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/02\/lancio-300x57.png 300w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/02\/lancio-500x94.png 500w\" sizes=\"(max-width: 635px) 100vw, 635px\" \/><\/p>\n<p>Attenzione: quando creiamo una nuova cartella all&#8217;interno del file system della Pitaya potrebbe verificarsi che i programmi compilati, ad esempio AXI_write, copiati in questa cartella non siano lanciabili. Questo \u00e8 dovuto alla mancanza dei necessari permessi di esecuzione, cosa piuttosto normale in ambiente Linux. La soluzione \u00e8 semplice, all&#8217;errore indicato sotto:<\/p>\n<p>-bash: .\/axi_write: Permission denied<\/p>\n<p>rispondiamo come segue:\u00a0 in primo luogo lanciamo il comando &#8220;ls -la&#8221; per vedere la situazione dei permessi attuali.\u00a0 Poi rendiamoci proprietari del file, e quindi in grado di lanciarlo tramite il comando:<\/p>\n<p>chmod u+x axi_write<\/p>\n<p>Successivamente, digitando ls,\u00a0dovremmo vedere che il file axi_write \u00e8 mostrato in verde, quindi \u00e8 diventato eseguibile.<\/p>\n<p>&nbsp;<\/p>\n<p>Nell&#8217;esempio \u00e8 stato lanciato senza parametrizzazione, al solo scopo di vedere se il sistema operativo del sistema SoC lo esegue. In effetti viene ritornata la richiesta di lancio fornendo parametri, ovvero una stringa\u00a0condizionata interna al sorgente C, e precisamente contenuta nel corpo del dell&#8217; IF che testa il numero minimo di registri passati:<\/p>\n<p>if(argc&lt;3) {<br \/>\nprintf(&#8220;usage: %s address size [d1 d2 &#8230; ]\\n&#8221;,argv[0]);<br \/>\nreturn 1;<br \/>\n}<\/p>\n<p>La scrittura dei parametri avviene da un indirizzo base, detto access point o memory mapped, che sar\u00e0 definito all&#8217;atto della creazione del wrapper, per un numero di parametri definiti all&#8217;atto della creazione del device AXI o AXI lite, ad esempio 4.<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-full wp-image-710\" src=\"http:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/02\/architettura.png\" alt=\"architettura\" width=\"710\" height=\"424\" srcset=\"https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/02\/architettura.png 710w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/02\/architettura-300x179.png 300w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/02\/architettura-500x300.png 500w\" sizes=\"(max-width: 710px) 100vw, 710px\" \/><\/p>\n<p>Come notiamo dallo schema a blocchi che rappresenta l&#8217;architettura interna dello Xilinx Zynq7000, esistono due sezioni AXI, una indicata con Master e una con Slave.<\/p>\n<p>Le sezioni MGP0 e MGP1 sono le porte master dei core ARM verso la sezione FPGA, salvo diversa indicazione definite a 32 bit, mentre le HPx (high performance n) interconnettono, potenzialmente a 64 bit, la sezione FPGA ai core o via bypass DMA alla DDR3.<\/p>\n<p>Consideriamo un design complesso contenente un elevato numero di IP block, questi debbano scambiare tra loro dati ad alta velocit\u00e0. Ognuno di questi IP hanno un sorgente VHDL oppure Verilog, che ne descrive l&#8217;architettura e in behaviural interno, ma dovranno per forza di cose essere equipaggiati con un secondo sorgente che ne descrive le regole di comunicazione tramite il bus AXI, in definitiva vedremo sempre almeno due file sorgenti.<\/p>\n<p>Ogni AXI link (connessione)\u00a0contiene necessariamente due parti, un AXI master e un AXI slave.<\/p>\n<ul>\n<li>La sezione AXI Master \u00e8 quella che inizializza le transizioni, sia queste in lettura o in scrittura.<\/li>\n<li>La sezione AXI slave \u00e8 quella che risponde alle transizioni su richiesta del master.<\/li>\n<\/ul>\n<p>Il flusso dei dati \u00e8 bidirezionale nel bus a seconda che il master abbia inizializzato un transizione di scrittura o di lettura.<\/p>\n<p><strong>Tipi di AXI interface.<\/strong><\/p>\n<p>Esistono due tipi di interfacce AXI.<\/p>\n<ol>\n<li>interfaccia AXI memory mapped.<\/li>\n<li>interfaccia AXI streaming.<\/li>\n<\/ol>\n<p>La seconda \u00e8 una versione ridotta della prima.<\/p>\n<p>Consideriamo per prima la AXI memory mapped. Abbiamo disponibili due set di\u00a0segnali una per la lettura e una per la scrittura. Infatti sono coinvolti diverse situazioni e sequenze.<\/p>\n<p>In generale durante una sessione di lettura e scrittura sono coinvolti i seguenti cinque segnali che occupano il canale di trasmissione:<\/p>\n<p>Read transaction (ciclo di lettura).<\/p>\n<ol>\n<li>Read data<\/li>\n<li>Read Address<\/li>\n<\/ol>\n<p>Write transaction (ciclo scrittura)<\/p>\n<ol>\n<li>Write Address<\/li>\n<li>Write Data<\/li>\n<li>Write Response<\/li>\n<\/ol>\n<p>Nel caso di interfaccia di tipo AXI streaming dovremmo definire la dimensione dei dati da spedire il burst lenght e altre variabili non necessarie nel memory mapped.<\/p>\n<p>\u00e8 possibile connettere una AXI memory mapped a una AXI streaming con opportuni accorgimenti di design.<\/p>\n<p><strong>L&#8217;unit\u00e0 DMA.<\/strong><\/p>\n<p>Nello schema a blocchi che mostra l&#8217;architettura interna dello ZYNQ notiamo la sezione DMA controller, detta anche DMA engine, direttamente sotto la gestione della sezione ARM solo per quanto riguarda lo stato e lo stop dell&#8217;allocazione.\u00a0 L&#8217;unit\u00e0 DMA pu\u00f2 creare un canale di comunicazione diretta tra la logica programmata in FPGA e le DDR3.\u00a0Una volta avviato lo streaming di dati, ad esempio provenienti da convertitori veloci (hardware) collegati a specifici GPIO della PL, la sezione ARM si dedica a altro e la sua attenzione verr\u00e0 richiesta solo quando necessario tramite segnali gestiti dall&#8217;IP GIC (generic interrupt controller). In questo caso gli specifici GPIO saranno parte della sezione indicata con AXI master collegata all&#8217;interfaccia ACP (accelerator currency port), a 64 bit, facente parte del protocollo AXI.\u00a0L&#8217;informazione necessaria sar\u00e0 il burst lenght e la velocit\u00e0 di transizione.<\/p>\n<p><strong>Definizione di un IP di lettura e scrittura da AXI.<\/strong><\/p>\n<p>Si consideri l&#8217;IP direct register_out_0 descritto in un paragrafo precedente. questi ha inizialmente il seguente aspetto.<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-full wp-image-721 aligncenter\" src=\"http:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/02\/direct_register_out0.png\" alt=\"direct_register_out0\" width=\"364\" height=\"182\" srcset=\"https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/02\/direct_register_out0.png 364w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/02\/direct_register_out0-300x150.png 300w\" sizes=\"(max-width: 364px) 100vw, 364px\" \/><\/p>\n<p style=\"text-align: left;\">Vogliamo aggiungere delle porte in input, costituite sempre da registri a 8 bit. Identifichiamo nel codice VHDL il punto in cui dichiarare i due nuovi registri.<\/p>\n<p style=\"text-align: left;\"><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-full wp-image-722\" src=\"http:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/02\/dichiarazione_reg_in.png\" alt=\"dichiarazione_reg_in\" width=\"625\" height=\"463\" srcset=\"https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/02\/dichiarazione_reg_in.png 625w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/02\/dichiarazione_reg_in-300x222.png 300w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/02\/dichiarazione_reg_in-405x300.png 405w\" sizes=\"(max-width: 625px) 100vw, 625px\" \/><\/p>\n<p style=\"text-align: left;\">Vengono dichiarate le nuove porte con il nome <strong>reg_in0<\/strong> e <strong>reg_in1 <\/strong>come vettori standard logic.\u00a0 Notiamo che il codice VHDL in Vivado riserva la posizione corretta per la dichiarazione nell&#8217;area commentata .&#8211; Users to add ports here<\/p>\n<p style=\"text-align: left;\">Nelle righe successive sono definiti i registri del protocollo AXI, e vanno lasciati inalterati. Notiamo, scorrendo in basso,\u00a0la dichiarazione dei 4 registri per il protocollo AXI\u00a0lite il cui codice \u00e8 stato automaticamente generato quando per via grafica abbiamo\u00a0creato il nuovo IP come periferica AXI\u00a0lite e abbiamo definito numero di registri 4.<\/p>\n<p style=\"text-align: left;\"><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-full wp-image-723\" src=\"http:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/02\/registri-AXI-lite-4.png\" alt=\"registri AXI lite 4\" width=\"539\" height=\"202\" srcset=\"https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/02\/registri-AXI-lite-4.png 539w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/02\/registri-AXI-lite-4-300x112.png 300w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/02\/registri-AXI-lite-4-500x187.png 500w\" sizes=\"(max-width: 539px) 100vw, 539px\" \/><\/p>\n<p style=\"text-align: left;\">Ora si aggiungono i due registri in lettura, nella sezione di descrizione dell&#8217;architettura e quindi dei segnali coinvolti ricordando che l&#8217;assegnazione di stati a segnali avviene con il costrutto &lt;=<\/p>\n<p style=\"text-align: left;\"><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-full wp-image-724\" src=\"http:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/02\/assegna_registri-AXI-lite-in-lettura.png\" alt=\"assegna_registri AXI lite in lettura\" width=\"292\" height=\"98\" \/><\/p>\n<p style=\"text-align: left;\">Al salvataggio, nell&#8217;area del design sources non dovranno essere segnalati errori, nell&#8217;immagine sottostante non vi \u00e8 nulla di evidenziato in rosso da Vivado.<\/p>\n<p style=\"text-align: left;\"><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-full wp-image-726\" src=\"http:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/02\/corretto.png\" alt=\"corretto\" width=\"712\" height=\"182\" srcset=\"https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/02\/corretto.png 712w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/02\/corretto-300x77.png 300w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/02\/corretto-500x128.png 500w\" sizes=\"(max-width: 712px) 100vw, 712px\" \/><\/p>\n<p>in questo momento l&#8217;IP non \u00e8 pi\u00f9 coerente con il design di partenza e quindi va aggiornata tutta la struttura.\u00a0 La cosa \u00e8 segnalata nella finestra del block design.<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-full wp-image-729\" src=\"http:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/02\/refresh.png\" alt=\"refresh\" width=\"401\" height=\"143\" srcset=\"https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/02\/refresh.png 401w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/02\/refresh-300x107.png 300w\" sizes=\"(max-width: 401px) 100vw, 401px\" \/><\/p>\n<p>Agendo su &#8220;refresh IP Catalog&#8221; compare, nella parte bassa la finestra dell&#8217;IP status.<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-full wp-image-731\" src=\"http:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/02\/refresh-raccomandation.png\" alt=\"refresh raccomandation\" width=\"725\" height=\"179\" srcset=\"https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/02\/refresh-raccomandation.png 725w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/02\/refresh-raccomandation-300x74.png 300w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/02\/refresh-raccomandation-500x123.png 500w\" sizes=\"(max-width: 725px) 100vw, 725px\" \/><\/p>\n<p>Nella colonna &#8220;Recommendation&#8221; \u00e8 segnalata la necessit\u00e0 di eseguire l&#8217;Upgrade dell&#8217;IP. Quindi agiamo, ottenendo questa reazione da Vivado.<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-full wp-image-732\" src=\"http:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/02\/refresh-raccomandation-1.png\" alt=\"refresh raccomandation 1\" width=\"998\" height=\"192\" srcset=\"https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/02\/refresh-raccomandation-1.png 998w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/02\/refresh-raccomandation-1-300x58.png 300w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/02\/refresh-raccomandation-1-768x148.png 768w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/02\/refresh-raccomandation-1-500x96.png 500w\" sizes=\"(max-width: 998px) 100vw, 998px\" \/><\/p>\n<p>Agendo su &#8220;Rerun&#8221; si ottiene:<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-full wp-image-733\" src=\"http:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/02\/refresh-raccomandation-2.png\" alt=\"refresh raccomandation 2\" width=\"502\" height=\"44\" srcset=\"https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/02\/refresh-raccomandation-2.png 502w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/02\/refresh-raccomandation-2-300x26.png 300w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/02\/refresh-raccomandation-2-500x44.png 500w\" sizes=\"(max-width: 502px) 100vw, 502px\" \/><\/p>\n<p>Fino a questo momento non vedremo comparire le nuove porte nell&#8217;IP perch\u00e9 non collegabili al livello superiore della gerarchia dei blocchi.<\/p>\n<p><strong>Aggiunta delle porte al TOP level.<\/strong><\/p>\n<p>Portiamoci nel codice VHDL del TOP level del modulo IP che stiamo modificando, e ripetiamo la definizione delle porte.<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-full wp-image-744\" src=\"http:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/02\/top_level.png\" alt=\"top_level\" width=\"458\" height=\"169\" srcset=\"https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/02\/top_level.png 458w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/02\/top_level-300x111.png 300w\" sizes=\"(max-width: 458px) 100vw, 458px\" \/><\/p>\n<p>Vi sono tre posizioni in cui intervenire sul codice.<\/p>\n<ol>\n<li>definire nell&#8217;entity\u00a0del top level i nuovi port .<\/li>\n<li>definire nell&#8217;architecture del top level i components.<\/li>\n<li>definire nel port map del top level in modo che il wrapper possa agganciarsi.<\/li>\n<\/ol>\n<p><strong>Definizione delle nuove porte nella sezione entity del top module<\/strong><\/p>\n<p>Si deve procedere per passi dichiarando le porte e il loro comportamento\u00a0nei vari livelli del design. Innanzitutto portiamoci nel sorgente\u00a0che descrive l&#8217;architettura del nuovo IP. A questo livello si giunge\u00a0dal block design completo e facendo tasto destro-&gt; edit and pakage\u00a0IP sul blocco interessato.<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-full wp-image-768\" src=\"http:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/02\/Top_module_source.png\" alt=\"Top_module_source\" width=\"455\" height=\"90\" srcset=\"https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/02\/Top_module_source.png 455w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/02\/Top_module_source-300x59.png 300w\" sizes=\"(max-width: 455px) 100vw, 455px\" \/><\/p>\n<p>Si entra nei sorgenti facendo doppio click nel punto evidenziato, e aggiungiamo le due porte in input come vettori logici standard a 8 bit, come evidenziato sotto. In questo momento stiamo aggiungendo alla grafica dell&#8217;IP i punti di collegamento (nuovi pin) con il resto del block design. La loro definizione\u00a0porta gi\u00e0 l&#8217;informazione\u00a0su cosa saranno collegabili, per drag and drop, tramite fili o bus, al resto dell&#8217;architettura.<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-full wp-image-767\" src=\"http:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/02\/new_IP_top_module_PORT_definition.png\" alt=\"new_IP_top_module_PORT_definition\" width=\"425\" height=\"372\" srcset=\"https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/02\/new_IP_top_module_PORT_definition.png 425w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/02\/new_IP_top_module_PORT_definition-300x263.png 300w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/02\/new_IP_top_module_PORT_definition-343x300.png 343w\" sizes=\"(max-width: 425px) 100vw, 425px\" \/><\/p>\n<p><strong>Defininizione nell&#8217;architecture del top level dei components.<\/strong><\/p>\n<p>Nello stesso sorgente, scorriamo pi\u00f9 in basso fino ad identificare la sezione architecture. Definiamo la forma interna all&#8217;IP dei registri hardware.<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-full wp-image-746\" src=\"http:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/02\/top_2.png\" alt=\"top_2\" width=\"406\" height=\"234\" srcset=\"https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/02\/top_2.png 406w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/02\/top_2-300x173.png 300w\" sizes=\"(max-width: 406px) 100vw, 406px\" \/><\/p>\n<p><strong>Definizione\u00a0nel port map del top level in modo che il wrapper possa agganciarsi.<\/strong><\/p>\n<p>In questa terza sezione dello stesso sorgente VHDL definiamo la direzione del bus che sar\u00e0 agganciabile ai nuovi pin da parte del resto del block design. La sintassi \u00e8 intuitiva infatti =&gt; per un segnale da portare fuori dall&#8217;IP e &lt;= per un segnale da portare dentro all&#8217;IP via interfaccia AXI.<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-full wp-image-747\" src=\"http:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/02\/top_3.png\" alt=\"top_3\" width=\"285\" height=\"152\" \/><\/p>\n<p>Aggiorniamo l&#8217;IP nel catalogo.<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-full wp-image-753\" src=\"http:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/02\/top_4.png\" alt=\"top_4\" width=\"625\" height=\"286\" srcset=\"https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/02\/top_4.png 625w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/02\/top_4-300x137.png 300w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/02\/top_4-500x229.png 500w\" sizes=\"(max-width: 625px) 100vw, 625px\" \/><\/p>\n<p>Se le nuove porte compaiono nell&#8217;anteprima la strada intrapresa \u00e8 quella corretta. Clicchiamo su &#8220;<strong>Merge change from customization GUI Wizard<\/strong>&#8220;.<\/p>\n<p>Compaiono le nuove porte:<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-full wp-image-754\" src=\"http:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/02\/top_5.png\" alt=\"top_5\" width=\"857\" height=\"288\" srcset=\"https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/02\/top_5.png 857w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/02\/top_5-300x101.png 300w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/02\/top_5-768x258.png 768w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/02\/top_5-500x168.png 500w\" sizes=\"(max-width: 857px) 100vw, 857px\" \/><\/p>\n<p>Agiamo nella sequenza indicata sotto.<\/p>\n<ol>\n<li>Rewiev and pakage<\/li>\n<li>poi repapakage IP\u00a0 (pulsante in basso)<\/li>\n<li>upgrade selected<\/li>\n<\/ol>\n<p>Ecco l&#8217;aspetto finale del nuovo IP AXI con i due registri in input e i due in\u00a0output.<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-full wp-image-772\" src=\"http:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/02\/Top_module_IP.png\" alt=\"Top_module_IP\" width=\"400\" height=\"207\" srcset=\"https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/02\/Top_module_IP.png 400w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/02\/Top_module_IP-300x155.png 300w\" sizes=\"(max-width: 400px) 100vw, 400px\" \/><\/p>\n<p>Colleghiamo il nuovo IP al resto del design ed eseguiamo nel secondo registro il un &#8220;Utility vector logic&#8221; IP in modo da poter eseguire nei contenuti dei registri, passati da consol PC via AXI (utilizzando l&#8217;applicazione AXI write), almeno una operazione booleana bitwise, ad esempio la negazione bit a bit.<\/p>\n<p>Nel block design, facciamo tasto destro &#8220;add new ip&#8221; e sulla barra di filtro scriviamo &#8220;utility&#8221;&#8230; verr\u00e0 segnalata la presenza in libreria\u00a0anche del nostro Utility vector. Confermiamo con un doppio click.<\/p>\n<p><strong>Dichiarazione nel wrapper delle nuove porte definite nel nuovo IP.<\/strong><\/p>\n<p>Ora si deve procedere rendendo compatibile il <strong>wrapper<\/strong> con le nuove porte esistenti nel IP modificato. Questo avviene agendo in tre punti del codice VHDL.<\/p>\n<ol>\n<li>citare le nuove porte nella sezione entity.<\/li>\n<li>citare le nuove porte nella sezione architecture.<\/li>\n<li>citare le nuove porte nella sezione System_i.<\/li>\n<\/ol>\n<p>Ecco delle immagini chiarificatrici.<\/p>\n<p><strong>Aggiunta alle sezione entity:<\/strong><\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-full wp-image-734\" src=\"http:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/02\/wrapper1.png\" alt=\"wrapper1\" width=\"430\" height=\"561\" srcset=\"https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/02\/wrapper1.png 430w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/02\/wrapper1-230x300.png 230w\" sizes=\"(max-width: 430px) 100vw, 430px\" \/><\/p>\n<p><strong>Aggiunta alla sezione architecture.<\/strong><\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-full wp-image-735\" src=\"http:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/02\/wrapper2.png\" alt=\"wrapper2\" width=\"431\" height=\"506\" srcset=\"https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/02\/wrapper2.png 431w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/02\/wrapper2-256x300.png 256w\" sizes=\"(max-width: 431px) 100vw, 431px\" \/><\/p>\n<p>Aggiunta dei collegamenti delle nuove porte agli IP\u00a0che nella\u00a0gererachia\u00a0risultano in posizione inferiore, ovvero l&#8217;IP che abbiamo modificato e vogliamo collegare a questo wrapper.<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-full wp-image-736\" src=\"http:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/02\/wrapper3.png\" alt=\"wrapper3\" width=\"453\" height=\"507\" srcset=\"https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/02\/wrapper3.png 453w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/02\/wrapper3-268x300.png 268w\" sizes=\"(max-width: 453px) 100vw, 453px\" \/><\/p>\n<p>in alto a destra verr\u00e0 segnalato che la sintesi e l&#8217;implementazione sono &#8220;<strong>Out of date<\/strong>&#8221;<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-full wp-image-738\" src=\"http:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/02\/wrapper4.png\" alt=\"wrapper4\" width=\"323\" height=\"56\" srcset=\"https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/02\/wrapper4.png 323w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/02\/wrapper4-300x52.png 300w\" sizes=\"(max-width: 323px) 100vw, 323px\" \/><\/p>\n<p>Procediamo scrivendo le modifiche nel disco cliccando su &#8220;<strong>change on disk<\/strong>&#8220;.<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-full wp-image-741\" src=\"http:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/02\/wrapper5.png\" alt=\"wrapper5\" width=\"752\" height=\"159\" srcset=\"https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/02\/wrapper5.png 752w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/02\/wrapper5-300x63.png 300w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/02\/wrapper5-500x106.png 500w\" sizes=\"(max-width: 752px) 100vw, 752px\" \/><\/p>\n<p>Nell&#8217;istanza dell&#8217;editor del nuovo IP agire su Tools -&gt; create and package IP.<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-full wp-image-742\" src=\"http:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/02\/wrapper6.png\" alt=\"wrapper6\" width=\"381\" height=\"302\" srcset=\"https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/02\/wrapper6.png 381w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/02\/wrapper6-300x238.png 300w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/02\/wrapper6-378x300.png 378w\" sizes=\"(max-width: 381px) 100vw, 381px\" \/><\/p>\n<p>Procediamo con &#8220;Run Automation&#8221; in modo che almeno il bus AXI venga connesso agli altri IP dal sistema, evitando errori.<\/p>\n<p>Poi colleghiamo gli ingressi e uscite del nostro nuovo IP, per trascinamento, come in figura.<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-full wp-image-774\" src=\"http:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/02\/new_design.png\" alt=\"new_design\" width=\"876\" height=\"424\" srcset=\"https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/02\/new_design.png 876w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/02\/new_design-300x145.png 300w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/02\/new_design-768x372.png 768w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/02\/new_design-500x242.png 500w\" sizes=\"(max-width: 876px) 100vw, 876px\" \/><\/p>\n<p><strong>Generazione del Bitstream.<\/strong><\/p>\n<p>Probabilmente in alto a destra sar\u00e0 presente la dicitura:<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-full wp-image-738\" src=\"http:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/02\/wrapper4.png\" alt=\"wrapper4\" width=\"323\" height=\"56\" srcset=\"https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/02\/wrapper4.png 323w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/02\/wrapper4-300x52.png 300w\" sizes=\"(max-width: 323px) 100vw, 323px\" \/><\/p>\n<p>Quindi il Bitstream eventualmente presente non \u00e8 relativo all&#8217;ultima versione del design sviluppato, ad esempio dopo avere aggiunto delle porte al custom IP.\u00a0\u00a0 Creiamo nuovamente il bitstream, dalla posizione relativa al system Wrapper quindi del design completo.<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-full wp-image-777\" src=\"http:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/02\/bitstream.png\" alt=\"bitstream\" width=\"211\" height=\"295\" \/><\/p>\n<p>Agendo su Generate bit stream compare un ultimo warning.<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-full wp-image-779\" src=\"http:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/02\/bitstream-out-of-date.png\" alt=\"bitstream out of date\" width=\"492\" height=\"172\" srcset=\"https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/02\/bitstream-out-of-date.png 492w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/02\/bitstream-out-of-date-300x105.png 300w\" sizes=\"(max-width: 492px) 100vw, 492px\" \/><\/p>\n<p>Confermiamo per vedere attivarsi la procedura di creazione segnalata da una barra progresso.<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-full wp-image-780\" src=\"http:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/02\/generating-bitstream-out-of-date.png\" alt=\"generating bitstream out of date\" width=\"620\" height=\"110\" srcset=\"https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/02\/generating-bitstream-out-of-date.png 620w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/02\/generating-bitstream-out-of-date-300x53.png 300w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/02\/generating-bitstream-out-of-date-500x89.png 500w\" sizes=\"(max-width: 620px) 100vw, 620px\" \/>In alto a destro comparir\u00e0 la segnalazione di &#8220;Running&#8221;<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-full wp-image-781\" src=\"http:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/02\/running.png\" alt=\"running\" width=\"288\" height=\"51\" \/><\/p>\n<p>Questo processo potr\u00e0 prendere qualche minuto<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-full wp-image-783\" src=\"http:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/02\/generating-1.png\" alt=\"generating 1\" width=\"325\" height=\"283\" srcset=\"https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/02\/generating-1.png 325w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/02\/generating-1-300x261.png 300w\" sizes=\"(max-width: 325px) 100vw, 325px\" \/><\/p>\n<p>Cliccchiamo su OK, e ci verr\u00e0 proposta una visone dell&#8217;implementazione.<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-full wp-image-784\" src=\"http:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/02\/generating-2.png\" alt=\"generating 2\" width=\"570\" height=\"581\" srcset=\"https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/02\/generating-2.png 570w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/02\/generating-2-294x300.png 294w\" sizes=\"(max-width: 570px) 100vw, 570px\" \/><\/p>\n<p>In alto a destra e indicato che il bitstream \u00e8 aggiornato.<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-full wp-image-786\" src=\"http:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/02\/generating-complete.png\" alt=\"generating complete\" width=\"217\" height=\"50\" \/><\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>AXI: Nozioni di base. Le parti interne del SoC ZYNQ7000 sono tra loro interconnesse tramite il bus AXI. Questo \u00e8 l&#8217;evoluzione del predecessore AMBA.\u00a0 La funzionalit\u00e0 di base \u00e8 quella di interconnettere in maniera bidirezionale la\u00a0sezione PS (processor unit oppure &hellip; <a href=\"https:\/\/www.gtronic.it\/test\/index.php\/bus-axi\/\">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\/702"}],"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=702"}],"version-history":[{"count":42,"href":"https:\/\/www.gtronic.it\/test\/index.php\/wp-json\/wp\/v2\/pages\/702\/revisions"}],"predecessor-version":[{"id":1231,"href":"https:\/\/www.gtronic.it\/test\/index.php\/wp-json\/wp\/v2\/pages\/702\/revisions\/1231"}],"wp:attachment":[{"href":"https:\/\/www.gtronic.it\/test\/index.php\/wp-json\/wp\/v2\/media?parent=702"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}