Estoy tratando de construir algunos circuitos de baja potencia en el nivel RTL. ¿Cómo me ocuparía de codificar el aislamiento de los operandos para que la herramienta de síntesis (ASIC / FPGA) lo reconozca? Suponiendo que la especificación requiere que la salida de un módulo sea 0 o 1 (no importa) cuando no está encendido y el producto de las entradas cuando está activado. Supongamos que una vez que el módulo continúa, no puede apagarse a menos que se reinicie. El código con el aislamiento del operando creo que sería algo como esto ...
module some_module(input clk,rst, input on,
input [3:0] in1, in2, output reg [7:0] out);
reg state_ff;
reg [3:0] isol_in1, isol_in2;
// Make inputs change only when on (Isolation)
always @* isol_in1 = !state_ff ? 0 : in1; // When state=0,isolate inputs.
always @* isol_in2 = !state_ff ? 0 : in2;
always @*
out = isol_in1 * isol_in2;
always @ (posedge clk)
if ( rst )
state_ff <= 0;
else case ( state_ff )
1'd0: state_ff <= on; // After reset, wait for on = 1.
1'd1: state_ff <= 1'd1; // Needs reset to turn off.
endcase
endmodule
Estoy asumiendo que Y el aislamiento de tipo en el código anterior. Cuando la unidad está apagada (encendida = 0 desde el restablecimiento), la lógica no verá las transiciones en la entrada, por lo que evitará transiciones innecesarias en el multiplicador. ¿Esto realmente ahorra energía (asumiendo que varios módulos están siendo controlados por in1 y in2)?