📚 Pré-requisitos Teóricos: este projeto aplica conceitos ensinados em Módulo 01: Fundamentos da Computação. Recomendado revisar antes de começar.
v1.0 — Portas Lógicas, Circuitos Aritméticos e Aritmética Binária
Trilha de Especialização Pedagógica — Projeto 1 de 4
- ➡️ v1 (este): Fundamentos de Hardware · Simulação de ULA 8-bit · Flags de Status · Conversor de Bases
- v2: Máquina de Turing · Autômatos Finitos Determinísticos (DFA)
- v3: Pipeline RISC-V · Decodificação de Instruções
- v4: Emulador de CPU 8-bit Completo com Memória RAM e Barramento
🎓 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.
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).
“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.”
| 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 |
| 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 |
| User Story | To Do | Doing | Done |
|---|---|---|---|
| US01 — Conversão de Bases | ✅ | ||
| US02 — Soma, Subtração & Flags | ✅ | ||
| US03 — Operações Lógicas Bitwise | ✅ |
# Criar branch da funcionalidade
git checkout -b feature/US02-ula-bitwise-flags
# Executar o simulador
python src/ula_simulator.py
ULA8Bit com soma em complemento de dois e cálculo de flags Z/N/C/V.python -m unittest discover tests/| Checklist: [x] Sem dependências externas | [x] Máscara 0xFF aplicada | [x] ADR 001 documentada |
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
No seu editor/IDE, abra a pasta deste projeto (File > Open Folder) ou navegue via terminal:
cd fundamentos_01_ula_conversor
# 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`
# 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)
& 0xFF em todas as saídas de registradores.A visualização arquitetural abaixo detalha a separação de responsabilidades e o fluxo de dados implementado na subpasta cli-python/:
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
| 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 |
| 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 |
| 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 |
| 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 |
| 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 ✅ |