[go: up one dir, main page]

Academia.eduAcademia.edu

PML: Uma Linguagem Para Modelagem e Avaliação Dos Processadores

2016

Domain Specific Modelling Languages (DSMLs) inherit concepts of model-driven engineering aiming at defining components for software and hardware related to a specific domain. In this context, DSMLs usually are targeted to support more than one level of abstraction, bringing support to better understand the semantics of these components as well as enabling validation about their main concepts and relationships. Regarding hardware components modelling, specific languages may provide support on processing architectures models generation, easing architectural explorations for different configurations which in turn, can be tested against design constraints. In this context, this work presents a Domain Specific Modelling Languages called DSML (Processor Modelling Language) aiming at helping designers to efficiently design processing architectures . The language is supported by a tool  for editing and generation of models at different abstraction levels in SystemC. Thus, the generated mode...

PML: UMA LINGUAGEM PARA MODELAGEM E AVALIAÇÃO DOS PROCESSADORES Max Miller Silveira, Márcio Kreutz, Ana Luisa Medeiros, Jonathan Wanderley max.silveira@ifrn.edu.br, kreutz@dimap.ufrn.br, analuisafdm@gmail.com, jonathan.wanderley@gmail.com Universidade Federal do Rio Grande do Norte/Brazil Abstract : Domain Specific Modelling Languages (DSMLs) inherit concepts of model-driven engineering aiming at defining components for software and hardware related to a specific domain. In this context, DSMLs usually are targeted to support more than one level of abstraction, bringing support to better understand the semantics of these components as well as enabling validation about their main concepts and relationships. Regarding hardware components modelling, specific languages may provide support on processing architectures models generation, easing architectural explorations for different configurations which in turn, can be tested against design constraints. In this context, this work presents a Domain Specific Modelling Languages called DSML (Processor Modelling Language) aiming at helping designers to efficiently design processing architectures . The language is supported by a tool for editing and generation of models at different abstraction levels in SystemC. Thus, the generated models can be simulated, allowing functionality and conformity with design constraints exploration. Keywords: EMF; Model-driven engineering; Metamodels; Processors. Resumo – Linguagens para Modelagem de Domínios Específicos fazem uso de preceitos da Engenharia Dirigida a Modelos para a definição de componentes de software e de hardware relacionados a um domínio específico. Nesse contexto, essas linguagens são concebidas para darem suporte a mais de um nível de abstração, além de trazer fácil conhecimento e validação a respeito da semântica e de possíveis relacionamentos entre estes. Em modelagem de componentes de hardware, podem oferecer suporte para geração de modelos simuláveis de arquiteturas de processadores, facilitando o projeto de diversas configurações a serem testadas frente às restrições de projeto. Nesse sentido, esse trabalho apresenta uma Linguagem de Domínio Específico chamada PML (Processor Modelling Language), para a especificação de modelos de arquiteturas de processadores, bem como uma ferramenta para edição e geração de descrições de processadores em diferentes níveis de abstração. Essas descrições são simuláveis podendo então serem avaliadas em relação às suas funcionalidades, restrições de projeto e desempenho de simulação. Palavras-chave: DSML; EMF; Engenharia dirigida a modelos; Meta-modelos; Arquitetura de processadores. I. INTRODUÇÃO A Engenharia dirigida por Modelos (Model Driven Engineering, MDE) [1] propõe que descrições de aplicações e arquiteturas ocorram através de linguagens com sintaxe gráfica e em diferentes níveis de abstração. Nessa abordagem, a semântica de componentes de software e de hardware, é expressa através de meta-modelos, os quais especificam o significado das funcionalidades do componente, bem como seus relacionamentos. Dessa forma, meta-modelos podem ser usados para a criação de linguagens que expressem o comportamento de seus componentes, através de modelos, por exemplo, um meta-modelo para processadores, deve conter cada componente que pode pertencer à uma arquitetura e seus relacionamentos. Nesse sentido, uma linguagem que implemente esse meta-modelo irá permitir a descrição de modelos de arquiteturas de processadores. As Linguagens de Modelagem de Domínio Específico (Domain-Specific Modelling Languages, DSMLs) [2] surgem como uma estratégia para utilização dos princípios da Engenharia dirigida por Modelos, no intuito de conceber e descrever componentes de software e de hardware através de uma semântica pertencente a um domínio específico do conhecimento. Adicionalmente, podem prever a representação de componentes em mais de um nível de abstração, bem como permitir uma fácil visualização de relações entre conceitos, entendimento e validação de funcionalidades modeladas. Existe a possibilidade de criar uma DSML através da criação de uma extensão de uma linguagem já existente, tal como a UML (Unified Modelling Language), ou por meio da utilização de ferramentas que manipulem meta-modelos formais. Todavia, alguns pontos sempre devem ser observados, tais como a semântica, as características, as abstrações e as relações entre os elementos que se pretende criar na linguagem [3]. Revista de Sistemas e Computação, Salvador, v. 5, n. 2, p. 104-115, jul./dez. 2015 http://www.revistas.unifacs.br/index.php/rsc Para que projetistas possam eficientemente conceber e configurar arquiteturas de processadores, os conceitos da engenharia dirigida por modelos podem ser aplicados na criação de uma DSML Nessa perspectiva, este artigo apresenta uma linguagem de modelagem de domínio específico para processadores, chamada PML (Processor Modelling Language), que se propõe a tornar eficiente a concepção e descrição de modelos de processadores em diferentes níveis de abstração. Além disso, pode oferecer suporte a geração dos modelos de processadores através de uma ferramenta para transformação de modelos, que foi desenvolvida. Essa ferramenta é capaz de gerar código em SystemC[4], compatível com os níveis de abstração TLM (Transaction Level Modelling) [5]. Este artigo está estruturado da seguinte forma. A Seção 2 descreve conceitos básicos relacionados à Arquitetura de Processadores, o processo de modelagem de componentes de hardware e linguagens de domínio específico. A Seção 3 apresenta a PML e seu meta-modelo. Na seção 4 são apresentados e discutidos resultados experimentais e na seção 5, as conclusões e trabalhos futuros. II. CONCEITOS BÁSICOS A. O processo de modelagem de componentes de hardware A realização da modelagem de processadores em um maior nível de abstração necessita de ciclos de vida mais curtos e uma exploração mais detalhada do projeto [6]. Nesse contexto, o projeto dos componentes de hardware possui as etapas de: (i) Projeto de Modelagem da Arquitetura, (ii) Projeto de Modelagem em nível de Transferência entre Registradores (RTL, Register Transfer Level), (iii) Projeto Físico. Nas etapas (i) e (ii) há a utilização de algum tipo de software, ao contrário da etapa (iii). Dessa forma, na etapa i é realizada a modelagem e simulação de modelos mais abstratos, e na etapa (ii) ocorrem o refinamento, modelagem e simulação para a realização da previsão do desempenho da arquitetura. Após a realização das etapas (i) e (ii), é realizada a especificação lógica, com base na arquitetura que foi modelada. Em seguida, as especificações lógicas são transformadas em circuitos, onde engenheiros de layout posicionam os circuitos na planta baixa do circuito integrado (etapa (iii)) [8]. A modelagem de um sistema de hardware ocorre na forma de um sistema reativo, ou seja, sistemas regidos basicamente por estímulos. Essa modelagem ocorre através de interações com o ambiente, onde o hardware é expresso através de um conjunto de processos que reagem de forma contínua a eventos do ambiente [9]. A reação ou reatividade pode ser representada, em diversas ferramentas que modelam hardware, por sinais e eventos (mudança nos valores do sinal). O modelo de incorporar a reatividade é conhecido como event-driven, que é suficiente para a descrição da maioria do hardware e sistemas, uma vez que, oferece suporte a vários níveis de abstrações [10]. A realização da modelagem abstrata de um processador e/ou qualquer outro componente de hardware permite a obtenção de dados iniciais sobre o desempenho, eficiência e arquitetura do componente. Nesse sentido, na modelagem de um sistema em chip (System on Chip, SoC), por exemplo observa-se a necessidade de ambientes de software que viabilizem uma exploração do espaço de projeto de forma rápida, isso pode ser alcançado por meio do provimento de recursos para a modelagem e a simulação dos componentes de um SoC. Dessa forma, com o uso de um SoC é possível a integração de sistemas digitais completos em um único chip, que pode conter a CPU, memória e outros componentes periféricos [11]. Nessa perspectiva, os projetistas utilizam modelos de hardware implementados em softwares de simulação com o intuito de aumentar a velocidade do desenvolvimento de SoC. As ferramentas de simulação permitem simular a execução de programas para a validação da correção e desempenho do que foi projetado. Nesse sentido, é possível que desenvolvedores de software utilizem esses modelos para desenvolvimento e testes de programa. Todavia, os modelos de simulação são mais lentos que o hardware real, porém eles são construídos e testados de forma rápida, o que resulta na redução do tempo necessário à obtenção de uma arquitetura de hardware otimizada. Dessa forma, no desenvolvimento dos modelos de hardware existem as Linguagens para Descrição de Hardware (Hardware Description Languages, HDLs) [12], e as Linguagens para Descrição de Arquiteturas (Architecture Description Languages, ADLs) [13], que em conjunto com software de simulação permitem a modelagem e simulação de processadores. As ADLs servem para especificar arquiteturas, e permitem a realização de simulações para identificar a melhor arquitetura para um conjunto de aplicações. Além disso, podem ser utilizadas na geração de protótipos de hardware, que contenham a especificação das características, tal como a velocidade do relógio. Em outras palavras, as ADLs permitem especificar, simular, avaliar e validar uma arquitetura antes de construí-la. Essas características resultam na economia de tempo e diminuem os custos para a criação de arquiteturas [13]. Já as HDLs são quaisquer linguagens que permitam realizar descrições ou projetos de circuitos eletrônicos, utilizando lógica digital. No processo de descrição é considerado o funcionamento, concepção, organização, e testes para verificar o circuito. Além disso, as HDLs 105 Revista de Sistemas e Computação, Salvador, v. 5, n. 2, p. 104-116, jul./dez. 2015 http://www.revistas.unifacs.br/index.php/rsc expressam a estrutura espacial, temporal e comportamental dos sistemas eletrônicos. A sintaxe e semântica das HDLs incluem anotações explícitas para expressar o paralelismo, sendo utilizadas para descrever especificações executáveis de alguma parte de hardware [14]. B. Linguagem de Modelagem de Domínio Específico As Linguagens de Modelagem de Domínio Específico (Domain-Specific Modelling Languages, DSML) [15] são utilizadas para a concepção e desenvolvimento de sistemas. Essas linguagens são formadas por sintaxe concreta, sintaxe abstrata, semântica, além de mapeamentos entre sintaxe abstrata e concreta e sintaxe abstrata e semântica. A sintaxe abstrata é utilizada para a expressão da semântica dos componentes de um domínio específico, bem como dos seus possíveis relacionamentos. Dentro do contexto da Engenharia dirigida a Modelos, geralmente sintaxes abstratas são representadas por meta-modelos. Já a sintaxe concreta serve para permitir a descrição dos componentes e de seus relacionamentos, que podem formar um ou mais modelos. Na PML a sintaxe abstrata é expressa utilizando-se o metamodelo ECORE [16] o qual por sua vez, pode ser considerado um metametamodelo para a UML. Nesse sentido, diagramas de classes UML servem para definir os conceitos da PML, os quais correspondem à componentes de arquitetura de processadores. A Fig. 1 abaixo ilustra alguns desses componentes. Note que as interfaces dos componentes precisam estar bem definidas para se possa compo-los (conectá-los) de modo a formar a estrutura do processador que se está modelando. Fig. 1. Modelo da Unidade de Controle descrito na PML A conexão entre os componentes é realizada através de diagramas de objetos UML, onde uma estrutura completa de processador pode ser definida. A Fig. 2 ilustra a parte operativa de um processador, é importante ressaltar que a figura está simplificada uma vez cada componente conectado ao processador (Processor) é formado por uma composição de outros componentes como entradas e saídas. 106 Revista de Sistemas e Computação, Salvador, v. 5, n. 2, p. 104-116, jul./dez. 2015 http://www.revistas.unifacs.br/index.php/rsc Fig. 2. Modelo simplificado do metamodelo do Processor descrito na PML A semântica de cada componente é dada pelo estereótipo e pela sua interface. Por exemplo, uma ULA será estereotipada por uma interface "ULA", a qual define suas operações e as portas de entrada e saída, conforme ilustrado na Fig. 3. Além das operações cada estereótipo define também, qual (is) operação (ões) cada evento associado à cada canal de entrada irá executar quando ativo. Essa semântica permite a simulação de circuitos digitais: assim que um valor é modificado em alguma porta de entrada, o circuito ao qual está conectado deve ter suas operações executadas (avaliadas) naquele tempo de simulação. Fig. 3. Metamodelo da ULA na PML Finalmente, a sintaxe concreta adotada para a PML se refere ao XML definido pelo editor do Eclipse. Nesse editor, cada componente pode ser instanciado e conectado aos demais, conforme exemplo da Fig. 4 que ilustra interface do editor e da Fig. 5 que demonstra o XML gerado pelo editor. A PML, além de permitir a especificação de arquiteturas de processadores utilizando o Editor Eclipse, gera uma descrição equivalente em SystemC. Como o simulador do SystemC possui a semântica de simulação compatível com o modelo orientado à eventos, a tradução ocorre de forma direta: cada componente e canal do XML é traduzido pelo seu equivalente na sintaxe concreta do SystemC; a semântica permanece mesma. Isso é realizado para que as descrições possam ser simuladas para fins de avaliação funcional e de desempenho. A transformação entre as sintaxes concretas PML(XML) para SystemC é realizada a através da ferramentas Acceleo em conjunto com um Wrapper Java que serve como uma extensão customizada da ferramenta. Antes de iniciar o processo de transformação se faz necessário descrever o modelo de processador na PML gerando assim um arquivo XML, conforme pode ser observado na Fig. 4 abaixo que é uma representação simplificada de parte de um processador MIPS, sendo nessa descrição composta por uma ULA (tag ulas, linha 03), um banco de registradores (tag registers com atributo length definido, linha 10) e o(s) barramento(s)( tag signalEvent, linha 12). 107 Revista de Sistemas e Computação, Salvador, v. 5, n. 2, p. 104-116, jul./dez. 2015 http://www.revistas.unifacs.br/index.php/rsc 1<?xml version="1.0" encoding="UTF-8"?> 2<pml:Processor xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:pml="http://pml/0.1" name="newMips"> 3 <ulas name="ulaMIPS"> 4 <behavirosULA name="execution"/> 5 <outputsULA name="r" type="Int" bit="32"/> 6 <inputsULA name="opA" type="Int" bit="32"/> 7 <operationsULA name="add"/> 8 <operationsULA name="sub"/> 9 </ulas> 10 <registers name="registerFile" length="32"> ... 11 </registers> 12<processorSignalEvents name="ir_mux_ula" signalIn="//@mux.1/@inmux" signalOut="//@registers.1/@outputRegister.1 //@decoders.0/@outDecoder.3"/> 13</pml:Processor> Fig. 4. Descrição de uma ULA na PML Após a descrição do modelo entra em ação a execução de uma classe Java que foi chamada de Generator (Fig. 5) a qual é gerada pela ferramenta Acceleo. É nesta classe que serão definidas, a localização física do modelo PML(XML) gerado pelo editor do Eclipse, quais templates Acceleo descritos serão usados no processo de tradução do modelo PML para um modelo equivalente em SystemC, o local onde ficará o código gerado pelo Acceleo e qual o template principal da linguagem. 1 package PMLGen.generator; 2 import br.ufrn.lasic.pml.PMLPackage; 3public class Generator extends AbstractAcceleoGenerator { 4 public static final String MODULE_FILE_NAME =""; 5 public static final String P_FILE_NAME =""; 6 public static final String F_NAME ="/pml"; 7 public static final String[] TEMPLATE_NAMES= {}; 8 private List<String> propertiesFiles = new ArrayList<String>(); 9 public static void main(String[] args) { 10 try { 11 URI modelURI= URI.createFileURI(P_FILE_NAME); 12 File folder = new File(F_NAME); 13 List<String> arguments=new ArrayList<String>(); 14 Generator generator = new Generator(modelURI, folder, arguments); 15 for (int i = 2; i < args.length; i++) { 16 generator.addPropertiesFile(args[i]); 17 } 18 generator.doGenerate(new BasicMonitor()); 19 } catch (IOException e) { 20 e.printStackTrace(); 21 } 22 } 23 } Fig. 5. Classe Generator Com a execução da classe Generator na linha 16 é iniciado a transformação do modelo PML para SystemC, onde cada elemento descrito na PML passa a ser analisado e traduzido para o equivalente em SystemC. Esse processo de equivalência é realizado no template Acceleo (Figuras 6 e 7) que interpreta cada elemento do XML e o processa conforma as regras descritas no Acceleo. 1[comment encoding = UTF-8 /] 2[module ula_h('/PML/model/pml.ecore')] 3[import PMLGen::generator::pmlutil /] 4[template public generateElement(c : ULA)] 5[file (c.name.concat('_untimed.h'), false, 'UTF-8')] 6 #ifndef [c.name.concat('_h')/] 7 #define [c.name.concat('_h')/] 8 #include "systemc.h" 9 SC_MODULE([c.name/]){ 10 typedef enum ULAOPERATION_{ 11 [for (p : Operation | c.operationsULA)] 12 ulaOperation_[p.name/], 13 [/for] 14 } 15[for (p : Input | c.inputsULA)] 16forIn(p.name,p.type.toString(),p.bit,p.lengt h)/] 17 [/for] 18 [for (p : Output | c.outputsULA)] 19 [forOut(p.name, : Behavior | c.behavirosULA)] 20 21 [/for] 22 SC_CTOR([c.name/]) { 23 [for (o : Behavior | c.behavirosULA)] 24 SC_METHOD([o.name.toLower()/]); 25 [/for] 26 [for (p : Input | c.inputsULA)] 27 [if(p.sensitive) ] 28 [forSensitive(p.name, p.length.abs())/] 29 [/if] 30 [/for] 31 } 32 }; 33 #endif 34 35 [/file] 36[/template] Fig. 6. Template parcial da ULA em Acceleo 1[comment encoding = UTF-8 /] 2[module processor_h('/PML/model/pml.ecore')] 3[import PMLGen::generator::pmlutil /] 4[template public generateElement(c : Processor)] 5[file (c.name.concat('_timed.h'), false, 'UTF-8')] 6 #ifndef [c.name.concat('_h')/] 7 #define [c.name.concat('_h')/] 8 #include "systemc.h" 9 10 SC_MODULE([c.name/]){ 11 12 sc_in_clk clock; 13 [processSignal(c) /] 14 [for (p : SignalEvent | c.processorSignalEvents)] 15 sc_signal< sc_ > > [p.name /]; 16 17 18 [/for] 19 [for (p : ULA | c.ulas)] 20 [p.name/] *[p.name.toLower()/]_; 21 [/for] 22 [for (p : Register | c.registers)] 23 [p.name/] *[p.name.toLower()/]_; 24 [/for] 25 } 26 }; 27 #endif 28[/file] 29[/template] Fig. 7. Template parcial do Processador em Acceleo O template Acceleo neste processo é o responsável por realizar a transformação do modelo 108 Revista de Sistemas e Computação, Salvador, v. 5, n. 2, p. 104-116, jul./dez. 2015 http://www.revistas.unifacs.br/index.php/rsc PML para o modelo SystemC. Entretanto, existem algumas limitações na ferramenta Acceleo, como por exemplo, a falta de laços com variáveis: a ferramenta somente permite laços do estilo foreach (laços que percorrem lista de objetos). Contudo, a ferramenta permite que códigos adicionais em Java (Wrappers) possam ser implementados e interligados ao template. Na linha 3 das figuras 6 e 7 pode ser observada a importação de arquivo chamado “pmlutil”, o qual contem as descrições das chamadas dos métodos Java implementados no Wrapper conforme a Fig. 8 abaixo. 1[comment encoding = MacRoman /] 2[module pmlutil('http://www.eclipse.org/acceleo/mtl/3. 0', 'http://www.eclipse.org/emf/2002/Ecore', '/PML/model/pml.ecore')/] 3[query public forIn(arg0 : String, arg1 : String, arg2 : Integer, arg3 : Integer) : String 4 = invoke('PMLGen.wrapper.ForSensitive', 'forIn(java.lang.String, java.lang.String, java.lang.Integer, java.lang.Integer)', Sequence{arg0, arg1, arg2, arg3}) /] 5[query public processSignal(arg0 : Processor) : String 6 = invoke('PMLGen.wrapper.ForSensitive', 'processSignal(br.ufrn.lasic.pml.Processor)', Sequence{arg0}) /] Fig. 8. Arquivo PMLUTIL Na linha 16 (forIn) da Fig. 6 e na linha 14 (c.processorSignalEvents) da Fig. 7 ocorre a chamada de métodos implementados no Wrapper Java que é responsável por realizar o processamento de elementos e regras não realizados pelo template Acceleo. O Wrapper Java é ilustrado na Fig. 9. 1 2 3 4 5 package PMLGen.wrapper; import br.ufrn.lasic.pml.*; public class ForSensitive { public String forIn(parametros) { //Processamento das entradas (Input) } 6 public String processSignal(Processor p){ //Processamentos dos signalEvents(Barramento) 7 } 8 } Fig. 9. Wrapper Java O processo de processamento pelo Wrapper se dá pela chamadas dos métodos da classe ForSensitive (Fig. 9, linha 4) que contém a implementação dos métodos forIn e processSignal. Estes métodos contém a implementação do processo de texto que o Acceleo não é capaz de realizar, retornando para o template o texto processado para ser acoplado na transformação do modelo. O método forIn tem por responsabilidade verificar e gerar, caso necessário, as entradas sensíveis à mudanças de estado: por exemplo, a partir da linha 16 da Fig. 6 é gerado o código equivalente à linha 17 da Fig. 10. Atém disso, o método processSignal tem como uma das funções realizar a conexão entre os elementos, então o código da linha 14 da Fig. 7 irá resultar no código da linha 18 e 24 da Fig. 11 que é a conexão entre os elementos ao barramento. Ao final do processo de execução dos templates será gerado um código SystemC (Fig. 10 e 11) equivalente ao que foi descrito na linguagem PML, de modo a ser possível simular e executar o código para analisar o desempenho do processador gerado. 1 #ifndef ULAMips_h 2 #define ULAMips_h 3 #include "systemc.h" 4 SC_MODULE(ULAMips){ 5 typedef enum ULAOPERATION_{ 6 ulaOperation_add, 7 ulaOperation_sub, 8 } 9 sc_in< sc_int<32> >inputULAMips; 10 sc_in< sc_int<32> >inputULAMipsB; 11 sc_out< sc_int<32> >resultULAMips; 12 sc_out<zeroULAMips; 13 sc_in< sc_int<5> >operationULAMips; 14 void execute(); 15 SC_CTOR(ULAMips) { 16 SC_THREAD(execute); 17 sensitive <<inputULAMips; 18 sensitive <<inputULAMipsB; 19 } 20 }; 21 #endif Fig. 10. Código da ULA gerado em SystemC 1 #ifndef newMips_h 2 #define newMips_h 3 #include "systemc.h" 4 5 SC_MODULE(newMips){ 6 AddIR *addir_; 7 ULAMips *ulamips_; 8 muxDecode *muxdecode_; 9 muxIR *muxir_; 10 muxULAMips *muxulamips_; 11 InstructionMemory *instructionmemory_; 12 DataMem *datamem_; 13 PC *pc_; 14 registerFile *registerfile_; 15 sc_in_clk clock; 16 sc_signal< type >ir_ula; 17 ULAMips->inputULAMips(ir_ula); 18 sc_signal< type >mux_ula; 19 ULAMips>inputULAMips(mux_ula); 20 sc_signal< type >dataMemUla; 21 ULAMips>resultULAMips(dataMemUla); 22 sc_signal< type >irdatamem; 23 ULAMips>resultULAMips(mux_ula); 24 SC_CTOR(newMips) { 25 } 26 }; 27 #endif Fig. 11. Código do processador contendo a ULA em SystemC III. LINGUAGEM PARA MODELAGEM DE PROCESSADORES A Linguagem de Modelagem de Processadores (PML) é uma DSML para processadores, que define a sintaxe abstrata, concreta e a semântica 109 Revista de Sistemas e Computação, Salvador, v. 5, n. 2, p. 104-116, jul./dez. 2015 http://www.revistas.unifacs.br/index.php/rsc para o domínio de processadores. Além disso, essa linguagem é capaz de gerar modelos compatíveis com ADLs e HDLs. Nesse sentido, a Fig. 4 representa um modelo do processador MIPS que a PML pode ser utilizada para descrever. Fig. 12. Arquitetura do Processador MIPS[23]. A Fig. 12 acima que representa a arquitetura de um processador MIPS qualquer pode ser modelada na PML através dos componentes que foram apresentados na Fig. 2 da seção II.B. Por exemplo a unidade lógica e aritmética deste deste processador para ser modelada utiliza-se da representação da ULA descrita na linguagem PML conforme ilustra a Fig. 11 que representa a parte operativa da ULA e a Fig. 12 que representa o barramento dos componentes. O modelo da ULA foi ilustrado na Fig. 4 onde as linhas 03 a 33 representa os componentes ULA e registradores e as linhas 34 a 41 representa o barramento que a ULA e os registradores estão conectados. ฀ Multiplexador ฀ Demultiplexador ฀ Decodificador ฀ Registrador ฀ Unidade Lógica e Aritmética ฀ Memória ฀ Unidade de Controle A sintaxe abstrata e concreta da PML foi definida através da meta-linguagem EMF (Eclipse Modeling Framework) [16], onde os elementos da sintaxe concreta são a representação de cada componente, tanto na forma gráfica como textual. A sintaxe abstrata são as restrições, relacionamentos e validações realizadas entre os componentes. No contexto de uma ULA, as descrições das entidades pertencentes à PML Input (Entrada de um componente), Output (Saída de um componente) e Seletor (Seleciona um entrada ou saída de acordo com o componente), possuem os seguintes atributos: ฀ Name: representa o nome da entidade; Fig. 13. Metamodelo do Barramento de conexão na PML A sintaxe da PML é baseada nos conceitos apresentados na seção II.A, que define os conceitos relacionados à processadores. Nesse sentido, os processadores são compostos basicamente pelos seguintes componentes: ฀ Type e TypeBehavior : representa o tipo de dado relacionado à entidade; ฀ Sensitive: elemento utilizado para representar se uma entidade pode ser sensível a um evento; ฀ Length: representa o tamanho da entidade em quantidade, por exemplo, uma entidade que representa uma entrada de dados, a propriedade 110 Revista de Sistemas e Computação, Salvador, v. 5, n. 2, p. 104-116, jul./dez. 2015 http://www.revistas.unifacs.br/index.php/rsc length sendo preenchida com tamanho cinco, significa que terá cinco entradas com aquelas características; ฀ Bits: representa a quantidade de bits que o componente pode conter. Ainda neste contexto a entidade Operation que representa as operações que a ULA irá executar, é importante ressaltar que no caso das operações da ULA após o código gerado é necessário colocar a lógica de programação de cada operação. Já a entidade Behavior representa os métodos que os componentes executam de acordo com os eventos que ocorrem. Além disso, possui os atributos Name e Type. As diferenças entre os dois modelos gerados são descritas com base na granularidade dos canais de comunicação e da passagem do tempo. A comunicação no modelo Approximate Time é realizada através da implementação de canais de comunicação abstratos, os quais definem eventos com a semântica estabelecendo a execução de um conjunto de operações. Esse conjunto de operações pode representar a execução de vários ciclos de relógio. Já no modelo Cycle Accurate a comunicação é realizada através de sinais (sc_signal), que representam fios, cujos eventos internos definem operações que ocorrem à cada ciclo de relógio. A Fig. 14 representa a diferença entre os modelos. Na PML a semântica é definida através dos modelos de computação, que definem a semântica para o domínio de processadores, mais especificamente os modelos de eventos e os modelos de máquina de estados finitos. No modelo de eventos a semântica foi representada através dos seguintes elementos: Propriedade sensitive nas entradas de cada componente (representado pelas entidades Input e Seletor), o que indica que ao ocorrer um evento em sua entrada poderá iniciar o processamento do dado no componente, ativando as execuções descritas nos Behavior do componente. Interligação dos componentes através da entidade SignalEvent, que é a responsável por representar a interligação entre os componentes através de um canal de comunicação qualquer (ver Fig. 13). O padrão TLM 2.0 não contempla o modelo com precisão de ciclo (Cycle Accurate), apesar de possuir algumas ferramentas que possibilitem o uso desta versão OSCI 2009[5]. Outro aspecto a se considerar é que no modelo de tempo aproximado (Approximate Time) os canais de comunicação são mais abstratos, consequentemente disparando um número maior de operações à cada evento. Os modelos Cycle Accurate, por sua vez, executam todas as operações a cada ciclo de relógio, tornando a simulação potencialmente mais precisa e com um tempo de execução maior. Os modelos simuláveis gerados nas arquiteturas modeladas usando a PML são compatíveis com os níveis TLM de tempo aproximado (Approximate Time) e precisão de ciclo (Cycle Accurate): ฀ Modelo compatível com o Approximate Time: a compatibilidade ocorre através do uso de portas e interfaces de comunicação, com uma contagem de tempo relativa e aproximada; ฀ Modelo compatível com o Cycle Accurate: modelo bem próximo do nível RTL, com uso de ciclos de clock como elemento que gerencia os eventos que ocorrem, a comunicação é feita utilizando sinais, declarados como "sc_signal". Fig. 14. Diferença entre os modelos. De acordo com a Fig. 13, é possível observar que no modelo Cycle Accurate as portas de comunicação entre os componentes são fios (sinais), enquanto que no modelo Approximate Time, canais abstratos. 01SC_MODULE(Component_AT){//Approximate Time 02 sc_in <bus_channel<int>> inport; entrada 03 04 int x; 05 06 void execution_method_TLM(){ 07 x = inport.read(); 08 // operations at method level 09 } 10 11 Component_AT() { // constructor method 12 SC_METHOD(execution_method_TLM); 13 sensitive<< bus_channel.get_default_event(); 14 } 15 } 16 SC_MODULE(Component_CA){//Cycle Accurate 17 18 sc_in_clk clk; 19 sc_in <sc_uint<32>>inport;//porta 32 bits 20 21 int x[32]; 22 23 void execution_method_CA(){ 24 for(int r=0; r < 32; r++) { 25 if(clk == 1) { 26 x[r] = inport.read(r); 27 // operations at cycle level 28 } 29 } 30 } 31 32 Component_CA() { // constructor method 33 SC_METHOD(execution_method_CA); 34 sensitive << clk; 35 } 36 } Fig. 15. Pseudocódigo Approximate Time e Cycle Accurate 111 Revista de Sistemas e Computação, Salvador, v. 5, n. 2, p. 104-116, jul./dez. 2015 http://www.revistas.unifacs.br/index.php/rsc A Fig. 15 mostra exemplo de pseudocódigos para os modelos Approximate Time e Cycle Accurate. As diferenças entre os níveis de abstração são mostrados nos códigos: linhas 2 e 7, para o modelo Approximate Time, e linha 18, 19 e 21 para o modelo Cycle Accurate, correspondentes aos componentes “Component_AT” (nível de abstração TLM) e “Component_CA” (nível de abstração Cycle Accurate). Nesse sentido, o que diferencia as descrições nesses dois níveis de abstração é a granularidade das operações e dos canais de comunicação. Quanto às operações, pode-se verificar nas linhas 18 e 25 da Fig. 15, que no nível Cycle Accurate as operações são executadas à cada novo pulso de relógio. Dessa forma, se uma operação necessita de 50 ciclos de relógio para executar, todos esses 50 pulsos serão simulados; na linha 27 essa operação é chamada de operação em nível de ciclo (cycle level). No nível TLM por sua vez, cada operação - independente de numero de ciclos que necessita para executar - pode ser executada apenas uma vez, através da lógica do método que a implementa; na linha 8, essa operação é chamada de operação em nível de método (method level). No que se refere aos canais de comunicação, a granularidade se manifesta na semântica dos eventos atrelados à estes. Um canal TLM estabelece eventos que disparam a execução de métodos de granularidade variada. Por exemplo, na linha 2 uma porta de entrada é conectada à um canal de comunicação chamado "bus_channel", cujo evento dispara a operação do método "execution_method_TLM" à cada vez que o evento padrão ("bus_channel.get_default_event()") do canal "bus_channel" é ativado (linhas 12 e 13). Já no nível Cycle Accurate, a execução do método “execution_method_CA” ocorre à cada ciclo de relógio (linhas 33 e 34). IV. RESULTADOS A funcionalidade da PML foi avaliada através da modelagem de três processadores, e geração de código SystemC simulável. Os três processadores modelados foram: 1) 2) 3) MIPS sem pipeline (ver Fig. 12; seção III); MIPS com pipeline (Fig. 16); e ARM DLX (Fig. 17). 4) Fig. 16. Processador MIPS Com Pipeline 112 Revista de Sistemas e Computação, Salvador, v. 5, n. 2, p. 104-116, jul./dez. 2015 http://www.revistas.unifacs.br/index.php/rsc Fig. 17. Processador ARM DLX No que se refere às descrições em precisão aproximada (Approximate Time), foram realizadas duas implementações: (i) todos os componentes internos da micro-arquitetura do processador foram modeladas como um módulo SystemC (SC_MODULE) exclusivo, e; (ii) alguns componentes como multiplexadores, por exemplo, foram modelados por lógica de programação (incorporados dentro de outros módulos). Esse segundo tipo de modelo resulta em descrições um pouco mais abstratas, uma vez que os eventos desses componentes não precisam ser gerenciados e escalonados pelo mecanismo de simulação. Os modelos foram chamados de M1, M2, e M3, e representam: estes modelos. Para fins de teste e para verificar que os modelos de processadores gerados são completamente funcionais, foram simulados todos os tipos de instrução: de controle (laços), de acesso à memória e lógico/aritméticas. Foi simulado um laço (loop), onde à cada passada é realizada um acesso à memória e a execução de uma operação aritmética sobre registradores. Ao final do laço, é realizada uma escrita na memória. • M1: representa o modelo Approximate Time, abstraindo alguns componentes e utilizando canais de comunicação abstratos; • M2: representa o modelo Approximate Time, implementando todos os componentes e canais de comunicação abstratos; • M3: o modelo Cycle Accurate. Quanto ao tempo de simulação, verifica-se claramente a vantagem que pode ser obtida quando modelos mais abstratos são simulados. Percentualmente, modelos M1 simulam em média 300% mais rapidamente do que M3. Esses tempos não são significativos em termos absolutos, porém é verificado que a proporção será mantida em execuções com número maior de instruções, o que comprova a eficiência do nível de abstração empregado na simulação das descrições. Em sistemas complexos, onde um grande número de instruções são executadas, pode-se obter significativa redução do tempo necessário para a exploração de diferentes modelos de arquiteturas. Adicionalmente, foi realizada a implementação da lógica referente ao algoritmo para a execução das operações internas dos componentes; para a geração do modelo completo de forma automática, seria necessária também, a geração da Máquina de Estados Finitos da Parte de Controle do processador, bem como das micro-instruções para cada instrução. Nesse sentido, a geração de códigofonte neste trabalho é focada na estrutura da arquitetura do processador, seus componentes e interconexões. Para a obtenção dos resultados, simulações da execução de instruções foram realizadas nos modelos. As instruções dos programas simulados foram manualmente colocadas em uma descrição de memória ROM, uma vez que até o presente momento não foram utilizados cross-compilers para A Fig. 18 mostra os resultados sobre o tempo de simulação para os 3 processadores, enquanto que a Fig. 19 mostra os ciclos de relógio (tempos de simulação) necessários para cada processador executar as instruções simuladas. Quanto ao número de ciclos necessários à execução das instruções, percebe-se que os mesmos estão de acordo com o nível de abstração utilizado. Nos modelos M3 é realizada a simulação com precisão de ciclo, ou seja, ali estão presentes todos os ciclos de relógio necessários à execução de cada micro-instrução. Já nos modelos M1 e M2, cada "ciclo" na verdade, corresponde à 1 tempo de simulação, o qual por sua vez, executa operações que podem ter mais de um ciclo real de execução. Por isso, menos tempos de simulação são necessários para completar a execução das 113 Revista de Sistemas e Computação, Salvador, v. 5, n. 2, p. 104-116, jul./dez. 2015 http://www.revistas.unifacs.br/index.php/rsc instruções. Finamente, percebe-se que a descrição do processador MIPS com pipeline consome mais tempo do que a versão sem pipeline. Isso se deve aos tempos para acesso à memória e para a execução das instruções de controle que provocam a inserção de bolhas no pipeline. Fig. 18. Resultados do tempo de simulação. Fig. 19. Resultados da quantidade de ciclos de execução. As implementações realizadas revelam uma característica interessante da PML, que é possibilidade de reutilização da descrição de componentes para a geração de diferentes modelos de um mesmo processador. Essa possibilidade é altamente desejável no projeto de arquiteturas, uma vez que, permite a exploração de diferentes processadores em um tempo reduzido. Isso ocorre por que processadores compartilham elementos em comum, como por exemplo, multiplexadores, Unidade Lógico-Aritmética, etc. Dessa forma, o uso da PML pode ser um facilitador, no que diz respeito à descrição e geração de modelos de processadores. A Tabela I compara as características da PML com outras linguagens/ferramentas que também permitem a modelagem de processadores. TABELA I. - C OMPARAÇÃO DA PML COM OUTRAS LINGUAGENS/FERRAMENTAS DSML Modela Processadores Modela outros tipos de hardware Modela o pipeline Geração de código Transformação para outros modelos PML Sim Sim Não Parcial Sim Sim SystemC Não Sim Sim Sim Não Não ArchC Não Sim Sim Sim Não Não VHDL Não Sim Sim Sim Não Não LISA Não Sim Sim Sim Não Não nML Não Sim Sim Sim Não Não 114 Revista de Sistemas e Computação, Salvador, v. 5, n. 2, p. 104-116, jul./dez. 2015 http://www.revistas.unifacs.br/index.php/rsc De acordo com a Tabela I, a PML possui a vantagem de permitir a transformação entre modelos. Além disso, pode ocorrer a criação de novos templates de transformação de modelos, os quais podem ser usados na definição de modelos para outras linguagens tais como VHDL, Verilog, entre outras, ou que se enquadrem na sintaxe e semântica da PML. Nesse sentido, a PML permite criar não somente modelos em outras linguagens, mas modelos em diferentes níveis de abstração, uma vez que é o template de transformação que determina o grau de abstração do modelo transformado. Dessa forma, a PML é capaz de gerar não somente modelos compatíveis com TLM, bem como modelos em níveis com precisão de ciclo. Além disso, a PML permite a geração de modelos em ADL e HDL, bastando ser definido o template adequado. Com o objetivo de expor o processo de geração dos modelos e a importância dos templates no processo, a Fig. 21 ilustra a relação dos templates com todos os elementos da linguagem PML, gerados por meio do uso da ferramenta proposta neste trabalho. Nesse contexto, a Fig. 20 mostra a relação de todos os componentes que compõem o processo de geração de modelos de processadores a partir da PML, onde a linguagem oferece suporte a descrição de vários modelos de processadores. Além disso, através do Acceleo juntamente com os Wrappers Java, são gerados modelos representados em código, por exemplo, SystemC. É importante ressaltar que são os templates Acceleo que são os responsáveis por definir a linguagem em que o modelo será gerado. Os resultados apresentados mostram que a utilização da PML facilita o processo de modelagem de processadores e redução do tempo de modelagem. Adicionalmente, torna possível a reutilização de parte dos códigos de descrição, de forma que alterações nos modelos sejam facilmente realizadas. Além disso, a PML se encontra numa etapa onde o foco é a modelagem estrutural da arquitetura: componentes e suas interconexões. Nesse contexto, devido a PML se encontrar na etapa de concepção da arquitetura, é possível identificar eficazmente arquiteturas e modelos de processadores adequados para cada classe de aplicações alvo. V. CONCLUSÕES E TRABALHOS FUTUROS A PML é uma linguagem de modelagem que facilita o processo modelagem e simulação de processadores. Além disso, permite o reuso de parte das modelagens, o que resulta na diminuição no tempo para descrição, modelagem e simulação de processadores. Adicionalmente, a PML pode permitir que a partir de um modelo descrito na linguagem, ocorra a geração para outros modelos simuláveis. Além disso, a PML permite a descrição de processadores com uma grande quantidade de elementos, porém, por usar uma sintaxe textual, encontra limitações para a visualização da arquitetura, principalmente da estrutura dos componentes arquiteturais modelados e suas interconexões. Como trabalho futuro, essa limitação será contornada com a integração dos elementos de modelagem da PML com linguagem baseada sintaxe gráfica, como UML. Por fim, este artigo trouxe muitas informações relacionadas ao projeto de hardware baseado nos preceitos da Engenharia Baseada em Modelos, bem como a forma que estes podem ser utilizados para a modelagem de um domínio específico. Características desejadas em projeto de processadores, como geração automática de código e descrições em diferentes níveis de abstração também foram discutidas. Fig. 20. Processo de geração da PML - inclusão de novos templates. De maneira geral, verifica-se que existem diversas formas para modelagem de componentes de hardware através de meta-modelos ou de linguagens definidas para este propósito. Em relação às linguagens para descrição de hardware, as mais utilizadas são VHDL e Verilog. No entanto, quando o objeto a ser modelado possui natureza complexa, como processadores, o uso dessas linguagens requer que diversos detalhes da arquitetura sejam considerados na descrição, resultando em um tempo maior de projeto e possibilidade de aumento de erros. A abordagem do SystemC permite que, através do uso de uma API C++, arquiteturas sejam modeladas em níveis de abstração mais altos, através do padrão TLM. A PML permite criar modelos de processadores em um nível de abstração compatível com o TLM. Além disso, foi averiguado que a PML é viável para descrever processadores, bem como utilizar transformação de modelos para SystemC em diferentes níveis de abstração. Essas características possibilitam a criação de diferentes modelos e tipos de processadores, compatíveis com o padrão TLM. Como trabalhos futuros pode-se citar a expansão da PML para permitir a criação de redes de processadores, gerando sistemas multiprocessados completos, os quais incorporam um conjunto de processadores, arquiteturas de memórias e de comunicação. Além disso, será realizada a integração da PML com o perfil UMLMARTE (Modeling and Analysis of Realtime Embedded Systems)[18], visando compatibilizar a linguagem com diversas ferramentas para projeto de sistemas embarcados e de tempo-real. REFERENCES 1. 2. 3. 4. 5. 6. 7. D.C. Schmidt, "Guest Editor's Introduction: Model-Driven Engineering," Computer , vol.39, no.2, Feb. 2006, pp.25,31. Doi: 10.1109/MC.2006.58 E. Jackson and J. Sztipanovits, Formalizing the structural semantics of domain-specific modeling languages. Software & Systems Modeling, 8(4), 2009, pp. 451-478.. Doi: 10.1007/s10270-008-0105-0 K. Chen , J. Sztipanovits and S. Neema. "Toward a semantic anchoring infrastructure for domain-specific modeling languages." Proceedings of the 5th ACM international conference on Embedded software. ACM, 2005. S. Liao, G. Martin, S. Swan and T. Grötker, System Design with SystemC™. Ed.. Springer Science & Business Media, 2002. J. Aynsley, Osci tlm-2.0 language reference manual. Open SystemC Initiative, v. 24, 2009. A. S. Tanenbaum and W. L. Zucchi, Organização estruturada de computadores. Pearson Prentice Hall, 2009. W. Stallings, Arquitetura e organização de computadores: projeto para o desempenho. Prentice-Hall, 2009. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. S. S. Mukherjee, et al. "Performance simulation tools." Computer. 2002, pp. 38-39. G. Berry, "Real time programming: Special purpose or general purpose languages." IFIP, 1989, San Francisco. S. Liao, S. Tjiang, and R. Gupta. "An efficient implementation of reactivity for modeling hardware in the Scenic design environment. Proceedings of the 34th annual Design Automation Conference. ACM, 1997. T. S. Kumar, R. Govindarajan, and C. P. Ravikumar, Onchip memory architecture exploration framework for DSP processor-based embedded system on chip. ACM Transactions on Embedded Computing Systems (TECS), 11(1), 5, 2012. P. Viana, et al. "Exploring memory hierarchy with ArchC." Computer Architecture and High Performance Computing, 2003. Proceedings. 15th Symposium on. IEEE, 2003. P. Mishra, A. Shrivastava, and N. Dutt. "Architecture description language (ADL)-driven software toolkit generation for architectural exploration of programmable SOCs." ACM Transactions on Design Automation of Electronic Systems (TODAES). Vol. 11. No. 3. ACM, 2004. K. J. Lieberherr, "Towards a standard hardware description language." Proceedings of the 21st Design Automation Conference. IEEE Press, 1984. V. A. Deursen, P. Klint, and J. Visser, Domain-Specific Languages: An Annotated Bibliography. Sigplan Notices, 35(6), 2010, pp. 26-36. D. Steinberg, et al. EMF: eclipse modeling framework. Pearson Education, 2008. V. P. Rubio and J. Cook, A FPGA Implementation of a MIPS RISC Processor for Computer Architecture Education. Diss. MSc. Thesis, New Mexico State University, Las Cruses, New Mexico, America, 2004. M. Faugère, et al, "Marte: Also an uml profile for modeling aadl applications." Engineering Complex Computer Systems, 2007. 12th IEEE International Conference on. IEEE, 2007 115 Revista de Sistemas e Computação, Salvador, v. 5, n. 2, p. 104-115, jul./dez. 2015 http://www.revistas.unifacs.br/index.php/rsc