Software datapaths and pipelines - page 1 Let's examine the calculation of a typical-looking mathematical computation: C = 10*sqrt(A+B) + 17 Viewed as a datapath, we have: A --->+------+ +----+ 10->+----------+ 17->+------+ |ADDER1|--->|SQRT|----->|MULTIPLIER|----->|ADDER2| ---> C B --->+------+ +----+ +----------+ +------+ Assuming we have two adders, a squareRooter, a multiplier, and three single-word memories called A, B, and C, the WIZ code for this would be: A , B => adder1 adder1 => squareRooter // wait here for adder1 (10) => multiplier squareRooter => multiplier // wait here for squareRooter (17) => adder2 multiplier => adder2 // wait here for multiplier adder2 => C // wait here for adder2 Because each device is dependent on the result of the previous device, nothing can be overlapped and each device must wait for the previous device to finish before it can start its own computation. All four devices execute serially, and the total execution time is the sum of the delays of each of the four devices plus 8 tu's for transports.