Skip to content

Criando Modificações

Diogo Valadares Reis dos Santos edited this page Aug 26, 2025 · 1 revision

[English]

[← Página Anterior | Próxima Página →]

Criando Modificações

Depois de explorar a simulação e executar seus próprios programas, você pode se sentir pronto para ajustar ou expandir o sistema. Este guia mostra como fazer isso, oferecendo dicas práticas de depuração ao longo do caminho.

Antes de começar, é útil ter alguma familiaridade básica com Logisim Evolution ou SystemVerilog. O Logisim é mais acessível para experimentações rápidas, graças aos tutoriais integrados e à interface visual. Já o SystemVerilog oferece um ambiente mais robusto, com melhores ferramentas de depuração — especialmente para sistemas maiores ou mais complexos.

Adicionando Dispositivos Externos

Introduzir dispositivos externos que interagem com o processador é um ótimo ponto de partida para modificações. Seu componente deve ser capaz de enviar ou receber dados, responder a sinais de leitura/escrita e sincronizar com o clock do sistema. Incluir um sinal de reset também é uma boa ideia e, dependendo do seu design, talvez seja necessário fornecer entradas de endereço ou tamanho de dados.

O ideal é começar projetando e testando seu dispositivo de forma isolada. Quando estiver confiante de que ele se comporta corretamente, você pode conectá-lo à interface de E/S. Observar como os componentes existentes estão conectados — como o Dispositivo de Tempo Real — pode servir como referência útil.

Conexão do Dispositivo de Tempo Real

Após conectar seu dispositivo, será necessário carregar um programa que interaja com ele. Se algo não funcionar como esperado, verifique suas conexões e certifique-se de que o programa usa os endereços corretos. Se isso ainda não resolver, é hora de aprofundar com algumas técnicas de depuração.

Técnicas de Depuração

Ao depurar, às vezes a abordagem mais simples é a mais eficaz. Se seu programa for pequeno ou você conseguir visualizar quando algo dá errado, mas tiver dificuldade em pausar a simulação a tempo, desacelerar pode ajudar. No Logisim, você pode reduzir a frequência da simulação em Simulate > Auto Tick Frequency > 1Hz.

No SystemVerilog, ajustar o parâmetro CLOCK_UPDATE_TIME tem efeito semelhante, embora os logs detalhados do SV geralmente tornem isso desnecessário.

Se seu componente funcionava isoladamente mas falha quando integrado, tente testá-lo com um programa mínimo: apenas uma instrução de armazenamento ou leitura seguida de um loop infinito. Isso ajuda a isolar o problema sem a interferência de uma aplicação completa.

Para inspeções mais profundas, a análise de forma de onda é sua melhor aliada. O Logisim inclui uma ferramenta de diagrama de tempo, embora possa ser instável e causar lentidão ou travamentos. Se for usá-la, resete a simulação antes de adicionar ou remover sinais e mantenha apenas os relevantes para o problema. Também é útil incluir sinais da instrução atual, endereço, clock e barramento de E/S. Você pode alterar a forma como os valores são exibidos — hexadecimal ou decimal — para facilitar a leitura.

Diagrama de Tempo no Logisim

O SystemVerilog oferece uma inspeção de forma de onda mais estável e detalhada por meio da saída VCD. Você pode abrir o arquivo VCD no VS Code e usar a extensão VaporView para visualizar as mudanças de sinal ao longo do tempo. Os sinais podem ser adicionados manualmente pelo painel de netlist, ou você pode carregar uma visualização pré-configurada clicando com o botão direito no gráfico, selecionando load VaporView settings e escolhendo o arquivo dump.json. Essa configuração destaca os barramentos e registradores mais importantes, e você pode personalizar como os valores são exibidos para maior clareza.

Interface do VaporView

Adicionando Componentes Internos

Adicionar componentes internos é um pouco mais trabalhoso do que trabalhar com dispositivos externos, pois exige criar novos sinais de controle e interfaces personalizadas para garantir que seu componente se integre corretamente ao processador. Se você estiver implementando uma funcionalidade já definida na especificação RISC-V, o processo se torna mais direto — você não precisará se preocupar tanto com compatibilidade com o restante do sistema. Ainda assim, haverá desafios de projeto a superar.

Assim como com dispositivos externos, é recomendável começar desenvolvendo seu componente de forma isolada. Quando ele estiver funcionando como esperado, você pode começar a planejar como será conectado ao processador. Considere com quais barramentos internos ele irá interagir — como A, B, C, Imediato e PC — e se precisa se comunicar com outros componentes. Se você estiver buscando uma integração mais profunda, como a do Controlador de CSR, também será necessário definir como os sinais de controle serão gerados e quais instruções irão acioná-los.

Quando seu componente estiver pronto, o próximo passo é modificar o Controlador de Operações. Se seu componente responde a uma instrução que ainda não foi implementada, será necessário adicionar lógica de decodificação ao PLA de OPCode e expandir sua saída conforme necessário. Você também pode usar campos da instrução como funct3 ou funct7 para ajustar o comportamento do seu componente.

E se estiver introduzindo um novo sinal de controle, não se esqueça de registrá-lo antes de propagá-lo para outras partes do sistema. Isso garante sincronização adequada e evita comportamentos inesperados durante a execução.

Clone this wiki locally