{"id":1731,"date":"2021-07-09T12:53:35","date_gmt":"2021-07-09T11:53:35","guid":{"rendered":"http:\/\/www.fabienm.eu\/flf\/?p=1731"},"modified":"2021-08-04T19:56:22","modified_gmt":"2021-08-04T18:56:22","slug":"test-dune-carte-gowin-avec-litex","status":"publish","type":"post","link":"http:\/\/www.fabienm.eu\/flf\/test-dune-carte-gowin-avec-litex\/","title":{"rendered":"Test d&rsquo;une carte Gowin avec LiteX"},"content":{"rendered":"\n<p>Apr\u00e8s avoir <a href=\"http:\/\/www.fabienm.eu\/flf\/le-point-gowin\/\">d\u00e9ball\u00e9 le kit gowin<\/a> propos\u00e9 par trenz micro. Il faut trouver quelques chose \u00e0 faire de plus avanc\u00e9 qu&rsquo;un simple clignotement de LED. Pour le clignotement de LED et la prise en main des outils, le lecteur se r\u00e9f\u00e9rera \u00e0 l&rsquo;article <a href=\"https:\/\/connect.ed-diamond.com\/Hackable\/HK-032\/des-kits-de-developpement-fpga-a-moins-de-30-eu\">Hackable 32<\/a>.<\/p>\n\n\n\n<p>Pourquoi ne pas tenter le <em>Linux des FPGA<\/em>, j&rsquo;ai nomm\u00e9 <a href=\"https:\/\/github.com\/enjoy-digital\/litex\">LiteX<\/a> (Prononcez Lah\u00eftixe ) ? LiteX est un framework <a href=\"https:\/\/en.wikipedia.org\/wiki\/Hardware_description_language\">HDL<\/a> bas\u00e9 sur <a href=\"https:\/\/github.com\/m-labs\/migen\">Migen<\/a> pour construire des syst\u00e8mes mat\u00e9riel facilement en python.<\/p>\n\n\n\n<p>LiteX inclut un langage de <a href=\"https:\/\/m-labs.hk\/migen\/manual\/fhdl.html\">description mat\u00e9riel<\/a>, mais \u00e9galement tous les outils permettant de faire des simulations, la synth\u00e8ses et g\u00e9n\u00e9rer les bitstreams pour la plupart des FPGA du march\u00e9. Bien \u00e9videment, en ce qui concerne la synth\u00e8se et les bitstreams, LiteX pilote les outils propri\u00e9taires des constructeurs. Ce pilotage ne pose g\u00e9n\u00e9ralement pas trop de probl\u00e8me, car tous les outils constructeurs proposent des interfaces en ligne de commande.<\/p>\n\n\n\n<p>La carte que nous allons tenter de faire fonctionner avec LiteX est donc la <a href=\"https:\/\/shop.trenz-electronic.de\/media\/image\/27\/53\/b9\/TEC0117-01_0_600x600.jpg\">TEC0117<\/a>-1 produite par <a href=\"https:\/\/www.trenz-electronic.de\/en\">Trenz electronic<\/a> et munie d&rsquo;un FPGA <a href=\"https:\/\/gowinsemi.com\/en\/\">gowin<\/a> .<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"http:\/\/www.fabienm.eu\/flf\/wp-content\/uploads\/2021\/07\/TEC0117-01_0_600x600.jpg\"><img loading=\"lazy\" decoding=\"async\" width=\"600\" height=\"442\" src=\"http:\/\/www.fabienm.eu\/flf\/wp-content\/uploads\/2021\/07\/TEC0117-01_0_600x600.jpg\" alt=\"\" class=\"wp-image-1733\" srcset=\"http:\/\/www.fabienm.eu\/flf\/wp-content\/uploads\/2021\/07\/TEC0117-01_0_600x600.jpg 600w, http:\/\/www.fabienm.eu\/flf\/wp-content\/uploads\/2021\/07\/TEC0117-01_0_600x600-300x221.jpg 300w\" sizes=\"auto, (max-width: 600px) 100vw, 600px\" \/><\/a><figcaption>La carte TEC0117-1 de trenz micro se pilote int\u00e9gralement avec le port s\u00e9rie.<\/figcaption><\/figure>\n\n\n\n<p>D&rsquo;apr\u00e8s <a href=\"https:\/\/github.com\/enjoy-digital\/litex\/wiki\">le wiki<\/a>, la carte n&rsquo;est pas encore officiellement support\u00e9 par LiteX puisqu&rsquo;elle ne se trouve pas dans la liste du projet<a href=\"https:\/\/github.com\/litex-hub\/litex-boards\"> LiteX-Boards<\/a>&#8230; <\/p>\n\n\n\n<p>Pas dans le tableau de la documentation du moins, car en fouillant dans le code du projet, il semble qu&rsquo;il y ait d\u00e9j\u00e0 un embryon de quelques <a href=\"https:\/\/github.com\/litex-hub\/litex-boards\/blob\/master\/litex_boards\/platforms\/trenz_tec0117.py\">chose ici<\/a>. Voila qui est tr\u00e8s engageant pour tester la carte.<\/p>\n\n\n\n<p>Voyons donc voir les \u00e9tapes nous permettant de construire un syst\u00e8me avec LiteX.<\/p>\n\n\n\n<p><strong>Installation de LiteX<\/strong><\/p>\n\n\n\n<p>Le plus simple pour installer LiteX sur son ordinateur est d&rsquo;aller suivre <a href=\"https:\/\/github.com\/enjoy-digital\/litex\/wiki\/Installation\">le guide officiel d&rsquo;installation<\/a>.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$ wget https:\/\/raw.githubusercontent.com\/enjoy-digital\/litex\/master\/litex_setup.py\n$ chmod +x litex_setup.py\n$ .\/litex_setup.py init install --user (--user to install to user directory)<\/code><\/pre>\n\n\n\n<p>Attention, si comme moi vous avez un pc qui commence \u00e0 prendre s\u00e9rieusement de l&rsquo;\u00e2ge, sachez que le script <code>litex_setup.py<\/code> va descendre beaucoup de projets annexes de LiteX. \u00c7a va prendre quelques minutes.<\/p>\n\n\n\n<p>On aura besoin \u00e9galement de gcc compil\u00e9 pour RISC-V :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$ .\/litex_setup.py gcc<\/code><\/pre>\n\n\n\n<p>Il faudra bien penser \u00e0 l&rsquo;exporter \u00e0 chaque fois qu&rsquo;on en aura besoin :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$ export PATH=$PATH:$(echo $PWD\/riscv64-*\/bin\/)<\/code><\/pre>\n\n\n\n<p><strong>Construire le syst\u00e8me pour TEC0117<\/strong><\/p>\n\n\n\n<p>Pour construire un syst\u00e8me pour la carte il faut ensuite se rendre dans le r\u00e9pertoire contenant la carte puis lancer le script python correspondant:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$ export PATH=$PATH:$(echo $PWD\/riscv64-*\/bin\/)\n$ cd litex-boards\/litex_boards\/targets\n$ python3 trenz_tec0117.py<\/code><\/pre>\n\n\n\n<p>Pour synth\u00e9tiser et g\u00e9n\u00e9rer le bitstream il faut d&rsquo;abord ajouter le lien vers l&rsquo;ide (1.9.7 minimum) de gowin :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$ export PATH=$PATH:\/opt\/gowin\/1_9_7\/IDE\/bin\/<\/code><\/pre>\n\n\n\n<p>Puis lancer le build:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$ python litex-boards\/litex_boards\/targets\/trenz_tec0117.py --build\nINFO:SoC:        __   _ __      _  __  \nINFO:SoC:       \/ \/  (_) \/____ | |\/_\/  \nINFO:SoC:      \/ \/__\/ \/ __\/ -_)&gt;  &lt;    \nINFO:SoC:     \/____\/_\/\\__\/\\__\/_\/|_|  \nINFO:SoC:  Build your hardware, easily!\nINFO:SoC:--------------------------------------------------------------------------------\n\n...\n\nRunning timing analysis......\n&#91;95%] Timing analysis completed\nBitstream generation in progress......\nBitstream generation completed\nRunning power analysis......\n&#91;100%] Power analysis completed\nGenerate file \"\/home\/fabienm\/myapp\/litex\/build\/trenz_tec0117\/gateware\/impl\/pnr\/project.power.html\" completed\nGenerate file \"\/home\/fabienm\/myapp\/litex\/build\/trenz_tec0117\/gateware\/impl\/pnr\/project.pin.html\" completed\nGenerate file \"\/home\/fabienm\/myapp\/litex\/build\/trenz_tec0117\/gateware\/impl\/pnr\/project.rpt.html\" completed\nGenerate file \"\/home\/fabienm\/myapp\/litex\/build\/trenz_tec0117\/gateware\/impl\/pnr\/project.rpt.txt\" completed\nGenerate file \"\/home\/fabienm\/myapp\/litex\/build\/trenz_tec0117\/gateware\/impl\/pnr\/project.tr.html\" completed\nFri Jul  9 13:18:07 2021\n\n<\/code><\/pre>\n\n\n\n<p>Le bitstream g\u00e9n\u00e9r\u00e9 au format *.fs se trouve ensuite dans le r\u00e9pertoire <\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>.\/build\/trenz_tec0117\/gateware\/impl\/pnr\/project.fs<\/code><\/pre>\n\n\n\n<p>On pourra configurer le FPGA directement avec openFPGALoader :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$ openFPGALoader .\/build\/trenz_tec0117\/gateware\/impl\/pnr\/project.fs\nParse .\/build\/trenz_tec0117\/gateware\/impl\/pnr\/project.fs: \nchecksum 0x15d3\nDone\nerase SRAM Done\nFlash SRAM: &#91;==================================================] 100.000000%\nDone\nSRAM Flash: Success\n<\/code><\/pre>\n\n\n\n<p>Ou avec la bonne option litex (qui fait appel \u00e0 openFPGALoader de toute mani\u00e8re):<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$ python3 ..\/litex-boards\/litex_boards\/targets\/trenz_tec0117.py --load\nINFO:SoC:        __   _ __      _  __  \nINFO:SoC:       \/ \/  (_) \/____ | |\/_\/  \nINFO:SoC:      \/ \/__\/ \/ __\/ -_)&gt;  &lt;    \nINFO:SoC:     \/____\/_\/\\__\/\\__\/_\/|_|  \nINFO:SoC:  Build your hardware, easily!\nINFO:SoC:--------------------------------------------------------------------------------\nINFO:SoC:Creating SoC... (2021-07-12 19:05:10)\nINFO:SoC:--------------------------------------------------------------------------------\nINFO:SoC:FPGA device : GW1NR-LV9QN88C6\/I5.\nINFO:SoC:System clock: 25.00MHz.\nINFO:SoCBusHandler:Creating Bus Handler...\n\n...\n\nINFO:SoC:Initializing ROM rom with contents (Size: 0x51cc).\nINFO:SoC:Auto-Resizing ROM rom from 0x6000 to 0x51cc.\nParse \/home\/user\/myapp\/litex\/myapp\/build\/trenz_tec0117\/gateware\/impl\/pnr\/project.fs: \nchecksum 0xa3a3\nDone\nerase SRAM Done\nFlash SRAM: &#91;==================================================] 100.000000%\nDone\nSRAM Flash: Success\n<\/code><\/pre>\n\n\n\n<p>La confirmation de la bonne configuration est donn\u00e9e par le message de la console, mais \u00e9galement par le chenillard de LED rouge.<\/p>\n\n\n\n<p><strong>Console litex&gt;<\/strong><\/p>\n\n\n\n<p>Le convertisseur USB-uart de la carte poss\u00e8de deux interfaces ttyUSB, la premi\u00e8re vient d&rsquo;\u00eatre utilis\u00e9e par openFPGALoader pour charger le bitstream, la seconde permet de se connecter \u00e0 la console litex :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$ screen \/dev\/ttyUSB1 115200\nlitex&gt; reboot\n\n\n        __   _ __      _  __\n       \/ \/  (_) \/____ | |\/_\/\n      \/ \/__\/ \/ __\/ -_)&gt;  &lt;\n     \/____\/_\/\\__\/\\__\/_\/|_|\n   Build your hardware, easily!\n\n (c) Copyright 2012-2021 Enjoy-Digital\n (c) Copyright 2007-2015 M-Labs\n\n BIOS built on Jul  9 2021 13:17:06\n BIOS CRC passed (855636f6)\n\n Migen git sha1: 3ffd64c\n LiteX git sha1: 2b49430f\n\n--=============== SoC ==================--\nCPU:            VexRiscv_Lite @ 25MHz\nBUS:            WISHBONE 32-bit @ 4GiB\nCSR:            32-bit data\nROM:            24KiB\nSRAM:           4KiB\nL2:             0KiB\nSDRAM:          8192KiB 16-bit @ 25MT\/s (CL-2 CWL-2)\n\n--========== Initialization ============--\nInitializing SDRAM @0x40000000...\nSwitching SDRAM to software control.\nSwitching SDRAM to hardware control.\nMemtest at 0x40000000 (2.0MiB)...\n  Write: 0x40000000-0x40200000 2.0MiB     \n   Read: 0x40000000-0x40200000 2.0MiB     \nMemtest OK\nMemspeed at 0x40000000 (2.0MiB)...\n  Write speed: 5.6MiB\/s\n   Read speed: 6.2MiB\/s\n\n--============== Boot ==================--\nBooting from serial...\nPress Q or ESC to abort boot completely.\nsL5DdSMmkekro\n             Timeout\nNo boot medium found\n\n--============= Console ================--\n\nlitex&gt; \n<\/code><\/pre>\n\n\n\n<p>La commande help nous donnes les commandes disponibles :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>litex&gt; help\n\n\nLiteX BIOS, available commands:\n\nleds                     - Set Leds value\nflush_l2_cache           - Flush L2 cache\nflush_cpu_dcache         - Flush CPU data cache\ncrc                      - Compute CRC32 of a part of the address space\nident                    - Identifier of the system\nhelp                     - Print this help\n\nserialboot               - Boot from Serial (SFL)\nreboot                   - Reboot\nboot                     - Boot from Memory\n\nmem_speed                - Test memory speed\nmem_test                 - Test memory access\nmem_copy                 - Copy address space\nmem_write                - Write address space\nmem_read                 - Read address space\nmem_list                 - List available memory regions\n\nsdram_test               - Test SDRAM\n<\/code><\/pre>\n\n\n\n<p><strong>Photo traditionnelle<\/strong><\/p>\n\n\n\n<p>Avec LiteX, une tradition \u00abtwitter\u00bb veux que l&rsquo;on fasse une photo du kit d\u00e9marrant LiteX avec la console d\u00e9marr\u00e9e.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><a href=\"http:\/\/www.fabienm.eu\/flf\/wp-content\/uploads\/2021\/07\/gowin_litex.jpg\"><img loading=\"lazy\" decoding=\"async\" width=\"400\" height=\"579\" src=\"http:\/\/www.fabienm.eu\/flf\/wp-content\/uploads\/2021\/07\/gowin_litex.jpg\" alt=\"\" class=\"wp-image-1745\" srcset=\"http:\/\/www.fabienm.eu\/flf\/wp-content\/uploads\/2021\/07\/gowin_litex.jpg 400w, http:\/\/www.fabienm.eu\/flf\/wp-content\/uploads\/2021\/07\/gowin_litex-207x300.jpg 207w\" sizes=\"auto, (max-width: 400px) 100vw, 400px\" \/><\/a><figcaption>Photo troph\u00e9e de la tec0117 avec LiteX<\/figcaption><\/figure><\/div>\n\n\n\n<p>Et voila \\o\/<\/p>\n\n\n\n<p>L&rsquo;entr\u00e9e en mati\u00e8re est incroyablement facile et fait honneur au slogan \u00abBuild your hardware, easily!\u00bb.<\/p>\n\n\n\n<p>Nous regarderons dans de futur articles ce que l&rsquo;on peut faire avec.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Apr\u00e8s avoir d\u00e9ball\u00e9 le kit gowin propos\u00e9 par trenz micro. Il faut trouver quelques chose \u00e0 faire de plus avanc\u00e9 qu&rsquo;un simple clignotement de LED. Pour le clignotement de LED et la prise en main des outils, le lecteur se r\u00e9f\u00e9rera \u00e0 l&rsquo;article Hackable 32. Pourquoi ne pas tenter le Linux des FPGA, j&rsquo;ai nomm\u00e9 &hellip; <a href=\"http:\/\/www.fabienm.eu\/flf\/test-dune-carte-gowin-avec-litex\/\" class=\"more-link\">Continuer la lecture de <span class=\"screen-reader-text\">Test d&rsquo;une carte Gowin avec LiteX<\/span> <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_uag_custom_page_level_css":"","footnotes":""},"categories":[1],"tags":[146,201,56],"class_list":["post-1731","post","type-post","status-publish","format-standard","hentry","category-non-classe","tag-gowin","tag-litex","tag-python"],"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\/admin\/"},"uagb_comment_info":0,"uagb_excerpt":"Apr\u00e8s avoir d\u00e9ball\u00e9 le kit gowin propos\u00e9 par trenz micro. Il faut trouver quelques chose \u00e0 faire de plus avanc\u00e9 qu&rsquo;un simple clignotement de LED. Pour le clignotement de LED et la prise en main des outils, le lecteur se r\u00e9f\u00e9rera \u00e0 l&rsquo;article Hackable 32. Pourquoi ne pas tenter le Linux des FPGA, j&rsquo;ai nomm\u00e9\u2026","_links":{"self":[{"href":"http:\/\/www.fabienm.eu\/flf\/wp-json\/wp\/v2\/posts\/1731","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\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/www.fabienm.eu\/flf\/wp-json\/wp\/v2\/comments?post=1731"}],"version-history":[{"count":16,"href":"http:\/\/www.fabienm.eu\/flf\/wp-json\/wp\/v2\/posts\/1731\/revisions"}],"predecessor-version":[{"id":1766,"href":"http:\/\/www.fabienm.eu\/flf\/wp-json\/wp\/v2\/posts\/1731\/revisions\/1766"}],"wp:attachment":[{"href":"http:\/\/www.fabienm.eu\/flf\/wp-json\/wp\/v2\/media?parent=1731"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.fabienm.eu\/flf\/wp-json\/wp\/v2\/categories?post=1731"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.fabienm.eu\/flf\/wp-json\/wp\/v2\/tags?post=1731"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}