Claims
- 1. A memory interface device operable to provide an interface between a data processor and a memory system, the device comprising:
an address generator operable to generate first and second memory addresses, the first memory address being less than or equal to a fractional address, the second memory address being greater than or equal to the fractional address and the fractional address having a fractional part; a memory access unit coupled to the address generator and operable to retrieve a first data value from the memory system at the first memory address and a second data value from the memory system at the second memory address; and a data access unit coupled to the memory access unit and address generator and operable to interpolate between the first and second data values in accordance with the fractional part of the fractional address and further operable to pass the interpolated value to the data processor.
- 2. A memory interface device in accordance with claim 1, wherein the address generator comprises:
a fractional address register for storing the fractional address; a fractional offset register for storing a fractional offset between consecutive fractional addresses; an adder for adding the fractional offset to the fractional address to produce the first memory address; and an increment unit for calculating the second memory address as the next memory address above the first memory address.
- 3. A memory interface device in accordance with claim 2, wherein the address generator further comprises:
a modulo register for storing a modulo value; and a base address register for storing a base address; and wherein the adder and the increment unit are operable to perform modulo arithmetic using the modulo value and the base address.
- 4. A memory interface device in accordance with claim 2, wherein the address generator further comprises:
a length register for storing a length value; and a base address register for storing a base address; and wherein the adder and the increment unit are operable to perform circular addressing of a vector stored in the memory system starting at the base address with length equal to the length value.
- 5. A memory interface device in accordance with claim 2, wherein the memory system is addressable with wide-words and the address generator further comprises:
a boundary address register operable to store an address of a wide-word boundary; a first comparator operable to compare the first memory address to the wide-word boundary address and to produce a first comparator output; a second comparator operable to compare the second memory address to the wide-word boundary address and to produce a second comparator output; and a logic unit responsive to the first and second comparator outputs and operable to produce a fetch-type signal indicative of whether or not the first and second memory addresses are in the same wide-word.
- 6. A memory interface device in accordance with claim 2, wherein the address generator further comprises a finite state machine responsive to the first comparator output and operable to update the wide-word address stored in the boundary register when the first memory address crosses the wide-word boundary or is at the wide-word boundary.
- 7. A memory interface device in accordance with claim 1, wherein the data access unit comprises an interpolator operable to calculate an interpolated data value by interpolating between the first and second data values in accordance with the fractional part of the fractional address.
- 8. A memory interface device in accordance with claim 7, wherein the data access unit further comprises a selector having the first, second and interpolated data values as inputs and operable to select as a selector output one of:
the interpolated data value; the first data value; and the data value at the memory address closest to the fractional address.
- 9. A memory interface device in accordance with claim 8, wherein the selector is responsive to the fractional part of the fractional address and to a program instruction.
- 10. A memory interface device in accordance with claim 7, wherein the data access unit is programmable to provide as outputs at least one of:
the selector output; the second data value; and the fractional part of the fractional address.
- 11. A memory interface device in accordance with claim 7, wherein the data access unit further comprises a data store operable to store data values pre-fetched by the memory access unit and the address generator.
- 12. A memory interface device in accordance with claim 11, wherein the data store is addressable by a fractional data-store address and wherein the data access unit further comprises:
a fractional address register for storing the fractional data-store address; a fractional offset register for storing a fractional offset between consecutive fractional data-store addresses; an adder for adding the fractional offset to the fractional data-store address to produce a first data-store address that is less than or equal to the fractional data-store address; and an increment unit for calculating a second data-store address as the next data-store address above the first data-store address; and wherein the first and second data values are stored in the data store at the first and second data-store addresses respectively.
- 13. A memory interface device in accordance with claim 12, wherein the data store of the data access unit is addressable with wide-words and the data access unit further comprises:
a boundary address register operable to store an address of a wide-word boundary in the data store; a first comparator operable to compare the first data-store address to the wide-word boundary address and to produce a first comparator output; a second comparator operable to compare the second data-store address to the wide-word boundary address and to produce a second comparator output; and a finite state machine responsive to the first and second comparator outputs and operable to produce a signal indicative of whether or not the first and second data-store address are in the same wide-word.
- 14. A memory interface device in accordance with claim 13, wherein the finite state machine is operable to update the wide-word address stored in the boundary register when the first data-store address crosses the wide-word boundary or is at the wide-word boundary.
- 15. A digital signal processor, comprising:
a data processor having a plurality of processing elements coupled by a plurality of registers in a register file; a memory system for storing data values; and a memory interface device operable to couple the memory system to the register file, the memory interface device comprising:
an address generator for generating first and second memory addresses, the first memory address being less than or equal to a fractional address, the second memory address being greater than or equal to the fractional address and the fractional address having a fractional part; a memory access unit coupled to the address generator and operable to retrieve a first data value from the memory system at the first memory address and a second data value from the memory system at the second memory address; and a data access unit coupled to the memory access unit and address generator and operable to interpolate between the first and second data values in accordance with the fractional part of the fractional address and further operable to pass the interpolated value to the data processor.
- 16. A streaming vector processor, comprising:
a data processor having a plurality of processing elements and at least one storage element coupled by an interconnect unit; a memory system for storing data values; and a memory interface device operable to couple the memory system to the interconnect unit, the memory interface device comprising:
an address generator for generating first and second memory addresses, the first memory address being less than or equal to a fractional address, the second memory address being greater than or equal to the fractional address and the fractional address having a fractional part; a memory access unit coupled to the address generator and operable to retrieve a first data value from the memory system at the first memory address and a second data value from the memory system at the second memory address; and a data access unit coupled to the memory access unit and address generator and operable to interpolate between the first and second data values in accordance with the fractional part of the fractional address and further operable to pass the interpolated value to the data processor.
- 17. A streaming vector processor in accordance with claim 16, wherein the interconnect unit comprises a re-configurable switch and one or more delay-line storage elements.
- 18. A streaming vector processor in accordance with claim 16, wherein a storage element of the data processor is an accumulator.
- 19. A method for a data processor to retrieve an intermediate data value from a memory system containing sampled data values at integer address values, the method comprising:
determining a fractional address corresponding to the intermediate data value; passing the fractional address to a memory interface; and the memory interface:
calculating a first memory address less than or equal to the fractional address; calculating a second memory address greater than or equal to the fractional address; retrieving first and second sampled data values from the memory system at the first and second memory addresses respectively; calculating an intermediate data value from the first and second sampled data values and the fractional part of the fractional address; and passing the intermediate data value to the data processor.
- 20. A method in accordance with claim 19, wherein the intermediate value is one of:
a linear interpolation between the first and second samples data values; the sampled data value at the memory address closest to the fractional data address; and the sampled data value at the first memory address.
- 21. A method for a data processor to retrieve a vector of intermediate data value from a memory system containing sampled data values at integer address values, the method comprising:
determining a fractional address corresponding to a first intermediate data value of the vector of intermediate data values; determining a fractional address offset between consecutive intermediate data values in the vector of intermediate data values; passing the fractional address and the fractional address offset to a memory interface; and for each intermediate data value of the vector of intermediate data values, the memory interface:
calculating the fractional address of the intermediate data value; calculating a first memory address less than or equal to the fractional address; calculating a second memory address greater than or equal to the fractional address; retrieving first and second sampled data values from the memory system at the first and second memory addresses respectively; calculating an intermediate data value from the first and second sampled data values and the fractional part of the fractional address; and passing the intermediate data value to the data processor.
- 22. A method in accordance with claim 21, wherein each intermediate value is one of:
a linear interpolation between the first and second samples data values; the sampled data value at the memory address closest to the fractional data address; and the sampled data value at the first memory address.
- 23. A method in accordance with claim 21, whereincalculating the fractional address of the intermediate data value comprises:
storing the fractional address in a fractional address register; storing the fractional offset in a fractional offset register; and for each intermediate data value of the vector of intermediate data values other than the first intermediate value:
adding the fractional offset to the address in the fractional address register to obtain a new fractional address; storing the new fractional address in the fractional address register.
- 24. A method in accordance with claim 21, further comprising buffering one or more intermediate data values of the vector of intermediate data values in a data store before passing the one or more intermediate data values to the data processor.
- 25. A method in accordance with claim 21, wherein the memory system is addressable by wide-words, the method further comprising the memory interface determining whether the first and second memory address lie within the same wide-word.
CROSS REFERENCE TO RELATED APPLICATIONS
[0001] This application is related to co-pending patent applications titled “INTERCONNECTION DEVICE WITH INTEGRATED STORAGE” and identified by Attorney Docket No. CML00101D, “RE-CONFIGURABLE STREAMING VECTOR PROCESSOR” and identified by Attorney Docket No. CML00107D, “SCHEDULER FOR STREAMING VECTOR PROCESSOR” and identified by Attorney Docket No. CML00108D, “METHOD OF PROGRAMMING LINEAR GRAPHS FOR STREAMING VECTOR COMPUTATION” and identified by Attorney Docket No. CML00109D, which are filed on even day herewith and are hereby incorporated herein by reference.