WikiPatents - Community Patent Review
Create Free Account  |  License or Sell Your Patent  |  WikiPatents Marketplace  |  WikiPatents Blog
Username:  Password:  
    
Advanced Search
Built-in self tests for large multiplier, adder, or subtractor    

Get related patents on CD
United States Patent5600658   
Link to this pagehttp://www.wikipatents.com/5600658.html
Inventor(s)Qureshi; Fazal U. R. (Cupertino, CA)
AbstractA method of testing a two-input multiplier, adder, or subtractor implementation for stuck-at faults includes a multi-step procedure for iteratively exercising all input and output permutations, and pseudo-exhaustively exercising all internal nodes. The method of testing a multiplier, adder, or subtractor involves logically partitioning the multiplication, addition, or subtraction into several smaller but identical independent operations. This logical partitioning of operations ensures that the output result will consist of several smaller identical results if the unit under test is functioning properly. Because the several smaller results are identical, comparing the smaller results to each other detects any failures internal to the multiplier, adder, or subtractor under test. The logically partitioned operations are repeated for multiple input setting to ensure a high level of fault coverage. In the testing of a multiplier, a four step iterative method fully exercises the multiplier. Each step includes iteratively filling alternate digits of one input operand with a first test value and filling the remaining digits of that operand with zero. Each step further includes the filling of one digit of the other multiplier operand with a second test value, while all remaining digits of that operand are filled with zero. Four different fill patterns are used for all permutations of the two test digits to fully exercise the multiplier. In the testing of an adder or subtractor, a two step iterative method fully exercises the adder or subtractor.
   














 Title Information Submit all comments and votes
 
Patent Text Patent PDF Print Page Summary File History
Plain text PDF images Print Summary File History Custom Search
Drawing from US Patent 5600658
Built-in self tests for large multiplier, adder, or subtractor - US Patent 5600658 Drawing
Built-in self tests for large multiplier, adder, or subtractor
Inventor     Qureshi; Fazal U. R. (Cupertino, CA)
Owner/Assignee     National Semiconductor Corporation (Santa Clara, CA)
Patent assignment
All assignments
Company News
Publication Date     February 4, 1997
Application Number     08/545,509
PAIR File History     Application Data   Transaction History
Image File Wrapper   Patent Term   Fees
Litigation
Filing Date     October 19, 1995
US Classification     708/530 714/724 714/736 714/738
Int'l Classification     G06F 011/22 G06F 011/263
Examiner     Beausoliel Jr.; Robert W.
Assistant Examiner     Iqbal; Nadeem
Attorney/Law Firm     Limbach & Limbach L.L.P.
Address
Parent Case    
Priority Data    
USPTO Field of Search     371/22.1 371/24 371/26 371/25.1 371/27 364/200 364/900
Patent Tags     built-in self tests large multiplier, adder, subtractor
   
Enter a comma (,) or semicolon (;) between multiple tag words/phrases.
Describe this patent:
 Amusing   
 Clever   
 Complex   
 Efficient   
 Historic   
 Important   
 Innovative   
 Interesting   
 Practical   
 Simple   
[no votes]
Patent WIKI

Share information and news about this patent, including information and news about the technology, inventors, company, ligation and licensing.

 References Submit all comments and votes
 
*references marked with an asterisk below are user-added references
 U.S. References
 
Add a new US reference:  
ReferenceRelevancyCommentsReferenceRelevancyComments
4866715
Van Meerbergen
714/742
Sep,1989

[0 after 0 votes]
 Foreign References
 Other References
 Market Review Submit all comments and votes
   
Market Size
Estimate the gross annual revenues of the relevant market sector:
> $10B
$5B - $10B
$2B - $5B
$500M - $2B
$100M - $500M
$10M - $100M
$1M - $10M
$500K - $1M
$100K - $500K
< $100K
[No votes]
$0
 
$0   $2.5B   $5B   $7.5B   $10B

[0 market size comments]
Market Share
Estimate the percentage of the relevant market sector this invention will capture:
75% - 100%
50% - 74.99%
25% - 49.99%
10 - 24.99%
5 - 9.99%
2 - 4.99%
1 - 1.99%
< 1%
[No votes]
0.0%
 
0%   25%   50%   75%   100%

[0 market share comments]
Reasonable Royalty
What percentage of gross sales should the inventor or assignee be paid?
75% - 100%
50% - 74.99%
25% - 49.99%
10 - 24.99%
5 - 9.99%
2 - 4.99%
1 - 1.99%
< 1%
[No votes]
0.0%
 
0%   25%   50%   75%   100%

[0 reasonable royalty comments]
Public's "Guesstimation" of Royalty Value
Market SizeN/A[No votes]
xMarket ShareN/A[No votes]
xReasonable RoyaltyN/A[No votes]

N/A

[0 Guesstimation of Royalty Value Comments]
License Availablity
If you are NOT the owner or assignee, answer here:
Yes, license is available for purchase

No, license is not currently available



[No votes]
[0 license availability comments]
License Availablity
If you ARE the owner or assignee, answer here:
Yes, license is available for purchase

No, license is not currently available



[No votes]
[0 owner/assignee comments]
Competitive Advantage
Does this invention have a significant competitive advantage over similar technologies?
Yes

No



[No votes]
Most helpful competitive advantage comment
[No comments]

[0 competitive advantage comments]
Commercial Alternatives
Are there viable commercial alternatives for this invention?
Yes

No



[No votes]
Most helpful commercial alternative comment
[No comments]

[0 commercial alternatives comments]
 Technical Review Submit all comments and votes
 Claims Submit all comments and votes
 


What is claimed is:

1. A method of testing a multiplier taking first and second N-bit input mantissa operands and producing a 2N-bit mantissa output, the method comprising the steps of:

selecting a digit size d, such that d evenly divides into N;

allocating each of the first and second N-bit input mantissa operands into N/d input digit fields, the input digit fields of the first operand being A(0) through A(N/d-1), the input digit fields of the second operand being B(0) through B(N/d-1);

allocating the 2N-bit mantissa output into 2N/d output subchunks each having d bits, the output subchunks being S(0) through S(2N/d-1);

for each of 2.sup.2d permutations of integer i and integer j, wherein i and j are from the range from 0 to 2.sup.d- 1, inclusive,

loading all even digit fields A(0) through A(N/d-2) of the first operand with i;

loading all odd digit fields A(1) through A(N/d-1) of the first operand with 0;

loading the least significant digit field B(0) of the second operand with j;

loading the more significant digit fields B(1) through B(N/d-1) of the second operand with 0;

performing a multiplication;

comparing N/2d even output subchunks S(0) through S(N/d-2) for equality;

comparing N/2d odd output subchunks S(1) through S(N/d-1) for equality;

continuing if the comparing steps detected equality;

reporting test failure if either of the comparing steps detected inequality;

for each of 2.sup.2d permutations of integer i and integer j, wherein i and j are from the range from 0 to 2.sup.d -1, inclusive,

loading all even digit fields A(0) through A(N/d-2) of the first operand with 0;

loading all odd digit fields A(1) through A(N/d-1) of the first operand with i;

loading the most significant digit field B(N/d-1) of the second operand with j;

loading the less significant digit fields B(0) through B(N/d-2) of the second operand with 0;

performing a multiplication;

comparing N/2d even output subchunks S(N/d) through S(2N/d-2) for equality; comparing N/2d odd output subchunks S(N/d+i) through S(2N/d-1) for equality;

continuing if the comparing steps detected equality;

reporting test failure if either of the comparing steps detected inequality;

for each of 2.sup.2d permutations of integer i and integer j, wherein i and j are from the range from 0 to 2.sup.d- 1, inclusive,

loading digit field A(1) of the first operand with j;

loading digit fields A(0) and A(2) through A(N/d-1) of the first operand with 0;

loading all even digit fields B(0) through B(N/d-2) of the second operand with 0;

loading all odd digit fields B(1) through B(N/d-1) of the second operand with i;

performing a multiplication;

comparing N/2d even output subchunks S(2) through S(N/d) for equality;

comparing N/2d odd output subchunks S(1) through S(N/d-1) for equality;

continuing if the comparing steps detected equality;

reporting test failure if either of the comparing steps detected inequality;

for each of 2.sup.2d permutations of integer i and integer j, wherein i and j each are from the range from 0 to 2.sup.d- 1, inclusive,

loading digit field A(N/d-2) of the first operand with j;

loading digit fields A(0) through A(N/d-3) and A(N/d-1) of the first operand with 0;

loading all even digit fields B(0) through B(N/d-2) of the second operand with 0;

loading all odd digit fields B(1) through B(N/d-1) of the second operand with i;

performing a multiplication;

comparing N/2d even output subchunks S(N/d) through S(2N/d-2) for equality;

comparing N/2d odd output subchunks S(N/d-1) through S(2N/d-3) for equality;

continuing if the comparing steps detected equality;

reporting test failure if either of the comparing steps detected inequality; and

reporting test passing if none of the above comparing steps detect inequality.

2. A method of testing a multiplier as in claim 1,

wherein all 2.sup.2d permutations of integers i and j are sequentially generated by a 2d-bit test counter having a test counter carry output.

3. A method of testing a multiplier as in claim 2,

wherein the integer i is the least significant d output bits of the test counter; and

wherein the integer j is the most significant d bits of the test counter.

4. A method of testing a multiplier as in claim 3,

wherein the 2d-bit test counter is a Johnson counter, which performs a single-bit counter output transition each increment cycle.

5. A method of testing a multiplier as in claim 3,

wherein the test counter carry output enables a two-bit step counter.

6. A method of testing a multiplier as in claim 1,

wherein the first and second N-bit input mantissa operands are writeable by external software, and the 2N-bit mantissa output is readable by external software, and

wherein the loading and comparing steps are performed by external software.

7. A method of testing a multiplier as in claim 1,

wherein the first and second N-bit input mantissa operands are not writeable by external software, and the 2N-bit mantissa output is readable by external software, and

wherein the loading steps are performed by internal test hardware, and the comparing steps are performed by external software.

8. A method of testing a multiplier as in claim 1,

wherein the first and second N-bit input mantissa operands are not writeable by external software, and the 2N-bit mantissa output is not readable by external software, and

wherein the loading and comparing steps are performed by internal test hardware.

9. A method of testing a multiplier as in claim 1,

wherein N is 256; and

wherein d is 4.

10. A method of testing a multiplier taking first and second N-bit input mantissa operands and producing a 2N-bit mantissa output, the method comprising the steps of:

selecting a digit size d, such that d evenly divides into N;

allocating each of the first and second N-bit input mantissa operands into N/d input digit fields, the input digit fields of the first operand being A(0) through A(N/d-1), the input digit fields of the second operand being B(0) through B(N/d-1);

allocating the 2N-bit mantissa output into 2N/d output subchunks each having d bits, the output subchunks being S(0) through S(2N/d-1);

for each of 2.sup.d values of integer i, wherein i takes on values in the range of 0 to 2.sup.d -1, inclusive,

loading all even digit fields A(0) through A(N/d-2) of the first operand with i;

loading all odd digit fields A(1) through A(N/d-1) of the first operand with 0;

loading the least significant digit field B(0) of the second operand with the one's complement of i;

loading the more significant digit fields B(1) through B(N/d-1) of the second operand with 0;

performing a multiplication;

comparing N/2d even output subchunks S(0) through S(N/d-2) for equality;

comparing N/2d odd output subchunks S(1) through S(N/d-1) for equality;

continuing if the comparing steps detected equality;

reporting test failure if either of the comparing steps detected inequality;

for each of 2.sup.d values of integer i, wherein i is in the range from 0 to 2.sup.d -1, inclusive,

loading all even digit fields A(0) through A(N/d-2) of the first operand with 0;

loading all odd digit fields A(1) through A(N/d-1) of the first operand with i;

loading the most significant digit field B(N/d-1) of the second operand with the one's complement of i;

loading the less significant digit fields B(0) through B(N/d-2) of the second operand with 0;

performing a multiplication;

comparing N/2d even output subchunks S(N/d) through S(2N/d-2) for equality;

comparing N/2d odd output subchunks S(N/d+1) through S(2N/d-1) for equality;

continuing if the comparing steps detected equality;

reporting test failure if either of the comparing steps detected inequality;

for each of 2.sup.d values of integer i, wherein i is in the range from 0 to 2.sup.d -1, inclusive,

loading digit field A(1) of the first operand with the one's complement of i;

loading digit fields A(0) and A(2) through A(N/d-1) of the first operand with 0;

loading all even digit fields B(0) through B(N/d-2) of the second operand with 0;

loading all odd digit fields B(1) through B(N/d-1) of the second operand with i;

performing a multiplication;

comparing N/2d even output subchunks S(2) through S(N/d) for equality;

comparing N/2d odd output subchunks S(1) through S(N/d-1) for equality;

continuing if the comparing steps detected equality;

reporting test failure if either of the comparing steps detected inequality;

for each of 2.sup.d values of integer i, wherein i is in the range from 0 to 2.sup.d -1, inclusive,

loading digit field A(N/d-2) of the first operand with the one's complement of i;

loading digit fields A(0) through A(N/d-3) and A(N/d-1) of the first operand with 0;

loading all even digit fields B(0) through B(N/d-2) of the second operand with 0;

loading all odd digit fields B(1) through B(N/d-1) of the second operand with i;

performing a multiplication;

comparing N/2d even output subchunks S(N/d) through S(2N/d-2) for equality;

comparing N/2d odd output subchunks S(N/d-1) through S(2N/d-3) for equality;

continuing if the comparing steps detected equality;

reporting test failure if either of the comparing steps detected inequality; and

reporting test passing if none of the above

comparing steps detect inequality.

11. A method of testing a multiplier as in claim 10,

wherein 2.sup.d permutations of integers i and the one's complement of i are sequentially generated by a d-bit test counter having a test counter carry output.

12. A method of testing a multiplier as in claim 11,

wherein the integer i is the output bits of the test counter; and

wherein the one's complement of i is the logical inverse of the output bits of the test counter.

13. A method of testing a multiplier as in claim 12,

wherein the d-bit test counter is a Johnson counter, which performs a single-bit counter output transition each increment cycle.

14. A method of testing a multiplier as in claim 12,

wherein the test counter carry output enables a two-bit step counter.

15. A method of testing a multiplier as in claim 10,

wherein the first and second N-bit input mantissa operands are not writeable by external software, and the 2N-bit mantissa output is readable by external software, and

wherein the loading steps are performed by internal test hardware, and the comparing steps are performed by external software.

16. A method of testing a multiplier as in claim 10,

wherein the first and second N-bit input mantissa operands are not writeable by external software, and the 2N-bit mantissa output is not readable by external software, and

wherein the loading and comparing steps are performed by internal test hardware.

17. A method of testing a multiplier as in claim 10,

wherein N is 256; and

wherein d is 4.

18. A method of testing an adder taking first and second N-bit input operands and producing an N-bit output, the method comprising the steps of:

selecting a digit size d, such that d evenly divides into N;

allocating each of the first and second N-bit input operands into N/d input digit fields, the input digit fields of the first operand being A(0) through A(N/d-1), the input digit fields of the second operand being B(0) through B(N/d-1);

allocating the N-bit output into N/d output chunks each having d bits, the output chunks being C(0) through C(N/d-1);

for each of 2.sup.2(d-1) permutations of d-1-bit integer i and d-1-bit integer j, wherein i and j are from the integer range from 0 to 2.sup.d-1 -1, inclusive,

loading the less significant d-1 bits of all digit fields A(0) through A(N/d-1) of the first operand with i;

loading the most significant bit of all digit fields A(0) through A(N/d-1) of the first operand with 0;

loading the less significant d-1 bits of all digit fields B(0) through B(N/d-1) of the second operand with j;

loading the most significant bit of all digit fields B(0) through B(N/d-1) of the second operand with 0;

performing an addition;

comparing the N/d output chunks C(0) through C(N/d-1) for equality;

continuing if the comparing step detected equality;

reporting test failure if the comparing step detected inequality; reserving r least significant bits in each of the first and second input operands and the N-bit output, r being in from the range from 1 to d-1, inclusive, the r least significant bits being set to zero, thereby defining first and second N-r bit shifted input operands and an N-r bit shifted output;

allocating each of the first and second N-r bit shifted input operands into N/d-1 shifted input digit fields, the shifted input digit fields of the first shifted operand being AS(0) through AS(N/d-2), the shifted input digit fields of the second shifted operand being BS(0) through BS(N/d-2);

allocating the N-r bit shifted output into N/d-1 shifted output chunks each having d-1 bits, the shifted output chunks being CS(0) through CS(N/d-2);

for each of 2.sup.2(d-1) permutations of d-1-bit integer i and d-1-bit integer j, wherein i and j are from the integer range from 0 to 2.sup.d-1, inclusive,

loading the less significant d-1 bits of all digit fields AS(0) through AS(N/d-1) of the first shifted operand with i;

loading the most significant bit of all digit fields AS(0) through AS(N/d-1) of the first

shifted operand with 0;

loading the less significant d-1 bits of all digit fields BS(0) through BS(N/d-1) of the second shifted operand with j;

loading the most significant bit of all digit fields BS(0) through BS(N/d-1) of the second shifted operand with 0;

performing an addition;

comparing the N/d-1 shifted output chunks CS(0) through CS(N/d-2) for equality;

continuing if the comparing step detected equality;

reporting test failure if the comparing step detected inequality; and

reporting test passing if none of the above comparing steps detect inequality.

19. A method of testing an adder as in claim 18,

wherein all2.sup.2(d-1) permutations of integers i and j are sequentially generated by a 2(d-1) bit test counter having a test counter carry output.

20. A method of testing an adder as in claim 19,

wherein the integer i is the least significant d-1 output bits of the test counter; and

wherein the integer j is the most significant d-1 bits of the test counter.

21. A method of testing an adder as in claim 20,

wherein the 2(d-1) bit test counter is a Johnson counter, which performs a single-bit counter output transition each increment cycle.

22. A method of testing an adder as in claim 20,

wherein the test counter carry output enables a one-bit step counter.

23. A method of testing an adder as in claim 18,

wherein the first and second N-bit input operands are writeable by external software, and the N-bit output is readable by external software, and

wherein the loading and comparing steps are performed by external software.

24. A method of testing an adder as in claim 18,

wherein the first and second N-bit input operands are not writeable by external software, and the N-bit output is readable by external software, and

wherein the loading steps are performed by internal test hardware, and the comparing steps are performed by external software.

25. A method of testing an adder as in claim 18,

wherein the first and second N-bit input operands are not writeable by external software, and the N-bit output is not readable by external software, and

wherein the loading and comparing steps are performed by internal test hardware.

26. A method of testing an adder as in claim 18,

wherein N is 256; and

wherein d is 4.

27. A method of testing an adder as in claim 18,

wherein r is 1.

28. A method of testing an adder as in claim 18,

wherein r is d-1.

29. A method of testing an adder taking first and second N-bit input operands and producing an N-bit output, the method comprising the steps of:

selecting a digit size d, such that d evenly divides into N;

allocating each of the first and second N-bit input operands into N/d input digit fields, the input digit fields of the first operand being A(0) through A(N/d-1), the input digit fields of the second operand being B(0) through B(N/d-1);

allocating the N-bit output into N/d output chunks each having d bits, the output chunks being C(0) through C(N/d-1);

for each of 2.sup.d-1 permutations of d-1-bit integer i, wherein i is from the integer range from 0 to 2.sup.d-1 -1, inclusive,

loading the less significant d-1 bits of all digit fields A(0) through A(N/d-1) of the first operand with i;

loading the most significant bit of all digit fields A(0) through A(N/d-1) of the first operand with 0;

loading the less significant d-1 bits of all digit fields B(0) through B(N/d-1) of the second operand with the one's complement of

i;

loading the most significant bit of all digit fields B(0) through B(N/d-1) of the second operand with 0;

performing an addition;

comparing the N/d output chunks C(0) through C(N/d-1) for equality;

continuing if the comparing step detected equality;

reporting test failure if the comparing step detected inequality;

reserving r least significant bits in each of the first and second input operands and the N-bit output, r being in from the range from 1 to d-1, inclusive, the r least significant bits being set to zero, thereby defining first and second N-r bit shifted input operands and an N-r bit shifted output;

allocating each of the first and second N-r bit shifted input operands into N/d-1 shifted input digit fields, the shifted input digit fields of the first shifted operand being AS(0) through AS(N/d-2), the shifted input digit fields of the second shifted operand being BS(0) through BS(N/d-2);

allocating the N-r bit shifted output into N/d-1 shifted output chunks each having d-1 bits, the shifted output chunks being CS(0) through CS(N/d-2);

for each of 2.sup.d-1 permutations of d-1-bit integer i, wherein i is from the integer range from 0 to 2.sup.d-1 -1, inclusive,

loading the less significant d-1 bits of all digit fields AS(0) through AS(N/d-1) of the first shifted operand with i;

loading the most significant bit of all digit fields AS(0) through AS(N/d-1) of the first shifted operand with 0;

loading the less significant d-1 bits of all digit fields BS(0) through BS(N/d-1) of the second shifted operand with the one's complement of i;

loading the most significant bit of all digit fields BS(0) through BS(N/d-1) of the second shifted operand with 0;

performing an addition;

comparing the N/d-1 shifted output chunks CS(0) through CS(N/d-2) for equality;

continuing if the comparing step detected equality;

reporting test failure if the comparing step detected inequality; and

reporting test passing if none of the above comparing steps detect inequality.

30. A method of testing an adder as in claim 29,

wherein 2.sup.d-1 permutations of integer i and the one's complement of i are sequentially generated by a d-1-bit test counter having a test counter carry output.

31. A method of testing an adder as in claim 30,

wherein the integer i is the output bits of the test counter; and

wherein the one's complement of i is the logical inverse of the output bits of the test counter.

32. A method of testing an adder as in claim 31,

wherein the d-1-bit test counter is a Johnson counter, which performs a single-bit counter output transition each increment cycle.

33. A method of testing an adder as in claim 31,

wherein the test counter carry output enables a one-bit step counter.

34. A method of testing an adder as in claim 29,

wherein the first and second N-bit input operands are writeable by external software, and the N-bit output is readable by external software, and

wherein the loading and comparing steps are performed by external software.

35. A method of testing an adder as in claim 29,

wherein the first and second N-bit input operands are not writeable by external software, and the N-bit output is readable by external software, and

wherein the loading steps are performed by internal test hardware, and the comparing steps are performed by external software.

36. A method of testing an adder as in claim 29,

wherein the first and second N-bit input operands are not writeable by external software, and the N-bit output is not readable by external software, and

wherein the loading and comparing steps are performed by internal test hardware.

37. A method of testing an adder as in claim 29,

wherein N is 256; and

wherein d is 4.

38. A method of testing an adder as in claim 29,

wherein r is 1.

39. A method of testing an adder as in claim 29,

wherein r is d-1.

40. A method of testing a subtractor taking first and second N-bit input operands and producing an N-bit output, the method comprising the steps of:

selecting a digit size d, such that d evenly divides into N;

allocating each of the first and second N-bit input operands into N/d input digit fields, the input digit fields of the first operand being A(0) through A(N/d-1), the input digit fields of the second operand being B(0) through B(N/d-1);

allocating the N-bit output into N/d output chunks each having d bits, the output chunks being C(0) through C(N/d-1);

for each of 2.sup.2(d-1) permutations of d-1-bit integer i and d-1-bit integer j, wherein i and j are from the integer range from 0 to 2.sup.d-1 -1, inclusive,

loading the less significant d-1 bits of all digit fields A(0) through A(N/d-1) of the first operand with i;

loading the most significant bit of all digit fields A(0) through A(N/d-1) of the first operand with 1;

loading the less significant d-1 bits of all digit fields B(0) through B(N/d-1) of the second operand with j;

loading the most significant bit of all digit fields B(0) through B(N/d-1) of the second operand with 0;

performing a subtraction;

comparing the N/d output chunks C(0) through C(N/d-1) for equality;

continuing if the comparing step detected equality;

reporting test failure if the comparing step detected inequality;

reserving r least significant bits in each of the first and second input operands and the N-bit output, r being in from the range from 1 to d-1, inclusive, the r least significant bits being set to zero, thereby defining first and second N-r bit shifted input operands and an N-r bit shifted output;

allocating each of the first and second N-r bit shifted input operands into N/d-1 shifted input digit fields, the shifted input digit fields of the first shifted operand being AS(0) through AS(N/d-2), the shifted input digit fields of the second shifted operand being BS(0) through BS(N/d-2);

allocating the N-r bit shifted output into N/d-1 shifted output chunks each having d-1 bits, the shifted output chunks being CS(0) through CS(N/d-2);

for each of 2.sup.2(d-1) permutations of d-1-bit integer i and d-1-bit integer j, wherein i and j are from the integer range from 0 to 2.sup.d-1 -1, inclusive,

loading the less significant d-1 bits of all digit fields AS(0) through AS(N/d-1) of the first shifted operand with i;

loading the most significant bit of all digit fields AS(0) through AS(N/d-1) of the first shifted operand with 1;

loading the less significant d-1 bits of all digit fields BS(0) through BS(N/d-1) of the second shifted operand with j;

loading the most significant bit of all digit fields BS(0) through BS(N/d-1) of the second shifted operand with 0;

performing a subtraction;

comparing the N/d-1 shifted output chunks CS(0) through CS(N/d-2) for equality;

continuing if the comparing step detected equality;

reporting test failure if the comparing step detected inequality; and

reporting test passing if none of the above comparing steps detect inequality.

41. A method of testing a subtractor as in claim 40,

wherein all 2.sup.2(d-1) permutations of integers i and j are sequentially generated by a 2(d-1) bit test counter having a test counter carry output.

42. A method of testing a subtractor as in claim 41,

wherein the integer i is the least significant d-1 output bits of the test counter; and

wherein the integer j is the most significant d-1bits of the test counter.

43. A method of testing a subtractor as in claim 42,

wherein the 2(d-1) bit test counter is a Johnson counter, which performs a single-bit counter output transition each increment cycle.

44. A method of testing a subtractor as in claim 42,

wherein the test counter carry output enables a one-bit step counter.

45. A method of testing a subtractor as in claim 40,

wherein the first and second N-bit input operands are writeable by external software, and the N-bit output is readable by external software, and

wherein the loading and comparing steps are performed by external software.

46. A method of testing a subtractor as in claim 40,

wherein the first and second N-bit input operands are not writeable by external software, and the N-bit output is readable by external software, and

wherein the loading steps are performed by internal test hardware, and the comparing steps are performed by external software.

47. A method of testing a subtractor as in claim 40,

wherein the first and second N-bit input operands are not writeable by external software, and the N-bit output is not readable by external software, and

wherein the loading and comparing steps are performed by internal test hardware.

48. A method of testing a subtractor as in claim 40,

wherein N is 256; and

wherein d is 4.

49. A method of testing a subtractor as in claim 40,

wherein r is 1.

50. A method of testing a subtractor as in claim 40,

wherein r is d-1.

51. A method of testing a subtractor taking first and second N-bit input operands and producing an N-bit output, the method comprising the steps of:

selecting a digit size d, such that d evenly divides into N;

allocating each of the first and second N-bit input operands into N/d input digit fields, the input digit fields of the first operand being A(0) through A(N/d-1), the input digit fields of the second operand being B(0) through B(N/d-1);

allocating the N-bit output into N/d output chunks each having d bits, the output chunks being C(0) through C(N/d-1);

for each of 2.sup.d-1 permutations of d-1-bit integer i, wherein i is from the integer range from 0 to 2.sup.d-1 -1, inclusive,

loading the less significant d-1 bits of all digit fields A(0) through A(N/d-1) of the first operand with i;

loading the most significant bit of all digit fields A(0) through A(N/d-1) of the first operand with 1;

loading the less significant d-1 bits of all digit fields B(0) through B(N/d-1) of the second operand with the one's complement of i;

loading the most significant bit of all digit fields B(0) through B(N/d-1) of the second operand with 0;

performing a subtraction;

comparing the N/d output chunks C(0) through C(N/d-1) for equality;

continuing if the comparing step detected equality;

reporting test failure if the comparing step detected inequality;

reserving r least significant bits in each of the first and second input operands and the N-bit output, r being in from the range from 1 to d-1, inclusive, the r least significant bits being set to zero, thereby defining first and second N-r bit shifted input operands and an N-r bit shifted output; allocating each of the first and second N-r bit shifted input operands into N/d-1 shifted input digit fields, the shifted input digit fields of the first shifted operand being AS(0) through AS(N/d-2), the shifted input digit fields of the second shifted operand being BS(0) through BS(N/d-2);

allocating the N-r bit shifted output into N/d-1 shifted output chunks each having d-1 bits, the shifted output chunks being CS(0) through CS(N/d-2); for each of 2.sup.d-1 permutations of d-1-bit integer i, wherein i is from the integer range from 0 to 2.sup.d-1 -1, inclusive,

loading the less significant d-1 bits of all digit fields AS(0) through AS(N/d-1) of the first shifted operand with i;

loading the most significant bit of all digit fields AS(0) through AS(N/d-I) of the first shifted operand with 1;

loading the less significant d-1 bits of all digit fields BS(0) through BS(N/d-1) of the second shifted operand with the one's complement of i;

loading the most significant bit of all digit fields BS(0) through BS(N/d-1) of the second shifted operand with 0;

performing a subtraction;

comparing the N/d-1 shifted output chunks CS(0) through CS(N/d-2) for equality;

continuing if the comparing step detected equality;

reporting test failure if the comparing step detected inequality; and

reporting test passing if none of the above comparing steps detect inequality.

52. A method of testing a subtractor as in claim 51,

wherein 2.sup.d-1 permutations of integer i and the one's complement of i are sequentially generated by a d-1-bit test counter having a test counter carry output.

53. A method of testing a subtractor as in claim 52,

wherein the integer i is the output bits of the test counter; and

wherein the one's complement of i is the logical inverse of the output bits of the test counter.

54. A method of testing a subtractor as in claim 53,

wherein the d-1-bit test counter is a Johnson counter, which performs a single-bit counter output transition each increment cycle.

55. A method of testing a subtractor as in claim 53,

wherein the test counter carry output enables a one-bit step counter.

56. A method of testing a subtractor as in claim 51,

wherein the first and second N-bit input operands are writeable by external software, and the N-bit output is readable by external software, and

wherein the loading and comparing steps are performed by external software.

57. A method of testing a subtractor as in claim 51,

wherein the first and second N-bit input operands are not writeable by external software, and the N-bit output is readable by external software, and

wherein the loading steps are performed by internal test hardware, and the comparing steps are performed by external software.

58. A method of testing a subtractor as in claim 51,

wherein the first and second N-bit input operands are not writeable by external software, and the N-bit output is not readable by external software, and

wherein the loading and comparing steps are performed by internal test hardware.

59. A method of testing a subtractor as in claim 51,

wherein N is 256; and

wherein d is 4.

60. A method of testing a subtractor as in claim 51,

wherein r is 1.

61. A method of testing a subtractor as in claim 51,

wherein r is d-1.
 Description Submit all comments and votes
 


BACKGROUND OF THE INVENTION

1. Field of the Invention

The present invention relates to the testing of integrated circuits and, in particular, to a built in self test (BIST) technique for determining the existence of "stuck at faults" in multiplier, adder, or subtractor implementations by pseudo-exhaustively exercising all permutations of inputs and outputs. The technique is scalable to any size.

2. Discussion of the Related Art

In a production testing environment, the testing of semiconductor devices is performed to separate good devices from bad devices. Data collected from a test program may be used for yield enhancement. This is done by finding marginal areas of the device design or in the fabrication process and then making improvements to raise yields and therefore lower cost. The basis for all testing of complex integrated circuits is the comparison of known correct output patterns to the response of a device under test. The simulation of the device design is typically done with input stimuli which fully exercise the design and therefore verify the correctness of the design. After fabrication of the design, often the same stimuli (also called test vectors) are presented to each device under test to separate good devices from defective devices. Comparisons are made cycle by cycle with an option to ignore certain pins, times, or patterns. If the device response and the expected response are not in agreement, the devices are usually considered defective.

Built-In Self-Testing (BIST) is the implementation of logic built into the circuitry to do testing without the use of an external tester for pattern generation and comparison purposes. An external tester is still needed to categorize failures and to separate good units from bad units. In this case, the external tester supplies clocks to the device and determines pass/fail from the outputs of the device. The test vectors are generated and input to the device under test, and a resulting signature is generated. The signature can be a simple pass or fail signal presented on one pin of the part, or the signal may be a polynomial generated during the self-testing. Usually, if a polynomial is used, it has some significance to the actual states of the part.

Self-testing capability can be implemented on virtually any size logic block. However, there are tradeoffs between the extra logic added to implement the self-testing capability and the inherent logic of the block to be tested. Often, the self-test logic adds not only extra hardware to the design, but also adds latency to the logic block having the self-test even under normal operations.

Many Built In Self Test (BIST) arrangements deal with embedded memory structures like Random Access Memories (RAMs). These arrangements usually tend to be implementation dependent and have rather complicated arrangements for generating data and predicting failures. In many cases, a signature is collected for analysis after a series of stimuli has been applied to the block being tested. Many BIST arrangements do not have the flexibility to be implemented with either software alone or hardware alone or a mixture of both. FIG. 2 depicts a typical self-test circuit. The logic block under test 201 has N independent logic inputs. An N-bit counter sequentially steps through all 2.sup.N unique input permutations. However, if it is desired for the self-test time to be less than about one second, N is typically limited to about twenty. The logic block under test has M output bits. An M-bit flip-flop 203 latches the output of after the first set of stimuli have been applied. Each subsequent M-bit output of the logic block is exclusive ORed with the contents of the flip-flop 203 such that at the end of the self-test, an M-bit signature is available as the output of the flip-flop 203. An exclusive OR 204 or exclusive NOR function is typically used because the its output value is always dependent upon all of the inputs. Therefore, if any single output of the logic block under test is incorrect, the final signature will be incorrect. (In contrast, a two-input AND function, for example, does not produce the same input-output dependence. For example, if one input of the AND function is zero, then the value of the other input does not influence the output at all.)

Direct access testing is alternative to direct access testing whereby an external tester gains access to a device logic block by bringing signals from the block to the outside world via multiplexors. Input test vectors are directly supplied to the logic block by the external tester, and then the outputs are directly measured by the tester. This is one of the simplest methods for checking devices for logical functionality. Often, direct access testing supplements previous testing methods by allowing the user to impose input data patterns directly on large blocks of logic which would not otherwise be directly accessible. Using direct access testing, entering a special test mode would force certain logic blocks via multiplexors to gain access to the outside pins of the part, and to measure the access, status, and logical functionality of the block directly.

Fault grading is a measure of test coverage of a given set of stimuli and responses for a given circuit. This figure of merit is used to ensure that the device is fully testable and measurable. Typically, once the test patterns are developed for the device, artificial faults are put into the design via simulation to ensure that the part is fully testable and observable.

A "stuck-at fault" may be caused by a variety of conditions, although the defining characteristic of a stuck-at fault is that a circuit node is undesirably immovable from certain logic value (either zero or one) regardless of any circuit conditions. FIG. 1 illustrates a single stuck-at-one fault 104 injected into a simple logic circuit with an exhaustive set of input data patterns for fully checking the functionality of the logic circuit. Even though the stuck-at-one fault 104 exists at an internal node which is not directly observable, the stuck-at-one fault 104 shows up on at the output Z of the circuit. Gaining high fault coverage is a very desirable method for ensuring that the tested devices will function correctly in a system. Ideally, all internal nodes should be tested for stuck-at-zero and stuck-at-one faults.

Although fault grading using single stuck-at-zero and single-stuck-at-one faults covers many types of semiconductor failures, it does not cover all of them. For example, bridging faults and intermittent faults are two other common types of faults which occur in semiconductor devices.

Data patterns that were generated during simulation are often converted into a functional production test program. The cost of production testing is very much related to test time per device. In production, package handlers, wafer probe equipment, people, and often a computer network are needed to run production tests.

One effective way to test a circuit 100 for single stuck-at faults is to exhaustively check all outputs of the circuit for correctness for all possible input permutations. For the circuit shown in FIG. 1, this is a relatively straightforward procedure which requires only sixteen separate operations of the circuit. In general, for a circuit having N inputs, 2.sup.N operations of the circuit are required to exhaustively test the circuit using all possible input permutations. This is feasible for smaller circuits; however, because the number of input permutations increases exponentially with N, exhaustively testing all 2.sup.N input permutations becomes prohibitively time consuming.

As feature sizes for semiconductor manufacturing processes become smaller, bus widths become larger. Thirty-two and sixty-four bit internal busses are commonplace today. Similarly, the widths of the arithmetic units and mathematical functions become larger. Hardware multipliers, dividers, square root modules, adders, and subtractors supporting thirty-two and sixty-four-bit operands currently are available.

Moreover, in the field of cryptography, there is demand for specialized hardware to support asymmetric encryption/decryption algorithms such as the RSA algorithm. (See, for example, U.S. Pat. No. 4,405,829 for a description of the RSA algorithm.) Such encryption algorithms typically require many multiplications of very large numbers. If very large multipliers are implemented in hardware, the testing of those multipliers offers significant challenges. For example, if it is assumed that a multiplication requires 1 nanosecond regardless of the size of the operands (a generously low estimate), an exhaustive test of a 8-bit multiplier requires only 65.5 microseconds, an exhaustive test of a 16-bit multiplier requires only 4.3 seconds, but an exhaustive test of a 32-bit multiplier would require about 584.9 years, while an exhaustive test of a 256-bit multiplier would require about 10.sup.146.6 years. This is approximately 10.sup.136.6 times greater than the estimated age of the universe (assuming that the age of the universe is 10 billion years). This demonstrates that an exhaustive test of mathematical functions in a manner such as shown in FIG. 1 is totally infeasible.

It is clear from the above discussion that there is a need for testing semiconductor circuits implementing math functions such that all internal nodes are checked for stuck-at faults without performing an exhaustive test of all possible input permutations.

SUMMARY OF THE INVENTION

One object of the present invention is to provide a method of exhaustively testing a multiplier, an adder, or a subtractor for stuck-at faults without exhaustively sequencing through all permutations of inputs. Another object of the present invention is to provide a scalable method of testing a multiplier, an adder, or a subtractor such that stuck-at faults can be located in a fixed number of steps regardless of the size of the multiplier, adder, or subtractor.

The methods of performing built-in self tests according to the present invention are used to determine if there are any "stuck at faults" in large multipliers, adders, or subtractors by pseudo-exhaustively exercising all permutations of inputs and outputs. The methods are scalable to any size and are applied to a multiplier, an adder, and a subtractor.

The built-in self-test capability according to the present invention can be invoked at any time, for example, by the user setting a self-test control bit. Setting the self-test control bit will cause the built-in self test operation to be executed a cycle after the control bit is set. If at any time during the built-in self test, the self-test detects an error, an error status bit will be set. The end of the self-test operation is indicated by an interrupt being issued. The user, which may be a test program or a production tester, can then determine if the self-test was successful by interrogating the status register containing the status bit and checking whether or not the error status bit is set. If the error bit set is set, a flaw has been detected.

The implementations of the built-in self-test methods according to the present invention are highly flexible. For example, a total hardware solution, a total software solution, or a solution using a mixture of hardware and software can be utilized to implement the built-in self-test according to the present invention. The method of testing a multiplier, an adder, or a subtractor according to the present invention is to logically partition the operation into several smaller but identical independent