
Dans des articles antérieurs, traductions de la documentation de Cypress, l'automate opérationnel Datapath a été très largement considéré. Progressivement, nous passons à l'étude d'autres modules UDB, en particulier le module de gestion et d'état.
Le contenu général du cycle «UDB. Qu'est-ce que c'est? "
Partie 1. Introduction. Pld.Partie 2. Chemin de données.Partie 3. Datapath FIFO.Partie 4. Datapath ALU.Partie 5. Chemin de données. Petites choses utiles.Partie 6. Module de gestion et d'état. (Article actuel)
Partie 7. Module de commande de temporisation et de réinitialisationPartie 8. Adressage UDB21.3.3. Module de gestion et d'état
Une vue de haut niveau du module de commande et de l'état est illustrée à la figure 21-28. Les bits d'état du registre de contrôle sont transférés vers des ressources de trace, donnant au programme la possibilité de contrôler le comportement de l'UDB. Le registre d'état reçoit les données des lignes de traçage, de sorte que le programme peut surveiller les opérations effectuées par UDB.
Figure 21-28. Registres de gestion et de statut.La structure et l'état du module de commande sont illustrés plus en détail à la figure 21-29. L'objectif principal de cette unité est de coordonner l'interaction du programme de base du processeur avec le travail des éléments UDB internes. Cependant, en raison de la forte connexion avec la matrice de trace, ce bloc peut être configuré pour exécuter d'autres fonctions.
Figure 21-29. Module de contrôle et d'état.Modes de fonctionnement:
- Entrée d'état L'état des lignes enroulées de l'extérieur peut être entré et capturé comme état, après quoi le CPU ou le DMA est lu.
- Sortie de contrôle La CPU ou le DMA peut écrire des données dans le registre de contrôle. Ces données détermineront l'état des lignes allant aux ressources de trace.
- Entrée parallèle - vers l'entrée parallèle Datapath.
- Sortie parallèle - à partir de la sortie parallèle de Datapath.
- Mode compteur Dans ce mode, le registre de contrôle fonctionne comme un compteur décroissant à 7 bits avec une période programmable et une réinitialisation automatique. Les entrées de canal de trace peuvent être configurées pour contrôler à la fois le démarrage et la réinitialisation du compteur. Lorsque ce mode est activé, la fonctionnalité du registre de contrôle n'est pas disponible.
- Mode synchrone / mode de synchronisation . Dans ce mode, le registre d'état agit comme un synchroniseur double 4 bits. Lorsque ce mode est activé, la fonctionnalité du registre d'état n'est pas disponible.
21.3.3.1 Statut et mode de contrôle
Lorsqu'il fonctionne en mode de contrôle et d'état, ce module agit comme un registre d'état, un registre de priorité de masque et un registre de contrôle dans la configuration illustrée à la figure 21-30.
Figure 21-30. Gestion et statut des emplois.Fonctionnement du registre d'état
Chaque UDB possède un registre d'état 8 bits. L'entrée de ce registre provient de tout signal provenant d'une structure de trace numérique. Le registre d'état est destructible: il perd son état pendant le sommeil et après le réveil a une valeur de 0x00. Chaque bit peut être programmé indépendamment pour fonctionner dans l'un des deux modes.
Tableau 21-19. Registre d'état.
Une caractéristique importante de l'opération d'effacement du registre d'état est que seuls les bits armés sont effacés. Cela permet aux bits restants de continuer à capturer l'état pour maintenir la continuité du processus.
Statut de lecture normal
Par défaut, le CPU lit de manière transparente l'état du circuit correspondant. Ce mode peut être utilisé pour lire des données verrouillées dans UDB.
Stick status avec clear après lecture
Dans ce mode, les entrées du registre d'état sont échantillonnées à chaque cycle de contrôle et d'horloge d'état. Si le signal à une horloge donnée est élevé, il est capturé dans le bit d'état et reste élevé, indépendamment des états d'entrée ultérieurs. Lorsque la CPU ou le DMA lit le registre d'état, le bit est effacé. L'effacement du registre d'état est indépendant du mode et se produit même lorsque la synchronisation UDB est désactivée; il est basé sur la synchronisation du bus et se produit dans le cadre d'une opération de lecture.
Statut du verrou pendant la lecture
La figure 21-31 montre la structure de la logique de lecture d'état. Le registre d'état collant est suivi d'un verrou qui verrouille les données du registre d'état et les maintient stables pendant le cycle de lecture, quel que soit le nombre de ticks d'attente dans l'opération de lecture en cours.
Figure 21-31. La logique de lecture de l'état.Génération d'interruption
Dans la plupart des fonctions, la génération d'interruption est liée aux paramètres du bit d'état. Comme le montre la figure 21-31, cette fonction est intégrée dans la logique du registre d'état sous la forme d'une opération de masquage et d'application de l'opération
OU à l'état. Seuls les 7 bits inférieurs de l'entrée d'état peuvent être utilisés avec les générateurs d'interruption intégrés. Le bit le plus significatif (bit le plus significatif, MSB) est généralement utilisé comme sortie d'interruption et peut être transmis au contrôleur d'interruption à l'aide de canaux de traçage numérique. Dans cette configuration, l'état du bit de demande d'interruption est lu à partir du bit de registre d'état élevé.
21.3.3.2 Fonctionnement du registre de contrôle
Chaque UDB dispose d'un registre de contrôle 8 bits. Il fonctionne comme un registre de lecture / écriture standard sur le bus système, où la sortie de ces bits de registre est contrôlée par les lignes de la structure de trace numérique.
Le registre de contrôle est destructible: il perd son état pendant le sommeil et après le réveil a une valeur de 0x00.
Modes de registre de gestion
Chaque bit peut être configuré dans l'un des trois modes. La configuration est spécifiée en combinant les bits de deux registres 8 bits CTL_MD1 [7: 0] et CTL_MD0 [7: 0]. Par exemple, {CTL_MD1 [0], CTL_MD0 [0]} contrôle le mode à zéro bit du registre de contrôle (voir tableau 21-20).
Tableau 21-20. Registre de contrôle Mode zéro bit
Mode d'enregistrement de contrôle direct
Par défaut, le mode est direct. Comme le montre la figure 21-32, lorsque la CPU ou le DMA est écrit dans le registre de contrôle, la sortie du registre de contrôle est envoyée directement à la ligne de trace dans le même cycle.
Figure 21-32. Mode registre de contrôle direct.Mode registre de contrôle synchrone
En mode synchrone, comme le montre la figure 21-33, la sortie du registre de contrôle est resynchronisée avec une horloge égale à l'horloge actuelle du contrôle et de l'état (Status and Control, SC). Cela vous permet de contrôler les chronogrammes de la sortie à la fréquence SC sélectionnée, et non à la fréquence d'horloge du bus.
Figure 21-33. Mode registre de contrôle synchrone.Registre de contrôle du mode d'impulsion
Le mode impulsion est similaire au mode synchrone, car en lui le bit de commande est rééchantillonné à la fréquence SC; l'impulsion commence au premier cycle d'horloge SC et suit le cycle d'écriture du bus. La sortie du bit de commande est définie pendant un cycle d'horloge SC complet. À la fin de ce cycle d'horloge, le bit de commande est automatiquement réinitialisé.
Avec ce mode de fonctionnement, le programme peut écrire 1 dans le bit de registre de commande pour générer une impulsion. Une fois que le bit a reçu la valeur 1, le programme le lira comme 1 jusqu'à la fin de l'impulsion, après quoi il sera lu comme 0. Après cela, le programme peut écrire un autre 1 pour démarrer une nouvelle impulsion. Ainsi, il ne sera pas possible de donner une impulsion plus souvent qu'à chaque deuxième pas du signal SC.
Réinitialiser le registre de gestion
Le registre de contrôle a deux modes de réinitialisation contrôlés par le bit de configuration EXT RES, comme illustré à la figure 21-34. Lorsque EXT RES est 0 (par défaut), en mode synchrone ou impulsionnel, l'entrée de réinitialisation tracée réinitialise la sortie synchronisée, mais pas le bit de commande lui-même. Lorsque EXT RES est 1, l'entrée de réinitialisation traçable réinitialise à la fois le bit de commande et la sortie synchronisée.
Figure 21-34. Réinitialiser le registre de gestion.21.3.3.3 Mode entrée / sortie parallèle
Dans ce mode, le contrôle et le suivi de l'état sont connectés aux signaux Datapath d'entrée et de sortie parallèle. Pour activer ce mode, vous devez armer les bits de configuration SC OUT pour sélectionner la sortie parallèle de Datapath. La communication avec une entrée parallèle est toujours disponible, cependant, ces connexions de trace sont partagées avec les entrées du registre d'état, les entrées de commande de compteur et les sorties d'interruption.
Figure 21-35. Mode E / S parallèle.21.3.3.4 Mode compteur
Comme le montre la figure 21-36, lorsque l'unité fonctionne en mode compteur, un compteur décroissant de 7 bits est disponible pour une utilisation à la fois dans les opérations au sein de l'UDB et pour les besoins du programme. Les caractéristiques du compteur comprennent:
- Registre de période de 7 bits, (lecture / écriture).
- Registre de compte 7 bits, (lecture / écriture). L'accès n'est possible que lorsque le compteur est arrêté.
- Recharge automatiquement la période dans le registre des comptes lorsqu'elle atteint zéro.
- Le bit de commande accessible par logiciel dans le registre de commande auxiliaire CNT START, utilisé pour démarrer et arrêter le compteur. (Il chevauche le signal matériel ENABLE et doit être installé pour que le signal matériel ENABLE en option fonctionne).
- Bits sélectionnables des canaux de trace de la commande de compteur dynamique en option pour les fonctions de démarrage et de chargement:
- EN, signal tracé pour démarrer ou arrêter le comptage.
- LD, un signal de charge traçable qui provoque un rechargement de période. Lorsque ce signal est armé, il chevauche le signal de fin en attente. Il est sensible au niveau et pendant que le signal est armé, la période continue de se charger. - Un compteur 7 bits peut être envoyé pour tracer les ressources en tant que sc_out [6: 0].
- Le signal de terminaison peut entrer des ressources de trace comme sc_out [7].
- En mode «par défaut», le mode d'accrochage est utilisé pour le signal de comptage. En mode alternatif, il passe en mode combiné.
- En mode par défaut, le signal matériel EN optionnel, s'il est utilisé, doit être réglé pour activer le signal matériel LD. En mode alternatif, les signaux matériels LD et EN sont indépendants.
Figure 21-36. Mode compteurNote du traducteur:
Autour de cet endroit, j'ai réalisé que je ne comprenais rien du document. Nulle part ces modes «par défaut» et «alternatifs» ne sont décrits. Après une longue recherche, j'ai réussi à en trouver, mais un exemple.
Fichier: C: \ Program Files (x86) \ Cypress \ PSoC Creator \ 4.2 \ PSoC Creator \ psoc \ content \ CyComponentLibrary \ CyComponentLibrary.cylib \ bScanComp_v1_10 \ bScanComp_v1_10.v
Code explicatif:

Même texte:cy_psoc3_count7 #(.cy_period(Period),.cy_route_ld(0),.cy_route_en(1), .cy_alt_mode(1)) ChannelCounter( /* input */ .clock(clk_int), /* input */ .reset(1'b0), /* input */ .load(1'b0), /* input */ .enable(enable_int), /* output [06:00] */ .count(count), /* output */ .tc(tc_o) );
La déclaration même du composant cy_psoc3_count7 que j'ai trouvée uniquement pour le langage VHDL, il semble que pour Verilog il soit intégré dans les outils de développement. Maintenant, vous savez à peu près où chercher les bits de réglage en cours de discussion.
Nous considérons ici les bits mystérieux, qui sont appelés SC OUT CTL ou SC_OUT_CTL, mais leurs valeurs ne sont pas documentées. Je ne les ai trouvés nulle part. Il ressort clairement du texte qu'ils commutent le composant STATUS_CONTROL entre les modes. Mais dans le fichier VHDL mentionné précédemment C: \ Program Files (x86) \ Cypress \ PSoC Creator \ 4.2 \ PSoC Creator \ warp \ lib \ lcpsoc3 \ cpsoc3.vhd
on voit séparément le compteur déjà connu de nous component cy_psoc3_count7 generic(cy_period : std_logic_vector (6 downto 0) := "1111111"; cy_init_value : std_logic_vector (6 downto 0) := "0000000"; cy_route_ld : boolean := false; cy_route_en : boolean := false; cy_alt_mode : boolean := false); port (clock : in std_logic; reset : in std_logic; load : in std_logic; enable : in std_logic; count : out std_logic_vector (6 downto 0); tc : out std_logic); end component;
séparément - statut et gestion attribute atomic_rtl of cy_psoc3_status : component is rtl_generic; attribute cpu_access of cy_psoc3_status : component is true; component cy_psoc3_statusi generic(cy_force_order : boolean := false; cy_md_select : std_logic_vector (6 downto 0) := "0000000"; cy_int_mask : std_logic_vector (6 downto 0) := "0000000"); port (reset : in std_logic := '0'; clock : in std_logic := '0'; status : in std_logic_vector (6 downto 0); interrupt : out std_logic); end component; attribute atomic_rtl of cy_psoc3_statusi : component is rtl_generic; attribute cpu_access of cy_psoc3_statusi : component is true; component cy_psoc3_control generic(cy_init_value : std_logic_vector (7 downto 0) := "00000000"; cy_force_order : boolean := false; cy_ctrl_mode_1 : std_logic_vector (7 downto 0) := "00000000"; cy_ctrl_mode_0 : std_logic_vector (7 downto 0) := "00000000"; cy_ext_reset : boolean := false); port (reset : in std_logic := '0'; clock : in std_logic := '0'; control : out std_logic_vector (7 downto 0)); end component;
séparément - synchroniseur component cy_psoc3_sync port (clock : in std_logic := '0'; sc_in : in std_logic; sc_out : out std_logic); end component;
Je répète que Verilog n'a pas du tout de version de ces déclarations (il n'y a que des modèles comportementaux dans le répertoire C: \ Program Files (x86) \ Cypress \ PSoC Creator \ 4.2 \ PSoC Creator \ warp \ lib \ sim, donc je pense que le réglage des bits les modes ne sont pas accessibles aux simples programmeurs. Lors de la lecture de cette section, il convient de garder ce fait à l'esprit. Quelque chose est donné à titre purement indicatif, il n'est pas soumis à nous programmeurs.
Pour activer le mode compteur, la sortie du compteur doit être sélectionnée dans les bits SC_OUT_CTI [1: 0]. Dans ce mode, le fonctionnement normal du registre de contrôle n'est pas disponible. Dans le même temps, le registre d'état peut être utilisé pour des opérations de lecture, mais vous ne devez pas l'utiliser pour générer une interruption, car le registre de mappage de masque est également utilisé comme registre de période de compteur. Le registre de période n'est pas détruit et conserve son état après le réveil. Pour une période de N mesures, la valeur N-1 doit être chargée dans le registre de période. La valeur N = 1 (la période est nulle) car la valeur du diviseur de fréquence n'est pas supportée et conduira à une unité constante à la sortie du TC (Terminal count, TC). La disponibilité du mode SYNC dépend de l'utilisation ou non du contrôle dynamique (LD / EN). S'il n'est pas utilisé, il n'affecte pas le mode SYNC. S'il est utilisé, le mode SYNC n'est pas disponible.
21.3.3.5 Mode de synchronisation
Comme le montre la figure 21-37, le registre d'état peut fonctionner comme une horloge double 4 bits synchronisée avec la valeur SC_CLK actuelle si le bit SYNC MD est défini. Ce mode peut être utilisé pour implémenter la synchronisation locale des signaux asynchrones (par exemple, les entrées GPIO). Dans ce cas, les signaux synchronisés sont sélectionnés dans SC_IN [3: 0], les sorties sont acheminées vers les contacts SC_IO_OUT [3: 0], et SYNC MD bascule automatiquement les contacts SC_IO en mode de sortie. Dans ce mode, le fonctionnement normal du registre d'état n'est pas disponible et le mode bit d'état collant est désactivé de force, quels que soient les paramètres de contrôle de mode. Ce mode n'affecte pas le registre de contrôle. Le compteur peut toujours être utilisé, mais avec des limitations. Dans ce mode de fonctionnement, les entrées dynamiques (LD / EN) ne peuvent pas être utilisées.
Figure 21-37. Mode synchrone.21.3.3.6 Horloge d'état et de contrôle
Les registres de contrôle et d'état nécessitent une sélection d'horloge dans l'un des modes de fonctionnement suivants:
- registre d'état avec n'importe quel bit en mode collant avec effacement après lecture,
- registre de contrôle en mode compteur,
- mode synchrone.
La synchronisation est affectée dans le module d'horloge et de réinitialisation. Voir 21.3.4. Module de commande d'horloge et de réinitialisation.
21.3.3.7 Registre de contrôle auxiliaire
Le registre de contrôle auxiliaire pour la lecture et l'écriture est un registre spécial qui contrôle l'équipement UDB dur. Ce registre permet au CPU ou au DMA de contrôler dynamiquement les interruptions, les FIFO et le fonctionnement du compteur. Les bits des registres et leur description sont donnés ci-dessous:
Clear FIFO0 et FIFO1 (FIFO0 Clear, FIFO1 Clear)
Les bits FIFO0 CLR et FIFO1 CLR sont utilisés pour réinitialiser l'état des FIFO correspondants. Lorsque 1 est écrit sur ces bits, l'état de la FIFO correspondante est réinitialisé. Pour continuer le fonctionnement FIFO, il est nécessaire d'écrire 0. Ces bits restent armés Les FIFO fonctionnent comme de simples tampons à un octet sans état.
Niveau FIFO0 et FIFO1 (niveau FIFO0, niveau FIFO1)
Les bits FIFO0 LVL et FIFO1 LVL définissent le niveau auquel une FIFO de 4 octets augmente l'état du bus (lorsque le bus lit ou écrit dans FIFO). La valeur d'état du bus FIFO dépend de la direction configurée, comme indiqué dans le tableau ci-dessous.
Tableau 21-21. Bits de contrôle de niveau FIFO.
Activer l'interruption
Lorsque la logique de génération de registre d'état est activée, le bit INT EN permet le passage du signal d'interruption généré.
Démarrer un compteur / compte? (Compte de début)
Le bit CNT START peut être utilisé pour démarrer et arrêter le compteur (disponible uniquement si les bits SC_OUT_CTL [1: 0] sont configurés pour le mode de sortie du compteur).
21.3.3.8 Résumé des registres de gestion et d'état
Le tableau ci-dessous résume les fonctions des registres de contrôle et d'état. Veuillez noter que les registres de masque et de contrôle sont combinés avec des compteurs et des registres de période, et la valeur de ces registres ne dépend pas du mode de fonctionnement.
Tableau 21-22. Un bref résumé du fonctionnement des registres de gestion et de statut
a. - notez qu'en mode compteur, le registre de superposition de masque fonctionne comme un registre de période et ne peut pas fonctionner comme un registre de masque. Par conséquent, la sortie d'interruption n'est pas disponible lorsque le mode compteur est activé.
b. - notez qu'en mode de synchronisation, le registre d'état n'est pas disponible et qu'il est donc impossible d'utiliser le registre de superposition de masque. Cependant, il peut être utilisé comme registre de période pour le mode compteur.
À suivre ...