Amit said:
can sombody please tell me what makes a ciruit operate faster using
pipeline? let's say there is a full adder (normal) and another full
adder which is implemneted base on pipeline. or at least could give me
some links to follow on this.
Ok, let's assume the operation a+b+c wich can be implemented as
s1=a+b;
s2=s1+c;
Now we have a combinational path from a over s1 to s2. The same holds
for b. Let us assume, that this path is too slow for your clock. This means:
process(clk)
variable s1 unsigned(a'high+1 downto a'low);
if rising_edge(clk) then
s1:=a+b;
s2<=s1+c;
-- we would get the same result if we would write:
-- s2<=(a+b)+c;
end if;
end process;
Now we can break this path into two pieces - we create a pipeline:
process(clk)
if rising_edge(clk) then
s1<=a+b; -- s1 is a signal
s2<=s1+c; -- note that the OLD value of s1 is used!
-- both s1 and s2 will be implemented as flipflops
end if;
end process;
Now we got two combinational paths from a,b to s1 and from s1,c to s2.
Both paths are approximately half as long as the initial path from a,b
to s2.
This results in two facts:
1) one single operation takes two clocks (the latency)
2) if this operation can work continuously we get one result with every
single clock!
=> We can continuously add operands with the fast clock, but each single
operation has a latency of 2 clocks. If we have a continuous data
stream, then we can process it with the fast clock. Then usually the
latency is not a problem.
Ralf