Das Ergebnis Deiner Berechnung ist (in1+in2+1)*2^n, also zwei Additionen
und ein Shift. Das geht sehr schnell und die Logiksynthese wird das auch
so umformen.
Asnychronität im Design ist kaum in den Griff zu bekommen, die
Ergebnisse sind mitunter nicht vorhersehbar. Bei einer großen Logiktiefe
verwendest Du besser Pipelineregister, um den kritischen Pfad zu
reduzieren.
In Deinem Code fehlt übrigens der Takt. Getaktet und gepipelinet sähe
das so aus (ungetestet, vermutlich falsche Syntax):
1 | always @(posedge clk) begin
|
2 | out1 <= in1+in2+1;
|
3 | out2 <= out1 + out1;
|
4 | out3 <= out2 + out2;
|
5 | ...
|
6 | out <= outn+outn;
|
7 | end
|
Damit hast Du nach n Takten das erste Ergebnis (out). Aber wie gesagt,
Pipelining wäre bei diesem Design nicht erforderlich