Tengo varios trabajadores que necesitan acceder al bus único (canal de memoria). Varios de ellos pueden estar listos al mismo tiempo y me gustaría que se alternen con los escritores que tengan prioridad.
Tengo algunos pseudocódigo con dos escritores y dos lectores para mostrar, pero no es una buena solución y lo necesito para escalar con un número arbitrario de trabajadores (los escritores y los lectores vienen en pares). También me preocupa la utilización de recursos.
if curr_worker = wr0 then
curr_worker <= wr1 when w_rdy[1] = '1' else
wr0 when w_rdy[0] = '1' else
rd0 when r_rdy[0] = '1' else
rd1 when r_rdy[1] = '1' else
dummy;
else if curr_worker = rd0 then
curr_worker <= wr0 when w_rdy[0] = '1' else
wr1 when w_rdy[1] = '1' else
rd1 when r_rdy[1] = '1' else
rd0 when r_rdy[0] = '1' else
dummy;
else
curr_worker <= wr0 when w_rdy[0] = '1' else
wr1 when w_rdy[1] = '1' else
rd0 when r_rdy[0] = '1' else
rd1 when r_rdy[1] = '1' else
dummy;
end if;
Y solo para estar seguros, la instrucción when-else asignará la primera opción cuando la condición sea verdadera, incluso si la siguiente condición también es verdadera, ¿correcto?