Similarly, the template class Stencil3D provides the implementation of Equation (2*) and (3) by function laplacian and function propagate respectively. The laplacian function (also called stencil in Figure 1) applies multiple buffers and shifting registers to achieve high spatial parallelism. By assigning values to the template variable t_nPEX and t_nPEZ, the HLS synthesizes a compute IP with the ability to compute the laplacian operation for multiple grid points in one clock cycle. The propagate function (also called time upate in Figure 1) processes multiple data streams in parallel to compute multiple data points of the next wavefield simultaneously.