build-sequential-circuit
정보
이 스킬은 상태 의존적 연산을 위해 플립플롭, 레지스터, 카운터와 같은 메모리 요소를 사용한 순차 논리 회로를 설계합니다. D/JK 플립플롭, 이진/BCD 카운터, 클록 타이밍 분석이 포함된 Mealy/Moore 상태 머신을 다룹니다. 회로가 과거 입력을 기억하거나, 이벤트를 세거나, 상태 의존적 제어 시퀀스를 구현해야 할 때 사용하세요.
빠른 설치
Claude Code
추천npx skills add pjt222/agent-almanac -a claude-code/plugin add https://github.com/pjt222/agent-almanacgit clone https://github.com/pjt222/agent-almanac.git ~/.claude/skills/build-sequential-circuitClaude Code에서 이 명령을 복사하여 붙여넣어 스킬을 설치하세요
문서
Build Sequential Circuit
Diseñar un circuito lógico secuencial identificando la memoria y el tipo de estado requeridos, construyendo un diagrama de estados y tabla de transiciones, derivando ecuaciones de excitación para el tipo de flip-flop elegido, implementando el circuito a nivel de compuertas usando flip-flops y lógica combinacional, y verificando la corrección mediante análisis de diagrama de temporización y simulación de secuencia de estados.
Cuándo Usar
- Un circuito debe recordar entradas pasadas o mantener estado interno entre ciclos de reloj
- Diseñar contadores (binario, BCD, anillo, Johnson), registros de desplazamiento o detectores de secuencia
- Implementar una máquina de estados finitos (Mealy o Moore) a partir de un diagrama de estados o expresión regular
- Agregar elementos de almacenamiento con reloj a un camino de datos combinacional (registros, etapas de pipeline)
- Preparar componentes con estado para la habilidad simulate-cpu-architecture (archivo de registros, contador de programa, FSM de control)
Entradas
- Requerido: Especificación de comportamiento -- una de: diagrama de estados, tabla de estados, diagrama de temporización, expresión regular a detectar, o descripción verbal del comportamiento secuencial deseado
- Requerido: Características del reloj -- disparado por flanco (subida/bajada) o sensible a nivel; reloj único o multifase
- Opcional: Preferencia de tipo de flip-flop (D, JK, T o SR)
- Opcional: Tipo de reset -- síncrono, asíncrono o ninguno
- Opcional: Conteo máximo de estados o restricción de ancho de bits
- Opcional: Restricciones de temporización (tiempo de setup, tiempo de hold, frecuencia máxima de reloj)
Procedimiento
Paso 1: Identificar Requisitos de Memoria y Estado
Determinar qué necesita recordar el circuito y cuántos estados distintos requiere:
- Enumeración de estados: Listar todos los estados distintos en los que debe estar el circuito. Para un detector de secuencia, cada estado representa el progreso a través de la secuencia objetivo. Para un contador, cada estado es un valor de cuenta.
- Codificación de estados: Elegir una codificación binaria para los estados.
- Codificación binaria: Usa ceil(log2(N)) flip-flops para N estados. Minimiza el conteo de flip-flops.
- Codificación one-hot: Usa N flip-flops, uno por estado. Simplifica la lógica de próximo estado a costa de más flip-flops.
- Codificación Gray: Los estados adyacentes difieren en exactamente un bit. Minimiza glitches transitorios durante las transiciones.
- Clasificación de entradas y salidas: Identificar entradas primarias (señales externas), salidas primarias y variables de estado internas (salidas de flip-flops). Para máquinas Mealy, las salidas dependen tanto del estado como de la entrada. Para máquinas Moore, las salidas dependen solo del estado.
- Selección de tipo de flip-flop: Elegir basado en las necesidades del diseño.
- Flip-flop D: El más simple -- el próximo estado iguala la entrada D. Mejor opción por defecto.
- Flip-flop JK: El más flexible -- J=K=1 conmuta. Bueno para contadores.
- Flip-flop T: Tipo conmutación -- cambia de estado cuando T=1. Natural para contadores binarios.
- Latch/flip-flop SR: Set-Reset -- evitar la condición S=R=1. Raramente preferido para diseños nuevos.
## State Requirements
- **Number of states**: [N]
- **State encoding**: [binary / one-hot / Gray]
- **Flip-flops needed**: [count and type]
- **Machine type**: [Mealy / Moore]
- **Inputs**: [list with descriptions]
- **Outputs**: [list with descriptions]
- **Reset behavior**: [synchronous / asynchronous / none]
Esperado: Un inventario de estados completo con codificación elegida, tipo de flip-flop seleccionado y la máquina clasificada como Mealy o Moore.
En caso de fallo: Si el conteo de estados no es claro desde la especificación, enumerar estados trazando todas las secuencias de entrada posibles hasta la profundidad de memoria del circuito. Si el conteo excede los límites prácticos (más de 16 estados para diseño manual), considerar descomponer en FSMs más pequeñas que interactúen.
Paso 2: Construir Diagrama de Estados y Tabla de Transiciones
Formalizar el comportamiento del circuito como un diagrama de estados y forma tabular equivalente:
- Diagrama de estados: Dibujar un grafo dirigido donde:
- Cada nodo es un estado, etiquetado con el nombre del estado y (para máquinas Moore) el valor de salida.
- Cada arista es una transición, etiquetada con la condición de entrada y (para máquinas Mealy) el valor de salida.
- Cada estado debe tener una arista saliente para cada combinación de entrada posible -- sin transiciones implícitas de "permanecer".
- Tabla de transiciones: Convertir el diagrama a una tabla con columnas para estado presente, entrada(s), próximo estado y salida(s).
- Verificación de alcanzabilidad: Comenzando desde el estado inicial/reset, verificar que todos los estados son alcanzables a través de alguna secuencia de entrada. Los estados inalcanzables indican un error de diseño o deben tratarse como condiciones indiferentes.
- Minimización de estados (opcional): Verificar estados equivalentes -- dos estados son equivalentes si producen la misma salida para cada entrada y transicionan a próximos estados equivalentes. Fusionar estados equivalentes para reducir el conteo de flip-flops.
## State Transition Table
| Present State | Input | Next State | Output |
|--------------|-------|------------|--------|
| S0 | 0 | S0 | 0 |
| S0 | 1 | S1 | 0 |
| S1 | 0 | S0 | 0 |
| S1 | 1 | S2 | 0 |
| ... | ... | ... | ... |
- **Unreachable states**: [list, or "none"]
- **Equivalent state pairs**: [list, or "none"]
Esperado: Una tabla de transición de estados completa cubriendo cada combinación de estado presente/entrada, con todos los estados alcanzables desde el estado inicial.
En caso de fallo: Si la tabla de transiciones tiene entradas faltantes, la especificación está incompleta. Volver a los requisitos y resolver la ambigüedad. Si existen estados inalcanzables, agregar transiciones para alcanzarlos o eliminarlos y reducir la codificación de estados.
Paso 3: Derivar Ecuaciones de Excitación
Calcular las ecuaciones de entrada de los flip-flops (ecuaciones de excitación) a partir de la tabla de transiciones:
- Codificar estados: Reemplazar los nombres de estados con su codificación binaria en la tabla de transiciones. Cada posición de bit corresponde a un flip-flop.
- Construir tabla de verdad por flip-flop: Para cada flip-flop, crear una tabla de verdad con los bits del estado presente y las entradas como columnas de entrada y la entrada requerida del flip-flop como columna de salida.
- Flip-flop D: D = bit del próximo estado (el caso más simple).
- Flip-flop JK: Usar la tabla de excitación: 0->0 requiere J=0,K=X; 0->1 requiere J=1,K=X; 1->0 requiere J=X,K=1; 1->1 requiere J=X,K=0.
- Flip-flop T: T = estado presente XOR próximo estado (T=1 cuando el bit debe cambiar).
- Minimizar cada ecuación: Aplicar evaluate-boolean-expression (mapa de Karnaugh o simplificación algebraica) a cada función de entrada de flip-flop. Las condiciones indiferentes de estados inalcanzables y las entradas X de la tabla de excitación JK pueden reducir significativamente las expresiones.
- Derivar ecuaciones de salida: Para máquinas Moore, expresar cada salida como función solo de los bits del estado presente. Para máquinas Mealy, expresar cada salida como función de los bits del estado presente y las entradas.
## Excitation Equations
- **Flip-flop type**: [D / JK / T]
- **State encoding**: [binary assignment table]
| Flip-Flop | Excitation Equation |
|-----------|------------------------------|
| Q1 | D1 = [minimized expression] |
| Q0 | D0 = [minimized expression] |
## Output Equations
| Output | Equation |
|--------|------------------------------|
| Y | [minimized expression] |
Esperado: Ecuaciones de excitación minimizadas para cada flip-flop y ecuaciones de salida para cada salida primaria, con todas las condiciones indiferentes explotadas.
En caso de fallo: Si las ecuaciones de excitación parecen demasiado complejas, reconsiderar la codificación de estados. Una codificación diferente (ej., cambiar de binaria a one-hot, o reasignar códigos de estado) puede simplificar dramáticamente la lógica combinacional. Probar al menos dos codificaciones y comparar los conteos de literales.
Paso 4: Implementar a Nivel de Compuertas
Construir el circuito completo a partir de flip-flops y compuertas lógicas combinacionales:
- Colocar flip-flops: Instanciar un flip-flop por bit de estado. Conectar todas las entradas de reloj al reloj del sistema. Conectar entradas de reset si se especifica (reset asíncrono va directamente al pin CLR/PRE del flip-flop; reset síncrono es parte de la lógica de excitación).
- Construir lógica de excitación: Implementar cada ecuación de excitación como un circuito combinacional usando la habilidad design-logic-circuit. Las entradas a esta lógica son las salidas de los flip-flops del estado presente (Q, Q') y las entradas primarias.
- Construir lógica de salida: Implementar cada ecuación de salida como lógica combinacional. Para máquinas Moore, esta lógica toma solo bits de estado. Para máquinas Mealy, toma bits de estado y entradas primarias.
- Conectar el circuito: Cablear las salidas de la lógica de excitación a las entradas D/JK/T de los flip-flops. Cablear la lógica de salida a las salidas primarias.
- Agregar inicialización: Asegurar que el circuito alcance un estado inicial conocido al encenderse. Esto típicamente significa un reset asíncrono que fuerza todos los flip-flops a 0 (o al estado inicial codificado).
## Circuit Implementation
- **Flip-flops**: [count] x [type], [edge type]-triggered
- **Combinational gates for excitation**: [count and types]
- **Combinational gates for output**: [count and types]
- **Total gate count**: [flip-flops + combinational gates]
- **Reset mechanism**: [asynchronous CLR / synchronous mux / none]
Esperado: Un netlist completo a nivel de compuertas con flip-flops, lógica de excitación, lógica de salida, distribución de reloj y mecanismo de reset, donde cada señal tiene exactamente un controlador.
En caso de fallo: Si la implementación tiene realimentación fuera de los flip-flops, se ha introducido un lazo combinacional. Toda realimentación en un circuito secuencial síncrono debe pasar a través de un flip-flop. Rastrear la ruta ofensora y redirigirla a través de un registro.
Paso 5: Verificar mediante Diagrama de Temporización y Simulación de Secuencia de Estados
Confirmar que el circuito se comporta correctamente a través de múltiples ciclos de reloj:
- Elegir secuencia de prueba: Seleccionar una secuencia de entrada que ejercite cada transición de estado al menos una vez. Para detectores de secuencia, incluir la secuencia objetivo, coincidencias parciales, coincidencias superpuestas y ejecuciones sin coincidencia.
- Dibujar diagrama de temporización: Para cada ciclo de reloj, registrar:
- Flanco de reloj (subida/bajada)
- Valores de entrada primaria (muestreados en el flanco activo del reloj)
- Estado presente (salidas de flip-flops antes del flanco de reloj)
- Próximo estado (salidas de flip-flops después del flanco de reloj)
- Valores de salida (válidos después de que la lógica de salida se estabiliza)
- Trazar secuencia de estados: Verificar que la secuencia de estados coincide con el diagrama de estados del Paso 2. Cada transición debe seguir una arista en el diagrama.
- Verificar restricciones de temporización: Verificar que:
- Tiempo de setup: Las entradas son estables durante al menos t_setup antes del flanco activo del reloj.
- Tiempo de hold: Las entradas permanecen estables durante al menos t_hold después del flanco activo del reloj.
- Retardo reloj-a-salida: Las salidas se estabilizan dentro del período de reloj menos el tiempo de setup de la lógica descendente.
- Verificación de reset: Confirmar que aplicar reset lleva el circuito al estado inicial independientemente del estado actual.
## Timing Verification
| Cycle | Clock | Input | Present State | Next State | Output |
|-------|-------|-------|---------------|------------|--------|
| 0 | rst | - | - | S0 | 0 |
| 1 | rise | 1 | S0 | S1 | 0 |
| 2 | rise | 1 | S1 | S2 | 0 |
| ... | ... | ... | ... | ... | ... |
- **All transitions match state diagram**: [Yes / No]
- **Setup/hold violations**: [None / list]
- **Reset verified**: [Yes / No]
Esperado: Cada ciclo en el diagrama de temporización coincide con la tabla de transición de estados, las salidas son correctas para cada ciclo y no hay violaciones de temporización presentes.
En caso de fallo: Si una transición de estado es incorrecta, rastrear la lógica de excitación para esa combinación específica de estado presente y entrada. Si las salidas son incorrectas pero las transiciones son correctas, el error está en la lógica de salida. Si el circuito entra en un estado no intencional, verificar reset incompleto o transiciones faltantes desde códigos de estado no utilizados.
Validación
- Todos los estados están enumerados y son alcanzables desde el estado inicial
- La codificación de estados está documentada con la tabla de asignación
- La tabla de transiciones cubre cada combinación de estado presente/entrada
- Las ecuaciones de excitación están minimizadas con condiciones indiferentes explotadas
- Las ecuaciones de salida implementan correctamente la semántica Mealy o Moore
- Cada flip-flop tiene entradas de reloj, reset y excitación conectadas
- No existen lazos de realimentación combinacional fuera de los flip-flops
- El diagrama de temporización cubre todas las transiciones de estado al menos una vez
- El reset lleva el circuito al estado inicial documentado
- Las restricciones de tiempo de setup y hold se satisfacen
Errores Comunes
- Transiciones de estado incompletas: Olvidar especificar qué sucede para cada entrada en cada estado. Las transiciones faltantes a menudo causan que el circuito entre en un estado indefinido o no intencional. Siempre definir el comportamiento para todas las combinaciones de entrada.
- Códigos de estado no utilizados: Con N flip-flops, hay 2^N códigos posibles pero quizás menos estados válidos. Si el circuito accidentalmente entra en un código no utilizado (por ruido o encendido), puede bloquearse. Siempre agregar transiciones desde códigos no utilizados al estado de reset o demostrar que son inalcanzables.
- Confundir salidas Mealy y Moore: En una máquina Mealy, las salidas cambian inmediatamente cuando las entradas cambian (ruta combinacional de entrada a salida). En una máquina Moore, las salidas cambian solo en los flancos de reloj. Mezclar los dos modelos en un diseño conduce a riesgos de temporización.
- Entradas asíncronas a circuitos síncronos: Las señales externas no sincronizadas al reloj pueden violar tiempos de setup/hold, causando metaestabilidad. Siempre pasar las entradas asíncronas a través de un sincronizador de dos flip-flops antes de usarlas en la lógica de estado.
- Riesgo S=R=1 del latch SR: Activar simultáneamente Set y Reset pone al latch SR en un estado indefinido. Si se usan elementos SR, agregar lógica para garantizar que esta combinación nunca ocurra, o cambiar a flip-flops D o JK.
- Desviación de reloj en diseños multi-flip-flop: Si el reloj llega a diferentes flip-flops en diferentes momentos, un flip-flop puede muestrear datos obsoletos de otro. Para diseños introductorios, asumir desviación cero; para hardware real, usar síntesis de árbol de reloj.
Habilidades Relacionadas
design-logic-circuit-- diseñar los bloques de lógica combinacional de excitación y salidasimulate-cpu-architecture-- usar bloques secuenciales (registros, contadores, FSMs de control) en un camino de datos de CPUmodel-markov-chain-- las máquinas de estados finitos comparten el marco formal de las cadenas de Markov de tiempo discreto
GitHub 저장소
연관 스킬
content-collections
메타이 스킬은 콘텐츠 콜렉션(Content Collections)을 위한 프로덕션 검증된 설정을 제공합니다. 콘텐츠 콜렉션은 Markdown/MDX 파일을 Zod 검증이 포함된 타입 안전한 데이터 콜렉션으로 변환해주는 TypeScript 최우선 도구입니다. 블로그, 문서 사이트 또는 콘텐츠 중심의 Vite + React 애플리케이션을 구축할 때 타입 안전성과 자동 콘텐츠 검증을 보장하기 위해 사용하세요. Vite 플러그인 구성과 MDX 컴파일부터 배포 최적화 및 스키마 검증에 이르기까지 모든 것을 다룹니다.
polymarket
메타이 스킬은 개발자들이 Polymarket 예측 시장 플랫폼을 활용한 애플리케이션을 구축할 수 있도록 지원하며, 거래 및 시장 데이터를 위한 API 통합 기능을 포함합니다. 또한 WebSocket을 통한 실시간 데이터 스트리밍을 제공하여 실시간 거래와 시장 활동을 모니터링할 수 있습니다. 이를 통해 거래 전략을 구현하거나 실시간 시장 업데이트를 처리하는 도구를 생성하는 데 활용할 수 있습니다.
creating-opencode-plugins
메타이 스킬은 개발자들이 명령어, 파일, LSP 작업 등 25개 이상의 이벤트 유형에 연결되는 OpenCode 플러그인을 만들 수 있도록 돕습니다. JavaScript/TypeScript 모듈을 위한 플러그인 구조, 이벤트 API 명세, 구현 패턴을 제공합니다. OpenCode AI 어시스턴트의 라이프사이클을 사용자 정의 이벤트 기반 로직으로 가로채거나, 모니터링하거나, 확장해야 할 때 사용하세요.
sglang
메타SGLang은 RadixAttention 프리픽스 캐싱을 활용하여 JSON, 정규식, 에이전트 워크플로우를 위한 고속 구조화 생성에 특화된 고성능 LLM 서빙 프레임워크입니다. 특히 반복되는 프리픽스가 있는 작업에서 상당히 빠른 추론 속도를 제공하여 복잡한 구조화 출력 및 다중 턴 대화에 이상적입니다. 제약 디코딩이 필요하거나 광범위한 프리픽스 공유가 있는 애플리케이션을 구축할 때는 vLLM과 같은 대안보다 SGLang을 선택하십시오.
