• No results found

juni 2018 av forsknings- og høyere utdanningsminister Iselin Nybø

In document Dokument 15:13 (2017–2018) (sider 92-110)

Tor Mikkel Wara

Besvart 27. juni 2018 av forsknings- og høyere utdanningsminister Iselin Nybø

A plataforma do desenvolvimento, utilizada neste projeto e apresentada no Capí- tulo 3, definiu o ambiente do desenvolvimento e as ferramentas disponíveis para a conceção do projeto. A plataforma de desenvolvimento é denominada XUPV2, é dotada com o dispositivo FPGA de alto desempenho XC2VP30 da família Virtex- II Pro do produtor Xilinx e é integrada nas ferramentas do desenvolvimento EDK 10.1. Para o dispositivo em causa, as ferramentas do desenvolvimento possibili- tam a construção de um SoC baseado num dos dois núcleos PPC405 embutidos no dispositivo ou no soft processador MicroBlaze desenvolvido pelo Xilinx.

O projeto implementado no âmbito desta dissertação se baseia no microprocessador PPC405. O hardware microkernel é implementado na forma de um conjunto de periféricos que possuem interface slave PLB (Processor Local Bus). Desta forma, os registos físicos ou virtuais destes periféricos são acedidos a partir do processador através das instruções de leitura ou escrita das respetivas posições da memória. A Figura 5.1 apresenta o diagrama de blocos que mostra a organização do hardware

microkernel.

O hardware microkernel é composto por três componentes: escalonador (Schedu-

ler ), controlador das interrupções que em conjunto com o escalonador proporci-

ona a unificação do espaço de prioridades das tarefas e interrupções (SIC) e o componente que contêm temporizadores dedicados para cada uma das tarefas do

ISOCM Controller SCHEDULER SPLB PPC405 MPLB INTERRUPT CONTROLLER MFSL SFSL t_enable_bit t_valid_bit TASK_N TASK_N preemption INPUTIRQ SPLB irq_arrayIRQ_N TIMERS Timer_is_setTASK_N SPLB ISOCM DSOCM BRAM block 128KB

PORTA PORTA ISOCM

DSOCM Controller BRAM block

64KB

PORTA PORTA DSOCM

Figura 5.1: Arquitetura do hardware microkernel implementado

escalonador (Timers).

Como já foi referido, os requisitos estipulados endereçam a estratégia de escalona- mento fixed-priority preemptive.

Os periféricos são criados com recurso ao wizard CIP e os respetivos procedimentos e particularidades serão apresentados nas secções posteriores. O wizard possibilita configurar IPIF que irá atuar sobre o barramento PLB (normalmente no papel do slave) e selecionar os sinais do IPIC pretendidos (interface visível do lado da lógica customizavel do utilizador). Os três componentes do hardware microkernel apresentam interface slave, acoplado ao barramento PLB, no qual o processador PPC405 atua como master. Cada um dos componentes tem o seu próprio intervalo dos endereços. O processador comunica com os componentes através das instruções de escrita e leitura das respetivas posições da memória.

Existe também um meio de interrupção do processador quando o hardware micro-

kernel requerer. A saída preemption do componente escalonador é ligada direta-

mente ao pino da interrupção externa do processador.

É utilizada a linguagem de descrição do hardware VHDL na definição da lógica cus- tomizada dos periféricos. Foi tirado o proveito das funcionalidades da modelação de alto nível, existentes nessa linguagem, para poder implementar os periféricos de forma genérica e parametrizável. Foram utilizados statements generate para replicação das estruturas e statements generics para caracterização individual da largura em bits de certos sinais, bem como do número de certas estruturas durante

a sua replicação. Os generics foram propagados ao longo da hierarquia das entida- des do projeto estrutural, sendo presentes também nas entidades do topo. Desta forma, e com o uso correto da funcionalidade de importação da ferramenta CIP, ditos parâmetros tornam-se visíveis e configuráveis a partir da interface do XPS durante a construção do SoC.

A Tabela 5.1 enumera os parâmetros visíveis a partir do XPS e que devem ser definidos pelo utilizador aquando integração do hardware microkernel num SoC.

Tabela 5.1: Parâmetros da configuração do hardware microkernel

Generic Scheduler SIC Timers Exemplo

TASK_NUMBER X X X 16

TIMERS_WIDTH X 32

EXT_INT_NUMBER X 4

EXT_INT_CONFIG X 3344

O parâmetro TASK_NUMBER é presente nos todos componentes e configura o número de tarefas que o microkernel irá suportar. Desta forma, no escalonador, este parâmetro define o numero de posições da estrutura que manuseia a informa- ção das tarefas necessária para o escalonamento e indexada pelo identificador da tarefa, o que, por sua vez, define o número de níveis da árvore binária utilizada para extração da tarefa mais prioritária. No componente timers, este parâmetro define o número de temporizadores dedicados, indexados mais uma vez pelo iden- tificador da tarefa. Já no caso do controlador das interrupções, este parâmetro não altera significativamente a estrutura interna deste, resumindo-se a definição da lar- gura dos vetores das entradas t_enable_bit e t_valid_bit utilizados para feedback do escalonador para controlador. Este parâmetro deve ser sempre definido com o valor igual à potencia de dois e os exemplos são: 8, 16, 32 (tarefas). Obviamente que o valor definido deve ser o mesmo para todos os componentes, resultando num erro do XPS no caso contrário.

O parâmetro TIMERS_WIDTH define a largura em bits dos temporizadores de- dicados. Sendo o valor por defeito igual ao 32.

O parâmetro EXT_INT_NUMBER define o número de entradas do controlador das interrupções, isto é, o número de possíveis fontes de interrupção que podem ser ligados ao controlador das interrupções. Este parâmetro não tem restrição na sua definição, sendo a única limitação a área da FPGA, que não será o problema para um número comum de interrupções externos nos sistemas embebidos.

O parâmetro EXT_INT_CONFIG configura o modo da interrupção das respeti- vas entradas. Este parâmetro é compreendido num número inteiro, em que cada digito corresponde ao modo da interrupção de uma entrada (o número dos dígi- tos deve corresponder ao número das entradas). O digito mais a esquerda (mais significativo) corresponde ao fonte da interrupção com índice 0, o próximo digito - fonte com índice 1, e por aí em diante. O controlador das interrupções imple- menta quatro modos da interrupção: “1” - nível alto, “2” - nível baixo, “3” - flanco ascendente, “4” - flanco descendente. Assim sendo, para o caso exemplificado na tabela, o controlador das interrupções irá ter quatro fontes de interrupção (en- tradas), entre quais: irq_array(0) e irq_array(1) seráo configurados com o modo flanco ascendente, enquanto irq_array(2) e irq_array(3) - flanco descendente.

In document Dokument 15:13 (2017–2018) (sider 92-110)