URL: https://linuxfr.org/news/sortie-de-cocotb-version-2-0-0 Title: Sortie de Cocotb version 2.0.0 Authors: martoni BAud, jtremesay et Ysabeau đŸ§¶ Date: 2025ćčŽ09月16æ—„T15:08:48+02:00 License: CC By-SA Tags: cocotb Score: 27 [Cocotb](https://www.cocotb.org/), le cadriciel libre de vĂ©rification matĂ©rielle en Python, vient de publier sa version majeure **2.0**. Cette sortie marque une Ă©tape importante dans l’évolution de ce projet qui permet de tester des circuits numĂ©riques dĂ©crits en VHDL ou Verilog directement depuis Python, sans avoir Ă  Ă©crire de testbench en HDL. Pour celles et ceux qui ne connaissent pas encore cocotb, il s’agit d’un outil qui facilite grandement la vie des personnes travaillant sur la conception de circuits intĂ©grĂ©s. PlutĂŽt que d’écrire des bancs de test complexes en VHDL ou Verilog, cocotb permet d’utiliser Python et son Ă©cosystĂšme riche (NumPy, pytest, etc.) pour vĂ©rifier le comportement des circuits. Cocotb (**Co**routines-based **Co**simulation **T**est-**B**ench) permet d’écrire en python des bancs de test qui vont piloter directement le simulateur HDL via diffĂ©rentes interfaces (VPI, VHPI, FLI). La plupart des simulateurs HDL du marchĂ© sont supportĂ©s, qu’ils soient libres ou non. ![Logo cocotb](https://raw.githubusercontent.com/cocotb/cocotb/0376b44bc1e03dfa576d380b61c4a07a1ebcfc27/docs/source/_static/cocotb-logo.svg) ---- [Release note](https://docs.cocotb.org/en/v2.0.0/release_notes.html) [PrĂ©cĂ©dente dĂ©pĂȘche sur linuxfr (version 1.4.0)](https://linuxfr.org/news/cocotb-1-4-0-la-maturite) ---- # Une version majeure synonyme de changements Comme l’indique le numĂ©ro de version, cocotb 2.0 introduit des changements incompatibles avec les versions prĂ©cĂ©dentes. L’équipe de dĂ©veloppement a profitĂ© de cette version majeure pour nettoyer l’API, supprimer du code obsolĂšte et moderniser l’architecture du projet. Un [guide de migration](https://docs.cocotb.org/en/stable/upgrade-2.0.html) dĂ©taillĂ© est disponible pour accompagner la transition. ## Principales ruptures de compatibilitĂ© La transition vers cocotb 2.0 nĂ©cessite quelques adaptations du code existant : - **Suppression des coroutines Ă  base de gĂ©nĂ©rateurs** : La syntaxe `yield` (avec le dĂ©corateur `@cocotb.coroutine`) a Ă©tĂ© supprimĂ©e. Il faut dĂ©sormais utiliser exclusivement la syntaxe moderne `async`/`await`. - **Nouvelles conventions de nommage** : Les variables d’environnement ont Ă©tĂ© renommĂ©es pour Ă©viter les conflits avec les simulateurs. Par exemple, `MODULE` devient `COCOTB_TEST_MODULES`, `TOPLEVEL` devient `COCOTB_TOPLEVEL`, etc. - **Changements dans les types de donnĂ©es** : Les objets `BinaryValue` ont Ă©tĂ© remplacĂ©s par `LogicArray`, offrant une API plus cohĂ©rente et moderne pour manipuler les valeurs logiques. - **Modifications des dĂ©clencheurs** : L’objet `Join` est devenu obsolĂšte au profit d’une utilisation directe des tĂąches. La syntaxe `await task.join()` devient simplement `await task`. # Les nouveautĂ©s marquantes ## AmĂ©lioration des performances La nouvelle version apporte des gains de performance significatifs, notamment grĂące Ă  l’implĂ©mentation en C++ d’un gĂ©nĂ©rateur d’horloge (`GpiClock`). Cette optimisation rĂ©duit les Ă©changes entre Python et l’interface GPI, permettant des simulations plus rapides, particuliĂšrement pour les designs utilisant de nombreuses horloges. ## Prise en charge Ă©tendue des simulateurs Cocotb 2.0 Ă©largit sa prise en charge des simulateurs commerciaux et libres : - **DSim** (Siemens) est maintenant officiellement gĂ©rĂ© - **Questa** bĂ©nĂ©ficie d’un nouveau flux de compilation `qisqrun` utilisant le Questa Information System pour de meilleures performances - **NVC**, le simulateur VHDL libre, est dĂ©sormais gĂ©rĂ© - **Verilator** (version 5.036 minimum) avec le flag `--timing` est maintenant pleinement fonctionnel ## Gestion amĂ©liorĂ©e des tĂąches L’API de gestion des tĂąches a Ă©tĂ© modernisĂ©e pour s’aligner sur celle d’asyncio` : ```python # Nouvelle fonction pour dĂ©marrer une tĂąche cocotb.start_soon(ma_coroutine()) # Nouveau dĂ©clencheur pour attendre la fin d’une tĂąche await task.complete # au lieu de await Join(task) # Annulation de tĂąches task.cancel() # au lieu de task.kill() # Variables locales aux tĂąches task.locals.ma_variable = valeur ``` ## Nouvelles fonctionnalitĂ©s pour les signaux Cocotb 2.0 enrichit les possibilitĂ©s d’interaction avec les signaux HDL : - **DĂ©pĂŽts sans dĂ©lai** : La classe `Immediate` permet d’effectuer des assignations immĂ©diates - **Nouvelle mĂ©thode `set()`** : Une alternative Ă  la propriĂ©tĂ© `value` avec un typage plus strict - **Gestion Ă©tendue des actions** : `Force`, `Freeze`, `Release` et `Deposit` pour un contrĂŽle fin des signaux ```python # DiffĂ©rents types d’assignations dut.signal.set(42) # Assignation normale dut.signal.set(42, Immediate()) # Assignation immĂ©diate dut.signal.set(42, Force()) # Forcer une valeur dut.signal.set(Release()) # LibĂ©rer un signal forcĂ© ``` ## AmĂ©liorations du typage Cocotb 2.0 intĂšgre maintenant `mypy` dans son processus de CI, garantissant une meilleure qualitĂ© du typage. Les utilisateurs bĂ©nĂ©ficient ainsi d’une meilleure expĂ©rience avec les IDE modernes et les vĂ©rificateurs de types. ## DĂ©corateur `@cocotb.parametrize` Un nouveau dĂ©corateur simplifie la crĂ©ation de tests paramĂ©trĂ©s, offrant une alternative plus moderne Ă  `TestFactory` : ```python @cocotb.parametrize( width=[8, 16, 32], signed=[True, False] ) @cocotb.test() async def test_additionneur(dut, width, signed): # Test avec diffĂ©rentes combinaisons de paramĂštres pass ``` ## Gestion du logging amĂ©liorĂ©e Le systĂšme de logging a Ă©tĂ© revu pour ĂȘtre moins intrusif : - Nouvelle variable `COCOTB_LOG_PREFIX` pour personnaliser le prĂ©fixe des logs - SĂ©paration des niveaux de log pour GPI avec `GPI_LOG_LEVEL` - Meilleure gestion de la capture des _warnings_ Python - _Timestamps_ de simulation accessibles dans les `LogRecord` # Nouvelles structures de donnĂ©es La version 2.0 enrichit considĂ©rablement le module `cocotb.types` : - **`LogicArray`** : ReprĂ©sentation des tableaux de valeurs logiques avec gestion des Ă©tats `X`, `Z`, etc. - **`Logic`** : Valeur logique unique avec gestion des 9 Ă©tats VHDL - **MĂ©thodes de conversion** : `to_signed()`, `to_unsigned()`, `to_bytes()`, `from_bytes()` pour faciliter les conversions ```python from cocotb.types import LogicArray, Range # CrĂ©ation d’un tableau logique data = LogicArray("10XZ01", Range(5, "downto", 0)) # Conversions valeur_entier = data.to_unsigned(resolve=True) octets = data.to_bytes() ``` # AmĂ©liorations de l’écosystĂšme ## Flux de test en Python Le flux de test Python (Python Test Runner), introduit expĂ©rimentalement en version 1.8, est maintenant mature et constitue l’alternative recommandĂ©e au systĂšme de Makefile traditionnel. Il permet une intĂ©gration plus naturelle avec pytest et simplifie la configuration des simulations. ## Queues asyncio Cocotb 2.0 introduit des files d’attente compatibles avec asyncio (`Queue`, `PriorityQueue`, `LifoQueue`), facilitant la communication entre coroutines. ## Gestion des _packages_ SystemVerilog L’accĂšs aux _packages_ SystemVerilog est maintenant possible via `cocotb.packages`, permettant d’interagir avec les dĂ©finitions globales du design. # ConsidĂ©rations sur l’adoption Cette version majeure reprĂ©sente un investissement consĂ©quent de l’équipe de dĂ©veloppement. Pour les utilisatrices et utilisateurs existants, la migration nĂ©cessitera quelques ajustements, mais les bĂ©nĂ©fices en termes de maintenabilitĂ© et de performances en valent la peine. Le projet cocotb, dĂ©veloppĂ© principalement par la communautĂ© et utilisĂ© dans l’industrie comme dans l’enseignement, continue de dĂ©montrer la pertinence de l’approche Python pour la vĂ©rification matĂ©rielle. Cette version 2.0 consolide les bases pour les Ă©volutions futures. Pour les personnes qui dĂ©butent avec cocotb, c’est le moment idĂ©al pour se lancer : la documentation a Ă©tĂ© revue, les exemples mis Ă  jour, et l’API est dĂ©sormais plus cohĂ©rente. # Remerciements et perspectives Cette version est le fruit du travail de nombreuses personnes contributrices. Le projet est hĂ©bergĂ© sur GitHub et accepte volontiers les contributions, qu’il s’agisse de code, de documentation ou de retours d’expĂ©rience. Les prochaines versions devraient continuer Ă  amĂ©liorer les performances, Ă©tendre la prise en charge des simulateurs et enrichir l’écosystĂšme de bibliothĂšques de vĂ©rification. La communautĂ© cocotb est active et accueillante, n’hĂ©sitez pas Ă  la rejoindre !

AltStyle ă«ă‚ˆăŁăŠć€‰æ›ă•ă‚ŒăŸăƒšăƒŒă‚ž (->ă‚ȘăƒȘă‚žăƒŠăƒ«) /