Non-volatile memory device and method for programming non-volatile memory device
11152066 · 2021-10-19
Assignee
Inventors
Cpc classification
G11C2013/0088
PHYSICS
G11C2013/0092
PHYSICS
International classification
G11C11/00
PHYSICS
Abstract
A non-volatile memory device and a method for programming a non-volatile memory device are provided. The non-volatile memory device includes a memory array and a memory controller. The memory array includes a plurality of memory cells. The memory controller is configured to regulate a programming operation by applying a program pulse generated according to a set pulse and a reset pulse to each of the memory cells. The memory controller determines whether a memory cell resistance of each of the memory cells is within a target range and apply the program pulse to each of the memory cells until the memory cell resistances of all of the memory cells are within the target range.
Claims
1. A non-volatile memory device comprising: a memory array, comprises a plurality of memory cells; and a memory controller, configured to regulate a programming operation by applying a program pulse generated according to a set pulse and a reset pulse to each of the memory cells, wherein the memory controller determines whether a memory cell resistance of each of the memory cells is within a target range and apply the program pulse to each of the memory cells until the memory cell resistances of all of the memory cells are within the target range.
2. The non-volatile memory device of claim 1, wherein the memory controller respectively checks whether the memory cell resistance of each of the memory cells is within the target range; and keeps applying the program pulse to the memory cell, when the memory cell resistance of the memory cell is not within the target range.
3. The non-volatile memory device of claim 2, wherein the memory controller stops applying the program pulse to the memory cell, when the memory cell resistance of the memory cell is within the target range.
4. The non-volatile memory device of claim 2, wherein after respectively checking whether the memory cell resistance of each of the memory cells is within the target range, the memory controller determines whether the memory cell resistances of all of the memory cells in the memory array reach the target range.
5. The non-volatile memory device of claim 4, wherein when the memory cell resistances of all of the memory cells in the memory array do not reach the target range, the memory controller performs a next programming operation.
6. The non-volatile memory device of claim 4, wherein when the memory cell resistances of all the memory cells in the memory array reaches the target range, the memory controller terminates the programming operation.
7. The non-volatile memory device of claim 1, wherein the program pulse comprises a portion of a plurality of steps in the set pulse and an amplitude of the program pulse is between an amplitude of the set pulse and an amplitude of the reset pulse.
8. The non-volatile memory device of claim 7, wherein a difference between program currents of the plurality of steps in the program pulse is equal to a ratio of a program current of set pulse to a number of steps in the set pulse.
9. The non-volatile memory device of claim 8, wherein a number of the steps in the program pulse is half of the number of the steps in the set pulse.
10. The non-volatile memory device of claim 1, wherein the non-volatile memory device is a PCRAM.
11. A method for programming a non-volatile memory device comprising a plurality of memory cells and a memory controller, the method comprising: selecting at least one of the memory cells in a memory array; performing a programming operation on the memory cells by applying a program pulse generated according to a set pulse and a reset pulse to each of the memory cells; determining whether a memory cell resistance of each of the memory cells is within a target range; and applying the program pulse to each of the memory cells until the memory cell resistances of all of the memory cells are within the target range.
12. The method of claim 11, wherein the programming operation comprises: respectively checking whether the memory cell resistance of each of the memory cells is within the target range; and keeping applying the program pulse to the memory cells when the memory cell resistance of the memory cell is not within the target range; and stopping applying the program pulse to the memory cell, when the memory cell resistance of the memory cell is within the target range.
13. The method of claim 12, wherein after respectively checking whether the memory cell resistance of each of the memory cells is within the target range, the method comprises: determining whether the memory cell resistances of all of the memory cells in the memory array reach the target range.
14. The method of claim 13, wherein the method comprises: when memory cell resistances of all of the memory cells in the memory array do not reach the target range, performing a next programming operation.
15. The method of claim 13, wherein the method comprises: when memory cell resistances of all of the memory cells in the memory array reach the target range, terminating the programming operation.
16. The method claim 11, wherein the program pulse comprises a portion of a plurality of steps in the set pulse and an amplitude of the program pulse is between an amplitude of the set pulse and an amplitude of the reset pulse.
17. The method of claim 16, wherein a difference between program currents of the plurality of steps in the program pulse is equal to a ratio of a program current of the set pulse to a number of the steps in the set pulse.
18. The method of claim 17, wherein a number of the steps in the program pulse is half of the number of the steps in the set pulse.
19. A method of generating a program pulse for a programming operation in a non-volatile memory device, the method comprising: determining a plurality of steps in the program pulse from a plurality of steps in a set pulse; determining an amplitude of the program pulse to be between an amplitude of the set pulse and an amplitude of a reset pulse; determining a program current corresponding to each of the steps in the program pulse, wherein a difference between the program currents of the steps in the program pulse is equal to a ratio of a program current of the set pulse to a number of the steps in the set pulse; and generating the program pulse according to the determined steps, the determined amplitude and the determined program current.
20. The method of claim 19, wherein a number of the steps in the program pulse is half of the number of the steps in the set pulse.
Description
BRIEF DESCRIPTION OF THE DRAWINGS
(1) Aspects of the present disclosure are best understood from the following detailed description when read with the accompanying figures. It is noted that, in accordance with the standard practice in the industry, various features are not drawn to scale. In fact, the dimensions of the various features may be arbitrarily increased or reduced for clarity of discussion.
(2)
(3)
(4)
(5)
(6)
(7)
(8)
(9)
(10)
(11)
(12)
DESCRIPTION OF THE EMBODIMENTS
(13) The following disclosure provides many different embodiments, or examples, for implementing different features of the present disclosure. Specific examples of components and arrangements are described below to simplify the present disclosure. These are, of course, merely examples and are not intended to be limiting. For example, the formation of a first feature over or on a second feature in the description that follows may include embodiments in which the first and second features are formed in direct contact, and may also include embodiments in which additional features may be formed between the first and second features, such that the first and second features may not be in direct contact. In addition, the present disclosure may repeat reference numerals and/or letters in the various examples. This repetition is for the purpose of simplicity and clarity and does not in itself dictate a relationship between the various embodiments and/or configurations discussed.
(14) Further, spatially relative terms, such as “beneath,” “below,” “lower,” “above,” “upper” and the like, may be used herein for ease of description to describe one element or feature's relationship to another element(s) or feature(s) as illustrated in the figures. The spatially relative terms are intended to encompass different orientations of the device in use or operation in addition to the orientation depicted in the figures. The apparatus may be otherwise oriented (rotated 90 degrees or at other orientations) and the spatially relative descriptors used herein may likewise be interpreted accordingly.
(15)
(16) The non-volatile memory device 100 is, for example, a resistive non-volatile memory device. In some embodiments, the non-volatile memory device is phase-change random access memory (PCRAM).
(17) In some embodiment, the non-volatile memory device 100 is Mask ROM, PROM, EPROM, or EEPROM, and the type of non-volatile memory device 100 is not limited in this disclosure.
(18) The memory array 110 includes a plurality of memory cells arranged at an intersection of a plurality of rows (also known as word lines WL) and a plurality of columns (also known as bit lines BL).
(19) The memory controller 120 is configured to regulate a programming operation by applying a program pulse to each of the memory cells. The program pulse is a voltage pulse with an amplitude with M number of steps, where M is a positive integer. The program pulse is generated according to a set pulse and a reset pulse. The memory controller 120 also regulates an erasing operation and a reading operation in addition to the programming operation.
(20) In some embodiments, the program pulse is a current pulse, thus the type of the program pulse applied in the programming operation is not limited in this disclosure.
(21) The memory controller 120 determines a memory cell resistance R.sub.CELL of each of the memory cells in the memory array 110 with a target range and applies a program pulse to each of the memory cells in the memory array 110. The target range of the non-volatile memory device 100 is in the range of 20 Kohm to 5 Mohm. In specific, the memory controller 120 determines whether the memory cell resistance R.sub.CELL of each of the memory cells falls within an error margin of the target resistance, that is, the target range.
(22) In one example, the error margin of the target resistance is 10% of the target resistance.
(23) In another example, the error margin of the target resistance is a predetermined range and is determined by a user or an external device. It is noted that, the error margin of the target resistance is not limited in the disclosure.
(24) In some embodiments, when the memory cell resistance R.sub.CELL of each of the memory cells is greater than the target range, the memory controller 120 applies the program pulse to the memory cells in the memory array 110. In other words, the program pulse behaves as a set pulse, which results in decreasing the memory cell resistance R.sub.CELL of the memory cells in the memory array 110.
(25) On the other hand, when the memory cell resistance R.sub.CELL of each of the memory cells in the memory array 110 are within the target range, the memory controller 120 stops applying the program pulse to the memory cells in the memory array 110.
(26) Moreover, when the memory cell resistance R.sub.CELL of each of the memory cells is less than the target range, the memory controller 120 applies the program pulse to the memory cells in the memory array 110. In other words, the program pulse behaves as a reset pulse in this condition, which results in decreasing the memory cell resistance R.sub.CELL of the memory cells in the memory array 110.
(27)
(28) In
(29) In some embodiments, the number of steps N in the set pulse 211 is not limited.
(30) Referring to
(31) With reference to
(32) In
(33)
(34) In step S302, the memory controller 120 respectively checks whether a memory cell resistance R.sub.CELL of each of the memory cells in the memory array 110 is within a target range.
(35) When the memory cell resistance R.sub.CELL of the memory cell in the memory array 110 is greater than the target range, the memory controller 120 applies the program pulse 213 with reference to
(36) On the other hand, when the memory cell resistance R.sub.CELL of the memory cells in the memory array 110 is within the target range, in step S304, the memory controller 120 stops applying the program pulse 213 to the memory cells.
(37) When the memory cell resistance R.sub.CELL of each of the memory cells is less than the target range, in step S305, the memory controller 120 applies the program pulse to the memory cells in the memory array 110. During this period, the program pulse 213 behaves as a reset pulse 212 with reference to
(38) In step S306, the memory controller 120 determines whether all of the memory cells in the memory array 110 are checked. It is noted that, checking each of the memory cells in the memory array 110 is comparing each of the memory cell resistance R.sub.CELL of the memory cell with the target range. If there is a memory cell in the memory array 110 not checked, the programming operation return to step S302. If all of the memory cells in the memory array 110 are checked, the programming operation proceeds to step S307.
(39) In step S307, the memory controller 120 determines whether the memory cell resistances of all of the memory cells in the memory array 110 are fallen within the target range. If the memory cell resistances of all of the memory cells in the memory array 110 are fallen within the target range, the memory controller 120 finishes the programming operation in the memory device 100 in step S309. On the other hand, if there are memory cells in the memory array 110 having memory cell resistances not fallen within the target range, the memory controller 120 performs the next programming operation on the memory device 100 in step S308 and returns the programming operation to step S302.
(40)
(41) During the programming operation, the memory controller 120 compares a memory cell resistance R.sub.CELL of the memory cell with a lower resistance threshold R.sub.TH,LOWER, in step S403. If the memory cell resistance R.sub.CELL is less than R.sub.TH,LOWER, the memory controller 120 determines whether the memory cell reaches the maximum program strength in step S405. If the memory cell does not reach the maximum program strength, the memory controller increases the program strength by applying the program pulse 213 to the memory cell in step S406 and returns the programming operation to step S402.
(42) On the other hand, if the memory cell resistance R.sub.CELL is not smaller than R.sub.TH,LOWER, the memory controller 120 proceeds to a next step by comparing the memory cell resistance R.sub.CELL with a upper resistance threshold R.sub.TH,UPPER in step S404. If the memory cell resistance R.sub.CELL is greater than the R.sub.TH,UPPER, the memory controller 120 proceeds to step S405. On contrary, if the memory cell resistance R.sub.CELL is not greater than the R.sub.TH,UPPER, the memory controller stops performing the programming operation on the memory cell in the memory array 120.
(43) If it is determined the memory cell reaches the maximum program strength in step S405, the memory controller 120 determines whether the memory cell reaches the maximum iteration in the programming operation in step S407. If the memory cell reaches the maximum iteration, then the memory controller 120 stops performing the programming operation on the memory cell in the memory array 120. On the other hand, if the memory cell does not reach the maximum iteration, the memory controller 120 resets the programming operation in the memory device 100 in step S408. In other words, memory controller 120 starts the programming operation with the weaker strength, increases the iteration counter for the memory cell in the memory array 110 and returns back to step S401.
(44)
(45) During the programming operation, the memory controller 120 compares a memory cell resistance R.sub.CELL of the memory cell with a lower resistance threshold R.sub.TH,LOWER, in step S503. If the memory cell resistance R.sub.CELL is not greater than the R.sub.TH,LOWER, the memory controller 120 determines whether the memory cell reaches the maximum program strength in step S505. If the memory cell does not reach the maximum program strength, the memory controller increases the program strength by applying the program pulse 213, with reference to
(46) On the other hand, if the memory cell resistance R.sub.CELL is greater than the R.sub.TH,LOWER, the memory controller 120 proceeds to a next step by comparing the memory cell resistance R.sub.CELL with a upper resistance threshold R.sub.TH,UPPER in step S504. If the memory cell resistance R.sub.CELL is not less than the R.sub.TH,UPPER, the memory controller 120 proceeds to step S505. On contrary, if the memory cell resistance R.sub.CELL is less than the R.sub.TH,UPPER, the memory controller stops performing the programming operation on the memory cell in the memory array 120.
(47) If it is determined the memory cell reaches the maximum program strength in step S505, the memory controller 120 determines whether the memory cell reaches the maximum iteration in the programming operation in step S507. If the memory cell reaches the maximum iteration, then the memory controller 120 stops performing the programming operation on the memory cell in the memory array 120. On the other hand, if the memory cell does not reach the maximum iteration, the memory controller 120 resets the programming operation in the memory device 100 in step S508. In other words, memory controller 120 starts the programming operation with the weaker strength, increases the iteration counter for the memory cell in the memory array 110 and returns back to step S501.
(48)
(49) During the programming operation, the memory controller 120 compares a memory cell resistance R.sub.CELL of the memory cell with a upper resistance threshold R.sub.TH,UPPER, in step S603. If the memory cell resistance R.sub.CELL is greater than the R.sub.TH,UPPER, the memory controller 120 determines whether the memory cell reaches the maximum program strength in step S605. If the memory cell does not reach the maximum program strength, the memory controller increases the program strength by applying the program pulse 213, with reference to
(50) On the other hand, if the memory cell resistance R.sub.CELL is not greater than the R.sub.TH,UPPER, the memory controller 120 proceeds to a next step by comparing the memory cell resistance R.sub.CELL with a lower resistance threshold R.sub.TH,LOWER in step S604. If the memory cell resistance R.sub.CELL is less than the R.sub.TH,LOWER, the memory controller 120 proceeds to step S605. On contrary, if the memory cell resistance R.sub.CELL is not less than the R.sub.TH,LOWER, the memory controller stops performing the programming operation on the memory cell in the memory array 120.
(51) If it is determined the memory cell reaches the maximum program strength in step S605, the memory controller 120 determines whether the memory cell reaches the maximum iteration in the programming operation in step S607. If the memory cell reaches the maximum iteration, then the memory controller 120 stops performing the programming operation on the memory cell in the memory array 120. On the other hand, if the memory cell does not reach the maximum iteration, the memory controller 120 resets the programming operation in the memory device 100 in step S608. In other words, memory controller 120 starts the programming operation with the weaker strength, increases iteration counter for the memory cell in the memory array 110 and returns back to step S601.
(52)
(53) During the programming operation, the memory controller 120 compares a memory cell resistance R.sub.CELL of the memory cell with a upper resistance threshold R.sub.TH,UPPER, in step S703. If the memory cell resistance R.sub.CELL is not less than the R.sub.TH,UPPER, the memory controller 120 determines whether the memory cell reaches the maximum program strength in step S705. If the memory cell does not reach the maximum program strength, the memory controller increases the program strength by applying the program pulse 213, with reference to
(54) On the other hand, if the memory cell resistance R.sub.CELL is less than the R.sub.TH,UPPER, the memory controller 120 proceeds to a next step by comparing the memory cell resistance R.sub.CELL with a lower resistance threshold R.sub.TH,LOWER in step S704. If the memory cell resistance R.sub.CELL is not greater than the R.sub.TH,LOWER, the memory controller 120 proceeds to step S705. On contrary, if the memory cell resistance R.sub.CELL is greater than the R.sub.TH,LOWER, the memory controller stops performing the programming operation on the memory cell in the memory array 120.
(55) If it is determined the memory cell reaches the maximum program strength in step S705, the memory controller 120 determines whether the memory cell reaches the maximum iteration in the programming operation in step S707. If the memory cell reaches the maximum iteration, then the memory controller 120 stops performing the programming operation on the memory cell in the memory array 120. On the other hand, if the memory cell does not reach the maximum iteration, the memory controller 120 resets the programming operation in the memory device 100 in step S708. In other words, memory controller 120 starts the programming operation with the weaker strength, increases the iteration counter for the memory cell in the memory array 110 and returns back to step S701.
(56)
(57) In this embodiment, two memory cells cell-1 and cell-2 are used to compare the memory cell resistance R.sub.CELL of the memory cells corresponding to the program pulse 213, with reference to
(58) It is noted that the behavior of the variation curve 801 and the variation curve 802, shows that when the program pulse 213 is applied to the cell-1 and the cell-2, the memory cell resistance R.sub.CELL decreases at first, which behaves as a set pulse 211. Then, the memory cell resistance R.sub.CELL increases with respect to the program pulse 213. In other words, during this period, the program pulse 213 behaves as a reset pulse 212. It is noted that, the variation curve 801 and the variation curve 802 is a u-shape curve. In specific, the variation curve 801 and the variation curve 802 decreases at first and then increases with respect to the program pulse 213.
(59)
(60) With reference to the program sequence in
(61) During stage S2, the memory controller 120 first determines whether the memory cell resistances R.sub.CELL of the cell-1 and the cell-2 are within the target range. As the determination results shows that the memory cell resistances R.sub.CELL of the cell-1 and the cell-2 are greater than the target range, the memory controller 120 applies the program pulse 213, with reference to
(62) In stage S3, the memory controller 120 first determines whether the memory cell resistances R.sub.CELL of the cell-1 and the cell-2 are within the target range. As the determination results shows that the memory cell resistances R.sub.CELL of the cell-1 and the cell-2 are greater than the target range, the memory controller 120 applies the program pulse 213 to reduce the memory cell resistances R.sub.CELL of the cell-1 and the cell-2 further to make the memory cell resistances R.sub.CELL of the cell-1 and the cell-2 close the target range. It is noted that the stage S3 is similar to stage S2.
(63) In stage S4, the memory controller 120 first determines whether the memory cell resistances R.sub.CELL of the cell-1 and the cell-2 are within the target range. As the determination results shows that the memory cell resistance R.sub.CELL of the cell-1 is less than the target range and the memory cell resistance R.sub.CELL of the cell-2 is greater than the target range, the memory controller 120 applies the program pulse to the cell-1 to reduce the decreasing of the memory cell resistance R.sub.CELL of the cell-1 to make the memory cell resistance R.sub.CELL of the cell-1 close to the target range. On the other hand, the memory controller 120 applies the program pulse 213 to the cell-2 to decrease the memory cell resistance R.sub.CELL of the cell-2 to make the memory cell resistance R.sub.CELL of the cell-2 close to the target range. In other words, the program pulse 213 behaves as a reset pulse 212 in the cell-1, thereby reducing the decreasing of the memory cell resistance R.sub.CELL of the cell-1. On contrary, the program pulse 213 behaves as the set pulse 211 in the cell-2, thereby decreasing the memory cell resistance R.sub.CELL of the cell-2.
(64) In stage S5, the memory controller 120 first determines whether the memory cell resistances R.sub.CELL of the cell-1 and the cell-2 within the target range. As the determination results shows that the memory cell resistance R.sub.CELL of the cell-1 is less than the target range and the memory cell resistance R.sub.CELL of the cell-2 is greater than the target range, the memory controller 120 applies the program pulse to the cell-1 to increase the memory cell resistance R.sub.CELL of the cell-1 to make the memory cell resistance R.sub.CELL of the cell-1 close to the target range. On the other hand, the memory controller 120 applies the program pulse 213 to the cell-2 to decrease the memory cell resistance R.sub.CELL of the cell-2 to make the memory cell resistance R.sub.CELL of the cell-2 close to the target range. In other words, the program pulse 213 behaves as a reset pulse 212 in the cell-1, thereby increasing the memory cell resistance R.sub.CELL of the cell-1. On contrary, the program pulse 213 behaves as the set pulse 211 in the cell-2, thereby decreasing the memory cell resistance R.sub.CELL of the cell-2.
(65) After the memory controller 120 applies the program pulse 213 respectively to the cell-1 and the cell-2, both the memory cell resistances R.sub.CELL of the cell-1 and the cell-2 finally reach the target range. It is noted that the memory controller 120 keeps applying the program pulse 213 to the cell-1 and the cell-2 until the memory cell resistances R.sub.CELL of the cell-1 and the cell-2 reach the target range. By applying the same program pulse 213 to the memory cells in the memory array 110, a waiting time of the memory cells in the non-volatile memory device 100 to reach the target range is avoided, and therefore the programming operation in the non-volatile memory device 100 is improved and the efficiency is enhanced.
(66)
(67) In step S901, the memory controller 120 selects at least one of the memory cells in the memory array 110 with reference to
(68) In step S902, the memory controller 120 performs a programming operation on the memory cells by applying a program pulse 213 generated according to a set pulse and a reset pulse to each of the memory cells.
(69) In step S903, the memory controller 120 determines whether a memory cell resistance R.sub.CELL of each of the memory cells is within a target range. In other words, the memory controller 120 compares the memory cell resistance R.sub.CELL of each of the memory cells in the memory array 110 with the target range.
(70) Based on the determination result, in step S904, the memory controller 120 applies the program pulse 213, with reference to
(71) By applying the same program pulse 213 to the memory cells in the memory array 110, waiting time of the memory cells in the non-volatile memory device 100 to reach the target range is avoided, and therefore the programming operation in the non-volatile memory device 100 is improved and the efficiency is enhanced.
(72)
(73) In step S1001, the memory controller 120 determines a plurality of steps in the program pulse from a plurality of steps in a set pulse.
(74) In step S1002, the memory controller 120 determines an amplitude of the program pulse to be between an amplitude of the set pulse and an amplitude of a reset pulse with reference to
(75) In step S1003, the memory controller 120 determines a program current corresponding to each of the steps in the program pulse. In some embodiments, a difference between a plurality of program currents of the plurality of steps in the program pulse is equal to a ratio of a program current of the set pulse to a number of the steps in the set pulse. That is, the difference between the program currents ΔI of the plurality of the steps is determined as ΔI=I.sub.PGM/N.
(76) In step S1004, the memory controller 120 generates the program pulse according to the determined steps, the determined amplitude and the determined program current. In some embodiments, the memory controller 120 generates the program pulse 213 by adjusting the program pulse 213 to be between the set pulse 211 and the reset pulse 212 with reference to
(77) By determining the program pulse in the programming operation of the non-volatile memory device instead of using the set pulse and the reset pulse to decrease or increase the memory cell resistances of the memory cells, waiting time of the memory cells in the non-volatile memory device to reach the target range is avoided.
(78) In accordance with some embodiments, the non-volatile memory device that includes a memory array and a memory controller is introduced. The memory array includes a plurality of memory cells. The memory controller is configured to regulate a programming operation by applying a program pulse generated according to a set pulse and a reset pulse to each of the memory cells. The memory controller determines whether a memory cell resistance of each of the memory cells is within a target range and apply the program pulse to each of the memory cells until the memory cell resistances of all of the memory cells are within the target range.
(79) In accordance with some embodiments, a method for programming a non-volatile memory device that includes a plurality of memory cells and a memory controller is provided, and the method includes the steps of: selecting at least one of the memory cells in a memory array; performing a programming operation on the memory cells by applying a program pulse generated according to a set pulse and a reset pulse to each of the memory cells; determining whether a memory cell resistance of each of the memory cells is within a target range; and applying the program pulse to each of the memory cells until the memory cell resistances of all of the memory cells are within the target range.
(80) In accordance with some embodiments, a method of generating a program pulse for a programming operation in a non-volatile memory device is provided, and the method includes the steps of: determining a plurality of steps in the program pulse from a plurality of steps in a set pulse; determining an amplitude of the program pulse to be between an amplitude of the set pulse and an amplitude of a reset pulse; determining a program current corresponding to each of the steps in the program pulse, wherein a difference between the program currents of the steps in the program pulse is equal to a ratio of a program current of the set pulse to a number of the steps in the set pulse; and generating the program pulse according to the determined steps, the determined amplitude and the determined program current.
(81) The foregoing has outlined features of several embodiments so that those skilled in the art may better understand the aspects of the present disclosure. Those skilled in the art should appreciate that they may readily use the present disclosure as a basis for designing or modifying other processes and structures for carrying out the same purposes and/or achieving the same advantages of the embodiments introduced herein. Those skilled in the art should also realize that such equivalent constructions do not depart from the spirit and scope of the present disclosure, and that they may make various changes, substitutions and alterations herein without departing from the spirit and scope of the present disclosure.