Brevet FR2766595A1 — publié le 19990129

i DEMANDES DE BREVETS CONNEXES La présente demande de brevet est apparentée aux demandes de brevet en cours suivantes citées dans le présent mémoire à titre de référence: 1. Demande de brevet des Etats Unis d'Amérique N Serial 08/197 430 intitulée " Method and Apparatus for a Trace Buffer in an Emulation System (Procédé et appareil pour un tampon d'analyse dans un système d'émulation)", déposée par Kuijsten le 16 février 1994; 2. Demande de brevet des Etats Unis d'Amérique N Serial 08/242 164 intitulée " Emulation System Having Multiple Emulator Clock Cycles Per Emulated Clock Cycle (Système d'émulation ayant des cycles d'horloge d'émulateur multiples par cycle d'horloge émulé)", déposée par Kuijsten le 13 mai 1994; 3. Demande de brevet des Etats Unis d'Amérique N Serial 08/496 239 intitulée " Emulation System Having Multiple Emulator Clock Cycles Per Emulated Clock Cycle and Improved Signal Routing (Système d'émulation ayant des cycles d'horloge d'émulateur multiples par cycle d'horloge émulé et un routage amélioré des signaux)", déposée par Chilton et al. le 28 juin 1995 et 4. Demande de brevet des Etats Unis d'Amérique N Serial 08/597 197 intitulée " System and Method for emulating Memory (Système et procédé pour émuler une mémoire)", déposée par Chilton et al. le 6 février 1996. DOMAINE DE L'INVENTION La présente invention se rapporte à la simulation de circuits numériques via un émulateur matériel et, plus particulièrement, a un procédé et un appareil pour configurer un émulateur matériel afin d'automatiser et faciliter le processus de connexion du modèle utilisateur dans l'émulateur à l'environnement matériel cible. ARRIERE-PLAN DE L'INVENTION Au fur et à mesure que les modèles de circuits électroniques continuent à augmenter en vitesse et complexité, il devient plus que jamais crucial de tester les modèles de circuits en cours de développement à divers stades du développement. Les émulateurs matériels fournissent un moyen pour tester des modèles de circuits complexes au fur et à mesure que les modèles sont développés. De tels émulateurs fournissent d'une manière typique un matériel configurable qui est commandé par logiciel afin d'exécuter les fonctions d'un circuit en cours de conception. Le modèle de circuit est spécifié par un jeu de données qui définit la structure et le comportement du circuit. L'émulateur est souvent connecté à un "système cible" qui est le circuit réel avec lequel le modèle de circuit fonctionnera en définitive. Les émulateurs fonctionnent sous contrôle logiciel. Le modèle de circuit est "compilé" pour produire le programme qui contrôle l'émulateur. La vitesse est essentielle dans les émulateurs du fait qu'inévitablement l'émulateur ne peut pas exécuter les fonctions du circuit émulé aussi vite que ne le ferait le circuit réel lui-même. Il est souhaitable de mettre en euvre l'émulateur à des vitesses aussi proches que possible de la vitesse de fonctionnement cible du circuit émulé dans le but d'interfacer avec précision le modèle avec les circuits externes ou autres dispositifs et de tester le circuit pour des problèmes de synchronisation. Du fait qu'un émulateur doit exécuter les fonctionnalités d'une large gamme de modèles de circuits, il doit être aussi flexible que possible. Ce qui signifie que le système d'émulation doit contenir du matériel de traitement logique qui soit réutilisable pour différents modèles. Un tel système d'émulation devrait contenir un grand nombre d'éléments de traitement polyvalents ou universels qui seraient utilisés pour exécuter indirectement la fonction du circuit qui est émulé. Par exemple, on devrait utiliser un émulateur universel pouvant traiter des équations logiques booléennes pour émuler un circuit multiplieur plutôt qu'utiliser un multiplieur matériel dédié dans le même but, lequel deviendrait ensuite inutilisable dans l'émulation de modèles de circuits qui ne contiennent aucune fonction multiplieur. Afin de résoudre ces équations, un grand nombre de portes, ou d'autres dispositifs, doivent être pourvus de signaux dans l'émulateur. De plus, les sorties des portes ou d'autres composants doivent être routées de manière efficace parmi les divers composants de l'émulateur. Les émulateurs sont, d'une manière générale, capables d'opérer à des vitesses proches du temps réel. Ainsi, par exemple, une émulation d'un circuit qui vise un système cible (un bus, par exemple) peut être accrochée au bus physique au cours du test. De manière idéale, les concepteurs humains devraient avoir la liberté de modéliser les E/S (entrées-sorties) vers n'importe quelle broche d'interface cible souhaitée et à partir de cette dernière. Cette capacité devrait pouvoir être accomplie indépendamment du type de broche émulée (par exemple entrée, sortie ou tristable) et indépendamment de l'emplacement de la broche sur un connecteur physique. Les systèmes d'émulation doivent supporter l'émulation de modèles comportant un grand nombre de broches d'interface cible. Chaque broche universelle supportée dans un système d'émulation nécessite trois signaux différents: signaux d'entrée, de validation et de sortie. Un grand nombre de dispositifs cible ont des interfaces de 1000 broches ou plus. Ceci équivaut à 3000 signaux ou plus, se traduisant par un câblage volumineux qui réduit la fiabilité et rend difficile la connexion au système cible. De plus, certains modèles utilisateur nécessitent d'être interfacés à différentes familles de dispositifs logiques cible. Ces derniers peuvent inclure, sans y être limités, des logiques de 3,3 V et 5 V. Un problème avec certains émulateurs réside dans le fait que certains dispositifs en cours d'émulation se connectent à des bus et contiennent des dispositifs résistifs internes qui portent les fils de bus à un niveau logique haut ou bas, lorsque tous les autres dispositifs sur le bus sont dans un état d'impédance élevée. Un autre problème, rencontré avec un grand nombre d'émulateurs, survient lorsque le concepteur humain débogue un modèle qui peut générer une activité sur l'interface cible pouvant endommager l'interface cible ou interférer sur son fonctionnement correct. 4 2766595 Un autre problème encore, rencontré avec un grand nombre d'émulateurs, surgit du fait que dans certains cas il est souhaitable que le système cible génère la synchronisation pour le matériel cible. Dans d'autres cas, il est souhaitable que le signal d'horloge soit une entrée vers le système émule cible. Dans les premières étapes de la conception, I'utilisateur peut vouloir assurer la synchronisation d'un environnement cible statique du fait que ce mode d'opérations permet une progression unique par l'émulateur. Ultérieurement, lorsque le modèle est plus stable, le concepteur humain peut vouloir utiliser l'horloge du système à partir du matériel cible. Dans beaucoup d'émulateurs, la circuiterie matérielle cible fournit des entrées au modèle émulé qui proviennent des sorties de registres de l'émulateur (également appelées "sorties enregistrées") ou qui proviennent des sorties de registres suivies d'une logique combinatoire. Dans des systèmes de données échantillonnées, tels qu'un émulateur matériel à découpage dans le temps, il est nécessaire de traiter ces entrées différemment de manière à être en mesure de traiter le modèle dans un seul cycle de programme d'émulation tout en façonnant le modèle avec précision. RESUME DE L'INVENTION La présente invention surmonte les problèmes et inconvénients de l'art antérieur en mettant en oeuvre plusieurs caractéristiques dans un émulateur à base matérielle à découpage dans le temps. Ces caractéristiques comprennent une assignation E/S programmable; des niveaux programmables de tension en courant continu; des résistances programmables à charge et à décharge dans l'émulateur sur une base broche-à-broche; un forçage et/ou une inhibition de valeur programmables en sortie de l'émulateur sur chaque broche; une synchronisation programmable; et des modes d'échantillonnage programmables. Un mode de réalisation préféré de la présente invention incorpore une pluralité d'interfaces système à ensemble fonctionnel dit "Pod" (PSI pour Pod System Interface) dont chacune s'enfiche dans une face arrière de l'émulateur. Chaque PSI est connectée via un câble spécialement conçu à une Interface 2766595 Utilisateur à ensemble fonctionnel dit "Pod" (PUI pour Pod User Interface). Chaque PUI est, à son tour, connectée à une interface du système cible. Pour des données se déplaçant de l'émulateur au système cible, chaque PSI reçoit jusqu'à 128 bits de données de l'émulateur. Le câble n'a cependant qu'une largeur de 32 bits. Par conséquent, l'émulateur multiplexe les données envoyées sur le câble, envoyant huit groupes de 32 bits à la PSI selon un signal d'horloge rapide (quatre paires entrelacées de 32 bits de données et de signaux de validation). Chaque PUI reçoit les groupes de 32 bits de la PSI et les envoie au système cible selon les signaux de commande provenant de I'émulateur. Pour des données se déplaçant du système cible à l'émulateur, chaque PUI reçoit jusqu'à 128 bits de données du système cible. Chaque PUI envoie quatre groupes de 32 bits selon un signal d'horloge rapide. Chaque PSI reçoit les groupes de 32 bits et les maintient dans un registre interne, envoyant les bits reçus vers l'émulateur sous le contrôle de l'émulateur. Comme décrit ci- après, les données multiplexées peuvent être organisées davantage pour augmenter la vitesse de transmission et/ou de traitement. Divers modes de réalisation de la présente invention assurent une efficacité accrue, des gains de temps ou une validité accrue des données. Chacun de ces modes de réalisation est tour à tour décrit ci-après. Conformément aux objectifs de l'invention telle que réalisée et globalement décrite ici, I'invention est un système E/S cible pour coupler un émulateur ayant une pluralité de bits de données à un système cible, comprenant: une pluralité de modules PSI couplés à l'émulateur, chaque module PSI envoyant des bits d'entrée à l'émulateur et recevant des bits de sortie et des bits de validation de sortie de l'émulateur dans un ordre prédéterminé; un câble couplé à chacun des modules PSI; et une pluralité de modules PUI, chacun des modules PUI étant connecté à l'un respectif des modules PSI par un câble respectif, et de plus couplé au système cible pour transmettre les bits d'entrée, de sortie et de validation de sortie vers le système cible et à partir de celui-ci dans l'ordre prédéterminé. 6 2766595 Les avantages de la présente invention seront exposés en partie de la description qui suit et seront par ailleurs évidents d'après la description de par la mise en pratique de l'invention. Les objets et avantages de l'invention seront réalisés et atteints au moyen des éléments et combinaisons plus particulièrement soulignés dans les revendications ci-jointes et équivalentes. BREVE DESCRIPTION DES DESSINS Les dessins annexés, qui sont incorporés au présent mémoire et en font partie intégrante, illustrent plusieurs modes de réalisation de l'invention et, conjointement avec la description, servent à expliquer les principes de l'invention. La figure 1 est un diagramme synoptique au niveau système d'un mode de réalisation préféré de la présente invention. La figure 2 montre un exemple du système de la figure 1, dans lequel un émulateur est connecté à un système cible par une face arrière d'interface cible (TIB pour Target Interface Backplane) et une pluralité de combinaisons interconnexion Système Pod (PSI)/câble/lnterface Utilisateur Pod (PUI). Les figures 3(a) et 3 (b) montrent des détails additionnels de la figure 2. La figure 4 montre une configuration au niveau carte d'un émulateur pouvant être utilisé avec le mode de réalisation de la figure 1 et comportant une face arrière bidirectionnelle. La figure 5 représente un diagramme synoptique du contrôleur de la figure 3. La figure 6(a) montre la relation entre les figures 6(b) et 6(c). Les figures 6(b) et 6(c) constituent un exemple de diagramme synoptique d'une PSI de la figure 1. La figure 7 est un exemple de diagramme synoptique d'un câble connectant une PSI et une PUI. La figure 8 est un exemple de diagramme synoptique d'une PUI de la figure 1. La figure 9 montre un exemple des relations existant entre différents types de fichiers de description des broches. La figure 10(a) montre un exemple de courbe de temps pour des données envoyées vers une PSI unique et reçues de cette dernière. La figure 10(b) montre un exemple de données réparties de manière clairsemée dans les tranches de temps de la figure 10(a). La figure 10(c) montre l'exemple de la figure 10(c) à l'endroit de la donnée qui a été retriée. La figure 11 montre une pluralité de multiplexeurs utilisés pour forcer un ou plus d'un bits d'entrée à des valeurs souhaitées. La figure 12(a) est une courbe de temps montrant un exemple d'ordonnancement d'entrées, de validations et de sorties d'une manière efficace en termes de temps. La figure 12(b) est une courbe de temps montrant un exemple d'ordonnancement d'entrées, de validations et de sorties d'une manière efficace en termes de temps. La figure 13 montre un exemple de circuit qui exécute une détection automatique de conflits pour un bit unique reçu du système cible. La figure 14 est un diagramme synoptique montrant un flux de signaux pour une opération de réinitialisation du Pod. La figure 15 est un diagramme synoptique montrant un flux de signaux lorsqu'un signal d'horloge est généré dans le système cible et la manière dont le signal d'horloge est réacheminé vers le séquenceur maître dans l'émulateur. La figure 16 est un diagramme synoptique montrant un flux de signaux lorsqu'un signal d'horloge est généré dans un séquenceur asservi dans l'émulateur. La figure 17 est un diagramme synoptique montrant un flux de signaux d'une horloge système. 8 2766595 La figure 18 montre un circuit qui permet à l'utilisateur d'indiquer une famille de dispositifs logiques utilisés par le système cible. La figure 19 montre un circuit qui permet à l'utilisateur d'implémenter des résistances internes de charge et de décharge programmables. DESCRIPTION DETAILLEE DES MODES DE REALISATION PREFERES Il est à présent fait référence en détail aux modes de réalisation préférés de l'invention, dont des exemples sont illustrés par les dessins joints en annexes. Là o cela est possible, les mêmes numéros de référence sont utilisés dans les dessins pour désigner les éléments identiques ou similaires. La figure 1 est un diagramme synoptique au niveau système d'un mode de réalisation préféré de la présente invention. La figure 1 comprend un émulateur 102. L'émulateur 102 peut être, par exemple, un émulateur en tranches de temps tel que celui décrit dans la demande de brevets des Etats Unis d'Amérique N Serial 08/496 239 intitulée " Emulation System Having Multiple Emulator Clock Cycles Per Emulated Clock Cycle and Improved Signal Routing (Système d'émulation ayant des cycles d'horloge d'émulateur multiples par cycle d'horloge émulé et un routage amélioré des signaux)", déposée par Chilton et al. le 28 juin 1995, que l'on cite ici à titre de référence. L'émulateur 102 comporte une face arrière d'interface cible (TIB pour Target Interface Backplane) 103. La TIB 103 comporte une pluralité de N lignes de données 32 bits pour un interfaçage avec une pluralité de PSI (pour Pod System Interface ou Interface Système Pod) 104. La TIB 103 et chaque PSI 104 sont également connectées par des lignes de contrôle (non représentées). Dans le mode de réalisation représenté, N égale 12. Ainsi, la TIB 103 possède jusqu'à 12x32=384 lignes E/S (entrée/sortie) de données pour l'interfaçage avec les PSI 104. Dans un autre mode de réalisation préféré, N égale 11. Ainsi, la TIB 103 possède jusqu'à 11x32=352 lignes E/S (entrée/sortie) de données pour l'interfaçage avec les PSI 104. Chaque câble 106 porte 32 bits de données (et des bits de contrôle supplémentaires) et connecte une PSI et une PUI (Pod User Interface ou Interface Utilisateur Pod). Le système contient une pluralité de N PUI, chacune 9 2766595 desquelles se raccorde à un système cible 110 via un bus de données 128 bits et des signaux de commande (non représentés). a. Multiplexage temporel des Signaux de l'interface Cible Dans le mode de réalisation décrit, le contrôleur utilise le multiplexage temporel pour réduire le nombre de câbles utilisés pour supporter le système cible. Lorsque l'interface cible est définie pour le système émulateur, elle est divisée en douze parties, chacune ayant 128 broches. 384 signaux sont requis pour supporter 128 broches (c'est-à-dire, un signal d'entrée, de validation de sortie, et de sortie pour chaque broche). L'émulateur applique un multiplexage temporel sur ces 384 signaux sur 32 fils de données physiques. La figure 10(a) montre un exemple de courbe de temps pour des données envoyées vers une PSI unique et reçues de cette dernière. Durant une première tranche de temps, le contrôleur 302 envoie 32 bits à une première PSI (et au même moment, envoie 32 bits à chacune des autres N PSI). Les signaux d'entrée sont échantillonnés à partir du matériel cible par la PUI et transmis au contrôleur à raison de 32 bits à la fois au cours de quatre intervalles de temps différents sous le contrôle du contrôleur. Après le traitement des entrées, le contrôleur transmet les données de validation et de sortie au Pod au cours de huit intervalles de temps différents comme représenté sur la figure 10(a). Un tel multiplexage de données d'entrée, de sortie et de validation réduit le compte de fils de l'interface cible d'un facteur d'au moins 12 par rapport aux systèmes usuels. La figure 2 montre un exemple du système de la figure 1, dans lequel l'émulateur 102 est connecté à un système cible 110 par une pluralité de combinaisons PSI/câble/PUI. Dans le système de la figure 2, N égale 2. Comme indiqué sur la figure, un signal 128 bits est divisé en quatre tranches de temps de 32 bits pour une transmission sur une combinaison PSI/câble/PUI entre l'émulateur et le système cible. La figure 3(a) montre des détails additionnels de la figure 2. Un bus 306 BTL (Backplane Transceiver Logic ou Logique émetteur-récepteur-face arrière) 2766595 à 384 bits couple l'émulateur 102 à une carte contrôleur 302. De plus, la carte contrôleur et la PSI sont couplées par un bus CPU (Central Processing Unit ou Unité Centrale de Traitement) 308 et un bus séquenceur 310 à 11 bits. La carte contrôleur 302 communique à la fois avec la PSI 104 et la PUI 108 via ces bus pour réaliser le multiplexage des signaux d'entrée, de sortie et de validation envoyés depuis l'émulateur et reçus par ce dernier. La figure 3(a) montre également les émetteurs-récepteurs différentiels SCSI (Smafl Computer System Interface ou interface système pour petits ordinateurs) 105 et 107, à chaque extrémité du câble 106 et des pilotes de broches 350, qui connectent chaque PUI au système cible 110. Un mode de réalisation préféré de la présente invention utilise des pilotes de signaux différentiels, plus particulièrement des pilotes qui sont conformes à la norme RS485. Ceci permet au système cible d'être à un potentiel différent de celui de l'émulateur et permet à l'émulateur d'être connecté à une large variété de systèmes cibles. La figure 3(b) montre des détails additionnels de la figure 2. Le bus BTL 384 bits connecte huit cartes processeur dans l'émulateur 102. La face arrière BTL 306 est couplée à son tour au contrôleur 302. Le contrôleur 302 délivre 63 bits de données et de lignes de contrôle à la TIB 103 (32 bits de données 602, 8 bits de données CPU 604, 11 bits de données d'adresses et de contrôle 605, 11 bits de données séquenceur 608, et un signal d'horloge à un bit 611, comme représenté sur la figure 3(a)). La TIB 103 est couplée à douze PSI 104 qui sont couplées par douze câbles à douze PUI 108. Des détails d'une PSI sont montrés sur les figures 6(b) et 6(c). Chaque câble 106 comporte 32 bits de données et 16 bits de contrôle comme montré sur la figure 7. Chaque PUI contient 4 FPGA (Field Programmable Gate Array ou réseau de portes programmable), chacun implémentant la circuiterie de la figure 8 de manière que chaque PUI délivre et reçoive un total de 128 (32 x 4) bits de données en direction /à partir du système cible. La figure 4 montre une configuration au niveau carte d'un émulateur pouvant être utilisé avec le mode de réalisation de la figure 1 et comportant une face arrière BTL bidirectionnelle 306. Les détails de l'émulateur 102 sont décrits Il 2766595 dans la demande de brevet des Etats Unis d'Amérique N Serial 08/496,239 précité. La figure 5 montre un diagramme synoptique du contrôleur de la figure 4. L'émulateur du mode de réalisation décrit fonctionne selon trois modes différents: - mode banc d'essai synthétisé (dans lequel l'émulateur fonctionne de manière autonome (c'est-à-dire en n'étant pas connecté à un système cible)), - mode banc d'essai C (dans lequel les données du banc d'essai sont situées sur un ordinateur station de travail, tel qu'un PC, connecté à l'émulateur et l'émulateur est connecté à un système cible), et - mode d'émulation câblée (dans lequel l'émulateur est connecté à un système cible). La description qui suit se rapporte principalement au troisième mode - émulation câblée. La figure 5 représente, cependant, le contrôleur 302 couplé au module cosim_in 502 et au module cosim_out 504 (cosimulateur d'entrée et cosimulateur de sortie) qui sont interfacés avec une station de travail. Comme montré sur la figure 5, la carte contrôleur 302 comporte un séquenceur asservi 506, dont le fonctionnement est décrit ci- après en référence au tableau I qui suit. Sur la figure 5 une ligne 384 bits bidirectionnelle 306 transfère des données vers l'émulateur et à partir de ce dernier et une ligne 32 bits bidirectionnelle transfère des données vers une PSI et à partir de cette dernière. L'émulateur comporte un séquenceur sur le contrôleur et un sur chaque carte processeur. Les mots de contrôle dans le séquenceur asservi 506 sont déterminés au temps de compilation lorsque qu'une description fonctionnelle (VHDL (VHSIC Hardware Description Language ou Langage de Description du Matériel VHSIC, VHSIC pour Very High Speed Integrated Circuit ou circuit intégré à très grande vitesse) ou Verilog) du système devant être émulé est compilé comme décrit dans la demande de brevet des Etats Unis d'Amérique N Serial 08/496 239. Cette description fonctionnelle comprend un fichier d'affectation des broches (PAF pour Pin Assignment File), qui décrit chaque broche d'entrée, de sortie et E/S (entrée/sortie) d'un système cible. Un exemple de PAF est représenté sur le tableau III. Le tableau III montre un exemple de fichier d'affectation des broches (PAF pour Pin Assignment File), qui décrit chaque broche d'entrée et de sortie d'un système cible. L'utilisation d'un fichier PAF permet à l'utilisateur d'affecter des E/S à toute broche souhaitée indépendamment du type de broche (entrée, sortie ou tristable) et indépendamment de sa localisation. La figure 9 représente un exemple des relations existant entre différents types de fichiers décrivant les broches. Il faut noter que le PAF est utilisé pour générer un fichier dans lequel diverses broches sont affectées à une tranche de temps. Un mode de réalisation préféré de la présente invention permet également à l'utilisateur d'indiquer une famille de dispositifs logiques utilisés par le système cible. La figure 18 montre un circuit qui permet à l'utilisateur d'indiquer une famille de dispositifs logiques utilisés par le système cible. Par exemple, le système cible peut utiliser une famille de dispositifs logiques à 3,3 volts ou à 5 volts. Dans un tel mode de réalisation, les pilotes et récepteurs 350 de la figure 3(a) devront être remplacés par des multiplexeurs analogiques et une pluralité de pilotes pour chaque famille logique, telle que TTL, ECL, PECL, GTL, etc. Les multiplexeurs devront sélectionner les pilotes/récepteurs sur une base bit par bit. La figure 6(a) montre la relation entre les figures 6(b) et 6(c). Les figures 6(b) et 6(c) sont un diagramme synoptique représentatif des PSI 104 de la figure 1. Le Tableau II, décrit ci-après, résume les signaux d'entrée et de sortie d'une PSI. Les signaux dirigés vers le contrôleur de l'émulateur et en provenance de ce dernier sont désignés dans le Tableau II en tant que signaux 1000. Les lignes bidirectionnelles sur la figure 6(a) comprennent: une ligne de données 32 bits (BTLDATA) 602 et une ligne 8 bits (CPU_DATA) 604. Les données de contrôle provenant du contrôleur 302 comportent une ligne Pod- CTL 6 bits 608. Les lignes 602, 604 et 608 sont également montrées sur la figure 3. La PSI 104 comporte également des lignes d'horloge 610, 611. Comme décrit plus bas, les signaux d'horloge peuvent émaner de l'émulateur ou du système cible. La PSI 104 comporte un CAR (Command Assembly Register ou registre d'assemblage de commandes), qui maintient les commandes provenant du contrôleur 103, comme décrit ci-après. La PSI 104 comporte également des 13 2766595 registres 614, 620 et 624; le décodeur d'état BTL 618; le générateur de somme de contrôle BTL 622, le module de somme de contrôle 626, les bascules de remise à zéro 628, et les registres de données 630. La figure 1 comporte aussi divers autres composants qui ne sont pas décrits en détail ici, leurs fonctions étant bien connues de l'homme de l'art. La PSI 104 comporte également les lignes suivantes qui sont couplées au câble 106: une ligne PDATA 32 bits 630, une ligne PMODE 7 bits 632, une ligne PUI_DATA 1 bit 634, une ligne PCLK 636, et une pluralité de lignes de contrôle (y compris PATN, TxDAV, RxDAV). La figure 7 est un diagramme synoptique représentatif d'un câble connectant une PSI et une PUI. Comme montré sur la figure 7, le câble connectant chacune des N PSI et PUI transmet 32 bits de données (sur la ligne PDATA 630) et une pluralité de bits de contrôle à partir du contrôleur 302. Le tableau 11, décrit ci-après, résume les signaux d'entrée et de sortie d'une PSI vers un câble. Le tableau Il résume également les signaux PDIR et DATAERR_L, qui sont désignés sur le tableau Il en tant que signaux 1003. Les signaux de l'interface PSI/câble sont désignés sur le tableau I en tant que signaux 1002. La figure 8 est un diagramme synoptique représentatif d'une PUI de la figure 1. La région à l'intérieur des lignes pointillées de la figure représente un des quatre FPGA (Field Programmable Gate Array ou réseau de portes programmable) dans chaque PUI. Les éléments de la figure 8 comprennent un générateur CRC (contrôle de redondance cyclique) 802, unemachine d'état à séquence PUI 804, un décodeur 806, et un sélecteur de type cible 810. La PSI 108 délivre et entre 32 bits de données sur la ligne bidirectionnelle TDATA 830. Les lignes E/S et de contrôle des figures 6-8 sont décrites plus en détails dans les annexes A et B. Le fonctionnement de la PSI 104 est plus amplement décrit dans l'annexe A ci-jointe. Le fonctionnement de la PUI 108 est plus amplement décrit dans l'annexe B ci-jointe. Le tableau I décrit l'interaction entre le contrôleur 302 et chaque combinaison PSI/câble/PUI. Une première portion du tableau I décrit les séquences de contrôle envoyées par le séquenceur asservi sur le contrôleur 14 2766595 302 à la PSI 104, qui à son tour envoie des signaux à la PUI 108. Un mode de séquence dépend du signal de commande de Pod 6 bits, conjointement avec des signaux de commande TOPod et FROM_Pod, qui est envoyé à la PSI et un signal PMODE 7 bits 632, qui est envoyé de la PSI à la PUI, conjointement avec les signaux de commande PATN, TxDAV et RxDAV. Une seconde portion du tableau I concerne l'adressage des données se déplaçant de la PUI 108 à la PSI 104. Comme représenté, chacun des quatre FPGA dans la PUI est adressé séparément. Une troisième portion du tableau I se rapporte à un registre de configuration de PUI 820 (voir figure 8). Une quatrième portion du tableau I se rapporte à un registre de séquence PMODE de PUI 822 (voir figure 8). Le tableau Il montre un résumé des signaux appliqués à la PSI 104 et délivrés à partir de cette dernière. Les signaux 100 représentent des signaux dirigés du contrôleur vers la PSI. Les signaux 1002 représentent des signaux allant de la PSI vers le câble. Deux signaux PDIR et DATA_ERR_L sont représentés par le numéro de référence 1003. La figure 14 est un diagramme synoptique montrant un flux de signaux pour une opération de réinitialisation de l'ensemble fonctionnel dit "pod". Chacun des signaux de la figure 14 peut être vu sur les figures 6 à 8. La figure 14 est présentée ici pour la clarté de l'explication. b. Interface Cible Configurable par Logiciel 1. Affectation E/S programmable Comme décrit ci-dessus, la présente invention permet à I'utilisateur d'affecter des fonctions E/S à toute broche du système cible souhaitée. Ainsi, I'utilisateur peut affecter des broches de sorte que les broches ne soient réparties de manière clairsemée dans les groupes de broches d'entrée, de donnée ou de validation, du système cible. Dans un mode de réalisation préféré, le nombre de tranches de temps requis pour envoyer/recevoir les signaux d'entrée, de sortie et de validation, est réglé en fonction d'un nombre minimum requis par l'agencement de broches défini par l'utilisateur. Dans une variante de réalisation, I'utilisateur n'affecte pas les 2766595 emplacements des broches, mais permet au compilateur d'affecter les emplacements de broches de manière séquentielle. 2. Niveaux CC (Courant Continu) Programmables Comme également décrit cidessus, la présente invention permet à l'utilisateur de spécifier une famille logique pour le système cible (par exemple, 3,3 volts ou 5 volts). Pendant l'émulation, le matériel dans le système choisit la famille logique indiquée par l'utilisateur. La figure 18 montre un exemple de pilotes et de récepteurs dans un tel mode de réalisation. 3. Charge ou décharge programmable Certains bus en cours d'émulation sont connectés à des bus et contiennent des dispositifs résistifs internes qui tirent les fils de bus vers un niveau logique haut ou bas lorsque tous les autres dispositifs sur le bus sont dans un état d'impédance élévée. La présente invention fournit un moyen allant d'un mode configurable par logiciel à un mode sélectionnable pour choisir une résistance soit de charge soit de décharge sur une base broche par broche. Ceci permet au système émulateur de modéliser les tristables et les bidirectionnels avec des dispositifs résistifs. La figure 19 montrent un exemple d'un circuit qui permet à l'utilisateur d'implémenter des résistances internes de charge et de décharge. 4. Forçage et Inhibition Proarammables Parfois, le système en cours d'émulation a la possibilité de générer des signaux qui peuvent endommager le système cible ou interférer avec ce dernier. La présente invention fournit une méthode pour "forcer" les broches d'interface cible vers un niveau logique constant (ou pour les placer dans un mode d'impédance élevée) pendant l'émulation. La figure 11 montre un "forçage" de bits. Dans un mode de réalisation préféré, chaque groupe de 32 bits de données envoyé à la PSI est multiplexé comme représenté sur la figure. Si l'utilisateur a préalablement indiqué (lorsque les broches cibles sont définies) qu'une broche particulière doit être forcée à "1" ou "0", le contrôleur délivre le bit de commande approprié pour forcer cette valeur pour le bit. Une variante de réalisation comporte des tampons si bien que les valeurs peuvent être changées à la volée sous le contrôle de l'émulateur. 16 2766595 5. Synchronisation programmable de l'ensemble fonctionnel "Pod" Dans certains cas, les utilisateurs peuvent requérir que l'émulateur génère la synchronisation pour le matériel cible. Dans d'autres cas, l'utilisateur peut souhaiter que l'horloge soit une entrée au modèle émulé. Dans les premiers stades de conception, I'utilisateur peut vouloir fournir une synchronisation à un environnement cible statique (pour autoriser une progression à pas unique). Ultérieurement, lorsque le modèle est plus stable, l'utilisateur peut vouloir utiliser l'horloge système à partir du système cible. La présente invention permet à l'utilisateur d'indiquer, sous le contrôle du logiciel, s'il faut commander l'horloge à partir du matériel cible ou si le matériel cible doit recevoir un signal d'horloge de l'émulateur. La figure 6(a) montre un signal d'horloge (dclck) généré par un séquenceur asservi sur le contrôleur. Ce signal est toujours envoyé vers le système cible. La figure 8 montre une horloge de système cible (Tclk) 850 fournie à partir du système cible. Le signal Tclk est soit généré par le système cible (auquel cas le système cible fournit le signal d'horloge) soit est basé sur le signal dclk ( auquel cas l'émulateur fournit le signal d'horloge). Les figures 15 à 18 suivantes sont présentées pour la clarté de l'explication et montrent des versions simplifiées de divers signaux d'horloge dans le mode de réalisation décrit. La figure 15 est un diagramme synoptique montrant un flux de signaux lorsqu'un signal d'horloge (tclk) est généré dans le système cible et est réacheminé vers un séquenceur maître dans le contrôleur de l'émulateur. La figure 16 est un diagramme synoptique montrant un flux de signaux lorsqu'un signal d'horloge (dclk) est généré dans un séquenceur asservi dans le contrôleur de l'émulateur et est envoyé au système cible. La figure 17 est un diagramme synoptique montrant un flux de signaux d'une horloge système (mclk/pclk) 6. Modes d'échantillonnage programmables Le système cible peut fournir des entrées au modèle émulé qui proviennent de sorties enregistrées ou de sorties enregistrées suivies de logique combinatoire. Dans les système de données échantillonnés (tels que 17 2766595 l'émulateur 102), il est nécessaire de traiter ces entrées différemment afin d'être en mesure de traiter le modèle en un seul cycle de programme d'émulation. La présente invention peut choisir, sur une base broche par broche, I'un de trois modes d'échantillonnage différents pour chaque broche. Les entrées appliquées au modèle émulé qui proviennent des sorties de registres (synchrones) sont échantillonnées avec l'événement de synchronisation de la fréquence d'horloge la plus élevée dans le système. Les entrées appliquées au modèle qui proviennent de sorties enregistrées suivies de logique combinatoire (asynchrones) sont échantillonnées avec un retard programmable après l'événement de synchronisation de la fréquence d'horloge la plus élevée dans le système. Le troisième mode d'échantillonnage laisse du temps à la logique combinatoire pour évaluer avant que les entrées soient échantillonnées et traitées par l'émulateur. c. Réglage des performances de la cible Certains modes de réalisation préférés de la présente invention contiennent des caractéristiques qui améliorent la performance du sytème d'émulation. Ces modes de réalisation assurent une performance améliorée dans le concept de multiplexage de base décrit ci-dessus mais ajoutent du matériel supplémentaire et de ce fait peuvent s'avérer ou ne pas s'avérer appropriés à une circonstance particulière. 1. Mise en pipeline avec le traitement logique. Dans un système d'émulation tranché dans le temps, les valeurs de la logique séquentielle et combinatoire nécessitent d'être calculées par I'émulateur afin de modéliser le modèle utilisateur. Ces éléments du modèle sont ordonnancés par le compilateur, sur la base des contraintes des ressources système et des dépendances d'entrée et de sortie associées à chacun des élements. Afin de réduire l'impact de la surcharge provoquée par le multiplexage temporel des signaux d'interface cible, une méthode à "ordonnancement d'entrée tardive" tente d'ordonnancer les éléments du modèle qui ne dépendent pas des entrées primaires appliquées au modèle en 18 2766595 parallèle avec l'échantillonnage et la transmission de ces entrées primaires appliquées au système d'émulation à partir du matériel pod. La figure 12(a) montre un exemple de la manière dont un "ordonnancement d'entrée tardive" survient si une certaine logique est indépendante des entrées et une autre ne l'est pas. Sur la figure, la logique qui est indépendante des entrées est ordonnancée pour s'exécuter en premier. De ce fait, la logique qui dépend des entrées s'exécute en second, après que les entrées sont disponibles à partir du système cible. De même, en utilisant une méthode à "ordonnancement de sortie anticipée", les éléments dont les résultats ne sont pas requis en tant que validations ou sorties primaires du modèle sont ordonnancés en parallèle avec la transmission de ces validations et sorties primaires de l'émulateur 102 vers le matériel pod. De manière idéale, il y a suffisamment d'éléments qui ne sont pas dépendants de manière critique des E/S cibles pour autoriser une pleine utilisation des ressources de traitement du système simultanément aux opérations de réception et de transmission E/S. La figure 12(b) montre un exemple de la manière dont un "ordonnancement de sortie anticipée" survient si une certaine logique est indépendante des sorties et validations et une autre ne l'est pas. Sur la figure, la logique qui commande les sorties/validations est ordonnnancée pour s'exécuter avant ces sorties/validations. De ce fait, la logique ne commandant pas les sorties/validations est exécutée après que les sorties/validations ont été envoyées vers le système cible. 2. Réarrangement orienté données des performances Un mode de réalisation préféré de la présente invention modifie l'ordre dans lequel les données sont envoyées vers la PSI et reçues de cette dernière. Etant donné que le modèle moyen en cours d'émulation contient un mélange de broches d'entrée, de sortie, tristables et bidirectionnelles, il existe un grand nombre de portions non utilisées de l'espace des données multiplexées dans le temps. Le mode de réalisation décrit réarrange les données d'entrée, de sortie et de validation à partir de l'ordre montré sur la figure 10(a) pour atteindre un arrangement plus efficace. Cette méthode de réarrangement optimise la 19 2766595 performance de l'interface cible en regroupant les données en un nombre de tranches de temps aussi petit que possible. La méthode de réarrangement est exécutée en incorporant le matériel de routage et de stockage dans le matériel d'interface. La figure 10(b) montre un exemple de données réparties de manière clairsemée dans les tranches de temps de la figure 10(a). Comme représenté sur la figure, il existe un grand nombre de portions non utilisées de l'espace des données multiplexées dans le temps. Les données sont représentées par des IIXlf, La figure 10(c) montre l'exemple de la figure 10(b) à l'endroit de la donnée qui a été réarrangée (regroupée) en conformité avec le mode de réalisation décrit. La figure 10(c) montre des données envoyées vers M ill l'émulateur et à partir de ce dernier via 12 pods dans le temps. Comme décrit 4, l ci-dessus, d'autres modes de réalisation peuvent comporter un nombre différent de pods. Les données sont représentées par des lignes épaisses. Le numéro de référence 1050 indique un espace de données de 32 bits de large. Du fait que les signaux d'entrée et de sortie sont "regroupés" en portions contiguës de l'espace de données, un nombre moindre de tranches de temps est requis to établir l'interface avec le système cible. 3. Exécution pipeline en onde Un mode de réalisation préféré de la présente invention utilise des pilotes à faible biais pour piloter les données et les signaux d'horloge sur la connexion entre la carte cible contrôleur et le connecteur de pod. Ainsi, il n'est pas nécessaire d'attendre jusqu'à ce que le jeu courant de données soit synchronisé dans le matériel du récepteur avant d'envoyer le ou les jeu(x) suivants de données sur la connexion. En utilisant les retards inhérents dans le câble pour séparer les transmissions de données multiples, il est possible de séparer les transmissions de données multiples et d'augmenter la capacité de traitement globale du canal de communication. d. Amélioration de la fiabilité 1. Dispositifs d'échantillonnage immunes métastables 2766595 Dans certains environnements cibles, les signaux d'entrée primaires appliqués au modèle émulé arrivent de manière asynchrone à l'horloge avec laquelle ils sont en train d'être échantillonnés. Un mode de réalisation préféré de la présente invention utilise des pièces immunes métastables telles que les dispositifs Philips 74F50729 ou 74F50109 pour échantillonner les données d'entrée primaires à l'interface cible. L'utilisation de pièces métastables réduit à effectivement zéro la probabilité d'erreurs provoquées par la métastabilité. 2. Vérification automatique des données Même le câblage et les connecteurs le plus soigneusement construits peuvent rompre et provoquer des défaillances intermittentes. Du fait que les utilisateurs d'émulation dépendent du système en tant qu'outil de débogage, ils doivent être informés de toute défaillance matérielle le plus tôt possible afin d'éviter de perdre du temps à déboguer un modèle correct lorsque le problème provient d'une mauvaise émulation matérielle. Un mode de réalisation préféré de la présente invention transmet des données aux contrôleur 302/système cible 110 et PSI/PUI et à partir de ces derniers pendant des intervalles connus. Ce fait permet à la portion de transmission de l'interface de calculer l'information de contrôle d'erreur, telle que somme de contrôle, CRC (contrôle de redondance cyclique) ou parité pour chaque bloc de données et de l'envoyer conjointement avec les données échantillonnées vers le matériel récepteur. Le matériel récepteur compare ensuite l'information de contrôle d'erreur avec les données qu'il reçoit pour s'assurer que les données sont correctes. Cette méthode permet de détecter tout problème et d'en aviser l'utilisateur. La figure 6(b) comporte un module de somme de contrôle 626, qui calcule une somme de contrôle pour chaque mot de données de 32 bits reçu à partir de la PUI. Cette somme de contrôle calculée est comparée avec une somme de contrôle envoyée de la PUI avec les données par l'élément 627. L'élément 808 de la figure 8 exécute une fonction similaire pour les données reçues par la PUI. 21 2766595 3. Détection automatique des conflits De nombreux modèles émulés contiennent des broches bidirectionnelles ou tristables connectées à un environnement matériel cible 110. Dans la plupart des cas, le but de ces broches est tel que, à un certain moment pendant l'exploitation du circuit, I'environnement cible peut conduire les données sur les fils connectés à ces types de broches. Du fait que l'émulateur est un outil de débogage et de vérification qui est parfois utilisé sur des modèles incomplets ou non fonctionnels (c'est-à-dire non testés), les validations générées par le modèle émulé pour ces broches peuvent être incorrectes et pourraient être validées en même temps que les pilotes dans la circuiterie cible. Le matériel cible nécessite d'être protégé contre les dommages provoqués par des conflits de pilotes. Un mode de réalisation préféré de la présente invention est placé entre le dispositif de pilotage dans l'émulateur et un tampon d'entrée connecté à un pavé physique qui est connecté au matériel cible. Le niveau de tension à chacun de ces points est, conjointement avec le courant du pilote, contrôlé par l'interface cible. Chaque fois que l'émulateur pilote la broche et que le niveau de tension au pilote ne correspond pas au niveau de tension au pavé, à l'intérieur d'une certaine marge prédéterminée, telle que 20%, un conflit de pilote est signalé. Immédiatement après la détection d'une telle situation, le pilote dans l'émulateur est désactivé pour empêcher tout dommage à la circuiterie cible. La figure 13 montre un exemple d'un circuit qui exécute cette fonction pour un bit unique reçu du système cible 110. Si la tension d'un bit recçu excède une valeur prédéterminée d'une quantité prédéterminée, une interruption est émise vers l'émulateur. e. Résumé Un mode de réalisation préféré de la présente invention incorpore une pluralité d'interfaces système à ensemble fonctionnel dit "Pod" (PSI pour Pod System Interface) dont chacune s'enfiche dans une face arrière de l'émulateur. Chaque PSI est connectée via un câble spécialement conçu à une Interface 22 2766595 Utilisateur à ensemble fonctionnel dit "Pod" (PUI pour Pod User Interface). Chaque PUI est, à son tour, connectée à une interface du système cible. Divers modes de réalisation de la présente invention mettent en oeuvre des caractéristiques dans un émulateur à base matérielle à tranches de temps. Ces caractéristiques comprennent une affectation E/S programmable; des niveaux de tension en courant continu programmables; des résistances de charge ou de décharge programmables dans l'émulateur sur une base broche par broche; un "forçage" et/ou une inhibition programmables de la valeur délivrée par l'émulateur sur chaque broche; une synchronisation programmable; et des modes d'échantillonnage programmables. D'autres variantes de réalisation seront évidentes à l'homme de l'art en regard de la description et la mise en oeuvre de l'invention décrite ici. Il va de soi que la description et les exemples ne doivent être considérés qu'à titre nullement limitatif et que la portée réelle de l'invention est définie dans les revendications ci-jointes. * ON 0 o 00o 0 0,o 000 0O 0.-4 100010 g I i Ix.looolooxooooi3tooo n:,,, , ,,-'-" ','.-c" :v I" I t*-±t--±---4--t. -4o:ol II I Z O IfN Ut r1 1 N"gtN NN I N ' m II 400 I D o t N I 0 # OOO 0 IO NN N - -,j X I N- n j Oo o o o o o o o j, 4 i N 2 k i 0 0 C0 1000I 0- 0. 0.00 0 0 00 O * I -0-4 NlON s!@: ' ' '_+_,_, '-._''. - i" a,>i--,4 N r N m m 00 0 1. 4 100 M1 --410 0000 1 01à, 0m0 * 41e # HII II,NIIMN- m i 5 us 3NIN o v | 3 IiINOmim m 400.000Ia.N cA NO 300010j lOI ICNOIIOOIOOa I OO NOOOOON OO I.-4 ql hI.I;'IO lUIN4 I II. NII I N % N oo oo,-4 s.JI-.oo o.. INaiiii NN 141 n oo o oo oo oo.,4-4-4,d,4..4 ooon 14. ' '",î i s î g I I NoN o " I II N*I. I5INNOU44Us4444I ". ID. oN I WI ooW N I 144NN o, ii I NN HIII IN Ils NID I00a.-4.-4INN4 IlP # g II4 II g i Ii1II5 NN N0 - I' ' 0I " ^I^ ^I^ N'" ""I I N II, I I II, I I44NIl III 4N I NI!Q... *-,4'WO g,,,.F,--r z,r > 0 MOIIrojOII4j - ,: v u'- LI r. (--.. * r o: w i os-- tr..r0-0 0'0 I *C.0rIla> r-Co >Ir. biwr (.> OII.I grr0Ajri 0 1 rr *J o-.4ru0-r WrCà. 0.A. A..r,OîM. 0. 41. C0. 6 'A r rw... I -- Il. 111.111.141,1 1 1 1.1..'W n. Ors-,4là. o 4tAwrrDr..1,>a.w rr,ooororro....:-LO C o. ,u r r ooo o o o owr.,-,.::01.ou.,. r ou rLo--ror-O0.4r0.IO.IoOr-40.-. rO.-.0.-4Ow r o r- woI.rru o a, oo: oVe 0V *00.-or wro o-oir.>-- wI 0I t4 J0U m * *oIrJrooo. g oor,ro--w OU.0 " -> -0 JO or-Or rII À H D. 1. - * I44444r400000000000. 40404 4004444-0.-e-I /'")ri 6z ou, I0 0lO,.Im ? Cr 0 0qIf444 N N e4'M M 'M M m1m.Uw * wA.i.. 4. P1àirw _______ I O0 4.- 4 0 00f.4O mor^ r ^ ^^ ^ ^^ w 0:r À rs*OVCICI0rI,4 -Ii00I- -i. e r o 0 I O j IPjOIf O >IO r o orroowror > I 'OIO O r.... r * oorooo w-I0 rr-r-r-oeWOr-r-r-Uoerr-r-r--oeoerr-r-r-OoeO w r r ' I j o 1.4 14141.01 O O O O Ot-I Ll1.4 M ±- oa I - o -+ - 1I O.la4P04 r0OOo o ow..o oIrl tIo0 a O %l- 10-.> M-0qr -i III Io.a..-.0,oo'.-ooo0,a..-o.ogao-r-ooroOIIIoIo woi -MJ.-- *. --, - ru a a cj a r,aa u a r J1 0.0.0 0 0 00 0 0 00 0 r00 0 - 0044010 OZwio044. __,'.1 _,-0,4.0O,-,-Owjd,'.l 004444 II ---- ' 000 0 0 0Oo 'rr o- 01 oI, -. r.oo - Pw iI I OOO j' o' OOgoOHeO ro4o - IIjI-O.4tp O HO -elO oe"4OHOs o - r o o o joo.: o O -- IfI OI 000.--4. 00004. 00044004- 0wOOjo000goOO 04.000-l04. : mo 00 o0 r.4.4.4,-,,. 0,.-00o 00.4.404.4 r4 om I w I j j 0i00.4,,4 0,,4.4O00.4.4 o oooOOOO,-, r4o,,-,,.0.-,,-,,- r4 j1OU1 O irOroroo owO0.4 Ou.-jjOOOO.4MjO ' I o01 0000fli404,..40,r4 OOO I00- I i 0000 00000 0.4.44.4.,.4.4...o,.4 i 1.0 6 III I II g o o l l-ó' 0' rxOXr sE( *, ''. ô @iWa m 0 I II_ I '> _ | ç ç"' E: C cut..,, -.> î qç 1.0 _ *9 1, -, E - a 4 e.4 5li *ÉlI. ' ' 7.CE * _f l I*.-.t f 'O O*H. ' O - c l. '.. V '. 0 n 1IC ilE.r>..2 O. Il''Jzé_ze. OECE "A U.- 1.41 E. O *' k k>.3". JE - D O k IWooo.,,,C. c r. -.q, E140.- CJ14 - ç _.'..._ ' _E _e.M x 44 I - I- n-óJ 0 e e *r4i4IP O' *1VXO04c À AX. .o o...o.o IeUeC e og Z V U o I||| ", .EC: C., 4 1-..'i.'O: 'o' c:,- -**ra,*-E' 4.4 E oa a e> C v - e13... 44,- I:el i1i r. CY.4e | U u | _ | w s O OQ w e Il Cw9^ *ez *C. 0;S 4.i 4- > a C OE s >,"I "| FZ C@_ X À -4 'O " tX"O,, *, *.-..- v_ u.Vc x R c.3 di 14 1 14"10 14 I D 1 M1 V 1. -.41E1 V 4.IM. E 00 * *:I* IMCD U Ei: ce V4U0E.41.- * x Il E E.414.4- 9S!ln UON 1-UU3-V/V I 1 --:0iF-V.lVO ISd aeJ Jns selol!d IS3S sepuewwoo(0:1) OI]ldZ (0:1) 'dlld800 9t Ind/ISd 18 3'19GVO (0:9) qC]OIAd L (0:9) 3OOI1d Ind ea 319V0 VIVOI-lnd i. dI3 -OIO/VOdd3d Ind Ga 3-19VO NI>-lon >lno Inld SJOA 3-1V0 _no->-I00 l >1100 Ind GO 3-1VO >110dd >lOd Ifld SJeA 313V0.lO->'lOvII > '1Ov1> 0OOL IfndG 3-1V0 AVOXc AVOd Irld SJeA 31"VO NIVd I NIVd Ind sJGA 3-1VO 13S3=d 1 13S3id Inld SJGA 3'1VO AVOXI. AVCS Ind/IdS l1 3'1]VO (0: W) VIVOd Zú (0: O) VIVOd 89 = (9s!1!jn UON) L - t9 ISd SJGA (o3SS).0 NI->1'0] n OliNO O-O01-3Sn ISd GO (OlsvW) 10 lno->l on L NI->OO-0O-73Sn ISd aO (9S!Il!n UON) 10 AOCO-ISd k aCaI-Sd lSd SJeA 10 >1710vy I. >11010v lSd SJGA (03SS) 10 COd- SJGA I OOd-O$ ISd SJeA (03SS) 1.0 Od-eO I OOd-VIOU-! ISd SJeA (03SS).o '1o 30/Lnoî-9LuL 1-30.LoN-L3"V-1_ ISd SJOA (03SS) 1O (0:9) 110-00d 9 (0:S) 110Od ISd Ga (01QH)10 >10VO I, -->IO-COd > 000 ISd sJGA (G1QH) 1o SO 1 SO OOd ISd SJGA (elgH) IO Sa sa-aC Od ISd sJeA (alQH) 10 dM I IM COd ISd SJeA (GIQH) 10 13S3d 1 -13S3daOd ISd sJ'A (94QH) 10 (0:S) suaiV- nnd:9 (0:9) CCVOd ISd/10 IS (GeQH) 10 (0:6) VLvIa-ndO 9 (0:6) VlVC]-COd ISd/10 1l 10 (0:4) Vv a (:) vV. a--els; NOI0J.33IIOQ _-1 ' (D9 'q9'6!j) V-d' S911 31fOILVVR3HOS -3I1X WON -VNOIS ISd 9Z Fichier D'affectation Des Broches " Id-Connecteur ESmodèle 0 A1 A7 clk 0 D37B70 addr [0] AiA12 addr[1] 0 _A1_A8 din [O] OA1_A9 din [1] OA1_A10 wen 0_A1_A18 ren 0 _A1_A13 dout [O] OA1_A14 dout [1] 0_ A1 A15 rout 0 A1 A16 zz Contenu du Fichier Le Fichier d'affectation des broches est une table contenant la relation existant entre les identificateurs de connecteur et les noms des E/S du modèle personnalisé Format du Fichier A l'édition du Fichier d'affectation des broches, il faut observer les conventions suivantes: * Commencer toutes les lignes de commentaires par le caractère # Des lignes vides peuvent être utilisées * Chaque entrée des deux champs doit être sur une seule ligne * Chaque ligne doit suivre cet ordre: id_connecteur, nom esmodèle_utilisateur * Les lignes de données de la table peuvent apparaître dans n'importe quel ordre Echantillon d'entrée d'un Fichier d'affectation des broches Id-Connecteur ESmodèle OA1_XXX1 addr OA1_XXX2 reset NOTE: la broche de pod A7 est désigné comme la broche pilotant votre horloge. Si vous avez des Pods multiples, chaque Pod (A1, A2, A3,B2,B3....D3) doit avoir la broche A7 affectée en tant que broche de signal d'horloge. Tableau III Annexes Les annexes suivantes font partie intégrante du présent mémoire descriptif et sont incorporées ici à titre de référence: 1. L'annexe A contient une description fonctionnelle de haut niveau d'un module d'interface Système Pod (PSI). 2. L'annexe B contient une description fonctionnelle de haut niveau d'un )10 module d'interface Utilisateur Pod (PUI). ANNEXE A **/ /* Assigned pin numbers for psipld - See Appendix F 208 pin TQFP /* QL24x32B (page 17-5) of Quicklogic user's guide */ *1 */ /. */ */ /******************************************* setattribute -type string find(portPMODE() padlocation setattribute - type string find(port,#PMODE([]À) pad location "12 set attribute - type string find(port,ÀPMODE[2]") padlocation 323 set attribute - type string find(port,uPMODE[2]3") pad location 34" setattribute - type string find(port,"PMODE[43]) pad location *4" setattribute -type string find(port,"PMODE[4]") padlocation "À6 set_attribute -type stringfind(port,"PMODE[65]") padlocation "67 setattribute -type string find(port,"PMODRESt6") pad location ""12 setattribute -type string find(port, PRESET") pad location "128 * setattribute - type string find(port,ÀRESET") pad_location À132"/ HDPAD */ setattribute -type string find(port,ÀPODCTL[5]") pad_location "20" set_attribute -type string find(port,"PODCTL[4]") padlocation "21" setattribute -type string find(port,"POD_CTL[3]") padlocation "220 set_attribute -type string find(port,"PODCTL[2]") padlocation q24" setattribute -type string find(port,"POD_CTL[1]") padlocation 031" setattribute -type string find(port,"PODCTL[O]") padlocation "32" net attribute -type string find(port,emCLK_OUT') pad_location m11" -/* setattribute -type string find(port,"mCLK") pad location "26" */ /* CLKPAD */ /* For pASIC2 mCLKl and mCLK2 should be reversed */ setattribute -type string find(port,*mCLK1l) padlocation "29" /* HDPAD */ setattribute -type string find(port,"tmCLK2) pad location "26" /* CLKPAD - 8/14/96 */ set_attribute -type string find(port,"TOPOD") padlocation À36" setattribute -type string find(port,ÀBTL_DATA(0]À) pad_location "64" setattribute -type string find(port,ÀBTL_DATA[l]") padlocation "65" set attribute -type string find(port,"BTL_DATA(2]À) pad location À66" set attribute -type string find(port,"BTLDATA[3]") padlocation "67" set_attribute -type string find(port,"BTLDATA[4]À) pad_location "68" setattribute -type string find(port,"BTL_DATA[S]") pad location "69" setattribute -type string find(port,ÀBTL_DATA[6]À) padlocation "70" setattribute -type string find(port,"BTL_DATA[7]") padlocation À71" set attribute -type string find(port,"BTL_DATA[8]") pad_location "72" set attribute -type string find(port,"BTL_DATA[9]") pad location "74" set attribute -type string find(port,"BTL_DATA([10]") pad_location "75" setattribute -type string find(port,"BTL_DATA[ll]") padlocation "76À setattribute -type string find(port,"BTL_DATA[12]") padlocation *77" setattribute -type string find(port,"BTLDATA[13]") padlocation "79" set_attribute -type string find(port,qBTL_DATA[14]À) padlocation "80" setattribute -type string find(port,"BTL_DATA[15]a) padlocation "81" set_attribute -type string find(port,'BTLDATA[16]") pad location "82" set attribute -type string find(port, "BTL_DATA[17]") padlocation "84" setattribute -type string find(port,"BTL_DATA[18]") padlocation "85" set attribute -type string find(port,"BTL_DATA[19]") padlocation "86" setattribute -type string find(port,"BTLDATA[20]") padlocation "87" setattribute -type string find(port,"BTL_DATA[21]") pad_location "88" setattribute -type string find(port,"BTLDATA[22]") padlocation "89" set attribute -type string find(port,"BTL_DATA[23]À) padlocation "90" setattribute -type string find(port,"BTL_DATA[24]") padlocation "91" setattribute -type string find(port, "BTLDATA[25]) padlocation "92" set_attribute -type string find(port,"BTLDATA(26]=) pad location "93" setattribute -type string find(port,"BTLDATA(27]") pad location "94" setattribute -type string find(port,"BTL_DATA[281") pad_location "96" set attribute -type string find(port, "BTL_DATA[29]") pad_location "98" setattribute -type string find(port,"BTLDATA(30]") pad location "99" setattribute -type string find (port, "BTL_DATA[31]") padlocation *100" set_attribute -type string find(port,"TRGT_OUTCEL") padlocation "129" /* EDPAD */ /* set_attribute -type string find(port,"pCLK") pad_location *130" */ /* CLKPAD */ /* For pASIC2 pCLK1 and pCLK2 should be reversed */ setattribute -type string find(port,epCLKl") pad_location "133" /* EDPAD */ set_attribute -type string find(port,"pCLK2") pad_location "130" /* CLKPAD - 8/14/96*/ A% /* setattribute -type string find(port,'FROM_POD') pad_location "133" */ /* HDPAD */ setattribute -type string find(port,"FROMPOD=) padlocation "13s5' /* BIPAD - 8/14/96 */ set_attribute -type string find(port,"dCLK OUT") padlocation "159" setattribute -type string find(port,odCLK IN') pad_location -16' setattribute -type string find(port,"PUIDATA') pad_location "160" setattribute -type string find(port,*PDATA[8]') pad_location "162" setattribute -type string find(port,OPDATA(24]') padlocation '164' setattribute -type string find(port,"PDATA[9]') pad_location "166' set_attribute -type string find(port,OPDATA(25]") padlocation =167' setattribute -type string find(port,"PDATA[10]') pad_location '168" setattribute -type string find(port,rPDATA[261") pad_location '169' set_attribute -type string find(port,"PDATA[lle") pad location '170' setattribute -type string find(port,'PDATA[271") padlocation "171" setattribute -type string find(port,"PDATA[12]") pad location '172' setattribute -type string find(port,"PDATA[28]") pad location "173" set_attribute -type string find(port,"PDATA[13]') pad location '174" set_attribute -type string find(port,"PDATA[29]") pad location "175" set_attribute -type string find(port,'PDATA[14]') pad location '176" set_attribute -type string find(port,"PDATA[30]") pad location "178' setattribute -type string find(port,"PDATA(15]") pad location '179" set_attribute -type string find(port,"PDATA(31]") padlocation '180" setattribute -type string find(port,"PDATA[Ol") pad location '181' set_attribute -type string find(port,"PDATA[16]w) padlocation "183" set_attribute -type string find(port,*PDATA[lJ]) padlocation "184" set_attribute -type string find(port,"PDATA[17]") padlocation "185" set_attribute -type string find(port,"PDATA[2]") pad_location "186" setattribute -type string find(port,=PDATA(18]") pad location '188" set_attribute -type string find (port, "PDATA[3]") pad location "189" setattribute -type string find(port,"PDATA[19]J) padlocation "190" set attribute -type string find(port,aPDATA[4]') padlocation "191" setattribute -type string find(port,"PDATA(20]') pad location "192" set attribute -type string find(port,'PDATA(5sl") pad location "193" setattribute -type string find(port, "PDATA(21]") pad location "194" set_attribute -type string find(port,"PDATA[6]") pad location "195" setattribute -type string find(port,'PDATA(22]") pad location '196" set_attribute -type string find(port,"PDATA(7]") pad location "197" setattribute -type string find(port,'PDATA(23]') pad location "198" set_attribute -type string find(port, "CPUDATA[ ") padlocation "49" set_attribute -type string find(port, "CPUDATA[l]") padlocation "50" set_attribute -type string find(port, "CPU_DATA[2]") pad location "si5" setattribute -type string find(port,'CPU_DATA(3]") pad location "52" set_attribute -type string find(port, "CPU_DATA[41") pad location "53" set_attribute -type string find(port,'CPU_DATA[S]") padlocation "5sS set_attribute -type string find(port, "CPUDATA[6]") padlocation "56" set_attribute -type string find(port,"CPU-DATA(7]") pad location "57" set_attribute -type string find(port, "WR") padlocation "62" set_attribute -type string find(port,""DS") padlocation "63" set_attribute -type string find(port,"CS") padlocation "60" set_attribute -type string find(port,"DTACK") padlocation '58' setattribute -type string find(port,"CPU_ADRS[5]=) padlocation "42" set_attribute -type string find(port,"CPU_ADRS[4]") pad_location "44" set_attribute -type string find(port,"CPU_ADRS[3]") pad_location "45" set_attribute -type string find(port,"CPU_ADRS[2]") padlocation "46" set_attribute -type string find(port,"CPU_ADRS[l]") padlocation "47" setattribute -type string find(port,"CPU_ADRS[(Ol]") padlocation "48" setattribute -type string find(port,"PSI_DRDY") padlocation "200" setattribute -type string find(port,"PDIR(0]") pad location "202" set_attribute -type string find(port,aPATN") padlocation "203" set_attribute -type string find(port,"PDIR([1]") padlocation "204" set_attribute -type string find(port,"TxDAV") padlocation "205" setattribute -type string find(port,"RxDAV") padlocation "206" setattribute -type string find(port,"DATAERRL") padlocation "208" set_attribute -type string find(port,"uCLKOUT") padlocation "18" setattribute -type string find(port,"uCLKIN") padlocation "14" // psipld // // Qucklogic part QL24x32-144 // // Control/Target psi XFR module. // timescale ins / lps module psipld (mCLK1, mCLK2, pCLK1, pCLK2,uCLK-IN, RESET, PDATA, PMODE, BTLDATA, CPUADRS, CP U_DATA,CS,DS,WR,RxDAV, POD_CTL,TO_POD,FROM POD, TRGT_OUTCEL, PUI-DATA,dCLK_IN,TxDAV,DTACK,PATN, PDIR,PSI-DRDY,PRESET, mCLK_OUT,uCLK_OUT,dCLK_OUT,DATA_ERRL); ////////////////////////////////////////////////////////////////////////// //// /// // IO Pin declarations input mCLK1; // uCLK 1 Array CLOCK input mCLK2; // uCLK 2 Global CLOCK input pCLK1; // POD mCLK return Array CLOCK input pCLK2; // POD mCLK return Global CLOCK input uCLK_IN; // Target CLOCK input RESET; // CPU Reset inout [31:0] PDATA; // POD Data to/from the POD inout [6:0] PMODE; // POD Mode (Address for PDATA) inout (31:0] BTL_DATA; // BTL Data to/from the Control Board input (5:0] CPUADRS; // CPU address inout [7:0] CPUDATA; // CPU Data input CS; // PLD chip select (AL) input DS; // CPU Data strobe input WR; // CPU Write input RxDAV; // PUI->PSI Receive Data Valid input [5:0] POD_CTL; // POD Control 1!! TBD See /vincep/verilog/psi pld/README!l! input TO_POD; // PSI->PUI control line input FROM _POD; // BTL Output enable input TRGTOUT CE L; // Target out Chip enaile input PUI_DATA; // Dual purpose PUI data path. PEPROM _DATA/PUIDATA_ERR set input dCLK_IN; // Dclock in output TxDAV; // Transmit Data Valid output DTACK; // CPU Data Acknowledge (tristate - AL) output PATN; // POD Attention PSI sending data to target output (1:0] PDIR; // POD Direction (1=to target, 0-from target) Low range output PSIDRDY; // PSI Ready with data from PUI's output PRESET; // POD reset output mCLKOUT; // mCLK1 Delayed output uCLKOUT; // uCLK Delayed output dCLKOUT; // Dclock out (pass through) output DATAERRL; // Data error during xfr I/1//111/////////I///I//I///////////I//I/////////////////////I//////////// // /// // Reg, wire declarations vire WR_EN; vire CHXSUMtoPUIx2; vire BTLtoPUIxl,BTLtoPUIx2; vire PSItoBTLx2; vire CARtoPUTxl,CARtoPUIx2; vire PSItoPUIx2; vire PATNx2; vire PEPROMDATA; vire PUI DATAERRset; vire (31:0] BTLCRCx; vire [31:01 CAR0,CAR1,CAR2,CAR3,CAR4; reg [31:0] BTLCRCq; reg BTLtoPUI; reg CARtoPUI; reg CSq,WRq,DSq; reg PSIDATAERRLx, PSIDATAERRL; reg PUIDATAERRLx,PUTDATA_BRR_L; reg DTACKq; reg FROM_PODql, FROMPODq2,FROMPODq3; reg TO_PODql,TO_PODq2; reg MAILBOXx, MAILBOX1, MAILBOX2; reg MB CLR, MBCLRx; reg PATNq,PATN_int,PATN; reg [1:0] PDIR; reg PSI DRDY,PSIDRDYx,PSIDRDY_saet,PSI_DRDY_ aetx; reg PSItoBTL, PSItoBTLp; reg P ENql,P_ENq2,P_ENq3; reg RDENq; reg RxDAVql, RxDAVq2,RxDAVq3; reg TxDAV,TxDAVq; reg WE0x, WEllx WE2x, WE3x, WE4x, WESx, WE6x; reg WEOq, WElq, WE2q,WE3q, WE4q, WESq,WE6q, WE6qp; reg (5:0] BTLstatel,BTLstate2; reg [31: 0] BTLDATA_intx,BTLDATAintq; reg [31:0] BTL_DATAq; reg (31:0] PDATAintx,PDATA_int; reg (31:0] PDATAq; reg (31:0] PDATACRCx, PDATACRCq; reg (31:0] PUI _ret0x, PUIretO; reg [31:0] PUI_retlx,PUIretl; reg [31:0] PUIret2x,PUI ret2; reg [31:01 PUIret3x,PUIret3; reg [31:0] PUIret4x,PUI_ret4; reg (3: 01] PMODEql, PMODEq2, PMODEq3; reg 5:01] CPUADRSq; reg (5:0] PODCTLql,POD_CTLq2; reg [2:0].POD CTLq3,PODCTLq4; reg [6:0] PMODE intx,PMODEint; reg [7:0] CONFO,CONF1,CONF2,CONF3,CONF4; reg [7:0] CONFOx, CONFix, CONF2x, CONF3x, CONF4x; reg [4:0] CONF5x,CONF5; reg [7:0] CPU_DATAq; reg (7:0] CPUDATAint; tri [31:0] BTLDATA,PDATA; tri [6:0] PMODE; tri [7:0] CPUDATA; ///////////////////////ú/////////////////////////// // Latch input signals always (posedge mCLK2 or posedge RESET) begin if (RESET) begin CPUADRSq-O;CPU_DATAq-0; CSq-1;WRq.O0;DSquO; BTLDATAquO; PODCTLql-0; FROMPODql.0;TOPODql-=0; PODCTLq2 =-0; FROMPODq2 =0;TO PODq2 0; POD_CTLq30; FROM PODq3-o0; PODCTLq4 - 0; end else begin CSq-CS;WRq-WR;DSq-DS; CPU ADRSq-CPUADRS; CPUDATAq-CPU DATA; BTL_DATAq-BTL_DATA; PODCTLql-PODCTL; POD_CTLq2.POD_CTL; PODCTLq3. PODCTL ( 2: 01]; PODCTLq4 -POD_CTL [2: 01; FROMPODql= FROMPOD; FROMPODq2. FROMPOD; FROMPODq3=FROM_POD; TOPODq1=TO_POD; TOPODq2s.TO_POD; end end IIIIIIIII!11111111111111111111111111111111///////// // CPU Bus Cycle State Machine reg [5:0] STATE,NSTATE; parameter // bit 543210 HEX IDLEm6'bOO00Ol, // 01 WDET-6'bOO0010, // 02 RDET- 6'bOOO100, // 04 RENB.6'bOO1000, // 08 WENB-6'bOOOO1, // 10 DHLD- 6'blOOOOO, // 20 t IDLE-6'bxxxxxl, tWDET-6'bxxxxlx, t RDET.6 'bxxxlxx, t_RENB-6'bxxlxxx, t WENB.6'bxlxxxx, t DHLD=6'blxxxxx; always @(STATE or CSq or DSq or DTACKq or WRq) begin:buscycle_state_mach casex (STATE) tIDLE: begin // Olh IDLE if(ICSq & DSq) begin if (WRq) NSTATE=WDET; else NSTATE=RDET; end else NSTATE=IDLE; end tWDET: begin // 02h Write Detect NSTATE=WENB; end tRDET: begin // 04h Read Detect NSTATE-RENB; end tRENB: begin // 08h Read DTACK Detect if(DTACKq) NSTATE=DHLD; else NSTAT=RE-PNB; end t_WENB: begin // 10h Write DTACK Detect if(DTACKq) NSTATE.IDLE; else NSTATE-WENB; end tDHLD: begin // 20h Hold data extra clock NSTATE-IDLE; end default: NSTATE=6'bx; A 5? endcase end always e(posedge mCLK2 or posedge RESET) begin if(RESET) begin STATE.IDLE; RDENq_0; end else begin STATE-NSTATE; RD ENq=(NSTATE[3] | NSTATE[5]); end end assign WR_EN=NSTATE(4]; /////////////I//I/////////////////////////////////// // Write to Configuraton and Command Assembly Registers // Configuration register enable decoder. Generate DTACK enable to host processor. always (CPUADRSq or WREN) begin: cpu_adrsadecc>de WE0xmo0;WElx 0;WE2x.0; WE3x-0;WE4x.0;WESx. 0;WE6xu0; case (CPU ADRSq [3: 0]) 4'b000l: WE0x-WR EN; // Command Assembly Register 0 (PMODE) 4'bOO10: WElx-WREN; // Command Assembly Register I (PDATA[15:0]) 4'bOO11: WE2x-WR EN; // Command Assembly Register 2 (PDATA[31:16]) 4'bOl00: WE3x-WREN; // Command Assembly Register 3 (PDATA[23:32]) 4'bOl0l: WE4x-WR EN; // Command Assembly Register 4 (PDATA[31:24]) 4'bOllO: WE5x-WR _EN; // Config resister 4 'bOlll: WE6x-WREN; // CLR Checksum default: begin WE0xu0;WElx.0;WE2x=0;WE3x=0;WE4xu0;WESx=0;WE6xu0;end endcase end always O (posedge mCLK2 or posedge RESET) begin if (RESET) begin WEOqO-0; WElq- 0; WE2qu0; WE3qw0; WE4q-0; WESqO-;WE6qo.0; DTACKq-0; end else begin WE Oq=WEOx;WElq-WElx;WE2 q=WE2x;WE3q=WE3x;WE4q-WE4x; WESq-WE5x;WE6q-WE6x; DTACKq.ICSq&(NSTATE[4] I NSTATE([3]); end end ///////////////////11//////////////////////////////////////////////// // PUI Receive registers // Write PUI->PSI return registers always o(posedge pCLK2 or posedge RESET) begin if (RESET) begin RxDAVqlw0; RxDAVq2-0;RxDAVq3u0;PMODEql-0;PMODEq2wO; PMODEq3 0; PDATAqO;end else begin RxDAVql-IRxDAV; RxDAVq2-1RxDAV; RxDAVq3.!RxDAV; PMODEql--PMODE (3: 01; PMODEq2 --PMODE [3:0]; PMODEq3--PMODE [3:0]; PDATAq"PDATA; end end ///////////////////////////////////////////////////////////////////// // PUI return registers always@(PMODEql or PMODEq2 or PMODEq3 or PDATAq or RxDAVql or RxDAVq2 or *RxDAVq3 or PUT ret4 or PUI ret3 or PUI ret2 or PUIretl or PUI retO or PDATACRCq or PSIDRDY_set) begin:pui_ret decode PSIDRDY_setx-O; PDATA CRCx-PDATACRCq; PUIret4x-PUIret4; PUI ret3x. PUIret3; PUI ret2x-PUI ret2; PUI retlx-PUI retl; PUI retOx=PUI retO; casext({RxDAVql,PMODEql}) S'blOl11: PUI_ret4x[15:0].-PDATAq[15:O]; // 7: PUI return 4 'b10101: PUI ret3x[15:0]--PDATAq[15:0]; // 5: PUT return 3 'blOOll: PUI ret2x[15:0]--PDATAq(15:0]; // 3: PUT return 2 'blOOOl: PUIretlx[15:0]--PDATAq[15:0]; // 1: PUT return 1 'blOOOO: PUIretOx[15: 0]--PDATAq[15: 0]; default: begin PUIret4x[15: O]- PUI_ret4[15: 0]; PUI_ret3x[15: O]-PUI_ret3[15: 0]; PUIret2x (15: 0].PUI ret2 [15: 0]; PUIretlx[15:O]-PUI retl115:0]; PUIretOx[15:0].PUI retO[15: 0]; end endcase casex ({RxDAVq2,PMODEq2}) 'blOlll: PUIret4x[31:16]-- PDATAq[31:16]; // 7: PUI return 4 'blO0lo: PUI ret3x[31:16]-- PDATAq[31:16]; // 5: PUI return 3 'b10011: PUIret2x[31:16]-- PDATAq[31:16]; // 3: PUI return 2 'blOOOl: PUI retlx[31:16]-- PDATAq[31:16]; // 1: PUI return 1 'blOOOO: PUI retOx[31:16]-- PDATAq[31:16]; default: begin PUI_ret4x[31:16]-PUI_ret4[31: 16]; PUTret3x[31:16]-PUI ret3(31:16]; PUIret2x[31:16]-PUI_ret2t31: 16]; PUIretix[31 16]-PUI_retl(31:16]; PUI_retOx (31:16]-PUIretO [31:16]; end endcase casex({PSIDRDY_set,RxDAVq3,PMODEq3)) 6'bxlOlll-: PDATA_CRCxPDATA_CRCqA-PDATAq; // 7: PUI return 4 6'bxi10101: PDATA_CRCxPDATACRCq--PDATAq; // 5: PUI return 3 6'bxlOO11: PDATA_CRCxPDATA_CRCq^-PDATAq; // 3: PUI return 2 6'bxlOOOl: PDATA_CRCx- PDATACRCq -PDATAq; // 1: PUI return 1 6'bxlOOOO: PSIDRDYsetx=RxDAVq3; 6'biOxxxx: PDATA_CRCx=O; default: begin PSI_DRDY_setx0O; PDATA_CRCx- PDATACRCq; end endcase end always *(posedge pCLK2 or posedge RESET) begin if (RESET) begin PUI ret4-32'h99999999; // PUI Return data POD 3 PUIret3=32'h66666666; // PUI Return data POD 2 PUIret2=32'haaaaaaaa; // PUI Return data POD 1 PUI retl=32'hS55555555; // PUI Return data POD O AiD PUIretO-0; PDATACRCq.O; WE6qp.0; PSItoBTLp.O; PSI DATAERR L.1;PUIDATA_ERR L-1; end else begin PUI_ret4.PUIret4x; PUIret3-PUI_ret3x; PUI_ret2-PUIret2x; PUIretl-PUIretlx; PUIretO-PUI retOx; PDATA_CRCq=PDATA_CRCx; PSI_DATAERRLPSI_DATAERR_Lx; PUIDATA ERRL,-PUI DATA_ERR Lx; WEG6qp.WE6q; // Sync WE6q (mCLK2 to pCLK2 PSItoBTLp-PSItoBTL; // Sync PSItoBTL to pCLK2 end end alwaysc(PSI_DRDY_set or PSItoBTLp or PSI_DRDY)begin:psirdy_setrst casex({PSI_DRDY_set,PSItoBTLp}) 2'blx: PSI DRDYx=l; 2'b01: PSI DRDYx.O; default: PSIDRDYx=PSI DRDY; endcase end always e(posedge pCLK2 or posedge RESET) begin if (RESET) begin PSIDRDY=O;PSIDRDY set=0;end else begin PSIDRDY-PSI_DRDYx; PSIDRDY set- PSIDRDY setx; end end /////////////////////////////////////////////////// // PSI->BTL Output Mux always0(PODCTLq3 or POD_CTLq4 or PUI_ret4 or PUI_ret3 or PUI_ret2 or PUI retl) begin:btldatamux case ({PODCTLq3}) 3'blOO: BTLDATA intx[15: 0]O-PUIret4t[1S:0]; 3'bOll: BTLDATA intx[15:0] PUI ret3[15:01; 3'b010: BTLDATAintx(15:0] -PUI ret2 t15:0]; default: BTLDATA intx[15:0] -PUI-retl[15: 0]; endcase case(POD _CTLq4") 3b100:lOO BTLDATA_intx[31: 16]-PUI_ret4[31:16]; 3b011O: BTLDATA intx(31:16]-PUI-ret3[31:16]; 3b010: BTLDATA_intx[31: 16]-PUI_ret2 (31:16]; default: BTL DATA intx[31:16]-PUIretl[31:16]; endcase end ////11/////////////I//////////////////////////////// // Configuration register CPU write // Loopback CAR switching assign CARO0CONF5 [4] ? { POD CTLq2, FROM_POD,TOPOD} CPUDATAq, A, I 2766595 CAR1lCONF 5(4]?BTL_DATAq[7: 0]:CPU_DATAq, CAR2-CONF 5[4] ?BTL DATAq [15:8]: CPU_DATAq, CAR3-CONF5 [4] ?BTL DATAq[23:16] CPUt_DATAq, CAR4. CONF5 [4] ?BTLDATAq (31:24] CPU_DATAq; always@(WEOq or WElq or WE2q or WE3q or WE4q or WESq or CONFO or CONF1 or CONF2 or CONF3 or CONF4 or CONFS or CARO or CAR1 or CAR2 or CAR3 or CAR4 or CPU DATAq) begin: conf_reg_select CONFOx-WEOq?CARO CONFO; CONFlx-WElq?CARl CONFl; CONF2x. WE2q?CAR2: CONF2; CONF3x-WE3q?CAR3:CONF3; CONF4x=WE4q?CAR4: CONF4; CONFSx=WESq?CPUDATAq[4:0]:CONF5; end ///////t///////t//t//t///////////////////////////t//// assign PEPROMDATA=I CONFS [ 0] & PUIDATA, PUI_DATAERR_set-CONF5 [ 0] &! PUIDATA; // Mailbox set/reset always@(WEOq or MBCLR or MAILBOX2 or CARtoPUI)begin:mailboxset rst MBCIRx(MAILBOX2&CARtoPUI CONF 5[4]); casex ( {WE0q, MB CLR}) 2'blx: MAILBOXxICONFS[4]; t/ Dont set MAILBOX if loopback enabled 2'b01: MAILBOXx=O; // Clear MAILBOX after sending or during loopback default: MAILBOXx-MAILBOX2; // Otherwise hold previous value endcase end // PSI Checksum DATA ERR alwaysO(PSI_DRDYset or WE6qp or PDATACRCq or PUI_retO or PSI DATAERRL)begin casex({PSIDRDY_set,WE6qp)) 2'blx: PSI_DATAERRLx-(PDATACRCq..PUI_retO); 2'bOl: PSIDATA_ERR_Lx.l; default: PSIDATAERR_Lx-PSI DATAERRL; endcase end // PUI Checksum DATAERR alwaysO(PUI DATAERR_set or WE6qp or PUIDATA ERRL)begin casex(PUI _DATA_BRRset,WE6qp)) 2'blx: PUIDATAERRLx-O; 2'bOl: PUIDATA_ERRLxm1; default: PUI DATAEPRRLx.uPUIDATAERR L; endcase end always *(posedge mCLK2 or posedge RESET) begin if (RESET) begin CONFO-O;CONF1-0;CONF2-0; CONF3-0;CONF4.0;CONF-5S'bOO100; MAILBOXl.O; MAILBOX2eO; MB_CLRO0; end else begin CONFO-CONFOx; CONFl1CONFlX; CONF2.CONF2x; CONF3 CONF3x; CONF4 "CONF4x; CONFS-CONFSx; MAILBOXl-MAILBOXx; MAILBOX2 MAILBOXx; MenCLR-MB CLRx; end end // CPU Configuration register CPU read always e(CONFO or CONF1 or CONF2 or CONF3 or CONF4 or CONF5 or PSIDATA ERR L or PUI DATAERRL or PEPROM_DATA or MAILBOX2 or CPU_ADRSq or PUIretl) begin: cpu datamux case (CPUADRSq[2: O]) 3'bOOl: CPU DATAint=CONFO; 3bO10: CPUDATAint.CONF1; 3'bOll: CPU DATAint=CONF2; 3'blOO: CPUDATAint=CONF3; 3'blOl: CPUDATAint=CONF4; 3'bllO: CPU_DATAint={PEPROMDATA,PSIDATA_ERRL, PUI_DATA_ERRL,CONF5}; default: CPU DATA int-PUI retl[7: 0]; endcase end ////////////////////////////////////////////////////////////////// // BTL State Machine llf1111 IIII TBD!11!1!!1!1!!11111! //+ _____________.......------------- BTLtoPUI /I +___- _------------PSItoBTL // I I ±------------- CARtoPUI // I I I ± ----- PSItoPUI // I I I ±----- CHKSUMtoPUI // I I I I I ± PATNx // I I I I I I parameter // bit S 4 3 2 i 0 HEX nop_orpause {l'bO,l'bO,l'bO,l'bO,l'bO,1'bl},// 01 xfr_datapsito_pui {lblbOlbO,'bl,1'bO,1'b,'b}, // 25 xfr_data pui_topsi (l'bO,i'bO,1'bO,l'bO,1'bO,l'bO}, // 00 xfr_data_cartopui {l'bO,l'b0,1'bl,lbl,l'bO,l'bl}, // OD xfr_done_sendchksum ({l'bl,l'bO,l'bO,l'bll'bl,l'bl}, // 27 dwnld_data psi tobtl = {1'bO,1'bl,l'bO,1bo'b,1'O,1'bl}; // 11 always@(FROM_ PODql or TO_PODql or POD CTLql or FROMPODq2 or TO_PODq2 or PODCTLq2 or CONFS)begin:btlstatedecode A 12 42 2766595 BTL_statel-noporpause; // O1 BTLstate2.noporpause; // 01 casex( CONFS ( 1],POD_CTLql 5: 4], FROMPODql,TOPODql,POD CTLq1 1: O]}) 7'booxxlOl: BTLstatel- xfrdone_sendchksum; // 27 N/U 7'bOlxxlOl: BTLstatel-xfr_datapsitopui; // 25 U 7'bOxxxlOO: BTLstatel-xfrdatapsi_to_pui; // 25 U 7'bOxxxlLx: BTL_statel-xfrdatapsitopui; // 25 U 7'bOixlxxx: BTL_statel-xfrdatapui_to_psi; 0// 0 N/U 7'bOOxlxxx: BTL_stateldwnlddatapsi_tobtl; l// 11 N/U 7'blxxxxxx: BTL_statel- xfrdata_car_to_pui; // OD U default: BTL_statel-nop_orpause; // O1 U endcase casex((CONFS (1],POD_CTLq2 5:4],FROM_PODq2,TO_PODq2, POD CTLq2 [1: 0]}) 7'bOOxxlOl: BTLstate2-xfr_done_sendchksum; // 27 U 7'bOlxxOl: BTL_state2-xfr_datapsi_topui; // 25 U 7'bOxxxlOO: BTL_state2-xfr_data psi_to_pui; // 25 U 7'bOxxxllx: BTL_state2- xfr_datapsi topui; // 25 U 7'bolxlxxx: BTL_state2=xfrdatapuitopsi; // 00 U 7'bOOxlxxx: BTLstate2-dwnlddata psito btl; l// 11 U 7'bLxx:xxx BTL_state2-xfrdatacarto pui; // OD U default: BTLstate2=nop_or-pause; // 1 U endcase end assign BTLtoPUIxl- BTL_statelS[], // U xfrdata_psi_topui, xfrdonesend chksum // PSItoBTLxl=BTLstatel(4], // NIU CARtoPUIx1-BTLstatel[3]; // U xfr_datacarto pui // PSItoPUIxl-BTLstatel[2], // N/U // CHKSUMtoPUIxl-BTLstatel(t], // N/U // PATNxl=BTLstatel[(0]; // N/U assign BTLtoPUIx2-BTLstate2 [5], // U xfr_datapsi_topui, xfr done sendchksum PSItoBTLx2.BTLstate2[4], // U dwnlddataPsito btl CARtoPUIx2-BTL_state2 [3], // U xfrdata cartà_pui PSItoPUIx2-BTL state2[2], // U xfr datapsi_to ui,xfrdatacar_topui, xfrdone_send_chksum CHKSUMtoPUIx2-BTLstate2[1], // U xfr_done_send_chksum //PATNx2BTrLstate2 O]; // U All but xfrdata_puito psi PATNx2-CONFStl] ?CONF5 [2]:BTLstate2 O]; alwayso(posedge mCLK2 or posedge RESET) begin if(RESET) begin BTLtoPUI.O; PSItoBTL-0; CARtoPLTUI.O; P_ENql.O; P_ENq2-0; PENq3.0; PDIR.O; PATNq-1; PATNmO; PATN_int-1; TxDAVq.O; end else begin TxDAVq 43 2766595 PSItoBTL-uPSItoBTLx2; P_ENql.PSItoPUIx2&PATNx2&PDIR[l]; // P_EN Load distribuation P_ENq2mPSItoPUIx2&PATNx2&PDIR([1; // P_ENq3. PSItoPUIx2&PATNx2&PDIR[(O]; // PDIR([1].PSItoPUIx2&PATNx2&PATNint; PDIR[O] -PSItoPUIx2&PATNx2&PATNint; PATN! PATNq; PATN int-PATNq; PATNq. PATNx2; end end ////////////////////////////////////////////////////////////////// // BTL Psudo CRC generate assign BTL_CRCx-BTLtoPUI?(BTLCRCq^BTLDATAq) 0; alwayse(posedge mCLK2 or posedge RESET) begin if (RESET) BTL_CRCq-0; else BTLCRCq-BTL_CRCx; end /////////////////////I////I///////////////1////////////1/////////// // Output enahling. alwayse(CONFl or CONF2 or CONF3 or CONF4 or BTLCRCq or BTL DATAq or BTLtoPUIxl or CHKSUMtoPUIx2 or CARtoPUIxl or MAILBOX1) begin pdata intassign casex ( {BTLtoPUIxl,CHKSUMtoPUIx2,CARtoPUIx1,MAILBOXl1) 4'b0lOxx: PDATAintx.BTL_DATAq; 4'bllxX: PDATA_intxsBTLCRCq; 4'bOxll: PDATA_intx- (CONF4,CONF3,CONF2,CONFl}; default: PDATAintxO0; endcase end always@(CARtoPUIx2 or BTLtoPUIx2 or MAILBOX2 or CONF0 or PODCTLq2) begin pmode intassign casex ( {BTLtoPUIx2, CARtoPUIx2,MAILBOX2}) 3'blxx: PMODEintx-(POD_CTLq2[5:2],1'bO,POD CTLq2[1: 0]}; 3'bOll: PMODEintxCONFO[6:01]; default: PMODE_intx-0; endcase end alwayse (posedge mCLK2 or posedge RESET) begin if(RESET) begin PMODEint-0; PDATAint=0; TxDAV-0; BTLDATAintq-0; end else begin PMODE int-PMODE_intx; PDATA int. PDATAintx; TxDAV-! (TxDAVq&(BTLtoPUIx2lCARtoPUIx2)); BTL DATA intq=BTLDATA intx; end end A15 wire [15:0] PDATAlower,PDATA_upper; assign uCLK_OUT-CONFS (4] ?dCLKIN: 1uCLKIN, // Send uCLK or dCLK to sequencer CPUDATA.RDENq?CPU DATA_int:8'bz, // Apply CPU DATA onto CPU bus DTACK!DTACKq, // DTACK active low mCLKOUT-mCLK1, // Send mCLK2through with delay dCLK_OUT-IdCLKIN, // Send dCLK through with delay PDATA lower-P ENql?-PDATA_int[l15: 0:16'bz, PDATA_upper-P_ENq2?-PDATA_int [31:16]:16'bz, PDATA.{ PDATA_upper,PDATA_lower}, PMODE-PENq3?-PMODEint 7'bz, BTLDATA-(FROM PODq3&!TRGTOUT CEL)?BTLDATA_intq:32'bz, DATAERRL-PSIDATA_ERRL&PUIDATA_ERRL, PRESET- (RESET I CONFS[3]); endmodule // psipld 45. 2766595 ANNEXE B module puipld (mCLK, tCLK, DluCLK, D2uCLK,dCLK, VDD_ON,STRAP,PRESET, PMODE, PMODE seq, PDATA,PDIR, P ATN, TxDAV, EEPROM DATA,JTAGDATA, DISCONNECTED, RxDAV,TDATA_ IN,TDATA_DIS,TDATAOUT,TDATAENB pCLK, UCLK, dCLKB,VDDONN,dCLK_EN,CONF EXT,CONF,DATA_ERRL,PUIDATA); input mCLK; //.CLK (From PSI through PCABLE) input tCLK; // Target User Clock input DluCLK: // Delay 1 Target User Clock input D2uCLK; // Delay 2 Target User Clock input dCLK; // Delay clock feedthrough input VDDON; // Target power on feedthrough input [1:0] STRAP; // PUI ID Strap input PRESET; // PUI Reset input PkTN; // PUI Attention input TxDAV; // Transmit Data Valid. input EEPROMDATA; // EPROM Version data input JTAGDATA; // JTAG Data input DISCONNECTED; // Molex connect inout [31:0] PDATA; // PUI DATA inout [6:0] PMODE; // PUI ADDR inout [4:0] PMODE seq; // PMODE Return sequence input [31:0] TDATA_IN; // Target Data return input [1:0] TDATA_DIS; // Target Data disables (lower, upper) Disable low. output [1:0] PDIR; // PUI->PSI Driver direction (1-PUI->PSI) output RxDAV; // Receive Data Valid output (31:0] TDATAOUT; // Target Data output [31:0] TDATA _ENB; // Target Enables (for TDATA) output pCLK; //.CLK return output uCLK; // Target clock return output dCLKB; // Delay clock feedthrough output VDDONN; // Target power on feedthrough output dCLKEN; // VDD_ON dCLK Enabled output [6:0] CONF; // Configuration output output CONFEXT; // Extended Configuration output output DATA_ RR L; // CRC Input Data Error (AL) output PUIDATA; // Dual purpose PUI data path. PEPROMDATA/PUI DATA ERRset //////////////////////111////////////1/I////I///////I////I//////////////// ////// / // Declarations tri [31:0] PDATA; tri [6:0] PMODE; tri [4:O] PMODE_seq; 46 2766595 vire WEx; vire uCLK; vire REQtrgt data; wire CRC eqsPDATA; wire PDATAEN1, PDATAEN2; vire PMODEEN; wire RST RUN; wire [3:0] PMODEseq intx; vire [31:0] PUI_regXx, PUI regXxor,PUI reg2x,PUI_reg3x,PUI_reg5x; vire (13:0] PUI_reg4x; wire (15:0] PDATAlower,PDATA_upper; wire [31:0] TDATAENBx; wire [31:0] BTL_CRCqdiag; wire dCLKdet, tCLK det; reg (1:0] PMODEseglowerx,PMODEseqlower; reg [1:0] PMODEsequpperx; reg [31:0] BTLCRCx, BTL_CRCq; reg PDIRx; reg (1:0] PDIR; reg RxDAVx,RxDAV; reg PENx; reg WElx,WE2x,WE3x,WE4x, WESx,WE6x,WE7x,WE8x,WE9x; reg WE1,WE2,WE3a, WE3b,WE4,WES,WE6,WE7,WE8,WE9; reg CONP EXTq; reg RUNNING; reg saw tCLK, saw_dCLK; reg tCLKp, tCLK2p, tCLK3p; reg dCLKp, dCLK2p, dCLK3p; reg [1:0] STRAPq; reg (31:0] PDATAq; reg [31:0] PDATAintx,PDATA int; reg (3:0] PMODEq2; reg [31:0] OUTENBq; reg [31:0] OUT DATq; reg TxDAVq2; reg PATNq2; reg PUI_DATA; reg [31:0] PUI regX,PUIreg2,PUI_reg3,PUI reg5; reg (13:0] PUIreg4; reg (31:0] TDATA IN u; reg (31:0] TDATA IN D2u; reg (4:0] PMODE seqint; reg (3:0] PMODE_seqql,PMODE seqq2; reg PMODE_penl, PMODEpen2,PMODEpen3; reg DATA ERRLx,DATAERRL; 1///1////////////////////////Mil//////////t///////// // Latch incoming data,control and sync uCLK alwayse(posedge mCLK or posedge PRESET) begin if(PRESET) begin TxDAVq2=0; PDATAqu0; PMODEq2-0;PATNq2-0;PMODE_ aeqql- 0; PMODEseqq2.0; PMODEpen1=0;PMODE_pen2 =0;PMODE pen3.0; end else begin /2) 47 2766595 PATNq2. PATN; TxDAVq2 -TxDAV; PDATAq-PDATA; PMODEq2-PMODE [3:0]; PMODE seqql-PMODEBseq[3: 0]; PMODE seqq2-PMODEseq[3: 0]; PMODEpenl-PMODE seq ([4]; PMODEpen2-PMODE-seq [4]; PMODE pen3-PMODEseq [4]; STRAPq.STRAP; end end i1/I///1/11//1/1////I//11/////1///////////////// // Address decode assign WExuTxDAV&PATNSc (PMODE (4: 3] --STRAP); always (WEx or PMODE) begin:pmode_write decode WElx-0;WE2x.0;WE3x-0;WE4x-0;WESx-0; WE6x=0;WE7x.0;WE8x-0;WE9x.0; casex"(PMODE([6],PMODE [2: 01}) 4'boool: WElX-WEx; // CRC (checksum) 4b0010: WE2x-WEx; // Output Enb 4'b0011: WE3x-WEx; // Output Data 4'b0100: WE4x-WEx; // Configuration Reg 4'b0101: WE5x-WEx; // Output Mode 4'b1001 WE6x=WEx; // Request TRGT Sync Data 4'b1010: WE7x.-WEx; // Request TRGT ASync Data 4b1011: WESx- WEx; // Request TRGT Direct Data 4'bl00: WE9x-WEx; // Reset CRC Error default: begin WElx-0;WE2x-0;WE3x-0;WE4x-0;WE5X-0;WE6x-0;WE7xm0; WE8x-0;WE9xw0;end endcase end always (posedge mCLK or posedge PRESET) begin if (PRESET) begin WEI-O;WE2-0;WE3a.0;WE3b.0;WE4.0;WE5.0;WE6-0;WE7m- 0;WE8-0;WE9.0;end else begin WElmEix; WE2-WE2x; WE3a-WE3x; WE3b-WE3x; WE4=WE4x; WE5.WE5x; WE6.WE6x; WE7-WE7X; WES-WE8x; WE9.WE9x; end end assign PUI_regXxmWE2?PDATAq:PUI_regX, // Output Enb Hold PUI regXxor[0] -PUI_regX[0] PUI_reg4[12], PUI_regXxor [1].PUI_regX [1] PUI reg4 t12], PUI_regXxor[2]-PUIregX [2]^PUI_reg4 tl12], PUI_regXxor [3] PU'IregX [3] PUIreg4 12], PUIregXxor(4].PUIregX[4] ^PUI_reg4tl2], PUI_regXxor [5] =PUI regX [5] ^PUI_reg4 (12], 48 2766595 PUIregXxor[6]=PUI regX(61]PUIreg4( 121, PUIregXxor[7].PUI_regX (7] PUI reg4 [12], PUI_regXxor [8] PUIregX [8] APUI_reg4 (12], PUI_regXxor [9]. PUI_regX [9] APUI reg4[12], PUI_regXxor[10].PUI_regX [10] PUI reg4 [12], PUI_regXxor[ll].PUI_regX([11] ^PUI_reg4(12], PUI_regXxor[12] PUI_regX[12] PUI_reg4 (12], PUI_regXxor[13].PU-I_regX[13] PUI_reg4[12], PUI regXxor([14]-PUIregX[14]^PUI_reg4[12], PUI_regXxor ([15] -PUI_regX (15] PUIreg4 (12], PUIregXxor [16] -PUI_regX [16] PUI_reg4 (12], PUI_regXxor [17]-PUI_regX (17] PUI reg4 [12], PUIregXxor[18] PUIregX([18] PUI_reg4 [12], PUI_regXxor[19]-PUI_regX[(19] ^PUI reg4 (12], PUIregXxor [20] -PUI regX (20] PUI reg4 (12], PUI_regXxor[21] -PUIregX [21] ^PUT_reg4 [12], PUI regXxor [22] -PUT_regX [22] APUI_reg4 t[12], PUI_regXxor [23] mPUI_regX (23] ^PUI_reg4 (12], PUIregXxor [24] -PUIregX [24] ^PUI reg4 (12], PUI TregXxor [25] -PUI_regX [25] ^PUI_reg4 12], PUIregXxor (26]-PUI_regX[26] ^PUIreg4 [12], PUI _regXxor [27] -PUI_regX [27] ^PUI_reg4[12], PUI_regXxor[28] PUIregX[28] 'PUI_reg4 t12], PUI_regXxor[29]-PUI_regX[29] APUI_reg4t12], PUI_regXxor[30].PUI_regX[30] ^PUT_reg4[12], PUI_regXxor(31].PUI_regX[31] PUTI_reg4[12], PUI_reg2x. WE3a?PUI_regxxor:PUI_reg2, // XOR'ed Output Enb PUIreg3xWE3b?PDATAq:PUI_reg3, // Output Data PUT_reg4x-WE4?PDATAq[13: 0]:PUI_reg4, // PUI Configuration PUIregSx-WE5 ?PDATAq: PUI regS; // Mode always (posedge mCLK or posedge PRBSET) begin if (PRESET) begin PUT_regX.0;PUi reg2-32 'hffffffff; PUT_reg3 -0;PUI_reg4.0;PUIregS- 0; end else begin PUIregX-PUI_regXx; //PUIregl-PUIreglx; PUIreg2- PUI_reg2x; PUT_reg3-PUIreg3x; PUI_reg4-PUI_reg4x; PUI_regS-PUIreg5x; end end assign BTLCRCq_diag-{BTL_CRCq[31:1], (BTL_CRCq[0] PUI_reg4[13])}; // Bit 13 used to induce CRC error always o (posedge DluCLK or posedge PRESET) begin if (PRESET) begin OUT ENBq-32'hffffffff;OTUT_DATq.0;end else begin 49 2766595 OUT_ENBq-PUIreg2; OUTDATq.uPUI_reg3; end end ///1//I//1/1/1//I//I/1/1/11//!1/1////////////////// // TDATA Sync Return always *(posedge uCLK or posedge PRESET) begin if (PRESET) TDATA IN u-0; else TDATA IN u=TDATAIN; end // TDATA Async Return always *(posedge D2uCLK or posedge PRESET) begin if (PRESET) TDATA IN D2u=0; else TDATA IN D2u.TDATA IN; end alwayse(PMODEseqql or PMODEseqq2 or BTLCRCq or TDATAINu or TDATA IN D2u or TDATA IN or BTL CRCqdiag) begin:pdataintdecode case(PMODE seqql 1:0]) 2'bOO: PDATA_intx(15:0]nBTLCRCqdiagtl5:0]; // Checksum (CRC) lower 2'bOl: PDATA intx[15:0]-TDATA IN u[15:0]; // Syncronous lower 2'blO: PDATAintx[15:0]-TDATAIN D2u[15:0]; // Asyncronous lower default: PDATA intx[15: O].TDATAIN15: 0]; // Direct lower endcase case(PMODE seqq2[l:0]) 2'bOO: PDATA_intx[31:16]-BTLCRCqi_diag[31:16]; // Checksum {(CRC) upper 2'bOl: PDATAintx[31:16]-TDATA IN u[31:16]; // Syncronous upper 2'blO: PDATAintx[31:16]-TDATA IN D2u[31:16]; // Asyncronous upper default: PDATAintx[31:161-TDATAIN[31:16]; // Direct upper endcase end always (posedge mCLK or posedge PRESET) begin if (PRESET) PDATA int-O; else PDATAint-PDATAintx; end // PMODE Sequencer reg (9:0] STATE,NSTATE; reg [3:0] PMODE intx,PMODEint; reg RxCRC_enbx,RxCRCenb; assign REQtrgt_data-WE6 WE7 WE8; alwayse(REQtrgt_data or PMODEq2 or PMODE seq lower or STATE) begin: pmode_seq_lowermux casex {REQtrgtdata,STATE [5]}) 2'blx: PMODEseqlowerx=PMODEq2 1:0]; 2 'bOl: PMODEseq_lowerx=0; default: PMODE_seq_lowerx=PMODEseqlower'; î3 5 2766595 endcase end always *(posedge mCLK or posedge PRESET) begin if (PRESET) PMODEseq_lower-O; else PMODEseqlower-PMODEseq_lowerx; end // PMODE Sequencer State machine parameter //bit9876543210 HX STATEO. 10'bOOOOOO000Ol, // 001 - Wait for PATN STATEl-10'bOO0000010, // 002 Wait for PATN STATE2-10'b0000000100, // 004 - Assert PDIR STATE310'b000001000, // 008 - Assert P_EN STATE4.10'bOOO010000, // 010 - POD 3 Data STATES-10'bOO0100000, // 020 - POD 2 Data STATE6- 10'bOOO1000000, // 040 - POD i Data STATE7-10'bOO10000000, // 080 - POD O Data STATE8-1O'bOO100000000, // 100 - CRC STATE9.10'blO00000000, // 200 Release PDIR tSTATEO-10'bxoocxxxxl, t STATE1-10'bxxxx XXXlx, tSTATE2-10'bàxxxXXXIxx, t STATE3.10'bxxxxxxlxxx, tSTATE4=10'bxxxxxlxxxx, tSTATE5x10 'bxxxxlxxxxx, tSTATE6 = 10 'bxxxlxxxxxx, t_STATE7-10' bxxlxxxxxxx, t_STATE8-10'bxlxxxxxxxx, tSTATE9-10'blxx0xxxxxx; aiways@(STATE or PATNq2 or REQ_trgt_data) begin:pui_xfr_statemach NSTATE=STATE1; RxDAVx.0; PDIRx.O; PMODE intx.4'hO; PMODEsequpperx-2' hO; RxCRCenbx-0; P_ENx.O; casex(STATE) tSTATEO: begin // 001 if(REQtrgt_data) NSTATE.STATE1; else NSTATE-STATEO; end tSTATEl: begin // 002 if(IPATNq2) begin NSTATE-STATE2; RxDAVx-0; PDIRx.l; PMODE intx.4'hO; PMODEsequpperx-2 'h3; RxCRCenbx-0; P ENx.ul;end else NSTATE.STATE1; end tSTATE2: begin // 004 NSTATE-STATE3; RxDAVx=i; PDIRx. l; PMODE intx.4'h7; PMODEsequpperx22'h2; RxCRCenbx=0; P_ENx-1; end tSTATE3: begin // 008 51 2766595 NSTATE-STATE4; RxDAVx-1; PDIRx-1; PMODE_intx-4'hS; PMODEsequpperx-2'hl; RxCRC_enbx-l; P_ENx-1; end tSTATE4: begin // 010 NSTATE-STATES; RxDAVx-1; PDIRx-1; PMODE intx-4'h3; PMODEsequpperx-2 'ho; RxCRC_enbx-1l; P_ENx.1; end tSTATES: begin // 020 NSTATE.STATE6; RxDAVX-1; PDIRx-1; PMODEintx4'hl; PMODEsequpperx=2'h0; RxCRC_enhx.ul; P_ENx.l; end tSTATE6: begin // 040 NSTATE-STATE7; RxDAVx-O0; PDIRxl.1; PMODEintxm4'hO; PMODEsequpperx2'hO; RxCRCenbx-l; P ENx-1; end tSTATE7: begin // 080 NSTATE-STATE8; RxDAVx-0; PDIRx-1; PMODE intx-4 'h0; PMODEsequpperx.2'hO; RxCRC_enbx.0; P_ENx.1; end t STATE8: begin // 100 NSTATE-STATE9; RxDAVX=1; PDIRx=1; PMODE intx_4'h0; PMODEsequpperx-2'h0; RxCRC_enbx=0; PENx.0; end tSTATE9: begin // 200 NSTATE.STATE0; RxDAVx-0; PDIRx-0; PMODEintx-4'hO; PMODEsequpperx.2'h0; RxCRC_enbx-0; P_ENx.-0; end default: NSTATE.10'bx; endcase end assign PMODEseq_intx. { PMODE seq_upperx,PMODE_ eq_lower); alwayse (posedge mCLK or posedge PRESET) begin if (PRESET) begin STATESTATEO; RxDAV-0; PDIR.0; PMODEint.0; PMODEseq_int-0; RxCRCenb.0;end else begin STATE-NSTATE; RxDAV-RxDAVx; PDIR [ll -PDIRx; PDIR[0 -PDIRx; PHODE_int-PMODEintx; PMODEseq_int- { P_ENx,PMODE_seq_intx); RxCRC_enb.RxCRCenbx; end end tl,111111111tllltlllltlltlt#11111 1111tllllt,,,,,,,,,,,.......... 52 2766595 // Incoming BTL Psudo CRC (Checksum) generate assign CRCeqs_PDATA- (BTL CRCqdiag--PDATAq); alwayse(TxDAVq2 or PMODEq2 or RxCRC_enb or WE1 or WE9 or CRCeqs_PDATA or DATA_ERR_L or BTL CRCq_diag or PDATAq)begin: data err mux BTL CRCx.((TXDAVq2&(PMODEq2[3:0] 1-4'bO0Ol)) RxCRCenb)?(BTL_CRCq_diag^PDATAq) 0; casex({WE1,WE9}) 2'blx: DATAERRLx=CRCeqsPDATA; 2'bOi: DATAERRLx-1; default: DATA_ERR_Lx=DATA_ERRL; endcase end alwayse (posedge mCLK or posedge PRESET> begin if(PRESET) begin BTLCRCq-0; DATAERRL-I; end else begin BTL CRCq=BTL_CRCx; DATA_ERR_L-DATAERR_Lx; end end t/////////////////////////////////////////////////// /I Running assign dCLKdet - dCLK2p && IdCLK3p; assign tCLKdet - tCLK2p && ItCLK3p; always Q(posedge mCLK or posedge PRESET) begin if (PRESET) begin RUNNING CONF EXTq-O; else CONFEXTq-(STRAPq=-2'bll)?RUNNING:PUIreg4 [7]; end /////////////////////////////////////////////////// assign TDATA_ENBx [0] PUI_regS [(0] ?OUT_ENBq ([0] PUI_reg2 (01, TDATA_OUT [01 mPUT regS [01 ?(XUT_DATq [01]:PUIreg3 (0], TDATAENBx [1] - P_regS (l]?OUT_ENBq[ll] PUIreg2 [1], TDATA_OUT(I]PUIreg5[1]?OUTDATq[l]:PUI_reg3(1], TDATA-ENBx (2] -PUI-regS [(2] ?OUTENBq [2: PUI_reg2 [2], TDATA_OUT[21] -PUI_regS[2] ?OUT DATq[2]:PUI_reg3 [2], TDATA_ENBx [ 3] -PUI_reg5 [(3] ?OUT_ENBq [ 31:PUI reg2 (3], TDATA_OUT[3].PUI reg5[3]?OUTDATq(31:PUI_reg3[3], TDATA_ENBx[4] "PUIreg5S[4]?OUTENBq(4] PUI_reg2[4], [6Z] cú6;D-Ind: [6Z] bLva-JMo [6Z] s&=-Ind- [6Z] Jlno-V.LVaL 167] rfiQ2-Ind- [6zlbEtOE-Inoé [6Z] sF>eIna[6Z]XaNZ-YLVaCL [gr] r$ --I: [8Z] zbJ.Vcmoz t-JinO [88rL.nVJa] SLa[8]0 LV [B] Zr.-lad: [18] bSN-JÀoZ [ Z8] sba-Ind- [8Z] xEN-YjvuLV [LZ] úB--Inm: [L] b.xya--OZ [LZI si-lanad- [L:l.novy.voL [C] crz-.Ena: [L l] b -a-ot. [Lz] s]sEr-a- [L] x_ -vY,.c [9r] cma r-na: [19] bj,,a--.o [r9] sBr--na- [ 9:] zJzo-va.L À[9] ZrBz -na: [9z] b ms-n.&o [9g sr>-z-ind- [9L] x-m-via ['fsz] ú5. -un,: [SC]bT--:& [S] SS-'- [sn]aovJxa.'V-L. À[sz]J -r-ina: tsz]bas-ano [so] sC:-!n[s]5 xai-,x w [1,Z] úBi.-Inaa: [, E]b.LV&noZ [ul] ser--Ind- [)l] Lno'Vú.OLr [un]zE Ifna: tn]bENa jaoL[e]sS; 2Indl-z]xa 2vxLoL [c1] tfc>--In: [r] ZbL-a-Tno. [cr)] sBiï--a- [ci no-YV.LvaT. ú [ ú] z.--Ina: [C) banb-j-aoL [cri SB0Iznd-[cr]X O--VlyTcLL À [Z] trIl-m d: I[n]bLy-a-noz [r] s roQz lsd- [rn] x o-LyvaLc À [m]i rB.--ma: [z] bg.V--no z [c]S sB-.I m- r[n] YN-Y.YU.L À [lz]ale=-m: fer] babJd-- zOe [tri seO-i-mt [Z:] xabt-vUYcu [Ti c]:ri-d:-n: [Ti) bLva-no.zL [TS] sa-InZa- T L noyjvxcLL * []ZrirB.in d:[î]bENc-Lnoz.[î.z]EIa0nd[Tz)xEa 2. LyCaL ['or] c.-xInd: [oz)]bau-,oz t for]) sz-jo- [mtoZ noy.L.cL [O' r[] min d: [oz] bE-Njnoz [o] sfai-. a In- [on] xN- v.lYo.L ([6'1] B.- _In_: [6T] blVy--MO.L [6T] srEt-1Ind- ['6T] ZaO-y.JV.Z 16[] Zr:-zna: [6T] baà-jnoz [6T] sr,.ztld- [61] xaa-vycUL ( [ST] tE.:z--Tna: [Z] be -- aOî [ sT] bsEJ--' [liT] 3O--h-afYJxa.L [eT] -I: [T]: - -m 1 T1 E> LOZ. [eT] s -T.in- [81] xT Y2LYcJLL., [LTZ] trz-ZJd: [LT] biyo-mO. [LT) sroa--IncT- [Ll]:, IO- (L[T] EE'r-Ilnd: [LT] bt--: Oz [LAt] S$:a.a--d= [Li] xa, -Y.Tya.L [91] úa n-Ina: [91) b bsY -noz [(91] sÈa-T Ind- []) X Lab a. L- [ST] úC6,-ana: [S] bx-T-LCTmoO [ST] sEr>Z-lna- rST] ML--vYJLL T faMd:[S]i -na f ST) Jnoz fST] sax-n I- [ST] sxaN-LrYva.L [(T) úlcz-md: [1î] bLYaf-noZ [T] sQ:t-Ind. [tT]:.no-JYc., [,T] crBQ-zmn: [f[) I L:,o. [iT] 5:za-na- [,T) 'XENILycL. [úT]c ú:-B m: Ia] ttbMa,-JMO oL [ ú 1T]sin-I - fI [úT]J n-- VJOYxcL [úc] z,: ina: [úc] bainX [noz [eT] sa:-z mdi [úúT]c ox7y-VLyL [rT] úra-zTa: [cZ] b a.Y-M LnOL [u] S na- T- [ZT]J no-v.LVLL [1Z) cr z aT: [zi] bz a-. noT [Z] s-Ox xaut [z)T x iMyd.LV [Tlt úB,.x-ZQ: [TTl]bLv-Y lO& [TT]îî S[TT]sO-- Y- -3LYOL TT1] t:z--Ind: [Til beN-.a-O& [ T] SB.BQi-- d- [lT] T XNR--Y.LCLL [o] EBa2 -Ind: [OT] bLva L-mO [OT] s-izaiIn- [oT].0 VJoX-Lc [o] rBz:mIna [OT] bEa-mLOz [o!] sBi-Ina- foi] Xab-Y.LyL (6] úBEi Ina: î6îbJwa. nO4 r61 S Ba--Ifa- (6]J.O7VX.LYL a [(6] z) s Ina: [ 6] baà-Lo [6] s-z mIna- [6] 6Xa-YJ-aL [8] r Inad: [8]bLbjyàInog [8] SBQi als- [e] jnoyLOVJCLL [r] ri.-Inr: [e)baN-moz [ 1 sSax-Ina- [e] xa-Y-VaUL [L] úCB=na: [L] bLv-cinoz [L] s6i;-Tnd- [L] JnO--.VyCLL tL] Z502 Ina: [L] bú:i-lO L [L] sb--Oin.- L -XaN V.U.-Lv [cB Ez -.Zî: [9] bLya-foO [9 SBE-n-Ind- [9 x'not-V.LVCL a [9] ú>- Znina: [ 9] b.Na-ajo0 [9) sr- Bzdn[9] x _o-EYLvyJvaL [ s] ccr,*:-zln: [ s] bmt-,z.oz [ s) sE f>r-znd- [ s9] xa.-w.LVc a [sl t,-- Ina: [s] bLya-Laoz [s] s,,.x-ina- [s[], movYxuacL a [S] B2- -Ina: fs] btN --.Lno. [S] sSziba-- [s] xEN7YLYa'.T [À] cB-1:z-Zc [,] bLYQ.-l0 [À] S$--Zia-[ fi] O-V.LVc' TDATAENBx[30] -PUI regS[30] ?OUTENBq[30] PUI_reg2 (30], TDATAOUT[30]PUtTI_reg5(30]?OUTDATq(30]:PUI_reg3 [301, TDATA_ENBx[31] -PUIregS[31] ?OUT ENBq [31]:PUI_reg2 (31], TDATAOUT[3] -PUIregS[31]?OUTDATq[31] PUIreg3 (31]; assign TDATA ENB [0 -TDATA ENBx[ol ITDATADIS [0], TDATAENB[16] TDATA- ENBx[16] TDATADIS[ll], TDATAENB(1]-TDATAENBx [1 ITDATADIS (0]1, TDATA _ENB [17] -TDATA ENBx [17] II1 TDATA_DIS (1], TDATA ENB[(2]-TDATA_ENBx (21 1! TDATA_DIS [O], TDATA_ENB[18] -TDATA ENBx[181]!TDATA_DIS (1], TDATA_ ENB [31= -TDATAENBX[(3] 1 TDATA_DIS (O], TDATA ENB[19]-TDATA ENBx[19] ITDATA DIS[l], TDATAENB[41]TDATA ENEx[4]IITDATA_DIS(O], TDATAENB[20]=TDATA_ [NBx[20]1ITDATADIS(l], TDATA ENB ( 5 1]-TDATAENBx [5] TDATADIS (O, TDATA ENB([21]TDATAENBx[21]IITDATADIS l], TDATA_ENB[61-TDATA_ENBx[6] ITDATADIS O], TDATA_ NB[22]-TDATA_ NBX(22]I!TDATADIS(1], TDATA_ENB 7]. TDATAMENBx(7]ITDATA_DIS [0], TDATAENB(231]-TDATAENBx(23]IITDATADIS[l], TDATAENB(8]-TDATA_ENBx[8] IITDATA_DIS [O], TDATAENB[24] TDATA ENBx(24] I TDATADIS(1], TDATA _ENB[9].TDATA_ENBxt9l |TDATADIS [0O], TDATAENB[25]. TDATA_ENBx[2511]!TDATA_DIS(1], TDATA_ENB[lo0l]TDATAENBx[10]!TDATA_DIS[OI, TDATA ENB [26].TDATA _ENBx [26]IITDATADIS( [l], TDATANB ( 11]-TDATAENBx 11] I TDATADIS 0], TDATA_ENB(27]-. TDATAENBx (27])ITDATA_DIS (1], TDATAENB[12]-TDATA_ ENBx[12] ITDATADIS (O], TDATA_ENB[281-TDATA_ENBx (28] 1TDATADIS( [11, TDATA ENB[13]-TDATA ENBx[13] ITDATA DIS(O], TDATAENB[29]-TDATA_ENBX [29]I!TDATADIS (1], ATAENB[4] -TDATA_ ENBx 1414] 1TDATA_DIS (O], TDATAENB [30]-TDATA_ENBx (30 1TDATADIS [l1], TDATA ENB[15]-TDATA ENBX[15]ITDATADIS(O], TDATA ENB(31]-TDATA ENBX(31]JITDATA DISIl]; 1/1/////I//I/I//I//1/////I//11//////////////I////////////I////////////, //////// // PUITDATA Output always (EEPROMDATA or CRC eqs_PDATA or WE1 or DISCONNECTED or JTAGDATA or PUI reg4 or VDDON) begin case (PUI_reg4 (11: 91) 3'bOOO: PUIDATA-EEPROC"_DATA; 3'bOOl: PUIDATA-WE1&ICRC eqsPDATA; 3 'bOlO: PUIDATA-DISCOfNECTED; 3'bOll: PUIDATA-JTAGDATA; default: PUIDATAVDDON; endcase end assign CONF-PUI reg4 [6 0], CONFEXT-CONFEXTq, /3i0 2766595 pCLK.mCLK, dCLKBdCLK, uCLK.tCLK, VDDONN-iVDD ON, dCLKEN.!VDDON | PUI_reg4[8], PDATA_EN1- (STRAPq.-PMODEseqql 3 2]) &PMODEpenl, PDATA_EN2 "(STRAPq-.PMODE_seqq2[3:2]) &PMODEpen2, PDATAlower-PDATA EN1?PDATA int(15:0]:16'bz, PDATA_upper-PDATAEN2?PDATA_int [31:16]:16'bz, PDATA={ PDATA upper,PDATA_lower}, PMODEEN= (STRAPq-u2'bOO) &PMODE_pen3, PMODEPMODEEN?{3'hO,PMODE int)}:7'bz, PMODEseq (STRAPqun2'bOO) ?PMODEseqint: 5 'bz; endmodule // puipld /////////////////////////////////////////////////// netattribute -type string find(port,"PUI DATA") padlocation "2- set_attribute -type string find(port,"EEPROM_DATA") pad location "3" set_attribute -type string find(port,=VDD_ON") pad_location u8" set_attribute -type string find(port,"VDD_ONN") pad location "208" setattribute -type string find(port,ÀdCLKB") padlocation "9" setattribute -type string find(port,"dCLK") padlocation "11" set attribute -type string find(port,"PDATA[O]") padlocation "178" /* BIPAD */ setattribute -type string find(portPDATA[l]") pad_location "180' /* BIPAD */ setattribute -type string find(port,"PDATA[2]) pad location "183' /* BIPAD */ setattribute -type string find(port,"PDATA[31") padlocation "185' /* BIPAD */ setattribute -type string find(port,*PDATA[4]a) pad_location '188" /* BIPAD */ set attribute -type string find(port,RPDATA[5]m) padlocation "190" /* BIPAD */ setattribute -type string find(port,"PDATA[6]J) pad location '192' /* BIPAD */ setattribute -type string find(port,OPDATA[7]") pad_location "194" /* BIPAD */ set attribute -type string find(port,"PDATA[8]") pad_location "159" /* BIPAD */ set attribute -type string find(port,'PDATA9 1') pad location *161" /* BIPAD */ setattribute -type string find(port,"PDATA(o10]) pad location "164' /* BIPAD */ setattribute -type string find(port,"PDATA[ll]") padlocation "167" /* BIPAD */ setattribute -type string find(portPDATA(l2]") padlocation "169" /* BIPAD */ setattribute -type string find(port,'PDATA[131") padlocation '171' /* BIPAD */ setattribute -type string find(port,IPDATA14]1") padlocation "173" /* BIPAD */ set attribute -type string find(port,*PDATA(15]') pad location '175" /* BIPAD */ * set_attribute -type string find(port, PDATA[l6]) pad location "179" /* BIPAD */ set_attribute -type string find(port,"PDATA[17]) pad location "181" /* BIPAD */ set attribute -type string find(port,OPDATA(l8]) padlocation '184' /* BIPAD */ setattribute -type string find(port, PDATA19] ") pad location '186" /* BIPAD */ set attribute -type string find(port, PDATA[20]) pad_location '189' /* BIPAD '*/ setattribute -type string find(port, PDATA(21]) padlocation '191" /* BIPAD */ setattribute -type string find(port, "PDATA(22]") pad location "193" /* BIPAD */ setattribute -type string find(port,"PDATA[23]") padlocation 19s5" /* BIPAD */ setattribute -type string find(port, PDATA(24]") padlocation "160" /* BIPAD */ set_attribute -type string find(port, PDATA[25]") padlocation "162" /* BIPAD */ setattribute -type string find(port, PDATA(26]) padlocation "166" /* BIPAD */ set_attribute -type string find(port, PDATA(27]") padlocation '168" /* BIPAD */ set attribute -type string find(port, "PDATA(28]) pad location "170' /* BIPAD */ setattribute -type string find(port,"PDATA(29]") pad location "172" /* BIPAD */ set_attribute -type string find(port,"PDATA(30]") padlocation "174" /* BIPAD */ setattribute -type string find(port,"PDATA[31]") padlocation "176" /* BIPAD */ set_attribute -type string find(port,"PMODE(o0]") padlocation "198" /* BIPAD */ set_attribute -type string find(port, "PMODE[l]") padlocation "200" /* BIPAD */ set attribute -type string find(port, "PMODE[21") padlocation "202" /* BIPAD */ set attribute -type string find(port, "PMODE[3]") padlocation "203" /* BIPAD */ set attribute -type string find(port,""PMODE[4]"") pad location "204" /* BIPAD / setattribute -type string find(port, PMODE[5]") pad location "205" /* BIPAD */ setattribute -type string find(port,"PMODE[6]") padlocation "206" /* BIPAD */ setattribute -type string find(port,"PATN") pad location "25" /* EDPAD */ setattribute -type string find(portoTxDAV") pad location "4" set_attribute -type string find(port, "RxDAV") pad location "5" set_attribute -type string find(port,"STRAPO] ") pad location "6" set attribute -type string find(port, "STRAP[(1] ") pad location "7" setattribute -type string find(port, "PDIR[]-") pad location "196" setattribute -type string find (port, "PDIR(l]") pad location "197" set attribute -type string find(port," PRESET") pad location "28" /* EDPAD */ set attribute -type string find(port, "TDATADIS[O]") pad location "132" /* HDPAD */ set attribute -type string find(port, OTDATADIS (l]) padlocation "129" /* IDPAD */ setattribute -type string find(port,""mCLK") pad location "26" /* CKTPAD */ setattribute -type string find(port, "pCLK") pad location "1" setattribute -type string find(port, "tCLK") padlocation "130" /* CTPAD */ setattribute -type string find(port,"uCLK") pad location "146" setattribute -type string find(port, "DluCLK") pad location "29" /* EDPAD */ setattribute -type string find(port,"D2uCLK") padlocation "133" /* HDPAD */ setattribute -type string find(port."PMODEseq([0]") padlocation "138" /* BIPAD */ set_attribute -type string find(portPMODE-_seql *) padlocation '139" /* BIPAD */ set_attribute -type string find(port,"PMODE_seq[2]) pad location "140" /* BIPAD */ set_attribute -type string find(port,"PMODE_seq[3] ") padlocation "141" /* BIPAD */ set attribute -type string find(port, PMODEseq[4] ") pad_location *142- /* BIPAD */ set attribute -type string find(port,eCONF[0]") pad location "149" set attribute -type string find(port," CONF[l]) padlocation '150' setattribute -type string find(port, CONF(2]") pad location "151- set attribute -type string find(port,"CONF[3]1} pad_location "152' set attribute -type string find(port, 'CONF[41') pad location "153" set attribute -type string find(port,"CONF[S]') pad location '154" set attribute -type string find(port, "CONF[61) padlocation "155- set attribute -type string find(port,"CONFEXT-) pad location *156- set attribute -type string find(port,*dCLK_EN') padlocation '148" /* set attribute -type string find(port,"CONF[7]") padlocation "156" -vjp */ /* set attribute -type string find(port,"CONF[8]") pad location "148" -vjp */ setattribute -type string find(port, "TDATAIN([0]) pad location "135" set_attribute -type string find(port, "TDATAIN[(l]) pad location "125" setattribute -type string find(port, "TDATAIN[2] ") pad location "122' setattribute -type string find(port, 'TDATA_IN[3] ") padlocation '119" set attribute -type string find(port, -TDATA IN[4]) pad location "115" set_attribute -type string find(port,- TDATA_ IN[]S) pad location "111" setattribute -type string find(port, *TDATA_IN[6]") pad location "108" setattribute -type string find(port, "TDATAIN[71]') pad location "105" setattribute -type string find(port, "TDATAIN[8] ") padlocation "99" set attribute -type string find(port, "TDATA_IN[9] ') pad location '94" setattribute -type string find(port, "TDATA_IN[lO] ") pad_location "91l set_attribute -type string find(port, -"TDATA IN(11]-) pad location "88" setattribute -type atring find(port, "TDATA_IN(12] ") pad_location "85" setattribute -type string find(port,"TDATAIN(13] ") pad location "81- setattribute -type string find(port,"TDATAIN[14]") pad location "77" setattribute -type string find(port,*"TDATA_IN[l5]") pad location "74" setattribute -type string find(port,'TDATA_IN(16 1") pad location "70" setattribute -type string find(port,"TDATAIN[17] ") pad_location "67" setattribute -type string find(port,"TDATAIN[18] ") pad location "64" setattribute -type string find(port,"TDATAIN[19]1) pad location "60" set_attribute -type string find(port,OTDATA_IN[20]-) padlocation "56" set_attribute -type string find(port,=TDATA_IN[21]) padlocation "52' setattribute -type string find(port,"TDATAIN[22] ") pad_location "49" set_attribute -type string find(port,"TDATA_IN[231]") padlocation "46" set_attribute -type string find(port,"TDATA_IN[24] ") padlocation "42" set_attribute -type string find(port,*TDATA IN[251-) padlocation "38" set_attribute -type string find(port,OTDATA_IN[26] *) padlocation "35" set_attribute -type string find(port,"TDATAIN[27] ") pad location "32" setattribute -type string find(port,"TDATA_IN[28] ") padlocation "22" setattribute -type string find(port,""TDATAIN[29] ") padlocation "19" Lt1 set_attribute -type string find(port,=TDATA_IN[30]") pad_location "16- setattribute -type string find(port,-TDATAINT[31]") padlocation "13" setattribute -type string find(port,"TDATAOUT[tO]) padlocation "136" set_attribute -type string find(port,"TDATA OUT[1]"") padlocation "126" setattribute -type string find(port,"TDATA_OUT[2]") padlocation "123" setattribute -type string find(port,"TDATA_OUT[3]1) padlocation "120" set attribute -type string find(port,"TDATA_OUTt(4]") padlocation "117" setattribute -type string find(port,'TDATAOUT15]-") pad location "112- setattribute -type string find(port,'TDATA_OUT[T6]") padlocation "109" setattribute -type string find(port,"TDATA_OUT[7]8) padlocation m"106 set_attribute -type string find(port,*TDATA_OUT[8]") pad location "100" setattribute -type string find(port,"TDATAOUT[9]") padlocation "96" setattribute -type string find(port,'TDATA_OUT[tl0]") padlocation "92" setattribute -type string find(port, "TDATA_OUT[11]") padlocation "89" setattribute -type string find(port,""TDATA_OUT[12])") padlocation *86"m setattribute -type string find(port, "TDATA_OUT[13]") padlocation "82" set attribute -type string find(port,"TDATA_OUT[14]") padlocation "79" set attribute -type string find(port,eTDATAOUT[1t5]") padlocation "75" set attribute -type string find(port,"TDATAOUT[tl6]) padlocation "71" set attribute -type string find(port,"TDATA_OUT[17]") pad location "68" set attribute -type string find(port,"TDATA_OUT[181") padlocation "65" set attribute -type string find(port, "TDATAOUT(19]") padlocation '62" setattribute -type string find(port, "TDATA_OUT[20]") pad_location "57" setattribute -type string find(port,"TDATAOUT(21]") padlocation "53" set_attribute -type string find(port,"TDATA_OUT[22]") padlocation "50" set_attribute -type string find(port,"TDATAOUT[23]") pad location "47" setattribute -type string find(port,"TDATA OUT[24]u) pad_location "44" setattribute -type string find(port,"TDATAOUT[25]>) padlocation "39" set attribute -type string find(port, ITDATA_OUT[26] ") pad_location "36" set attribute -type string find(port, "TDATAOUTT(27]") pad_location "33" set attribute -type string find(port,"TDATA_OUT[28]") pad_location "24" set attribute -type string find(port,"TDATA_OUT[291") padlocation "20" set attribute -type string find(port,"TDATA_OUT[30]") pad_location "17" setattribute -type string find(port, "TDATA_OUT(31]") pad_location "14" setattribute -type string find(port,"TDATA _ENB(0]) pad location "137" setattribute -type string find(port, "TDATAENB(1]") padlocation 0128" set attribute -type string find(port,"TDATAENB[2]") pad location "124" setattribute -type string find(port,"TDATAENB[3]") padlocation "121" setattribute -type string find(port, TDATA_KNB[4]") pad location "118" setattribute -type string find(port,"TDATA_ENB[s]") padlocation "113" setattribute -type string find(port,"TDATAENB[6]") padlocation "110" mst attribute -type string find(port,"TDATA_ENB[7]") pad_location a107" setattribute -type string find(port,"TDATA_ENB[8]") padlocation "101" setattribute -type string find(port, "TDATAENB(9]-) pad location "98" setattribute -type string find(port,"TDATA_ENB[l0l") pad_location "93" setattribute -type string find(port,"TDATAENB[1l]") padlocation "90" set_attribute -type string find(port,"TDATA_ENB[12]") pad location "87" setattribute -type string find(port,"TDATA_ENB[13]") pad location "84" set_attribute -type string find(port,"TDATA_BNB[14]') pad_location "80" set_attribute -type string find(port,"TDATA_ENB[15]") padlocation "76" set_attribute -type string find(port,"TDATAENB[1t6]) pad_location "72" set_attribute -type string find(port,"TDATA_ENB[17]") padlocation "69" set attribute -type string find(port,"TDATA_ENB[18])" pad_location "66" set_attribute -type string find(port,"TDATA_ENB[19]") pad_location "63" set_attribute -type string find(port,"TDATA_ENB[20]") pad_location "58" setattribute -type string find(port,"TDATA_ENB[211") padlocation "55" set_attribute -type string find(port,"TDATA_ENB 221") pad_location "51"Si" set_attribute -type string find(port, "TDATA_ENB[23]") pad_location "48" set_attribute -type string find(port, "TDATA_ENB[24]-) padlocation "45"setattribute -type string find(port, "TDATA_ENB[25]') pad_location "40" set_attribute -type string find(port, "TDATA_ENB[261") padlocation "37" setattribute -type string find(port, "TDATAENB(27]") pad location "34" set_attribute -type string find(port, "TDATA_ENB[28]") padlocation "31" setattribute -type string find(port, "TDATA_ENB[29]") padlocation "21" setattribute -type string find(port, "TDATA_ENB[30]") pad_location "18" set attribute -type string find(port, "TDATA_ENB[31]") pad location "15" setattribute -type string find(port, "DISCONNECTED") padlocation "102" setattribute -type string find(port, "JTAGDATA") padlocation "143" setattribute -type string find(port, "DATA_ERRL") pad location.144" 1* **************t** ********************* *** ********** **.******************** REVENDICATIONS 1. Système E/S (d'entrée/sortie) cible destiné à coupler un émulateur (102) ayant une pluralité de bits de données à un système cible (110), comprenant: une pluralité de modules PSI (Pod System Interface ou Interface Système à ensemble fonctionnel Pod) (104), chaque module PSI envoyant des bits d'entrée à l'émulateur (102) et recevant des bits de sortie et des bits de validation de sortie de l'émulateur dans un ordre prédéterminé; un câble (106) couplé à chacun des modules PSI (104); et une pluralité de modules PUI (Pod User Interface ou Interface Utilisateur à ensemble fonctionnel Pod) (108), chaque module PUI étant connecté à l'un respectif des modules PSI par un câble respectif, et de plus connecté au système cible (110) pour transmettre les bits d'entrée, de sortie et de validation de sortie vers le système cible et à partir de ce dernier dans l'ordre prédéterminé. 2. Système E/S (d'entrée/sortie) cible selon la revendication 1, dans lequel l'émulateur (102) transmet 128 bits de sortie et 128 bits de validation de sortie au système cible (110). 3. Système E/S (d'entrée/sortie) cible selon la revendication 1, dans lequel les bits de sortie et les bits de validation sont envoyés de l'émulateur durant des tranches de temps différentes. 4. Système E/S (d'entrée/sortie) cible selon la revendication 1, dans lequel les bits de sortie et les bits d'entrée sont envoyés respectivement de l'émulateur durant des tranches de temps différentes. 5. Système E/S (d'entrée/sortie) cible selon la revendication 1, dans lequel l'émulateur (102) reçoit 128 bits d'entrée du système cible (110) via la PSI, le câble et la PUI. 6. Système E/S (d'entrée/sortie) cible selon la revendication 1, dans lequel il est prévu douze PSI et douze PUI. 7. Système E/S (d'entrée/sortie) cible selon la revendication 1, dans lequel il est prévu onze PSI et onze PUI. 8. Système E/S (d'entrée/sortie) cible selon la revendication 1, dans lequel les bits d'entrée, de sortie et de validation sont envoyés au cours de quatre tranches de temps.