1 / 37 · Concepto
RTL: describir circuitos concurrentes
Separa el orden del software de la estructura paralela y especifica estado actual, siguiente estado e instantes de observación.
Las lecciones se pueden leer gratis. Inscríbete para guardar el progreso.
El circuito sigue funcionando
RTL describe cómo los valores pasan entre registros a través de lógica combinacional. Un módulo delimita hardware; dos instancias crean dos estructuras que interactúan, no dos llamadas ejecutadas una después de otra. El circuito permanece activo cuando cambian las entradas. Este curso convierte puertas, almacenamiento y máquinas de estados en interfaces SystemVerilog explícitas y verificaciones reproducibles. Antes de implementar, explica la anchura, el controlador, la validez y el reinicio de cada señal.
Separa estado actual y siguiente
Este módulo completo acumula muestras sin signo de cuatro bits en un registro de ocho. El reinicio es síncrono, activo alto y prioritario sobre enable. Un flanco habilitado suma; los demás mantienen sum. La aritmética vuelve al inicio módulo 256.
module accumulator (
input logic clk, rst, enable,
input logic [3:0] sample,
output logic [7:0] sum
);
logic [7:0] next_sum;
assign next_sum = sum + {4'b0000, sample};
always_ff @(posedge clk) begin
if (rst) sum <= 8'b0;
else if (enable) sum <= next_sum;
end
endmodulenext_sum es combinacional: cambia con sum o sample sin necesidad de un flanco. sum almacena estado y cambia en el flanco ascendente. Declararlos logic no les da la misma función. Omitir el else final de este bloque con reloj significa mantener el registro; omitir una asignación combinacional puede requerir un latch. Identifica primero el tipo de bloque.
Calcula una tabla antes de simular
Cada fila usa entradas y estado anteriores al flanco; observa después de las actualizaciones no bloqueantes.
| Flanco | rst | enable | sample | sum antes | sum después |
|---|---|---|---|---|---|
| E0 | 1 | 1 | 9 | Desconocido | 0 |
| E1 | 0 | 1 | 3 | 0 | 3 |
| E2 | 0 | 0 | 7 | 3 | 3 |
| E3 | 0 | 1 | 5 | 3 | 8 |
| E4 | 1 | 1 | 15 | 8 | 0 |
En E4 gana el reinicio y no se suma. Si el valor anterior es 250 y la muestra aceptada es 10, el resultado de ocho bits es 4. Conservar un noveno bit cambia el contrato aritmético y la interfaz.
El orden es local; la concurrencia es estructural
Las asignaciones bloqueantes = dentro de un procedimiento combinacional siguen su orden. Los procedimientos separados y las asignaciones continuas son procesos concurrentes. Las no bloqueantes <= calculan el lado derecho con los valores disponibles al ejecutarse el proceso y programan actualizaciones. El orden del texto no sustituye una especificación de latencia. No uses #10 para esperar un reloj en el acumulador: retardos y generadores de reloj pertenecen al banco de pruebas general. Las transiciones sintetizables expresan estado y flancos, no sleep.
Práctica: cambia un requisito
Satura en 255 en lugar de volver al inicio. Extiende explícitamente ambos operandos y calcula nueve bits; si el bit 8 vale 1 guarda 255, de lo contrario 7:0. Mantén prioridades. Prueba 0+0,250+5,250+6, un flanco deshabilitado y reinicio/enable simultáneos: resultados 0,255,255, estado mantenido,0. Solo 250+5 no descubre pérdida de acarreo; incluye 250+6. Conserva fuente, tabla y expectativas. La marca de lección completada registra estudio, no una simulación.