{"id":812,"date":"2017-02-20T14:01:35","date_gmt":"2017-02-20T13:01:35","guid":{"rendered":"http:\/\/www.gtronic.it\/test\/?page_id=812"},"modified":"2020-03-05T00:24:39","modified_gmt":"2020-03-04T23:24:39","slug":"serializzare-un-segnale-a-alta-velocita","status":"publish","type":"page","link":"https:\/\/www.gtronic.it\/test\/index.php\/serializzare-un-segnale-a-alta-velocita\/","title":{"rendered":"Serializzare un segnale a alta velocit\u00e0"},"content":{"rendered":"<p>In questa sezione vogliamo affrontare il problema della lettura dei segnali provenienti da circuiti integrati di conversione e condizionamento ad esempio degli ADC ad alta velocit\u00e0 e nella direzione opposta, ovvero generati dallo ZYNQ e da inviare a periferiche esterne connesse al pinout della sezione FPGA.<\/p>\n<p><a href=\"http:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/02\/RFX_Transient_recorder_4channels.png\">Scarica schema frontend analogico differenziale e isolato dal campo ADC 18bit 2MSPS<\/a><\/p>\n<p><a href=\"http:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/02\/THS4520.pdf\">Scarica il databook del chip THS4520 differential rail to rail low distortion AMP. OP.<\/a><\/p>\n<p><a href=\"http:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/02\/RFX_transient_recorder.zip\">Scarica progetto Eagle sch e pcb (attenzione connettore JAE non connesso)<\/a><\/p>\n<p><strong>Direzione Zynq -&gt; FPGA -&gt; periferiche. <\/strong>I segnali che\u00a0costituiscono un dato, presenti in un registro caricato presumibilmente via AXI, siano da inviare ad un pin del\u00a0GPIO dell&#8217;FPGA (modalit\u00e0 common mode) oppure a una coppia di pin del GPIO dell&#8217;FPGA (modalit\u00e0 LVDS ovvero differenziale).<\/p>\n<p>In questo caso ci serve uno shift register ovvero un dispositivo che possa essere caricato in parallelo e scaricato in seriale, spingendo a seconda delle impostazioni il contenuto verso destra o verso sinistra. Ogni shift avverr\u00e0 sincronizzato sul fronte di un segnale di clock in modo da poter rilevare\u00a0correttamente la presenza del dato sul booleano in output.<\/p>\n<p>Se consideriamo dal punto di vista hardware lo sift register come un insieme di Flip Flop avremo le seguenti funzion\/pin da descrivere in VHDL.<\/p>\n<ul>\n<li>clock<\/li>\n<li>serial input<\/li>\n<li>asynchronus set\/rest<\/li>\n<li>synchronus set\/reset<\/li>\n<li>synchronus o asynchronus caricamento parallelo<\/li>\n<li>clock enable<\/li>\n<li>uscita seriale o parallela.<\/li>\n<\/ul>\n<p>L&#8217;uscita dello shift register potr\u00e0 essere settata in una dei seguenti modi:<\/p>\n<ol>\n<li><strong>seriale<\/strong>: solo il contenuto dell&#8217;ultimo flip flop viene collegato al resto del circuito restituendo un booleano.<\/li>\n<li><strong>parallela<\/strong>: Il contenuto dei un numeor maggiore di 1 dei flip flop sono accessibili, di solito quelli dell&#8217;estensione necessaria ad esempio 18bit dei 32 disponibili nella word perch\u00e9 questa \u00e8 la misura della conversione di un ADC ad esso collegato.<\/li>\n<li><strong>shift modes<\/strong>: verso destra o verso sinistra.<\/li>\n<\/ol>\n<p>Esistono molte maniere per descrivere in VHDL uno shift register ma quella pi\u00f9 intuitiva \u00e8 tramite l&#8217;uso di un ciclo for.<\/p>\n<pre class=\"PreformattedRelative\">entity shift_reg is\r\n  Port( data_in : in STD_LOGIC_VECTOR (31 downto 0);\r\n\tclk\t: in STD_LOGIC;\r\n\tserial_out : out STD_LOGIC);\r\nend shift_reg;\r\narchitetctural Behavioral of shift_reg is\r\n\t \r\n\r\nfor i in 0 to 6 loop  \r\nshreg(i+1) &lt;= shreg(i); \r\nend loop; \r\nshreg(0) &lt;= SI;\r\n\r\n<\/pre>\n<p>Scarica, dal link sottostante,\u00a0un design di test della velocit\u00e0 e affidabilit\u00e0 della serializzazione e de serializzazione. I segnali e i registri dell&#8217;IP sono cortocircuitati ovvero l&#8217;uscita viene riportata in ingresso sincronizzando la velocit\u00e0 con l&#8217;IP prescaler prodotto negli esempi precedenti.\u00a0 La velocit\u00e0 del prescaler \u00e8 impostata da terminale Linux su un registro AXI.\u00a0 viene restituito il dato deserializzato.\u00a0 Si spinga in alto la frequenza fino a che il dato serializzate-&gt; deserializzato rimane leggibile.<\/p>\n<p>Download tet serializzatore de serialiazzatore -&gt;\u00a0<a href=\"http:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/02\/AD7641_18_bit_ADC.zip\">AD7641_18_bit_ADC<\/a><\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-full wp-image-848\" src=\"http:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/02\/IP_AD7641_18bit_ADC_test.png\" alt=\"IP_AD7641_18bit_ADC_test\" width=\"667\" height=\"578\" srcset=\"https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/02\/IP_AD7641_18bit_ADC_test.png 667w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/02\/IP_AD7641_18bit_ADC_test-300x260.png 300w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/02\/IP_AD7641_18bit_ADC_test-346x300.png 346w\" sizes=\"(max-width: 667px) 100vw, 667px\" \/><\/p>\n<p><strong>Serializzatore su evento.<\/strong><\/p>\n<p>Consideriamo l&#8217;IP mostrato sopra in cui l&#8217;avanzamento del bit nel registro serializzatore sia delegato non a un ciclo for bens\u00ec al fronte di uno stimolo dovuto al presentarsi di un segnale in un pin hardware.\u00a0\u00a0 Quest\u00e0 \u00e8 la soluzione pi\u00f9 ovvia da implementare in ambito FPGA.\u00a0 Nell&#8217;immagine la definizione delle porte nell&#8217;entity:<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-full wp-image-977\" src=\"http:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/02\/entity_shift_register.png\" alt=\"entity_shift_register\" width=\"696\" height=\"322\" srcset=\"https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/02\/entity_shift_register.png 696w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/02\/entity_shift_register-300x139.png 300w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/02\/entity_shift_register-500x231.png 500w\" sizes=\"(max-width: 696px) 100vw, 696px\" \/><\/p>\n<p>Le porte sono duplicate in input e output\u00a0perch\u00e9 si intende caricare un dato via AXI, serializzarlo, inviarlo allo stesso IP in una porta di ingresso, parallelizzarlo e\u00a0reinviarlo\u00a0via AXI al terminale. Lo scopo \u00e8 quello di\u00a0testare la massima velocit\u00e0 con cui il dato originariamente inviato\u00a0in AXI possa tornare senza perdita di informazione al terminale che lo ha caricato dopo il processo di serializzazione e de serializzazione.\u00a0 Nell&#8217;immagine il principio di funzionamento.<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-full wp-image-978\" src=\"http:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/02\/shift_register_principio-di-funzionamento.png\" alt=\"shift_register_principio di funzionamento\" width=\"899\" height=\"626\" srcset=\"https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/02\/shift_register_principio-di-funzionamento.png 899w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/02\/shift_register_principio-di-funzionamento-300x209.png 300w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/02\/shift_register_principio-di-funzionamento-768x535.png 768w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/02\/shift_register_principio-di-funzionamento-431x300.png 431w\" sizes=\"(max-width: 899px) 100vw, 899px\" \/><\/p>\n<p>la serializzazione su evento sar\u00e0 sensibile a rising_edge del segnale proveniente dal clock come mostrato sotto.<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-full wp-image-979\" src=\"http:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/02\/behavioral_shift_register.png\" alt=\"behavioral_shift_register\" width=\"504\" height=\"544\" srcset=\"https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/02\/behavioral_shift_register.png 504w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/02\/behavioral_shift_register-278x300.png 278w\" sizes=\"(max-width: 504px) 100vw, 504px\" \/><\/p>\n<p>Per quanto riguarda i sorgenti del top module, nell&#8217;architettura dovr\u00e0 comparire la stessa definizione delle porte usate nel sorgente del behaviural.<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-full wp-image-981\" src=\"http:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/02\/behavioral_shift_register_top_model1.png\" alt=\"behavioral_shift_register_top_model1\" width=\"1175\" height=\"649\" srcset=\"https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/02\/behavioral_shift_register_top_model1.png 1175w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/02\/behavioral_shift_register_top_model1-300x166.png 300w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/02\/behavioral_shift_register_top_model1-768x424.png 768w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/02\/behavioral_shift_register_top_model1-1024x566.png 1024w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/02\/behavioral_shift_register_top_model1-500x276.png 500w\" sizes=\"(max-width: 1175px) 100vw, 1175px\" \/><\/p>\n<p style=\"text-align: center;\">right click to enlarge.<\/p>\n<p style=\"text-align: left;\">Nell&#8217;area di definizione dei\u00a0&#8220;component&#8221; del top module, compaiono i registri di ingresso e uscita con cui il nostro\u00a0 IP comunica tramite AXI con il resto dell&#8217;architettura e con il mondo esterno alla scheda.<\/p>\n<p style=\"text-align: left;\"><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-full wp-image-985\" src=\"http:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/02\/behavioral_shift_register_top_component-AXI-registers.png\" alt=\"behavioral_shift_register_top_component AXI registers\" width=\"512\" height=\"210\" srcset=\"https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/02\/behavioral_shift_register_top_component-AXI-registers.png 512w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/02\/behavioral_shift_register_top_component-AXI-registers-300x123.png 300w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/02\/behavioral_shift_register_top_component-AXI-registers-500x205.png 500w\" sizes=\"(max-width: 512px) 100vw, 512px\" \/><\/p>\n<p style=\"text-align: left;\">e quindi l&#8217;stanza del component shift_reg:<\/p>\n<p style=\"text-align: left;\"><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-full wp-image-989\" src=\"http:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/02\/behavioral_shift_register_top_component-AXI-registers2.png\" alt=\"behavioral_shift_register_top_component AXI registers2\" width=\"682\" height=\"287\" srcset=\"https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/02\/behavioral_shift_register_top_component-AXI-registers2.png 682w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/02\/behavioral_shift_register_top_component-AXI-registers2-300x126.png 300w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/02\/behavioral_shift_register_top_component-AXI-registers2-500x210.png 500w\" sizes=\"(max-width: 682px) 100vw, 682px\" \/><\/p>\n<p style=\"text-align: left;\">nella sezione port map( &#8230;) aggiungeremo:<\/p>\n<p style=\"text-align: left;\">reg_in0 =&gt; reg_in0,<br \/>\nreg_in1 =&gt; reg_in1,<br \/>\nreg_out0 =&gt; reg_out0,<br \/>\nreg_out1 =&gt; reg_out1<\/p>\n<p style=\"text-align: left;\">Ora si aggiunge l&#8217;istanza che descrive i collegamenti dei segnali delle nuove porte.<\/p>\n<p style=\"text-align: left;\"><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-full wp-image-991\" src=\"http:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/02\/istanza_shift_register_top_component-AXI-registers.png\" alt=\"istanza_shift_register_top_component AXI registers\" width=\"452\" height=\"285\" srcset=\"https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/02\/istanza_shift_register_top_component-AXI-registers.png 452w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/02\/istanza_shift_register_top_component-AXI-registers-300x189.png 300w\" sizes=\"(max-width: 452px) 100vw, 452px\" \/><\/p>\n<p style=\"text-align: left;\"><a href=\"http:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/02\/shift_register.pdf\">download block design pdf<\/a><\/p>\n<p><strong>Come interfacciare il chip AD7641 allo ZYNQ 7000.<\/strong><\/p>\n<p>Scarica da questo link una breve descrizione su come implementare il protocollo di comunicazione tra la sezione FPGA dello ZYNQ e il connettore JAE del modulo portoghese con AD7641 e chip di interfaccia SN65LVDT.<\/p>\n<p><a href=\"http:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/02\/Come-interfacciare-il-moduloanalogico-Portoghese.docx\">Come interfacciare il moduloanalogico Portoghese<\/a><\/p>\n<p>Quando si procede al collegamento del vero chip ADC hardware risulta necessario scollegare il segnale di clock autogenerato\u00a0nel block design tramite l&#8217;IP del prescaler e mettersi in acquisizione di questo da una coppia di pin differenziali.<\/p>\n<p>Ecco una prima bozza del design -&gt; <a href=\"http:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/02\/AD7641fullView.pdf\">AD7641fullView<\/a><\/p>\n<p>I pin esterni saranno collegati secondo questa configurazione -&gt;<a href=\"http:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/02\/Make_expernal_Table.xlsx\">Make_expernal_Table<\/a><\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-full wp-image-2748\" src=\"http:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/02\/FPGA-to-high-speed-ADC-data-streaming-HCDL-programming.png\" alt=\"FPGA to high speed ADC data streaming HCDL programming\" width=\"964\" height=\"441\" srcset=\"https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/02\/FPGA-to-high-speed-ADC-data-streaming-HCDL-programming.png 964w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/02\/FPGA-to-high-speed-ADC-data-streaming-HCDL-programming-300x137.png 300w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/02\/FPGA-to-high-speed-ADC-data-streaming-HCDL-programming-768x351.png 768w, https:\/\/www.gtronic.it\/test\/wp-content\/uploads\/2017\/02\/FPGA-to-high-speed-ADC-data-streaming-HCDL-programming-500x229.png 500w\" sizes=\"(max-width: 964px) 100vw, 964px\" \/><\/p>\n<p>Visita la pagina per acquistare questo libro -&gt; <a href=\"https:\/\/www.amazon.it\/dp\/1720843694\">FPGA to high speed Adc data acquisition<\/a><\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In questa sezione vogliamo affrontare il problema della lettura dei segnali provenienti da circuiti integrati di conversione e condizionamento ad esempio degli ADC ad alta velocit\u00e0 e nella direzione opposta, ovvero generati dallo ZYNQ e da inviare a periferiche esterne &hellip; <a href=\"https:\/\/www.gtronic.it\/test\/index.php\/serializzare-un-segnale-a-alta-velocita\/\">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\/812"}],"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=812"}],"version-history":[{"count":24,"href":"https:\/\/www.gtronic.it\/test\/index.php\/wp-json\/wp\/v2\/pages\/812\/revisions"}],"predecessor-version":[{"id":2749,"href":"https:\/\/www.gtronic.it\/test\/index.php\/wp-json\/wp\/v2\/pages\/812\/revisions\/2749"}],"wp:attachment":[{"href":"https:\/\/www.gtronic.it\/test\/index.php\/wp-json\/wp\/v2\/media?parent=812"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}