{"id":1720,"date":"2021-07-01T15:20:27","date_gmt":"2021-07-01T14:20:27","guid":{"rendered":"http:\/\/www.fabienm.eu\/flf\/?p=1720"},"modified":"2022-12-01T15:27:52","modified_gmt":"2022-12-01T14:27:52","slug":"utiliser-unisim-avec-ghdl-et-cocotb","status":"publish","type":"post","link":"http:\/\/www.fabienm.eu\/flf\/utiliser-unisim-avec-ghdl-et-cocotb\/","title":{"rendered":"Utiliser UNISIM avec GHDL et CocoTB"},"content":{"rendered":"\n<p>Les constructeurs de FPGA fournissent des mod\u00e8les VHDL de leurs primitives. Chez Xilinx cela se pr\u00e9sente sous la forme d&rsquo;une librairie nomm\u00e9e UNISIM.<\/p>\n\n\n\n<p>Le logiciel libre de simulation <a href=\"https:\/\/ghdl.readthedocs.io\/en\/latest\/about.html\">GHDL<\/a> n\u2019inclut pas les sources VHDL de cette librairie dans son d\u00e9p\u00f4t officiel car \u00e7a n&rsquo;est pas sa propri\u00e9t\u00e9. Cependant, <a href=\"https:\/\/ghdl-rad.readthedocs.io\/en\/latest\/getting\/PrecompileVendorPrimitives.html\">GHDL fourni des scripts<\/a> permettant de les pr\u00e9-compiler pour son projet.<\/p>\n\n\n\n<p>Nous allons voir ici comment se servir des primitives disponible dans vivado avec une simulation utilisant <a href=\"https:\/\/docs.cocotb.org\/en\/stable\/index.html\">CocoTB<\/a>.<\/p>\n\n\n\n<p>Les sources des primitives se trouvent dans le r\u00e9pertoire d&rsquo;installation de <a href=\"https:\/\/www.xilinx.com\/products\/design-tools\/vivado.html\">Vivado<\/a><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>data\/vhdl\/src\/unisims\/<\/code><\/pre>\n\n\n\n<p>Pour les retrouver on peut utiliser la commande<a href=\"https:\/\/github.com\/sharkdp\/fd\"> fd-find<\/a> comme ceci :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$ fd unisim -e vhd\nVitis\/2021.2\/scripts\/rt\/data\/unisim_VCOMP.vhd\nVitis\/2021.2\/scripts\/rt\/data\/unisim_VCOMP_8h.vhd\nVitis\/2021.2\/scripts\/rt\/data\/unisim_VCOMP_diablo.vhd\nVitis\/2021.2\/scripts\/rt\/data\/unisim_VCOMP_e.vhd\nVitis\/2021.2\/scripts\/rt\/data\/unisim_VPKG.vhd\nVivado\/2021.2\/data\/vhdl\/src\/unisims\/unisim_VCOMP.vhd\nVivado\/2021.2\/data\/vhdl\/src\/unisims\/unisim_VPKG.vhd\nVivado\/2021.2\/data\/vhdl\/src\/unisims\/unisim_retarget_VCOMP.vhd\nVivado\/2021.2\/ids_lite\/ISE\/vhdl\/src\/unisims\/unisim_VCOMP.vhd\nVivado\/2021.2\/ids_lite\/ISE\/vhdl\/src\/unisims\/unisim_VPKG.vhd\nVivado\/2021.2\/scripts\/rt\/data\/unisim_VCOMP.vhd\nVivado\/2021.2\/scripts\/rt\/data\/unisim_VCOMP_8h.vhd\nVivado\/2021.2\/scripts\/rt\/data\/unisim_VCOMP_diablo.vhd\nVivado\/2021.2\/scripts\/rt\/data\/unisim_VCOMP_e.vhd\n\n# et pour unimacro :\n$ fd unimacro -e vhd\nVitis\/2021.2\/scripts\/rt\/data\/unimacro_VCOMP.vhd\nVivado\/2021.2\/data\/vhdl\/src\/unimacro\/unimacro_VCOMP.vhd\nVivado\/2021.2\/ids_lite\/ISE\/vhdl\/src\/unimacro\/unimacro_VCOMP.vhd\nVivado\/2021.2\/scripts\/rt\/data\/unimacro_VCOMP.vhd$ fd unimacro -e vhd\nVitis\/2021.2\/scripts\/rt\/data\/unimacro_VCOMP.vhd\nVivado\/2021.2\/data\/vhdl\/src\/unimacro\/unimacro_VCOMP.vhd\nVivado\/2021.2\/ids_lite\/ISE\/vhdl\/src\/unimacro\/unimacro_VCOMP.vhd\nVivado\/2021.2\/scripts\/rt\/data\/unimacro_VCOMP.vhd\n$ fd unimacro -e vhd\nVitis\/2021.2\/scripts\/rt\/data\/unimacro_VCOMP.vhd\nVivado\/2021.2\/data\/vhdl\/src\/unimacro\/unimacro_VCOMP.vhd\nVivado\/2021.2\/ids_lite\/ISE\/vhdl\/src\/unimacro\/unimacro_VCOMP.vhd\nVivado\/2021.2\/scripts\/rt\/data\/unimacro_VCOMP.vhd\n<\/code><\/pre>\n\n\n\n<p>On s&rsquo;assure d&rsquo;avoir la variable d&rsquo;environnement XILINX_VIVADO bien configur\u00e9e :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$ export XILINX_VIVADO=\/opt\/Xilinx\/Vivado\/2021.2\/Vivado\/2021.2\/\n$ echo $XILINX_VIVADO\n\/opt\/Xilinx\/Vivado\/2021.2\/Vivado\/2021.2\/<\/code><\/pre>\n\n\n\n<p>Il peut \u00eatre int\u00e9ressant de mettre les librairies compil\u00e9 \u00e0 cet endroit pour y faire r\u00e9f\u00e9rence depuis tous ses projets ensuite :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>cd data\/vhdl\nmkdir ghdl\ncd ghdl\n\/usr\/local\/lib\/ghdl\/vendors\/compile-xilinx-vivado.sh -all --vhdl2008\n&#91;...]\n<\/code><\/pre>\n\n\n\n<p> Pour compiler la librairie unisim pour vivado on utilisera le script suivant :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/usr\/local\/lib\/ghdl\/vendors\/compile-xilinx-vivado.sh -a --vhdl2008\nLoading environment...\nNot all Xilinx primitives are VHDL-2008 compatible! Setting CONTINUE_ON_ERROR to TRUE.\nAnalyzing library 'unisim'...\nCreating VHDL Library 'unisim'...\nAnalyzing files into library 'unisim'...\n  WARNING: \/opt\/Xilinx\/Vivado\/2020.2\/data\/vhdl\/src\/unisims\/primitive\/SYSMONE4.vhd:1536:44:warning: prefix of array attribute must be an object name &#91;-Wattribute]\nSCRIPT ERROR: Unfiltered line\nv_str_time_length := time'image(now)'length;\nSCRIPT ERROR: Unfiltered line\n^\n  Warnings detected by filtering script.\nAnalyzing library 'secureip'...\nCreating VHDL Library 'secureip'...\nAnalyzing files into library 'secureip'...\nAnalyzing library 'unimacro'...\nCreating VHDL Library 'unimacro'...\nAnalyzing files into library 'unimacro'...\nAnalyzing library 'unifast'...\nCreating VHDL Library 'unifast'...\nAnalyzing files into library 'unifast'...\nAnalyzing library 'secureip'...\nCreating VHDL Library 'secureip'...\nAnalyzing files into library 'secureip'...\n  WARNING: \/opt\/Xilinx\/Vivado\/2020.2\/data\/vhdl\/src\/unifast\/secureip\/GTHE2_CHANNEL.vhd:29:1:warning: entity \"gthe2_channel\" was also defined in file \"\/opt\/Xilinx\/Vivado\/2020.2\/data\/vhdl\/src\/unisims\/secureip\/GTHE2_CHANNEL.vhd\" &#91;-Wlibrary]\nSCRIPT ERROR: Unfiltered line\nlibrary IEEE;\nSCRIPT ERROR: Unfiltered line\n^\n  Warnings detected by filtering script.\n  WARNING: \/opt\/Xilinx\/Vivado\/2020.2\/data\/vhdl\/src\/unifast\/secureip\/GTXE2_CHANNEL.vhd:34:1:warning: entity \"gtxe2_channel\" was also defined in file \"\/opt\/Xilinx\/Vivado\/2020.2\/data\/vhdl\/src\/unisims\/secureip\/GTXE2_CHANNEL.vhd\" &#91;-Wlibrary]\nSCRIPT ERROR: Unfiltered line\nlibrary IEEE;\nSCRIPT ERROR: Unfiltered line\n^\n  Warnings detected by filtering script.\n--------------------------------------------------------------------------------\nCompiling Xilinx Vivado libraries &#91;SUCCESSFUL]\n<\/code><\/pre>\n\n\n\n<p>La compilation prend un temps <strong>infini<\/strong>, compter au moins 5 minutes sur un PC muni de 16 c\u0153urs. Il suffira ensuite d&rsquo;ajouter les lignes suivantes \u00e0 son makefile CocoTB :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\nEXTRA_ARGS+=--std=08\nEXTRA_ARGS+=-frelaxed-rules\n\nUNISIMDIR=$(VIVADODIR)\/data\/vhdl\/ghdl\/xilinx-vivado\/unisim\/v93\nEXTRA_ARGS=-P$(UNISIMDIR)\n...\nEXTRA_ARGS=-P$(UNIMACRODIR)<\/code><\/pre>\n\n\n\n<p>Et roulez jeunesse.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Les constructeurs de FPGA fournissent des mod\u00e8les VHDL de leurs primitives. Chez Xilinx cela se pr\u00e9sente sous la forme d&rsquo;une librairie nomm\u00e9e UNISIM. Le logiciel libre de simulation GHDL n\u2019inclut pas les sources VHDL de cette librairie dans son d\u00e9p\u00f4t officiel car \u00e7a n&rsquo;est pas sa propri\u00e9t\u00e9. Cependant, GHDL fourni des scripts permettant de les &hellip; <a href=\"http:\/\/www.fabienm.eu\/flf\/utiliser-unisim-avec-ghdl-et-cocotb\/\" class=\"more-link\">Continuer la lecture de <span class=\"screen-reader-text\">Utiliser UNISIM avec GHDL et CocoTB<\/span> <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_uag_custom_page_level_css":"","footnotes":""},"categories":[1],"tags":[59,200,60,97],"class_list":["post-1720","post","type-post","status-publish","format-standard","hentry","category-non-classe","tag-ghdl","tag-unisim","tag-vhdl","tag-vivado"],"uagb_featured_image_src":{"full":false,"thumbnail":false,"medium":false,"medium_large":false,"large":false,"1536x1536":false,"2048x2048":false,"post-thumbnail":false},"uagb_author_info":{"display_name":"Fabien Marteau","author_link":"http:\/\/www.fabienm.eu\/flf\/author\/martoni\/"},"uagb_comment_info":0,"uagb_excerpt":"Les constructeurs de FPGA fournissent des mod\u00e8les VHDL de leurs primitives. Chez Xilinx cela se pr\u00e9sente sous la forme d&rsquo;une librairie nomm\u00e9e UNISIM. Le logiciel libre de simulation GHDL n\u2019inclut pas les sources VHDL de cette librairie dans son d\u00e9p\u00f4t officiel car \u00e7a n&rsquo;est pas sa propri\u00e9t\u00e9. Cependant, GHDL fourni des scripts permettant de les\u2026","_links":{"self":[{"href":"http:\/\/www.fabienm.eu\/flf\/wp-json\/wp\/v2\/posts\/1720","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/www.fabienm.eu\/flf\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.fabienm.eu\/flf\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.fabienm.eu\/flf\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"http:\/\/www.fabienm.eu\/flf\/wp-json\/wp\/v2\/comments?post=1720"}],"version-history":[{"count":12,"href":"http:\/\/www.fabienm.eu\/flf\/wp-json\/wp\/v2\/posts\/1720\/revisions"}],"predecessor-version":[{"id":2266,"href":"http:\/\/www.fabienm.eu\/flf\/wp-json\/wp\/v2\/posts\/1720\/revisions\/2266"}],"wp:attachment":[{"href":"http:\/\/www.fabienm.eu\/flf\/wp-json\/wp\/v2\/media?parent=1720"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.fabienm.eu\/flf\/wp-json\/wp\/v2\/categories?post=1720"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.fabienm.eu\/flf\/wp-json\/wp\/v2\/tags?post=1720"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}