Altifigence Academy

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.

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.

SystemVerilog
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
endmodule

next_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.

Flancorstenablesamplesum antessum después
E0119Desconocido0
E101303
E200733
E301538
E4111580

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.

Tu elección se aplica a este navegador. Puedes cambiarla en el pie de página.