Conception d`interface pour processeur embarqué - Lab

publicité
Conception d’interface pour processeur embarqué
dans les systèmes sur puce
Issam MAALEJ*, Guy GOGNIAT**, Mohamed ABID*, Jean Luc PHILIPPE**
* ECOLE NATIONALE D’INGENIEURS DE SFAX
DEPARTEMENT DE GENIE ELECTRIQUE, B.P : W 3038 SFAX TUNISIE
Fax : 21674275595 , Tel : 0021674274088 / 0021674274409
** L.E.S.T.E.R., UNIVERSITE DE BRETAGNE SUD, FRANCE ; RUE SAINT MAUDE - 56100 LORIENT.
TEL : 02 97 87 45 60 – FAX : 02 97 87 45 00
Email : [email protected]
Résumé : Ce papier s’inscrit dans le cadre de l'intégration des
systèmes sur puce. Il s’intéresse à la conception d'interface
logicielle/matérielle afin de proposer au concepteur un modèle
d'interface générique qui permet de faciliter son intégration. En
premier lieu, nous introduisons la conception des systèmes
embarqués monopuce. Une architecture cible autour du cœur de
processeur "léon" associé à des accélérateurs matériels est ensuite
présentée. En second lieu, nous proposons une approche de
conception d'interface logicielle/matérielle permettant de faciliter
l'intégration de la communication dans ces monopuces.
1
Introduction
Les applications modernes sont de plus en plus complexes. Le
temps de mise sur le marché (" time to market") doit être de plus
en plus court. Chercheurs et industriels se sont focalisés sur les
nouvelles méthodes et environnements de conception afin de
faciliter la conception de tels systèmes et maîtriser leur complexité.
En effet, dés les années 90, les chercheurs se sont concentrés sur
l’innovation et la mise en œuvre d’une nouvelle méthodologie de
conception : "co-design" [Abi98]. Toutefois, Jusqu’à la fin des
années 90 la conception des systèmes dédiés n'est implémentée
que sur cartes (circuits imprimés).
Aujourd'hui, le développement technologique des composants
submicroniques avec un taux d’intégration supérieur à un million
de transistors a ouvert la porte à l’implémentation de ces systèmes
sur un seul Chip. Cette nouvelle génération de systèmes embarqués
(SoC : "System on Chip") permet de maîtriser des problèmes
encore plus complexes du fait qu’avec un seul chip on peut
atteindre des performances (MIPS ou FLOPS) plus élevées que
celles pouvant être réalisées avec une carte.
Une phase clé lors de la conception des SoC est l’intégration
des blocs IPs ("Intellectual Properties") [Air00] ce qui reste une
opération difficile et coûteuse en temps de conception. C'est
pourquoi nous proposons la définition d’interfaces de
communication génériques pour assurer la connexion entre les
différents blocs IP et plus particulièrement les cœurs de
processeurs avec les accélérateurs.
Peu de travaux se sont intéressés à ce problème de synthèse
d'interface de communication. La plupart peuvent être classés en
deux catégories. La première traite le problème pendant la
synthèse haut niveau grâce à des outils ou des langages de
spécification système comme COSMOS [Ben95], POLIS [Bal97],
SystemC [Kje01] et CoWare [Ver98], qui permettent la génération
automatique d’interfaces de communications. Cependant, les
résultats restent souvent non optimums et ne répondent pas
systématiquement aux contraintes exigées. Par ailleurs, ces outils
ne permettent pas généralement la synthèse de bas niveau. La
deuxième s'intéresse aux composants standards qui ont des
protocoles incompatibles. L'IMEC propose aussi une solution de
conception d’interface de communication matérielle [Lin97]. Cette
solution est intéressante lorsque tous les IPs utilisés ont les mêmes
protocoles de communications. [Lys02] utilise des "wrappers" afin
d'assurer la communication entre les accélérateurs matériels et le
bus. [Cha02] intègre une architecture micro-réseau dans son SoC
afin d'assurer la communication entre les différent composants
logiciels et matériels. Un effort de standardisation pour la
communication VCI a été lancé par l'association VSIA [Vsi02]
("Virtual Socket Interface Alliance"). Cette norme annonce 3
standards pour la communication. Le "System Level InterFace
documentation standard (SLIF)" et le "System-Level Data-Type
standard" regroupent plusieurs transaction et message pour la
description de la couche communication au niveau système. Le
"On Chip Bus Virtual Component Interface (OCB VCI)" définie un
ensemble de signaux assurant une interface générique pour la
communication entre IPs et bus.
Pour la plupart de ces travaux les connexions sont soit points à
points soit par un bus externe. Dans le cadre de ce travail, nous
considérons la communication à travers le bus interne du
processeur. Pour cela nous proposons une étude sur la synthèse
des communications lors de l’assemblage de ce type de SoC. Cette
étude concerne, actuellement, la communication entre un
processeur et des accélérateurs matériels (plus généralement des
IPs) pour un type d'application en traitement de signal. L'objectif
étant de généraliser plus tard cette approche pour différents types
d’IPs et de processeurs.
Ce papier est organisé comme suit : Dans la section 2, nous
développons une formulation du problème. Dans la section 3, nous
détaillons la méthode de conception des interfaces de
communication. Dans la section 4, afin d’illustrer la mise en œuvre
de l’interface, nous appliquons notre approche à une DCT 1D et
une DCT 2D avec les bus AMBA AHB et PCI. Enfin, nous
finissons par une conclusion ainsi que les travaux futurs.
2
Formulation du problème
A – Architecture et fonctionnement des SoCs
L’architecture du SoC que nous considérons est proposée dans
la figure 1. Elle est décomposée en couches en vue de maîtriser la
Programme d’application
ROM
Programme
Accélérateur
matériel
Coeur
µP
Accélérateur
matériel
RTOS
ROM
Programme
RAM
donneés
Figure 1 : Système intégré sur Puce
(FPGA ou ASIC)
complexité pour la partie matérielle et pour la partie logicielle. On
peut décomposer ces couches en deux principales. La première est
formée par les RAMs, ROMs et le microprocesseur. Cette partie
constitue la couche logicielle. La deuxième est la couche
matérielle.
Le fonctionnement de ce type de système se décrit comme un
ensemble de composants logiciels et matériels travaillant
conjointement. La partie logicielle, s’exécutant sur un processeur
embarqué, communique avec d’autres applications s’exécutant
simultanément en matériel. Ces derniers sont intégrés sur la même
puce que le processeur.
B – Interconnexion pour les SoCs
Comme l'architecture du SoC intègre plusieurs composants. Il
faut assurer un ensemble d'interconnexions afin d’assembler le
système complet. Actuellement, on distingue 3 approches : (1)
Interconnexion par bus externe standard. (2) Connexion point à
point. (3) Connexion à travers des FIFOs ou mémoires partagées.
En ce qui concerne l’architecture du Soc que nous avons
adoptée, la connexion se fait par l'intermédiaire du bus interne du
processeur. De ce fait, il s'agit plus d'intégrer des composants
matériels au cœur de processeur que d'assembler un SoC habituel.
Le principe de fonctionnement global ressemble plus à celui d’un
ASIP.
C – Présentation du processeur
L’architecture se base sur la conception d’une application
embarquée sur une seule puce autour du processeur LEON
[Gai00]. Ce processeur est un processeur SPARC compatible dédié
pour les applications embarquées. Il comporte un cache séparé en
deux couches instructions et données, le bus AMBA AHB et APB
[Amb02], UARTs, "timers", contrôleur d’interruption, un port
d’entrés/sorite 16-bits, et une interface pour le coprocesseur
"Meiko floating-point unit".
Pour la communication des données, le processeur LEON
utilise le bus interne AMBA (Advanced Microcontroller Bus
Architecture) qui est structuré en deux BUS. Le premier est le bus
AHB (Advanced High-performance Bus). C’est un bus interne,
conçue pour les transferts hauts débit du processeur. Il est équipé
de plusieurs protocoles permettant un maximum d’optimisation au
niveau temps de transfert. Mais ces protocoles, rendent plus
compliqués la connexion des périphériques avec ce bus. Le bus
APB (Advanced Périphéral Bus) est spécialisé pour la
communication avec des périphériques. Sans protocole compliqué,
il présente une interface très simple à utiliser. Toutefois, il présente
des débits de transferts modestes. Le processeur est aussi équipé
d’un bus d’entées/sorties 32 bits qui est le bus PCI.
3
Conception d’interface de communication
A – Motivation
Afin d’aider le concepteur à concevoir la communication
entre le processeur « léon » et le(s) accélérateur(s), et lui éviter de
définir et raffiner lui-même les connexions des bus, des pines etc.,
nous proposons un modèle permettant à chaque accélérateur de se
connecter au processeur par configuration. Ce modèle intègre une
interface qui est connectée en premier lieu avec l’IP (figure 2-a).
Ensuite, tout le bloc accélérateur matériel et interface sont associés
au reste du system on chip (figure 2-b) à travers le bus AMBA.
Dans ce cas, lors de l’intégration sur le bus AMBA, la connexion
avec le processeur devient ainsi plus simple.
IP
Interface
figure 2-a
Les contrôleurs et le processeur opèrent en parallèle. Le
contrôleur dispose d'une mémoire tampon, pour lui permettre, par
exemple, de lire des données en provenance du périphérique
d'entrée pendant que le processeur traite une autre tâche.
C – Processus de sélection
Comme pour les contrôleurs, on a
alloué, à chaque
accélérateur, un certain nombre d'adresses. La sélection est prise en
charge par l’interface de communication. Cette dernière est chargée
de comparer à chaque fois l’adresse délivrée par le processeur
LEON avec l’adresse réservée à l’accélérateur. Ce qui est
équivalent à réserver un comparateur 32 bits. Comme on peut
utiliser autant d’interfaces que d’accélérateurs, on est amené à
associer à chaque interface un comparateur 32 bits.
Afin d’optimiser au niveau temps et surface, on a ajouté un
HSELx
Décodeur
Bus
d’adresse
IP1
IP2
Interface1
Interface2
HSEL1
HSEL2
Bus AMBA
IP
IP
Interface
Interface
figure 2-b
B – Principe de communication
En général, la communication entre un processeur et les
périphériques nécessite la mise en œuvre de plusieurs protocoles et
gestionnaires matériels et logiciels selon le besoin.
La plupart du temps, le processeur ne commande pas
directement les périphériques. Il utilise pour cela un circuit
spécialement adapté, un « contrôleur », de caractéristiques propres
à chaque périphérique. Les commandes du processeur vers le
périphérique s'opère alors par l'intermédiaire de ce contrôleur. Ces
commandes correspondent directement aux mécanismes physiques
du périphérique tels, par exemple, que le déplacement du bras d'un
lecteur de disque. Par ailleurs, les contrôleurs sont souvent d'une
grande complexité électronique.
On relie les contrôleurs au bus du processeur et on leur alloue,
à chacun, un certain nombre d'adresses. À ces différentes adresses,
on émet des commandes de pilotage ou on effectue des entréessorties de données. Le contrôleur reconnaît ses adresses grâce à une
logique de décodage. Dans certains systèmes, les contrôleurs ne
sont pas reliés au bus mais à des voies d'entrées-sorties spécifiques.
AMBA
Figure 2 : Mécanisme d’interface pour la communication
Cette approche permet donc au concepteur de simplifier la
phase d’intégration. L’interface est considérée d’un coté comme un
esclave du processeur sur le bus AMBA ; et de l’autre côté, elle est
considérée comme maître de l’accélérateur matériel. Ainsi,
l’interface permet la séparation entre l’IP et le processeur.
L’interface assure la gestion entre le processeur et chaque IP
individuellement. Elle assure donc l’adaptation du protocole de
communication du processeur en fonction des caractéristiques des
IPs. Dans la suite de cette section, nous proposons des solutions
afin de résoudre les points clés du modèle d’interface à savoir :
l’adaptation du protocole de communication, la sélection et la
configuration.
Figure 3 : le décodeur génère les
signaux de sélections pour l’interface.
décodeur (voir figure 3). Ce décodeur se charge de la génération
des signaux de sélection HSELX (X symbolise le numéro du
signal). Ainsi, l’interface se chargera seulement de détecter la mise
à ‘1’ du signal de sélection. Le décodeur réserve des plages
d’adresses à partir d’une adresse initiale et en fonction de la taille
de plage choisie.
D – Principe de l’interface de communication
Le principal objectif de l’interface est donc d’adapter le
protocole de communication de l’IP à celui du processeur LEON.
Le bus AMBA AHB du LEON admet plusieurs protocoles. Ces
protocoles sont contrôlés par le maître. En ce qui nous concerne le
bus AMBA est configuré en maître. Donc ces protocoles sont
imposés par le bus aux esclaves. Ce qui induit, que l’interface doit
décoder le type de configuration imposé par ce protocole afin
d’assurer un transfert de données correct. Pour cela, nous nous
somme basés sur le chronogramme (figure 4) de transfert simple
des données. Ensuite, nous nous somme basés sur les protocoles
clés qui font la différence de transfert au moment de l’exécution.
Ce qui est le cas pour le Hsize qui nous indique la taille du
transfert qui peut varier de 8 bits jusqu'à la taille maximale du bus
qui est de 32 bits pour notre cas et qui peut arriver jusqu’à 1024
bits pour d’autres processeurs utilisant le même bus AMBA. Pour
l’exemple de la DCT on utilise un transfert de 64 bits (2*32). Dans
la suite on impose une taille de 32 bits ce qui est équivalent à
Hsize = "010 ".
Figure 4 : Chronogramme de transferts simples
E - Modélisation de l'interface
L'interface est considérée comme un esclave pour le bus
AHB, ce qui conduit à utiliser les signaux d'entrées/sorties de
l'unité AHB SLAVE. Le signal HMASTER[3:0] n'est pas pris en
compte puisqu'il n'y a pas plusieurs maîtres sur le bus. En effet, le
processeur LEON est le seul maître du système.
L'entité correspondante à cette interface est nommée AHB.
Elle est modélisée par la figure 5 :
hwdata
xdat
hrdat
haddr
Hsize 3
Entité de
start
l'interface
busy
hsel
Library ………
package nom_bus is
type slv_in_type is record …………….
end record ;/* type d'entrée
type interface_type is array ( 0 to k ) of slv_in_type ;/* type de sortie
type SIGNAL_SLV_IN_TYPE is record
… /* Signaux d'entrées venant du bus du processeur
end record ;
type Signal_SLV_OUT_TYPE is record
… /* Signaux de sorties vers le bus du processeur
end record ;
end ;
Le fonctionnement de l'interface est décrit comme ci-dessous :
Library ………
use work.nom_bus.all ; /* Appel du package
entity Bus is
port(
cs : in std_logic;
clk : in std_logic;
rst : in std_logic;
BUSI : in SIGNAL_SLV_IN_TYPE ;
ydata : in interface_type;
BUSO : out SIGNAL_SLV_OUT_TYPE ;
start : out std_logic ;
xdata : out interface_type);
end ahb ;
-------architecture .….. is
…
Process (clk)
begin
-- Processus lancement --
cs
rst
clk
l'opération de transfert dés que toutes les conditions de
fonctionnement sont validées. Ce processus a pour fonction de
valider les opérations de transferts en écriture et en lecture. Ces
deux opérations constituent successivement le deuxième et le
troisième processus. Les conditions de fonctionnement de ces
processus sont commandés uniquement par le premier processus, le
quatrième et le cinquième processus qui correspendent
successivement aux processus de réinitialisation d'écriture et de
lecture.
En résumé, on a un fichier pour la déclaration des types et des
signaux organisé ainsi :
ydat
Figure 5 : Interface entre la DCT et le bus AHB
L'entité AHB reçoit les signaux CS et HSEL qui indiquent
qu’elle est sélectionnée. Une fois sélectionnée, elle exécute le
transfert des données. Une fois le transfert terminé, l'interface
fournit à l'accélérateur un signal qui déclenche le calcul de
l’accélérateur (start). Lorsque le calcul de la DCT est terminé
(indiqué par busy à l'état bas), l'interface récupère le résultat de la
DCT sur le bus de donnée du bus AHB.
F – Description de l’interface
L'interface initialement décrite pour la communication de la
DCT avec le bus AMBA AHB est ensuite étendue pour assurer la
communication de façon plus générique. Nous avons donc défini
une description plus générale de l'interface.
Cette description est faite dans deux fichiers VHDL. Le
premier fichier est un package qui décrit les types nécessaires pour
l'interface. Il contient un type décrivant la taille du bus de donnés
du processeur, un autre décrivant la taille du bus de données de
l'accélérateur matériel, et deux autres décrivant les signaux entrées
et sorties du bus du processeur. Le deuxième fichier, constitue la
description fonctionnelle de l'interface. le fonctionnement de
l'interface est assuré par 5 processus groupés dans un seul
"process" qui est actionné par le changement du signal d'horloge
"clk". Chaque processus est contrôlé par des conditions propres à
son fonctionnement. Le premier processus constitue la procédure
de lancement du transfert des données. Il détecte le début de
if Condition de transert= vraie then
(Read adress)
if ( c'est une écriture ) then write <= '1';
else read <= '1'; end if;
else write <= '0'; read <= '0'; end if;
--Processus Ecriture –if ( write ='1') and (address = int_waddr) and (rop ='0')
then (écriture ...) ;end if;
--Processus lecture –…
--Réinitialisation écriture –if (int_waddr = "Adresse de fin de transfert") and (write ='1')
then
wop <='0';
int_waddr <= " Adresse de debut de transfert ";
start<='1'; end if;
--Réinitialisation lecture –…
End process;
End architecture;
Comme on peut le remarquer seul le premier processus
dépend des signaux du bus du processeur (contrôles, adresse).
4
Applications
L'interface décrite dans le chapitre précédent est assez
générique pour pouvoir assurer la communication entre plusieurs
types de bus et d'accélérateurs à grain faible. Pour valider cette
approche nous avons réalisé les expériences décrites ci-après.
A – Interface AHB – DCT 1D
Cette application consiste en la réalisation de la
communication du bus AMBA AHB du processeur LEON et une
DCT. Le bus présente une largeur de donnée de 32 bits. La DCT
fait le traitement de vecteurs de 64 bits. Ce qui se traduit par une
configuration des deux premiers types du package comme suit :
type slv_in_type is record
vec : std_logic_vector (31 downto 0 );
end record ;
type interface_type is array ( 0 to 1 ) of slv_in_type ;/* 2x32=64bits
Ensuite l'identification des signaux du bus AHB sont
enregistrés dans les deux autres types du packages.
type SIGNAL_SLV_IN_TYPE is record
hsel : std_logic;
hwrite : std_logic ;
hsize : std_logic_vector(2 downto 0);
hburst : std_logic_vector(2 downto 0);
htrans : std_logic_vector(1 downto 0) ;
hwdata : slv_in_type;
haddr : std_logic_vector(HAMAX - 1 downto 0) ;
end record ;
type AHB_SLV_OUT_TYPE is record
hready : std_logic ;
hrdata : slv_in_type;
end record ;
Une fois l'identité de l'interface mise à jour il suffit d'insérer
dans le premier processus les conditions de mise en marche du
transfert.
if ( cs='1') then address <= AHBI.haddr;
if ( AHBI.hwrite = '1' ) then write <= '1';
else read <= '1'; end if;
start<='0';
else write <= '0'; read <= '0'; end if;
B – Interface PCI – DCT 1D
En deuxième lieu nous avons réalisé la communication du bus
PCI externe du processeur LEON et une DCT. Le bus présente lui
aussi une largeur de donnée de 32 bits. Donc, par rapport à la
configuration il nous faut définir les signaux du bus PCI dans les
deux derniers types. Ensuite, il faut redéfinir le premier processus.
if ( cs='1') and (pci_frame_n = ’0’) and (pci_irdy_n =’0’)
then address <= pci_ad;
if (pci_cbe_n = "0011" ) then write <= '1';
else write <= '0'; end if;
if (pci_cbe_n = "0010" ) then read <= '1';
else read <= '0'; end if;
start<='0';
Cette application a permis de valider la possibilité de
généraliser l’interface de communication conçue pour pouvoir
l’utiliser pour différents bus.
C – Interface AHB – DCT 2D
Le modèle d’interface que nous avons modélisé permet la
communication avec d’autres accélérateurs matériels. Pour valider
cette approche nous avons utilisé cette même interface pour assurer
la communication du processeur LEON avec une DCT 2D. En fait,
la DCT 1D fait le calcul d’un vecteur de 8 pixels, donc de 64 bits.
La DCT 2D fait le calcul par bloc. Ce dernier, est une matrice de 8
x 8 pixels ce qui est équivlant à 512 bits. Donc la DCT 2D fait le
calcul de 512 bits et transmet comme sortie également 512 bits.
Ainsi, le fonctionnement du hardware est décrit comme suit.
Le processeur envoi les premiers 512 bits. Ce qui est équivalent à
16 mots de 32 bits. Une fois les 16 mots envoyés, la DCT 2D
reçoit le signal START pour commencer le calcul. La fin de calcul
est toujours assurée par une mise à zéro du signal BUSY.
Par rapport à la DCT 1D, la DCT 2D a une taille de bus de
donnée de 512 bits. Ce qui ce traduit dans le package seulement
par le changement du deuxième type.
type interface_type is array ( 0 to 15) of slv_in_type ;/* 16x32=512bits
Ce changement par rapport à l’interface avec la DCT 1D est
suffisant pour assurer la configuration de l’interface afin de
garantir la communication sur le bus AMBA AHB entre le
processeur LEON et la DCT 2D.
5
Conclusions et perspectives
Dans cet article nous proposons un modèle d’interface
permettant le raffinement de la communication entre le processeur
LEON et différents accélérateurs matériels. Cette approche permet
au concepteur de simplifier la phase d’intégration. Ce modèle est
suffisamment générique afin de pouvoir s’adapter aux différents
protocoles de communication.
L’approche proposé est efficace jusqu’à maintenant pour les
accélérateurs matériels à grain faible. Elle permet la
communication avec tout les IPs qui ont des signaux de contrôle de
type BUSY et START. L’élaboration de cette interface entre dans
le cadre de la conception de communication génériques avec les
IPs. Aussi, ce travail va être étendu pour assurer la communication
avec d’autres types d’IPs.
En effet, ce travail s’intègre dans un projet de conception de
système sur puce à base de processeur LEON. Ce dernier intègre
deux types de bus. Le bus AHB qui est un bus interne et le bus PCI
qui est un bus pour la communication externe. Toutefois, ce travail
est extensible pour d’autres processeurs comme le processeur
ARM qui utilise le même bus AMBA. Par ailleurs, il est valable
pour d’autres types comme le bus PCI. Cette approche peut être
extensible pour d’autres types de bus vue la description générique
qu’elle présente.
D’autres applications utilisant cette approche sont
actuellement en cours d’études. L’objectif est de dégager les points
clés de la conception d’interface de communication afin de
proposer une méthode générale et automatique de synthèse des
communications de système sur puce.
Références
[Abi98] : Abid M. , “Hardware/Software Co-design méthodology
for design of embedded system” Integrated Computer Aided
Engineering Journal, Vol. 5, pp69-83,1998.
[Air00] : Airiau R., Carer A., Casseau E., Martin E., O.Sentieys,
"Méthodologies de conception des composants virtuels pour les
applications de TDSI". Janvier 2000.
[Amb02] : AMBA Specification (Rev2.0), IHI0011A.pdf du site
http://www.arm.com/
[Bal97] : Balarin F., Chiodo M., Lavagno L., Passerone C.,
Sangiovanni-Vincentelli A., Sentovich E., Suziki K., Tabbra B.,
Hardware-Software Co-Design of embedded system : The Polis
Approach, Kluwer 1997.
[Gai00] : Gaisler Jiri “ LEON-1 Processor – First Evaluation
Results” http://www.gaisler.com
[Kje01] : Kjetil Svarstad, Gabriela Nicolescu, Ahmed A. Jerraya
"A model for describing communication between aggregate objects
in the specification and design of embedded systems", DATE 2001.
[Lin97] : Bill Lin, Vercauteren Steven, Hardware/Software
Communication and system Integration For Embedded
Archtectures.
[Lys02] : Lysecky Roman, Vahid Frank "Prefetching for improve
bus wrapper performance in cores" ACM-Transaction 2002
[Ver98] : Vercauteren S., ‘Hardware/Software co-design of
application-spécific Heteregeneous architectures’, IMEC, rapport
de these, Déc. 1998.
[Vsi02] : Virtual Socket Inetrface Alliance, http://www.vsi.org.
Téléchargement