Projeto de um controlador de interrupção programável em VHDL: 4 etapas
Projeto de um controlador de interrupção programável em VHDL: 4 etapas
Anonim
Projeto de um controlador de interrupção programável em VHDL
Projeto de um controlador de interrupção programável em VHDL

Estou impressionado com o tipo de respostas que recebo neste blog. Obrigado pessoal por visitar meu blog e me motivar a compartilhar meu conhecimento com vocês. Desta vez, vou apresentar o design de outro módulo interessante que vemos em todos os SOCs - Controlador de Interrupção.

Estaremos projetando um controlador de interrupção programável simples, mas poderoso. É um design completamente configurável e parametrizado que pode ser usado em várias plataformas. Eu projetei isso depois de ler muito sobre algumas arquiteturas de controlador de interrupção populares por aí, como NVIC, 8259a, RISC-V PLIC, Microblaze's INTC etc. Espero que vocês achem este blog útil e ajude a entender como as interrupções são tratadas por um processador com a ajuda de um controlador de interrupção.

Etapa 1: Especificações

A seguir estão as especificações do IP:

  • Interface AHB3-Lite.
  • Parâmetros configuráveis estaticamente:

    • Nº de fontes externas de interrupção; suporta até 63 interrupções.
    • Nº de níveis de prioridade; suporta até 63 níveis.
    • Nº de níveis de aninhamento; suporta até 8 níveis de aninhamento. 
    • Largura do ônibus; 32 ou 64.
  • Interrupções mascaráveis global e localmente.
  • Nível de prioridade configurável dinamicamente para cada interrupção.
  • Dois modos de operação - modo totalmente aninhado e modo de prioridade igual.
  • Suporta interrupções sensíveis de alto nível ativo.

O mecanismo de handshaking de interrupção inspirado nas especificações RISC-V PLIC é usado no design.

A preempção de interrupção é inspirada em 8259a

Outras leituras: Microblaze INTC, NVIC

Etapa 2: Visão geral do PIC

Visão geral do PIC
Visão geral do PIC

O controlador de interrupção programável (PIC) recebe várias interrupções de periféricos externos e as mescla em uma única saída de interrupção para um núcleo de processador de destino.

O PIC é controlado por meio de registros de controle e status. Todos os registros PIC são mapeados na memória e acessados por meio da interface de barramento AHB3-Lite.

O banco de registros consiste em registro de configuração, registros de habilitação, registros pendentes, registros em serviço, registros de prioridade e registro de ID, que são típicos em controladores de interrupção.

O registro de configuração é usado para definir o modo de operação do PIC. Ele pode funcionar no modo Fully Nested ou no modo de prioridade igual.

Cada interrupção pode ter prioridades atribuídas e mascaradas individualmente. O mascaramento global de todas as interrupções também é suportado.

O banco de registros interage com o Resolvedor de Prioridades e o BTC (Binary-Tree-Comparator) para resolver as prioridades das interrupções pendentes e declarar a interrupção para o processador de acordo. O registro de ID contém o ID da interrupção pendente de maior prioridade.

Etapa 3: Projeto e implementação RTL

Projeto e implementação RTL
Projeto e implementação RTL

O estresse do projeto do PIC é reduzir a latência de resolução de prioridades, que é a parte mais crítica do tempo do projeto. Como o design resolve as prioridades em um único ciclo de clock, o desempenho diminui com o aumento do número de fontes com complexidade Log2.

O design foi implementado com sucesso e o tempo verificado até as seguintes frequências nos FPGAs Artix-7.

  • Até 15 fontes: 100 MHz
  • Até 63 fontes: 50 MHz

A latência de interrupção adicionada apenas pelo PIC é de 3 ciclos de clock (excluindo o tempo de mudança de contexto do processador e o tempo de busca da primeira instrução ISR).

Etapa 4: notas importantes e arquivos anexados

Anotações importantes:

  • Se a interface AHB3-Lite for indesejada, você pode alterar o módulo superior e usar o design de esqueleto do PIC. No entanto, a bancada de teste fornecida é para IP com interface AHB3-Lite.
  • O PIC IP v1.0 é um design RTL simples e totalmente portátil.
  • Verificado funcionalmente para funcionar em ambos os modos.

Arquivos anexados:

  • Códigos de projeto e teste em VHDL.
  • Documentação Full IP.

É um design de código aberto … Sinta-se à vontade para usar …

Para qualquer dúvida, a qualquer momento:

Mitu Raj