Patent ID: 7882164

Claim:
A convolution system comprising: a state machine which: receives M×M image convolution tap values (where M>=3), an M×M tap mask which indicates which tap value positions utilize a common tap value, and a value indicating a number of unique filter tap values C (where 1<=C<=M×M), and based on a number of filter tap branches N implemented in the convolution system (where N>=M×M), sets multiplier coefficients, a number of adder tree levels to traverse, and sets a common tap multiplexer select value to send input pixel data values that are multiplied by the same image convolution tap value to the same filter tap branch, and calculates the available remaining filter tap branches and sets a data multiplexer select value to select multiple subsets of input pixels, and sets an output adder tree select value to accept N multiple parallel multiplied-output operations, and to produce multiple parallel image convolution outputs, floor(N/C); a data multiplexer which: receives an (M+N−1)×M two-dimensional matrix of values indicative of image pixels, based on the select value from the state machine, selects floor(N/C) subsets of M×M pixels, where each subset corresponds to a single 2-D image convolution and a single output pixel; a common tap multiplexer, which: receives a select value (D) from the state machine and an M×M pixel subset of values from the data multiplexer, and produces a further subset of 1 to M×M values which share a common filter tap value; an adder tree, which: receives the number of levels from the state machine and the output values of the common tap multiplexer, and adds said output values of said common tap multiplexer to form an added output; and a multiplier, which multiplies said added output by the tap value received from the state machine, to produce a multiplied output, wherein the common tap multiplexer, the adder, and the multiplier are included in a branch of the convolution system; an output adder tree, which: receives a select value from the state machine and multiplied output from the filter tap branches, and determines which C branch subsets constitute an output image pixel and adds each filter tap branch multiplier output subset together in parallel, producing floor(N/C) outputs.