{"id":2027,"date":"2022-05-01T08:53:44","date_gmt":"2022-05-01T07:53:44","guid":{"rendered":"http:\/\/www.fabienm.eu\/flf\/?p=2027"},"modified":"2022-07-02T07:58:44","modified_gmt":"2022-07-02T06:58:44","slug":"decouverte-du-fpga-europeen-le-gatemate-de-colognechip","status":"publish","type":"post","link":"http:\/\/www.fabienm.eu\/flf\/decouverte-du-fpga-europeen-le-gatemate-de-colognechip\/","title":{"rendered":"D\u00e9couverte du FPGA europ\u00e9en, le GateMate de CologneChip"},"content":{"rendered":"\n<p>Nous l&rsquo;attendions depuis au moins deux ans, le FPGA europ\u00e9en <a href=\"https:\/\/colognechip.com\/programmable-logic\/gatemate\/\">GateMate<\/a> des allemands de <a href=\"https:\/\/colognechip.com\/\">CologneChip<\/a> est d\u00e9sormais disponible dans votre <a href=\"https:\/\/www.digikey.fr\/fr\/products\/detail\/cologne-chip\/CCGM1A1-E1-31B\/16087880\">cr\u00e9merie habituelle<\/a>.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"http:\/\/www.fabienm.eu\/flf\/wp-content\/uploads\/2022\/04\/gatemate_emballage-scaled.jpg\"><img loading=\"lazy\" decoding=\"async\" width=\"768\" height=\"1024\" src=\"http:\/\/www.fabienm.eu\/flf\/wp-content\/uploads\/2022\/04\/gatemate_emballage-768x1024.jpg\" alt=\"\" class=\"wp-image-2028\" srcset=\"http:\/\/www.fabienm.eu\/flf\/wp-content\/uploads\/2022\/04\/gatemate_emballage-768x1024.jpg 768w, http:\/\/www.fabienm.eu\/flf\/wp-content\/uploads\/2022\/04\/gatemate_emballage-225x300.jpg 225w, http:\/\/www.fabienm.eu\/flf\/wp-content\/uploads\/2022\/04\/gatemate_emballage-1152x1536.jpg 1152w, http:\/\/www.fabienm.eu\/flf\/wp-content\/uploads\/2022\/04\/gatemate_emballage-1536x2048.jpg 1536w, http:\/\/www.fabienm.eu\/flf\/wp-content\/uploads\/2022\/04\/gatemate_emballage-scaled.jpg 1920w\" sizes=\"auto, (max-width: 768px) 100vw, 768px\" \/><\/a><figcaption>\u00c7a y est il est arriv\u00e9, le kit de d\u00e9veloppement GateMate !<\/figcaption><\/figure>\n\n\n\n<p>La dimension europ\u00e9enne de ce FPGA n&rsquo;est pas la seule nouveaut\u00e9, c&rsquo;est \u00e9galement un des premier (<a href=\"http:\/\/www.fabienm.eu\/flf\/eos-s3-le-bitstream-libere\/\">mais pas le premier<\/a>) \u00e0 privil\u00e9gier les outils open source pour son utilisation. Que cela soit pour la simulation ou pour la synth\u00e8se tous les exemples donn\u00e9s dans la documentation utilisent des logiciels libres (<a href=\"https:\/\/github.com\/steveicarus\/iverilog\">Icarus<\/a>, <a href=\"https:\/\/ghdl.github.io\/ghdl\/\">GHDL<\/a> et surtout <a href=\"https:\/\/yosyshq.net\/yosys\/\">Yosys<\/a>). M\u00eame pour la visualisation des chronogrammes, <a href=\"http:\/\/gtkwave.sourceforge.net\/\">gtkwa<\/a>ve est utilis\u00e9 par d\u00e9faut en exemple.<\/p>\n\n\n\n<p>[\u00c0 noter que le kit de d\u00e9veloppement m&rsquo;a \u00e9t\u00e9 offert gracieusement par CologneChip]<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Caract\u00e9ristiques du GateMate<\/h2>\n\n\n\n<p>Les caract\u00e9ristiques du GateMate le positionne au niveau d&rsquo;un petit <a href=\"https:\/\/www.xilinx.com\/products\/silicon-devices\/fpga\/spartan-7.html#productTable\">Spartan7<\/a> de Xilinx ou d&rsquo;un <a href=\"https:\/\/www.efinixinc.com\/shop\/t20.php\">Trion T20<\/a> de Efinix.<\/p>\n\n\n\n<p>Le composant est grav\u00e9 par <a href=\"https:\/\/gf.com\/\">GlobalFounderies<\/a> en 28nm. <\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"http:\/\/www.fabienm.eu\/flf\/wp-content\/uploads\/2022\/04\/gatemate_arch.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"618\" src=\"http:\/\/www.fabienm.eu\/flf\/wp-content\/uploads\/2022\/04\/gatemate_arch-1024x618.png\" alt=\"\" class=\"wp-image-2038\" srcset=\"http:\/\/www.fabienm.eu\/flf\/wp-content\/uploads\/2022\/04\/gatemate_arch-1024x618.png 1024w, http:\/\/www.fabienm.eu\/flf\/wp-content\/uploads\/2022\/04\/gatemate_arch-300x181.png 300w, http:\/\/www.fabienm.eu\/flf\/wp-content\/uploads\/2022\/04\/gatemate_arch-768x463.png 768w, http:\/\/www.fabienm.eu\/flf\/wp-content\/uploads\/2022\/04\/gatemate_arch.png 1086w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><figcaption>Architecture g\u00e9n\u00e9rale (DS1001)<\/figcaption><\/figure>\n\n\n\n<p>La cellule de base est nomm\u00e9e CPE pour \u00abCentral Programming Element\u00bb.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"http:\/\/www.fabienm.eu\/flf\/wp-content\/uploads\/2022\/04\/gatemate_cpe.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1000\" height=\"898\" src=\"http:\/\/www.fabienm.eu\/flf\/wp-content\/uploads\/2022\/04\/gatemate_cpe.png\" alt=\"\" class=\"wp-image-2039\" srcset=\"http:\/\/www.fabienm.eu\/flf\/wp-content\/uploads\/2022\/04\/gatemate_cpe.png 1000w, http:\/\/www.fabienm.eu\/flf\/wp-content\/uploads\/2022\/04\/gatemate_cpe-300x269.png 300w, http:\/\/www.fabienm.eu\/flf\/wp-content\/uploads\/2022\/04\/gatemate_cpe-768x690.png 768w\" sizes=\"auto, (max-width: 1000px) 100vw, 1000px\" \/><\/a><figcaption>Structure du CPE (DS1001)<\/figcaption><\/figure>\n\n\n\n<p>On notera l&rsquo;absence remarqu\u00e9 de blocs multiplieurs.  Cette absence est compens\u00e9e par le \u00abfast signal path routing\u00bb qui permet de cha\u00eener les CPE afin de construire un multiplieur de dimension voulue.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Caract\u00e9ristiques du kit<\/h2>\n\n\n\n<p>Pour le moment, seuls les trois petit FPGA&nbsp;de la gamme GateMate semblent \u00eatre en production. CologneChip propose un kit de d\u00e9veloppement muni du plus petit GateMate : le <strong>CCGM1A1<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"http:\/\/www.fabienm.eu\/flf\/wp-content\/uploads\/2022\/04\/gatemate_dev_schemablocs.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"889\" src=\"http:\/\/www.fabienm.eu\/flf\/wp-content\/uploads\/2022\/04\/gatemate_dev_schemablocs-1024x889.png\" alt=\"\" class=\"wp-image-2031\" srcset=\"http:\/\/www.fabienm.eu\/flf\/wp-content\/uploads\/2022\/04\/gatemate_dev_schemablocs-1024x889.png 1024w, http:\/\/www.fabienm.eu\/flf\/wp-content\/uploads\/2022\/04\/gatemate_dev_schemablocs-300x260.png 300w, http:\/\/www.fabienm.eu\/flf\/wp-content\/uploads\/2022\/04\/gatemate_dev_schemablocs-768x667.png 768w, http:\/\/www.fabienm.eu\/flf\/wp-content\/uploads\/2022\/04\/gatemate_dev_schemablocs.png 1068w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><figcaption>Le sch\u00e9ma blocs de la carte de d\u00e9veloppement (source <a href=\"https:\/\/colognechip.com\/docs\/ds1003-gatemate1-evalboard-3v1-latest.pdf\">pdf officiel<\/a>)<\/figcaption><\/figure>\n\n\n\n<p>La carte de d\u00e9veloppement poss\u00e8de deux entr\u00e9es USB:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>une pour l&rsquo;alimentation<\/li><li>et une pour la programmation et la communication avec le FPGA (FTDI 2232), mais qui peut \u00e9galement servir d&rsquo;alimentation.<\/li><\/ul>\n\n\n\n<p>La magie du logiciel libre <a href=\"https:\/\/github.com\/trabucayre\/openFPGALoader\">openFPGALoader<\/a> permet de d\u00e9tecter le FPGA&nbsp;directement au branchement:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$ openFPGALoader --detect\nJtag frequency : requested 6.00MHz   -&gt; real 6.00MHz  \nindex 0:\n\tidcode 0x20000001\n\tmanufacturer colognechip\n\tfamily GateMate Series\n\tmodel  GM1Ax\n\tirlength 6<\/code><\/pre>\n\n\n\n<p>En effet, avant m\u00eame la sortie du gatemate, CologneChip avait d\u00e9j\u00e0 propos\u00e9 le support du composant sur le <a href=\"https:\/\/github.com\/trabucayre\/openFPGALoader\/commit\/d09e5da0ba67cd61d20e30da32defe63ca04dff9\">d\u00e9pot openFPGALoader<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Toolchain<\/h2>\n\n\n\n<p><a href=\"https:\/\/colognechip.com\/\">CologneChip<\/a> fourni un guide d&rsquo;installation de la cha\u00eene de d\u00e9veloppement <a href=\"https:\/\/www.colognechip.com\/docs\/ug1002-toolchain-install-latest.pdf\">sur son site internet<\/a>.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"http:\/\/www.fabienm.eu\/flf\/wp-content\/uploads\/2022\/04\/gatemate_toolchain_schematic.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"350\" src=\"http:\/\/www.fabienm.eu\/flf\/wp-content\/uploads\/2022\/04\/gatemate_toolchain_schematic-1024x350.png\" alt=\"\" class=\"wp-image-2034\" srcset=\"http:\/\/www.fabienm.eu\/flf\/wp-content\/uploads\/2022\/04\/gatemate_toolchain_schematic-1024x350.png 1024w, http:\/\/www.fabienm.eu\/flf\/wp-content\/uploads\/2022\/04\/gatemate_toolchain_schematic-300x102.png 300w, http:\/\/www.fabienm.eu\/flf\/wp-content\/uploads\/2022\/04\/gatemate_toolchain_schematic-768x262.png 768w, http:\/\/www.fabienm.eu\/flf\/wp-content\/uploads\/2022\/04\/gatemate_toolchain_schematic.png 1256w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><figcaption>Hormis le logiciel de placement routage (GateMate), tous les outils sont des logiciels libre bien connus du monde du FPGA (source UG1002).<\/figcaption><\/figure>\n\n\n\n<p>Tous les outils sont connus du monde du FPGA opensource et leurs installations sont intensivement d\u00e9crites dans les diff\u00e9rents d\u00e9p\u00f4ts des projets.<\/p>\n\n\n\n<p>Si l&rsquo;on souhaite \u00e9viter la case compilation, l&rsquo;entreprise fournie m\u00eame des versions binaires. Ces binaires ne sont t\u00e9l\u00e9chargeable que via un compte enregistr\u00e9 sur leur site pour le moment. Deux paquets de logiciels sont n\u00e9cessaires :<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><strong>Yosys<\/strong> compil\u00e9 pour le gatemate: pour la synth\u00e8se Verilog<\/li><li><strong>p_r<\/strong>: le logiciel de placement routage.<\/li><\/ul>\n\n\n\n<p>Pour le moment, la version binaire<a href=\"https:\/\/www.colognechip.com\/programmable-logic\/gatemate\/gatemate-download\/\"> propos\u00e9e en t\u00e9l\u00e9chargement <\/a>sur le site  n&rsquo;est disponible que pour windows. Ces \u00ab.exe\u00bb s&rsquo;ex\u00e9cutent cependant parfaitement sous Linux au moyen de l&rsquo;\u00e9mulateur <a href=\"https:\/\/www.winehq.org\/\">wine<\/a> bien connu des Linuxiens. <\/p>\n\n\n\n<p>L&rsquo;archive t\u00e9l\u00e9charg\u00e9e se d\u00e9compresse simplement avec unzip :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$ unzip cc-toolchain-win.zip \nArchive:  cc-toolchain-win.zip\n extracting: cc-toolchain-win\/openFPGALoader-mingw64-v.0.8.0+80eeaef.zip  \n extracting: cc-toolchain-win\/p_r-2022.04-001.zip  \n  inflating: cc-toolchain-win\/ug1002-toolchain-install-2022-04.pdf  \n extracting: cc-toolchain-win\/yosys-win32-mxebin-0.15+57.zip  <\/code><\/pre>\n\n\n\n<p>La version windows de <em>openFPGALoader<\/em> ne fonctionne pas bien en \u00e9mulation wine, il est pr\u00e9f\u00e9rable d&rsquo;en compiler une version \u00e0 jour \u00e0 partir des sources officiels.<\/p>\n\n\n\n<p>Pour le reste, on peut s&rsquo;affranchir de compiler <em>yosys<\/em> en utilisant celle fournie. Et pour <em>p_r<\/em>, les sources n&rsquo;\u00e9tant pas fournies pour le moment, cette version est la seule que nous pourrons utiliser.<\/p>\n\n\n\n<p>Pour les installer, il suffit de les d\u00e9compresser :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$ cd cc-toolchain-win\/\n$ unzip p_r-2022.04-001.zip\n$ unzip yosys-win32-mxebin-0.15+57.zip<\/code><\/pre>\n\n\n\n<p>La notice d&rsquo;utilisation des commandes est donn\u00e9es dans le pdf de l&rsquo;archive nomm\u00e9 <em>ug1002-toolchain-install-2022-04.pdf<\/em>.<\/p>\n\n\n\n<p>C&rsquo;est l&rsquo;installation la plus simple que j&rsquo;ai pu avoir \u00e0 faire pour des outils de d\u00e9veloppement FPGA. La place occup\u00e9e sur le disque dur de son ordinateur est plusieurs milliers de fois plus petites que les logiciels habituels :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$ cd p_r-2022.04-001\/\n$ du -sh .\n24M\t.\n$ cd yosys-win32-mxebin-0.15+57\/\n$ du -sh .\n32M\t.\n<\/code><\/pre>\n\n\n\n<p>\u00c9videmment, c&rsquo;est pour seulement un mod\u00e8le de FPGA, mais cela reste beaucoup plus petit.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Clignotons<\/h2>\n\n\n\n<p>Il est temps de rentrer dans le vif du sujet et de faire clignoter les LED. L&rsquo;exemple donn\u00e9 dans le document <em>ug1002<\/em> est trop rapide pour voir les LED clignoter. Nous allons donc faire un clignoteur plus traditionnel comme visible ci-dessous en Verilog :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>`timescale 1ns \/ 1ps\n\nmodule blink(\n\t\tinput wire clk,\n\t\tinput wire rst,\n\t\toutput reg led\n\t);\n\n\tlocalparam MAX_COUNT = 10_000_000;\n\tlocalparam CNT_TOP = $clog2(MAX_COUNT);\n\n\twire i_clk;\n\treg &#91;CNT_TOP-1:0] counter;\n\n\tassign i_clk = clk;\n\n\talways @(posedge i_clk)\n\tbegin\n\t\tif (!rst) begin\n\t\t\tled &lt;= 0;\n\t\t\tcounter &lt;= 0;\n\t\tend else begin\n\t\t\tif(counter &lt; MAX_COUNT\/2)\n\t\t\t\tled &lt;= 1;\n\t\t\telse\n\t\t\t\tled &lt;= 0;\n\n\t\t\tif (counter &gt;= MAX_COUNT)\n\t\t\t\tcounter &lt;= 0;\n\t\t\telse\n\t\t\t\tcounter &lt;= counter + 1'b1;\n\t\tend\n\tend\n\nendmodule<\/code><\/pre>\n\n\n\n<p>Contrairement \u00e0 beaucoup de FPGA, le GateMate ne d\u00e9finit pas d&rsquo;\u00e9tats initial \u00e0 0 de ses registres. Une entr\u00e9e <em>reset<\/em> est donc n\u00e9cessaire.<\/p>\n\n\n\n<p>Le pinout est d\u00e9crit au moyen d&rsquo;un fichier \u00abccf\u00bb :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>## blink.ccf\n\nPin_in   \"clk\"  Loc = \"IO_SB_A8\" | SCHMITT_TRIGGER=true;\nPin_in   \"rst\"  Loc = \"IO_EB_B0\"; # SW3\nPin_out  \"led\"  Loc = \"IO_EB_B1\"; # D1<\/code><\/pre>\n\n\n\n<p>Une fois que ces deux fichiers sont pr\u00eat il suffit de lancer <em>yosys<\/em> pour la synth\u00e8se :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$ wine ..\/..\/cc-toolchain-win\/yosys-win32-mxebin-0.15+57\/yosys.exe -l yosys.log -p 'read_verilog blink.v; synth_gatemate -top blink -vlog blink_synth.v'<\/code><\/pre>\n\n\n\n<p>Wine g\u00e9n\u00e8re tout un tas d&rsquo;erreurs mais fini par nous lancer la synth\u00e8se tout de m\u00eame<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$ wine ..\/..\/cc-toolchain-win\/yosys-win32-mxebin-0.15+57\/yosys.exe -l yosys.log -p 'read_verilog blink.v; synth_gatemate -top blink -vlog blink_synth.v'\nwine: created the configuration directory '\/home\/oem\/.wine'\n0012:err:ole:marshal_object couldn't get IPSFactory buffer for interface {00000131-0000-0000-c000-000000000046}\n0012:err:ole:marshal_object couldn't get IPSFactory buffer for interface {6d5140c1-7436-11ce-8034-00aa006009fa}\n0012:err:ole:StdMarshalImpl_MarshalInterface Failed to create ifstub, hres=0x80004002\n0012:err:ole:CoMarshalInterface Failed to marshal the interface {6d5140c1-7436-11ce-8034-00aa006009fa}, 80004002\n0012:err:ole:get_local_server_stream Failed: 80004002\n0014:err:ole:marshal_object couldn't get IPSFactory buffer for interface {00000131-0000-0000-c000-000000000046}\n0014:err:ole:marshal_object couldn't get IPSFactory buffer for interface {6d5140c1-7436-11ce-8034-00aa006009fa}\n0014:err:ole:StdMarshalImpl_MarshalInterface Failed to create ifstub, hres=0x80004002\n0014:err:ole:CoMarshalInterface Failed to marshal the interface {6d5140c1-7436-11ce-8034-00aa006009fa}, 80004002\n0014:err:ole:get_local_server_stream Failed: 80004002\nCould not find Wine Gecko. HTML rendering will be disabled.\nCould not find Wine Gecko. HTML rendering will be disabled.\nwine: configuration in L\"\/home\/oem\/.wine\" has been updated.\n<\/code><\/pre>\n\n\n\n<p>On ne va pas recopier toute la trace de synth\u00e8se ici mais juste la partie ressources utilis\u00e9es donn\u00e9e en fin de synth\u00e8se :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>2.49. Printing statistics.\n\n=== blink ===\n\n   Number of wires:                 49\n   Number of wire bits:            294\n   Number of public wires:           5\n   Number of public wire bits:      28\n   Number of memories:               0\n   Number of memory bits:            0\n   Number of processes:              0\n   Number of cells:                159\n     CC_ADDF                        65\n     CC_BUFG                         1\n     CC_DFF                         25\n     CC_IBUF                         2\n     CC_LUT1                        24\n     CC_LUT2                         5\n     CC_LUT4                        36\n     CC_OBUF                         1\n\n2.50. Executing CHECK pass (checking for obvious problems).\nChecking module blink...\nFound and reported 0 problems.\n\n2.51. Executing OPT_CLEAN pass (remove unused cells and wires).\nFinding unused cells or wires in module \\blink..\n\n2.52. Executing Verilog backend.\n\n2.52.1. Executing BMUXMAP pass.\n\n2.52.2. Executing DEMUXMAP pass.\nDumping module `\\blink'.\n\nEnd of script. Logfile hash: dcf7a4084e\nYosys 0.15+57 (git sha1 207417617, i686-w64-mingw32.static-g++ 11.2.0 -Os)\nTime spent: 1% 19x opt_clean (0 sec), 1% 18x opt_expr (0 sec), ...<\/code><\/pre>\n\n\n\n<p>Le fichier de sortie<strong> blink_synth.v<\/strong> est au format &#8230; Verilog \u00e9galement! C&rsquo;\u00e9tait bien la peine de lancer <em>Yosys<\/em> tient !<\/p>\n\n\n\n<p>Mais non, Verilog est un excellent format pour d\u00e9crire une <a href=\"https:\/\/fr.wikipedia.org\/wiki\/Netlist\">netlist<\/a> autant que du <a href=\"https:\/\/fr.wikipedia.org\/wiki\/Register_Transfer_Level\">RTL<\/a>. Et de fait, le code Verilog g\u00e9n\u00e9r\u00e9 n&rsquo;est pas hyper lisible. Il est constitu\u00e9 d&rsquo;une s\u00e9rie d&rsquo;instanciations et de connections des primitives du FPGA :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/...\n \n CC_LUT2 #(\n    .INIT(4'h8)\n  ) _051_ (\n    .I0(_041_&#91;0]),\n    .I1(_041_&#91;1]),\n    .O(_043_&#91;2])\n  );\n  CC_LUT4 #(\n    .INIT(16'h0001)\n  ) _052_ (\n    .I0(counter&#91;15]),\n    .I1(counter&#91;20]),\n    .I2(counter&#91;23]),\n    .I3(counter&#91;13]),\n    .O(_041_&#91;0])\n  );\n\n\/\/...<\/code><\/pre>\n\n\n\n<p>Code qui reste parfaitement simulable avec <a href=\"http:\/\/iverilog.icarus.com\/\">Icarus<\/a> pour faire de la simulation post-synth\u00e8se comme expliqu\u00e9 dans la documentation officielle.<\/p>\n\n\n\n<p>Maintenant que nous avons notre <em>netlist<\/em> passons aux choses s\u00e9rieuses avec le placement routage :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$ wine ..\/..\/cc-toolchain-win\/p_r-2022.04-001\/p_r.exe -i blink_synth.v -o blink -lib ccag\nGateMate (c) Place and Route\nVersion 4.0 (4 April 2022)\nAll Rights Reserved (c) Cologne Chip AG\n\n...<\/code><\/pre>\n\n\n\n<p>Comme pour la synth\u00e8se, nous n&rsquo;allons pas mettre tous les messages ici. Une des information qui nous int\u00e9resse en priorit\u00e9 pour le placement routage est la performance en vitesse.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>...\nStatic Timing Analysis\nLongest Path from Q of Component 25_1 to D-Input of Component 33\/1 Delay: 18215 ps\nMaximum Clock Frequency on CLK 230\/3:   54.90 MHz\n...<\/code><\/pre>\n\n\n\n<p>La vitesse d&rsquo;horloge maximale est donc de<strong> 54.90Mhz<\/strong>. Cela peut sembler ridicule mais il faut prendre en compte que :<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>L&rsquo;architecture du \u00abclignoteur\u00bb avec un \u00e9norme compteur pour diviser l&rsquo;horloge n&rsquo;est absolument pas optimis\u00e9e. Pour faire bien il faudrait pipeliner le compteur mais \u00e7a n&rsquo;est pas le sujet ici. Ces mauvais r\u00e9sultats sont coh\u00e9rent avec ce qu&rsquo;on pourrait obtenir avec un autre FPGA&nbsp;\u00abmainstream\u00bb.<\/li><li>Ces performances sont \u00abconservatrice\u00bb c&rsquo;est le pire cas quand le FPGA est tr\u00e8s chaud.<\/li><\/ul>\n\n\n\n<p>Bref, pour faire clignoter une LED, on peut raisonnablement doubler cette fr\u00e9quence d&rsquo;horloge si on veut \ud83d\ude42 Mais comme nous n&rsquo;utilisons pas de PLL ici, la fr\u00e9quence d&rsquo;entr\u00e9e de 10Mhz rentre dans la specification.<\/p>\n\n\n\n<p>Les statistiques d&rsquo;utilisation du FPGA sont donn\u00e9es \u00e0 la fin de la synth\u00e8se :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>CPE_USAGE_INPUT - CPE_COMBSEQ         1\/8 :     0 \/     21   (  0.0%)\nCPE_USAGE_INPUT - CPE_COMBSEQ         2\/8 :    11 \/     21   ( 52.4%)\nCPE_USAGE_INPUT - CPE_COMBSEQ         3\/8 :     0 \/     21   (  0.0%)\nCPE_USAGE_INPUT - CPE_COMBSEQ         4\/8 :     0 \/     21   (  0.0%)\nCPE_USAGE_INPUT - CPE_COMBSEQ         5\/8 :     0 \/     21   (  0.0%)\nCPE_USAGE_INPUT - CPE_COMBSEQ         6\/8 :    10 \/     21   ( 47.6%)\nCPE_USAGE_INPUT - CPE_COMBSEQ         7\/8 :     0 \/     21   (  0.0%)\nCPE_USAGE_INPUT - CPE_COMBSEQ         8\/8 :     0 \/     21   (  0.0%)\n\nCPE_USAGE_INPUT - CPE_COMB            1\/8 :     3 \/      3   ( 100.0%)\nCPE_USAGE_INPUT - CPE_COMB            2\/8 :     0 \/      3   (  0.0%)\nCPE_USAGE_INPUT - CPE_COMB            3\/8 :     0 \/      3   (  0.0%)\nCPE_USAGE_INPUT - CPE_COMB            4\/8 :     0 \/      3   (  0.0%)\nCPE_USAGE_INPUT - CPE_COMB            5\/8 :     0 \/      3   (  0.0%)\nCPE_USAGE_INPUT - CPE_COMB            6\/8 :     0 \/      3   (  0.0%)\nCPE_USAGE_INPUT - CPE_COMB            7\/8 :     0 \/      3   (  0.0%)\nCPE_USAGE_INPUT - CPE_COMB            8\/8 :     0 \/      3   (  0.0%)\n\nCPE_USAGE_INPUT - CPE COMBSEQ+COMB    1\/8 :     3 \/     24   ( 12.5%)\nCPE_USAGE_INPUT - CPE COMBSEQ+COMB    2\/8 :    11 \/     24   ( 45.8%)\nCPE_USAGE_INPUT - CPE COMBSEQ+COMB    3\/8 :     0 \/     24   (  0.0%)\nCPE_USAGE_INPUT - CPE COMBSEQ+COMB    4\/8 :     0 \/     24   (  0.0%)\nCPE_USAGE_INPUT - CPE COMBSEQ+COMB    5\/8 :     0 \/     24   (  0.0%)\nCPE_USAGE_INPUT - CPE COMBSEQ+COMB    6\/8 :    10 \/     24   ( 41.7%)\nCPE_USAGE_INPUT - CPE COMBSEQ+COMB    7\/8 :     0 \/     24   (  0.0%)\nCPE_USAGE_INPUT - CPE COMBSEQ+COMB    8\/8 :     0 \/     24   (  0.0%)\n\nIO_USAGE                         :      3 \/   144    (  2.1%) of all IOs\nIO_USAGE_TYPE - IBF              :      2 \/   144    (  1.4%) of all IOs    ( 66.7%) of used IOs\nIO_USAGE_TYPE - OBF              :      1 \/   144    (  0.7%) of all IOs    ( 33.3%) of used IOs\nIO_USAGE_TYPE - TOBF             :      0 \/   144    (  0.0%) of all IOs    (  0.0%) of used IOs\nIO_USAGE_TYPE - IOBF             :      0 \/   144    (  0.0%) of all IOs    (  0.0%) of used IOs\n\nCPE_USAGE_PHYS - CPE_COMB_ONLY   :     73 \/ 20480    (  0.4%) of all CPEs   ( 60.3%) of occupied CPEs\nCPE_USAGE_PHYS - CPE_SEQ_ONLY    :      5 \/ 20480    (  0.0%) of all CPEs   (  4.1%) of occupied CPEs\nCPE_USAGE_PHYS - CPE_BRIDGE_ONLY :      0 \/ 20480    (  0.0%) of all CPEs   (  0.0%) of occupied CPEs\nCPE_USAGE_PHYS - CPE_CARRY_ONLY  :      0 \/ 20480    (  0.0%) of all CPEs   (  0.0%) of occupied CPEs\nCPE_USAGE_PHYS - CPE_COMB+SEQ    :     10 \/ 20480    (  0.0%) of all CPEs   (  8.3%) of occupied CPEs\nCPE_USAGE_PHYS - CPE_COMB+BRIDGE :      0 \/ 20480    (  0.0%) of all CPEs   (  0.0%) of occupied CPEs\nCPE_USAGE_PHYS - CPE_COMBSEQ     :     21 \/ 20480    (  0.1%) of all CPEs   ( 17.4%) of occupied CPEs\n\nCPE_USAGE_LOGIC - CPE_COMB       :      8 \/ 20480    (  0.0%) of all CPEs   (  6.6%) of occupied CPEs\nCPE_USAGE_LOGIC - CPE_SEQ        :     15 \/ 20480    (  0.1%) of all CPEs   ( 12.4%) of occupied CPEs\nCPE_USAGE_LOGIC - CPE_COMBSEQ    :     21 \/ 20480    (  0.1%) of all CPEs   ( 17.4%) of occupied CPEs\nCPE_USAGE_LOGIC - CPE_BRIDGE     :      0 \/ 20480    (  0.0%) of all CPEs   (  0.0%) of occupied CPEs\n\nCPE_USAGE_OVERALL                :    121 \/ 20480    (  0.6%) of all CPEs occupied\nCPE_USAGE_LOGIC                  :     94 \/ 20480    (  0.5%) of all CPEs used for customer logic\n\nComponent Statistics:\n         AND        32        19%\n        ADDF         2         1%\n       ADDF2        60        37%\n        C_OR        48        29%\n      Route1         4         2%\n    CP_route        15         9%\n              --------\nSum of COMB:       161\n\n           D        25        92%\n       C_0_1         2         7%\n              --------\nSum of SEQ:         27\n\nSum of all:        188\n\n<\/code><\/pre>\n\n\n\n<p>Et le bitstream g\u00e9n\u00e9r\u00e9 est au format *.cfg (ascii) ou *.cfg.bit (binaire). <\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$ ls -lha blink_00.*\n-rw-rw-r-- 1 oem oem 121K May  1 08:38 blink_00.cdf\n-rw-rw-r-- 1 oem oem 1.4M May  1 08:38 blink_00.cfg\n-rw-rw-r-- 1 oem oem  48K May  1 08:38 blink_00.cfg.bit\n-rw-rw-r-- 1 oem oem  465 May  1 08:38 blink_00.pin\n-rw-rw-r-- 1 oem oem 6.0K May  1 08:38 blink_00.place\n-rw-rw-r-- 1 oem oem  65K May  1 08:38 blink_00.SDF\n-rw-rw-r-- 1 oem oem  42K May  1 08:38 blink_00.used\n-rw-rw-r-- 1 oem oem  79K May  1 08:38 blink_00.V\n<\/code><\/pre>\n\n\n\n<p>Pour configurer le FPGA nous utiliserons openFPGALoader en \u00abnatif\u00bb :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$ openFPGALoader -b gatemate_evb_jtag blink_00.cfg.bit\nJtag frequency : requested 6.00MHz   -&gt; real 6.00MHz  \nLoad SRAM via JTAG: &#91;==================================================] 100.00%\nDone\nWait for CFG_DONE DONE\n<\/code><\/pre>\n\n\n\n<p>Et la LED clignote :<\/p>\n\n\n\n<iframe loading=\"lazy\" src=\"https:\/\/www.youtube.com\/embed\/mYfb-Bhzhe4\" title=\"YouTube video player\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\" width=\"560\" height=\"315\" frameborder=\"0\"><\/iframe>\n\n\n\n<h2 class=\"wp-block-heading\">Ressources<\/h2>\n\n\n\n<ul class=\"wp-block-list\"><li><a href=\"https:\/\/www.colognechip.com\/programmable-logic\/gatemate-evaluation-board\/\">la page officielle de la carte de d\u00e9veloppement<\/a><\/li><li><a href=\"https:\/\/colognechip.com\/docs\/ds1003-gatemate1-evalboard-3v1-latest.pdf\">le sch\u00e9ma de la carte<\/a><\/li><li><a href=\"https:\/\/www.colognechip.com\/docs\/ug1002-toolchain-install-latest.pdf\">Guide des outils de d\u00e9veloppement<\/a><\/li><\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Nous l&rsquo;attendions depuis au moins deux ans, le FPGA europ\u00e9en GateMate des allemands de CologneChip est d\u00e9sormais disponible dans votre cr\u00e9merie habituelle. La dimension europ\u00e9enne de ce FPGA n&rsquo;est pas la seule nouveaut\u00e9, c&rsquo;est \u00e9galement un des premier (mais pas le premier) \u00e0 privil\u00e9gier les outils open source pour son utilisation. Que cela soit pour &hellip; <a href=\"http:\/\/www.fabienm.eu\/flf\/decouverte-du-fpga-europeen-le-gatemate-de-colognechip\/\" class=\"more-link\">Continuer la lecture de <span class=\"screen-reader-text\">D\u00e9couverte du FPGA europ\u00e9en, le GateMate de CologneChip<\/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":[218,219,217,31,30,45],"class_list":["post-2027","post","type-post","status-publish","format-standard","hentry","category-non-classe","tag-colognechip","tag-europe","tag-gatemate","tag-icarus","tag-verilog","tag-yosys"],"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":2,"uagb_excerpt":"Nous l&rsquo;attendions depuis au moins deux ans, le FPGA europ\u00e9en GateMate des allemands de CologneChip est d\u00e9sormais disponible dans votre cr\u00e9merie habituelle. La dimension europ\u00e9enne de ce FPGA n&rsquo;est pas la seule nouveaut\u00e9, c&rsquo;est \u00e9galement un des premier (mais pas le premier) \u00e0 privil\u00e9gier les outils open source pour son utilisation. Que cela soit pour\u2026","_links":{"self":[{"href":"http:\/\/www.fabienm.eu\/flf\/wp-json\/wp\/v2\/posts\/2027","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=2027"}],"version-history":[{"count":22,"href":"http:\/\/www.fabienm.eu\/flf\/wp-json\/wp\/v2\/posts\/2027\/revisions"}],"predecessor-version":[{"id":2102,"href":"http:\/\/www.fabienm.eu\/flf\/wp-json\/wp\/v2\/posts\/2027\/revisions\/2102"}],"wp:attachment":[{"href":"http:\/\/www.fabienm.eu\/flf\/wp-json\/wp\/v2\/media?parent=2027"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.fabienm.eu\/flf\/wp-json\/wp\/v2\/categories?post=2027"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.fabienm.eu\/flf\/wp-json\/wp\/v2\/tags?post=2027"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}