Brevet FR3129763A1 — publié le 20230602

Selon un aspect, il est proposé un système sur puce comprenant : - une mémoire (MEM) comportant une ou plusieurs banques physiques divisées en une succession de secteurs (Sn S1, …, S15), chaque secteur présentant une taille égale à la plus petite taille effaçable de la mémoire, - une interface de mémoire (MI) adaptée pour contrôler les accès à ladite mémoire (MEM) et comprenant au moins un registre de configuration (REG) adapté pour pouvoir définir au moins une banque logique de mémoire (F, A, B) en assignant les secteurs (Sn, S1, …, S15) de la mémoire à ladite au moins une banque logique, chaque secteur de la mémoire étant assigné à une seule banque logique, et - un processeur (PROC) connecté à ladite interface de mémoire, et adapté pour configurer ledit registre de configuration. Figure pour l’abrégé : Fig 1 SYSTEME SUR PUCE COMPORTANT UNE MEMOIRE NON VOLATILE Des modes de réalisation et de mise en œuvre concernent les mémoires non volatiles, et plus particulièrement la gestion de telles mémoires. Un système sur puce est un circuit intégré qui peut comprendre une mémoire non volatile. Cette mémoire peut être utilisée pour stocker un code compilé d’une application pouvant être exécuté par un processeur de ce système sur puce. La mémoire non volatile du système sur puce peut être organisée en une ou plusieurs banques de mémoire (en anglais « memory bank »). Une banque de mémoire est une zone de la mémoire qui est autonome en adressage, en contrôle et en alimentation. Généralement, une mémoire non volatile est composée d’une ou deux banques. L’organisation de la mémoire est définie lors de la conception du système sur puce. Les banques de mémoire sont donc définies physiquement dans le système sur puce. On désignera dans la suite par banques physiques, les banques de mémoire qui sont définies physiquement dans le système sur puce. Chaque banque physique est divisée en secteurs. Ces secteurs correspondent à une unité minimale effaçable de la mémoire. En effet, un effacement dans la mémoire ne peut pas être effectué par bit mais est effectué par secteur du fait de contraintes physiques de la mémoire. Les secteurs d’une mémoire qui sont destinés à contenir au moins un code compilé ont généralement une même taille, et leur nombre dans une banque physique est une puissance de deux. L’application stockée est compilée pour fonctionner à partir d’une adresse de démarrage (appelée également « adresse de boot ») dans la mémoire. Au démarrage d’une application enregistrée en mémoire, le processeur cherche le code compilé de l’application à exécuter à l’adresse de démarrage. S’il n’y a pas de code exécutable à cette adresse, le processeur se bloque et le système sur puce devient généralement inutilisable. En outre, il peut être important de préserver une partie de la mémoire à un adresse fixe de tout effacement pour garantir une racine de confiance (en anglais « root of trust ») et pouvoir certifier de l’origine et de l’authenticité de chaque code installé. Par ailleurs, il est avantageux d’avoir une mémoire configurée pour permettre la mise à jour d’un code compilé d’une application par une nouvelle version de ce code sans avoir à interrompre l’exécution de l’application. En outre, il est important que le système sur puce puisse reprendre une mise à jour du code compilé de l’application après un redémarrage du système sur puce suite à une interruption de son alimentation lors de la mise à jour. Néanmoins, l’organisation des banques physiques de mémoire définies lors de la conception de la mémoire ne permet pas toujours de répondre à l’ensemble de ces points. En outre, l’organisation des banques physiques n’est pas toujours adaptée aux besoins d’un utilisateur. Il existe donc un besoin de proposer une solution permettant de simplifier la gestion d’une mémoire, et permettant de répondre aux différents points susmentionnés. Selon un aspect, il est proposé un système sur puce comprenant : - une mémoire divisée en une succession de secteurs, chaque secteur présentant une taille égale à la plus petite taille effaçable de la mémoire, les secteurs étant associés à au moins une banque physique de mémoire, - une interface de mémoire adaptée pour contrôler les accès à ladite mémoire et comprenant au moins un registre de configuration adapté pour pouvoir définir au moins une banque logique de mémoire en assignant les secteurs de la mémoire à ladite au moins une banque logique, chaque secteur de la mémoire étant assigné à une seule banque logique, et - un processeur connecté à ladite interface de mémoire et adapté pour configurer ledit registre de configuration. Un tel système sur puce permet de configurer des banques logiques (c’est-à-dire des banques virtuelles) pour pouvoir s’abstraire de la configuration des banques physiques définie lors de la conception de la mémoire. Ainsi, le stockage du code compilé de l’application peut se faire indépendamment de l’organisation des banques physiques de la mémoire. En particulier, le code compilé peut être enregistré dans les secteurs assignés à une banque logique de mémoire. Chaque banque logique est accessible à une adresse fixe. Le code de l’application peut ainsi être développé puis compilé sans avoir à prendre en compte l’organisation des banques physiques de mémoire. Un utilisateur du système sur puce bénéficie donc de la totalité de la mémoire. De préférence, les secteurs de mémoire assignés à une même banque sont des secteurs successifs. Cela permet de simplifier la gestion de la mémoire. Dans un mode de réalisation ledit au moins un registre de configuration peut également être adapté pour définir une seule banque logique de mémoire, l’ensemble des secteurs de la mémoire étant alors assigné à cette banque logique. En particulier, ledit au moins un registre de configuration peut également être adapté pour définir une unique banque logique de mémoire servant à stocker un code compilé servant de racine de confiance. Un tel code compilé peut être utilisé pour démarrer une application. En variante, ledit au moins un registre de configuration peut également être adapté pour définir une unique banque logique de mémoire servant à stocker un code compilé d’une application. Ledit au moins un registre de configuration peut également être adapté pour définir plusieurs banques logiques de mémoire, de sorte que l’interface de mémoire définit lesdites banques logiques à des adresses différentes. Par exemple, ledit au moins un registre de configuration peut être adapté pour définir une première banque logique servant à stocker un code compilé servant de racine de confiance et d’une deuxième banque logique servant à stocker un code compilé d’une application. Ledit au moins un registre de configuration peut également être adapté pour définir une première banque logique servant à stocker un code compilé d’une application et d’une deuxième banque logique servant à stocker une version mise à jour du code compilé de l’application, ces deux banques logiques ayant un même nombre de secteurs de mémoire qui leur sont assignés, et pouvant être interchangées. La définition de deux banques logiques permet de faciliter une mise à jour d’une application enregistrée dans la mémoire sans nécessiter de solution logicielle complexe et de manière indépendante de l’organisation des banques physiques de la mémoire. Ledit au moins un registre de configuration peut également être adapté pour définir une première banque logique servant à stocker un code compilé servant de racine de confiance, d’une deuxième banque logique servant à stocker un code compilé d’une application et d’une troisième banque logique servant à stocker une version mise à jour du code compilé de l’application, la deuxième banque logique et la troisième banque logique ayant un même nombre de secteurs de mémoire qui leur sont assignés, et pouvant être interchangées. Dans un mode de réalisation avantageux, ledit au moins un registre de configuration peut également être configuré pour verrouiller la configuration définissant ladite au moins une banque logique. Selon un autre aspect, il est proposé un procédé de gestion d’une mémoire, la mémoire comportant une ou plusieurs banques physiques divisées en une succession de secteurs, chaque secteur présentant une taille égale à la plus petite taille effaçable de la mémoire, les secteurs étant associés à au moins une banque physique de mémoire, le procédé comprenant une configuration de la mémoire permettant de définir au moins une banque logique de mémoire en assignant les secteurs de la mémoire à ladite au moins une banque logique, chaque secteur de la mémoire étant assigné à une seule banque logique. De préférence, les secteurs de mémoire pouvant être assignés à une même banque par l’interface de mémoire sont des secteurs successifs. Dans un mode de réalisation, la configuration de la mémoire est utilisée pour définir une seule banque logique, l’ensemble des secteurs de la mémoire étant alors assigné à cette banque logique. En particulier, la configuration de la mémoire peut être utilisée pour définir une unique banque logique de mémoire servant à stocker un code compilé servant de racine de confiance. En variante, la configuration de la mémoire peut être utilisée pour définir une unique banque logique de mémoire servant à stocker un code compilé d’une application. La configuration de la mémoire peut également être utilisée pour définir plusieurs banques logiques de mémoire accessibles à des adresses différentes. Par exemple, la configuration de la mémoire est utilisée pour définir une première banque logique servant à stocker un code compilé servant de racine de confiance et une deuxième banque logique servant à stocker un code compilé d’une application. En variante, la configuration de la mémoire est utilisée pour définir une première banque logique servant à stocker un code compilé d’une application et une deuxième banque logique servant à stocker une version mise à jour du code compilé de l’application, ces deux banques logiques ayant un même nombre de secteurs de mémoire qui leur sont assignés, et pouvant être interchangées. En variante, la configuration de la mémoire est utilisée pour définir une première banque logique servant à stocker un code compilé servant de racine de confiance, une deuxième banque logique servant à stocker un code compilé d’une application et une troisième banque logique servant à stocker une version mise à jour du code compilé de l’application, la deuxième banque logique et la troisième banque logique ayant un même nombre de secteurs de mémoire qui leur sont assignés, et pouvant être interchangées. D'autres avantages et caractéristiques de l’invention apparaîtront à l’examen de la description détaillée de modes de mise en œuvre et de réalisation, nullement limitatifs, et des dessins annexés sur lesquels : illustrent schématiquement des modes de réalisation et de mise en œuvre de l’invention. La illustre un système sur puce SOC selon un mode de réalisation de l’invention. Le système sur puce SOC comprend un processeur PROC, une mémoire MEM et une interface de mémoire MI. La mémoire MEM est configurée pour stocker un code compilé d’une application. L’application peut prévoir un ou plusieurs services pouvant être mis en œuvre à l’exécution de l’application par le processeur PROC. La mémoire MEM comprend une ou plusieurs banques physiques qui sont divisés en une succession de secteurs Sn. Chaque secteur présente une taille correspondant à une taille de mémoire minimum pouvant être effacée. La illustre un exemple de mémoire comportant une unique banque physique PB1 divisée en huit secteurs S0 à S7. En variante, la illustre un exemple de mémoire MEM comportant une première banque PB1 divisée en huit secteurs S0 à S7 et une deuxième banque PB2 divisée en quatre secteurs S0 à S3. Les deux banques PB1 et PB2 forment alors une succession de douze secteurs S0 à S11. La correspond à une autre variante de réalisation d’une mémoire. Cette mémoire MEM comporte une première banque PB1 divisée en huit secteurs S0 à S7, une deuxième banque PB2 divisée en quatre secteurs S0 à S3 et une quatrième banque PB2 divisée en quatre secteurs S0 à S3. Les trois banques PB1, PB2 et PB3 forment alors une succession de douze secteurs S0 à S15. Les secteurs permettent de stocker le code compilé de l’application. En particulier, la mémoire peut être organisée en une ou plusieurs banques physiques de mémoire. Les secteurs de la mémoire sont alors répartis dans la ou les banques physiques de mémoire. Plus particulièrement, chaque banque physique comprend uniquement des secteurs successifs de la mémoire. La mémoire MEM est une mémoire non volatile, par exemple une mémoire flash. L’interface de mémoire MI est configurée pour gérer les demandes d’accès à la mémoire provenant du processeur PROC. En outre, l’interface de mémoire comprend des registres de configuration REG permettant de pouvoir définir une ou plusieurs banques logiques de mémoire, les secteurs de la mémoire étant alors assignés à cette ou ces banques logiques de mémoire. La définition d’une ou plusieurs banques logiques permet à un utilisateur de pouvoir s’abstraire de l’organisation physique de la mémoire, et donc des banques physiques de la mémoire. Le processeur PROC est adapté pour émettre des instructions de configuration pour configurer lesdits registres de configuration. Les figures 5 à 9 illustrent différentes configurations possibles de la mémoire MEM qui seront décrites dans la suite. Ces différentes configurations respectent des conditions données. En particulier, dans chaque configuration possible, l’ensemble des secteurs de la mémoire est assigné à une banque logique. Aucun secteur de la mémoire n’est donc assigné à aucune banque. En outre, chaque secteur est assigné à une seule banque. Par ailleurs, les secteurs assignés à une même banque sont des secteurs successifs de la mémoire. En outre, il est possible de définir une banque logique F utilisée pour stocker un code compilé fixe, notamment un code compilé pouvant servir de racine de confiance. Ce code compilé peut être utilisé pour démarrer l’application. Cette banque logique F n’est pas interchangeable. Il est également possible de définir au moins une banque logiques A, B pour stocker différentes versions d’une application par exemple. Lorsque la mémoire MEM comprend plusieurs banques logiques A, B, les banques A, B peuvent être interchangées. Afin de configurer la mémoire, l’instruction de configuration émise par le processeur PROC fournit plusieurs informations. En particulier, il convient d’indiquer le nombre de secteurs à assigner à la banque logique F et d’indiquer s’il est souhaité d’avoir en outre des banques logiques A, B interchangeables. Le nombre de secteurs à assigner à la banque logique F peut varier entre zéro et le nombre total de secteurs de la mémoire. Les secteurs restants peuvent alors être assignés à une seule banque logique A ou à deux banques logiques A et B selon s’il est souhaité d’avoir des banques logiques interchangeables. S’il n’est pas souhaité d’avoir des banques logiques interchangeables, alors l’ensemble des secteurs restants est assigné à la banque logique A. S’il est souhaité d’avoir des banques logiques interchangeables alors les secteurs restants sont assignés de sorte qu’un même nombre de secteurs soit assigné à la banque logique A et à la banque logique B. Il peut également être possible de verrouiller la configuration souhaitée en fournissant une information de verrouillage à l’interface de mémoire. Lorsque la configuration de la mémoire est verrouillée, il n’est plus possible de modifier la configuration des banques logiques. Néanmoins, il reste possible d’interchanger les deux banques A et B si la configuration de la mémoire le permet. Comme indiqué précédemment, les figures 5 à 9 illustrent différentes configurations possibles d’une mémoire MEM comportant une succession de huit secteurs S0 à S7. Dans une configuration possible de la mémoire, l’ensemble des secteurs de la mémoire peuvent être assignés à une banque logique F. Par exemple, comme illustré à la , les secteurs S0 à S7 sont assignés à la banque logique F. En variante, comme représenté dans les différents modes de réalisation de la , certains secteurs de mémoires peuvent être assignés à une banque logique F et les autres secteurs de mémoires peuvent être assignés à une banque logique A. En particulier, le nombre de secteurs de mémoire assignés à la banque logique F peut être inférieur au nombre de secteurs de mémoire assignés à la banque logique A. Par exemple, comme illustré dans le mode de réalisation I, deux secteurs S0, S1 sont assignés à la banque logique F et six secteurs S2 à S7 sont assignés à la banque logique A. En variante, le nombre de secteurs de mémoire assignés à la banque logique F peut être égal au nombre de secteurs de mémoire assignés à la banque logique A. Par exemple, comme illustré dans le mode de réalisation II, quatre secteurs S0 à S3 sont assignés à la banque logique F et quatre secteurs S4 à S7 sont assignés à la banque logique A. En variante, le nombre de secteurs de mémoire assignés à la banque logique F peut être supérieur au nombre de secteurs de mémoire assignés à la banque logique A. Par exemple, comme illustré dans le mode de réalisation III, six secteurs S0 à S5 sont assignés à la banque logique F et deux secteurs S6, S7 sont assignés à la banque logique A. En variante, l’ensemble des secteurs de la mémoire peuvent être assignés à une banque logique A. Aucun secteur n’est alors assigné à une banque logique F. Par exemple, comme illustré à la , les secteurs S0 à S7 sont assignés à la banque logique A. En variante, une moitié des secteurs de la mémoire peuvent être assignés à une banque logique A et l’autre moitié des secteurs de la mémoire peuvent être assignés à une banque logique B. Aucun secteur n’est alors assigné à une banque F. Par exemple, comme illustré à la , les secteurs S0 à S3 sont assignés à la banque logique A et les secteurs S4 à S7 sont assignés à la banque logique B. Une telle assignation peut être utilisée pour permettre d’interchanger les banques logiques A et B. En variante, certains secteurs de la mémoire peuvent être assignés à une banque logique F, certains autres secteurs de la mémoire peuvent être assignés à une banque logique A, et les autres secteurs de la mémoire peuvent être assignés à une banque logique B. Dans ce cas, le nombre de secteurs assignés à la banque logique A est le même que celui des secteurs assignés à la banque logique B. Par exemple, comme illustré à la , les secteurs S0 et S1 sont assignés à la banque logique F, les secteurs S2 à S4 sont assignés à la banque logique A et les secteurs S5 à S7 sont assignés à la banque logique B. En variante, les secteurs S0 et S3 sont assignés à la banque logique F, les secteurs S4 et S5 sont assignés à la banque logique A et les secteurs S6 et S7 sont assignés à la banque logique B. Dans une autre variante de mise en œuvre, En variante, les secteurs S0 et S5 sont assignés à la banque logique F, le secteur S6 est assigné à la banque logique A et le secteur S7 est assigné à la banque logique B. La illustre un tel procédé de gestion de la mémoire MEM. Le procédé comprend une étape 30, dans laquelle une nouvelle configuration d’au moins une banque logique est émise par le processeur PROC et reçue par les registres de configuration de l’interface de mémoire MI. Ensuite à l’étape 31, l’interface de mémoire lit l’instruction reçu puis définie ladite au moins une banque logique selon cette instruction. Une fois que la structure de la mémoire est définie par l’interface de mémoire, cette dernière est configurée pour gérer les accès à la mémoire par le processeur PROC. En particulier, le processeur PROC est configuré pour émettre des demandes d’accès à la mémoire. Ces demandes d’accès sont reçues par l’interface de mémoire MI. Chaque demande d’accès indique une adresse mémoire à accéder. L’interface de mémoire MI est configurée pour décoder les instructions qu’il reçoit. En particulier, l’interface de mémoire est configurée pour déterminer si l’adresse renseignée est valide. Si l’adresse renseignée est valide, alors l’interface de mémoire MI peut autoriser l’accès aux secteurs de la mémoire assignés à cette banque logique. Un tel système sur puce permet de configurer des banques logiques pour pouvoir s’abstraire de la configuration des banques physiques définie lors de la conception du système sur puce. Ainsi, le stockage du code compilé de l’application peut se faire indépendamment de l’organisation des banques physiques de la mémoire. En particulier, le code compilé peut être enregistré dans les secteurs assignés à une même banque logique de mémoire. Chaque banque logique est accessible à une adresse fixe. Le code de l’application peut ainsi être développé puis compilé sans avoir à prendre en compte l’organisation des banques physiques de mémoire. Un utilisateur du système sur puce bénéficie donc de la totalité de la mémoire. Système sur puce comprenant : - une mémoire (MEM) comportant une ou plusieurs banques physiques divisées en une succession de secteurs (Sn, S1, …, S15), chaque secteur présentant une taille égale à la plus petite taille effaçable de la mémoire, - une interface de mémoire (MI) adaptée pour contrôler les accès à ladite mémoire (MEM) et comprenant au moins un registre de configuration (REG) adapté pour pouvoir définir au moins une banque logique de mémoire (F, A, B) en assignant les secteurs (S1, …, Sn) de la mémoire à ladite au moins une banque logique, chaque secteur de la mémoire étant assigné à une seule banque logique, et - un processeur (PROC) connecté à ladite interface de mémoire, et adapté pour configurer ledit registre de configuration. Système selon la revendication 1, dans lequel les secteurs de mémoire pouvant être assignés (Sn, S1, …, S15) à une même banque logique par l’interface de mémoire (MI) sont des secteurs successifs. Système selon l’une des revendications 1 ou 2, dans lequel ledit au moins un registre de configuration (REG) est adapté pour définir une seule banque logique de mémoire (F, A), l’ensemble des secteurs de la mémoire étant alors assigné à cette banque logique (F, A). Système selon la revendication 3, dans lequel ledit au moins un registre de configuration (REG) est adapté pour définir une unique banque logique (F) de mémoire servant à stocker un code compilé servant de racine de confiance. Système selon l’une des revendications 3 ou 4, dans lequel ledit au moins un registre de configuration (REG) est adapté pour définir une unique banque logique (A) de mémoire servant à stocker un code compilé d’une application. Système selon l’une des revendications 1 à 5, dans lequel ledit au moins un registre de configuration est adapté pour définir plusieurs banques logiques (F, A, B) de mémoire, de sorte que l’interface de mémoire définit lesdites banques logiques à des adresses différentes. Système selon la revendication 6, dans lequel ledit au moins un registre de configuration (REG) est adapté pour définir une première banque logique (F) servant à stocker un code compilé servant de racine de confiance et d’une deuxième banque logique (A) servant à stocker un code compilé d’une application. Système selon l’une des revendications 6 ou 7, dans ledit au moins un registre de configuration (REG) est adapté pour définir une première banque logique (A) servant à stocker un code compilé d’une application et d’une deuxième banque logique (B) servant à stocker une version mise à jour du code compilé de l’application, ces deux banques logiques (A, B) ayant un même nombre de secteurs de mémoire qui leur sont assignés, et pouvant être interchangées. Système selon la revendication 6, dans lequel ledit au moins un registre de configuration (REG) est adapté pour définir une première banque logique (F) servant à stocker un code compilé servant de racine de confiance, d’une deuxième banque logique (A) servant à stocker un code compilé d’une application et d’une troisième logique (B) banque servant à stocker une version mise à jour du code compilé de l’application, la deuxième banque logique (A) et la troisième banque logique (B) ayant un même nombre de secteurs de mémoire qui leur sont assignés, et pouvant être interchangées. Système selon l’une des revendications 1 à 9, dans lequel ledit au moins un registre de configuration (REG) est configuré pour verrouiller la configuration définissant ladite au moins une banque logique. Procédé de gestion d’une mémoire (MEM), la mémoire (MEM) comportant une ou plusieurs banques physiques divisées en une succession de secteurs (Sn, S1, …, S15), chaque secteur présentant une taille égale à la plus petite taille effaçable de la mémoire, les secteurs étant associés à une banque physique de mémoire, le procédé comprenant une configuration de la mémoire permettant de définir au moins une banque logique de mémoire (F, A, B) en assignant les secteurs (Sn, S1, …, S15) de la mémoire physique à ladite au moins une banque logique, chaque secteur de la mémoire étant assigné à une seule banque logique. Procédé selon la revendication 11, dans lequel les secteurs de mémoire assignés (Sn, S1, …, S15) à une même banque logique (F, A, B) sont des secteurs successifs. Procédé selon l’une des revendications 11 ou 12, dans lequel la configuration de la mémoire est utilisée pour définir une seule banque logique (F, A), l’ensemble des secteurs de la mémoire étant alors assigné à cette banque logique (F, A). Procédé selon la revendication 13, dans la configuration de la mémoire est utilisée pour définir une unique banque logique (F) de mémoire servant à stocker un code compilé servant de racine de confiance. Procédé selon la revendication 13, dans lequel la configuration de la mémoire est utilisée pour définir une unique banque logique (A) de mémoire servant à stocker un code compilé d’une application. Procédé selon l’une des revendications 11 ou 12, dans lequel la configuration de la mémoire est utilisée pour définir plusieurs banques logiques (F, A, B) de mémoire à des adresses différentes. Procédé selon la revendication 16, dans lequel la configuration de la mémoire est utilisée pour définir une première banque logique (F) servant à stocker un code compilé servant de racine de confiance et une deuxième banque logique (A) servant à stocker un code compilé d’une application. Procédé selon la revendication 16, dans lequel la configuration de la mémoire est utilisée pour définir une première banque logique (A) servant à stocker un code compilé d’une application et une deuxième banque logique (B) servant à stocker une version mise à jour du code compilé de l’application, ces deux banques logiques (A, B) ayant un même nombre de secteurs de mémoire qui leur sont assignés, et pouvant être interchangées. Procédé selon la revendication 16, dans lequel la configuration de la mémoire est utilisée pour définir une première banque logique (F) servant à stocker un code compilé servant de racine de confiance, une deuxième banque logique (A) servant à stocker un code compilé d’une application et une troisième banque logique (B) servant à stocker une version mise à jour du code compilé de l’application, la deuxième banque logique (A) et la troisième banque logique (B) ayant un même nombre de secteurs de mémoire qui leur sont assignés, et pouvant être interchangées.