A method (500, 600, 700, 800) carried out by a hardware implementation of a Convolutional Neural Network, the hardware implementation comprising digital logic circuitry that is configured to receive data that defines the CNN and is configured to operate in accordance with that data definition to process input data so as to implement the CNN, the method (500, 600, 700, 800) comprising: receiving, at the hardware implementation, command data for a CNN layer that defines a first subset of data comprising at least a portion of weight data and at least a portion of input data for the CNN layer, and a second subset of data comprising at least a portion of weight data and at least a portion of input data for the CNN layer, the weight data for the CNN layer comprising a plurality of weights; retrieving the first subset of data from external memory, storing the weight data of the first subset of data in a coefficient buffer of the hardware implementation, and storing the input data of the first subset of data in a plurality of input buffers of the hardware implementation (510, 610, 710, 810); passing the first subset of data from the coefficient buffer and the plurality of input buffers to a plurality of convolution engines of the hardware implementation and performing, in one or more passes of the plurality of convolution engines, convolution operations between the weight data of the first subset of data and the input data of the first subset of data to generate a first partial result (520, 620, 720, 820); retrieving the second subset of data from the external memory, storing the weight data of the second subset of data in the coefficient buffer, and storing the input data of the second subset of data in the plurality of input buffers (530, 630, 730, 830); passing the second subset of data from the coefficient buffer and the plurality of input buffers to the plurality of convolution engines and performing, in one or more subsequent passes of the plurality of convolution engines, convolution operations between the weight data of the second subset of data and the input data of the second subset of data to generate a second partial result (540, 640, 740, 840); and combining, at the hardware implementation, the first partial result and the second partial result to generate at least a portion of convolved data for the CNN layer (550, 650, 750, 850); wherein the plurality of input buffers are connected to each of a plurality of multiplexers of the hardware implementation, each multiplexer configured to select an output from one of the plurality of input buffers and to pass values output from the selected input buffer to a respective convolution engine of the plurality of convolution engines. receiving, at the hardware implementation, command data for a CNN layer that defines a first subset of data comprising at least a portion of weight data and at least a portion of input data for the CNN layer, and a second subset of data comprising at least a portion of weight data and at least a portion of input data for the CNN layer, the weight data for the CNN layer comprising a plurality of weights; retrieving the first subset of data from external memory, storing the weight data of the first subset of data in a coefficient buffer of the hardware implementation, and storing the input data of the first subset of data in a plurality of input buffers of the hardware implementation (510, 610, 710, 810); passing the first subset of data from the coefficient buffer and the plurality of input buffers to a plurality of convolution engines of the hardware implementation and performing, in one or more passes of the plurality of convolution engines, convolution operations between the weight data of the first subset of data and the input data of the first subset of data to generate a first partial result (520, 620, 720, 820); retrieving the second subset of data from the external memory, storing the weight data of the second subset of data in the coefficient buffer, and storing the input data of the second subset of data in the plurality of input buffers (530, 630, 730, 830); passing the second subset of data from the coefficient buffer and the plurality of input buffers to the plurality of convolution engines and performing, in one or more subsequent passes of the plurality of convolution engines, convolution operations between the weight data of the second subset of data and the input data of the second subset of data to generate a second partial result (540, 640, 740, 840); and combining, at the hardware implementation, the first partial result and the second partial result to generate at least a portion of convolved data for the CNN layer (550, 650, 750, 850); wherein the plurality of input buffers are connected to each of a plurality of multiplexers of the hardware implementation, each multiplexer configured to select an output from one of the plurality of input buffers and to pass values output from the selected input buffer to a respective convolution engine of the plurality of convolution engines.