Paramètres Virtuoso – boucle fermée
Responsable de la modification des paramètres, de l'analyse de sensibilité et de l'optimisation en boucle fermée des circuits existants. Par défaut, après chaque tour de simulation, l'agent ChatGPT/Codex actuel analyse les résultats et décide du prochain jeu de paramètres ; aucun balayage complet W1×W2×… n'est généré par défaut. La sortie fournit « les meilleurs paramètres vérifiés dans la plage et le budget impartis », sans garantie d'optimalité globale. La conception topologique du circuit et la création de nouvelles plateformes de test ne font pas partie de ce domaine de compétence.
Avant de commencer
- Lisez les conventions de plateforme, puis lisez la configuration partagée locale selon le protocole d'environnement ; utilisez virtuoso-connect pour toute connexion. L'interpréteur, le périmètre de travail, le PDK et les chemins sont tous extraits de la configuration.
- Définissez clairement le DUT/TB, les mesures, les objectifs, les contraintes, les unités/bornes/pas légaux des paramètres, les coins et le budget d'évaluation. Si vous pouvez les déduire de la documentation du projet, compilez-les d'abord ; si des objectifs ou bornes manquants peuvent altérer les résultats, demandez à l'utilisateur tout en lisant la conception existante.
- Sauvegardez les paramètres d'origine et une série de résultats de base. Si le banc de test est incomplet, confiez-le d'abord à virtuoso-testbench, puis poursuivez l'optimisation après avoir bouclé les mesures.
Paramètres et évaluation
- Utilisez de préférence les variables ADE ou les netlists paramétrées existantes pour éviter de reconstruire le circuit à chaque candidat. Pour modifier directement les CDF MOS, lisez parameter-editing.md.
- Évaluez tous les candidats avec la même configuration et les mêmes coins ; sauvegardez les paramètres avant chaque run et attribuez un répertoire et un identifiant indépendants à chaque tour. Lors de la lecture des résultats, liez explicitement l'historique, le test, le coin/point.
- Utilisez les définitions de mesures ADE/OCEAN existantes ; en particulier, la marge de phase doit provenir d'une mesure de boucle appropriée – ne prenez pas automatiquement la phase d'une tension de sortie quelconque comme PM.
- Les machines locales ont vérifié que SKILL/ADE peut modifier les variables et lancer des runs, et que des processus OCEAN indépendants peuvent lire des PSF spécifiques et des métriques JSON pour les renvoyer au moteur de recherche. Suivez le flux OCEAN-SKILL, conservez tous les identifiants de run et les journaux.
- Une simulation échouée, une métrique manquante, une valeur non finie ou un historique de résultats incohérent constituent une évaluation invalide, à ne pas traiter comme un score élevé ou nul.
- Pour les multi-coins, prenez la valeur la plus défavorable selon les conventions de métriques ; les coins non exécutés sont marqués comme non vérifiés. La faisabilité des contraintes prime sur l'amélioration des performances ; n'utilisez pas de moyennes pour masquer les points violés.
Recherche et arrêt
Suivez la stratégie décrite dans adaptive-loop.md :
- Boucle fermée par défaut avec agent : l'agent lit le circuit, le point de fonctionnement, les métriques courantes et historiques, diagnostique les limitations principales, explique l'hypothèse et la justification du prochain jeu de paramètres, puis exécute uniquement ce jeu. Le script iterate_params.py intégré ne lance qu'une seule évaluation par tour et rend la main à l'agent ; l'agent raisonne par lui-même, sans nécessiter de client API Claude/Gemini/OpenAI supplémentaire.
- Boucle fermée bayésienne ou hybride : le script bayes_suggest.py utilise toutes les observations valides terminées pour réajuster un processus gaussien, privilégie la probabilité de faisabilité et l'amélioration espérée sous contrainte, et ne propose qu'un nouveau point. L'agent peut vérifier la validité des dispositifs, la symétrie et les hypothèses du circuit avant d'accepter ou de réviser. Les prédictions ne comptent pas comme des mesures réelles ; un petit nombre d'essais initiaux ne constitue pas un balayage complet.
- Balayage explicite ou recherche ancienne : utilisés uniquement lorsque l'utilisateur demande des courbes, un diagnostic local de sensibilité ou une exploration exhaustive d'un petit domaine discret ; search_params.py est conservé comme entrée de compatibilité pour une exploration par grille ou aléatoire locale – ne pas l'appeler raisonnement IA ou optimisation bayésienne.
Les deux boucles fermées par défaut partagent le projet adapter, la simulation réelle et le contrat de journalisation définis dans optimization.md. Il est possible de changer de stratégie tout en conservant le même historique. Des backends spécialisés comme BoTorch/TuRBO peuvent remplacer la couche de proposition après installation et vérification ; cette suite n'a actuellement ni installé ni testé ces backends – ne recopiez pas d'exemples Maestro non vérifiés issus d'anciens optimiseurs.
Respectez le budget de simulation/temps donné par l'utilisateur ; s'il n'est pas spécifié, déclarez un budget fini adapté à la tâche. Corrigez les erreurs de configuration répétées avant de chercher ; n'avancez pas par des tentatives infinies. Si le budget est épuisé, qu'aucun point viable n'est trouvé ou que les mesures ne peuvent être établies, livrez les preuves actuelles et le goulot d'étranglement.
Livrables
Relancez le candidat indépendamment et vérifiez les contraintes, puis fournissez : les paramètres d'origine et les meilleurs paramètres, les métriques de base et de la relance, la configuration des mesures, les coins, le nombre d'évaluations et les preuves brutes. Ne confondez pas les prédictions proxy de l'optimiseur avec des mesures réelles. Lorsque l'utilisateur demande d'appliquer les paramètres, écrivez-les et relisez-les selon l'autorisation existante ; pour une simple exploration, conservez la conception de base et les enregistrements des candidats.
Lorsque le schéma est éditable, étiquetez de manière permanente les dimensions réellement recommandées et validées par la contre-vérification indépendante à côté du circuit, avec le titre Recommended (verified), incluant l'unité, les conditions/métriques clés, la date et le test/historique final ; suivez les conventions de dessin et d'annotation pour sauvegarder et relire. Conservez les expressions paramétrées des dispositifs ; les annotations de recommandation ne remplacent pas les variables ADE. Les optimisations ultérieures mettent à jour la même annotation gérée par l'agent ; lorsque les conditions changent, précisez clairement que l'ancien enregistrement est un résultat historique et ne peut être qualifié de paramètre actuel vérifié. Si aucun point viable n'est trouvé, n'étiquetez pas de recommandation.
Le flux de travail de l'utilisateur exige par défaut une livraison visuelle : réécrivez les meilleurs paramètres viables dans ADE et relisez-les, relancez indépendamment avec ces paramètres ; ouvrez la forme d'onde OUT de ce tour et les valeurs numériques des mesures de Maestro, les variables de conception, et conservez les fenêtres de schéma, Maestro et ViVA ouvertes pour que l'utilisateur puisse continuer à modifier. Liez explicitement l'historique final – ne montrez pas la forme d'onde du tour précédent ni les prédictions proxy. À moins que l'utilisateur ne demande explicitement une simple exploration ou la fermeture des fenêtres, ne restaurez pas la ligne de base à la fin et ne fermez pas la session finale. L'ADE local relit le projet startupDir global lors de l'exécution ; il ne peut pas être restauré prématurément après l'ouverture de la session. Avant chaque tour, confirmez le répertoire de résultats autorisé ; après le tour, interrogez l'emplacement réel ; si la session éditable est conservée, gardez les paramètres de répertoire permettant à l'utilisateur de continuer, et enregistrez les valeurs d'origine. Les paramètres persistants propres à la session et vérifiés peuvent être prioritaires.
L'exécution du banc de test et l'exportation des résultats utilisent simulation-flow.md et l'API Maestro ; aucune interface de simulation supplémentaire n'est maintenue.