Encontrar una ranura vacía en una matriz de registros

0

Estoy trabajando para implementar un procesador fuera de servicio en Verilog, y estoy tratando de encontrar rápidamente una ranura vacía en una serie de estaciones de reserva, como por ejemplo

reg [39:0]add_rStation[3:0];

Suponga que cada estación tiene un bit válido que indica si está llena o no. Por rápido me refiero sin grandes cadenas si no más. ¿Alguien sabe cómo hacer esto Matemáticamente (por falta de un término mejor)?

    
pregunta Cinder

2 respuestas

1

La estructura que está buscando se llama "codificador de prioridad". Tomará un conjunto de bits y le dará el número del bit con el número más bajo que se afirma. Si invierte sus bits "válidos" para crear un conjunto de bits "vacíos" para las estaciones de reserva (un término que vi por primera vez junto con el IBM System 360 Model 91), el codificador de prioridad le dará el número del primero disponible.

El código fuente HDL para un codificador de prioridad es de hecho una gran declaración combinatoria if-then-else , pero esta es una construcción común y las herramientas de síntesis pueden asignarla de manera eficiente al hardware subyacente.

Mi primer trabajo de tiempo completo después de la universidad (principios de la década de 1980) fue diseñar una nueva CPU para aplicaciones científicas, y tomé un gran préstamo del diseño 360/91. Desafortunadamente, mi diseño nunca se construyó, pero todavía tengo muchas de mis notas de diseño, y de vez en cuando pienso en hacerlo en un FPGA.

    
respondido por el Dave Tweed
1

Una declaración para límites estáticos es sintetizable:

for (i=0; i<4; i=i+1)
  if (add_rStation[i][33])
  begin
    slot <= i ;
    empty <= 1 ;
  end

"slot" te da la ranura que tiene el bit-33 establecido si "empty" se rellena con un 1. Como se escribe más alto, el índice posterior (representado por i) tiene mayor prioridad.

(Obviamente, debe agregar declaraciones y preparaciones adecuadas a las variables tal como están escritas.)

    
respondido por el rioraxe

Lea otras preguntas en las etiquetas