os processadores Nios® II Classic e Nios II Gen2 são compatíveis com binários, mas houve algumas pequenas alterações na funcionalidade de HAL e cache, por isso é recomendável que os BSPs e o software sejam re-construídos com ferramentas/bibliotecas a partir da versão mais recente (v14.0), e se a configuração do processador contiver um cache de dados, que o uso de transações de memória não acessada em todos os softwares do usuário seja revisado.
Regiões de memória não atingidas
Quando um processador com cache de dados emite uma leitura e os dados não estão no cache, o cache geralmente carregará um pequeno bloco ou uma "linha" de dados da memória para o cache. Quando o processador emite uma gravação, o novo valor geralmente é armazenado no cache de dados; com um cache de dados de gravação de volta (por exemplo, como no processador Nios II), os novos valores de dados são gravados apenas no local físico real quando o cache é liberado ou os dados são despejados do cache. Este tipo de operação não é aceitável para regiões de memória em que os dados devem ser escritos imediatamente para o hardware para efetuar a função/operação desejada (por exemplo, memória compartilhada ou gravações em registros de controle periférico/hardware). Isso significa que os desenvolvedores são obrigados a limpar o cache imediatamente ou usar uma operação de memória que ignora o cache e vai diretamente/imediatamente para o hardware (preferido). Às vezes, pode haver outras razões pelas quais o desenvolvedor não deseja que os dados sejam armazenados em cache (por exemplo, se os dados nunca devem ser lidos de volta e/ou se não for desejável excluir outros dados do cache por desempenho ou outras razões).
Com o bypass de cache do processador Nios II Classic pode ser alcançado usando instruções especiais de leitura/gravação de E/S (por exemplo, ldwio/stwio), configurando bit-31 no endereço de memória do endereço de leitura/gravação ou implementando uma MMU/MPU e configurando-a adequadamente. (Nota: as opções MMU e bit-31 são mutuamente exclusivas)
Nios II núcleos Gen2 oferecem os mesmos mecanismos para bypass de cache, mas a implementação é um pouco diferente e pode ser um problema potencial com a migração de software Nios II Classic para Nios II Gen2.
Se o processador Nios II Classic realizar uma gravação sem alcance e o local da memória (e, portanto, a linha de cache associada) estiver presente no cache de dados, o novo valor de dados também será gravado no cache (apesar de ser uma gravação não alcançada). Isso significa que os dados no cache estão sempre atualizados e, se o projeto do software fizer com que regiões de memória não atingidas seja carregada no cache, não há perda de coerência de dados. Portanto, o processador Nios II Classic também pode suportar regiões de memória sem alcance de qualquer tamanho e qualquer alinhamento de endereço (pois permite a mistura de regiões de memória em cache e inalcançadas na mesma linha de cache). Isso não é verdade para núcleos Nios II Geração2.
No núcleo Nios II do processador Gen2, transações sem acesso realmente ignoram o cache de dados e o conteúdo do cache não são atualizados (prática padrão para a maioria dos processadores). Se uma região de memória não acessada compartilhar uma linha de cache com uma região em cache, a região não acessada será mapeada no cache e poderá ser atualizada com dados antigos/de lixo quando o cache for liberado. Os desenvolvedores devem garantir que as regiões de memória não atingidas e em cache estejam claramente separadas e não compartilhem a mesma linha de cache quando mapeadas no cache. Isso é alcançado garantindo que as regiões de memória não atingida estejam alinhadas ao tamanho da linha de cache de dados (32 bytes) e sejam do tamanho de uma ou mais linhas de cache de dados (múltiplos de 32 bytes). Isso impede a mistura de dados cacheáveis e não cacheáveis na mesma linha de cache e, portanto, a gravação de dados inválidos/estagnados. A boa prática de projeto recomenda que os endereços básicos dos conjuntos de registro periférico estejam alinhados com os limites da linha de cache de dados e que os drivers usem as instruções de gravação de leitura de E/S de bypass de cache , portanto, é improvável que sejam necessárias modificações em drivers. Outros softwares que usam regiões de bypass de cache/memória não acessada devem ser verificados cuidadosamente para garantir que as linhas de cache não mapeem para regiões que contêm dados armazenados em cache ou não.
Nota: o software que usa o recurso de bypass de cache bit-31 não funcionará mais se a opção de intervalo de endereços de 32 bits da Nios II Gen2 for selecionada, as instruções de E/S de bypass de cache ou a região de memória periférica deve ser usada em seu lugar.
Novos recursos
Os desenvolvedores devem considerar os efeitos potenciais do uso da nova gama de endereços de 32 bits e das opções de região de memória periférica, caso a configuração de hardware seja alterada para usá-las. O software deve ser modificado para suportar esses recursos ou detectá-los e emitir mensagens de erro.
O software que usa o recurso de bypass de cache bit-31 não funcionará mais se a opção de intervalo de endereços de 32 bits da Gen2 for selecionada, as instruções de E/S de e/S de cache ou a região de memória periférica devem ser usadas em vez disso.
Se a opção Nios II Classic ECC foi suportada no software original, ela precisará ser estendida para incluir as memórias adicionais suportadas pelo processador Nios II Gen2.