1. A method of performing block matching comprising: loading, by a processor, an N×N target block into an array of systolic cells; for each of a plurality of N×N reference blocks in an N×M reference search space comprising an (M−N+1) number of N×N reference blocks: loading, by the processor, the N×N reference block into the array; computing, by the processor, a sum of absolute difference (SOAD) between target block pixels and reference block pixels; and saving the SOAD for the reference block; determining, by the processor, whether to select the N×N reference block having a lowest computed SOAD from the (M−N+1) reference blocks in the reference search space as a motion vector for the N×N target block.