Estoy implementando una matriz sistólica para un proyecto, cada elemento de procesamiento (PE) contiene muchos multiplexores en cascada debido a la resta del valor absoluto y al operador condicional, el código se parece a algo como esto:
reg[1:0] direction;
localparam [1:0] DIAG = 2'b00;
localparam [1:0] WEST = 2'b01;
localparam [1:0] NORTH = 2'b10;
assign pixel_up_1 = (pixel_down[23:16]>pixel_up[23:16]) ? pixel_down[23:16] : pixel_up[23:16];
assign pixel_down_1 = (pixel_down[23:16]>pixel_up[23:16]) ? pixel_up[23:16] : pixel_down[23:16];
...
assign match = 255 - ( pixel_up_1 - pixel_down_1 );
...
assign selector = (match >= n_wire ? (match >= w_wire ? DIAG : NORTH) : WEST)
always@(posedge CLK) begin
direction <= selector;
end
El problema surge al crear una gran cantidad de PE en la matriz sistólica, el enrutamiento en el sintetizador es muy alto y se utilizan pocos Flip Flop.
He intentado usar la lógica segmentada para los PE, se usan más FF pero el enrutamiento no disminuye, ¿cómo puedo reducir la parte combinatoria del diseño?
Alguien me dice que use la lógica de selección de chip para evitar mux, pero no sé qué significa, ¿alguna pista?