{"id":2374,"date":"2024-01-18T22:00:10","date_gmt":"2024-01-18T21:00:10","guid":{"rendered":"http:\/\/www.fabienm.eu\/flf\/?p=2374"},"modified":"2024-01-19T14:05:30","modified_gmt":"2024-01-19T13:05:30","slug":"quickfeather-eos-s3-logic-cell-pp3","status":"publish","type":"post","link":"https:\/\/www.fabienm.eu\/flf\/quickfeather-eos-s3-logic-cell-pp3\/","title":{"rendered":"Quickfeather eos s3 logic cell (pp3)"},"content":{"rendered":"\n<p>Quand on utilise la suite <a href=\"https:\/\/github.com\/SymbiFlow\">symbiflow<\/a> pour synth\u00e9tiser un projet sur le eFPGA (pp3) de la quickfeather on tombe sur des nom \u00e9tranges de cellule logique.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Circuit Statistics:\n  Blocks: 65\n    .output   :       3\n    ASSP      :       1\n    BIDIR_CELL:       3\n    C_FRAG    :       7\n    F_FRAG    :       1\n    GND       :       1\n    Q_FRAG    :      22\n    T_FRAG    :      26\n    VCC       :       1<\/code><\/pre>\n\n\n\n<p>\u00c0 quoi correspondent les blocks <code>C_FRAG<\/code>, T_FRAG, <code>ASSP<\/code>, &#8230; ?<\/p>\n\n\n\n<p>Et il est assez compliqu\u00e9 de trouver la documentation correspondante. On retrouve une description en Verilog de ces blocs dans le r\u00e9pertoire suivant du SDK :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$ ls qorc-sdk\/fpga_toolchain_install\/v1.3.1\/quicklogic-arch-defs\/share\/techmaps\/quicklogic\/pp3\/techmap\/\ncells_map.v  cells_sim.v  lut2tomux2.v  lut2tomux4.v  lut3tomux2.v  mux4tomux2.v  mux8tomux2.v<\/code><\/pre>\n\n\n\n<p>Et plus particuli\u00e8rement dans le fichier source <code>cells_map.v<\/code> qui semble d\u00e9crire au moyen de plusieurs \u00abFRAG\u00bbment de module le sch\u00e9ma de la figure 36 de la <a href=\"https:\/\/www.quicklogic.com\/wp-content\/uploads\/2020\/12\/QL-EOS-S3-Ultra-Low-Power-multicore-MCU-Datasheet-2020.pdf\">datashee<\/a>t (page 60).<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"http:\/\/www.fabienm.eu\/flf\/wp-content\/uploads\/2024\/01\/Capture-decran-du-2024-01-18-20-28-04.png\"><img loading=\"lazy\" decoding=\"async\" width=\"749\" height=\"1024\" src=\"http:\/\/www.fabienm.eu\/flf\/wp-content\/uploads\/2024\/01\/Capture-decran-du-2024-01-18-20-28-04-749x1024.png\" alt=\"\" class=\"wp-image-2377\" srcset=\"https:\/\/www.fabienm.eu\/flf\/wp-content\/uploads\/2024\/01\/Capture-decran-du-2024-01-18-20-28-04-749x1024.png 749w, https:\/\/www.fabienm.eu\/flf\/wp-content\/uploads\/2024\/01\/Capture-decran-du-2024-01-18-20-28-04-219x300.png 219w, https:\/\/www.fabienm.eu\/flf\/wp-content\/uploads\/2024\/01\/Capture-decran-du-2024-01-18-20-28-04-768x1050.png 768w, https:\/\/www.fabienm.eu\/flf\/wp-content\/uploads\/2024\/01\/Capture-decran-du-2024-01-18-20-28-04.png 900w\" sizes=\"auto, (max-width: 749px) 100vw, 749px\" \/><\/a><figcaption class=\"wp-element-caption\">Le sch\u00e9ma d&rsquo;une \u00abLogic Cell Block\u00bb trouv\u00e9 dans la datasheet<\/figcaption><\/figure>\n\n\n\n<p>En lisant le code du fichier <code>cells_sim.v<\/code> on trouve les relations suivantes dans le sch\u00e9ma.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"http:\/\/www.fabienm.eu\/flf\/wp-content\/uploads\/2024\/01\/quickfeather_eoss3_pp3_logic_cell_X_FRAG-scaled.jpg\"><img loading=\"lazy\" decoding=\"async\" width=\"766\" height=\"1024\" src=\"http:\/\/www.fabienm.eu\/flf\/wp-content\/uploads\/2024\/01\/quickfeather_eoss3_pp3_logic_cell_X_FRAG-766x1024.jpg\" alt=\"\" class=\"wp-image-2380\" srcset=\"https:\/\/www.fabienm.eu\/flf\/wp-content\/uploads\/2024\/01\/quickfeather_eoss3_pp3_logic_cell_X_FRAG-766x1024.jpg 766w, https:\/\/www.fabienm.eu\/flf\/wp-content\/uploads\/2024\/01\/quickfeather_eoss3_pp3_logic_cell_X_FRAG-224x300.jpg 224w, https:\/\/www.fabienm.eu\/flf\/wp-content\/uploads\/2024\/01\/quickfeather_eoss3_pp3_logic_cell_X_FRAG-768x1027.jpg 768w, https:\/\/www.fabienm.eu\/flf\/wp-content\/uploads\/2024\/01\/quickfeather_eoss3_pp3_logic_cell_X_FRAG-1149x1536.jpg 1149w, https:\/\/www.fabienm.eu\/flf\/wp-content\/uploads\/2024\/01\/quickfeather_eoss3_pp3_logic_cell_X_FRAG-1532x2048.jpg 1532w, https:\/\/www.fabienm.eu\/flf\/wp-content\/uploads\/2024\/01\/quickfeather_eoss3_pp3_logic_cell_X_FRAG-scaled.jpg 1915w\" sizes=\"auto, (max-width: 766px) 100vw, 766px\" \/><\/a><figcaption class=\"wp-element-caption\">Annotation du sch\u00e9ma de cellule logique \u00e0 partir du fichier cells_sim.v<\/figcaption><\/figure>\n\n\n\n<p>Les nom de signaux <code>QDI<\/code> et <code>QDS<\/code> ne se trouvent pas dans le fichier source, ils sont li\u00e9s au multiplexeur situ\u00e9 devant la bascule D <code>Q_FRAG<\/code> et semble correspondre aux constantes <code>CONST0<\/code> et <code>CONST1<\/code> que l&rsquo;on trouve dans les sources.<\/p>\n\n\n\n<p>Pour les fragments <code>T_FRAG<\/code> et <code>B_FRAG<\/code> c&rsquo;est moins clair en se servant du nom des signaux mais ils semblent li\u00e9s \u00e0 des bits de configuration que l&rsquo;on trouve \u00e0 gauche du sch\u00e9ma (BAS, BBS, TAS, &#8230;)<\/p>\n\n\n\n<p>On imagine ais\u00e9ment que le <code>FRAG<\/code> correspond \u00e0 Fragment mais les lettres pr\u00e9fixes sont moins claires.<\/p>\n\n\n\n<p>Si on fait la liste des noms de block donn\u00e9s au d\u00e9but on a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>ASSP<\/strong>: celui l\u00e0 est plus clair. C&rsquo;est le bloc qui assure la communication avec le microcontrolleur, avec les diff\u00e9rents signaux de bus (Wishbone, SPI, &#8230;) ainsi que l&rsquo;horloge, et autres signaux de contr\u00f4les.<\/li>\n\n\n\n<li><strong>BIDIR_CELL<\/strong>: \u00c7a c&rsquo;est un buffer d&rsquo;entr\u00e9e sortie `iopad`<\/li>\n\n\n\n<li><strong>C_FRAG<\/strong>: Cet enchev\u00eatrement de multiplexeurs ressemble fort \u00e0 une LUT avec une sortie retenue (C pour Carry).<\/li>\n\n\n\n<li><strong>F_FRAG<\/strong>: L\u00e0 on a affaire \u00e0 un simple multiplexeur deux entr\u00e9es, pour faciliter le routage (routage rapide ?)<\/li>\n\n\n\n<li><strong>GND<\/strong>: bon bin &#8230; la masse quoi (mais qu&rsquo;est-ce que \u00e7a vient faire l\u00e0 ?)<\/li>\n\n\n\n<li><strong>Q_FRAG<\/strong>: Q pour la sortie de la bascule D Flip flop.<\/li>\n\n\n\n<li><strong>T_FRAG<\/strong>: ?<\/li>\n\n\n\n<li><strong>VCC<\/strong>: L&rsquo;alim, &#8230;<\/li>\n\n\n\n<li><strong>B_FRAG<\/strong>: celui l\u00e0 n&rsquo;est pas dans le rapport de routage mais se trouve dans le code verilog, il ressemble \u00e0 T_FRAG.<\/li>\n<\/ul>\n\n\n\n<p>Tout cela n&rsquo;est pas parfaitement claire.<\/p>\n\n\n\n<p>Et surtout on aurait aim\u00e9 avoir un sch\u00e9ma d&rsquo;architecture du eFPGA comme on peut le voir dans les datasheet des autres constructeur. Avec l&rsquo;alignement des diff\u00e9rentes cellule et une description graphique des entr\u00e9es sorties.<\/p>\n\n\n\n<p>C&rsquo;\u00e9tait juste une prise de note (susceptible d&rsquo;\u00e9voluer comme d&rsquo;habitude) pour tenter de comprendre ce FPGA \u00e0 la documentation pas tr\u00e8s claire.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">[Edit 2024\/01\/19] <\/h2>\n\n\n\n<p>J&rsquo;ai eu <a href=\"https:\/\/forum.quicklogic.com\/viewtopic.php?p=1083#p1083\">des r\u00e9ponses sur le site officiel \\o\/<\/a> Il y a plus de d\u00e9tails du coup. Je vais pouvoir continuer mes investigations.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Quand on utilise la suite symbiflow pour synth\u00e9tiser un projet sur le eFPGA (pp3) de la quickfeather on tombe sur des nom \u00e9tranges de cellule logique. \u00c0 quoi correspondent les blocks C_FRAG, T_FRAG, ASSP, &#8230; ? Et il est assez compliqu\u00e9 de trouver la documentation correspondante. On retrouve une description en Verilog de ces blocs &hellip; <a href=\"https:\/\/www.fabienm.eu\/flf\/quickfeather-eos-s3-logic-cell-pp3\/\" class=\"more-link\">Continuer la lecture de <span class=\"screen-reader-text\">Quickfeather eos s3 logic cell (pp3)<\/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":[245,247,246,183],"class_list":["post-2374","post","type-post","status-publish","format-standard","hentry","category-non-classe","tag-eos_s3","tag-pp3","tag-quickfeather","tag-symbiflow"],"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":"https:\/\/www.fabienm.eu\/flf\/author\/admin\/"},"uagb_comment_info":0,"uagb_excerpt":"Quand on utilise la suite symbiflow pour synth\u00e9tiser un projet sur le eFPGA (pp3) de la quickfeather on tombe sur des nom \u00e9tranges de cellule logique. \u00c0 quoi correspondent les blocks C_FRAG, T_FRAG, ASSP, &#8230; ? Et il est assez compliqu\u00e9 de trouver la documentation correspondante. On retrouve une description en Verilog de ces blocs\u2026","_links":{"self":[{"href":"https:\/\/www.fabienm.eu\/flf\/wp-json\/wp\/v2\/posts\/2374","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.fabienm.eu\/flf\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.fabienm.eu\/flf\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.fabienm.eu\/flf\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.fabienm.eu\/flf\/wp-json\/wp\/v2\/comments?post=2374"}],"version-history":[{"count":11,"href":"https:\/\/www.fabienm.eu\/flf\/wp-json\/wp\/v2\/posts\/2374\/revisions"}],"predecessor-version":[{"id":2387,"href":"https:\/\/www.fabienm.eu\/flf\/wp-json\/wp\/v2\/posts\/2374\/revisions\/2387"}],"wp:attachment":[{"href":"https:\/\/www.fabienm.eu\/flf\/wp-json\/wp\/v2\/media?parent=2374"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.fabienm.eu\/flf\/wp-json\/wp\/v2\/categories?post=2374"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.fabienm.eu\/flf\/wp-json\/wp\/v2\/tags?post=2374"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}