FR 2617304 A1 19881230 FR 8806038 A 19880505 La présente invention concerne les systèmes informatiques et, plus précisément, un dispositif pour contrôler les flux de données entre un bus d'entrée/sortie et une mémoire locale d'un processeur d'entrée/sortie. La demande de brevet US déposée le 21 octobre 1986 sous le numéro 921 313 au nom de Bain et al., intitulée Memory Based Interagent Communication Mechanism (système de communication interagent basé en mémoire) et cédée à Intel Corporation, -concerne le problème d'entrée/sortie essentiel relatif à la manière de coupler deux bus de types différents et d'assurer un flux de données entre ces deux bus. L'un des bus est un bus d'entrée/sortie. Sur le bus d'entrée/sortie, on doit gérer divers dispositifs ayant des débits très variés de données produits par divers circuits. Certains dispositifs présentent en outre le problème de périodes d'attente suivies par des périodes très actives avec des transitions très brusques d'une période à l'autre. Auparavant, le problème du transfert des données sur les bus d'entrée/sortie avait été résolu en utilisant des tampons pour les données. Par exemple, dans le brevet US 3 699 530 au nom de Capowski et al. délivré à IBM le 17 octobre 1972, il est prévu des tampons multiples dédiés à chacune des voies, permettant d'assurer que toutes les voies possèdent un organe de réception propre à accepter des données qui ne peuvent pas être rendues indisponibles du fait de transferts effectués par d'autres voies. Jusqu'à présent, la gestion des conflits entre requêtes provenant de différentes voies assurait le contrôle de l'utilisation du bus par la voie indépendamment de la gestion ultérieure des priorités relatives à l'utilisation de la mémoire principale. Une fois qu'une voie transférait ses données et ses adresses mémoire vers le tampon dédié qui lui était affecté, ce tampon, en fonction de l'adresse mémoire qu'il renfermait, prenait la priorité mémoire correspondant au bloc mémoire logique particulier souhaité. De la sorte, la file d'attente unique de requête des voies était reconfigurée entre quatre files d'attente indépendantes de requêtes, en fonction des adresses mémoire logiques. Cette manière de procéder avait l'avantage de ne pas niveler vers le bas le débit des transferts d'entrée/sortie, mais nécessitait des ressources dédiées qui étaient coûteuses. Or, dans la technique des circuits VLSI (à très haut degré d'intégration) la place sur la puce est une contrainte essentielle et le nombre de connexions est limité. Il devient donc important de réduire la taille des tampons formés sur la puce, tout en conservant la même capacité à accepter des données à un débit donné. Pour cela, il est préférable de prévoir des ressources partagées plutôt que des ressources dédiées. Ainsi, l'un des buts de la présente invention est de proposer un séquenceur d'entrées/sorties permettant de gérer les transferts entre un bus d'entrée/sortie et une batterie de registres partagée. A cet effet, selon la présente invention, le séquenceur d'entrées/sorties programmable, qui est destiné à être utilisé avec un bloc d'exécution qui exécute une pluralité de tâches formées de séquences d'instructions, tâches comprenant une tâche d'origine et une tâche destinataire, et qui permet de définir un trajet de données entre des organes reliés à un bus d'entrée/sortie et une batterie de registres, comprend: - des moyens formant réseau logique programmable pour mémoriser un programme, - des moyens formant table de service, reliés aux moyens formant réseau logique programmable, ces moyens formant table de service comprenant une pluralité de rubriques divisées en champs, l'un de ces champs comprenant des moyens pour indiquer au réseau logique programmable quel type d'opération le séquenceur de bus doit exécuter, - une pluralité de lignes de requête d'entrée/sortie, - des moyens formant logique de sélection de ligne, reliés aux lignes de requête d'entrée/sortie, aux moyens formant réseau logique programmable et à la table de service pour déterminer celles des rubriques de la table de service que les moyens formant réseau logique programmable doivent utiliser, et - des moyens formant interface de bus, reliés au bus d'entrée/sortie, à la batterie de registres, et aux moyens formant réseau logique programmable, afin d'acheminer les données entre la batterie de registres et le bus d'entrée/sortie, les champs de la table de service comprenant en outre des descripteurs de jeu de registres pour mémoriser le statut de tampons de jeu de registres, le réseau logique programmable comprenant des moyens pour décoder une instruction 'accès' afin de faire commencer une opération en chargeant'le descripteur de jeu de registres, et des moyens pour décoder des instructions envoi' suivantes appliquées à ladite rubrique, et chaque instruction 'envoi' chargeant un champ de descripteur de jeu de registres vide à utiliser lorsque le champ de descripteur de jeu de registres courant est épuisé. - Selon une caractéristique avantageuse de l'invention, dans le cas o le descripteur de jeu de registres comprend un bit de suspension, le séquenceur d'entrées/sorties comprend en outre des moyens pour positionner le bit de suspension dans le cas o une tentative de réponse à une tâche après achèvement d'une opération échoue, ainsi que des moyens pour dépositionner ce bit de suspension dans le cas o cette tentative de réponse à une tâche après achèvement d'une opération réussit, de sorte qu'un descripteur suspendu ne puisse pas être rechargé par une instruction 'accès' ou une instruction 'envoi', et que les instructions 'accès' ou instructions 'envoi' délivrées à un descripteur suspendu soient bloquées. Selon une autre caractéristique avantageuse de l'invention, le séquenceur d'entrées/sorties comprend en outre des moyens, dans la logique de sélection de ligne, pour sélectionner une rubrique de la table de service, des moyens, dans la logique de sélection. de ligne, pour signaler au réseau logique programmable le moment o une entrée est sélectionnée et o son champ d'ordre est disponible pour la lecture par le réseau logique programmable, des moyens, dans chaque rubrique de la table de service, formant bit de verrouillage, des moyens pour positionner ce bit de verrouillage chaque fois qu'une instruction 'accès' et une instruction 'envoi' chargent la rubrique, des moyens pour dépositionner ce bit de verrouillage sous le contrôle du réseau logique programmable, et des moyens de sélection de rubrique, fonctionnant en réponse au bit de verrouillage et au bit de suspension pour déterminer celles des rubriques qui doivent participer à la résolution du conflit des priorités par les moyens formant logique de priorité, de sorte que seules celles des rubriques ayant leurs bits de verrouillage positionnés et leurs bits de suspension dépositionnés puissent être susceptibles de sélection. En d'autres termes, on prévoit selon l'invention un séquenceur de bus d'entrée/sortie comprenant un réseau logique programmable et une table de service des programmes comportant une pluralité de rubriques divisées en champs, chacun des champs contenant des moyens pour donner au réseau logique programmable des ordres concernant le type d'opération que le séquenceur de bus doit exécuter. La logique de sélection de ligne (de priorité) reliée aux lignes de requête d'entrée/sortie et à la table de service déterminent celles des rubriques de la table de service que le réseau logique programmable doit utiliser. Une interface de bus reliée aux ports du bus d'entrée/sortie et au réseau logique programmable dirige les données entre les ports du bus d'entrée/sortie et un e batterie de registres partagée dont les rubriques sont contrôlées au moyen de jeux de registres. Les champs de la table de service comprennent des descripteurs de jeux de - registres pour mémoriser le statut des tampons de jeu de registres. Le réseau logique programmable comprend des moyens pour décoder une instruction 'accès' permettant de commencer une opération en chargant le descripteur de la première batterie de registres, et des moyens pour décoder les instructions séquentielles appliquées à la rubrique. Chaque instruction appliquée charge le champ du descripteur du premier jeu de registres vide à utiliser lorsque le champ de descripteur du jeu de registres courant est épuisé. L'invention présente l'avantage que la batterie de registres est une ressource partagée, constituée par un ensemble de tampons mis en commun, qui peuvent être affectés et désaffectés en fonction des besoins du bus. Ceci nécessite moins de place sur la puce. En outre, on augmente la vitesse du fait que l'on transmet des descripteurs de jeu de registres au lieu de transmettre les données elle-mêmes. Les buts précédents, ainsi que d'autres buts, caractéristiques et avantages de la présente invention apparaîtront à -la lecture de la description détaillée particulière des modes de réalisation préférés de la présente invention, illustrés sur les dessins annexés sur lesquels: - la figure 1 est un schéma fonctionnel par blocs illustrant la manière dont le séquenceur de bus d'entrée/sortie se raccorde au bus d'entrée/sortie, au bloc d'exécution et à la batterie de registres, - la figure 2 est un schéma par blocs plus détaillé du séquenceur de bus d'entrée/sortie représenté sur la figure 1, - la figure 3 est un diagramme montrant le format des. adresses indirectes, - la figure 4 est un diagramme montrant le format des messages du séquenceur, - la figure 5 est un schéma par blocs des champs de la table de service, et - la figure 6 est un schéma par blocs illustrant l'exécution de l'instruction 'accès' pour la table de service d'entrée/sortie de la figure 2. Si l'on se réfère maintenant à la figure 1, on voit que le séquenceur de bus d'entrée/sortie associe le processeur de canal d'entrée/sortie au bus d'entrée/sortie. Le bloc d'exécution 10 est un processeur programmé avec un séquenceur d'instructions en pipeline. Le bloc d'exécution réalise la répartition entre tâches multiples, la transmission des messages, la transmission du jeu de registres, et comporte une antémémoire d'instruction. Le séquenceur de bus d'entrée/sortie 12 et le bloc d'exécution 10 partagent une mémoire commune, qui est une batterie de registres 14. La batterie de registres est adressée de manière uniforme, et elle est composée d'un certain nombre de jeux de registres à ports multiples. La batterie de registres est à la base de la synchronisation logique et physique et de l'accès aux tâches qui sont répertoriées. On peut avoir un accès par octet, par demi-mot et par mot. On mappe des tâches différentes qui utilisent des jeux de registres différents dans le temps. Le mélange de l'exécution des tâches peut varier dans le temps. Les jeux de registres que l'on utilise pour une tâche donnée peuvent varier au cours de l'exécution de la tâche, soit sous son propre contrôle par modification de la manière dont elle est elle-même mappée, soit par d'autres tâches par échange de jeux de registres sous forme de messages ou sous forme d'un échange. On trouvera plus de détail concernant le bloc d'exécution dans une demande de brevet US déposée en 1986 au nom de Cox et al., intitulée Execution Unit with Multi-Tasking Capability (bloc d'exécution avec possibilité de fonctionnement multitâche) et cédée à Intel Corporation. On trouvera plus de détail concernant la batterie de registres dans la demande de brevet US précitée déposée sous le numéro 921 313. Bus local et séquenceur de bus d'entrée/sortie Comme décrit dans la demande de brevet US précitée déposée sous le numéro 921 313, la communication avec les autres parties sont exécutées par deux modules: le séquenceur de bus local et le séquenceur de bus d'entrée/sortie. Ceux-ci assurent les communications respectivement avec le sous-système de calcul et le sous-système d'entrée/sortie. On exécute les étapes suivantes pour réaliser un transfert (NB: la troisième et la quatrième étapes peuvent intervenir dans l'ordre inverse de celui qui est indiqué): 1 ) le bloc d'exécution exécute une instruction 'accès'. Cette instruction délivre une requête à l'un des séquenceurs. La tâche peut se bloquer jusqu'à ce que le séquenceur soit en mesure d'accepter la requête. 2 ) le séquenceur exécute l'opération demandée. Cette instruction a généralement pour résultat le transfert de données vers la batterie de registres ou en provenance de cette batterie de registres. 3 ) une tâche exécute une instruction qui se bloque jusqu'à ce que le séquenceur indique l'achèvement. Cette tâche peut être ou peut ne pas être la tâche qui avait délivré la requête. 4 ) le séquenceur indique l'achèvement de l'opération. ) la tâche se débloque et reprend l'exécution à l'instruction de synchronisation. Instruction 'accès' L'instruction 'accès' est le moyen par lequel le bloc d'exécution présente ses requêtes au séquenceur de bus d'entrée/sortie et au séquenceur de bus local. L'instruction accès' donne les informations nécessaires à l'un ou l'autre séquenceur afin que le séquenceur puisse exécuter le transfert de données. Les informations données sont: - code de séquenceur, - méthode de réponse, - variante 'envoi' (seulement pour le séquenceur de bus d'entrée/sortie), - longueur, - ordre, - tâche de réponse, - jeu de registres de réponse, - adresse physique (sur 32 bits pour le séquenceur de bus local; sur 24 bits pour le séquenceur de bus d'entrée/sortie), et - pointeur de données. Le "code de séquenceur" donne au matériel une information sur celui des séquenceurs auquel on se relie pour l'accès. Les codes allant de 0 à 9 spécifient une ligne dans la table de service d'entrée/sortie. Les codes 13, 14 et 15 sont pour le séquenceur de bus local. Le bit "méthode de réponse" dit au séquenceur la manière dont il doit signaler l'achèvement d'une requête. Le bit "variante 'envoi"' n'est utilisé que par le séquenceur de bus d'entrée/sortie (il est ignoré par la séquenceur de bus local). Il indique au séquenceur de bus d'entrée/sortie que l'accès fait partie d'un transfert par bloc. La "longueur" indique le nombre d'octets à déplacer dans le transfert. L"'ordre" indique au séquenceur ce qu'il est supposé faire. La "tâche de réponse" indique celle des tâches à laquelle il faut répondre. Le "jeu de registres de réponse" indique à quel jeu de registres de la tâche de réponse il faut répondre. L'"adresse physique" est la position sur le bus d'entrée/sortie o le transfert doit commencer. Le "pointeur de données" est l'adresse physique du jeu de registres du premier octet de données. Les informations que l'on vient de décrire sont produites à partir de paramètres et de champs de l'instruction 'accès'. L'instruction contient un pointeur pointant sur un registre de paramètres à 32 bits qui contient certaines des informations nécessaires aux séquenceurs. La figure 6 montre une instruction accès' et un registre de paramètres typique, ainsi que la manière dont on produit les informations nécessaires à un séquenceur. Les six premières informations que l'on a énoncées plus haut proviennent -directement soit de l'instruction soit du registre de paramètres. Le pointeur de données est produit en allant prendre l'octet logique dans le registre de paramètres et en le faisant passer dans le circuit de mappage du jeu de registres afin de produire une adresse physique dans la batterie de registres. L'adresse physique sur 32 bits dont ont besoin les séquenceurs peut être produite de trois manières différentes-: - la figure 6 montre l'adresse physique produite par addition d'un déplacement de 32 bits à une adresse de base de 32 bits. Le pointeur pointant sur le registre de déplacement se trouve dans l'instruction et le pointeur pointant sur l'adresse de base se trouve dans le registre de paramètres. - l'adresse physique peut également être produite en utilisant comme valeur littérale la valeur du pointeur pointant sur le registre de déplacement. Cette valeur littérale sur 8 bits est ajoutée à l'adresse de base sur 32 bits, permettant des déplacements littéraux positifs allant jusqu'à 255. - la troisième manière est l'adressage physique direct. Le pointeur d'adresse de base dans le registre de paramètre est ignoré, et on utilise comme adresse physique la valeur sur 32 bits se trouvant dans le registre de déplacement. La manière dont l'adresse physique est produite est déterminée par des bits se trouvant dans l'instruction. Si un séquenceur ne peut pas accepter une requête d'accès, l'instruction 'accès' va être bloquée et sera réessayée Lorsque le séquenceur pourra accepter une requête. On décrira dans les paragraphes correspondant à chaque séquenceur les conditions qui font en sorte qu'un séquenceur ne peut pas accepter une requête. L'instruction 'accès' verrouille toujours le jeu de registres logiques que la tâche donne au séquenceur. Ceci empêche la tâche et le séquenceur de fonctionner tous deux en même temps sur le jeu de registres. Séquenceur de bus pour la synchronisation du bloc d'exécution Il y a deux méthodes de synchronisation des transferts entre le séquenceur de bus d'entrée/sortie et le bloc d'exécution: le verrouillage du jeu de registres et les messages par microports. Le séquenceur de bus local se synchronise toujours sur le bloc d'exécution par verrouillage du jeu de registres. La sélection de la méthode souhaitée est effectuée par le code du bloc d'exécution que délivre l'instruction 'accès' pour une opération particulière sur le bus. La variante 'envoi' ne peut pas modifier la méthode, de sorte qu'un flux particulier de données utilise soit le verrouillage du jeu de registres soit les messages par microports, mais pas les deux méthodes. Synchronisation à partir du message Lorsque cette option est choisie, le séquenceur envoie un message de microport à la tâche destinataire. La tâche destinataire est spécifiée par la tâche qui exécute l'instruction 'accès'. Le message est délivré avec le format de séquenceur représenté sur la figure 4. Le message a une longueur de seize bits, et le bit de poids le plus fort est toujours zéro. Les six bits de poids le plus faible de l'octet inférieur du message contiennent l'adresse physique du jeu de registres qui avait été concerné par le transfert. Le bit situé au dessus de l'adresse physique du jeu de registres (le bit 6 dans l'octet) contient le bit 'achèvement anormal'. Ce bit sera positionné par le séquenceur si l'opération du séquenceur s'est achevée de façon anormale. Dans l'octet inférieur, le bit de poids le plus fort (bit 7) est toujours à un. Les quatre bits de poids le plus faible de l'octet supérieur identifient celui des séquenceurs d'o provient le message. Les trois bits suivants (jeu de registres logiques) contiennent la valeur que l'on avait transmise au séquenceur pour indiquer le jeu de registres de réponse. Le message est conçu pour être compatible avec l'instruction déplacer le pointeur'. En mettant une instruction 'déplacer le pointeur' immédiatement après l'instruction 'recevoir', le jeu de registres qui vient juste de participer au transfert peut être mappé dans l'espace logique de la tâche destinataire. Synchronisation à partir du jeu de registres Lorsque l'on demande ce type de synchronisation, le séquenceur inscrira l'adresse physique du jeu de registres concerné dans le pointeur 'jeu de registres de réponse' se trouvant dans la zone de mappage de la 'tâche de réponse'. Le jeu de registres de réponse' et la 'tâche de réponse' étaient tous deux spécifiés au séquenceur lorsque l'on avait commencé la requête. Au moment de l'inscription du pointeur de jeu de registres, on positionnera également le bit de terminaison anormale dans ce pointeur si l'accès s'est achevé de façon. anormale. Dans tous les cas, le pointeur de jeu de registres a son bit de validité positionné (c'est-à-dire que le jeu de registres est déverrouillé). Séquenceur de bus local Toutes les communications et tous les transferts en direction du système et en provenance de celui-ci, ou en direction de la partie de bus local du processeur d'entrée/sortie ou en provenance de cette partie s'effectuent au travers du séquenceur de bus local. Le séquenceur de bus local est décrit plus en détail dans la demande de brevet US précitée déposée sous le numéro 921 313. Séquenceur de bus d'entrée/sortie Le séquenceur de bus d'entrée/sortie indique son chemin au bus d'entrée/sortie. La figure 1 montre la position du séquenceur de bus d'entrée/sortie 12 par rapport aux autres organes avec lesquels il communique. Le séquenceur de bus d'entrée/sortie transfère des données entre des bus d'entrée/sortie 16 et la batterie de registres 14, et il est configuré de manière à gérer différents protocoles sur le bus d'entrée/sortie. Il peut transférer des blocs de données entre la batterie de registres et un emplacement unique ou une série d'emplacements adressés de façon contig e dans l'espace adressable du bus d'entrée/sortié. Il peut également gérer des interruptions et des requête d'accès direct mémoire. Organisation fonctionnelle Fonctionnellement, le séquenceur de bus d'entrée/sortie transfère le contenu d'un jeu de registres vers le bus d'entrée/sortie ou à partir de celui-ci, tout en générant les signaux de commande nécessaires dont a besoin le protocole du bus. Le séquenceur de bus d'entrée/sortie autorise la mise en oeuvre d'un principe de transfert "par blocs". Des blocs de données de grande taille sont transférés par éléments de taille plus réduite, chacun étant suffisament grand pour remplir un jeu de registres. L'instruction 'accès' commence le transfert en faisant passer le premier jeu -de registres du bloc d'exécution au séquenceur de bus d'entrée/sortie. Les jeu de registres suivants qui font partie du même transfert sont transmis au séquenceur de bus d'entrée/sortie en utilisant la variante 'envoi' de l'instruction 'accès'. Le séquenceur de bus d'entrée/sortie conserve deux files d'attente suffisament longues pour garder les informations provenant de l'instruction accès' et les instructions suivantes de variante 'envoi'. Ceci permet au séquenceur de bus d'entrée/sortie d'effectuer un double tamponnage des données et de garder un débit élevé de transfert des données sans introduire aucun retard lorsqu'il attend l'arrivée du jeu de registres suivant en provenance du bloc d'exécution; On peut également déclencher les transactions par des événements apparaissant sur le bus d'entrée/sortie. Cette possibilité est utilisée pour gérer des interruptions et des requête d'accès direct mémoire. Organisation structurelle Le séquenceur de bus d'entrée/sortie représenté à la figure 2 comporte cinq composants essentiels: le réseau logique programmable 18 du séquenceur de bus d'entrée/sortie, la file d'attente ou table de service d'entrée/sortie 20, la logique de sélection de ligne 22, la logique de génération de réponse 24 et l'interface du bus de données et d'adresses d'entrée/sortie (port de commande 26). Le programme du réseau logique programmable est mémorisé dans des cellules de ROM, et il commande le séquencement du séquenceur de bus d'entrée/sortie. La table de service 20 est l'entité au moyen de laquelle le bloc d'exécution 10 communique avec le séquenceur de bus d'entrée/sortie. La table de service contient dix rubriques, et chacune des rubriques est divisée en un certain nombre de champs. L'un des champs indique au réseau logique programmable quel type d'opération le séquenceur doit exécuter. Lorsque l'on a prévu des rubriques multiples pour la table de service, la logique de sélection de ligne 22 détermine celle des rubriques que le réseau logique programmable 18 doit utiliser. L'interface de bus 26 achemine, sous le contrôle du réseau logique programmable, les données à transférer entre la batterie de registres 14 et les quatre ports du bus d'entrée/sortie. Le séquenceur exécute la série d'étapes que l'on va indiquer maintenant; il répète de façon continue ces étapes: 1 ) la logique de sélection de bus sélectionne pour le réseau logique programmable 18 du séquenceur de bus d'entrée/sortie une rubrique valide de la table de service 20. 2 ) le réseau logique programmable 18 lit le champ d'ordre de la rubrique sélectionnée. Ce champ d'ordre indique au réseau logique programmable l'endroit o il doit commencer à exécuter son microcode. 30) le réseau logique programmable exécute une séquence d'opérations pouvant éventuellement donner l'ordre à l'interface de bus 26 de déplacer des données entre le bus d'entrée/sortie 28 et la batterie de registres 14. 4 ) le réseau logique programmable ajuste les pointeurs d'adresses et détermine si toutes les données ont été transférées depuis le jeu de registres. Dans la négative, l'opération reprend à l'étape 1. ) le réseau logique programmable positionne un drapeau dans la file d'attente de service d'entrée/sortie 20, drapeau qui déclenche la notification par la logique de génération de réponse 24 de la tâche destinataire du bloc d'exécution 10 pour l'achèvement de l'opération. Table de service La table de service 20 est la partie principale du séquenceur de bus d'entrée/sortie qui est visible par le programmeur de l'unité d'exécution. C'est par l'intermédiaire de la table de service qu'un programmeur indique au séquenceur de bus d'entrée/sortie quelle opération il faut exécuter. Le bloc d'exécution peut charger des requêtes dans la table de service en délivrant les instructions 'accès' ou 'envoi'. L'état de l'exécution d'une requête peut être surveillé en lisant les rubriques de la table de service via l'instruction 'accès local' du bloc d'exécution. Structure de la table de service La table de service 20 du séquenceur de bus d'entrée/sortie est constituée de dix rubriques ou lignes identiques. La figure montre les champs de chaque rubrique. Une rubrique peut être divisée en trois sections réparties sur quatre mots de 32 bits: la section fixe qui conserve les informations qui font partie de chaque transfert associé à cette rubrique, et deux descripteurs (A et B) de jeu de registres, identiques, qui peuvent mémoriser le statut de deux tampons utilisés dans un transfert par blocs. Certains des champs des diverses sections d'une rubrique ne peuvent être chargés que par des accès locaux, tandis que d'autres sont chargés par les instructions accès' ou 'envoi'. Tous les champs de la table de service peuvent être lus par des accès locaux. Les champs de la partie fixe des rubriques sont: - 'priorité': le champ de priorité est un nombre ordinal sur deux bits; il prend les valeurs 0, 1, 2 et 3 et il est chargé par des accès locaux. La valeur de ce champ permet la détermination du moment o une rubrique sera exécutée. 'temporisation': le champ de temporisation a une taille de trois bits, et il est chargé par des accès locaux. La valeur contenue dans ce champ peut être utilisée pour contrôler les durées des signaux de commande sur lé bus d'entrée/sortie lorsque l'on exécute un ordre sur la ligne, et sera déterminée en fonction de la vitesse des organes adressés par cette ligne.La valeur contenue dans ce champ ajoutera un nombre égal de périodes d'horloge aux durées minimales des signaux de commande. Les durées minimales sont déterminées par les séquences du réseau logique programmable. - 'bascule': le bit de bascule détermine celui des deux descripteurs de jeu de registres qui est en cours d'utilisation. - 'bascule de réponse': le bit de bascule de réponse est utilisé par la logique de génération de réponse afin de déterminer celui des deux descripteurs de jeu de registres qui devra être le suivant à répondre. - 'type': le champ de type a une taille de deux bits et il est chargé par des accès locaux. Il peut prendre trois valeurs: octet, demi-mot ou mot. Ce champ détermine la manière dont on modifie les adresses et les longueurs lorsque l'on exécute des transferts. L'adresse d'entrée/sortie et le pointeur d'octet physique sont incrémentés d'une unité si le champ de type possède la valeur 'octet'. La valeur 'demi-mot' les incrémente de deux unités, et la valeur 'mot' les incrémente de quatre unités. Le champ de longueur est décrémenté des quantités correspondantes. - 'suspension': ce bit est positionné par la logique de production de la réponse lorsque, au cours d'une réponse envoyée vers un microport, on s'aperçoit que le microport est occupé. Lorsque l'un des microports se libère, tous les bits de suspension sont effacés et l'on réessaye les réponses. - 'entaché d'erreur': le bit 'entaché d'erreur' signifie que la rubrique a retourné une réponse qui avait été marquée 'achèvement anormal'. Ce bit est positionné chaque- fois que le séquenceur de bus d'entrée/sortie répond avec un achèvement anormal. Si une instruction envoi' est exécutée et que ce bit est positionné, l'instruction va provoquer une anomalie au niveau du contexte. Le bit 'entaché d'erreur' est remis à zéro par le matériel chaque fois qu'une instruction 'accès' sur la ligne est acceptée. Ce bit est utilisé pour mettre en oeuvre la sémantique du transfert par bloc. - 'adresse d'entrée/sortie': le champ d'adresse d'entrée/ sortie a une longueur de 24 bits. Il est chargé par l'instruction 'accès' et contient une adresse qui peut être appliquée sur le bus d'entrée/sortie. Cette adresse peut être incrémentée sous le contrôle du réseau logique programmable. La quantité dont on incrémente l'adresse dépend de la valeur placée dans le champ de type (voir description de ce champ). - 'immédiat': le bit 'immédiat' peut prendre deux valeurs: 'latent' et 'immédiat'. Il permet la détermination de la manière dont une rubrique devient prête à l'exécution. S'il est positionné à 'immédiat', la rubrique est prête à être sélectionnée dès que l'instruction 'accès' sera délivrée. Dans le cas contraire, le stimulus externe auquel la rubrique est associée contrôle sa capacité à être exécutée. Ce bit est chargé par l'instruction 'accès.local'. - 'ordre': le champ d'ordre a une taille de quatre bits, et il chargé par l'instruction 'accès'. La valeur contenue dans ce champ est lue par le réseau logique programmable et détermine celles des opérations que le réseau logique programmable va exécuter. Ces opérations sont définies par le code du réseau logique programmable et peuvent varier d'une application à l'autre. - 'méthode de réponse': le bit 'méthode de réponse' peut prendre deux valeurs, contrôlées par l'instruction accès': 'verrouillage du jeu de registres' et message'. Il commande celle des méthodes qu'utilisera le séquenceur de bus d'entrée/sortie pour répondre au bloc d'exécution lorsqu'un transfert aura été achevé. Chaque rubrique de la table de service possède deux descripteurs de jeu de registres (voir figure 5). Chaque descripteur contient toutes les informations concernant une partie du flux de données, jusqu'à seize octets de long. Lorsque l'un des descripteurs est en cours d'utilisation pour le contrôle du transfert, l'autre descripteur peut être chargé par le bloc d'exécution. Ils ont tous deux les champs suivants, dont les quatre premiers sont chargés par l'instruction 'accès' ou sa variante 'envoi': 'adresse d'octet physique': le champ d'adresse d'octet physique, a une longueur de neuf bits, et il est fractionné en deux sous-champs. Un sous-champ de cinq. bits, le pointeur de données, identifie le jeu de registres à utiliser. Le second sous-champ a une taille de quatre bits, et il pointe sur un octet de la batterie de registres. Ce champ peut être incrémenté sous le contrôle du réseau logique programmable. La valeur de l'incrément est spécifiée par le champ de type. - 'tâche de réponse': le champ de tâche de réponse a une taille de trois bits. Il désigne la trame de la tâche qui recevra la signalisation lorsqu'une opération sera achevée. - 'jeu de registres de réponse': le champ de jeu de registres de réponse comporte trois bits. Dans le cas d'une synchronisation basée sur le jeu de registres, il désigne le jeu de registres logiques de l'espace adressable- de la tâche destinataire que l'on doit déverrouiller lorsqu'une opération s'achève. Avec un synchronisation basée sur les messages, ce champ sera retourné avec le message. - 'longueur': le champ de longueur possède quatre bits. Il contient la valeur du nombre d'octets qui restent à transférer pour une opération. Les valeurs 0 à 15 représentent respectivement 1 à 16 bits restant à transférer. De la sorte, il n'y a pas de valeur qui représente zéro octet à transférer. A la place, cette indication est donnée par un bit 'prêt à dépositionner'. Le champ de longueur peut être décrémenté par le réseau logique programmable. La valeur du décrément est spécifié par le champ de type (voir la description de ce champ). - 'verrouillage': le bit de verrouillage indique si le descripteur o il se trouve a un travail utile à exécuter ou non. Le bit est positionné lorsqu'une instruction 'accès' ou 'envoi' est acceptée par le séquenceur de bus d'entrée/sortie. Un accès sera bloqué si le bit de verrouillage de l'un quelconque des descripteurs est positionné, tandis qu'une instruction 'envoi' sera bloquée s'ils sont tous deux positionnés. Le bit de verrouillage est dépositionné par le matériel chaque fois que le séquenceur de bus d'entrée/sortie envoie pour cette rubrique une réponse normale. - 'fait': le bit 'fait' indique que le réseau logique programmable du séquenceur de bus d'entrée/sortie a achevé le traitement de la requête dans la partie de la table, et il est utilisé pour indiquer à la logique de production de la réponse qu'il y a lieu d'envoyer un message au bloc d'exécution. Le bit de verrouillage est dépositionné par la logique de réponse lorsqu'elle a terminé correctement sa réponse. Si, en raison d'un microport occupé, la réponse est rejetée, le bit de verrouillage reste positionné et le bit de suspension est également positionné. - 'code de réponse': le code de réponse est un registre à deux bits. Chacun des bits peut être positionné ou dépositionné par le réseau logique programmable. Les codages de ces bits sont les mêmes que ceux du champ d'ordre; ils sont déterminés par les programmes du réseau logique programmable. Cependant, quel que soit leur codage particulier, des valeurs non à zéro indiquent un état anormal. Restrictions à l'alignement des données Les opérandes de demi-mots et de mots doivent être situés dans la batterie de registres sur des frontières de type approprié. Si le type d'opérande et les bits de poids le plus faible de l'adresse physique d'octet indiquent que cette condition n'a pas été remplie, on ne transfère dans ce cas aucune donnée. Dans ces cas, les données lues depuis le bus d'entrée/sortie ne sont pas inscrites dans la batterie de registres, et des données non définies sont placées sur le bus pour une opération d'écriture. Si la valeur de longueur fait en sorte que l'adresse d'octet physique franchit la frontière du jeu de registres, la suite de l'adresse se replacera à l'intérieur de ce jeu de registres et ne viendra pas écraser les registres adjacents. Transfert en pipeline avec la variante 'envoi' Le séquenceur de bus d'entrée/sortie a la possibilité de transférer le contenu d'un flux de jeux de registres sans avoir à exécuter une instruction après le transfert de chaque jeu de registres pour provoquer le transfert du jeu de registres suivant. L'instruction permettant d'envoyer au séquenceur de bus d'entrée/sortie un nouveau jeu de registres peut être délivrée pendant que le séquenceur de bus d'entrée/sortie est encore en train de transférer le jeu de registres précédent. Cette caractéristique élimine les interruptions du flux de données entre jeux de registres consécutifs. De plus, elle libère le bloc d'exécution d'un certain nombre de contraintes temporelles strictes auxquelles il aurait été soumis sinon, dans le cas o il gérerait des organes sans tamponnage. Pour pouvoir mettre en oeuvre cette caractéristique, il est prévu la variante 'envoi' de l'instruction 'accès'. Le fonctionnement de cette instruction est illustré sur la figure 6. Elle présente la forme suivante: envoi (code_séquenceur: cardinal, tâchederéponse: identificateurdetâche, jeu de registres de réponse: cardinal, longueur: cardinal, octet_logique: adresse) Une instruction 'accès' doit toujours être délivrée pour faire débuter une opération du séquenceur de bus d'entrée/sortie. Après qu'une instruction 'accès' ait chargé la plupart des champs fixes et le descripteur A du jeu de registres d'une rubrique d'une table de service, on peut délivrer un nombre arbitraire d'instructions 'envoi' à cette même rubrique. Ceci est utile à la fois pour des ordres latents et pour des ordres immédiats. La forme et la sémantique sont les mêmes que pour l'instruction 'accès', à l'exception des points suivants: 1 ) on n'effectue aucun calcul d'adresse d'entrée/sortie. )> le champ d'ordre de la table de service n'est pas modifié, et le champ correspondant dans le registre de paramètre est ignoré. 3 ) la méthode de réponse et les bits latents dans la table de service ne sont pas modifiés. 4 ) le descripteur du jeu de registres qui est chargé dépend des bits de verrouillage d'accès (l'accès charge toujours le descripteur A). ) une anomalie au niveau du contexte est produite si le bit 'entaché d'erreur' est positionné pendant l'accès lorsque cette instruction est exécutée (l'accès efface le bit 'entaché d'erreur'). L'instruction 'accès' est au commencement du flux de données entre le bus d'entrée/sortie et la-batterie de registres. Les instructions 'envoi' alimentent le reste des jeux de registres afin que le flux puisse continuer sans interruption. Chaque instruction 'envoi' charge le descripteur vide du jeu de registres à utiliser par le séquenceur de bus d'entrée/sortie lorsque celui en cours a été épuisé. Une séquence exécutée par un programme de l'unité d'exécution effectuant un transfert par blocs avec l'un des organes se trouvant sur le bus d'entrée/sortie présente l'aspect suivant: accès (... tampon_1...) envoi (... tampon_2..) 10... envoi (... tampon_i...) La chaîne de délivrances d'instructions 'envoi' peut continuer indéfiniment. Si l'envoi aux jeux de registres prend fin du fait qu'une instruction d'arrêt d'envoi est délivrée, le transfert d'accès d'envoi prendra fin jusqu'à ce qu'une autre instruction 'envoi' ou 'accès' soit délivrée. Si les deux descripteurs sont épuisés avant que l'instruction 'envoi' suivante ne soit délivrée, il peut se passer un ralentissement.ou une accélération des données de l'organe utilisé pour le transfert avec l'un des bus d'entrée/sortie. Cependant, le séquenceur de bus d'entrée/sortie n'en est pas conscient et recommencera à transférer lorsqu'il recevra un autre jeu de registres à remplir ou à vider. Si les deux descripteurs sont pleins et qu'une instruction 'envoi' est exécutée, la tâche qui en est à l'origine va être bloquée jusqu'à ce que l'un des descripteurs devienne vide. Ainsi, l'instruction 'envoi' réalise le blocage exactement de la même façon que le fait l'instruction 'accès'. Lorsqu'un descripteur est épuisé, le réseau logique programmable donne l'ordre au système de réponse de répondre au bloc d'exécution. Il peut se passer un temps indéterminé avant que ceci arrive. Le système de réponse fonctionne en parallèle avec le reste du séquenceur de bus d'entrée/sortie, de sorte que le transfert ne sera pas directement affecté. Cependant, si la réponse prend un temps relativement long (par exemple, du fait que le microport de la tâche destinataire est occupé), l'autre descripteur pourrait se trouver épuisé avant que le premier n'ait fini de répondre. Le système de réponse permet de s'assurer que les réponses provenant d'une entrée donnée seront envoyées dans le bon ordre. C'est-à-dire que, même si le second descripteur spécifie une tâche destinataire avec un microport libre auquel le système de réponse pourrait effectuer un envoi, il attendra que le premier envoi ait été achevé avec succès. Les autres rubriques ne sont pas affectées par les réponses suspendues, et le réseau logique programmable n'en a pas conscience. Il n'y a pas d'ordonnancement des réponses entre rubriques différentes. Si le séquenceur de bus d'entrée/sortie répond à une tâche avec un tampon défectueux, toutes les instructions 'envoi' ultérieures vers la ligne particulière qui présentait un problème seront entachées d'erreur. Ceci est compatible avec la sémantique de transfert par blocs du séquenceur de bus d'entrée/sortie. Requêtes immédiates et latentes Lorsque le bloc d'exécution délivre une requête au séquenceur de bus d'entrée/sortie, il spécifie si celle-ci doit être exécutée immédiatement ou si l'exécution doit être bloquée jusqu'à ce qu'une borne de requête externe soit activée. Le bit immédiat' de l'instruction 'accès' est positionné pour indiquer une requête immédiate et dépositionné pour un requête latente. Les dix rubriques de la table de service sont associées en permanence à dix paires "requête/accusé de réception" des lignes de signal sur le bus d'entrée/sortie. Les requêtes latentes peuvent fournir au programmeur du bloc d'exécution soit une primitive de signalisation (comme les interruptions), soit une primitive de transfert par blocs (comme les accès directs mémoire). La réponse du séquenceur de bus d'entrée/sortie à ces requêtes est contrôlée par le programme du réseau logique programmable. Dans la plupart des applications, l'action que ce programme entreprend sera déterminée par la valeur du champ d'ordre dans la rubrique de la table de service qui est sélectionnée en fonction de la borne de demande active. Gestion de la table de service La gestion de la table de service est le processus par lequel l'une des dix rubriques de la table de service est sélectionnée pour être exécutée par le réseau logique programmable. Le présent paragraphe décrit ce processus. La logique de sélection de ligne est un bloc autonome de la logique qui surveille de façon continue toutes les rubriques de la table et les signaux en entrée correspondants de requête afin d'effectuer leur sélection. Chaque fois que le réseau logique programmable du séquenceur de bus d'entrée/sortie termine une transaction, il commence à traiter la rubrique qui a été sélectionnée par la logique de, sélection. Dans chaque rubrique de la table de service, il existe un bit appelé 'verrouillage'. Celui-ci est positionné chaque fois qu'une instruction 'accès' ou une instruction 'envoi' chargent la rubrique. Il est dépositionné sous le contrôle du réseau logique programmable. Le système de sélection de rubrique utilise ce bit pour déterminer celles des rubriques qui doivent participer au concours des priorités. Il indique qu'une rubrique est prête à être exécutée. Seules les rubriques ayant les bits de verrouillage positionnés et les bits de suspension dépositionnés peuvent être sélectionnées. La logique de gestion de la ligne assure, de la manière suivante, une sélection des. priorités avec rotation parmi les lignes de priorités identiques: 1 ) A:= jeu de rubriques avec les bits de verrouillage positionnés et les bits 'fait' dépositionnés 2 ) B:= (éléments de A qui contiennnent des requêtes immédiates) ET (éléments de A avec des requêtes latentes dont les bornes de requête sont actives) 3 ) p:= MAX (niveau_de_priorité (b)) pour tous les b dans B 4 ) C:= éléments de B au niveau de priorité p ) séquenceur:= élément suivant de C S étant la rubrique qui est sélectionnée. Interface de bus L'interface de-bus 26 du séquenceur de bus d'entrée/sortie comporte 48 bornes, divisées en six champs. Quatre de ces champs sont des ports sur huit bits, A à D, qui assurent des trajets bidirectionnels de données entre la batterie de registres et le bus d'entrée/sortie. L'un des champs a une taille de huit bits et vient de la sortie du réseau logique programmable du séquenceur de bus d'entrée/sortie. Ce jeu de sorties délivre les signaux de commande au bus d'entrée/sortie. Le champ suivant possède six bits qui sont des entrées du réseau logique programmable et qui peuvent être utilisées pour des signaux de statut et de poignée de mains provenant du bus d'entrée/sortie. L'un des signaux d'entrée de requête est relié à une borne dédiée. Un signal de contrôle de sortie, activation octet niveau haut' est également prévu pour gérer des transferts de données de la taille d'un octet lorsque le bus d'entrée/sortie est configuré avec une largeur de seize bits. Les ports A à D sont composés de deux registres à verrouillage avec des étages pilotes à trois états, de manière à pouvoir simultanément tamponner des données dans les deux directions. Le fonctionnement de ces registres à verrouillage est contrôlé par la table de contrôle des ports. Cette table est une combinaison d'une ROM et d'une RAM à seize positions, adressées par le réseau logique programmable. Les rubriques de la table sont composées de quatre champs de trois bits, qui contrôlent les ports correspondants. Chacun des ports peut exécuter les opérations suivantes: verrouiller les données entrantes, - verrouiller les données sortantes, transférer les données entrantes verrouillées vers la batterie de registres, - piloter les données verrouillées en sortie sur le bus d'entrée/sortie, - verrouiller les données entrantes et les envoyer simultanément vers la batterie de registres, - verrouiller les données sortantes et les piloter sur le bus d'entrée/sortie, - n'exécuter aucune opération. La valeur 'adresse d'entrée/sortie' provenant de la rubrique de la table de service peut également être pilotée sur le bus d'entrée/sortie par l'intermédiaire de ces ports. On prévoit une caractéristique supplémentaire selon laquelle le séquenceur de bus d'entrée/sortie peut être interfacé à un bus synchrone et selon laquelle on peut verrouiller des données sur les ports au moyen d'un signal externe. Lorsque le séquenceur de bus d'entrée/sortie est programmé sur ce mode de fonctionnement, l'une des bornes d'entrée du réseau logique programmable change de fonction pour recevoir un signal d'entrée de verrouillage. Les ports ainsi programmés peuvent être maintenant chargés par une impulsion d'échantillonnage sur cette ligne. L'impulsion positionne également un registre à verrouillage à l'entrée du réseau logique programmable, indiquant que des données sont disponibles sur les ports. Certaines des bornes de l'interface de bus peuvent également servir pour un accès direct mémoire ou pour des paires de signal "requête/accusé de réception" d'interruption. Les ports C et D, deux des entrées du réseau logique programmable et deux des sorties du réseau logique programmable peuvent être utilisés à cette fin. Chaque ligne de la table de service est associée à une borne de requête et une borne d'accusé de réception de l'interface de bus. La fonction d'une borne est contrôlée par un registre du domaine local. Chaque broche peut être utilisée soit comme partie de la paire demande/accusé de réception, soit en mode 'normal'. Les bornes qui sont "programmées" pour être des bornes de requête sont également programmées pour être sensibles soit à un niveau soit à une transition. Les lignes d'accusé de réception sont contrôlées - par le réseau logique. programmable. Lorsqu'une ligne de la table de service vient à être activée par une borne de requête, la borne d'accusé de réception associée est référencée comme étant la broche courante. De la sorte, si le réseau logique programmable ordonne de piloter la borne d'accusé de réception, la borne appropriée sera pilotée dans le bon sens. REVENDICATIONS 1. Un séquenceur d'entrées/sorties programmable utilisable avec un bloc d'exécution (10) qui exécute une pluralité de tâches formées de séquences d'instructions, ces tâches comprenant une tâche d'origine et une tâche destinataire, ce séquenceur de bus permettant de définir un trajet de données entre des organes reliés à un bus d'entrée/sortie (16) et une batterie de registres (14), caractérisé en ce qu'il comprend: - des moyens formant réseau logique programmable (18) pour mémoriser un programme, des moyens formant table de service (20), reliés aux moyens formant réseau logique programmable, ces moyens formant table de service comprenant une pluralité de rubriques divisées en champs, l'un de ces champs comprenant des moyens pour indiquer au réseau logique programmable quel type d'opération le séquenceur de bus doit exécuter, - une pluralité de lignes de requête d'entrée/sortie (30),. - des moyens formant logique de sélection de ligne (22), reliés aux lignes de requête d'entrée/sortie (30), aux moyens formant réseau logique programmable (18) et à la table de service (22) pour déterminer celles des rubriques de la table de service que les moyens formant réseau logique programmable doivent utiliser, et - des moyens formant interface de bus (26), reliés au bus d'entrée/sortie (28), à la batterie de registres (14), et aux moyens formant réseau logique programmable (18), afin d'acheminer les données entre la batterie de registres (14) et le bus d'entrée/sortie (28), les champs de la table de service comprenant en outre des descripteurs de jeu de registres pour mémoriser le statut de tampons de jeu de registres, le réseau logique programmable (18) comprenant des moyens pour décoder une instruction 'accès' afin de faire commencer une opération en chargeant le descripteur de jeu de registres, et des moyens pour décoder des instructions 'envoi' suivantes appliquées à ladite rubrique, chaque instruction 'envoi' chargeant un champ de descripteur de jeu de registres vide à utiliser lorsque le champ de descripteur de jeu de registres courant est épuisé. 2. Le séquenceur de la revendication 1, dans lequel le descripteur de jeu de registres comprend un bit de suspension, caractérisé en ce qu'il comprend en outre: - des moyens pour positionner le bit de suspension dans le cas o une tentative de réponse à une tâche après achèvement d'une opération échoue, et - des moyens pour dépositionner ce bit de suspension dans le cas o cette tentative de réponse à une tâche après achèvement d'une opération réussit, de sorte qu'un descripteur suspendu ne puisse pas être rechargé par une instruction 'accès' ou une instruction 'envoi', et 'que les instructions 'accès' ou instructions 'envoi' délivrées à un descripteur suspendu soient bloquées. 3. Le séquenceur de la revendication 1, caractérisé 'en ce qu'il comprend en outre: - des moyens, dans ia logique de sélection de ligne (22), pour sélectionner une rubrique de la table de service, - des moyens, dans la logique de sélection de ligne (22), pour signaler au réseau logique programmable le moment o une entrée est sélectionnée et o son champ d'ordre est disponible pour la lecture par le réseau logique programmable, - des moyens, dans chaque rubrique de la table de service, formant bit de verrouillage, - des moyens pour positionner ce bit de verrouillage chaque fois qu'une instruction 'accès' et une instruction 'envoi' chargent la rubrique, - des moyens pour dépositionner ce bit de verrouillage sous le contrôle du réseau logique programmable, - des moyens de sélection de rubrique, fonctionnant en réponse au bit de verrouillage et au bit de suspension pour déterminer celles des rubriques qui doivent participer à la résolution du conflit des priorités par les moyens formant logique de priorité, de sorte que seules celles des rubriques ayant leurs bits de verrouillage positionnés et leurs bits de suspension dépositionnés puissent être susceptibles de sélection.