Data processing system having an adaptive priority controller
Summary by NHIP
Adaptive Priority Controller
The data processor prioritizes bus requests from two resources using thresholds stored in dedicated registers. The priority controller assigns priority based on whether valid entries in a push buffer, write buffer, or instruction prefetch buffer exceed their specific stored thresholds.
Claim Score by NHIP
Abstract
The present invention relates generally to data processors and more specifically, to data processors having an adaptive priority controller. One embodiment relates to a method for prioritizing requests in a data processor (12) having a bus interface unit (32). The method includes receiving a first request from a first bus requesting resource (e.g. 30) and a second request from a second bus requesting resource (e.g. 28), and using a threshold corresponding to the first or second bus requesting resource to prioritize the first and second requests. The first and second bus requesting resources may be a push buffer (28) for a cache, a write buffer (30), or an instruction prefetch buffer (24). According to one embodiment, the bus interface unit (32) includes a priority controller (34) that receives the first and second requests, assigns the priority, and stores the threshold in a threshold register (66). The priority controller (34) may also include one or more threshold registers (66), subthreshold registers (68), and control registers (70).

Term
Term ended
Expired 13 January 2023, 3.7 years ago.
- Priority and filed
- Granted
- Expired
- Today
37 claims: 7 independent, 30 dependent
- 1A data processor comprising:a central processing unit;a first requesting resource counted to the central processing unit, and adapted to request use of a communications bus for transmitting or receiving data;a second requesting resource coupled to the central processing unit, and adapted to request use of the communications bus for transmitting or receiving data;and a bus interface unit coupled to the central processing unit, the first requesting resource, and the second requesting resource, and adapted to be coupled to the communications bus, the bus interface unit further comprising: a priority controller coupled to receive a first request from the first requesting resource and a second request from the second requesting resource, and to assign a priority to each of the first and second request based on a threshold corresponding to one of the first requesting resource and the second requesting resource, wherein the priority controller comprises storage circuitry for storing a first resource threshold corresponding to the first requesting resource, a second resource threshold corresponding to the second requesting resource, and a control value corresponding to the first and second requesting resources.
- 8Broadest claimClaim Score 66, broad(NHIP)A processor, comprising:a processing unit;a cache coupled to the processing unit;a write buffer coupled to the processing unit;a priority controller, coupled to the processing unit, the cache, and the write buffer, the priority controller comprising: priority rules specification circuitry, wherein the priority rules specification circuitry comprises a first programmable threshold register which stores a first threshold corresponding to the write buffer;and current priority resolution circuitry coupled to the priority rules specification circuitry which receives memory access requests from the cache and the write buffer and which prioritizes the memory access requests based at least on the first threshold.
- 19A method for prioritizing requests in a data processor having a processing unit, a cache coupled to the processing unit, a write buffer coupled to the processing unit, and a bus interface unit coupled to the processing unit, the cache, and the write buffer, the bus interface unit adapted to be coupled to a communications bus and to service requests from the cache and the write buffer for use of the communications bus, a method comprising:receiving a first communications bus access request from the cache and a second communications bus access request from the write buffer;and using a first threshold corresponding to the write buffer to determine which one of the first and second communications bus access requests pets priority, wherein the data processor comprises a push buffer coupled to the cache and to the bus interface unit, the bus interface unit adapted to service requests from the push buffer for use of the communications bus, the method for prioritizing requests further comprising: receiving a third communications bus access request from the push buffer;and using a second threshold corresponding to the push buffer and the first threshold to determine which one of the first, second, and third communications bus access requests get priority.
- 23In a data processor having a processing unit, a write buffer coupled to the processing unit, and a bus interface unit coupled to the processing unit, the cache, and the write buffer, wherein the bus interface unit is adapted to be coupled to a communications bus and service requests from the write buffer, and the processing unit for use of the communications bus, a method comprising:receiving an instruction prefetch request corresponding to an instruction prefetch buffer;comparing a number of valid entries within the write buffer with a write buffer threshold to obtain a first comparison result;comparing a number of valid entries within the instruction prefetch buffer with an instruction prefetch buffer threshold to obtain a second comparison result;and assigning a priority to the instruction prefetch request based on the first and second comparison results.
- 31A data processor, comprising:processing unit;a write buffer coupled to the processing unit;and a bus interface unit coupled to the processing unit and the write buffer, wherein the bus interface unit is adapted to be coupled to a communications bus and service requests from the write buffer, and the processing unit for use of the communications bus, the bus interface unit comprising: receiving means for receiving an instruction prefetch request corresponding to an instruction prefetch buffer;first comparing means, coupled to die receiving means, for comparing a number of valid entries within the write buffer with a write buffer threshold to obtain a first comparison result;second comparing means, coupled to the receiving means, for comparing a number of valid entries within the instruction prefetch buffer with an instruction prefetch buffer threshold to obtain a second comparison result;and priority means, coupled to the first and second comparing means, for assigning a priority to the instruction prefetch request based on the first and second comparison results.
- 34In a data processor having a processing unit, the processing unit having a prefetch buffer, and a bus interface unit coupled to the processing unit, the bus interface unit adapted to be coupled to a communications bus and service requests from the prefetch buffer and the processing unit for use of the communications bus, a method comprising:receiving a change of flow instruction fetch request;comparing a number of entries within the prefetch buffer with a prefetch buffer threshold;and in response to comparing the number of entries, selectively affecting a priority of the change of flow instruction fetch request with respect to a request from the prefetch buffer for use of the communications bus.
- 36A method for prioritizing requests in a data processor having a bus interface unit, adapted to be coupled to a communications bus and which services requests for use of the communications bus, a first requesting resource, and a second requesting resource, wherein the first and second requesting resources make requests for use of the communications bus, a method comprising:selectively receiving a first request from a first resource and selectively receiving a second request from a second resource;if the first request and the second request are received, using a threshold corresponding to one of the first resource and the second resource to assign priorities to the first and second request;and if the first request and the second request are not received: comparing a number of entries within the first requesting resource to a first requesting resource threshold and comparing a number of entries within the second requesting resource to a second requesting resource threshold;and if the number of entries within the first requesting resource falls below the first requesting resource threshold and the number of entries within the second requesting resource falls below the second requesting resource threshold, using a subthreshold corresponding to one of the first requesting resource and the second requesting resource to assign priorities to the first and second request.
Independent claims7
43 paragraphs in 6 sections, as filed
FIELD OF THE INVENTION
The present invention relates generally to data processors, and more specifically to data processors having an adaptive priority controller.
RELATED ART
Microprocessors with separate instruction and data caches generally need to prioritize requests to a single main memory. The operations on the instruction side of the central processing unit (CPU) include instruction fetches, instruction change of flow fetches, and instruction pre-fetches. The data operations in the CPU include load operations and store operations. Modem data processors also often include write buffers, push buffers for modified cache data, and an instruction cache and data cache (write through or copy back). Since the instruction cache and data cache (including write/push buffers) operate independently, simultaneous requests to the main memory can occur. The main memory and the external peripherals may be running at a fraction of the CPU frequency. Efficient prioritization of requests to the main memory can reduce the number of stall cycles required of the CPU and thus increase the overall system performance. It is thus desirable to more efficiently prioritize multiple requests to the main memory.
BRIEF DESCRIPTION OF THE DRAWINGS
The present invention is illustrated by way of example and is not limited to the embodiments illustrated in the accompanying figures, in which like references may indicate similar elements.
FIG. 1 illustrates, in block diagram form, a data processing system in accordance with one embodiment of the present invention.
FIG. 2 illustrates, in block diagram form, a portion of a priority controller in accordance with one embodiment of the present invention.
FIGS. 3-10 illustrate, in flow diagram form, methods for prioritizing requests in accordance with various embodiments of the present invention.
Skilled artisans appreciate that elements in the figures are illustrated for simplicity and clarity and have not necessarily been drawn to scale. For example, the dimensions of some of the elements in the figures may be exaggerated relative to other elements to help improve the understanding of the embodiments of the present invention.
DETAILED DESCRIPTION
As used herein, the term “bus” is used to refer to a plurality of signals or conductors which may be used to transfer one or more various types of information, such as data, addresses, control, or status. The terms “assert” and “negate” are used when referring to the rendering of a signal, status bit, or similar apparatus into its logically true or logically false state, respectively. If the logically true state is a logic level one, the logically false state is a logic level zero. And if the logically true state is a logic level zero, the logically false state is a logic level one.
Brackets are used to indicate the conductors of a bus or the bit locations of a value. For example, “bus <b>60</b> [<b>0</b>-<b>7</b>]” or “conductors [0-7] of bus <b>60</b>” indicates the eight lower order conductors of bus <b>60</b>, and “address bits [<b>0</b>-<b>7</b>]” or “ADDRESS [<b>0</b>-<b>7</b>]” indicates the eight lower order bits of an address value. The symbol “$” preceding a number indicates that the number is represented in its hexadecimal or base sixteen form. The symbol “%” preceding a number indicates that the number is represented in its binary or base two form.
DESCRIPTION OF FIGURES
FIG. 1 illustrates one embodiment of data processing system <b>10</b>. In one embodiment, data processing system <b>10</b> includes processor <b>12</b>, memory <b>14</b>, other bus masters <b>16</b>, processor <b>18</b>, and possibly other bus masters or bus slaves which are bi-directionally coupled to each other by way of system bus <b>50</b>. In one embodiment, processor <b>12</b> includes a CPU <b>20</b> which is bi-directionally coupled to instruction cache <b>22</b> by way of bus <b>38</b>. In one embodiment, CPU <b>20</b> is bi-directionally coupled to data cache <b>26</b>, push buffer <b>28</b>, and write buffer <b>30</b> by way of bus <b>36</b>. CPU <b>20</b> is bi-directionally coupled to bus interface unit <b>32</b> (BIU <b>32</b>) by way of signals <b>46</b>. Instruction cache <b>22</b> is bi-directionally coupled to BIU <b>32</b> by way of signals <b>48</b>. Data cache <b>26</b> is bi-directionally coupled to BIU <b>32</b> by way of signals <b>44</b>. Push buffer <b>28</b> is bi-directionally coupled to BIU <b>32</b> by way of signals <b>42</b>. Write buffer <b>30</b> is bi-directionally coupled to BIU <b>32</b> by way of signals <b>40</b>. In one embodiment of the present invention BIU <b>32</b> includes priority control circuitry <b>34</b>. Note that system bus <b>50</b> may be used as a communication bus to communicate between processor <b>12</b>, memory <b>14</b>, other bus masters <b>16</b>, processor <b>18</b>, and any other bus master or slave coupled to system bus <b>50</b>.
FIG. 2 illustrates one embodiment of a portion of priority control circuitry <b>34</b> of FIG. <b>1</b>. In one embodiment of the present invention, priority control circuitry <b>34</b> includes circuitry to resolve current priority circuitry <b>60</b>, priority effectiveness monitor <b>62</b>, and circuitry to specify priority rules <b>64</b>. Note that alternate embodiments of the present invention may or may not include priority effectiveness monitor <b>62</b>. Circuitry <b>60</b> is bi-directionally coupled to signals <b>40</b>, <b>42</b>, <b>44</b>, <b>46</b>, and <b>48</b>. Circuitry <b>60</b> includes comparing circuitry <b>61</b>. Circuitry <b>60</b> is bi-directionally coupled to circuitry <b>64</b> by way of signals <b>72</b>. In one embodiment of the present invention, circuitry to specify priority rules <b>64</b> includes threshold registers <b>66</b>, sub-threshold registers <b>68</b>, and control registers <b>70</b>. In alternate embodiments of the present invention, circuitry <b>64</b> may include additional registers or other circuitry. In one embodiment of the present invention, circuitry <b>64</b> is bi-directionally coupled to an optional priority effectiveness monitor <b>62</b>. In the embodiment of the present invention illustrated in FIG. 2, circuitry <b>60</b> is bi-directionally coupled to priority effectiveness monitor <b>62</b> by way of signals <b>74</b>.
FIGS. 3 and 4 together illustrate one manner in which priority control <b>34</b> (see FIG. 1) implements an adaptive priority control methodology based on the number of valid entries in write buffer <b>30</b> and push buffer <b>28</b>. Alternate embodiments of the present invention may significantly vary the flow illustrated in FIGS. 3 and 4. The methodology used in FIGS. 3 and 4 is merely intended to be one possible implementation. Referring to FIG. 3, the flow starts at start oval <b>100</b>. The flow then proceeds to decision diamond <b>105</b> where the question is asked, is an instruction prefetch request pending. If an instruction prefetch is not pending, the flow continues to wait at that decision diamond until an instruction prefetch request is pending. Once an instruction prefetch request is pending, the flow continues to decision diamond <b>106</b> where the question is asked, are there any valid entries in write buffer <b>30</b>. If there are valid entries in write buffer <b>30</b>, then the flow continues at decision diamond <b>107</b> where the question is asked, do the number of valid entries in write buffer <b>30</b> exceed its threshold value. If the answer to decision diamond <b>107</b> is yes, the flow continues to decision diamond <b>108</b> where the question is asked, are the number of valid entries in instruction prefetch buffer <b>24</b> below the threshold of prefetch buffer <b>24</b>. If the answer to decision diamond <b>108</b> is no, then the flow continues at step <b>109</b> where a memory access from write buffer <b>30</b> is performed. From step <b>109</b> the flow then continues back to decision diamond <b>105</b>. If the number of valid entries in instruction prefetch buffer <b>24</b> is below its threshold, then the flow continues at decision diamond <b>110</b> where the question is asked, how has the user programmed the static control registers <b>70</b> to determine priority at this point. If the user has programmed priority for write buffer <b>30</b>, then the flow continues from decision diamond <b>110</b> to step <b>109</b>. However if the user has programmed the instruction prefetch buffer <b>24</b> to have priority, then the flow continues from decision diamond <b>110</b> to step <b>111</b> (see FIG. 4) by way of circle B <b>103</b>. In step <b>111</b> the pending instruction prefetch request is elevated. The flow then continues to step <b>112</b> where a memory access for the instruction prefetch buffer <b>24</b> is performed. By elevating the priority of the instruction prefetch request, it becomes the highest priority request and is thus performed in step <b>112</b>. The flow then continues from step <b>112</b> to oval <b>101</b> where the flow ends.
Returning to decision diamond <b>106</b>, if there are no valid entries in write buffer <b>30</b>, the flow continues at decision diamond <b>113</b> (see FIG. 4) by way of circle C <b>104</b>. Similarly, the no path from decision diamond <b>107</b> also continues at decision diamond <b>113</b> by way of circle C <b>104</b>. Decision diamond <b>113</b> asks the question, are there any valid entries in push buffer <b>28</b>. If there are valid entries in push buffer <b>28</b>, the flow continues at decision diamond <b>114</b> where the question is asked, do the valid entries in push buffer <b>28</b> exceed its threshold value. If the answer to decision diamond <b>114</b> is yes, then the flow continues at decision diamond <b>115</b> where the question is asked, are the number of valid entries in instruction prefetch buffer <b>24</b> below its threshold. If the answer to decision diamond <b>115</b> is yes, the flow continues at decision diamond <b>116</b> where the values in static control registers <b>70</b> are checked in order to determine how the user has programmed the priority. If the user has programmed the push buffer <b>28</b> to have priority, then the flow continues from decision diamond <b>116</b> to step <b>117</b> where the memory access from push buffer <b>28</b> is performed. From step <b>117</b>, the flow then continues to decision diamond <b>105</b> by way of circle A <b>102</b>. At this point in the flow, a return to decision diamond <b>105</b> is useful to check whether an instruction prefetch request is still pending. There are cases where an instruction prefetch request may have been pending the first time through decision diamond <b>105</b>, but may no longer be pending. Returning back to decision diamond <b>116</b>, if on the other hand, static control registers <b>70</b> contains user programmable information which selects the instruction prefetch buffer <b>24</b> to have priority, then the flow continues from decision diamond <b>116</b> to step <b>111</b> which has been described previously herein.
Referring now to decision diamonds <b>113</b> and <b>114</b>, if the NO path from either of these decision diamonds is taken, the flow continues at decision diamond <b>118</b>. Note that this point in the flow indicates that there are no valid entries in push buffer <b>28</b> or that the valid entries do not exceed the threshold value of push buffer <b>28</b>. Decision diamond <b>118</b> asks, are there any data requests pending. If no data request is pending, the flow continues from decision diamond <b>118</b> to step <b>111</b> described herein above. However if a data request is pending, the flow continues from decision diamond <b>118</b> to decision diamond <b>119</b> where the question is asked, are the number of valid entries in the instruction prefetch buffer <b>24</b> below its threshold. If the answer to decision diamond <b>119</b> is yes, the flow continues at decision diamond <b>120</b> where the question is asked, what priority has been programmed into control registers <b>70</b> by the user. If the user has selected the instruction prefetch buffer <b>24</b> to have priority, the flow continues from decision diamond <b>120</b> to step <b>111</b> described herein above. However, if the user has programmed control registers <b>70</b> to select that data requests have priority, then the flow continues from decision diamond <b>120</b> to step <b>121</b> where a memory access for the pending data request is performed. From step <b>121</b>, the flow then continues to decision diamond <b>105</b> by way of circle A <b>102</b>. Referring to decision diamond <b>119</b>, if the number of valid entries in instruction prefetch buffer <b>24</b> is below its threshold, the flow continues at step <b>121</b> where a memory access for the pending data request is performed. Referring to decision diamond <b>118</b>, if there are no data requests pending, then the flow continues at step <b>111</b>. Referring to decision diamond <b>115</b>, if the number of valid entries in instruction prefetch buffer <b>24</b> is below its threshold, then the flow continues at step <b>117</b> where a memory access from push buffer <b>28</b> is performed. From step <b>117</b>, the flow then continues to decision diamond <b>105</b> by way of circle A <b>102</b>.
FIGS. 5 and 6 illustrate one way in which priority control circuitry <b>34</b> (see FIG. 2) may implement a method for priority switching in order to alleviate collisions in write buffer <b>30</b>. Referring to FIG. 5, the flow starts at start oval <b>200</b>. The flow then proceeds to decision diamond <b>201</b> where the question is asked, are any read requests pending. If there is a read request pending, the flow continues from decision diamond <b>201</b> to step <b>202</b> where the address bits of the valid entries in write buffer <b>30</b> are compared with the address for the pending read request. Referring again to decision diamond <b>201</b>, if there are no read requests pending, the flow continues to decision diamond <b>203</b> where the question is asked, has write buffer <b>30</b> exceeded its threshold value. If write buffer <b>30</b> has not exceeded its threshold value, the flow continues from decision diamond <b>203</b> to decision diamond <b>204</b> where the question is asked, has push buffer <b>28</b> exceeded its threshold value. If push buffer <b>28</b> has not exceeded the threshold value, then the flow continues from decision diamond <b>204</b> to decision diamond <b>201</b> where the question is again asked, are there any read requests pending. In this case, neither the push buffer nor the write buffer have exceeded their respective thresholds, so no memory accesses need to be performed yet for those buffers, and a check is performed again to see if a read request has become pending. Referring again to decision diamond <b>203</b>, if the write buffer <b>30</b> has exceeded its threshold, then the flow continues at decision diamond <b>205</b> where the question is asked, has push buffer <b>28</b> exceeded its threshold. If the push buffer <b>28</b> has exceeded its threshold, then the flow continues from decision diamond <b>205</b> to decision diamond <b>206</b> where the question is asked, what is the priority indicated by control registers <b>70</b>. In this case, both buffers have more entries than their respective thresholds have been set to represent (i.e. the user selected thresholds have been exceeded). If the user has programmed control registers <b>70</b> to select the write buffer <b>30</b> to have priority, then the flow continues from decision diamond <b>206</b> to step <b>207</b> where a memory access from write buffer <b>30</b> is performed. Referring again to decision diamond <b>205</b>, if the threshold of push buffer <b>28</b> has not been exceeded, then the flow continues at step <b>207</b> also. Referring again to decision diamond <b>206</b>, if control registers <b>70</b> have been programmed by the user to select the push buffer <b>28</b> to have priority, then the flow continues at step <b>208</b> where a memory access from push buffer <b>28</b> is performed. Referring again to decision diamond <b>204</b>, if the number of entries in push buffer <b>28</b> exceeds its threshold, then the flow continues at step <b>208</b>. Once the respective memory accesses performed in steps <b>207</b> and <b>208</b> are performed, the flow continues at decision diamond <b>201</b>.
Referring again to step <b>202</b>, the flow then continues at decision diamond <b>209</b> (see FIG. 6) by way of circle B <b>210</b>. In decision diamond <b>209</b> the question is asked, is a collision detected. Note that in one embodiment of the present invention, a collision has been considered to occur when an entry in write buffer <b>30</b> contains data that corresponds to an address associated with the pending read request. Referring to decision diamond <b>209</b>, if a collision is detected the flow continues at step <b>211</b> where the priority of the write buffer request is elevated. From step <b>211</b> the flow then continues at step <b>212</b> where entries in the write buffer <b>30</b> prior to and including the colliding entry are flushed to main memory (e.g. memory <b>14</b> in FIG. 1) in order to remove the colliding entry. From step <b>212</b> the flow then continues at decision diamond <b>213</b>. Referring to decision diamond <b>209</b>, if a collision is not detected, flow also continues at decision diamond <b>213</b>. Decision diamond <b>213</b> asks the question, has the write buffer <b>30</b> threshold been exceeded. If the write buffer <b>30</b> threshold has not been exceeded, the flow continues from decision diamond <b>213</b> to decision diamond <b>214</b> where the question is asked, has the push buffer <b>28</b> threshold been exceeded. If the push buffer <b>28</b> threshold has not been exceeded, the flow continues at step <b>215</b> where a memory access for the read request is performed. Note that because neither buffer threshold has been exceeded, the pending read request should have priority. However if the push buffer <b>28</b> threshold has been exceeded, the flow continues at decision diamond <b>216</b> where control registers <b>70</b> are used to determine priority. If the user has programmed push buffer <b>28</b> to have priority over the pending read, then the flow continues from decision diamond <b>216</b> to step <b>217</b> where a memory access from push buffer <b>28</b> is performed. However if the user has programmed control registers <b>70</b> to give the read request priority, then the flow continues from decision diamond <b>216</b> to step <b>215</b> where a memory access for the read request is performed. Step <b>215</b> and <b>217</b> both continue at decision diamond <b>201</b> by way of circle A <b>218</b>.
Referring again to decision diamond <b>213</b>, if the write buffer <b>30</b> threshold has been exceeded, the flow continues at decision diamond <b>219</b> where the question is asked, has the push buffer <b>28</b> threshold been exceeded. If the push buffer <b>29</b> threshold has not been exceeded, the flow continues at decision diamond <b>220</b> where control registers <b>70</b> are again used to determine priority. If the user has programmed control registers <b>70</b> to select the read request as having priority over the write buffer request, then the flow continues from decision diamond <b>220</b> to step <b>215</b> where a memory access for the read request is performed. However if the user has programmed control registers <b>70</b> (see FIG. 2) to give priority to write buffer <b>30</b> over the pending read request, then the flow continues at step <b>221</b> where a memory access from write buffer <b>30</b> is performed. Referring to decision diamond <b>219</b>, if the push buffer <b>28</b> has exceeded the threshold, the flow continues at decision diamond <b>222</b> where control registers <b>70</b> are used to determine the priority. If the user has programmed registers <b>70</b> to give the push buffer <b>28</b> priority, then the flow continues at step <b>217</b> by way of circle C <b>223</b>. However, if the user has programmed control registers <b>70</b> to give priority to write buffer <b>30</b>, then the flow continues at step <b>221</b>. If the user has programmed control registers <b>70</b> to give priority to read requests, then the flow continues at step <b>215</b>. Referring to both steps <b>221</b> and <b>217</b>, after the memory access is performed, the flow continues at decision diamond <b>201</b> by way of circle <b>218</b>.
FIGS. 7 and 8 illustrate one way in which priority control circuitry <b>34</b> (see FIG. 1) implements priority elevation based on a change of instruction flow. The flow starts at oval <b>300</b>. The flow then proceeds to decision diamond <b>301</b> where the question is asked, is a change of flow instruction fetch request pending. Note that the instruction fetch request referred to in decision diamond <b>301</b> is the result of a previous instruction that caused a change of flow. If a change of flow instruction fetch request is pending, the flow continues from decision diamond <b>301</b> to step <b>302</b> where control registers <b>70</b> are used to determine the change of flow priority. Information from control registers <b>70</b> are used in subsequent decision diamonds throughout the flow to determine relative priorities of change of flow accesses, prefetch buffer accesses, write buffer accesses, and push buffer accesses. Referring to decision diamond <b>301</b>, if there is no change of flow instruction fetch request pending, then the flow continues to check for such a request. From step <b>302</b> the flow then proceeds to decision diamond <b>303</b> where the question is asked, do the number of entries in the instruction prefetch buffer <b>24</b> exceed the threshold of instruction prefetch buffer <b>24</b>. If the number of entries in instruction prefetch buffer <b>24</b> do exceed its threshold, the flow continues at decision diamond <b>304</b> where the question is asked, is a write buffer <b>30</b> request pending. If a write buffer <b>30</b> request is pending, the flow continues from decision diamond <b>304</b> to decision diamond <b>305</b> where the question is asked, does the change of flow instruction fetch pending request have higher priority, based on the check performed at step <b>302</b>. If the change of flow instruction fetch pending request does not have higher priority, the flow continues from decision diamond <b>305</b> to step <b>306</b> where no priority manipulation is performed due to the priority selected by the user in control registers <b>70</b>. From step <b>306</b> the flow continues to oval <b>307</b> where the flow ends. Referring again to decision diamond <b>303</b>, if the number of entries in instruction prefetch buffer <b>24</b> do not exceed its threshold, the flow continues at decision diamond <b>308</b> where the question is asked, does the change of flow instruction fetch pending request have higher priority, based on the check performed in step <b>302</b>. If control registers <b>70</b> do not indicate that the change of flow instruction fetch pending request has higher priority, then the flow continues from decision diamond <b>308</b> to step <b>309</b> where no priority manipulation is performed. The flow then continues from step <b>309</b> to end <b>307</b>. Referring to decision diamond <b>308</b>, if the change of flow instruction fetch pending request has higher priority, then the flow continues from decision diamond <b>308</b> to step <b>310</b> where the change of flow instruction fetch pending request priority is elevated over the pending instruction prefetch request priority. From step <b>310</b> the flow then finishes at end <b>307</b>.
Referring to decision diamond <b>305</b>, if the change of flow instruction fetch pending request has higher priority, the flow continues at step <b>311</b> by way of circle B <b>312</b>. At step <b>311</b> the change of flow instruction fetch pending request priority is elevated over the pending request from write buffer <b>30</b>. From step <b>311</b> the flow continues at decision diamond <b>313</b> where the question is asked, is there a push buffer <b>28</b> request pending. If push buffer <b>28</b> does have a request pending, then the flow continues from decision diamond <b>313</b> to decision diamond <b>314</b> where the question is asked, does the change of flow instruction fetch pending request have higher priority. If the change of flow instruction fetch pending request does not have higher priority, then the flow continues from decision diamond <b>314</b> to step <b>315</b> where no priority manipulation is performed. From step <b>315</b> the flow then finishes at end <b>307</b>. Referring to decision diamond <b>304</b> in FIG. 7, if there is no write buffer <b>30</b> request pending, then the flow continues at decision diamond <b>313</b> in FIG. 8 by way of circle A <b>350</b>. Referring to decision diamond <b>313</b>, if there is no push buffer <b>28</b> request pending, then the flow continues at decision diamond <b>316</b> where the question is asked, is there a data request pending. If there is a data request pending, then the flow continues from decision diamond <b>316</b> to decision diamond <b>317</b> where the question is asked, does the pending change of flow instruction fetch request have higher priority. If the pending change of flow instruction fetch request does not have higher priority, then the flow continues from decision diamond <b>317</b> to step <b>318</b> where no priority manipulation is performed. From step <b>318</b> the flow then finishes at end <b>307</b>. Referring to decision diamond <b>317</b>, if the pending change of flow instruction fetch request does have higher priority, then the flow continues at step <b>319</b> where the change of flow instruction fetch pending request priority is elevated over the pending instruction prefetch request. From step <b>319</b> the flow continues at step <b>320</b> where a memory access for the pending change of flow instruction fetch request is performed. Referring again to decision diamond <b>316</b>, if there is no data request pending, the flow continues at step <b>320</b>. Referring to decision diamond <b>314</b>, if the change of flow instruction fetch pending request does have higher priority, then the flow continues at step <b>321</b> where the change of flow instruction fetch pending request priority is elevated over the pending request from push buffer <b>28</b>. From step <b>321</b> the flow then proceeds to decision diamond <b>316</b>. From step <b>320</b> the flow finishes at end <b>307</b>.
FIGS. 9 and 10 illustrate in flow chart form one way in which sub-thresholds may be used with the present invention. Subthresholds refer to the condition when a respective buffer has not reached its programmed level of fullness or emptiness. Referring to FIG. 9, the flow starts at oval <b>400</b>. The flow then continues at decision diamond <b>401</b> where the question is asked, is write buffer <b>30</b> empty. If write buffer <b>30</b> is not empty, the flow continues from decision diamond <b>401</b> to decision diamond <b>402</b> where the question is asked, has the threshold for write buffer <b>30</b> been exceeded. If the threshold for write buffer <b>30</b> has not been exceeded, the flow continues from decision diamond <b>402</b> to decision diamond <b>403</b> where question is asked, is push buffer <b>28</b> empty. If push buffer <b>28</b> is not empty, the flow continues from decision diamond <b>403</b> to decision diamond <b>404</b> where the question is asked, has the threshold of push buffer <b>28</b> been exceeded. If the threshold of push buffer <b>28</b> has been exceeded, the flow continues to step <b>405</b> where a memory access from push buffer <b>28</b> is performed. From step <b>405</b> the flow continues at decision diamond <b>401</b> by way of circle G <b>475</b>.
Referring to decision diamond <b>402</b>, if the threshold for write buffer <b>30</b> has been exceeded, the flow continues at step <b>406</b> where a memory access from write buffer <b>30</b> is performed. From step <b>406</b> the flow continues at decision diamond <b>401</b>. Referring to decision diamond <b>403</b>, if push buffer <b>28</b> is empty the flow continues from decision diamond <b>403</b> to decision diamond <b>407</b> where the question is asked, has the threshold of instruction prefetch buffer <b>24</b> been exceeded. If the threshold of instruction prefetch buffer <b>24</b> has been exceeded, the flow continues at decision diamond <b>408</b> where the question is asked, based on how close the instruction prefetch buffer <b>24</b> and write buffer <b>30</b> are to their sub-threshold levels, which of the instruction prefetch buffer <b>24</b> and write buffer <b>30</b> should have priority. If through the use of sub-thresholds it is determined that write buffer <b>30</b> should have priority, the flow then continues at step <b>409</b> (see FIG. 10) by way of circle C <b>410</b>. However if through the use of sub-thresholds it is determined that the instruction prefetch buffer <b>24</b> is to have priority, then the flow continues from decision diamond <b>408</b> to step <b>411</b> (see FIG. 10) by way of circle B <b>412</b>. Referring to decision diamond <b>407</b>, if the threshold of instruction prefetch buffer <b>24</b> has not been exceeded, the flow continues at step <b>413</b> where a memory access for instruction prefetch buffer <b>24</b> is performed. From step <b>413</b> the flow then continues to decision diamond <b>401</b> by way of circle G <b>475</b>. Referring to decision diamond <b>404</b>, if the threshold for push buffer <b>28</b> has not been exceeded, the flow continues to decision diamond <b>414</b> (see FIG. 10) by way of circle D <b>415</b>. Referring to decision diamond <b>401</b>, if write buffer <b>30</b> is empty, the flow continues to decision diamond <b>416</b> where the question is asked, is push buffer <b>28</b> empty. If push buffer <b>28</b> is not empty, the flow continues from decision diamond <b>416</b> to decision diamond <b>417</b> where the question is asked, has the threshold of push buffer <b>28</b> been exceeded. If the threshold of push buffer <b>28</b> has not been exceeded, the flow continues from decision diamond <b>417</b> to decision diamond <b>418</b> where the question is asked, has the threshold of instruction prefetch buffer <b>24</b> been exceeded. If the threshold of instruction prefetch buffer <b>24</b> has been exceeded, the flow continues from decision diamond <b>418</b> to decision diamond <b>419</b> where sub-thresholds are used to determine the priority between push buffer <b>28</b> and instruction prefetch buffer <b>24</b>. Referring to decision diamond <b>419</b>, if through the use of sub-thresholds it is determined that the push buffer should have priority due to its fullness, the flow continues to step <b>420</b> (see FIG. 10) by way of circle E <b>421</b>. However, if the use of sub-thresholds indicates that the instruction prefetch buffer <b>24</b> is not as full and should thus have priority, the flow continues at step <b>411</b> (see FIG. 10) by way of circle B <b>412</b>. Referring to decision diamond <b>418</b>, if the threshold of instruction prefetch buffer <b>24</b> has not been exceeded, the flow continues at step <b>411</b> (see FIG. 10) by way of circle B <b>412</b>. Referring to decision diamond <b>417</b>, if the threshold of push buffer <b>28</b> has been exceeded, the flow continues at step <b>420</b> (see FIG. 10) by way of circle E <b>421</b>. Referring to decision diamond <b>416</b>, if push buffer <b>28</b> is empty, the flow continues from decision diamond <b>416</b> to decision diamond <b>422</b> (see FIG. 10) by way of circle F <b>423</b>.
Referring to FIG. 10, circle D <b>415</b> proceeds to decision diamond <b>414</b> where the question is asked, has the threshold of instruction prefetch buffer <b>24</b> been exceeded. If the threshold of instruction prefetch buffer <b>24</b> has not been exceeded, the flow continues from decision diamond <b>414</b> to step <b>411</b> where the instruction prefetch priority is elevated. Referring to decision diamond <b>414</b>, if the threshold of instruction prefetch buffer <b>24</b> has been exceeded, the flow continues from decision diamond <b>414</b> to decision diamond <b>424</b> where sub-thresholds are used to determine the priority between write buffer <b>30</b>, push buffer <b>28</b>, and instruction prefetch buffer <b>24</b>. Referring to decision diamond <b>424</b>, if the fullness of write buffer <b>30</b> compared to its sub-threshold value is used to determine that write buffer <b>30</b> should have priority, the flow continues at step <b>409</b> where the priority of write buffer <b>30</b> is elevated. If the fullness of push buffer <b>28</b> compared to its sub-threshold value is used to determine that push buffer <b>28</b> should have priority, then the flow continues from decision diamond <b>424</b> to step <b>420</b> where the priority of push buffer <b>28</b> is elevated. Similarly, if the fullness of instruction prefetch buffer <b>24</b> compared to its sub-threshold value is used to determine that the instruction prefetch buffer <b>24</b> should have priority, then the flow continues from decision diamond <b>424</b> to step <b>411</b> where the priority of the instruction prefetch buffer <b>24</b> is elevated. Note that comparing circuitry <b>61</b> and priority control <b>34</b> (see FIG. 2) may be used to perform the necessary comparisons of information (e.g. fullness, emptiness) from the various resources (e.g. <b>22</b>, <b>24</b>, <b>26</b>, <b>28</b>, and <b>30</b>) and the predetermined or previously programmed priority criteria from a user programmable storage circuit (e.g. threshold levels, sub-threshold levels, priority tie-breaking information received from registers <b>66</b>, <b>68</b>, and <b>70</b>).
From circle F <b>423</b> the flow continues at decision diamond <b>422</b> where the question is asked, is the instruction prefetch buffer <b>24</b> full. If the instruction prefetch buffer <b>24</b> is not full, the flow continues from decision diamond <b>422</b> to step <b>411</b> where the priority of the instruction prefetch buffer <b>24</b> is elevated. If the instruction prefetch buffer <b>24</b> is full, the flow continues from decision diamond <b>422</b> to decision diamond <b>425</b> (see FIG. 9) by way of circle A <b>426</b>. Similarly, from step <b>409</b>, step <b>420</b>, and step <b>411</b> the flow continues at decision diamond <b>425</b> (see FIG. 9) by way of circle A<b>426</b>.
Referring again to FIG. 9, decision diamond <b>425</b> asks the question, is there a change of flow instruction fetch request or a data request. If there is not, the flow continues from decision diamond <b>425</b> to decision diamond <b>401</b>. However, if there is a change of flow instruction fetch request or a data request, the flow continues from decision diamond <b>425</b> to either start oval <b>200</b> for a data request (see FIG. 5) or start oval <b>300</b> for a change of flow instruction fetch request (see FIG. <b>7</b>).
In FIG. 10, once the priority of a buffer has been elevated in steps <b>409</b>, <b>411</b>, or <b>420</b>, the respective buffer access may be performed.
DESCRIPTION OF OPERATION
In present day data processors there can be multiple sources of requests to a shared memory resource. For example, referring to FIG. 1, it is possible for multiple resources (e.g. instruction cache <b>22</b>, instruction prefetch buffer <b>24</b>, data cache <b>26</b>, push buffer <b>28</b>, and write buffer <b>30</b>) to concurrently request access to memory <b>14</b>. Note that the requests by instruction cache <b>22</b> and data cache <b>26</b> may be refill requests. It is also possible for other resources (e.g. other bus masters <b>16</b>) to also request access to memory <b>14</b> at the same time. For example, other bus masters <b>16</b> may include a direct memory access (DMA) device. In alternate embodiments of the present invention, any type of circuitry may be trying to access a shared memory resource such as memory <b>14</b>. Also, it is important to note that the various resources competing for access to a shared memory resource, such as memory <b>14</b>, may be operating at significantly lower frequencies than CPU <b>20</b> and thus can produce stalls in CPU <b>20</b> by delaying access to shared resources. Referring to FIG. 1, although memory <b>14</b> has been illustrated as being external to processor <b>12</b>, in alternate embodiments of the present invention any portions of the circuitry illustrated in FIG. 1 may be implemented on the same integrated circuit die, or partitioned into two or more separate integrated circuit die.
Referring to FIGS. 1 and 2, in one embodiment of the present invention, priority control circuitry <b>34</b> monitors signals from CPU <b>20</b> and dynamically checks for resource usage before assigning priority to a request which requires access and usage of system bus <b>50</b>. The purpose of priority control circuitry <b>34</b> is to determine how close each of the competing resources (<b>22</b>, <b>24</b>, <b>26</b>, <b>28</b>, <b>30</b>) is to causing a stall in CPU <b>20</b>. In one embodiment of the present invention priority control circuitry <b>34</b> will be programmed to give priority to the resource competing for bus <b>50</b> that is most likely to next cause a stall of CPU <b>20</b>. For example, priority control <b>34</b> needs to ascertain how full write buffer <b>30</b> is because a full write buffer <b>30</b> can cause a stall of CPU <b>20</b>. Similarly, a full push buffer <b>28</b> can cause a stall of CPU <b>20</b>, and thus priority control circuitry <b>34</b> will also monitor how full push buffer <b>28</b> is. Priority control circuitry <b>34</b> will also monitor how full instruction prefetch buffer <b>24</b> is to ensure that instruction prefetch buffer <b>24</b> does not get so empty that it causes a stall of CPU <b>20</b>.
In one embodiment of the present invention, priority control circuitry <b>34</b> monitors instruction cache <b>22</b> or CPU <b>20</b> in order to determine when a change of instruction flow is occurring. The reason priority control circuitry <b>34</b> wants to detect a change of instruction flow is that a change of instruction flow will cause the contents of instruction prefetch buffer <b>24</b> to no longer be useable and will require new instructions to be prefetched for the new instruction flow. Priority control circuitry <b>34</b> monitors data cache <b>26</b> in order to detect when a data cache miss has occurred and thus to detect that a data cache refill will be needed using system bus <b>50</b>. If a data cache miss occurs, CPU <b>20</b> may be stalled until the data is retrieved across system bus <b>50</b>. Thus it is desirable for priority control circuitry <b>34</b> to dynamically and flexibly adjust the priority between the various resources (<b>22</b>, <b>24</b>, <b>26</b>, <b>28</b>, <b>30</b>) which are competing for the use of system bus <b>50</b>.
The present invention allows dynamic and adaptive priority manipulation in a data processing system <b>10</b>. Referring to FIG. 2, in one embodiment, the present invention allows dynamic and adaptive priority manipulation based on the number of valid entries in write buffer <b>30</b> and push buffer <b>28</b>. Note that push buffer <b>28</b> may also be called a write back or copy back buffer. Write buffer <b>30</b> may be implemented as a first-in first-out (FIFO) queue or buffer that can defer pending write misses or writes marked as write-through in order to maximize performance. When write buffer <b>30</b> is enabled, store operations which miss in data cache <b>26</b> or which are marked as write-through are placed in write buffer <b>30</b>, and the access by CPU <b>20</b> is terminated. These buffered writes are held for later transfer to system bus <b>50</b>. If a pending instruction cache <b>22</b> fill is requested while there are valid entries in write buffer <b>30</b>, priority control circuitry <b>34</b> assigns priority based on the number of valid entries in write buffer <b>30</b>. After emptying write buffer <b>30</b> to a predetermined threshold value (e.g. half the size of write buffer <b>30</b>) the priority may be switched, and pending instruction cache <b>22</b> fill requests may be serviced. Upon completion of the instruction cache <b>22</b> fill requests, or if the number of valid entries in write buffer <b>30</b> becomes greater than the threshold value, the priority may be switched back to service the writes from write buffer <b>30</b>. Alternate embodiments of the present invention may prioritize the requests from resources <b>22</b>, <b>24</b>, <b>26</b>, <b>28</b>, and <b>30</b> in any manner whatsoever using the user programmable portion of circuitry <b>64</b> (see FIG. <b>2</b>). The described prioritization is just one possible prioritization among many.
Refer to FIGS. 3 and 4 and FIGS. 9 and 10 for one possible implementation of an adaptive priority control scheme based on the number of valid entries in write buffer <b>30</b> and push buffer <b>28</b>. But again, note that alternate embodiments of the present invention may prioritize in any manner.
Priority control circuitry <b>34</b> may also implement priority switching in order to alleviate collisions in write buffer <b>30</b>. One possible implementation of such a priority switching method is illustrated in FIGS. 5 and 6. For a read miss in data cache <b>26</b>, address bits of the valid entries in write buffer <b>30</b> are compared (e.g. by way of comparing circuitry <b>61</b>) with the read miss address in order to detect a collision. If a collision is detected, then all the entries in write buffer <b>30</b> prior to and including the colliding entry are flushed out to the main memory (e.g. memory <b>14</b>). Priority control circuitry <b>34</b> may then switch the priority to the read miss of data cache <b>26</b> for servicing, and the remaining entries from the write buffer <b>30</b> may be written to main memory after servicing the read miss of data cache <b>26</b>.
By increasing the threshold value of write buffer <b>30</b>, more writes will be held in the buffer for a longer period of time before the threshold value is reached. Thus, the dynamic and programmable threshold feature of the present invention allows the entries to be present in the write buffer <b>30</b> for longer periods of time without impacting the performance of CPU <b>20</b>. In this way, the external bus traffic (e.g. system bus <b>50</b>) can be minimized further by write merging (i.e. write hits in write buffer <b>30</b>).
In alternate embodiments of the present invention, priority control circuitry <b>34</b> may implement dynamic priority manipulation based on the number of valid entries in instruction prefetch buffer <b>24</b> and based on the size of instructions. In one embodiment, an instruction cache <b>22</b> read miss request can be categorized as either a sequential instruction pre-fetch, a sequential instruction fetch, or a change of flow condition. A threshold value can be programmed for instruction prefetch buffer <b>24</b>. Sequential instruction pre-fetch requests can be serviced based on the threshold value and the size of the instructions (e.g. 16 bits, 32 bits, 64 bits).
In one embodiment of the present invention, priority control circuitry <b>34</b> may implement priority elevation based on change of flow conditions in CPU <b>20</b>. Change of flow conditions can arise due to a speculative or non-speculative branch target fetch, an exception fetch, or jumps. The change of flow signal from CPU <b>20</b> may be used by priority control circuitry <b>34</b> to elevate the priority of a read miss due to a change of flow of instruction cache <b>22</b>. The threshold value of write buffer <b>30</b> may be dynamically increased if a change of flow causes a miss in instruction cache <b>22</b>, thus resulting in instruction cache <b>22</b> making a request to main memory <b>14</b>. By increasing the threshold value, the relative priority of write buffer <b>30</b> may be lowered if the increased threshold value is above the current number of valid entries in write buffer <b>30</b>. After servicing the change of flow request from instruction cache <b>22</b>, the threshold value for write buffer <b>30</b> may be reduced and writes from write buffer <b>30</b> may be serviced until it reaches its threshold value before servicing another sequential request from instruction cache <b>22</b>. Priority control circuitry <b>34</b> can be programmed so that change of flow requests take priority over pending sequential prefetch misses. This can be useful where the frequency of CPU <b>20</b> is higher than the frequency of main memory (e.g. memory <b>14</b>), and prefetch requests are still outstanding when the change of flow occurs. Note that FIGS. 7 and 8 illustrate one possible way in which priority control circuitry <b>34</b> may implement a priority elevation scheme based on a change of flow condition. Alternate embodiments of the present invention may implement such a scheme in any manner.
Note that priority control circuitry <b>34</b> may implement a variety of ways to dynamically alter the priority scheme. For example, control registers <b>70</b> (see FIG. 2) may be used to program a wide variety of priority schemes, some or all of which may be dynamically altered by the user under software control. Note that in alternate embodiments of the present invention the priority scheme implemented by priority control circuitry <b>34</b> may be mask programmable, dynamically programmable by the user during the operation of processor <b>12</b>, may be implemented in one-time programmable registers, or any other type of storage medium or circuitry which allows selection of the priority scheme by the user of processor <b>12</b> at least once.
Referring to FIG. 2, threshold registers <b>66</b> may store one or more thresholds for each resource within processor <b>12</b> which is seeking access to system bus <b>50</b>. Sub-threshold registers <b>68</b> may be used by priority control circuitry <b>34</b> as indicators of how close the various resources in processor <b>12</b> (<b>22</b>, <b>24</b>, <b>26</b>, <b>28</b>, <b>30</b>) are to reaching their respective threshold values stored in threshold registers <b>66</b>. Thus priority control circuitry <b>34</b> may use the sub-threshold registers <b>68</b> to make informed decisions regarding priority when various resources have not yet reached their threshold values. Referring to FIG. <b>2</b>, comparing circuitry <b>61</b> may be used by circuitry <b>60</b> in order to compare the threshold value stored in threshold registers <b>66</b> with the incoming status values from instruction prefetch buffer <b>24</b>, push buffer <b>28</b>, and write buffer <b>30</b>. In one embodiment of the present invention, threshold registers <b>66</b> store a threshold value which specifies a fullness level of each of the buffer resources (<b>24</b>, <b>28</b>, <b>30</b>). The status information provided from these buffers (<b>24</b>, <b>28</b>, <b>30</b>) to comparing circuitry <b>61</b> indicates how full the respective buffer currently is.
Note that requests for instruction prefetch buffer <b>24</b> are used to fill the buffer, and it exceeds its threshold once the number of valid entries is greater than the predetermined threshold. In contrast, requests from push buffer <b>28</b> and write buffer <b>30</b> are generated to empty these buffers. Once their respective number of valid entries have exceeded their respective thresholds, the generated requests imply that a higher priority is needed.
In one embodiment of the present invention priority control circuitry <b>34</b> may be adapted to implement programmable instruction/data priority for simultaneous sub-threshold requests. In the case of simultaneous requests to use system bus <b>50</b>, if the instruction prefetch buffer <b>24</b> is near full (i.e. has low priority) and write buffer <b>30</b> has few entries (i.e. less than its threshold value), the action of priority control circuitry <b>34</b> can be programmed based on differences in the number of valid entries in both buffers and the respective threshold values. In other words, if buffer <b>24</b> has exceeded its threshold (implying fullness), and buffers <b>28</b> and <b>30</b> have not exceeded their respective threshold values (implying they have not reached a full state), then priority control circuitry <b>34</b> may use sub-threshold values stored in sub-threshold registers <b>68</b> in order to determine the respective priority between buffers <b>24</b>, <b>28</b>, and <b>30</b>. As an example if instruction prefetch buffer <b>24</b> is fetching instructions from a slow memory and the data for data requests is located in a fast memory, priority control circuitry <b>34</b> can be programmed to give priority to instruction requests from instruction prefetch buffer <b>24</b> over data requests from write buffer <b>30</b> or push buffer <b>28</b> when subthreshold conditions exist. In alternate data processing systems, it may be preferable to give priority to write buffer <b>30</b> when subthreshold conditions exist in order to avoid a future read collision with a write buffer entry.
Referring to FIG. 2, some embodiments of the present invention may utilize a priority effectiveness monitor <b>62</b> which monitors the performance of processor <b>12</b> and adaptively modifies the priority programming in priority control circuitry <b>34</b>. Thus priority effectiveness monitor <b>62</b> may adjust the priority scheme of priority control circuitry <b>34</b> based on the performance of processor <b>12</b>. In the embodiment illustrated in FIG. 2, priority effectiveness monitor <b>62</b> monitors the performance of the system by monitoring signals within circuitry <b>60</b>. Priority effectiveness monitor <b>62</b> modifies the priority of priority control circuitry <b>34</b> by modifying values in threshold registers <b>66</b> and/or sub-threshold registers <b>68</b> and/or control registers <b>70</b>. Note that the circuitry to specify priority rules <b>64</b> may include other circuitry which may or may not be user programmable but which is used to specify or assist in specifying the priority scheme used within processor <b>12</b>.
Although a variety of priority schemes for processor <b>12</b> have been described herein, alternate embodiments of the present invention may use any priority scheme. Thus priority control circuitry <b>34</b> may be used to implement any priority scheme between any number of resources within processor <b>12</b> (e.g. <b>22</b>, <b>24</b>, <b>26</b>, <b>28</b>, and <b>30</b>) which are competing for any common resource (e.g. system bus <b>50</b>). In one embodiment, priority control circuitry <b>34</b> will implement a priority scheme which minimizes the amount of time which CPU <b>20</b> will be stalled due to conflicts accessing a shared resource such as system bus <b>50</b>. Alternate embodiments of the present invention may adjust the priority scheme used by priority control circuitry <b>34</b> in order to minimize or maximize some other selected criteria. For example, the performance of CPU <b>20</b> may be measured in some other way other than the time that CPU <b>20</b> is stalled. For example, one criteria that may be used by priority control circuitry <b>34</b> is a goal of minimizing the traffic on system bus <b>50</b>. Alternate embodiments of the present invention may select any goal for processor <b>12</b> or data processing system <b>10</b> which is desired. This selective goal may then be measured by any criteria (e.g. CPU <b>20</b> stalls, or system bus <b>50</b> utilization) which is desired. Referring to FIG. 2, although the present invention has been described in the context of threshold values, alternative embodiments of the present invention may use other mechanisms to weigh and specify the desired fullness or emptiness of selected resources. For example some resources (e.g. data cache <b>26</b> and instruction cache <b>22</b>) do not use threshold values. Instead values may be stored in a storage circuit (e.g. control registers <b>70</b>) which may then be used by priority control circuitry <b>34</b> to determine the priority scheme to be used between data cache <b>26</b> and instruction cache <b>22</b>. Note that in alternate embodiments of the present invention a user may provide program information to priority control circuitry <b>34</b> by way of system bus <b>50</b> or other integrated circuit terminals which access processor <b>12</b> (not shown).
Although the invention has been described with respect to specific conductivity types or polarity of potentials, skilled artisans appreciated that conductivity types and polarities of potentials may be reversed.
In the foregoing specification, the invention has been described with reference to specific embodiments. However, one of ordinary skill in the art appreciates that various modifications and changes can be made without departing from the scope of the present invention as set forth in the claims below. Accordingly, the specification and figures are to be regarded in an illustrative rather than a restrictive sense, and all such modifications are intended to be included within the scope of present invention.
Benefits, other advantages, and solutions to problems have been described above with regard to specific embodiments. However, the benefits, advantages, solutions to problems, and any element(s) that may cause any benefit, advantage, or solution to occur or become more pronounced are not to be construed as a critical, required, or essential feature or element of any or all the claims. As used herein, the terms “comprises,” “comprising,” or any other variation thereof, are intended to cover a non-exclusive inclusion, such that a process, method, article, or apparatus that comprises a list of elements does not include only those elements but may include other elements not expressly listed or inherent to such process, method, article, or apparatus.
Contents6
11 sheets
Sheet 1 Sheet 2 Sheet 3 Sheet 4 Sheet 5 Sheet 6 Sheet 7 Sheet 8 Sheet 9 Sheet 10 Sheet 11
Every citation, both ways
| Document | Relation | Office | Cited during |
|---|---|---|---|
| US2007043909A1 | Cited by | United States of America | Pre-grant |
| US7506106B2 | Cited by | United States of America | Applicant |
| US2011040941A1 | Cited by | United States of America | Pre-grant |
| US2003131269A1 | Cited by | United States of America | Pre-grant |
| US2008040591A1 | Cited by | United States of America | Pre-grant |
| US2007101105A1 | Cited by | United States of America | Pre-grant |
| US2011225651A1 | Cited by | United States of America | Pre-grant |
| US7512740B2 | Cited by | United States of America | Search report |
| US9436629B2 | Cited by | United States of America | Applicant |
| US10275377B2 | Cited by | United States of America | Applicant |
| US11243694B2 | Cited by | United States of America | Applicant |
| US8171309B1 | Cited by | United States of America | Applicant |
| US7114086B2 | Cited by | United States of America | Search report |
| US2008034146A1 | Cited by | United States of America | Pre-grant |
| US8260990B2 | Cited by | United States of America | Applicant |
| US9575768B1 | Cited by | United States of America | Applicant |
| US2007101104A1 | Cited by | United States of America | Pre-grant |
| US2007043908A1 | Cited by | United States of America | Pre-grant |
| US8443187B1 | Cited by | United States of America | Applicant |
| US8510560B1 | Cited by | United States of America | Applicant |
| US2010070751A1 | Cited by | United States of America | Pre-grant |
| US8843686B1 | Cited by | United States of America | Applicant |
| US8549630B2 | Cited by | United States of America | Search report |
| US8095816B1 | Cited by | United States of America | Search report |
| US9836306B2 | Cited by | United States of America | Applicant |
| US7509459B2 | Cited by | United States of America | Applicant |
| US7664920B2 | Cited by | United States of America | Applicant |
| US9141394B2 | Cited by | United States of America | Applicant |
| US9860862B1 | Cited by | United States of America | Applicant |
| US7533220B2 | Cited by | United States of America | Applicant |
| US8327056B1 | Cited by | United States of America | Applicant |
| US8839016B2 | Cited by | United States of America | Applicant |
| US8296555B2 | Cited by | United States of America | Applicant |
| US9304773B2 | Cited by | United States of America | Applicant |
| US2007043907A1 | Cited by | United States of America | Pre-grant |
| US8688968B2 | Cited by | United States of America | Applicant |
| US2009077321A1 | Cited by | United States of America | Pre-grant |
| US9253175B1 | Cited by | United States of America | Applicant |
| US9652249B1 | Cited by | United States of America | Applicant |
| US7613850B1 | Cited by | United States of America | Applicant |
| US2007055824A1 | Cited by | United States of America | Pre-grant |
| US10979412B2 | Cited by | United States of America | Applicant |
| US8321706B2 | Cited by | United States of America | Applicant |
| US11972361B2 | Cited by | United States of America | Applicant |
| US9769653B1 | Cited by | United States of America | Applicant |
| US8078806B2 | Cited by | United States of America | Applicant |
| US8443211B2 | Cited by | United States of America | Applicant |
| US7251702B2 | Cited by | United States of America | Search report |
| US9736801B1 | Cited by | United States of America | Applicant |
| US7480769B2 | Cited by | United States of America | Applicant |
| US7822943B2 | Cited by | United States of America | Applicant |
| US11204802B2 | Cited by | United States of America | Applicant |
| US2010174934A1 | Cited by | United States of America | Pre-grant |
| US4729093A | Cites | United States of America | Applicant |
| US5553268A | Cites | United States of America | Applicant |
| US5572686A | Cites | United States of America | Search report |
| US5572734A | Cites | United States of America | Search report |
| US5577230A | Cites | United States of America | Applicant |
| US5904732A | Cites | United States of America | Applicant |
| US6014722A | Cites | United States of America | Applicant |
| US6029223A | Cites | United States of America | Search report |
| US6032232A | Cites | United States of America | Applicant |
| US6058461A | Cites | United States of America | Applicant |
| US6108738A | Cites | United States of America | Search report |
| US6145033A | Cites | United States of America | Applicant |
| US6185637B1 | Cites | United States of America | Search report |
| US6233645B1 | Cites | United States of America | Applicant |
| US6671752B1 | Cites | United States of America | Search report |
| MPC603e & EC603e, RISC Microprocessor User's Manual, Chapter 1 Overview, Rev. 1, 1997 Motorola, pp. 1-1 to 1-38. | Non-patent | – | Applicant |
| MC88110, Second Generation RISC Microprocessor User's Manual, Section 6, Instruction and Data Caches, Motorola, pp. 6-1 to 6-45. | Non-patent | – | Applicant |
| Form PCT/ISA/2062. | Non-patent | – | Applicant |
10 members in 7 offices; this record represents the family
Priority claims2
| Document | Office | Kind | Date |
|---|---|---|---|
| 92712301 | United States of America | A | |
| US20010927123 | – | – | – |
Members10
| Document | Office | Kind | |
|---|---|---|---|
| US2003033461A1 | United States of America | A1 | |
| WO03014945A2 | World Intellectual Property Organization (WIPO) | A2 | |
| AU2002355533A1 | Australia | A1 | |
| WO03014945A3 | World Intellectual Property Organization (WIPO) | A3 | |
| TW565769B | Taiwan Province of China | B | |
| EP1419447A2 | European Patent Office (EPO) | A2 | |
| KR20040054673A | Republic of Korea | A | |
| CN1554050A | China | A | |
| US6832280B2This record | United States of America | B2 | |
| CN1554050B | China | B |
38 transactions on the USPTO file
Allowed after 1 non-final rejection.
- Non-final rejections
- 1
- Final rejections
- 0
- RCEs
- 0
- Appeals
- 0
Over time
Point at a mark for the transactionTransactions
| Event | Code | |
|---|---|---|
| Post Issue Communication - Certificate of CorrectionN423 | N423 | |
| Recordation of Patent Grant MailedPGM/ | PGM/ | |
| Patent Issue Date Used in PTA CalculationAllowedPTAC | PTAC | |
| Issue Notification MailedAllowedWPIR | WPIR | |
| Receipt into PubsR1021 | R1021 | |
| Dispatch to FDCD1935 | D1935 | |
| Application Is Considered Ready for IssuePILS | PILS | |
| Issue Fee Payment VerifiedN084 | N084 | |
| Miscellaneous Incoming LetterLET. | LET. | |
| Issue Fee Payment ReceivedIFEE | IFEE | |
| Receipt into PubsR1021 | R1021 | |
| Receipt into PubsR1021 | R1021 | |
| Workflow - File Sent to ContractorSENT | SENT | |
| Mail Notice of AllowanceAllowedMN/=. | MN/=. | |
| Notice of Allowance Data Verification CompletedAllowedN/=. | N/=. | |
| Case Docketed to Examiner in GAUDOCK | DOCK | |
| Date Forwarded to ExaminerFWDX | FWDX | |
| Response after Non-Final ActionA... | A... | |
| Workflow incoming amendment IFWWAMD | WAMD | |
| Mail Non-Final RejectionNon-final rejectionMCTNF | MCTNF | |
| Non-Final RejectionNon-final rejectionCTNF | CTNF | |
| Case Docketed to Examiner in GAUDOCK | DOCK | |
| Case Docketed to Examiner in GAU | – | |
| Case Docketed to Examiner in GAU | – | |
| Case Docketed to Examiner in GAU | – | |
| Information Disclosure Statement (IDS) Filed | – | |
| Information Disclosure Statement (IDS) Filed | – | |
| Information Disclosure Statement (IDS) Filed | – | |
| Information Disclosure Statement (IDS) Filed | – | |
| Case Docketed to Examiner in GAUDOCK | DOCK | |
| Case Docketed to Examiner in GAUDOCK | DOCK | |
| Case Docketed to Examiner in GAUDOCK | DOCK | |
| Application Dispatched from OIPEOIPE | OIPE | |
| Correspondence Address ChangeC.AD | C.AD | |
| IFW Scan & PACR Auto Security Review | – | |
| Information Disclosure Statement (IDS) Filed | – | |
| Information Disclosure Statement (IDS) Filed | – | |
| Initial Exam Team nnIEXX | IEXX |
37 legal events, as the office reported them to INPADOC
Over the term
Point at a mark for the eventEvents
| Event | Code | |
|---|---|---|
| AssignmentAS | AS | |
| AssignmentAS | AS | |
| AssignmentAS | AS | |
| AssignmentAS | AS | |
| AssignmentAS | AS | |
| AssignmentAS | AS | |
| AssignmentAS | AS | |
| AssignmentAS | AS | |
| AssignmentAS | AS | |
| AssignmentAS | AS | |
| AssignmentAS | AS | |
| AssignmentAS | AS | |
| AssignmentAS | AS | |
| AssignmentAS | AS | |
| AssignmentAS | AS | |
| AssignmentAS | AS | |
| Fee paymentFPAY | FPAY | |
| AssignmentAS | AS | |
| AssignmentAS | AS | |
| AssignmentAS | AS | |
| AssignmentAS | AS | |
| AssignmentAS | AS | |
| AssignmentAS | AS | |
| AssignmentAS | AS | |
| AssignmentAS | AS | |
| AssignmentAS | AS | |
| Fee paymentFPAY | FPAY | |
| AssignmentAS | AS | |
| AssignmentAS | AS | |
| Fee paymentFPAY | FPAY | |
| AssignmentAS | AS | |
| AssignmentAS | AS | |
| Certificate of correctionCC | CC | |
| Information on status: patent grantGrantedPATENTED CASESTCF | STCF | |
| AssignmentAS | AS | |
| AssignmentAS | AS | |
| AssignmentAS | AS |
Numbers
- Publication, DOCDB
- 6832280
- Publication, EPODOC
- US6832280
- Application
- 9927123
- Application, DOCDB
- 92712301
- Application, EPODOC
- US20010927123
Titles
- English
- Data processing system having an adaptive priority controller
Patent term adjustment
- A delay
- +564 daysthe office missed an examination deadline
- Applicant delay
- −43 days
- Net adjustment
- 521 days
Classification
- CPC, 2
- G06F13/18
- G06F13/36
- IPC, 2
- G06F13 18
- G06F13 36
- USPC, 3
- 710200000
- 710113000
- 710116000