3TC
      • Sharing URL Link copied
      • /edit
      • View mode
        • Edit mode
        • View mode
        • Book mode
        • Slide mode
        Edit mode View mode Book mode Slide mode
      • Customize slides
      • Note Permission
      • Read
        • Owners
        • Signed-in users
        • Everyone
        Owners Signed-in users Everyone
      • Write
        • Owners
        • Signed-in users
        • Everyone
        Owners Signed-in users Everyone
      • Engagement control Commenting, Suggest edit, Emoji Reply
    • Invite by email
      Invitee

      This note has no invitees

    • Publish Note

      Share your work with the world Congratulations! 🎉 Your note is out in the world Publish Note

      Your note will be visible on your profile and discoverable by anyone.
      Your note is now live.
      This note is visible on your profile and discoverable online.
      Everyone on the web can find and read all notes of this public team.
      See published notes
      Unpublish note
      Please check the box to agree to the Community Guidelines.
      View profile
    • Commenting
      Permission
      Disabled Forbidden Owners Signed-in users Everyone
    • Enable
    • Permission
      • Forbidden
      • Owners
      • Signed-in users
      • Everyone
    • Suggest edit
      Permission
      Disabled Forbidden Owners Signed-in users Everyone
    • Enable
    • Permission
      • Forbidden
      • Owners
      • Signed-in users
    • Emoji Reply
    • Enable
    • Versions and GitHub Sync
    • Note settings
    • Note Insights New
    • Engagement control
    • Make a copy
    • Transfer ownership
    • Delete this note
    • Insert from template
    • Import from
      • Dropbox
      • Google Drive
      • Gist
      • Clipboard
    • Export to
      • Dropbox
      • Google Drive
      • Gist
    • Download
      • Markdown
      • HTML
      • Raw HTML
Menu Note settings Note Insights Versions and GitHub Sync Sharing URL Help
Menu
Options
Engagement control Make a copy Transfer ownership Delete this note
Import from
Dropbox Google Drive Gist Clipboard
Export to
Dropbox Google Drive Gist
Download
Markdown HTML Raw HTML
Back
Sharing URL Link copied
/edit
View mode
  • Edit mode
  • View mode
  • Book mode
  • Slide mode
Edit mode View mode Book mode Slide mode
Customize slides
Note Permission
Read
Owners
  • Owners
  • Signed-in users
  • Everyone
Owners Signed-in users Everyone
Write
Owners
  • Owners
  • Signed-in users
  • Everyone
Owners Signed-in users Everyone
Engagement control Commenting, Suggest edit, Emoji Reply
  • Invite by email
    Invitee

    This note has no invitees

  • Publish Note

    Share your work with the world Congratulations! 🎉 Your note is out in the world Publish Note

    Your note will be visible on your profile and discoverable by anyone.
    Your note is now live.
    This note is visible on your profile and discoverable online.
    Everyone on the web can find and read all notes of this public team.
    See published notes
    Unpublish note
    Please check the box to agree to the Community Guidelines.
    View profile
    Engagement control
    Commenting
    Permission
    Disabled Forbidden Owners Signed-in users Everyone
    Enable
    Permission
    • Forbidden
    • Owners
    • Signed-in users
    • Everyone
    Suggest edit
    Permission
    Disabled Forbidden Owners Signed-in users Everyone
    Enable
    Permission
    • Forbidden
    • Owners
    • Signed-in users
    Emoji Reply
    Enable
    Import from Dropbox Google Drive Gist Clipboard
       Owned this note    Owned this note      
    Published Linked with GitHub
    • Any changes
      Be notified of any changes
    • Mention me
      Be notified of mention me
    • Unsubscribe
    # TSA - TD 8 : Prise de notes ###### tags: `TSA` `S2` `Notes` ## 1) Les modes d'adressage Diapo : https://docs.google.com/presentation/d/1E_TFdJ1dujbtbVWzSF49c_5SlXTqY4uCz-dodRPiuMw/edit#slide=id.p 2x 32 registres de 32 bits ### Les buffers **Linéaire** L'échantillon qui arrive prend la place à l'index 0. Tout les autres indices vont etre décalés **Circulaire** Implémenté pour des piles FIFO notament. Les index n'ont pas besoin d'êtré décalés avec cette méthode. ### L'Address Mode Register **Registre circulaire** B-7 -> B-4 A-7 -> A-4 ### L'adressage Méchanisme de transférer des données au proc qui va les traiter. Tous le types d'@ prennent 5 cycle - Immédiat On indique directement l'@ du registre `load 0x100, A2` - Direct Copie du contenu de la case memoire `mov R1, R2` - Indirect va chercher a l'@ contenu dans la case memoire `load *R1, R2` - Indirect relatif va chercher a l'@ + un offset (une valeur idiquée) `load &R1+4, R2` - Indirect indexé va chercher a l'@ + un offset (une valeur dans un autre registre) `load (&R1)+R2, R3` quand on un seul + ca modifie pas la valeur du registre source, contrairement à ++ ldb +A3[1],A7 si A3 = 1000 on va stocker dans A7 1001 mais A3 reste egal a 1000 ## 2) Les chemins de données Diapo : https://docs.google.com/presentation/d/1nqdU0Vyq_wEalGMEZvg2_LWVHiPdhVwarqfvp7mcHwM/edit#slide=id.p 2 : Les chemins de données sont les composants qui traitent les données : elles transforment une donnée d’entrée en donnée de sortie Il existe plusieurs composants tels que la mémoire centrale, les registres internes (généraux ou de contrôle et d’état), les unités de calculs (UAL) et le bus. C’est l’unité de contrôle qui séquence les opérations à exécuter par le chemin de données selon des entrées externes et le résultat des opérations 3 : Chemin de données possède deux parties principales -un bloc de registres qui conserve les données à traiter et des résultats précédents -> sert de mémoire – des unités fonctionnelles pour effectuer des opérations sur les données : des opérations logiques, arithmétiques ou encore des transferts entre registres Ce modèle possède deux chemins de données A et B. Chacun possède 32 registres de 32 bits, numérotés de 0 à 31 (A0-A31, B0-B31). De plus, chaque chemin est doté de 4 UAL (Unité Arithmétique et Logique). La séparation en deux chemins permet l'accès à la mémoire de deux valeurs à la fois. De plus, on a la possibilité de faire du traitement en parralèle des données. Les UAL sont divisées en quatre catégories : L (opération arithmétique et logique), S (opérationde décalage), M (opération de multiplication) et D (opération d'adressage). Le stockage des données supporte des données compressées sur 16 bits, des virgule fixe sur 40 bits ou des virgules flottantes sur 64 bits. Pour les longs nombre ont peut les stocker dans 2 slots de registre (les bits de poids faibles dans un registre pair et les bits de poids forts dans le registre suivant, impair cette fois-ci). Ex: A0-A1, on a donc a disposition 64 bits et souvent on utilise 40 bits qui correspond au format long. ## 3) Les cycles machine des instructions Diapo : https://docs.google.com/presentation/d/1InMLvcfr4fARM1DMts5DLGwOkc-F_58vEOj0ru9S2a0/edit?usp=sharing Delay slot : Nombre de cycles machine nécessaires pour la réalisation du calcul, temps d’attente avant que la valeur en bascule de sortie soit valable, nombre de cycle avant que l’on puisse lire le résultat. Par exemple, pour une instruction de 4 cycle, les opérandes sont lu à l’état i et produisent un résultat que l’on peut lire à l’état i+4 Functional unity latency : Temps à attendre avant de pouvoir réaliser une nouvelle opération Par exemple, pour l’addition, la soustraction, la multiplication ou la division d’un double float, elle est plus grande que 1. Des opérations qui lisent par exemple à des instants i+1 ont forcément une functional unity latency plus grande que 1. Le DSP que nous étudions possède 8 unités de traitement. On a donc à chaque cycle Fetch 8 instructions chargées. Le cycle Fetch est un cycle qui recherche et charge l’instruction pointée par le compteur de programme PC dans le registre d’instruction ( Rappel sur le registre PC: registre qui contient l’@ de la prochaine instruction à exécuter) . On appellera un fetch packet le paquet ainsi constitué des 8 instructions comme est affiché sur la figure, ces 8 instructions sont chargées en même temps sur le bus d’adresse et constitue le fetch paquet. Sur la figure, on peut voir le format basique d’un Fetch Packet avec ses 8 instructions. On remarque que ces instructions sont classées dans l’ordre croissant de leur adresse. L'exécution de chaque instruction est contrôlée par un bit contenu dans l’instruction, que l’on appellera le p-bit ou bit 0 car le bit de parité est le bit de poids faible de chaque instruction. C’est ce bit qui dira si une instruction doit être réalisée en parallèle avec une autre ou pas. Petite précision sur ce qu’est le parallélisme. C’est le fait d'exécuter plusieurs instructions simultanément (grâce à l’existence de plusieurs unités de traitement dans le microprocesseur). Chaque unité du microprocesseur permet de faire une action bien distincte. Ainsi, si un microP permet le parallélisme il peut par exemple lire, exécuter et charger une instruction en même temps. Le parallélisme est très lié à la notion de pipeline dans le processeur. Le mécanisme de pipeline permet de trouver le moyen pour que toutes les unités du microprocesseur fonctionnent en même temps. Pour en revenir sur les bits de parité: ils sont alors lu de l’adresse inférieure à l’adresse supérieure et quand celui-ci vaut 1, ça signifie que l’instruction dont le p-bit vaut 1 et la suivante seront exécutées en parallèle. Et donc si le p-bit = 0, l’instruction suivante sera exécutée dans le cycle suivant. Les instructions s'exécutant en parallèle sont alors placées dans l’execute packet qui peut lui aussi contenir 8 instructions, ce nombre d’instruction dépend du type de DSP. (au maximum ? Le DSP C67x+ est capable de mettre plus que 8 instructions dans son execute packet. Je sais pas si l’execute packet fait la même taille que le Fetch packet). Chaque instruction devra utiliser une unité fonctionnelle différente afin de garantir le mécanisme de pipeline. Logiquement, le dernier p-bit de l’execute packet sera toujours fixé à 0 et chaque nouveau fetch packet lancera un nouveau execute packet. Les p-bits peuvent suivre 3 motifs différents : le fully serial (complètement en série), fully parallel (complètement en parallèle) et partially serial (partiellement en série) dont les schémas explique très bien leur fonctionnement. Pour le code: On utilise la commande | pour implémenter le parallélisme. Le pipe va ainsi signifier que l’instruction et la précédente vont être exécutées en parallèle. Ainsi, les instructions C, D et E seront faites en parallèle. On remarque que ce code est en fait celui du motif partiellement en série vu plus haut. Il est intéressant de noter que si un branchement est réalisé à l’intérieur d’un execute packet, alors toutes les instructions situées aux adresses inférieures sont ignorées. Par exemple, si un branchement a lieu vers l’adresse contenant l’instruction F, alors F,G et H vont bien s’exécuter mais toutes les autres instructions situées aux adresses inférieures comme A ou E seront ignorées. Ou si le branchement a lieu à l’adresse de G, alors même si F et G doivent théoriquement s’exécuter en parallèle (donc en même temps) l’instruction F sera ignorée. Mais je laisse la parole à Thomas pour expliquer qu’est-ce qu’un branchement. Les instructions de branchement permettent d'interrompre le déroulement normal du programme en faisant un saut d'un endroit du programme vers un autre endroit. C’est pour cette raison qu’on les appelle aussi “instructions de saut”. On les utilise par exemple pour l’exécution d’une instruction en fonction du résultat d’un test conditionnel La figure montre les phases de pipeline utilisées par l'instruction de branchement et le code cible de branche. On remarque qu’il y a cinq intervalles de retard entre l'exécution de la branche et l'exécution du code cible. Ils sont notés en grisé sur le schéma Si une branche est dans la phase E1 du pipeline (dans l'unité S2 sur la figure), sa branche cible est dans le paquet de récupération qui est dans PG pendant ce même cycle (grisé sur la figure). En effet, la branche cible doit attendre qu'elle atteigne la phase E1 pour commencer l'exécution, la branche prend ainsi cinq intervalles de retard avant que le code cible de la branche s'exécute. ## 4) Les instructions du DSP Diapo : https://docs.google.com/presentation/d/1lWMGFzOu1sJQs7yg768D0v8cNCUchDBmVBqxINn7WJY/edit#slide=id.p Tout d’abord, vous pouvez voir ici un diagramme de base du DSP C6747. La partie de droite, où vous pouvez voir le C6000 CPU correspond au processeur. À l’intérieur, vous pouvez voir les registres de contrôle, les unités pour chercher les instructions (partie fetch), les décoder, et sélectionner les circuits nécessaires au traitement de chaque instruction…mais le plus important c’est de remarquer que nous avons deux chemins de données différents A et B, composés de 32 registres de 32 bits, ce qui correspond à 64 registres de travail. En d’autres mots, nous pouvons accéder à la mémoire pour lire 2 valeurs simultanément et nous pouvons y réaliser des traitements en parallèle. Ensuite, nous allons voir la syntaxe des instructions. Il faut déjà prendre en compte qu’il s’agit d’instructions en assembleur vu que nous sommes dans le processeur. Alors, la syntaxe générale est la suivante : INST unit source1 source2 dest. INST : correspond à l’abréviation utilisée pour l’instruction comme ADD ou MVK. Unit1 : désigne l’unité sur laquelle on exécute l’instruction, donc une de celles dont Noëline vient de parler. Source1 : désigne la source du premier opérande (il faut avoir stocké la valeur de cet opérande dans le registre considéré auparavant). Source2 : désigne la source du deuxième opérande (il faut avoir stocké la valeur de cet opérande dans le registre considéré auparavant). Dest : designe l’endroit où sera stocké le résultat. Nous avons d’autres règles de syntaxe plus spécifiques : 1-Exécutions conditionnelles : Nous pouvons donner une condition pour qu’une instruction s’exécute. Dans ce cas, ce que nous sommes en train de dire signifie qu’il faut que le registre B0 soit non nul pour que l’instruction s’exécute. Il faut donc placer le registre concerné entre crochets. 2-Exécutions parallèles : On peut demander que 2 instructions s’exécutent en parallèle. Pour cela, il faut placer d’abord les 2 barres verticales que vous voyez dans la deuxième ligne. Dans ce cas, il faut que B0 soit non nul pour exécuter la première instruction ou qu’il soit nul pour exécuter la deuxième, mais les deux peuvent s’exécuter en parallèle si ce registre change de valeur entre temps. 3-Croiser les chemins : Le 3ème cas consiste à combiner les 2 chemins de données, A et B. Il faut dans ce cas écrire .LIX, le X designant le fait que nous croisons les chemins. Ainsi, dans ce cas, on multiplie A1 et B1 et nous mettons le résultat dans A3. L'opcode peut être défini comme la traduction du code assembleur en une suite de bits de 0 et de 1 qui est le langage "compris" par la machine. Par exemple lorsqu'il s'agit de traiter l'instruction MPY, il y'a un champ au niveau de l'opcode qui permet à la machine d'identifier l'instruction. L'opcode est différent pour chaque instruction . D'ailleurs c'est ce qui permet de les différencier au niveau du procésseur. De plus pour une instruction donnée, exécutée dans deux types de processeurs diférents,l'opcode peut qussi être différent. Ce qui nous améne à dire qu'il dépend du type de processeur qui est utilisé. Il est codé sur 32 bits. Un exemple est donné sur les slides, le champ creg codé sur 3 bits permet de mettre une condition sur les registres. Il est codé sur 3 bits car on nepeut mettre des conditions que sur les 4 registres(A0 A1 B0 B1) donc ce qui fait 2^3. Le champ z codé sur un bit nous permet de verifier la avalidité ou pas de la condition.LE champ dest codé sur 5 bits(2^5 = 32: il y a 32 registres pour chaque side) pour dire sur quel registre on va mettre la valeur Les 5 bits avant le champ s permet de specifier le type d'instrucition. Le bit s(1 pour side A et 0 pour side b) c'est pour voir sur quel side de l'UAL l'execution sera executée et enfin le bit p pour dire si l'execution est paralléle ou pas(1 pour c'est paralléle et 0 pour pas paralléle) L'instruction MPY est assez similaire que l'instruction ADD au niveau de l'opcode. Le seul champ qui change c'est les 5 bits avant s qui permet de dire de spécifier l'instruction MPY. Elle est exécutéé sur les unités .M1 et .M2. Le syntax est le suvivant: ***MPY .M1(ou .M2) A1,A2,A3*** L’instruction ADD permet d’additionner deux entiers signés et de mettre le résultat sur le registre dest. Les unités de traitement qui y sont utilisés sont .L1, L2, S1, S2, D1, D2. En fonction des unités de traitement utilisées, nous avons différents opcodes. Pour l’unité L, nous voyons le champ creg et z qui servent à utiliser les conditions. Si la condition est verifiée z vaudra 1 et sinon 0. Les champs dst et src2, src1 correspondent à la destination et aux sources. Le champ x sert à indiquer si les chemins sont croisés ou pas. Le champ Op correspond à opfield et varie selon les types des opérandes utilisés. Finalement, le champ s permet d’indiquer si on utilise le chemin A ou B pour les données et le champ p indique si la prochaine exécution est parallèle ou pas. Dans l’exemple, on a considéré qu’il n’y a pas de condition. Ensuite, nous voyons qu’il s’agit d’une instruction croisé d’où le 1 pour le x. Le opfield vous allez voir ce que c’est toute suite, et pour le champ s on dit que c’est le chemin B où on met le résultat et pour p on dit que c’est égal à 0 car il n’y a pas d’instruction parallèle. Finalement, nous pouvons voir aussi les opcodes pour les quand on utilise les unités de traitement S et D. Nous voyons qu’il y a juste 1 bit qui change pour l’unité S (opfield raccourci d’1 bit) et aussi pour l’unité D, où il ne peut pas y avoir des instructions croisées. ## 5) Pipeline Diapo : https://docs.google.com/presentation/d/1YhRCDBiZFgai1EGmNSxfp2okf33mTHPT5EoTBg-K-dA/edit?usp=sharing ## 6) Les interruptions Voir diapo : https://hackmd.io/@wo0lien/r1WpKj488#/11 ### Les conditions des interruptions Non masquables Tout est détaillé dans le diapo :smile:

    Import from clipboard

    Paste your markdown or webpage here...

    Advanced permission required

    Your current role can only read. Ask the system administrator to acquire write and comment permission.

    This team is disabled

    Sorry, this team is disabled. You can't edit this note.

    This note is locked

    Sorry, only owner can edit this note.

    Reach the limit

    Sorry, you've reached the max length this note can be.
    Please reduce the content or divide it to more notes, thank you!

    Import from Gist

    Import from Snippet

    or

    Export to Snippet

    Are you sure?

    Do you really want to delete this note?
    All users will lose their connection.

    Create a note from template

    Create a note from template

    Oops...
    This template has been removed or transferred.
    Upgrade
    All
    • All
    • Team
    No template.

    Create a template

    Upgrade

    Delete template

    Do you really want to delete this template?
    Turn this template into a regular note and keep its content, versions, and comments.

    This page need refresh

    You have an incompatible client version.
    Refresh to update.
    New version available!
    See releases notes here
    Refresh to enjoy new features.
    Your user state has changed.
    Refresh to load new user state.

    Sign in

    Forgot password

    or

    By clicking below, you agree to our terms of service.

    Sign in via Facebook Sign in via Twitter Sign in via GitHub Sign in via Dropbox Sign in with Wallet
    Wallet ( )
    Connect another wallet

    New to HackMD? Sign up

    Help

    • English
    • 中文
    • Français
    • Deutsch
    • 日本語
    • Español
    • Català
    • Ελληνικά
    • Português
    • italiano
    • Türkçe
    • Русский
    • Nederlands
    • hrvatski jezik
    • język polski
    • Українська
    • हिन्दी
    • svenska
    • Esperanto
    • dansk

    Documents

    Help & Tutorial

    How to use Book mode

    Slide Example

    API Docs

    Edit in VSCode

    Install browser extension

    Contacts

    Feedback

    Discord

    Send us email

    Resources

    Releases

    Pricing

    Blog

    Policy

    Terms

    Privacy

    Cheatsheet

    Syntax Example Reference
    # Header Header 基本排版
    - Unordered List
    • Unordered List
    1. Ordered List
    1. Ordered List
    - [ ] Todo List
    • Todo List
    > Blockquote
    Blockquote
    **Bold font** Bold font
    *Italics font* Italics font
    ~~Strikethrough~~ Strikethrough
    19^th^ 19th
    H~2~O H2O
    ++Inserted text++ Inserted text
    ==Marked text== Marked text
    [link text](https:// "title") Link
    ![image alt](https:// "title") Image
    `Code` Code 在筆記中貼入程式碼
    ```javascript
    var i = 0;
    ```
    var i = 0;
    :smile: :smile: Emoji list
    {%youtube youtube_id %} Externals
    $L^aT_eX$ LaTeX
    :::info
    This is a alert area.
    :::

    This is a alert area.

    Versions and GitHub Sync
    Get Full History Access

    • Edit version name
    • Delete

    revision author avatar     named on  

    More Less

    Note content is identical to the latest version.
    Compare
      Choose a version
      No search result
      Version not found
    Sign in to link this note to GitHub
    Learn more
    This note is not linked with GitHub
     

    Feedback

    Submission failed, please try again

    Thanks for your support.

    On a scale of 0-10, how likely is it that you would recommend HackMD to your friends, family or business associates?

    Please give us some advice and help us improve HackMD.

     

    Thanks for your feedback

    Remove version name

    Do you want to remove this version name and description?

    Transfer ownership

    Transfer to
      Warning: is a public team. If you transfer note to this team, everyone on the web can find and read this note.

        Link with GitHub

        Please authorize HackMD on GitHub
        • Please sign in to GitHub and install the HackMD app on your GitHub repo.
        • HackMD links with GitHub through a GitHub App. You can choose which repo to install our App.
        Learn more  Sign in to GitHub

        Push the note to GitHub Push to GitHub Pull a file from GitHub

          Authorize again
         

        Choose which file to push to

        Select repo
        Refresh Authorize more repos
        Select branch
        Select file
        Select branch
        Choose version(s) to push
        • Save a new version and push
        • Choose from existing versions
        Include title and tags
        Available push count

        Pull from GitHub

         
        File from GitHub
        File from HackMD

        GitHub Link Settings

        File linked

        Linked by
        File path
        Last synced branch
        Available push count

        Danger Zone

        Unlink
        You will no longer receive notification when GitHub file changes after unlink.

        Syncing

        Push failed

        Push successfully