📚 Pré-requisitos Teóricos: este projeto aplica conceitos ensinados em Módulo 01: Fundamentos da Computação. Recomendado revisar antes de começar.

💻 Simulador de ULA & Conversor de Bases Numéricas

v1.0 — Portas Lógicas, Circuitos Aritméticos e Aritmética Binária

Trilha de Especialização Pedagógica — Projeto 1 de 4

🎓 Nível Profissional Simulado: Estagiário de Engenharia de Software. Todo programador de alto nível precisa entender o que acontece quando o código vira zeros e uns. Saber como a ULA calcula somas em complemento de dois e lida com Overflow e Carry evita bugs clássicos de estouro de memória em produção.


🎯 Objetivo & Escopo do Projeto

Construir um Simulador de Unidade Lógica e Aritmética (ULA) de 8 bits e um conversor de bases numéricas (Binário, Octal, Decimal e Hexadecimal), implementando operações booleanas elementares (AND, OR, XOR, NOT), soma em complemento de dois e cálculo atômico de flags de status (Zero, Negative, Carry e Overflow).


🧑‍💼 Fase 1 — Levantamento de Requisitos

O Briefing do Cliente (Professor Coordenador de Arquitetura)

“Preciso de um simulador didático para o laboratório de hardware. Os alunos precisam inserir dois operandos em formato decimal, binário ou hexadecimal, selecionar a operação da ULA (ADD, SUB, AND, OR, XOR) e visualizar tanto o resultado em todas as bases quanto o estado exato das 4 flags de registradores (Zero, Negative, Carry, Overflow). O sistema não pode usar operadores prontos de alto nível sem controle de 8 bits.”

Requisitos Funcionais (RF) e Não-Funcionais (RNF)

ID Tipo Descrição Origem no Briefing
RF01 Funcional Executar operações aritméticas (Soma, Subtração) em registradores de 8 bits (0 a 255). “selecionar a operação da ULA”
RF02 Funcional Executar operações lógicas bit a bit (AND, OR, XOR, NOT). “operações booleanas elementares”
RF03 Funcional Calcular e atualizar as 4 flags de status (Z, N, C, V) a cada operação. “estado exato das 4 flags”
RF04 Funcional Converter e exibir o resultado nas bases Decimal, Binária (8 bits) e Hexadecimal (2 dígitos). “visualizar o resultado em todas as bases”
RNF01 Não-Funcional Operações bitwise puras com máscara de barramento 0xFF. Arquitetura de 8 bits
RNF02 Não-Funcional Código desacoplado e 100% testável via linha de comando (CLI). Engenharia de Software

📋 Fase 2 — Backlog & User Stories

ID User Story Prioridade
US01 Como estudante, quero converter números entre Decimal, Binário e Hexadecimal para validar exercícios. Alta
US02 Como aluno, quero somar dois números binários e saber se houve estouro de Carry ou Overflow. Alta
US03 Como professor, quero executar operações lógicas bitwise para demonstrar circuitos lógicos. Média

Quadro Kanban da Sprint

User Story To Do Doing Done
US01 — Conversão de Bases     ✅
US02 — Soma, Subtração & Flags     ✅
US03 — Operações Lógicas Bitwise     ✅

🌿 Fase 3 — Engenharia em Equipe (Git Flow & Setup)

# Criar branch da funcionalidade
git checkout -b feature/US02-ula-bitwise-flags

# Executar o simulador
python src/ula_simulator.py

Template de Pull Request


🛠️ Fase 4 — Implementação Guiada do Código

1. Núcleo da ULA de 8 Bits (src/ula_simulator.py)

class ULA8Bit:
    def __init__(self):
        self.flag_zero = False
        self.flag_negative = False
        self.flag_carry = False
        self.flag_overflow = False

    def somar(self, a, b):
        raw = a + b
        res = raw & 0xFF
        self.flag_zero = (res == 0)
        self.flag_negative = bool(res & 0x80)
        self.flag_carry = (raw > 0xFF)
        self.flag_overflow = bool(~(a ^ b) & (a ^ res) & 0x80)
        return res


🚀 Como Executar no Laboratório

1. Abra o terminal na pasta deste projeto

No seu editor/IDE, abra a pasta deste projeto (File > Open Folder) ou navegue via terminal:

cd fundamentos_01_ula_conversor

2. Execute a aplicação ou testes

# Executar comandos específicos da tecnologia:
python main.py # ou npm run dev / ./gradlew build

[!TIP] Dica para execução a partir da raiz do repositório: Se você abriu o repositório completo no VS Code, basta navegar até a pasta antes de executar: cd catalogo_projetos/fundamentos_01_ula_conversor`

🧭 Decisões de Arquitetura (ADRs)


🧪 Testes de Validação & Troubleshooting

# Teste de Overflow e Carry
assert ula.somar(255, 1) == 0      # Carry = True, Zero = True
assert ula.somar(127, 1) == 128    # Overflow = True (positivo virou negativo em 2's complement)

💡 Troubleshooting (Erros Clássicos)



🏛️ Arquitetura Visual & Engenharia do Sistema

A visualização arquitetural abaixo detalha a separação de responsabilidades e o fluxo de dados implementado na subpasta cli-python/:

Arquitetura da Aplicação

flowchart TD
    subgraph Entrada["Camada de Entrada & CLI"]
        IN1["Interface de Comando / API"] --> IN2["Parser & Sanitização"]
    end
    subgraph Dominio["Camada de Domínio & Regras"]
        DM1["Modelos de Domínio"] --> DM2["Processamento Algorítmico"]
    end
    subgraph Armazenamento["Persistência & Recursos"]
        ST1["Banco de Dados / Arquivo"] --> ST2["Transações ACID & Logs"]
    end
    subgraph Qualidade["Validação & Qualidade"]
        QA1["Testes Automatizados"] --> QA2["Checkpoints CP-01..05 PASS"]
    end

    Entrada --> Dominio
    Dominio --> Armazenamento
    Armazenamento --> Qualidade

    style Entrada fill:#e3f2fd,stroke:#1976d2,stroke-width:1.5px
    style Dominio fill:#fffde7,stroke:#fbc02d,stroke-width:1.5px
    style Armazenamento fill:#e8f5e9,stroke:#388e3c,stroke-width:1.5px
    style Qualidade fill:#f3e5f5,stroke:#7b1fa2,stroke-width:1.5px

🎯 Engenharia de Requisitos & Modelagem Formal

👤 User Stories (Histórias de Usuário)

ID Persona História de Usuário Critério de Aceite Prioridade
US-01 Estudante de Hardware Desejo simulador de portas lógicas fundamentais (AND, OR, NOT, XOR) Implementação bit a bit com máscaras binárias e lógica booleana Alta
US-02 Engenheiro de Computação Desejo simulador de Unidade Lógica e Aritmética (ULA) com somador Somador completo de 8 e 16 bits com flags de Zero, Negativo e Overflow Alta
US-03 Analista de Sistemas Desejo conversor bidirecional de bases numéricas (Bin, Oct, Dec, Hex) Algoritmos manuais de divisões sucessivas e potências sem funções prontas Alta
US-04 Professor de Arquitetura Desejo exibição passo a passo das operações em ponto fixo e complemento de dois Relatório didático no terminal mostrando carry bits e registradores Média
US-05 Auditor de Precisão Desejo testes com operações aritméticas extremas e checagem de overflow Testes unitários cobrindo estouros de capacidade e complementos de dois Média

⚙️ Requisitos Funcionais (RF)

ID Descrição do Requisito Criticidade
RF-01 Módulo de portas lógicas e somador completo (Full Adder) em software Alta
RF-02 Simulador da ULA com registradores A, B, acumulador e flags de status Alta
RF-03 Conversor aritmético manual entre bases 2, 8, 10 e 16 com frações Alta
RF-04 Interface de terminal interativa para inspeção de registradores Média
RF-05 Bateria de testes automatizados com tabela verdade de validação Média

🛡️ Requisitos Não-Funcionais (RNF)

ID Especificação Arquitetural Criticidade
RNF-01 Implementação dos cálculos manuais demonstrando os passos matemáticos Alta
RNF-02 Desempenho instantâneo nas simulações lógicas Alta
RNF-03 Código limpo, didático e ricamente documentado com diagramas lógicos Média
RNF-04 Execução pura na Standard Library do Python 3.8+ Alta
RNF-05 Fontes consolidados na pasta cli-python/ Alta

🔗 Matriz de Rastreabilidade (RTM)

User Story Requisito Funcional Requisito Não-Funcional Módulo / Artefato de Código Status de Homologação
US-01 RF-01 RNF-01, RNF-04 cli-python/conversor.py Testado
US-02 RF-02 RNF-01, RNF-03 cli-python/conversor.py Testado
US-03 RF-03 RNF-01, RNF-04 cli-python/conversor.py Testado
US-04 RF-04 RNF-03, RNF-05 cli-python/conversor.py Testado
US-05 RF-05 RNF-01, RNF-04 cli-python/conversor.py Testado

🏁 Checkpoints de Qualidade & Homologação

Checkpoint Escopo da Validação Artefato Verificado Status
CP-01 Inicialização & Estrutura de Pastas cli-python/ PASS ✅
CP-02 Modelagem de Domínio & Regras Centrais Domain Models PASS ✅
CP-03 Persistência & Operações de I/O Storage / Data PASS ✅
CP-04 Interface de Operação & Usabilidade CLI / GUI / API PASS ✅
CP-05 Homologação com Suíte de Testes Test Suite PASS ✅