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
- Entiende el modelo de ejecución en Cómo funciona la simulación.
- Revisa la terminología en el Glosario.
- Compara Kmila con otras herramientas en Comparación.