Guibaka
    • Create new note
    • Create a note from template
      • 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
        • Only me
        • Signed-in users
        • Everyone
        Only me Signed-in users Everyone
      • Write
        • Only me
        • Signed-in users
        • Everyone
        Only me 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
    • Save as template
    • 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 Create Help
Create Create new note Create a note from template
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
Only me
  • Only me
  • Signed-in users
  • Everyone
Only me Signed-in users Everyone
Write
Only me
  • Only me
  • Signed-in users
  • Everyone
Only me 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
    # SMC Compte Rendu TP6 ## Binôme * Guillaume VACHERIAS : 21204391 * Yann QUERIC : 28712032 ## Analyse du composant VciXcacheWrapper ### Question 1 *En moyennant sur plusieurs images, évaluez le nombre de cycles nécessaires pour lire sur disque et afficher une image? Combien cela représente-t-il de cycles par pixel?* Voici le nombre de cycle pris par image : | Image | Start cycle | End cycle | Nombre de cycles | | ----- | ----------- | --------- | ---------------- | | 1 | 2025 | 202285 | 200260 | | 2 | 962912 | 1188370 | 225458 | | 3 | 1948194 | 2186157 | 237963 | | 4 | 2945981 | 3033609 | 87628 | | 5 | 3793433 | 3962416 | 168983 | | 6 | 4722240 | 4907152 | 184912 | | 7 | 5666976 | 5784600 | 117624 | | 8 | 6544424 | 6603655 | 59231 | | 9 | 7363479 | 7418263 | 54784 | | 10 | 8178087 | 8405899 | 227812 | | 11 | 9165723 | 9405164 | 239441 | | 12 | 10164988 | 10385677 | 220689 | | 13 | 11145867 | 11281746 | 135879 | | 14 | 12041936 | 12210661 | 168725 | | 15 | 12970851 | 13080748 | 109897 | | 16 | 13840938 | 13996672 | 155734 | | 17 | 14756862 | 14960265 | 203403 | | 18 | 15720455 | 15822941 | 102486 | | 19 | 16583131 | 16759909 | 176778 | | 20 | 17520099 | 17609273 | 89174 | On calcule alors 158343,05 cycles par images. Nous avons des images de taille 128x128 ce qui fait 16384 pixel 9.66 cycles par pixels. ### Question 2 *Comment est implémenté l'interface entre le contrôleur de cache et l'ISS (Instruction Set Simulator) représentant le processeur?* On peut retrouver dans l'interface *generic_cache.h* les fonctions utilisés pour interagir avec les lignes de caches. On retrouve les fonctions pour accéder aux valeurs stocké dans une lignes de cache : * *cache_data* * *cache_tag* * *cache_val* Ensuite, on retrouve les fonctions principales utilisant les fonctions définient précédemment pour effectuer les actions sur les caches (read, update, write, invalidate ...). Pour le contrôleur de cache et l'IIS, on utilise des automates pour réaliser la simulation. On retrouve 4 automates avec représentants : * données du cache * instruction du cache * commande envoyé * réponse des commandes ## Automate ICACHE ### Question 3 *Quels sont les conditions de sortie vers les deux états successeurs possibles de l'état IDLE de l'automate ICACHE_FSM ?* Condition de sortie de *ICACHE_IDLE* est la réception d'un interrupt request valid (**m_ireq.valid**). On retrouve alors 2 cas : * icache_cacheable : Alors on passe à l'état ICACHE_MISS_SELECT si on a un cache miss * !icache_cacheable : Alors on passe à l'état ICACHE_UNC_WAIT. ### Question 4 *Comment l'automate ICACHE transmet-il ses requêtes vers l'automate VCI_CMD?* L'automate ICACHE traîte les requêtes du processeur dans l'état *ICACHE_IDLE*. Si on reçoit une requête valide du processeur avvec une adresse cacheable ainsi qu'un cache hit, on enregistre l'instruction du processeur dans le registre *m_irsp.instruction* qui sera traité plus tard par le l'automate VCI_CMD. ### Question 5 *Si la réponse VCI à une lecture d'instruction signale une erreur d'adressage, comment cette erreur est-elle signalée au processeur?* Nous utilisons le dernier bit de poid faible de l'adresse stocké dans le registre **p_vci.rerror** pour indiqué si nous reçevons une erreur. Dans le cas où le bit est à 1 (erreur), on met le registre r_vci_rsp_ins_error à true. Cette erreur sera taité dans l'automate ICACHE où l'on remet l'état du ICACHE à IDLE. ### Question 6 *Donner l'expression de la condition irsp.valid (réponse valide à une requête de lecture instruction en provenance du processeur).* ```clike= m_ireq.valid and (m_ireq.addr == r_icache_addr_save.read()) ``` ### Question 7 *Représentez le graphe des transitions de l'automate ICACHE* ![](https://i.imgur.com/wab8qsj.png) ## Automate DCACHE ### Question 1 * *Quelles sont les conditions de sortie vers les six états successeurs possibles de l'état IDLE de l'automate DCACHE_FSM ?* ![](https://i.imgur.com/PM04Fsf.png) * *Quelles sont les deux requêtes spéciales (autres que des lectures ou des écritures en mémoire) qui sont acceptées par ce composant ?* Les 2 requêtes accéptées par ce composant sont LL et SC ### Question 2 *Quelle est l'utilité de l'état DCACHE_MISS_SELECT?* L'état DCACHE_MISS_SELECT permet la lecture en mémoire des données ### Question 3 * *Si la réponse VCI à une lecture de donnée signale une erreur d'adressage, comment cette erreur est-elle signalée au processeur?* L'erreur d'une lecture est ignorée est signalé par DCACHE FSM. Plus précisemment, VCI_RSP FSM met le r_vci_rsp_data_error à vrai et la gestion d'erreur se fait par le DCACHE FSM. Le DCACHE_FSM met à l'état DCACHE_IDLE lors d'une erreur ```clike= if ( r_vci_rsp_data_error.read() ) // error reported { m_drsp.valid = true; m_drsp.error = true; r_vci_rsp_data_error = false; r_dcache_fsm = DCACHE_IDLE; } ``` * *Comment est signalée une erreur d'adressage suite une écriture ?* Le VCI_RSP FSM signal l'erreur en utilisant la méthode setWriteBerr(). ### Question 4 *Quels sont les états successeurs possibles de l'état DCACHE_WRITE_REQ?* Les états successeurs possibles de DCACHE_WRITE_REQ sont les mêmes 6 six états sortie de DCACHE_IDLE : * DCACHE_WRITE_UPDT * DCACHE_WRITE_REQ * DCACHE_MISS_SELECT * DCACHE_UNC_WAIT * DCACHE_XTN_HIT * DCACHE__XTN_SYNC ### Question 5 *Donner l'expression de la condition drsp.valid (réponse valide à une requête de lecture ou d'écriture de donnée en provenance du processeur)?* * Écriture : m_req.valid & DATA_READ & dcache_cacheable & dcache_hit * Lecture : mreq.valid & DATA_WRITE & dcache_cacheable & dcache_hit Ainsi pour une lecture ou écriture la condition pour un drsp.valid est un dcache_cacheable et dcache_hit ainsi qu'un req.valid. ### Question 6 ## Automate VCI_CMD ### Question 1 * *L'automate VCI_CMD peut être décrit comme un serveur. Quels sont ses clients?* Les clients du serveurs sont les automates du cache qui ont besoin de faire des commandes VCI : * DMISS * INS_MISS * WRITE * DUNC * IUNC * *Quelle est la politique de priorité implémentée par ce contrôleur en cas de requête simultanée par différents clients?* Les instructions sont prioritaires et pour les données les écritures sont prioritaires ### Question 2 *Quelles sont les 4 types de transactions VCI qui peuvent être émises par cet automate?* Les transactions que peuvent être émises par cet automate sont : * CMD_INS_MISS * CMD_INS_UNC * CMD_DATA_MISS * CMD_DATA_UNC * CMD_DATA_WRITE ### Question 3 et 5 *Quelles sont les conditions de sortie vers les états successeurs de l'état IDLE?* ![](https://i.imgur.com/lMkJHXw.png) ### Question 4 *En consultant le code de l'objet write_buffer, expliquez le fonctionnement du tampon d'écritures postées. A quelle condition une transaction d'écriture VCI aura-t-elle une longueur supérieure à un flit?* * Le tampon d'écritures postées maintient un compteur de transactions en attente, qui est incrémenté chaque fois qu'une nouvelle transaction est ajoutée au tampon.L'objet write_buffer traite les transactions en attente dans l'ordre dans lequel elles ont été reçues. Lorsqu'il est prêt à traiter une transaction, il retire les données correspondantes du tampon d'écritures postées et les utilise pour mettre à jour son état interne.Une fois que la transaction a été traitée, le compteur de transactions en attente est décrémenté et le tampon d'écritures postées est disponible pour stocker de nouvelles transactions. * La longueur d'une transaction d'écriture VCI dépend de la quantité de données à écrire. Si la quantité de données à écrire est inférieure ou égale à la taille d'un flit, la transaction aura une longueur d'un flit. En revanche, si la quantité de données à écrire est supérieure à la taille d'un flit, la transaction aura une longueur supérieure à un flit et sera divisée en plusieurs flits successifs. ## automate VCI_RSP ### Question 1 *Quelles sont les conditions de sortie vers les états successeurs de l'état IDLE?* ### Question 2 *Comment l'automate VCI_RSP communique-t-il avec les deux automates DCACHE et ICACHE? Comment signale-t-il une éventuelle erreur de lecture reportée par la cible VCI?* * Il faut synchroniser les états des automates DCACHE et ICACHE pour la terminaison et les erreurs. Pour cela, nous utilisons une bascules RS. * En cas d'erreur : * En cas d'erreur d'écriture : l'erreur est directement signalé par RSP FSM. * **En cas d'erreur lecture écriture** : VCI_RSP FSM met à vrai r_vci_rsp_data_error, flip_flop et l'erreur est signalé par DCACHE_FSM. * En cas d'erreur d'instruction ; VCI_RSP FSM met à vrai r_vci_rsp_ins_eror, flip_flop et l'erreur est signalé par ICACHE FSM ### Question 3 * *Comment l'automate VCI_RSP signale-t-il la fin d'une transaction d'écriture au tampon d'écritures?* La fin d'une transaction d'écriture au tampon est signalé par *r_vci_rsp_fifo_ins.wok()* où fifo n'est pas remplis. * *A quoi sert cette signalisation?* Cette signalisation sert à indiquer à l'automate VCI_CMD que l'état est synchronisé et qu'on puisse continuer d'envoyer les paquets VCI_CMD. * *Comment signale-t-il une erreur d'écriture reportée par la cible VCI?* * En cas d'erreur : * **En cas d'erreur d'écriture** : l'erreur est directement signalé par RSP FSM. * En cas d'erreur lecture écriture : VCI_RSP FSM met à vrai r_vci_rsp_data_error, flip_flop et l'erreur est signalé par DCACHE_FSM. * En cas d'erreur d'instruction ; VCI_RSP FSM met à vrai r_vci_rsp_ins_eror, flip_flop et l'erreur est signalé par ICACHE FSM ## Instrumentation ### Question 1 *Comment est calculé le nombre moyen de cycles par instruction (CPI) ?* Il est par le nombre total de cycle par le compteur d'excution d'instruction. ```clike= << "- CPI = " << (float)m_cpt_total_cycles/m_cpt_exec_ins << std::endl ``` ### Question 2 *Comment sont calculés le miss_rate (taux de miss) et le miss_cost (coût moyen du miss) pour chacun des deux caches ?* * Le calcul des Miss Rate : * Instruction Miss Rate : *(float)m_cpt_ins_miss/m_cpt_exec_ins* (compteur instruction miss par compteur d'exécution d'instruction) * Données Miss rate : *(float)m_cpt_data_miss/m_cpt_read* (compteur donné miss par compteur de lecture) * Le calcul des Miss cost. : * Instruction Miss Cost : *(float)m_cost_ins_miss_frz/m_cpt_ins_miss* (coût instruction miss freezed (non acccepté) par compteur instruction miss) * Données Miss Cost : *(float)m_cost_data_miss_frz/m_cpt_data_miss* (coût donnée miss freeze (non acccepté) par compteur donnée miss) ### Question 3 * A quoi correspond le write_cost (cout moyen d'écriture) pour le tampon d'écritures postées ? Le write_cost correspond au nombre de requête non accepté par le nombre de compteur écriture. * Comment est-il calculé? On calcule le write cost avec : *(float)m_cost_write_frz/m_cpt_write* (coût écriture freeze par compteur écriture) ## Tampon d'écritures postées ### Question 1 *Quelle est la signification des 4 arguments du constructeur de cet objet ?* Les 4 arguments du constructeur sont : * name : Le nom de l'objet * wbuf_nwords : Le nombre du buffer écriture (buffer width (number of words)) * wbuf_nslots : Le nombre d'emplacement du buffer écriture (buffer depth (number of slots)) * cache_nwords : Le nombre de mot du cache (cache_line width) ### Question 2 * Quels sont les quatre états possibles d'une ligne du multi_write_buffer ?* * EMPTY: Les emplacements pas encore traité. * OPEN: Les emplacements sont disponible. * LOCKED: Les emplacements ne sont pas disponible. * SENT: Emplacement traité par la fonction sent(). ### Question 3 *Quelles sont la ou les méthodes qui peuvent être utilisées par l'automate DCACHE_FSM pour modifier l'état interne du multi_write_buffer ?* * reset: Remets a l'état EMPTY tout les emplacements * sent: Utilisé par VCI_CMD FSM et change l'état d'un emplacement de LOCKED à SENT * update: Appelé à tout les cycles et change l'état d'un emplacement de OPENT à LOCKED * write: Utilisé par DCACHE FSM et change l'état d'un emplacement de EMPTY à OPEN * completed: Utilisé par VCI_RSP FSM et change l'état d'un emplacement de SENT à EMPTY ### Question 4 *Quelles sont la ou les méthodes qui peuvent être utilisées par l'automate CMD_FSM pour modifier l'état interne du multi_write_buffer ?* La seul méthode utilisé par l'automate cmd_fsm est sent() pour modifier l'état interne du buffer. ### Question 5 *Quelles sont la ou les méthodes qui peuvent être utilisées par l'automate RSP_FSM pour modifier l'état interne du multi_write_buffer ?* La seul méthode utilisé par l'automate cmd_fsm est completed() pour modifier l'état interne du buffer. ### Question 6 *A quoi sert la méthode update() ? Pourquoi doit-elle être appelée à chaque cycle ?* La méthode update permet de modifier l'état d'un emplacement de open a locked. Elle est appelé à chaque cycle puisque on envoie un paquet VCI a chaque sicle et on est amener a changer et traiter les états d'un emplacements. ## Modification du contrôleur de cache #### Question 1 *Comparez les fichiers d'interface vci_xcache_wrapper.h et vci_xcache_wrapper_advanced.h, et identifiez les modifications qui ont été introduites* Dans **dcache_fsm_state_e** du *vci_xcache_wrapper_advanced.h*, nous retrouvons un état DCACHE_XTN_SYNC supplémentaire pour la synchronisation des automates. De plus, nous retrouvons **read_transaction_type_e** qui décrit les types de transaction (DATA_UNC, DATA_MISS, INS_UNC, INS_MISS). On retrouve en plus dans le fichier *vci_xcache_wrapper.h* le signal **r_dcache_write_req** qui n'est pas présent dans le *vci_xcache_wrapper_advanced.h*.

    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