Sei sulla pagina 1di 49

RAFAEL SCHEFFER VARGAS

SISTEMAS EMBARCADOS: ACOPLAMENTO DO SOFT-CORE PLASMA AO BARRAMENTO OPB DE UM POWERPC 405

Monografia apresentada ao Curso de Cincias da Computao como requisito parcial obteno do grau de Bacharel em Cincias da Computao. Universidade Federal de Santa Catarina. Orientador: Prof. Dr. Antnio Augusto Frhlich.

FLORIANPOLIS, 2007

RAFAEL SCHEFFER VARGAS

SISTEMAS EMBARCADOS: ACOPLAMENTO DO SOFT-CORE PLASMA AO BARRAMENTO OPB DE UM POWERPC 405

Esta monografia foi julgada adequada obteno do grau de Bacharel em Cincias da Computao e aprovada em sua forma final pelo Curso de Cincias da Computao da Universidade Federal de Santa Catarina. Florianpolis SC, fevereiro de 2007.

______________________________________________________ Prof. Dr. Antnio Augusto Frhlich. Universidade Federal de Santa Catarina

______________________________________________________ BsC. Hugo Marcondes Universidade Federal de Santa Catarina

______________________________________________________ MsC. Rafael Luiz Cancian Universidade Federal de Santa Catarina

Aos meus pais.

AGRADECIMENTOS

Agradeo primeiramente aos meus pais por confiarem em mim, no meu talento e que sempre me incentivaram quando fraquejei e por me mandar dormir cedo quando eu tinha aula no dia seguinte. Aos amigos do Lisha, pelas dicas e conselhos que muito teis foram ao longo deste trabalho. Aos Khompanheiros, pela compreenso, experincia conhecimento que compartilharam comigo. minha namorada por compreender e aceitar minhas ausncias e nervosismos, e pela grande ajuda na reviso bibliogrfica deste trabalho. Ao meu orientador, pelas idias que deram rumo a este trabalho, e por compreender meus atrasos. No posso esquecer de agradecer tambm ao Google, por ter todas as respostas.

Sbio o homem que inventou a cerveja.


Plato

RESUMO

O crescente avano das Field Programmable Gate Arrays (FPGAs) tornou possvel a criao e utilizao de soft-cores, processadores projetados e implementados em linguagem de descrio de hardware. Porm, a comunicao destes dispositivos com outros componentes reusveis de hardware (Intellectual Propertys, IPs) limitada quando este no possui uma conexo com nenhum barramento padronizado. O Plasma um soft-core de cdigo aberto, porm, no possui conexo com nenhum barramento, impossibilitando seu uso como componente num sistema-em-chip (SoC). Este trabalho traz grandes vantagens a projetistas de sistemas embarcados, tendo realizado modificaes no cdigo do soft-core plasma, de forma a transform-lo num componente reutilizvel de hardware, permitindo que o mesmo seja facilmente conectado a um barramento OPB um padro de barramento em chip da famlia IBM CoreConnect, para compor um SoC. Os resultados da integrao foram validados tanto por simulao quanto pela implementao fsica do sistema-em-chip numa FPGA, e demonstram a aplicabilidade deste trabalho. Palavras-chave: Barramento; System-on-a-Chip; CoreConnect; FPGA; VHDL.

ABSTRACT

With the constant advance of Field Programmable Game Array (FPGAs) became possible to create and use soft-cores, hardware description language (HDL) designed and implemented processors. However, when these processors doesnt have a connection to a standardized bus their communication with other reusable hardware blocks (Intellectual Property, IPs) become very restricted. Plasma is an open-source soft-core, however, it doesnt have any connection with a bus. Blocking its use as a component in a System-on-Chip (SoC). This work brings great advantages to embedded system designers by making modifications in the Plasma soft-core code, being able to make a reusable hardware component from it, allowing the softcore the be easily connected to an OPB bus, a standard on-chip bus from the IBM CoreConnect Bus Family to build an SoC. The integration results were validated by simulation and by the System-on-chip physical implementation on FPGA, showing this work applicability. Keywords: Bus; System-on-a-Chip; CoreConnect; FPGA; VHDL.

Sumrio

LISTA DE ABREVIATURAS................................................................................................................................. 9 LISTA DE FIGURAS............................................................................................................................................. 10 LISTA DE TABELAS ............................................................................................................................................ 11 1 INTRODUO............................................................................................................................................. 12 1.1 1.2 1.2.1 1.2.2 2 2.1 2.2 2.3 2.4 2.5 2.5.1 2.5.2 2.6 2.6.1 3 3.1 3.1.1 3.1.2 3.1.3 3.2 3.2.1 3.2.2 3.3 3.3.1 3.3.2 4 5 4.1 MOTIVAO ........................................................................................................................................... 13 OBJETIVOS ............................................................................................................................................. 14 Objetivo geral ................................................................................................................................... 14 Objetivos especficos ........................................................................................................................ 14 SISTEMAS EMBARCADOS ........................................................................................................................ 16 FPGA ..................................................................................................................................................... 17 VHDL .................................................................................................................................................... 17 POWERPC 405 ....................................................................................................................................... 18 PLASMA .................................................................................................................................................. 20 Funcionamento do microprocessador ............................................................................................. 20 Perifricos ........................................................................................................................................ 23 O BARRAMENTO OPB ............................................................................................................................ 26 Operaes no barramento................................................................................................................ 27 ESCOLHA DOS COMPONENTES ................................................................................................................ 31 Circuito integrado (FPGA) .............................................................................................................. 32 Dispositivo de comunicao com a FPGA ...................................................................................... 32 Software para interpretao da linguagem e sntese do hardware ................................................ 32 MODIFICAO DO PLASMA .................................................................................................................... 33 Acesso memria interna ................................................................................................................ 33 Interface de memria externa .......................................................................................................... 34 LGICA DE ACOPLAMENTO AO BARRAMENTO OPB .............................................................................. 35 Implementao ................................................................................................................................. 37 Validao.......................................................................................................................................... 40 TRABALHOS FUTUROS ........................................................................................................................... 43

FUNDAMENTAO TERICA............................................................................................................... 16

PROJETO DO IP.......................................................................................................................................... 30

CONCLUSO ............................................................................................................................................... 42 BIBLIOGRAFIA........................................................................................................................................... 44

ANEXOS .................................................................................................................................................................. 45

LISTA DE ABREVIATURAS

ALU: Arithmetic and Logic Unit ASIC: Application Specific Integrated Circuit BRAM: Block Random Access Memory CPU: Central Processing Unit DRAM: Dynamic Random Access Memory EDK: Embedded Development Kit FPGA: Field Programmable Gate Array GPIO: General Purpose Input Output HDL: Hardware Description Language IP: Intellectual Property IRQ: Interrupt Request LED: Light Emitting Diode OPB: On-chip Periferal Bus PC: Program Counter PPC: PowerPC RAM: Random Access Memory RISC: Reduced Instruction Set Computer SoC: System-on-a-Chip UART: Universal Asynchronous Receiver-Transmitter VHDL: VHSIC Hardware Description Language VHSIC: Very-High-Speed Integrated Circuit

LISTA DE FIGURAS

Figura 1: Diagrama de blocos do Plasma (Rhoads, 2007) .......................................................22 Figura 2: Exemplo de programa em C, efetuando loopback na UART com polling................24 Figura 3: Exemplo de programa em C, efetuando loopback na UART com interrupo.........25 Figura 4: Transferncia de dados no barramento OPB (IBM,2001).........................................28 Figura 5: Diagrama de blocos do SoC ......................................................................................30 Figura 6: Interface do componente de memria do Plasma......................................................34 Figura 7: Implementao do novo mapa de memria do Plasma .............................................36 Figura 8: Diagrama de blocos da primeira abordagem ao IP....................................................37 Figura 9: Diagrama de blocos da segunda abordagem ao IP ....................................................38 Figura 10: Interface do IP que acopla o Plasma ao barramento OPB.......................................40 Figura 11: Programa para validao por simulao do IP ........................................................41

LISTA DE TABELAS

Tabela 1: Mapa de memria original do Plasma ......................................................................23 Tabela 2: Descrio dos bits da IRQ ........................................................................................25 Tabela 3: Principais sinais do OPB (IBM, 2001) .....................................................................27 Tabela 4: Mapa modificado de memria do Plasma.................................................................35 Tabela 5: Mapeamento das interfaces do Plasma no barramento .............................................39

12

1 Introduo
Os sistemas embarcados, cada vez mais comuns na sociedade, esto ficando complexos e poderosos graas aos avanos da tecnologia. Estes avanos possibilitam que estes sistemas possuam uma maior capacidade de processamento, memria e adaptao a diferentes necessidades, podendo ser reconfigurados de acordo com a aplicao a qual se destinam. O aumento desta flexibilidade e complexidade impacta diretamente no esforo de desenvolvimento destes sistemas. Uma das tendncias tecnolgicas o desenvolvimento de todo sistema em um nico chip. Os SoCs (do ingls, System-on-a-Chip), como so chamados, consistem no hardware e tambm no software que o compe. Em sua maioria, SoCs so criados a partir de componentes de hardware pr-validados, agrupados com a utilizao de ferramentas CAD, e de drivers que controlam sua operao, desenvolvidos em um ambiente de desenvolvimento de software. A chave no projeto de SoCs a simulao, por reduzir os custos totais de desenvolvimento, e feita utilizando ferramentas de software. Utilizando essas ferramentas pode-se chegar validao comportamental do sistema sem a necessidade de implementar o mesmo, reduzindo assim, o tempo de projeto e testes, e conseqentemente, o custo desse sistema. Posteriormente, deve-se validar o sistema sintetizando-o em FPGAs (do ingls, Field Programmable Gate Arrays), onde possvel comprovar seu funcionamento numa plataforma fsica. SoCs so composies de componentes reutilizveis de hardware e software. Para a definio dos componentes de hardware, geralmente utilizam-se linguagens de descrio de Hardware (HDL, do ingls Hardware Description Language). As mais comuns so VHDL e Verilog, e este trabalho utilizar VHDL, por ser a linguagem no qual o processador soft-core escolhido foi implementado. Processadores soft-core so processadores desenvolvidos utilizando linguagens de descrio de hardware para que sejam sintetizados em FPGA. A flexibilidade das FPGAs permite que o projetista do processador possa adapt-lo aos requisitos da aplicao. Para permitir a comunicao entre vrios componentes de um SoC, utilizam-se barramentos. Barramentos so conjuntos de fios interligando os componentes do sistema promovendo a troca de dados. Alguns barramentos so comumente utilizados na construo de SoCs, como o OPB [3] e o PLB, da arquitetura CoreConnect da IBM [4], e o Wishbone [11], de iniciativa de cdigo aberto. Este trabalho ir utilizar um processador soft-core de cdigo aberto, o Plasma (arquitetura MIPS I), e ir desenvolver a lgica digital necessria para acopla-lo, como mestre e como

13 escravo, ao barramento OPB, cuja especificao tambm livre. Assim, permite-se desenvolver SoCs usando o Plasma como um simples componente reutilizvel de hardware, capaz de ser facilmente integrado ao projeto e de comunicar-se com quaisquer outros dispositivos que sejam tambm compatveis com este barramento, como memrias, outros processadores e dispositivos de entrada e sada.

1.1 Motivao
Os sistemas embarcados tm importncia tecnolgica, econmica e social. So utilizados em controladores de vo, telefones, equipamentos de redes de computadores, impressoras, drives, calculadores e eletrodomsticos. As pesquisas nessa rea so pertinentes no contexto atual, onde h competio mercadolgica, principalmente no ramo de produtos eletrnicos. Um dos diferenciais dos equipamentos eletrnicos a sua capacidade de processamento de informao. Quanto mais rpido e de modo mais preciso se obtm um dado, mais fcil a ao e a gesto do conhecimento. Por isso, as empresas tm investido com freqncia em pesquisas tecnolgicas que visem o aumento da capacidade de processamento dos seus sistemas. Em 2006, a Intel anunciou que investira aproximadamente US$ 6 bilhes em pesquisa e desenvolvimento. Segundo dados da IT Web, em 2007, a concorrente Samsung Electronics, uma das maiores fabricantes de processadores, vai investir US$ 1,9 bilhes em processadores. Os circuitos integrados tm evoludo muito nos ltimos 30 anos em 1970 os processadores possuam poucos milhares de transistores em um chip. Em 2005, este nmero aumentou para dezenas a poucas centenas de milhes de transistores e, em 2010 a expectativa que se tenha um total de mais de um bilho de transistores em um chip. Esta evoluo dos chips permitiu a criao das FPGAs, que so circuitos integrados compostos por portas lgicas que podem se reconfigurar para formar diversos dispositivos diferentes, como processadores, controladores e outros dispositivos que possam ser descritos por lgica. Esta flexibilidade oferecida pelas FPGAs, tornou possvel a implementao de processadores soft-core bastante completos. Estes processadores so geralmente construdos utilizando-se blocos de hardware previamente construdos e testados, como memrias, decodificadores e blocos de entrada e sada, os quais so ligados entre si utilizando uma lgica de cola. Estes blocos so comumente chamados de IPs (do ingls Intellectual Property)

14 Um dos soft-cores disponveis no mercado o Plasma, um processador de cdigo aberto criado em linguagem VHDL e que implementa o conjunto de instrues MIPS I. Esse fato torna possvel utilizar o GNU Compiler Collection para gerar cdigos para o Plasma, o que facilita o desenvolvimento do software. Este processador, porm, possui uma capacidade limitada de comunicao com o meio externo por no possuir conexo com um barramento padro. Ele possui duas portas para GPIO (do ingls, General Purpose Input/Output),uma para entrada e uma para sada, e um dispositivo de comunicao serial integrado. O que dificulta sua interligao com outros dispositivos. Torna-se ento, interessante do ponto de vista tcnico e cientfico, a existncia de um processador de cdigo aberto, que possa ser ligado a um barramento padronizado, conhecido, amplamente utilizado e de especificao aberta, incentivando assim o desenvolvimento de bibliotecas de software para esta arquitetura, bem como a criao de mais dispositivos para esta arquitetura. Este o ponto-chave deste trabalho: como utilizar uma tecnologia livre, o Plasma, ligando-o ao barramento OPB, para criar uma alternativa de processamento que incentive futuras pesquisas e contribua para o desenvolvimento tecnolgico dos sistemas embutidos.

1.2 Objetivos
1.2.1 Objetivo geral Este trabalho tem como objetivo transformar o Plasma em um IP reusvel, consistindo do processador e um bloco de lgica para a conexo deste ao barramento On-chip Periferal Bus (OPB). O Plasma deve poder ser utilizado como processador secundrio, conectando-se ao barramento como escravo, ou mesmo servir como processador principal de um sistema, conectando-se ao barramento como mestre.

1.2.2 Objetivos especficos Criar um IP que possa ser acoplado ao barramento OPB, sendo que este IP funcione como mestre e tambm como escravo. A proposta permitir que o processador possa ler a partir do barramento sempre que necessrio, e que o barramento tambm consiga ler a memria do processador sem a necessidade de interrupo.

15 Mapear para o barramento, as portas de GPIO do Plasma, bem como seu sinal de reset. Alterar a estrutura interna de acesso memria do Plasma para permitir que um barramento externo acesse sua memria sem atrapalhar o funcionamento do processador. Obter um SoC cujo processador principal seja o Plasma, no necessitando do PowerPC gerado pela ferramenta de desenvolvimento para sistemas embarcados da Xilinx, o EDK.

16

2 Fundamentao Terica
Sero vistos neste captulo alguns conceitos e tecnologias fundamentais para o entendimento do trabalho, como o conceito de sistema embarcado, FPGA, VHDL e PowerPC.

2.1 Sistemas embarcados


Sistemas embarcados ou embutidos so aqueles que manipulam dados dentro de sistemas ou produtos maiores, e executam funes especficas. Geralmente so projetados para realizar uma funo ou uma gama de funes e no para serem programados pelo usurio final, como os computadores pessoais. Eles geralmente interagem com o ambiente em que se encontram e coletam dados de sensores para modificar o ambiente utilizando atuadores. Os sistemas embarcados apresentam caractersticas em comum com os sistemas computacionais, mas no possuem a mesma uniformidade. Cada aplicao apresenta requisitos diferentes de desempenho, consumo de energia e rea ocupada. Isso pode acarretar em uma combinao diferente de mdulos de hardware e software para atender a esses requisitos [12]. Os sistemas embutidos podem ser classificados segundo quatro critrios: tamanho, conectividade, requisitos de tempo e interao com o usurio [14]. Sistemas embarcados so usados desde a dcada de sessenta, mas at a dcada de oitenta ainda necessitavam de uma srie de componentes externos para funcionar, provendo memria de armazenamento e memria voltil. Aps a dcada de 80, com a queda do custo do microcontrolador, os sistemas embarcados puderam substituir componentes fsicos, como potencimetros e capacitores variveis. Hoje esto em quase todo equipamento eletrnico. Calcula-se que, nos Estados Unidos, h uma mdia de oito dispositivos baseados em microprocessadores por pessoa. Apesar de esse parecer um nmero muito grande, basta observar a variedade dos equipamentos eletrnicos: aparelhos de TV e de DVD, tocadores de MP3, telefones, sistemas de alarme, relgios e celulares so alguns dos exemplos de aparelhos que utilizam sistemas embarcados.

17

2.2 FPGA
Na indstria eletrnica, o tempo de desenvolvimento e de produo deve ser cada vez mais reduzido para limitar o risco financeiro presente no desenvolvimento de um novo produto. Para solucionar essa questo, foi criado o FPGA (Field Programmable Gate Array), cuja estrutura pode ser configurada pelo usurio final, o que permite uma rpida fabricao e construo de prottipos a custos muito reduzidos. A escolha dos FPGAs para implementar um coprocessador deve-se aos requisitos de alto desempenho, baixo custo e facilidade de reconfigurao. O FPGA, introduzido em 1985 pela empresa californiana Xilinx Inc. um circuito integrado especfico para construo de sistemas digitais implementado como uma matriz de blocos funcionais em uma rede de interconexo e cercado por blocos de entrada e sada (I/O blocks). O termo field (campo) indica que a programao do FPGA pode ser feita no lugar de aplicao. o usurio quem especifica, no momento da programao, a funo de cada bloco lgico do sistema e as suas conexes. Na atualidade existem muitos tipos de FPGA lanados por empresas como Actel, Altera, AMD, Crosspoint Solutions, Atmel entre outras [2]. Os FPGAs contm atualmente mais de 2,5 milhes de portas lgicas. Por isso, desenvolver projetos utilizando apenas diagramas esquemticos pode ser uma tarefa muito difcil. Os projetistas esto adotando cada vez mais o projeto de FPGAs baseado em HDL (Hardware Description Language). A utilizao dessas ferramentas permite um aumento de produtividade, pois o projeto pode ser feito em um nvel de abstrao mais alto (RTL, do ingls register transfer level), ao invs de nvel lgico booleano ou de portas.

2.3 VHDL
VHDL ou VHSIC Hardware Description Language uma linguagem de descrio de hardware comumente usada como linguagem de entrada para FPGAs na automao do projeto de circuitos eletrnicos. Criada originalmente para o Departamento de Defesa dos EUA para documentar o comportamento dos ASICs que eram includos nos equipamentos que comprava, substitua manuais grandes e complexos. Posteriormente, foram criados simuladores de hardware para a leitura do VHDL. Tambm surgiram os sintetizadores lgicos que liam VHDL e tinham como sada uma definio fsica da implementao do circuito.

18 A sintaxe do VHDL pesadamente baseada em ADA, porm seus meios de especificar o paralelismo inerente ao projeto de hardware (processos) so diferentes dos meios de ADA (tarefas). Existem tambm outras linguagens para descrio de hardware, como Verilog. Entre as principais diferenas encontradas entre as linguagens, esto: VHDL linguagem fortemente tipada, ao contrrio de Verilog; em Verilog no h o conceito de pacotes, assim como no existem diretivas para a configurao ou replicao de estruturas; o recurso de parametrizao em Verilog inferior, o que torna necessrio sobrescrever constantes ao longo do processo de sntese para que, deste modo, os componentes sejam pr-processados corretamente. A linguagem VHDL pode ser empregada para descrever hardware atravs das abordagens estrutural e comportamental. Geralmente emprega-se uma mistura das abordagens para formar um projeto por diferentes sees, expressas de diferentes modos. A linguagem VHDL oferece uma ampla variedade de nveis de abstrao e possibilita mesclar esses nveis durante a simulao, tornando possvel a adoo de um estilo de projeto verdadeiramente top-down. Essa linguagem possui tambm recursos excepcionais para modelagem de temporizao em hardware e prov mecanismos para construo de modelos genricos.

2.4 PowerPC 405


Este trabalho utiliza um processador PowerPC 405 como processador principal do sistema. Nele executado o programa inicial, que entre outras tarefas, carrega o programa para a memria do Plasma. Todavia, no necessrio que haja este seja o processador principal, ou mesmo que PowerPC esteja presente no sistema. O Plasma pode ser utilizado como processador principal do sistema, O PowerPC utilizado neste trabalho pois a ferramenta para sintetizar o sistema facilita a inicializao das memrias com programas para este processador. A arquitetura PowerPC uma arquitetura de 64 bits que possui um subconjunto de 32 bits. O PowerPC 405 implementa a arquitetura de 32 bits para ambientes embarcados [13]. Os principais atributos deste processador so: Uma unidade de execuo com ponto fixo de 32 bits, com trinta e dois registradores de uso geral de 32 bits;

19 Extenses arquitetura para ambientes embarcados como operao little-endian, gerenciamento de memria flexvel e trs timers programveis. Atributos de performance como predio de branch, pipeline de cinco estgios, multiplicao e diviso em hardware, suporte a carga e armazenamento no alinhado na memria; e Suporte avanado a gerenciamento de memria. De acordo com a Xilinx (2003), os programas que executem no PPC405 podem o fazer em dois modos de execuo: privilegiado e usurio. O modo privilegiado permite que as aplicaes acessem todos os registros e executem todas as instrues suportadas pelo processador, normalmente o sistema operacional e drivers de dispositivo de baixo-nvel executam neste modo. O modo de usurio restringe o acesso a alguns registradores e instrues, normalmente as aplicaes de usurio executam neste modo. O PPC405 tambm suporta dois modos de endereamento: o real e o virtual. No modo real, os programas acessam a memria fsica diretamente. J no modo virtual, os programas acessam a memria virtual, que traduzida pelo processador para endereos de memria fsica, este modo permite acessar espaos de endereamento muito maiores que os implementados pelo sistema.

20

2.5 Plasma
Rhoads (2007) o criador do Plasma, um soft-core, um processador que pode ser sintetizado a partir de uma linguagem de descrio de hardware (HDL), neste caso VHDL. Sua vantagem que ele implementa uma arquitetura de baseada na de von Neumann, utilizando apenas uma memria fsica para armazenar dados e instrues. Suporta praticamente todas as instrues especificadas pelo MIPS I Instruction Set, documentada por Price (1995), com exceo de apenas duas: carga e armazenamento no alinhado na memria no so suportados, pois so patenteados. Tambm no so suportadas excees, apenas interrupes. O compilador GCC para o MIPS no costuma gerar instrues de acesso no alinhado memria, uma vez este tipo de acesso tem suporte limitado na maioria das CPUs RISC. Para garantir que no programa no exista nenhuma destas instrues, pode-se gerar uma lista com as instrues utilizadas pelo programa compilado, atravs do aplicativo objdump, presente no toolkit do compilador, e procurar nesta lista pelas instrues: LWL, LWR, SWL ou SWR. Para gerar esta lista utiliza-se o comando: objdump --disassemble prog.exe > prog.lst sendo prog.exe, o nome do programa j compilado, e prog.lst o nome do arquivo que ser gerado.

2.5.1 Funcionamento do microprocessador

O funcionamento do Plasma baseia-se em um pipeline de execuo muito parecido com o pipeline descrito por Patterson e Hennessy (1997). Este pipeline possibilita que mais de uma instruo seja executada ao mesmo tempo, cada uma utilizando unidades funcionais separadas e independentes, uma instruo pode acessar a memria enquanto outra faz uma operao aritmtica, por exemplo. O pipeline implementado pelo Plasma configurvel com 4 ou 5 estgios, sendo que quando utiliza o modo de 4 estgios, o quarto estgio integrado ao terceiro. A execuo ocorre por meio dos seguintes passos e aes. Cada instruo necessita de trs a cinco dos passos descritos a seguir.

21 1. Busca da instruo Busca a instruo da memria, apontada por PC, e calcula o endereo da prxima instruo somando quatro ao valor atual de PC. 2. Decodificao da instruo e busca dos registradores So lidos os registradores identificados por rs e rt (e gravados em registradores temporrios A e B, respectivamente), supondo que a instruo seja do tipo R, pois, caso no seja, os valores desnecessrios podem ser simplesmente descartados. Tambm calculado o possvel endero da prxima instruo, caso esta seja um branch, caso a instruo no seja um branch, este valor ignorado. 3. Execuo, computao do endereo de memria, ou trmino do branch Neste passo a ALU (do ingls Arithmetic and Logic Unit) executa uma de quatro funes, dependendo do tipo da instruo, podendo esta funo ser um dos itens abaixo. Endereo de memria: o resultado ser A somado do valor do campo imediato com o sinal extendido para 32 bits. Clculo lgico-aritmtico: o resultado ser A (operao) B, onde (operao) pode ser qualquer operao da ALU. Branch: subtrai B de A, e caso o valor seja igual a zero (valores iguais) atualiza o valor de PC para o endereo calculado no ciclo anterior. Jump: concatena os 4 bits de mais alta ordem do PC com os 26 bits de mais baixa ordem da instruo deslocados 2 bits para a esquerda. E o valor resultante escrito em PC.

22 4. Acesso memria ou trmino de instruo lgico-aritmtica No caso de acesso memria o endereo determinado pela sada da ALU no ciclo anterior. Para leitura, o valor lido salvo para o prximo ciclo, e para gravao, gravado o dado de B. J no caso de instruo lgico-aritmtica (tipo R) o registrador identificado por rd escrito com o valor da sada da ALU no ciclo anterior. 5. Trmino de leitura de memria Aqui, o valor lido da memria no ciclo anterior escrito no registrador identificado por rd. A Figura 1, de Rhoads (2007), ilustra os componentes do Plasma e as ligaes entre eles.

Figura 1: Diagrama de blocos do Plasma. Fonte: Rhoads, 2007.

23

2.5.2 Perifricos

Juntamente com o hardware do microprocessador, o Plasma inclui um UART (do ingls Universal Asynchronous Receiver-Transmitter), possibilitando a comunicao serial bidirecional. Tambm agrega um controlador de interrupo e um timer com interrupo. O acesso a estes perifricos se d por meio de programmed I/O, ou seja, cada perifrico possui um endereo-base na memria. Quando se solicita uma leitura ou escrita neste endereo, na realidade, est se solicitando uma leitura no perifrico associado a esse endereo. Alguns perifricos, como a memria externa, possuem no apenas um endereo fixo, mas uma rea de endereamento, para que seja possvel acessar toda a gama de registradores possveis do perifrico em questo. A Tabela 1 mostra o mapa de memria com os endereos pr-programados do Plasma, desta forma nota-se a presena dos trs perifricos citados e tambm de duas portas para GPIO, uma de sada e uma de entrada. Endereo Descrio

0x00000000 0x00001FFF Memria interna (8Kb) 0x10000000 0x100FFFFF Memria externa(1Mb) 0x20000000 0x20000010 0x20000020 0x20000030 0x20000050 0x20000060
Tabela 1: Mapa de memria original do Plasma

UART (escrita e leitura) Mscara de IRQ Status do IRQ GPIO Sada GPIO Entrada Contador

Para acessar os registradores de um perifrico especfico, necessrio especificar o endereo do item desejado (0x20000000, para a UART, por exemplo) e ento requisitar uma leitura ou escrita neste endereo. A Figura 2 mostra como exemplo, uma aplicao que verifica o registrador de IRQ para verificar se h dados na UART (polling) e, caso haja, estes dados so lidos e ento escritos de volta para a sada serial, formando assim um loopback. A UART, tipo de circuito bastante comum, usado nos modems de computadores pessoais, um mdulo geralmente composto de um nico circuito integrado que contm, ao

24 mesmo tempo, os circuitos de transmisso e recepo necessrios para as comunicaes seriais assncronas. A UART presente nesta configurao funciona na velocidade de 57600 baud, sendo 8 bits de dados, 0 de paridade e 1 bit de parada.
//Endereos de hardware #define UART #define IRQ_STATUS

0x20000000 0x20000020

//Bits do IRQ #define IRQ_UART_READ_AVAILABLE 0x01 #define IRQ_UART_WRITE_AVAILABLE 0x02 #define MemoryRead(A) (*(volatile unsigned int*)(A)) #define MemoryWrite(A,V) *(volatile unsigned int*)(A)=(V) int main() { char c = '0'; for(;;) { while(!(MemoryRead(IRQ_STATUS) & IRQ_UART_READ_AVAILABLE)) ; c = (char) MemoryRead(UART); MemoryWrite(UART, c); } } Figura 2: Exemplo de programa em C, efetuando loopback na UART com polling.

O controlador de interrupo presente no Plasma funciona da seguinte maneira, o programa sendo executado escreve no registrador de mscara do IRQ (0x20000010) uma combinao das mscaras de IRQ existentes, descritas na Tabela 2. Quando o contedo do registrador de status do IRQ corresponder mscara definida (o resultado de uma operao E com os dois registradores for diferente de zero), o tratador de interrupes invocado (endereo 0x0000003C). O tratador de interrupes salva todos os registradores temporrios e o PC e chama o tratador de interrupes definido pelo sistema operacional. Aps o trmino da execuo deste tratador, os registradores salvos so restaurados e o programa que foi interrompido volta a ser executado a partir da instruo que estava sendo executada no momento em que ocorreu a interrupo. A Figura 3 demonstra o mesmo exemplo da Figura 2, com a diferena que utiliza interrupes. Neste exemplo, escrito no registrador de mscara do controlador de interrupes, uma mscara com as interrupes que se deseja receber, e ento o programa faz um lao infinito, apenas para esperar as interrupes. O tratador de interrupes ilustra o teste do conte-

25 do do registrador de status de IRQ, identificado pela varivel status, pela presena da mscara requerida. Este procedimento importante, pois se pode registrar mais de uma interrupo e todas chamaro a mesma funo. Aps a confirmao da mscara, o dado lido da UART e ento escrito novamente para ser reenviado. Bits do IRQ Descrio 7 6 5 4 3 2 1 0 GPIO[31] GPIO[30] not GPIO[31] not GPIO[30] Contador[18] not Contador[18] not UART ocupada para escrita Dados disponveis na UART

Tabela 2: Descrio dos bits da IRQ.

//Endereos de hardware #define UART #define IRQ_MASK #define IRQ_STATUS

0x20000000 0x20000010 0x20000020

//Bit do IRQ #define IRQ_UART_READ_AVAILABLE

0x01

#define MemoryRead(A) (*(volatile unsigned int*)(A)) #define MemoryWrite(A,V) *(volatile unsigned int*)(A)=(V) void OS_InterruptServiceRoutine(unsigned int status) { char c = '0'; if( status & IRQ_UART_READ_AVAILABLE) { c = (char) MemoryRead(UART); MemoryWrite(UART, c); } } int main() { MemoryWrite(IRQ_MASK, IRQ_UART_READ_AVAILABLE); for(;;) ; } Figura 3: Exemplo de programa em C, efetuando loopback na UART com interrupo

26

2.6 O barramento OPB


Barramentos so um conjunto de sinais que permite a comunicao entre componentes de um sistema computacional, como memria, processadores e demais perifricos. Eles conectam as diferentes partes para que possa ocorrer transferncia de dados entre eles. A IBM criou um padro de barramentos para SoCs, o CoreConnect, que segmentado em trs partes interconectadas: PLB - Processor Local Bus; OPB - On-chip Periferal Bus; e DCR - Device Control Register. De acordo com a IBM (1999), o objetivo principal do PLB prover conexes de baixa latncia e alta velocidade. O do OPB prover conectividade flexvel a perifricos de diferentes tamanhos de palavra e tempos de acesso a dados, com um mnimo de impacto no PLB. O DCR um mecanismo de transferncia de dados entre os registradores de diferentes componentes. Este trabalho utilizar o barramento OPB. Este barramento foi escolhido entre os demais, pois sua interface e funcionamento so simples, tambm bastante flexvel. Fato que possibilitaria uma implementao eficiente e que tivesse baixo custo em relao a espao na FPGA. H tambm uma grande gama de perifricos compatveis com este barramento, fato que aumenta ainda mais a diversidade das aplicaes possveis. O barramento de perifricos on-chip (OPB) foi projetado para permitir uma conectividade fcil entre dispositivos perifricos em um mesmo chip. Segundo dados da IBM (2001), so as principais caractersticas do OPB: endereamento de at 64 bits; barramento de dados de 32 ou 64 bits; totalmente sncrono; suporte a escravos de 8, 16, 32 ou 64 bits; suporte a mestres de 32 ou 64 bits; definio de tamanho dinmico, com transferncias de byte, halfword, fullword e doubleword; suporte a protocolo de endereos seqenciais; timeout de 16 ciclos provido pelo rbitro de barramento; e supresso de timeout pelo escravo.

27

A quantidade mxima de mestres e de escravos deste barramento depende da implementao, a especificao recomenda que, caso a aplicao necessite de muitos mestres, sejam criados vrios segmentos do barramento. No existem limites lgicos para a quantidade de escravos. O principal limite seria a carga eltrica. Novamente, mltiplos segmentos podem resolver o problema. A Tabela 3 ilustra os principais sinais utilizados pelos componentes conectados ao OPB. Sinal Mn_request Mn_grant Mn_select Mn_ABus Mn_DBus OPB_xferAck OPB_select OPB_ABus OPB_DBus OPB_RNW Sln_DBus Sln_DBusEn Sln_toutSup Sln_xferAck Interface Mestre Mestre Mestre Mestre Mestre M/E Escravo Escravo M/E Escravo Escravo Escravo Escravo Escravo Direo Sada Entrada Sada Sada Sada Entrada Entrada Entrada Entrada Entrada Sada Sada Sada Sada Descrio Requisio do barramento Resposta de requisio Indicao de utilizao do barramento do mestre Barramento de endereo do mestre Barramento de dados do mestre Transferncia completa Indicao de utilizao do barramento Barramento de endereo Barramento de dados Read not write Barramento de dados do escravo Habilita o barramento de dados do escravo Supresso de timeout Transferncia completa do escravo

Tabela 3: Principais sinais do OPB Fonte: IBM, 2001

2.6.1 Operaes no barramento

As operaes no OPB foram projetadas para serem simples. Um mestre que deseja efetuar uma transferncia de dados solicita esta atravs de seu sinal request (passando seu valor para 1), e pode iniciar a transferncia assim que receber a confirmao do rbitro pelo seu sinal grant. A transferncia se d pelo envio do sinal select e conclui-se ao receber o sinal

28 xferAck. O mestre pode permanecer com o sinal de request ligado e continuar a fazer transferncias enquanto o valor de grant se mantiver em 1. Quando um escravo percebe o sinal de select do barramento e identifica que o endereo (sinal ABus) corresponde ao seu address space, ele habilita o barramento de dados (sinal DBus) atravs do sinal DBusEn, e quando os dados estiverem prontos envia o sinal xferAck. Um escravo cuja latncia para acessar os dados requeridos seja maior que 16 ciclos, deve sinalizar tal condio utilizando o sinal de supresso de timeout, (toutSup), evitando que sua demora para responder seja tratada como erro.

Figura 4: Transferncia de dados no barramento OPB Fonte: IBM, 2001.

A Figura 4 ilustra a transferncia de dados utilizando o barramento OPB, com um mestre (M1) e um escravo (Sl2) realizando trs transferncias, duas leituras uma escrita. Afi-

29 gura demonstra a multiplexao do sinal OPB_Dbus entre os participantes das transferncias. importante notar tambm na figura a utilizao do sinal M1_RNW para descrever quando o acesso uma leitura (sinal alto) ou escrita (sinal baixo). E tambm utilizao dos barramentos de endereos e dos barramentos de dados e a importncia dos sinais que habilitam o barramento de dados. (DBusEn).

30

3 Projeto do IP
Para o projeto do IP, adotou-se uma metodologia top-down. Consistindo ento na elaborao de requisitos de alto nvel para o sistema e a partir desta verso efetuar sucessivos refinamentos nestes, at que se tenha obtido um IP sintetizvel.

PLB RAM 64Kb

PowerPC 405

PLB Bridge PLB - OPB

OPB

GPIO (Leds)

UART

Plasma

OPB RAM 8KB

Interrupt Controller

Timer

Escravos do OPB
Figura 5: Diagrama de blocos do SoC

A Figura 5 ilustra o diagrama de blocos do System-on-a-chip a ser criado. Este ser composto utilizando a ferramenta de projeto de sistemas embarcados da Xilinx, o EDK. Neste sistema, foi criada a seguinte configurao: um processador PowerPC; um barramento PLB;

31 64Kb de memria BRAM (do ingls Block Random Access Memory, bloco de memria interno FPGA); 8Kb de memria BRAM. um barramento OPB; uma brigde PLB-OPB para possibilitar a comunicao de mestres no PLB com escravos no OPB; um Timer; um dispositivo de comunicao serial (UART); um controlador de interrupo; uma porta de GPIO, ligada aos Leds do kit; e o Plasma. Na figura, as ligaes com o barramento so demonstradas pelas linhas ligando os blocos ao barramento. As esferas na conexo com o barramento denotam o tipo da ligao com o mesmo. As esferas preenchidas denotam uma conexo do tipo mestre e as esferas vazias, uma conexo do tipo escravo. Neste projeto, foi utilizado o PowerPC com a freqncia de 100MHz, o clock tanto do barramento PLB quanto to barramento OPB foram definidos para 100MHz. O software de anlise de desempenho da Xilinx (executado durante a sntese), verificou que a freqncia mxima do clock para o Plasma deveria ser de aproximadamente 65MHz, optou-se ento por inserir um nvel de diviso de clock no IP. O valor pelo qual o clock dever ser dividido um parmetro de instanciao do IP (generic).

3.1 Escolha dos componentes


Para desenvolver o projeto, inicialmente foram escolhidos os elementos necessrios na construo do sistema com co-processador, os quais eram: circuito integrado (FPGA); dispositivo de comunicao com a FPGA; e software para interpretao da linguagem e sntese do hardware. A seguir so detalhados os requisitos de cada um desses elementos bem como informados quais componentes foram escolhidos.

32

3.1.1

Circuito integrado (FPGA) Para a realizao do projeto necessria a utilizao de um FPGA que comporte o

sistema completo. Este chip uma matriz de portas lgicas, cujo nmero limitado, de acordo com o modelo. A princpio, foi cogitado o uso da Xilinx Spartan-3, contida no kit de desenvolvimento Spartan-3 starter kit. Porm, aps alguns testes, verificou-se que s o Plasma ocupava 90% da capacidade. Desta forma, optou-se pelo uso de uma FPGA com maior capacidade. O modelo escolhido foi a Xilinx Virtex II Pro, contida no kit de desenvolvimento ML 310. Neste segundo modelo, o Plasma ocupou 11% da capacidade e, ento, observouse que com este modelo seria possvel sintetizar o sistema com o PowerPC, o barramento e o Plasma.

3.1.2 Dispositivo de comunicao com a FPGA So necessrios dois tipos de comunicao: um para verificar os resultados atravs da sada do sistema e outro para programar a FPGA. Para observar os resultados, foi utilizado o cabo serial RS-232, pois um modelo facilmente encontrado no mercado e que permite uma comunicao simples, eficiente e bilateral. Sua implementao no complexa. Para programar a FPGA normalmente utiliza-se um cabo JTAG. De acordo com o manual do kit de desenvolvimento da Xilinx ML 310, observou-se que o nico modelo compatvel o JTAG4. No entanto, no foi possvel obter este cabo e, na ausncia dele, foi decidido que a programao dar-se-ia atravs do carto compact flash, presente no kit.

3.1.3 Software para interpretao da linguagem e sntese do hardware Para programar a FPGA utiliza-se uma linguagem de descrio de hardware, geralmente VHDL ou Verilog. Neste projeto, optou-se pela VHDL, por ser a linguagem em que o Plasma estava implementado e devido ao conhecimento prvio do autor do projeto. A transformao da VHDL no formato de entrada da FPGA feita pelo software de sntese. Neste projeto foi escolhido o pacote de desenvolvimento da Xilinx, o ISE (do ingls, Integrated Software Environment), por ser compatvel com a FPGA escolhida e por estar disponvel gratuitamente na Web.

33 Alm desse software, foi utilizado tambm o EDK (do ingls Embeded Development Kit), um kit de desenvolvimento da Xilinx para sistemas embarcados, no qual foi possvel gerar o esqueleto do sistema descrito anteriormente.

3.2 Modificao do Plasma


Aps a definio dos elementos necessrios, o Plasma foi sintetizado na FPGA Virtex II Pro, presente no Kit de Desenvolvimento ML-310, deste kit foi utilizado, alm da FPGA, a interface de memria compact flash que foi utilizado para programar a FPGA, oito leds de uso geral e o dispositivo de comunicao serial RS-232. O Kit possui tambm um controlador PCI, no qual se ligam diversos outros perifricos, que no foram utilizados por este trabalho.

3.2.1 Acesso memria interna Para que fosse possvel acessar a memria interna do Plasma, foi cogitada a implementao de um bloco de lgica que promovesse o duplo acesso memria existente. Procedeu-se da seguinte forma, dividiu-se o clock do Plasma por dois, enquanto a memria continuava com o clock original, alternando os acessos do Plasma com os acessos do barramento externo. Este processo, porm, acarretou em uma grande perda de desempenho por parte do processador. A alternativa encontrada foi a de modificar o componente de RAM do processador, trocando a instanciao de quatro blocos de memria de 2048 bytes com uma porta de acesso (componente RAMB16_S9) pela instanciao de quatro blocos de memria de 2048 bytes com duas portas de acesso (componente RAMB16_S9_S9) e a externalizao dos sinais da porta B de acesso memria. A Figura 6 demonstra a interface final da memria interna do Plasma.

34

entity ram is generic(memory_type : string := "DEFAULT"); port(clk : in std_logic; clk_b : in std_logic; enable : in std_logic; enable_b : in std_logic; write_byte_enable : in std_logic_vector(3 downto 0); write_byte_enable_b : in std_logic_vector(3 downto 0); address : in std_logic_vector(31 downto 2); address_b : in std_logic_vector(31 downto 2); data_write : in std_logic_vector(31 downto 0); data_write_b : in std_logic_vector(31 downto 0); data_read : out std_logic_vector(31 downto 0); data_read_b : out std_logic_vector(31 downto 0)); end; Figura 6: Interface do componente de memria do Plasma.

Constata-se a existncia das duas portas de acesso memria, verificando que todas as portas esto duplicadas (com o sufixo _b). Nota-se tambm, que a memria pode ser acessada por dois dispositivos completamente diferentes mesmo que estes tenham fontes diferentes de clock, pois existem duas entradas para o sinal de sincronismo, cada uma correspondente sua porta. Por fim, adicionou-se interface externa do Plasma mais seis sinais, correspondentes aos sinais adicionais criados no componente de memria, so eles: clk_bus: entrada, o sinal de clock do barramento; enable_bus: entrada, pedido para acesso memria; write_byte_enable_bus: entrada, autorizao do para escrita na memria; address_bus: entrada, endereo que deve ser lido ou escrito; data_write_bus: entrada, dado que deve ser escrito, se for o caso; e data_read_bus: sada, dado que foi lido.

3.2.2 Interface de memria externa Alm de acessar a memria interna, os programas que estiverem executando no Plasma, podem acessar tambm endereos de memria que no estejam dentro desta rea de memria. Como foi descrito anteriormente, na Tabela 1, o Plasma mapeia a memria externa para os endereos cujo byte mais significativo seja igual a 0x10. Porm seria necessrio permitir aos aplicativos que acessem dispositivos que estivessem em outros mapeamentos de memria, como no intervalo 0x60000000 0x6000FFFF, por exemplo.

35 Para permitir este acesso, foi modificada a lgica de controle de memria do Plasma para que este possua o mapa de memria descrito na Tabela 4: Endereo Descrio

0x00000000 0x00001FFF Memria interna (8Kb) 0x10000000 0x10FFFFFF Memria externa 0x20000000 0x20000010 0x20000020 0x20000030 0x20000050 0x20000060
Tabela 4: Mapa modificado de memria do Plasma

UART (escrita e leitura) Mscara de IRQ Status do IRQ GPIO Sada GPIO Entrada Contador

0x30000000 0xFFFFFFFF Memria externa

A Figura 7 ilustra a implementao deste mapa de memria, no qual trs dos quatro bits mais significativos do endereo so testados e de acordo com o resultado, o dado lido provm de uma fonte diferente, demonstra tambm, a decodificao do endereo dos registradores de controle do Plasma.

3.3 Lgica de acoplamento ao barramento OPB


O Plasma ao ser acoplado ao barramento ir realizar operaes leitura e escrita no OPB. Na sua arquitetura, o Plasma possui uma memria interna de 8Kb e uma interface de memria externa. nesta interface de memria externa que o Plasma solicitar leituras e escritas no barramento. E em sua memria interna o barramento poder solicitar leitura e escrita, possibilitando assim que os programas que devem ser executados sejam passados memria do microprocessador.

36

misc_proc: process(clk, reset, mem_address, address_reg, enable_misc, data_read_ram, data_read, data_read_uart, mem_pause, irq_mask_reg, irq_status, gpio0_reg, write_enable, gpioA_in, counter_reg, mem_data_write, data_write_reg) begin case address_reg(30 downto 28) is when "000" => --internal RAM mem_data_read <= data_read_ram; when "010" => --misc case address_reg(6 downto 4) is when "000" => --uart mem_data_read <= ZERO(31 downto 8) & data_read_uart; when "001" => --irq_mask mem_data_read <= ZERO(31 downto 8) & irq_mask_reg; when "010" => --irq_status mem_data_read <= ZERO(31 downto 8) & irq_status; when "011" => --gpio0 mem_data_read <= gpio0_reg; when "101" => --gpioA mem_data_read <= gpioA_in; --counter when "110" => mem_data_read <= counter_reg; when others => mem_data_read <= gpioA_in; end case; when others => -- external RAM mem_data_read <= data_read; end case; -- ... end process; Figura 7: Implementao do novo mapa de memria do Plasma

Devido natureza das operaes que o processador realiza, necessrio que este atue no barramento OPB, tanto como mestre, nas operaes nas quais ele requisita leitura ou escrita nos perifricos conectados a este barramento atravs da interface de memria externa; quanto como escravo, nas operaes nas quais algum mestre do barramento solicita a leitura ou escrita na memria interna do Plasma. Foi ento necessrio implementar um mdulo que pudesse: acoplar-se ao barramento OPB como mestre e como escravo; conectar-se interface de memria externa do Plasma; acessar a memria interna do Plasma, tanto para leitura quanto para a escrita; e mapear para o barramento, as portas de GPIO do Plasma e o sinal de reset.

37 3.3.1 Implementao Duas foram as abordagens utilizadas para implementar a lgica de acoplamento ao barramento. Utilizar o assistente de criao de perifricos do EDK, e a implementao from scratch da lgica. A primeira abordagem foi utilizar o assistente de criao de perifricos da ferramenta da Xilinx. Esta ferramenta cria um esqueleto de um perifrico a ser ligado a um dos barramentos suportados pela Ferramenta (OPB ou PLB). Este esqueleto gerado pela ferramenta utilizando os requisitos deste sistema gerou um dispositivo relativamente simples, possuindo apenas uma interface que conecta-se ao barramento como mestre/escravo. Possuindo dois arquivos, esta implementao consiste de uma interface primria, que recebe todos os sinais e os envia a um IP de controle da Xilinx, que traduz os sinais do barramento para os sinais de controle de mais dois componentes, chamados de conexo mestre e conexo escravo. Os sinais de sada destes componentes eram ento mapeados nos sinais do segundo arquivo, chamado de lgica do usurio.

Conexo Escravo

Xilinx IP Interface Conexo Mestre

Plasma

Lgica de acoplamento

Figura 8: Diagrama de blocos da primeira abordagem ao IP

Esta arquitetura, demonstrada pela Figura 8, fez com que o IP executasse corretamente como escravo no sistema. A conexo mestre, acessa somente os mesmos registradores da conexo escrava. Para executar as funes de mestre, necessrio que outro mestre do barramento escreva nos registradores de controle do IP os seguintes dados: Tipo de operao: leitura ou escrita; Endereo na conexo escrava; Endereo no barramento; e

38 Tamanho da operao, em bytes. Deste modo, quando executada a operao, ocorre que, ao requisitar uma escrita no barramento, executado uma leitura na conexo escrava e ento uma escrita no barramento; e no caso de uma leitura no barramento, feita a leitura e ento efetuada uma escrita na conexo escrava. Aps a sntese, o IP, seguindo esta primeira abordagem, contendo somente a lgica de acoplamento e o Plasma, ocupou 48% da capacidade da FPGA. A segunda abordagem, implementao from scratch da lgica de acoplamento, ilustrada pela Figura 9, foi implementada como a entidade de mais alto nvel (top level entity) do IP, tornando-se assim a interface do Plasma com qualquer elemento exterior. Composta por duas interfaces separadas, a interface mestre e a interface escrava, sendo que as duas compartilham os sinais de clock e reset.

OPB Mestre

OPB Escravo

Plasma

Lgica de acoplamento

Figura 9: Diagrama de blocos da segunda abordagem ao IP

A Figura 10 ilustra a interface da lgica de acoplamento, onde nota-se a externalizao dos sinais de entrada e sada da UART do Plasma, bem como os sinais das interfaces mestre e escravo do barramento. Nota-se tambm que possvel configurar alguns aspectos do funcionamento da lgica, como, por exemplo, a quantidade de vezes que deve tentar enviar um dado caso seja necessrio, assim como os endereos inicial e final do espao de endereamento. Foi estabelecido ento, que haveria trs espaos de endereamento dentro da interface escrava do barramento, uma para a memria, uma para as portas de GPIO, e uma para o sinal de reset do Plasma. A Tabela 5 ilustra este mapa de memria, levando

39 para o sinal de reset do Plasma. A Tabela 5 ilustra este mapa de memria, levando em considerao somente os 16 bits menos significativos.
Espao de endereamento Descrio

0x0000 0x1FFF 0x2000 0x2FFF 0x3000 0x3FFFF

Memria interna (8Kb) GPIO Reset

Tabela 5: Mapeamento das interfaces do Plasma no barramento

Deste modo, quando algum mestre do barramento solicita uma leitura a este componente, o endereo recebido traduzido, escolhendo uma das trs portas, sendo ento repassado este endereo ao controlador de memria, no caso da primeira porta ou descartado no caso das outras. O dado lido ento repassado ao barramento. Para escrita o processo similar, com a diferena que aps o repasse do endereo o dado proveniente do barramento escrito na memria. A interface escrava do barramento possui um atraso de trs ciclos, ou seja, o sinal de confirmao (Sl_xferAck) de escrita ou leitura s enviado no terceiro ciclo aps o recebimento do sinal de habilitao do barramento (OPB_select). O lado mestre do barramento, conectado interface de memria externa do softcore, fora implementado de modo que, quando o Plasma solicitar uma leitura na mem-

ria, enviando um valor vlido para o endereo, ser feita uma solicitao de leitura no barramento e, da mesma forma, quando, alm de um valor vlido para o endereo, for enviado um valor diferente de 0 para os sinais de write_enable, feita uma solicitao de escrita no barramento. Durante o processo de leitura ou escrita no barramento por parte da interface mestre, o funcionamento do Plasma paralisado, s sendo este liberado aps o trmino da transferncia de dados. Aps a sntese, o IP seguindo esta segunda abordagem, contendo somente a lgica de acoplamento e o Plasma, ocupou 13% da capacidade da FPGA

40

entity opb_plasma is generic( C_PLASMA_CLK_DIVISOR : integer C_MAX_RETRY : integer C_BASEADDR : std_logic_vector C_HIGHADDR : std_logic_vector C_OPB_AWIDTH : integer C_OPB_DWIDTH : integer C_USER_ID_CODE : integer C_FAMILY : string ); port( Plasma_uart_TX : out std_logic; Plasma_uart_RX : in std_logic; OPB_Clk : in std_logic; OPB_Rst : in std_logic; --portas do acoplador escravo Sl_DBus : out std_logic_vector(0 Sl_errAck : out std_logic; Sl_retry : out std_logic; Sl_toutSup : out std_logic; Sl_xferAck : out std_logic; OPB_ABus : in std_logic_vector(0 OPB_BE : in std_logic_vector(0 sOPB_DBus : in std_logic_vector(0 OPB_RNW : in std_logic; OPB_select : in std_logic; OPB_seqAddr : in std_logic; -- portas do acoplador mestre M_ABus : out std_logic_vector(0 M_BE : out std_logic_vector(0 M_busLock : out std_logic; M_DBus : out std_logic_vector(0 M_request : out std_logic; M_RNW : out std_logic; M_select : out std_logic; M_seqAddr : out std_logic; mOPB_DBus : in std_logic_vector(0 OPB_errAck : in std_logic; OPB_MGrant : in std_logic; OPB_retry : in std_logic; OPB_timeout : in std_logic; OPB_xferAck : in std_logic); end entity opb_plasma; Figura 10: Interface do IP que acopla o Plasma ao barramento OPB

:= := := := := := := :=

2; 5; X"70000000"; X"7000FFFF"; 32; 32; 3; "virtex2p"

to C_OPB_DWIDTH-1);

to C_OPB_AWIDTH-1); to C_OPB_DWIDTH/8-1); to C_OPB_DWIDTH-1);

to C_OPB_AWIDTH-1); to C_OPB_DWIDTH/8-1); to C_OPB_DWIDTH-1);

to C_OPB_DWIDTH-1);

3.3.2 Validao

A validao da lgica de acoplamento foi feita em duas etapas, sendo a primeira atravs de simulao por software, e a segunda foi sintetizando o IP e ligando-o a um barramento real.

41 Para a primeira etapa, foi criado um cenrio de testes, no qual testou-se tanto a interface mestre, quanto a interface escrava. Este cenrio de testes foi criado ligando os sinais da interface mestre aos sinais da interface escrava. Validando deste modo o funcionamento de ambas as interfaces em uma s simulao. Para que a interface mestre gerasse os pedidos de leitura e escrita, foi escrito um programa, em C, cujo cdigo compilado foi executado no Plasma, de modo que houvesse as leituras e escritas no barramento. Este programa est descrito na Figura 11.

int main() { volatile unsigned int i,*ptr; ptr = (unsigned int*)0x70000000; for(i=0; i<30; i++) { ptr[i+0x400] = ptr[i]; } return 0; } Figura 11: Programa para validao por simulao do IP

A segunda etapa de validao do IP necessitou que todo o sistema fosse sintetizado e carregado para a FPGA. Para esta validao, outro programa foi escrito. Este programa deveria escrever dados na BRAM presente no barramento OPB, ler os valores que foram escritos e confirmar a validade dos dados lidos. Caso tenha confirmado, escreve um valor de confirmao nos leds, caso contrrio, escreve um valor de desaprovao. Aps isto, deve executar um contador e, de tempos em tempos, escrever um valor nos leds. O cdigo-fonte est no Anexo A deste trabalho. Foi escrito tambm uma rotina, a ser executada pelo PowerPC para escrever um valor no endereo correspondente ao sinal de reset do Plasma, esta rotina encontra-se disponvel no Anexo B. Aps a compilao dos programas, e sintetizao do sistema. O mesmo foi programado na FPGA, que depois de iniciada executou as operaes exatamente conforme o previsto.

42

4 Concluso
Este trabalho se enquadra na rea de sistemas embarcados e envolveu diversos conceitos relacionados s cincias da computao, como circuitos digitais, arquitetura de computadores, sistemas operacionais e sntese de hardware. A proposta deste trabalho era sintetizar, em um nico chip, uma configurao composta por dois processadores, sendo um deles o soft-core Plasma, ligado ao barramento OPB, e o outro um PowerPC, ligado ao barramento PLB. A validao do IP, descrita no item 3.2.2 comprova, no s a viabilidade do projeto, mas tambm o correto funcionamento da implementao realizada, tendo cumprido os objetivos previstos. Os testes realizados mostraram como o Plasma foi adequadamente acoplado ao barramento como escravo, servindo de co-processador a um processador PowerPC, e tambm mostram a integrao funcional do Plasma como mestre do barramento. Esta configurao permite que esse soft-core seja usado como processador principal de um SoC e que o SoC possa ter, inclusive, vrias instncias do Plasma, implementando um multiprocessador em chip. Em relao gerao do componente de hardware (IP), existem vantagens e desvantagens em utilizar qualquer uma das abordagens de implementao do IP sugeridas: usar o assistente de criao de perifricos da ferramenta EDK da Xilinx, ou implementar o perifrico
from scratch.

A primeira tem como vantagem principal a facilidade e a rapidez para a implementao de perifricos simples, mas peca quando necessria a criao de IPs mais complexos, por poluir a implementao com muitos sinais e por exigir muito da capacidade da FPGA. A segunda abordagem construo do IP pareceu afinal mais vantajosa e foi adotada, pois, apesar da dificuldade inicial de implementar todo o protocolo OPB, revela-se mais prtica, simples e confivel, alm de exigir muito menos da capacidade da FPGA (pouco mais que 25% da exigncia da primeira abordagem). Ainda em relao gerao da interface do IP, havia duas opes de projeto. Uma nica interface permitindo conectar o plasma como mestre e escravo, ou interfaces separadas. A opo por construir duas interfaces separadas ao invs de apenas uma interface unificada para as duas funes (mestre e escravo) tambm se revelou bastante promissora, pois propiciou que o teste de validao pela simulao fosse feito de maneira simples, apenas ligando os sinais de uma interface a outra.

43

4.1 Trabalhos Futuros


Partindo do ponto em que h uma soluo completamente aberta e sendo simples a interligao de perifricos e processadores soft-core em SoCs usando-se IPs, abre-se caminho para um nmero muito grande de possveis aplicaes e trabalhos futuros. Uma sugesto para trabalhos futuros a implementao de blocos funcionais que possam ser integrados ao Plasma, como uma Unidade de Ponto Flutuante, uma Unidade de gerenciamento de Memria, ou memrias Cache. Esses blocos poderiam ser adicionados ao sistema conforme sua necessidade ou no, de forma a no implicar aumento desnecessrio de rea da FPGA. Outros desenvolvimentos futuros nessa incluem a customizao do prprio componente Plasma e de suas unidades funcionais (ULA, banco de registradores, memria interna, etc) conforme a aplicao. Ou seja, poderia ser possvel remover algumas dessas unidades funcionais internas do processador quando no forem necessrias (quando no houver instrues no cdigo executvel que as utilize). Diversas aplicaes ou avaliaes de aplicaes poderiam ainda ser realizadas. No caso da implementao de mltiplos processadores num SoC, ou mesmo de um processador com muitos perifricos, poderia-se avaliar o impacto da perda de desempenho causada por bloqueios no barramentos, e alternativas de interconexo entre esses componentes, como redes-em-chip.

44

5 Bibliografia
[1] DANGUI, Sandro. Modelagem e simulao de barramentos com SystemC. 2006. 121f. Dissertao (Mestrado em Cincia da Computao) - Universidade Estadual de Campinas. [2] GIORGINI, Andr Linhares. Implementao de um Controlador PID Digital para Robtica baseado em Computao Reconfigurvel. 2001. 108 f. Dissertao (Mestrado em Cincias de Computao e Matemtica Computacional) - Universidade de So Paulo. [3] IBM (International Business Machines Corporation). On-Chip Peripheral Bus: Architecture Specifications. Verso 2.1. Carolina do Norte, 2001. [4] IBM (International Business Machines Corporation). CoreConnect Bus Architecture. Carolina do Norte, 1999. [5] NAVABI, Zainalabedin. VHDL : Analysis and modeling of digital systems. 2 Edio. McGraw Hill: Nova Iorque, 1998. [6] OLIVEIRA, Tadeu F. Desenvolvimento de aplicaes para sistemas embutidos: um estudo da plataforma J2ME. 2006. 71 f. Dissertao (Bacharelado em Cincias da Computao) - Universidade Tiradentes. [7] PATTERSON, David; HENNESSY, John. Computer Organization and Design: The Hardware/Software Interface. 2 edio. Califrnia: Morgan Kaufmann, 1997. [8] POLPETA, Fauze V. Uma Estratgia para a Gerao de Sistemas Embutidos baseada na Metodologia Projeto de Sistemas Orientados Aplicao. 2006. 115 f. Dissertao (Mestrado em Cincia da Computao) Universidade Federal de Santa Catarina. [9] PRICE, Charles. MIPS IV Instruction Set. Setembro, 1995.

[10] RHOADS, Steve. Plasma CPU Core. Disponvel em: <http://www.open-cores.org>. Acesso em: 30 jan. 2007. [11] [12] [13] [14] WISHBONE, SoC Arquitecture Specification. 2002. WOLF, Wayne. Computers as Components. Nova Iorque: McGraw-Hill, 2001. XILINX, PowerPC Processor Reference Guide. Verso 1.1. Califrnia, 2003. YAGHMOUR, Karim. Building Embedded Linux Systems. Califrnia: O'Reilly, 2003.

45

ANEXOS
Anexo A: Aplicao a ser executada no IP, para validao juntamente com um barramento real Arquivo: vlidacao.c
#define MemoryRead(A) (*(volatile unsigned int*)(A)) #define MemoryWrite(A,V) *(volatile unsigned int*)(A)=(V)

#define LED_BASEADDR #define LED_MSB #define RAM_BASEADDR

0x40000000 0x00000080 0x60000000

unsigned int led_data = 0; typedef unsigned char void led_changer() { if (led_data & LED_MSB) led_data = led_data << 1; else led_data = (led_data << 1) + 1; MemoryWrite(LED_BASEADDR, led_data); } uint8;

void Test() { volatile int* ptr = (int*)RAM_BASEADDR; volatile int local[50]; int i; for( i=0; i<50; i++) { ptr[i] = i; } for( i=0; i<50; i++) { local[i] = ptr[i]; if( local[i] != i ) { MemoryWrite(LED_BASEADDR, 0xF3); return; } } MemoryWrite(LED_BASEADDR, 0xFC); for(i=0; i<0x20000000; i++) ; }

46

int main() { unsigned int counter; Test(); counter = 0; while(1) { counter++; if(counter == 0x1000000 ) //1 segundo aprox. { counter = 0; led_changer(); } } return 0; }

47 Anexo B: Aplicao a ser executada no PowerPC para a validao do IP juntamente com um barramento real. Arquivo: TestInterrupt.c
// Located in: ppc405_0/include/xparameters.h #include "xparameters.h" #include "stdio.h" #include "xutil.h" #include "xgpio_l.h" /* general-purpose I/O peripheral control functions */ #include "xtmrctr_l.h" /* timer/counter peripheral control functions */ #include "xuartlite_l.h" /* uartlite peripheral control functions */ #include "xintc_l.h" /* interrupt controller control functions */ #include "xexception_l.h" /* PPC exception handler control functions */ #define LED_MSB 0x00000080 /* mask for position of left-most LED */ /* Global variables */ volatile unsigned int exit_command = 0; /* flag from UART ISR to exit */ volatile unsigned int dump_command = 0; /* UART interrupt service routine */ void uart_int_handler(void *baseaddr_p) { char c; volatile unsigned int *magic_value; magic_value = (unsigned int*)0x70801100; while (!XUartLite_mIsReceiveEmpty(XPAR_RS232_UART_BASEADDR)) { /* Read a character */ c = XUartLite_RecvByte(XPAR_RS232_UART_BASEADDR); switch (c) { case 'x': /* EXIT command */ exit_command = 1; break; case 'r': /* reset */ *((volatile unsigned int*)(0x70803000)) = 0xFF; break; case 'd': /* dump memory */ dump_command = 1; break; } } } /* Timer interrupt service routine */ /* Note: This ISR is registered statically in the Software Platform Settings dialog */ void timer_int_handler(void * baseaddr_p) { unsigned int csr; /* Read timer 0 CSR to see if it requested the interrupt */ csr = XTmrCtr_mGetControlStatusReg(XPAR_OPB_TIMER_1_BASEADDR, 0); /* Clear the timer interrupt */ XTmrCtr_mSetControlStatusReg(XPAR_OPB_TIMER_1_BASEADDR, 0, csr); } /* Interrupt test routine */ void InterruptTest(void) { const int addr = 0x70800000;

48
int offset = 0; volatile int *ptr; print("-- Entering InterruptTest() --\r\n"); /* Initialize exception handling */ XExc_Init(); /* Register external interrupt handler */ XExc_RegisterHandler(XEXC_ID_NON_CRITICAL_INT, (XExceptionHandler)XIntc_DeviceInterruptHandler, (void *)XPAR_OPB_INTC_0_DEVICE_ID); /* Register the UART interrupt handler in the vector table */ XIntc_RegisterHandler(XPAR_OPB_INTC_0_BASEADDR, XPAR_OPB_INTC_0_RS232_UART_INTERRUPT_INTR, (XInterruptHandler)uart_int_handler, (void *)XPAR_RS232_UART_BASEADDR); /* Start the interrupt controller */ XIntc_mMasterEnable(XPAR_OPB_INTC_0_BASEADDR); /* Set the gpio for LEDs as output */ XGpio_mSetDataDirection(XPAR_LEDS_8BIT_BASEADDR, 1, 0x00000000); /* Set the number of cycles the timer counts before interrupting */ XTmrCtr_mSetLoadReg(XPAR_OPB_TIMER_1_BASEADDR, 0, timer_count); /* Reset the timers, and clear interrupts */ XTmrCtr_mSetControlStatusReg(XPAR_OPB_TIMER_1_BASEADDR, 0, XTC_CSR_INT_OCCURED_MASK | XTC_CSR_LOAD_MASK ); /* Enable timer and uart interrupt in the interrupt controller */ XIntc_mEnableIntr(XPAR_OPB_INTC_0_BASEADDR, XPAR_OPB_TIMER_1_INTERRUPT_MASK | XPAR_RS232_UART_INTERRUPT_MASK); /* Start the timers */ XTmrCtr_mSetControlStatusReg(XPAR_OPB_TIMER_1_BASEADDR, 0, XTC_CSR_ENABLE_TMR_MASK | XTC_CSR_ENABLE_INT_MASK | XTC_CSR_AUTO_RELOAD_MASK | XTC_CSR_DOWN_COUNT_MASK); /* Enable PPC non-critical interrupts */ XExc_mEnableExceptions(XEXC_NON_CRITICAL); /* Enable UART interrupts */ XUartLite_mEnableIntr(XPAR_RS232_UART_BASEADDR); print("Test Periferal Start!!!\r\n"); while(!dump_command) ; ptr = (int*)addr; for(offset=0; offset < 0x7ff; offset++ ) { volatile unsigned int addr = (unsigned int)ptr; volatile unsigned int value = (unsigned int)*ptr; xil_printf("%08x = %08x\r\n", addr, value ); ptr ++; } print("Test Periferal end!\r\n"); /* Wait for interrupts to occur until exit_command is asserted */ while (!exit_command) ; /* Disable PPC non-critical interrupts */ XExc_mDisableExceptions(XEXC_NON_CRITICAL); print("-- Exiting InterruptTest() --\r\n"); } int main (void) { print("-- Entering main() --\r\n"); /* * MemoryTest routine will not be run for the memory at * 0xffff0000 (plb_bram_if_cntlr_1)

49
* because it is being used to hold a part of this application /* Testing BRAM Memory (opb_bram_if_cntlr_1)*/ { XStatus status; print("Starting MemoryTest for opb_bram_if_cntlr_1:\r\n"); print(" Running 32-bit test..."); status = XUtil_MemoryTest32( (Xuint32*) XPAR_OPB_BRAM_IF_CNTLR_1_BASEADDR , 512, 0xAAAA5555, XUT_ALLMEMTESTS); if (status == XST_SUCCESS) { print("PASSED!\r\n"); } else { print("FAILED!\r\n"); } print(" Running 16-bit test..."); status = XUtil_MemoryTest16((Xuint16*) XPAR_OPB_BRAM_IF_CNTLR_1_BASEADDR, 1024, 0xAA55, XUT_ALLMEMTESTS); if (status == XST_SUCCESS) { print("PASSED!\r\n"); } else { print("FAILED!\r\n"); } print(" Running 8-bit test..."); status = XUtil_MemoryTest8((Xuint8*) XPAR_OPB_BRAM_IF_CNTLR_1_BASEADDR, 2048, 0xA5, XUT_ALLMEMTESTS); if (status == XST_SUCCESS) { print("PASSED!\r\n"); } else { print("FAILED!\r\n"); } } /* Run user-supplied interrupt test routine */ InterruptTest(); print("-- Exiting main() --\r\n"); return 0; } */

Potrebbero piacerti anche