MCP HubMCP Hub
스킬 목록으로 돌아가기

design-logic-circuit

pjt222
업데이트됨 2 days ago
3 조회
17
2
17
GitHub에서 보기
디자인design

정보

이 스킬은 기능적 명세서부터 게이트 수준 구현까지 조합 논리 회로를 설계합니다. 표준 논리 게이트, NAND/NOR 범용 변환, 멀티플렉서, 디코더, 가산기와 같은 기본 구성 요소를 다룹니다. 부울 함수나 진리표를 하드웨어로 구현 가능한 게이트 네트워크로 변환하고, 완전한 시뮬레이션을 통해 검증해야 할 때 사용하세요.

빠른 설치

Claude Code

추천
기본
npx skills add pjt222/agent-almanac -a claude-code
플러그인 명령대체
/plugin add https://github.com/pjt222/agent-almanac
Git 클론대체
git clone https://github.com/pjt222/agent-almanac.git ~/.claude/skills/design-logic-circuit

Claude Code에서 이 명령을 복사하여 붙여넣어 스킬을 설치하세요

문서

Design Logic Circuit

Traducir una especificación funcional en un circuito lógico combinacional definiendo entradas y salidas, derivando una expresión booleana mínima, mapeándola a un esquemático a nivel de compuertas, opcionalmente convirtiendo a una base de compuertas universales (solo NAND o solo NOR), y verificando la corrección mediante simulación exhaustiva contra la tabla de verdad original.

Cuándo Usar

  • Implementar una función booleana como una red de compuertas física o simulada
  • Diseñar bloques de construcción combinacionales estándar (sumadores, multiplexores, decodificadores, comparadores)
  • Convertir una red de compuertas arbitraria a forma solo-NAND o solo-NOR por restricciones de fabricación
  • Enseñar o revisar diseño de lógica digital desde especificación hasta esquemático
  • Preparar los componentes combinacionales del camino de datos necesarios para build-sequential-circuit o simulate-cpu-architecture

Entradas

  • Requerido: Especificación funcional -- una de: tabla de verdad, expresión booleana, descripción verbal del comportamiento entrada/salida, o un nombre de bloque estándar (ej., "sumador de acarreo en cascada de 4 bits")
  • Requerido: Biblioteca de compuertas objetivo -- sin restricción (AND/OR/NOT), solo-NAND, solo-NOR, o una biblioteca de celdas estándar específica
  • Opcional: Objetivo de optimización -- minimizar conteo de compuertas, minimizar retardo de propagación (camino crítico), o minimizar fan-out
  • Opcional: Restricción máxima de fan-in (ej., solo compuertas de 2 entradas)
  • Opcional: Condiciones de no importa para entradas que nunca ocurrirán

Procedimiento

Paso 1: Especificar la función del circuito

Definir la interfaz y el comportamiento del circuito completamente antes de cualquier síntesis:

  1. Señales de entrada: Listar todas las señales de entrada con sus nombres, anchos de bit y rangos válidos. Para entradas multi-bit, especificar el ordenamiento de bits (MSB primero o LSB primero).
  2. Señales de salida: Listar todas las señales de salida con sus nombres y anchos de bit.
  3. Tabla de verdad: Escribir la tabla de verdad completa mapeando cada combinación de entrada a las salidas correspondientes. Para circuitos con muchas entradas, expresar la función algebraicamente o como conjunto de minitérminos/maxitérminos en su lugar.
  4. Condiciones de no importa: Identificar combinaciones de entrada que no pueden ocurrir en la práctica (ej., entradas BCD 1010-1111) y marcarlas como no importa.
  5. Requisitos de temporización: Notar cualquier restricción de retardo de propagación, aunque los circuitos combinacionales no tienen reloj -- la temporización aquí se refiere al peor caso de retardo de compuertas a través del camino crítico.
## Circuit Specification
- **Name**: [descriptive name]
- **Inputs**: [list with bit widths]
- **Outputs**: [list with bit widths]
- **Function**: [verbal description]
- **Truth table or minterm list**: [table or Sigma notation]
- **Don't-care set**: [d(...) or "none"]

Esperado: Una especificación completa y no ambigua donde cada combinación de entrada legal mapea exactamente a un valor de salida.

En caso de fallo: Si la especificación es ambigua (ej., casos faltantes, salidas conflictivas para la misma entrada), solicitar aclaración. No asumir no importa para entradas no especificadas a menos que se indique explícitamente.

Paso 2: Derivar la expresión booleana mínima

Obtener la expresión más simple para cada salida usando la habilidad evaluate-boolean-expression:

  1. Funciones de una salida: Para cada bit de salida, aplicar evaluate-boolean-expression para obtener la SOP mínima (o POS, dependiendo de cuál produzca menos compuertas).
  2. Optimización multi-salida: Si múltiples salidas comparten sub-expresiones comunes, identificar términos producto compartidos que puedan factorizarse. Esto reduce el conteo total de compuertas a costa de un ruteo ligeramente más complejo.
  3. Detección de XOR: Buscar patrones XOR/XNOR en la tabla de verdad (patrones de tablero de ajedrez en el mapa K). Las compuertas XOR son costosas en implementaciones solo-NAND/NOR pero eficientes en bibliotecas estándar.
  4. Registrar las expresiones: Documentar la expresión mínima para cada salida, notando el conteo de literales y el número de términos producto/suma.
## Minimal Expressions
| Output | Minimal SOP | Literals | Terms |
|--------|-------------|----------|-------|
| F1     | [expression] | [count] | [count] |
| F2     | [expression] | [count] | [count] |
- **Shared sub-expressions**: [list, if any]

Esperado: Una expresión booleana mínima para cada salida, con sub-expresiones compartidas identificadas para circuitos multi-salida.

En caso de fallo: Si las expresiones parecen no mínimas (más literales de lo esperado para la complejidad de la función), volver a ejecutar el paso del mapa K o Quine-McCluskey de evaluate-boolean-expression. Para funciones con más de 6 variables, usar Espresso o un minimizador heurístico similar.

Paso 3: Mapear al esquemático a nivel de compuertas

Convertir las expresiones booleanas en una red de compuertas lógicas:

  1. Mapeo directo (SOP): Cada término producto se convierte en una compuerta AND multi-entrada. La suma de productos se convierte en una compuerta OR alimentada por las compuertas AND. Cada variable complementada requiere una compuerta NOT (o usar NAND/NOR para absorber inversiones).
  2. Asignación de compuertas: Para cada compuerta, registrar:
    • Tipo de compuerta (AND, OR, NOT, XOR, NAND, NOR)
    • Señales de entrada (por nombre o desde la salida de otra compuerta)
    • Nombre de señal de salida
    • Fan-in (número de entradas)
  3. Descomposición de fan-in: Si una compuerta excede la restricción máxima de fan-in, descomponerla en un árbol de compuertas más pequeñas. Por ejemplo, una AND de 4 entradas con restricción de 2 entradas se convierte en dos ANDs de 2 entradas alimentando una tercera AND de 2 entradas.
  4. Notación de esquemático: Dibujar el circuito usando notación basada en texto o describir el netlist en un formato estructurado.
## Gate-Level Netlist
| Gate ID | Type | Inputs       | Output | Fan-in |
|---------|------|-------------|--------|--------|
| G1      | NOT  | A           | A'     | 1      |
| G2      | AND  | A', B       | w1     | 2      |
| G3      | AND  | A, C        | w2     | 2      |
| G4      | OR   | w1, w2      | F      | 2      |

- **Total gates**: [count]
- **Critical path depth**: [number of gate levels from input to output]

Esperado: Un netlist a nivel de compuertas completo donde cada salida puede rastrearse hasta las entradas primarias a través de una cadena de compuertas, sin entradas o salidas flotantes (no conectadas).

En caso de fallo: Si el netlist tiene cables sueltos o bucles de retroalimentación (que son inválidos en circuitos combinacionales), revisar el mapeo. Cada señal debe tener exactamente un controlador y cada entrada de compuerta debe conectarse a una entrada primaria o a la salida de otra compuerta.

Paso 4: Convertir a base de compuertas universales (Opcional)

Transformar el circuito para usar solo compuertas NAND o solo compuertas NOR:

  1. Conversión solo-NAND:
    • Reemplazar cada compuerta AND con una NAND seguida de un NOT (NAND con entradas unidas).
    • Reemplazar cada compuerta OR usando De Morgan: A + B = ((A')*(B'))' = NAND(A', B'), así que usar NOTs en las entradas y luego NAND.
    • Reemplazar cada compuerta NOT con una compuerta NAND con ambas entradas unidas: A' = NAND(A, A).
    • Empuje de burbujas: Simplificar cancelando inversiones adyacentes. Dos NOTs en serie se cancelan. Una NAND alimentando un NOT es equivalente a una AND.
  2. Conversión solo-NOR:
    • Reemplazar cada compuerta OR con una NOR seguida de un NOT.
    • Reemplazar cada compuerta AND usando De Morgan: A * B = ((A')+(B'))' = NOR(A', B').
    • Reemplazar cada compuerta NOT con NOR(A, A).
    • Aplicar empuje de burbujas para cancelar inversiones.
  3. Comparación de conteo de compuertas: Registrar el conteo de compuertas antes y después de la conversión. Las implementaciones solo-NAND y solo-NOR típicamente usan más compuertas pero simplifican la fabricación (un solo tipo de compuerta en un chip).
## Universal Gate Conversion
- **Target basis**: [NAND-only / NOR-only]
- **Gates before conversion**: [count]
- **Gates after conversion**: [count]
- **Gates after bubble-push optimization**: [count]
- **Conversion netlist**: [updated table]

Esperado: Un circuito funcionalmente equivalente usando solo el tipo de compuerta objetivo, con inversiones redundantes eliminadas mediante empuje de burbujas.

En caso de fallo: Si el circuito convertido tiene más inversiones de lo esperado, re-examinar el paso de empuje de burbujas. Un error común es olvidar que NAND y NOR son auto-duales bajo complementación -- aplicar De Morgan consistentemente desde las salidas hacia las entradas evita esto.

Paso 5: Verificar mediante simulación exhaustiva

Confirmar que el circuito produce salidas correctas para cada entrada posible:

  1. Enfoque de simulación: Para circuitos con hasta 16 entradas (65,536 combinaciones), simular cada entrada exhaustivamente. Para circuitos más grandes, usar vectores de prueba dirigidos cubriendo casos esquina, condiciones de frontera y muestras aleatorias.
  2. Propagar valores: Para cada combinación de entrada, propagar valores de señal compuerta por compuerta desde entradas hasta salidas, respetando el orden topológico (ninguna compuerta se evalúa antes de que sus entradas estén listas).
  3. Comparar contra la especificación: Verificar cada salida contra la tabla de verdad o función esperada del Paso 1. Las salidas de no importa pueden ser 0 o 1.
  4. Registrar resultados: Registrar cualquier discrepancia con la combinación de entrada fallida y la salida esperada vs. la actual.
  5. Análisis de temporización (opcional): Contar los niveles de compuerta en el camino más largo desde cualquier entrada hasta cualquier salida. Multiplicar por el retardo por compuerta para estimar el peor caso de retardo de propagación.
## Simulation Results
- **Total test vectors**: [count]
- **Vectors passed**: [count]
- **Vectors failed**: [count, with details if any]
- **Critical path**: [gate sequence, e.g., G1 -> G3 -> G7 -> G9]
- **Critical path depth**: [N gate levels]
- **Estimated worst-case delay**: [N * gate_delay]

Esperado: Todos los vectores de prueba pasan. El circuito es funcionalmente correcto y la profundidad del camino crítico está documentada.

En caso de fallo: Si algún vector falla, rastrear la ruta de señal para esa combinación de entrada compuerta por compuerta para encontrar la primera compuerta que produce una salida incorrecta. Causas comunes: un cable conectado a la entrada de compuerta incorrecta, una inversión faltante, o un error en la conversión NAND/NOR.

Validación

  • Todas las entradas y salidas están nombradas y sus anchos de bit especificados
  • La tabla de verdad o lista de minitérminos cubre todas las combinaciones de entrada legales
  • Las expresiones booleanas son mínimas (verificadas mediante mapa K o Quine-McCluskey)
  • Cada compuerta en el netlist tiene todas las entradas conectadas y exactamente una salida
  • No existen bucles de retroalimentación combinacional en el circuito
  • Las restricciones de fan-in se respetan (todas las compuertas dentro del fan-in máximo)
  • La conversión NAND/NOR (si se realizó) preserva la equivalencia funcional
  • El empuje de burbujas ha sido aplicado para eliminar inversiones redundantes
  • La simulación exhaustiva pasa para todas las combinaciones de entrada que no son de no importa
  • La profundidad del camino crítico está documentada

Errores Comunes

  • Bucles de retroalimentación combinacional: Conectar accidentalmente la salida de una compuerta de vuelta a su propia cadena de entrada crea un elemento secuencial (latch), no un circuito combinacional. Si se necesita estado, usar la habilidad build-sequential-circuit en su lugar.
  • Olvidar inversiones en la conversión NAND/NOR: El error de conversión más común es perder una compuerta NOT durante la transformación de De Morgan. Siempre aplicar empuje de burbujas sistemáticamente desde las salidas hacia las entradas, no de forma ad hoc.
  • Exceder fan-in sin descomposición: Una compuerta AND de 5 entradas no está disponible en una biblioteca de 2 entradas. Descomponer en un árbol balanceado para minimizar el retardo de propagación, no en una cadena lineal.
  • Ignorar los no importa: No explotar las condiciones de no importa durante la minimización deja el circuito más grande de lo necesario. Siempre incluir los no importa cuando estén disponibles.
  • Confundir retardo de compuerta con retardo de cable: En diseño introductorio, el retardo de compuerta domina. En VLSI real, el retardo de cable (capacitancia de interconexión) puede exceder el retardo de compuerta. Notar esta limitación al estimar temporización.
  • Riesgos multi-salida: Cuando múltiples salidas comparten compuertas, cambiar la lógica de una salida puede afectar inadvertidamente una sub-expresión compartida. Verificar todas las salidas después de cualquier modificación, no solo la que se está cambiando.

Habilidades Relacionadas

  • evaluate-boolean-expression -- derivar la expresión booleana mínima usada como entrada para esta habilidad
  • build-sequential-circuit -- agregar elementos de estado (flip-flops) para crear circuitos secuenciales
  • simulate-cpu-architecture -- usar bloques combinacionales (ALU, mux, decodificador) como componentes del camino de datos

GitHub 저장소

pjt222/agent-almanac
경로: i18n/es/skills/design-logic-circuit
0
agentsagentskillsai-assisted-developmentclaude-codeskillsteams

연관 스킬

executing-plans

디자인

executing-plans 스킬은 검토 체크포인트가 포함된 통제된 배치로 실행할 완전한 구현 계획이 있을 때 사용합니다. 이 스킬은 계획을 불러와 비판적으로 검토한 후, 소규모 배치(기본값 3개 작업)로 작업을 실행하면서 각 배치 사이에 진행 상황을 아키텍트 검토를 위해 보고합니다. 이를 통해 내재된 품질 관리 체크포인트를 갖춘 체계적인 구현이 보장됩니다.

스킬 보기

requesting-code-review

디자인

이 스킬은 코드 변경 사항을 요구 사항에 따라 분석하기 위해 코드 리뷰어 하위 에이전트를 호출합니다. 작업 완료 후, 주요 기능 구현 후, 또는 메인 브랜치에 병합하기 전에 사용해야 합니다. 이 리뷰는 현재 구현체와 원래 계획을 비교하여 문제를 조기에 발견하는 데 도움이 됩니다.

스킬 보기

connect-mcp-server

디자인

이 스킬은 개발자들이 HTTP, stdio 또는 SSE 전송 방식을 통해 MCP 서버를 Claude Code에 연결하는 포괄적인 가이드를 제공합니다. GitHub, Notion 및 사용자 정의 API와 같은 외부 서비스를 통합하기 위한 설치, 구성, 인증 및 보안을 다룹니다. MCP 통합 설정, 외부 도구 구성 또는 Claude의 모델 컨텍스트 프로토콜 작업 시 활용하세요.

스킬 보기

web-cli-teleport

디자인

이 스킬은 작업 분석을 기반으로 개발자가 Claude Code 웹 인터페이스와 CLI 인터페이스 중 선택할 수 있도록 돕고, 두 환경 간 원활한 세션 텔레포트를 가능하게 합니다. 웹, CLI 또는 모바일 환경 전환 시 세션 상태와 컨텍스트를 관리하여 워크플로를 최적화합니다. 다양한 단계에서 서로 다른 도구가 필요한 복잡한 프로젝트에 사용하세요.

스킬 보기