How is 2D convolution calculated?
Technically, shifting the kernel above the still image, or shifting the image "below" the centered kernel are equivalent. This is because convolution of a kernel and an image is a commutative operation:

$$\sum_{k_1=-\infty}^{\infty} \sum_{k_2=-\infty}^{\infty} h(k_1,k_2)x(n_1-k_1,n_2-k_2) = \sum_{k_1=-\infty}^{\infty} \sum_{k_2=-\infty}^{\infty} x(k_1,k_2)h(n_1-k_1,n_2-k_2) $$

This however assumes infinite extend, etc. Whether it can easily be used to program an FPGA is a different topic.