Tengo un diseño que se sintetiza en aproximadamente 50 macrocélulas.
Tengo esta sección de código:
module levers2(
input [2:0] LL,
input [2:0] RL,
output reg [10:0] DIVISOR,
output reg FAULT
);
reg [10:0] grid[0:63];
wire [5:0] tmp = (LL<<3)+RL;
(snip)
tmp
es para todos los intentos, una línea de dirección. Tengo dos líneas de entrada de 3 bits y las estoy combinando para formar una línea de dirección de 6 bits. Entonces muevo LL
por tres bits y agrego RL
. Cuando sintetizo, obtengo un resultado de macrocelda 47.
Sin embargo, si cambio el operador a un lógico o:
wire [5:0] tmp = (LL<<3) | RL;
El diseño sintetiza a 54 macrocélulas. ¡¿Eso es 7 macrocélulas perdidas para qué ?!
Pienso que sería poco a poco o sería eficiente y fácil, mucho más fácil que un complemento que tiene el equipaje extra del equipaje.
¿Alguien puede arrojar algo de luz sobre lo que está pasando?
EDICIÓN ---
Determiné que estaba usando más macrocélulas utilizando el mecanismo de informes de ISE. También probé algunas cosas diferentes (pero no el operador de concatenación que se menciona a continuación) y todo agregó 7 macrocélulas, excepto el 'agregar'. Me alegró que el comportamiento fuera consistente.
Como nota al margen, agregué un solo OR de 3 entradas a mi esquema de nivel superior y le di tres señales (salidas de falla) desde diferentes módulos. Esto añadió 9 macrocélulas. Puedes apostar a que encontré una nueva forma cuando vi eso, je.