• Aucun résultat trouvé

Jean-Marie Van der Maren , Ph.D

Dans le document NUMÉRO COMPLET EN PDF (Page 21-29)

Durante a etapa de definição das estratégias para implementação da arquitetura RTM na plataforma FPGA, foram identificados uma série de comportamentos que se repetem constantemente e que poderiam ser integrados em módulos pré-definidos e reusados sempre que necessários. Estes módulos foram implementados em alto nível e também possuem a sua respectiva implementação em hardware.

A partir destes módulos pré-definidos é possível descrever arquiteturas para os algo- ritmos de modelagem e migração sísmica. Existem módulos mais genéricos que estão presentes no pacote padrão, libStandard, e os módulos mais especializados do algo- ritmo RTM. Os módulos especializados podem ser encontrados nos pacotes libRTM2D e libRTM3D.

A seguir é apresentada uma descrição geral de cada um desses módulos. Primeira- mente dos módulos da biblioteca padrão e em seguida das bibliotecas especializadas.

6.2. DESCRIÇÃO DE ARQUITETURAS

Descrição da arquitetura

Síntese da melhor solução Exploração do espaço de

projeto

Validação Funcional

Parser para HDL

Validação na plataforma FPGA Bibliotecas Algoritmos de otimização Parser Ferramenta de simulação Ferramenta de síntese Plataforma FPGA alvo ambiente fastRTM

Figura 6.2 Fluxo do projeto dentro do ambiente

6.2.1 Módulos da biblioteca padrão libStandard

• FIFO: A classe FIFO simula o funcionamento de uma estrutura FIFO. As FIFOs são largamente utilizados em sistemas de processamento em stream para armazenar dados temporariamente, sincronizar o fluxo de dados e conectar módulos que trabalham em domínios de relógio diferentes. Na arquitetura da modelagem sísmica, estas FIFOs são utilizadas entre os estágios do pipeline temporal. Os dados gerados por um estágio são armazenados nas FIFOs para serem utilizados pelo estágio seguinte.

• ShiftRegisters: A classe ShiftRegisters simula o funcionamento de um registrador de deslocamento. O construtor da classe recebe o número de registradores que irão compor a estrutura. A cada simulação de ciclo de relógio o dado é deslocado. A função mais comum desses registradores de deslocamento é implementar atrasos nos dados e sinais de controle no intuito de sincronizá-los ao longo do caminho de dados.

qualquer evento de uma arquitetura. O construtor da classe recebe a quantidade de eventos que se deseja contar. Após o recebimento dos ‘n’ eventos configurados o módulo sinaliza que esta contagem foi atingida. O módulo só voltará a contar novamente após receber um sinal de reset. A função de contagem é largamente utilizada para contar escritas na memória, contar linhas, slices e planos processados. • RegionMatch: A classe RegionMatch é responsável por sinalizar quando algum

índice está dentro de um intervalo configurado previamente. Por exemplo, pode-se configurar um módulo deste tipo para sinalizar quando o índice de um contador for maior do que 2 e menor que 10. Sendo assim, sempre que o índice do contador estiver neste intervalo, este fato será sinalizado através de um sinal de saída do módulo. Esta função pode ser utilizada em uma arquitetura quando se deseja realizar alguma ação especial quando os dados úteis estiverem sendo processados, por exemplo.

• BooleanOperator: A classe BooleanOperator é responsável por implementar as principais operações booleanas. Ao chamar o construtor do módulo o usuário define o número de entradas e a operação booleana desejada. Atualmente o módulo da suporte as operações AND, OR, XOR e NOT.

• Register: A classe Register simula o comportamento de um registrador. O constru- tor desta classe recebe como parâmetro o número de bits do componente que se deseja criar. Todos os dados dentro da arquitetura são armazenados em registra- dores. A classe oferece conversão dos dados para vários tipos como float ou int quando a largura de bits do registrador for igual a 32, por exemplo.

• Port: Toda a interface dos módulos utilizados no modelo é feita através de portas. A classe Port é capaz de simular o comportamento de portas de entrada e de portas de saída. A direção e o número de bits de uma porta é definido em seu construtor. Portas de entrada são sempre atualizadas por uma porta de saída que está conectada a ela através da classe Connection. As portas de saída são sempre atualizadas quando o método updatePorts do módulo que contém a porta é executado. Toda porta de saída possui uma coleção de instâncias da classe Connection. Cada uma dessas instâncias representa a conexão daquela porta de saída com alguma outra porta de entrada. Sempre que uma porta de saída é atualizada a porta de entrada associada através de uma instância da classe Connection também é atualizada.

6.2. DESCRIÇÃO DE ARQUITETURAS

• Connection: A classe Connection representa a interconexão de uma porta de saída com uma porta de entrada.

• MultiportPort: A classe MultiportPort simula o comportamento de uma porta do módulo Multiport. Cada porta possui os seguintes atributos: um endereço inicial que simula um endereço físico da memória, de onde os dados começarão a ser lidos ou escritos; uma direção (entrada ou saída); e um índice que indica a posição da memória que está sendo lida ou escrita no momento. A classe possui também um método de start, que retorna o índice de leitura ou de escrita para a posição do endereço inicial.

• Multiport: A classe Multiport é a abstração em alto nível do módulo Multiport

descrito na Seção5.1.2. Como o Multiport é única interface com a memória RAM

do sistema, todo algoritmo deve instanciar pelo menos um Multiport tanto para ler como para escrever dados. Os dados que serão lidos pelo algoritmo são fornecidos para a instância da classe Multiport através de um arquivo de entrada. Este arquivo de entrada simula o conteúdo da memória no início do processamento. No final do processamento, os dados escritos na interface Multiport são também escritos em um arquivo de saída e refletem o conteúdo da memória no instante em que a execução foi finalizada. Cada instância da classe Multiport possui uma coleção de instâncias da classe MultiportPort, onde cada uma delas representa uma porta do módulo.

6.2.2 Módulos das bibliotecas libRTM2D e libRTM3D

• FIFOShiftRegisters: A classe FIFOShiftRegisters simula o comportamento do

módulo FIFO e registradores de deslocamento apresentado na Seção 5.1.2. A

classe implementada no modelo permite que alguns parâmetros sejam modificados e a estrutura se adapte automaticamente a estas modificações. É possível modificar a ordem espacial do problema, o número de elementos de processamento que serão alimentados pela estrutura e o tamanho máximo das FIFOs internas, que impactam no tamanho máximo dos problemas que podem ser processados pelo algoritmo. A exploração destes parâmetros pode ser utilizada para encontrar a solução de melhor

desempenho através da exploração de espaço de projeto proposta na Seção7.2.4.

• WavePropagationPE: A classe WavePropagationPE simula o funcionamento do elemento de processamento que implementa a equação de propagação da onda.

Esta classe obedece a interface do elemento de processamento apresentado na

Seção5.1.1. Internamente a classe simula o pipeline existente no elemento de

processamento. A profundidade do pipeline simulado é configurada através de um parâmetro.

• ProcessingBlock: A classe ProcessingBlock simula o comportamento de um estágio do pipeline temporal. Esta estrutura agrupa os elementos de processamento, o módulo de FIFOs e registradores de deslocamento para alimentar estes elementos de processamento e os módulos de inserção do pulso sísmico.

Utilizando os módulos apresentados nesta Seção é possível construir módulos mais complexos que irão implementar o controle e o fluxo de dados dos algoritmos RTM. A

Figura6.3apresenta um exemplo de um módulo de controle da arquitetura 2D que utiliza

as classes EventCounter e BooleanOperation para implementar um contador de escrita de dados iguais a zero, necessários durante o processo de inicialização do algoritmo. A lógica booleana é utilizada para garantir que a contagem seja feita no momento correto, ou seja, quando o algoritmo já estiver sido inicializado (sinal i_start) e a própria contagem ainda não tiver terminado (sinal w_end_init_zeros).

rst i_num_events i_event o_end_events init_zeros_counter (event_counter) i_start !w_end_init_zeros w_step_init_zeros w_end_writes w_end_init_zeros p_num_rows o_step_init_zeros init_zeros_control o_end_init_zeros

Figura 6.3 Módulo de controle da inicialização que utiliza as classes EventCounter e BooleanO- peration

Novos módulos criados através do ambiente fastRTM, como o da Figura6.3, podem

ser posteriormente catalogados e passarem a fazer parte da biblioteca de componentes do algoritmo RTM. A descrição da arquitetura da modelagem sísmica 2D utilizando o

ambiente fastRTM é apresentada na Seção7.2.1.

A próxima Seção esclarece como funciona o processo de simulação dentro do am- biente após terem sido feitas a descrição de uma arquitetura utilizando os módulos mencionados nesta Seção.

Dans le document NUMÉRO COMPLET EN PDF (Page 21-29)

Documents relatifs