-
Notifications
You must be signed in to change notification settings - Fork 0
Criando Modificações
[English]
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.
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.
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.
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.
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.
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.
-
- 1.1 Introduction
- 1.2 RISC-V Implementation
- 1.2.1 Available Instruction Set
- 1.2.2 Available Non-ISA Features
-
- 2.1 ALU
- 2.2 Register File
- 2.3 Program Counter
- 2.4 Input Buffer
- 2.5 RAM
- 2.6 Operation Controller
- 2.7 CSR Controller
-
- 3.1 Input Devices
- 3.1.1 Keyboard
- 3.1.2 Switches and Joystick
- 3.1.3 Random Number Generator
- 3.1.4 Real-Time Device
- 3.2 Output Devices
- 3.2.1 Screen
- 3.2.2 Terminal
- 3.2.3 Software Interrupt Register
- 3.1 Input Devices