Características soportadas

Kmila implementa un simulador de VHDL escrito desde cero en .NET 9. Esta página resume qué construcciones del lenguaje reconoce el motor, qué widgets ofrece el runtime visual y cómo estima el uso de recursos de FPGA. El objetivo es describir lo que está documentado en el código, sin sobrevender: Kmila cubre con solidez las construcciones más usadas en cursos y laboratorios de diseño digital.

Construcciones de VHDL

Unidades de diseño y declaraciones

El parser reconoce las estructuras de nivel superior entity, architecture, package, package body y configuration, y las declaraciones signal, constant, variable, attribute, alias, component, type y subtype. Los puertos y genéricos admiten tipos vectoriales, rangos y valores por defecto.

Tipos personalizados

Además de los tipos estándar, puedes definir tus propios tipos: enumeraciones, arreglos (array con restricciones de índice), registros (record con campos) y subtipos con restricciones. El registro de tipos alimenta la síntesis de variables, la evaluación de operaciones, la ejecución de funciones y la estimación de recursos.

Sentencias secuenciales y concurrentes

Categoría Construcciones
Control secuencial if / elsif / else, case / when, for-loop, while-loop, loop simple, exit, next, null, return
Concurrentes Asignaciones de señal, asignación condicional when…else, asignación seleccionada with…select, instanciación de componentes con port map / generic map
Generación for-generate, if-generate y generates anidados con declaraciones locales
Bloques Sentencias block con expresiones de guarda y declaraciones locales; construcciones etiquetadas
Subprogramas Funciones y procedimientos con parámetros, variables locales y cuerpos con sentencias secuenciales
Temporización / verificación Cláusula after con unidades de tiempo, wait for, report, assert

Tipos de dato

std_logic, std_logic_vector, std_ulogic, std_ulogic_vector, bit, bit_vector, boolean, boolean_vector, integer, integer_vector, natural, positive, signed, unsigned, character, string, time y real.

Operadores y expresiones

  • Aritméticos: +, -, *, /, mod, **
  • Lógicos y de desplazamiento: and, or, xor, nand, nor, xnor, not, sll, srl, sla, sra, rol, ror
  • Relacionales: =, /=, <, >, <=, >=
  • Otros: concatenación &, agregados como (others => '0'), acceso indexado a vectores y slices, y llamadas a función dentro de expresiones de rango (p. ej. clog2(N)).

Atributos

El motor rastrea durante la simulación 'event, 'last_value, 'stable y 'active. El parser reconoce además atributos de vector como 'length, 'range, 'high, 'low, 'left, 'right, 'quiet y 'transaction, y las detecciones de flanco rising_edge / falling_edge.

Librerías IEEE

Un compilador de librerías dedicado resuelve las cláusulas use IEEE.* y provee las funciones estándar de std_logic_1164, numeric_std y math_real (conversiones, resize, desplazamientos, funciones matemáticas), de modo que no necesitas declararlas manualmente.

El motor de simulación se verifica de forma sistemática contra GHDL. Consulta el benchmark para el detalle de cobertura y resultados.

Runtime visual

Más allá de las formas de onda, Kmila incluye un lienzo de hardware virtual donde enlazas los puertos de tu diseño a componentes interactivos: pulsas un botón y ves encenderse un LED, en lugar de leer ondas después. El runtime ofrece doce widgets:

LED, Botón, Switch, Multi-Switch (DIP de 2 a 8 palancas), arreglo de LEDs, matriz de LEDs 3×3 (monocromo), matriz RGB 3×3, display de 7 segmentos, Buzzer / Piezo (con Web Audio), teclado matricial (keypad), LCD HD44780 (2×16 / 4×20, modos 4-bit / 8-bit / texto) y motor paso a paso (stepper de 4 fases).

El lienzo se abre como una pestaña del editor —Código · Bloques · Step replay · Visual— o por URL directa, y se puede exportar a SVG, PNG y PDF, además de grabar video de la sesión.

Estimación de recursos de FPGA

Aunque Kmila no requiere hardware, sí te dice cuánto ocuparía tu diseño en una FPGA real. Tras la síntesis, un estimador analiza cada entidad y reporta:

Recurso Cómo se estima Precisión documentada
Flip-flops Cuenta las señales asignadas en procesos con reloj (rising_edge / falling_edge) ~95 %
LUTs A partir de la lógica combinacional ~60–80 % (depende de la síntesis)
DSP, BRAM, I/O, dominios de reloj Análisis por entidad Estimación

Puedes elegir un dispositivo objetivo entre 34 perfiles de FPGA incluidos, que cubren AMD/Xilinx Spartan-6 y Artix-7, Intel/Altera Cyclone IV E y Lattice iCE40 HX / iCE40 UltraPlus / ECP5. Un indicador en la barra de estado del editor pasa de verde a ámbar y a rojo a medida que el diseño crece respecto al dispositivo seleccionado.

Siguientes pasos