Hardware for implementing a Deep Neural Network (DNN) having a convolution layer, the hardware comprising: a plurality of convolution engines each operable to perform a convolution operation by applying a filter to a data window, each filter comprising a set of weights for combination with respective data values of a data window, and each of the plurality of convolution engines comprising: multiplication logic operable to multiply a weight of a filter with a respective data value of a data window; control logic configured to cause the multiplication logic to multiply a weight with a respective data value if the weight is non-zero, and otherwise not cause the multiplication logic to multiply that weight with that data value; and accumulation logic configured to accumulate the results of a plurality of multiplications performed by the multiplication logic so as to form an output for a respective convolution operation; and characterised in that the hardware further comprises: one or more weight buffer modules, each configured to provide weights of one or more filters to any of the plurality of convolution engines and each comprising: a packed buffer for receiving compressed data comprising a set of weights of a filter and corresponding sparsity data; an unpacked buffer for holding an uncompressed subset of the weights of the filter along with their corresponding sparsity data; an unpacker configured to unpack the subset of the weights of the filter into the unpacked buffer according to a predetermined sequence of weights; and weight control logic configured to, in response to a request from a convolution engine for weights available at the unpacked buffer, provide those weights to the convolution engine along with the corresponding sparsity data. multiplication logic operable to multiply a weight of a filter with a respective data value of a data window; control logic configured to cause the multiplication logic to multiply a weight with a respective data value if the weight is non-zero, and otherwise not cause the multiplication logic to multiply that weight with that data value; and accumulation logic configured to accumulate the results of a plurality of multiplications performed by the multiplication logic so as to form an output for a respective convolution operation; and characterised in that the hardware further comprises: one or more weight buffer modules, each configured to provide weights of one or more filters to any of the plurality of convolution engines and each comprising: a packed buffer for receiving compressed data comprising a set of weights of a filter and corresponding sparsity data; an unpacked buffer for holding an uncompressed subset of the weights of the filter along with their corresponding sparsity data; an unpacker configured to unpack the subset of the weights of the filter into the unpacked buffer according to a predetermined sequence of weights; and weight control logic configured to, in response to a request from a convolution engine for weights available at the unpacked buffer, provide those weights to the convolution engine along with the corresponding sparsity data. a packed buffer for receiving compressed data comprising a set of weights of a filter and corresponding sparsity data; an unpacked buffer for holding an uncompressed subset of the weights of the filter along with their corresponding sparsity data; an unpacker configured to unpack the subset of the weights of the filter into the unpacked buffer according to a predetermined sequence of weights; and weight control logic configured to, in response to a request from a convolution engine for weights available at the unpacked buffer, provide those weights to the convolution engine along with the corresponding sparsity data. <EOS>