Índice:
2025 Autor: John Day | [email protected]. Última modificação: 2025-01-13 06:58
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
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
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