{"id":999,"date":"2017-03-17T11:53:01","date_gmt":"2017-03-17T09:53:01","guid":{"rendered":"http:\/\/www.fabienm.eu\/wordpress\/?p=999"},"modified":"2017-03-17T15:31:58","modified_gmt":"2017-03-17T13:31:58","slug":"comment-configurer-son-fpga-en-mode-console-avec-vivado","status":"publish","type":"post","link":"https:\/\/www.fabienm.eu\/wordpress\/2017\/03\/17\/comment-configurer-son-fpga-en-mode-console-avec-vivado\/","title":{"rendered":"Comment configurer son FPGA en mode console avec Vivado"},"content":{"rendered":"<p>Il est assez p\u00e9nible de devoir lancer l&rsquo;interface graphique vivado et d&rsquo;ouvrir un projet juste pour aller \u00abflasher\u00bb un bitstream sur un FPGA. Surtout quand on est sorti du \u00abmode d\u00e9veloppement\u00bb pour passer en \u00abmode usage\u00bb de notre FPGA. Voici donc une m\u00e9thode pour pouvoir configurer son FPGA par JTaG en mode \u00abconsole\u00bb.<\/p>\n<p>C&rsquo;est finalement plut\u00f4t bien expliqu\u00e9 dans le document <a href=\"http:\/\/www.xilinx.com\/support\/documentation\/sw_manuals\/xilinx2012_2\/ug835-vivado-tcl-commands.pdf\">UG835<\/a> (page 934). Mais je le poste quand m\u00eame ici par soucis de r\u00e9f\u00e9rencement. Car je n&rsquo;ai pas trouv\u00e9 directement le howto quand j&rsquo;ai cherch\u00e9 la m\u00e9thode.<\/p>\n<p>Une fois qu&rsquo;on a aliment\u00e9 son FPGA\u00a0et que la sonde USB-Jtag est branch\u00e9e et reconnue par le syst\u00e8me, on peut lancer Vivado en mode console via la commande :<\/p>\n<pre><source>$ vivado -mode tcl\r\n<\/source><\/pre>\n<p>On tombe sur l&rsquo;invite de commande suivante :<\/p>\n<pre><source>$ vivado -mode tcl\r\n\r\n****** Vivado v2016.4 (64-bit)\r\n  **** SW Build 1756540 on Mon Jan 23 19:11:19 MST 2017\r\n  **** IP Build 1755317 on Mon Jan 23 20:30:07 MST 2017\r\n    ** Copyright 1986-2016 Xilinx, Inc. All Rights Reserved.\r\n\r\nVivado%<\/source><\/pre>\n<p>Il faut ensuite d\u00e9marrer le serveur et s&rsquo;y connecter :<\/p>\n<pre><source>Vivado% connect_hw_server\r\nINFO: [Labtools 27-2285] Connecting to hw_server url TCP:localhost:3121\r\nINFO: [Labtools 27-2222] Launching hw_server...\r\nINFO: [Labtools 27-2221] Launch Output:\r\n\r\n****** Xilinx hw_server v2016.4\r\n  **** Build date : Jan 23 2017-19:28:34\r\n    ** Copyright 1986-2016 Xilinx, Inc. All Rights Reserved.\r\n\r\nlocalhost:3121<\/source><\/pre>\n<p>On peut conna\u00eetre le nom de la sonde qui sera utilis\u00e9e par d\u00e9faut via la commande <strong>current_hw_target<\/strong>.<\/p>\n<pre><source>Vivado% current_hw_target\r\nlocalhost:3121\/xilinx_tcf\/Digilent\/210249A062D9<\/source><\/pre>\n<p>Et s&rsquo;y connecter avec open_hw_target :<\/p>\n<pre><source>Vivado% open_hw_target\r\nINFO: [Labtoolstcl 44-466] Opening hw_target localhost:3121\/xilinx_tcf\/Digilent\/210249A062D9<\/source><\/pre>\n<p>Le nom du FPGA\u00a0de destination est donn\u00e9 par la commande <strong>current_hw_device<\/strong> :<\/p>\n<pre><source>Vivado% current_hw_device\r\nxc7k160t_0<\/source><\/pre>\n<p>Il faut ensuite configurer le path du bitstream que l&rsquo;on veut charger avec la commande <strong>set_property<\/strong>:<\/p>\n<pre><source>Vivado% set_property PROGRAM.FILE {\/home\/martoni\/mybitstream.bit} [current_hw_device]<\/source><\/pre>\n<p>Et envoyer le bousin dans le tuyau avec la commande <strong>program_hw_device<\/strong>:<\/p>\n<pre><source>Vivado% program_hw_device\r\nINFO: [Labtools 27-3164] End of startup status: HIGH\r\nprogram_hw_devices: Time (s): cpu = 00:00:06 ; elapsed = 00:00:06 . Memory (MB): peak = 1032.965 ; gain = 0.000 ; free physical = 291 ; free virtual = 12527<\/source><\/pre>\n<p>Et le tour est jou\u00e9, le FPGA est configur\u00e9.<\/p>\n<p>Et si on ne veut pas se prendre la t\u00eate, on peut mettre tout \u00e7a dans un script configure_fpga.tcl comme ci dessous:<\/p>\n<pre><source>\r\nset bitstream [lindex $argv 0]\r\nputs \"Configuring FPGA with file $bitstream\";\r\n\r\nopen_hw\r\nconnect_hw_server\r\nrefresh_hw_server\r\ncurrent_hw_target\r\nopen_hw_target\r\ncurrent_hw_device\r\nset_property PROGRAM.FILE $bitstream [current_hw_device]\r\nprogram_hw_device\r\nputs \"FPGA configured with $bitstream\";\r\n<\/pre>\n<p><\/source><\/p>\n<p>Et le lancer avec la commande :<\/p>\n<pre><source>vivado -mode batch -source configure_fpga.tcl -tclargs bitstream.bit<\/pre>\n<p><\/source><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Il est assez p\u00e9nible de devoir lancer l&rsquo;interface graphique vivado et d&rsquo;ouvrir un projet juste pour aller \u00abflasher\u00bb un bitstream sur un FPGA. Surtout quand on est sorti du \u00abmode d\u00e9veloppement\u00bb pour passer en \u00abmode usage\u00bb de notre FPGA. Voici &hellip; <a href=\"https:\/\/www.fabienm.eu\/wordpress\/2017\/03\/17\/comment-configurer-son-fpga-en-mode-console-avec-vivado\/\">Continuer la lecture <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[132],"tags":[57,17,112,169,168],"class_list":["post-999","post","type-post","status-publish","format-standard","hentry","category-fpga","tag-armadeus","tag-bash","tag-fpga","tag-kintex7","tag-vivado"],"_links":{"self":[{"href":"https:\/\/www.fabienm.eu\/wordpress\/wp-json\/wp\/v2\/posts\/999","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.fabienm.eu\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.fabienm.eu\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.fabienm.eu\/wordpress\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.fabienm.eu\/wordpress\/wp-json\/wp\/v2\/comments?post=999"}],"version-history":[{"count":7,"href":"https:\/\/www.fabienm.eu\/wordpress\/wp-json\/wp\/v2\/posts\/999\/revisions"}],"predecessor-version":[{"id":1006,"href":"https:\/\/www.fabienm.eu\/wordpress\/wp-json\/wp\/v2\/posts\/999\/revisions\/1006"}],"wp:attachment":[{"href":"https:\/\/www.fabienm.eu\/wordpress\/wp-json\/wp\/v2\/media?parent=999"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.fabienm.eu\/wordpress\/wp-json\/wp\/v2\/categories?post=999"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.fabienm.eu\/wordpress\/wp-json\/wp\/v2\/tags?post=999"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}