summaryrefslogtreecommitdiff
path: root/doc/rfc/rfc3385.txt
diff options
context:
space:
mode:
Diffstat (limited to 'doc/rfc/rfc3385.txt')
-rw-r--r--doc/rfc/rfc3385.txt1291
1 files changed, 1291 insertions, 0 deletions
diff --git a/doc/rfc/rfc3385.txt b/doc/rfc/rfc3385.txt
new file mode 100644
index 0000000..262f2d0
--- /dev/null
+++ b/doc/rfc/rfc3385.txt
@@ -0,0 +1,1291 @@
+
+
+
+
+
+
+Network Working Group D. Sheinwald
+Request for Comments: 3385 J. Satran
+Category: Informational IBM
+ P. Thaler
+ V. Cavanna
+ Agilent
+ September 2002
+
+
+ Internet Protocol Small Computer System Interface (iSCSI)
+ Cyclic Redundancy Check (CRC)/Checksum Considerations
+
+Status of this Memo
+
+ This memo provides information for the Internet community. It does
+ not specify an Internet standard of any kind. Distribution of this
+ memo is unlimited.
+
+Copyright Notice
+
+ Copyright (C) The Internet Society (2002). All Rights Reserved.
+
+Abstract
+
+ In this memo, we attempt to give some estimates for the probability
+ of undetected errors to facilitate the selection of an error
+ detection code for the Internet Protocol Small Computer System
+ Interface (iSCSI).
+
+ We will also attempt to compare Cyclic Redundancy Checks (CRCs) with
+ other checksum forms (e.g., Fletcher, Adler, weighted checksums), as
+ permitted by available data.
+
+1. Introduction
+
+ Cyclic Redundancy Check (CRC) codes [Peterson] are shortened cyclic
+ codes used for error detection. A number of CRC codes have been
+ adopted in standards: ATM, IEC, IEEE, CCITT, IBM-SDLC, and more
+ [Baicheva]. The most important expectation from this kind of code is
+ a very low probability for undetected errors. The probability of
+ undetected errors in such codes has been, and still is, subject to
+ extensive studies that have included both analytical models and
+ simulations. Those codes have been used extensively in
+ communications and magnetic recording as they demonstrate good "burst
+ error" detection capabilities, but are also good at detecting several
+ independent bit errors. Hardware implementations are very simple and
+ well known; their simplicity has made them popular with hardware
+
+
+
+
+Sheinwald, et. al. Informational [Page 1]
+
+RFC 3385 iSCSI CRC Considerations September 2002
+
+
+ developers for many years. However, algorithms and software for
+ effective implementations of CRC are now also widely available
+ [Williams].
+
+ The probability of undetected errors depends on the polynomial
+ selected to generate the code, the error distribution (error model),
+ and the data length.
+
+2. Error Models and Goals
+
+ We will analyze the code behavior under two conditions:
+
+ - noisy channel - burst errors with an average length of n bits
+ - low noise channel - independent single bit errors
+
+ Burst errors are the prevalent natural phenomenon on communication
+ lines and recording media. The numbers quoted for them revolve
+ around the BER (bit error rate). However, those numbers are
+ frequently nothing more than a reflection of the Burst Error Rate
+ multiplied by the average burst length. In field engineering tests,
+ three numbers are usually quoted together -- BER, error-free-seconds
+ and severely-error-seconds; this illustrates our point.
+
+ Even beyond communication and recording media, the effects of errors
+ will be bursty. An example of this is a memory error that will
+ affect more than a single bit and the total effect will not be very
+ different from the communication error, or software errors that occur
+ while manipulating packets will have a burst effect. Software errors
+ also result in burst errors. In addition, serial internal
+ interconnects will make this type of error the most common within
+ machines as well.
+
+ We also analyze the effects of single independent bit errors, since
+ these may be caused by certain defects.
+
+ On burst, we assume an average burst error duration of bd, which at a
+ given transmission rate s, will result in an average burst of a =
+ bd*s bits. (E.g., an average burst duration of 3 ns at 1Gbs gives an
+ average burst of 3 bits.)
+
+ For the burst error rate, we will take 10^-10. The numbers quoted
+ for BER on wired communication channels are between 10^-10 to 10^-12
+ and we consider the BER as burst-error-rate*average-burst-length.
+ Nevertheless, please keep in mind that if the channel includes
+ wireless links, the error rates may be substantially higher.
+
+ For independent single bit errors, we assume a 10^-11 error rate.
+
+
+
+
+Sheinwald, et. al. Informational [Page 2]
+
+RFC 3385 iSCSI CRC Considerations September 2002
+
+
+ Because the error detection mechanisms will have to transport large
+ amounts of data (petabytes=10^16 bits) without errors, we will target
+ very low probabilities for undetected errors for all block lengths
+ (at 10Gb/s that much data can be sent in less than 2 weeks on a
+ single link).
+
+ Alternatively, as iSCSI has to perform efficiently, we will require
+ that the error detection capability of a selected protection
+ mechanism be very good, at least up to block lengths of 8k bytes
+ (64kbits).
+
+ The error detection capability should keep the probability of
+ undetected errors at values that would be "next-to-impossible". We
+ recognize, however, that such attributes are hard to quantify and we
+ resorted to physics. The value 10^23 is the Avogadro number while
+ 10^45 is the number of atoms in the known Universe (or it was many
+ years ago when we read about it) and those are the bounds of
+ incertitude we could live with. (10^-23 at worst and 10^-45 if we
+ can afford it.) For 8k blocks, the per/bit equivalent would be
+ (10^-28 to 10^-50).
+
+3. Background and Literature Survey
+
+ Each codeword of a binary (n,k) CRC code C consists of n = k+r bits.
+ The block of r parity bits is computed from the block of k
+ information bits. The code has a degree r generator polynomial g(x).
+
+ The code is linear in the sense that the bitwise addition of any two
+ codewords yields a codeword.
+
+ For the minimal m such that g(x) divides (x^m)-1, either n=m, and the
+ code C comprises the set D of all the multiplications of g(x) modulo
+ (x^m)-1, or n<m, and C is obtained from D by shortening each word in
+ the latter in m-n specific positions. (This also reduces the number
+ of words since all zero words are then discarded and duplicates are
+ not maintained.)
+
+ Error detection at the receiving end is made by computing the parity
+ bits from the received information block, and comparing them with the
+ received parity bits.
+
+ An undetected error occurs when the received word c' is a codeword,
+ but is different from the c that is transmitted.
+
+ This is only possible when the error pattern e=c'-c is a codeword by
+ itself (because of the linearity of the code). The performance of a
+ CRC code is measured by the probability Pud of undetected channel
+ errors.
+
+
+
+Sheinwald, et. al. Informational [Page 3]
+
+RFC 3385 iSCSI CRC Considerations September 2002
+
+
+ Let Ai denote the number of codewords of weight i, (i.e., with i 1-
+ bits). For a binary symmetric channel (BSC), with sporadic,
+ independent bit error ratio of probability 0<=epsilon<=0.5, the
+ probability of undetected errors for the code C is thus given by:
+
+Pud(C,epsilon) = Sigma[for i=d to n] (Ai*(epsilon^i)*(1-epsilon)^(n-i))
+
+ where d is the distance of the code: the minimal weight difference
+ between two codewords in C which, by the linearity of the code, is
+ also the minimal weight of any codeword in the code. Pud can also be
+ expressed by the weight distribution of the dual code: the set of
+ words each of which is orthogonal (bitwise AND yields an even number
+ of 1-bits) to every word of C. The fact that Pud can be computed
+ using the dual code is extremely important; while the number of
+ codewords in the code is 2^k, the number of codewords in the dual
+ code is 2^r. k is in the orders of thousands, and r in the order of
+ 16 or 24 or 32. If we use Bi to denote the number of codewords in
+ the dual code which are of weight i, then ([LinCostello]):
+
+Pud (C,epsilon) = 2^-r Sigma [for i=0 to n] Bi*(1-2*epsilon)^i -
+(1-epsilon)^n
+
+ Wolf [Wolf94o] introduced an efficient algorithm for enumerating all
+ the codewords of a code and finding their weight distribution.
+
+ Wolf [Wolf82] found that, counter to what was assumed, (1) there
+ exist codes for which Pud(C,epsilon)>Pud(C,0.5) for some epsilon
+ not=0.5 and (2) Pud is not always increasing for 0<=epsilon<=0.5.
+ The value of what was assumed to be the worst Pud is Pud(C,0.5)=(2^-
+ r) - (2^-n). This stems from the fact that with epsilon=0.5, all 2^n
+ received words are equally likely and out of them 2^(n-r)-1 will be
+ accepted as codewords of no errors, although they are different from
+ the codeword transmitted. Previously Pud had been assumed to equal
+ [2^(n-r)-1]/(2^n-1) or the ratio of the number of non-zero multiples
+ of the polynomial of degree less than n (each such multiple is
+ undetected) and the number of possible error polynomials. With
+ either formula Pud approaches 1/2^r as n approaches infinity, but
+ Wolf's formula is more accurate.
+
+ Wolf [Wolf94j] investigated the CCITT code of r=16 parity bits. This
+ code is a member of the family of (shortened codes of) BCH codes of
+ length 2^(r-1) -1 (r=16 in the CCITT 16-bit case) generated by a
+ polynomial of the form g(x) =(x+1)p(x) with p(x) being a primitive
+ polynomial of degree r-1 (=15 in this case). These codes have a BCH
+ design distance of 4. That is, the minimal distance between any two
+ codewords in the code is at least 4 bits (which is earned by the fact
+
+
+
+
+
+Sheinwald, et. al. Informational [Page 4]
+
+RFC 3385 iSCSI CRC Considerations September 2002
+
+
+ that the sequence of powers of alpha, the root of p(x), which are
+ roots of g(x), includes three consecutive powers -- alpha^0, alpha^1,
+ alpha^2). Hence, every 3 single bit errors are detectable.
+
+ Wolf found that different shortened versions of a given code, of the
+ same codeword length, perform the same (independent of which specific
+ indexes are omitted from the original code). He also found that for
+ the unshortened codes, all primitive polynomials yield codes of the
+ same performance. But for the shortened versions, the choice of the
+ primitive polynomial does make a difference. Wolf [Wolf94j] found a
+ primitive polynomial which (when multiplied by x+1) yields a
+ generating polynomial that outperforms the CCITT one by an order of
+ magnitude. For 32-bit redundancy bits, he found an example of two
+ polynomials that differ in their probability of undetected burst of
+ length 33 by 4 orders of magnitude.
+
+ It so happens, that for some shortened codes, the minimum distance,
+ or the distribution of the weights, is better than for others derived
+ from different unshortened codes.
+
+ Baicheva, et. al. [Baicheva] made a comprehensive comparison of
+ different generating polynomials of degree 16 of the form g(x) =
+ (x+1)p(x), and of other forms. They computed their Pud for code
+ lengths up to 1024 bits. They measured their "goodness" -- if
+ Pud(C,epsilon) <= Pud(C,0.5) and being "well-behaved" -- if
+ Pud(C,epsilon) increases with epsilon in the range (0,0.5). The
+ paper gives a comprehensive table that lists which of the polynomials
+ is good and which is well-behaved for different length ranges.
+
+ For a single burst error, Wolf [Wolf94J] suggested the model of (b:p)
+ burst -- the errors only occur within a span of b bits, and within
+ that span, the errors occur randomly, with a bit error probability 0
+ <= p <= 1.
+
+ For p=0.5, which used to be considered the worst case, it is well
+ known [Wolf94J] that the probability of undetected one burst error of
+ length b <= r is 0, of length b=r+1 is 2^-(r-1), and of b > r+1, is
+ 2^-r, independently of the choice of the primitive polynomial.
+
+ With Wolf's definition, where p can be different from 0.5, indeed it
+ was found that for a given b there are values of p, different from
+ 0.5 which maximize the probability of undetected (b:p) burst error.
+
+
+
+
+
+
+
+
+
+Sheinwald, et. al. Informational [Page 5]
+
+RFC 3385 iSCSI CRC Considerations September 2002
+
+
+ Wolf proved that for a given code, for all b in the range r < b < n,
+ the conditional probability of undetected error for the (n, n-r)
+ code, given that a (b:p) burst occurred, is equal to the probability
+ of undetected errors for the same code (the same generating
+ polynomial), shortened to block length b, when this shortened code is
+ used with a binary symmetric channel with channel (sporadic,
+ independent) bit error probability p.
+
+ For the IEEE-802.3 used CRC32, Fujiwara et al. [Fujiwara89] measured
+ the weights of all words of all shortened versions of the IEEE 802.3
+ code of 32 check bits. This code is generated by a primitive
+ polynomial of degree 32:
+
+ g(x) = x^32 + x^26 + x^23 + x^22 + x^16 + x^12 + x^11 + x^10 + x^8 +
+ x^7 + x^5 + x^4 + x^2 + x + 1 and hence the designed distance of it
+ is only 3. This distance holds for codes as long as 2^32-1.
+ However, the frame format of the MAC (Media Access Control) of the
+ data link layer in IEEE 802.3, as well as that of the data link layer
+ for the Ethernet (1980) forbid lengths exceeding 12,144 bits. Thus,
+ only such bounded lengths are investigated in [Fujiwara89]. For
+ shortened versions, the minimum distance was found to be 4 for
+ lengths 4096 to 12,144; 5 for lengths 512 to 2048; and even 15 for
+ lengths 33 through 42. A chart of results of calculations of Pud is
+ presented in [Fujiwara89] from which we can see that for codes of
+ length 12,144 and BSC of epsilon = 10^-5 - 10^-4,
+ Pud(12,144,epsilon)= 10^-14 - 10^-13 and for epsilon = 10^-4 - 10^-3,
+ Pud(512,epsilon) = 10^-15, Pud(1024,epsilon) = 10^-14,
+ Pud(2048,epsilon) = 10^-13, Pud(4096,epsilon) = 10^-12 - 10^-11, and
+ Pud(8192,epsilon) = 10^-10 which is rather close to 2^-32.
+
+ Castagnoli, et. al. [Castagnoli93] extended Fujiwara's technique for
+ efficiently calculating the minimum distance through the weight
+ distribution of the dual code and explored a large number of CRC
+ codes with 24 and 32 redundancy bit. They explored several codes
+ built as a multiplication of several lower degree irreducible
+ polynomials.
+
+ In the popular class of (x+1)*deg31-irreducible-polynomial they
+ explored 47000 polynomials (not all the possible ones). The best
+ they found has d=6 up to block lengths of 5275 and d=4 up to 2^31-1
+ (bits).
+
+ The investigation was done in 1993 with a special purpose processor.
+
+ By comparison, the IEEE-802 code has d=4 up to at least 64,000 bits
+ (Fujikura stopped looking at 12,144) and d=3 up to 2^32-1 bits.
+
+
+
+
+
+Sheinwald, et. al. Informational [Page 6]
+
+RFC 3385 iSCSI CRC Considerations September 2002
+
+
+ CRC32/4 (we will refer to it as CRC32C for the remainder of this
+ memo) is 11EDC6F41; IEEE-802 CRC is 104C11DB7, denoting the
+ coefficients as a bit vector.
+
+ [Stone98] evaluated the performance of CRC (the AAL5 CRC that is the
+ same as IEEE802) and the TCP and Fletcher checksums on large amounts
+ of data. The results of this experiment indicate a serious weakness
+ of the checksums on real-data that stems from the fact that checksums
+ do not spread the "hot spots" in input data. However, the results
+ show that Fletcher behaves by a factor of 2 better than the regular
+ TCP checksum.
+
+4. Probability of Undetected Errors - Burst Error
+
+4.1 CRC32C (Derivations from [Wolf94j])
+
+ Wolf [Wolf94j] found a 32-bit polynomial of the form g(x) = (1+x)p(x)
+ for which the conditional probability of undetected error, given that
+ a burst of length 33 occurred, is at most (i.e., maximized over all
+ possible channel bit error probabilities within the burst) 4 * 10^-
+ 10.
+
+ We will now figure the probability of undetected error, given that a
+ burst of length 34 occurred, using the result derived in this paper,
+ namely that for a given code, for all b in the range 32 < b < n, the
+ conditional probability of undetected error for the (n, n-32) code,
+ given that a (b:p) burst occurred, is equal to the probability of
+ undetected errors for the same code (the same generating polynomial),
+ shortened to block length b, when this shortened code is used with a
+ binary symmetric channel with channel (sporadic, independent) bit
+ error probability p.
+
+ The approximation formula for Pud of sporadic errors, if the weights
+ Ai are distributed binomially, is:
+
+ Pud(C, epsilon) =~= Sigma[for i=d to n] ((n choose i) / 2^r )*(1-
+ epsilon)^(n-i) * epsilon^i .
+
+ Assuming a very small epsilon, this expression is dominated by i=d.
+ From [Fujiwara89] we know that for 32-bit CRC, for such small n,
+ d=15. Thus, when n grows from 33 to 34, we find that the
+ approximation of Pud grows by (34 choose 15) / (33 choose 15) =
+ 34/19; when n grows further to 35, Pud grows by another 35/20.
+
+ Taking, from Wolf [Wolf94j], the most generous conditional
+ probability, computed with the bit error probability p* that
+ maximizes Pub(p|b), we derive: Pud(p*|33) = 4 x 10^{-10}, yielding
+ Pud(p*|34) = 7.15 x 10^{-10} and Pud(p*|35) = 1.25 x 10^{-9}.
+
+
+
+Sheinwald, et. al. Informational [Page 7]
+
+RFC 3385 iSCSI CRC Considerations September 2002
+
+
+ For the density function of the burst length, we assume the Rayleigh
+ density function (the discretization thereof to integers), which is
+ the density of the absolute values of complex numbers of Gauss
+ distribution:
+
+ f(x) = x / a^2 exp {-x^2 / 2a^2 } , x>0 .
+
+ This density function has a peak at the parameter a and it decreases
+ smoothly as x increases.
+
+ We take three consecutive bits as the most common burst event once an
+ error does occur, and thus a=3.
+
+ Now, the probability that a burst of length b occurs in a specific
+ position is the burst error rate, which we estimate as 10^{-10},
+ times f(b). Calculating for b=33 we find f(33) = 1.94 x 10^{-26}.
+ Together, we found that the probability that a burst of length 33
+ occurred, starting at a specific position, is 1.94 x 10^{-36}.
+
+ Multiplying this by the generous upper bound on the probability that
+ this burst error is not detected, Pud(p*|33), we get that the
+ probability that a burst occurred at a specific position, and is not
+ detected, is 7.79 x 10 ^{-46}.
+
+ Going again along this path of calculations, this time for b=34 we
+ find that f(34) = 4.85*10^{-28}. Multiplying by 10^{-10} and by
+ Pud(p*|34) = 7.15*10^{-10} we find that the probability that a burst
+ of length 34 occurred at a specific position, and is not detected, is
+ 3.46*10^{-47}.
+
+ Last, computing for b=35, we get 1*10^{-29} * 10^{-10} * 1.25*10^{-9}
+ = 1.25*10^{-48}.
+
+ It looks like the total can be approximated at 10^-45 which is within
+ the bounds of what we are looking for.
+
+ When we multiply this by the length of the code (because thus far we
+ calculated for a specific position) we have 10^-45 * 6.5*10^4 =
+ 6.5*10^-41 as an upper bound on the probability of undetected burst
+ error for a code of length 8K Bytes.
+
+ We can also apply this overestimation for IEEE 802.3.
+
+ Comment: 2^{-32} = 2.33*10^{-10}.
+
+
+
+
+
+
+
+Sheinwald, et. al. Informational [Page 8]
+
+RFC 3385 iSCSI CRC Considerations September 2002
+
+
+5. Probability of Undetected Errors - Independent Errors
+
+5.1 CRC (Derivations from [Castagnoli93])
+
+ It is reported in [Castagnoli93] that for BER = epsilon=10^-6, Pud
+ for a single bit error, for a code of length 8KB, for both cases,
+ IEEE-802.3 and CRC32C is 10^{-20}. They also report that CRC32C has
+ distance 4, and IEEE either 3 or 4 for this code length. From this,
+ and the minimum distance of the code of this length, we conclude that
+ with our estimation of epsilon, namely 10^{-11}, we should multiply
+ the reported result by {10^{-5}}^4 = 10^{-20} for CRC32C, and either
+ 10^{-15} or 10^{-20} for IEEE802.3.
+
+5.2 Checksums
+
+ For independent bit errors, Pud of CRC is approximately 12,000 better
+ than Fletcher, and 22,000 better than Adler. For burst errors, by
+ the simple examples that exist for three consecutive values that can
+ produce an undetected burst, we take the factor to be at least the
+ same.
+
+ If in three consecutive bytes, the error values are x, -2x, x then
+ the error is undetected. Even for this error pattern alone, the
+ conditional probability of undetected error, assuming a uniform
+ distribution of data, is 2^-16 = 1.5 * 10^-5. The probability that a
+ burst of length 3 bytes occurs, is f(24) = 3*10^-14. Together:
+ 4.5*10^-19. Multiplying this by the length of the code, we get close
+ to 4.5*10^-16, way worse than the vicinity of 10^-40.
+
+ The numbers in the table in Section 7 below reflect a more "tolerant"
+ difference (10*4).
+
+6. Incremental CRC Updates
+
+ In some protocols the packet header changes frequently. If the CRC
+ includes the changing part, the CRC will have to be recomputed. This
+ raises two issues:
+
+ - the complete computation is expensive
+ - the packet is not protected against unwanted changes
+ between the last check and the recomputation
+
+ Fortunately, changes in the header do not imply a need for completed
+ CRC computation. The reason is the linearity of the CRC function.
+ Namely, with I1 and I2 denoting two equal-length blocks of
+ information bits, CRC(I) denoting the CRC check bits calculated for
+ I, and + denoting bitwise modulo-2 addition, we have CRC(I1+I2) =
+ CRC(I1)+CRC(I2).
+
+
+
+Sheinwald, et. al. Informational [Page 9]
+
+RFC 3385 iSCSI CRC Considerations September 2002
+
+
+ Hence, for an IP packet, made of a header h followed by data d
+ followed by CRC bits c = CRC(h d), arriving at a node, which updates
+ header h to become h', the implied update of c is an addition of
+ CRC(h'-h 0), where 0 is an all 0 block of the length of the data
+ block d, and addition and subtraction are bitwise modulo 2.
+
+ We know that a predetermined permutation of bits does not change
+ distance and weight statistics of the codewords. It follows that
+ such a transformation does not change the probability of undetected
+ errors.
+
+ We can then conceive the packet as if it was built from data d
+ followed by header h, compute the CRC accordingly, c=CRC(d h), and
+ update at the node with an addition of CRC(0 h'-h)=CRC(h'-h), but on
+ transmission, send the header part before the data and the CRC bits.
+ This will allow a faster computation of the CRC, while still letting
+ the header part lead (no change to the protocol).
+
+ Error detection, i.e., computing the CRC bits by the data and header
+ parts that arrive, and comparing them with the CRC part that arrives
+ together with them, can be done at the final, end-target node only,
+ and the detected errors will include unwanted changes introduced by
+ the intermediate nodes.
+
+ The analysis of the undetected error probability remains valid
+ according to the following rationale:
+
+ The packet started its way as a codeword. On its way, several
+ codewords were added to it (any information followed by the
+ corresponding CRC is a codeword). Let e denote the totality of
+ errors added to the packet, on its long, multi-hop journey. Because
+ the code is linear (i.e., the sum of two codewords is also a
+ codeword) the packet arriving to the end-target node is some codeword
+ + e, and hence, as in our preceding analysis, e is undetected if and
+ only if it is a codeword by itself. This fact is the basis of our
+ above analysis, and hence that analysis applies here too. (See a
+ detailed discussion at [braun01].)
+
+7. Complexity of Hardware Implementation
+
+ Comparing the cost of various CRC polynomials, we used a tool
+ available at http://www.easics.com/webtools/crctool to implement CRC
+ generators/checkers for various CRC polynomials. The program gives
+ either Verilog or VHDL code after specifying a polynomial, as well as
+ the number of data bits, k, to be handled in one clock cycle. For a
+ serial implementation, k would be one.
+
+
+
+
+
+Sheinwald, et. al. Informational [Page 10]
+
+RFC 3385 iSCSI CRC Considerations September 2002
+
+
+ The cost for either one generator or checker is shown in the
+ following table.
+
+ The number of 2-input XOR gates, for an un-optimized implementation,
+ required for various values of k:
+
+ +----------------------------------------------+
+ | Polynomial | k=32 | k=64 | k=128 |
+ +----------------------------------------------+
+ | CCITT-CRC32 | 488 | 740 | 1430 |
+ +----------------------------------------------+
+ | IEEE-802 | 872 | 1390 | 2518 |
+ +----------------------------------------------+
+ | CRC32Q(Wolf)| 944 | 1444 | 2534 |
+ +----------------------------------------------+
+ | CRC32C | 1036 | 1470 | 2490 |
+ +----------------------------------------------+
+
+ After optimizing (sharing terms) and in terms of Cells (4 cells per 2
+ input AND, 7 cells per 2 input XOR, 3 cells per inverter) the cost
+ for two candidate polynomials is shown in the following table.
+
+ +-----------------------------------+
+ | Polynomial | k=32 | k=64 |
+ +-----------------------------------+
+ | CCITT-CRC32 | 1855 | 3572 |
+ +-----------------------------------+
+ | CRC32C | 4784 | 7111 |
+ +-----------------------------------+
+
+ For 32-bit datapath, CCITT-CRC32 requires 40% of the number of cells
+ required by the CRC32C. For a 64-bit datapath, CCITT-CRC32 requires
+ 50% of the number of cells.
+
+ The total size of one of our smaller chips is roughly 1 million
+ cells. The fraction represented by the CRC circuit is less than 1%.
+
+8. Implementation of CRC32C
+
+8.1 A Serial Implementation in Hardware
+
+ A serial implementation that processes one data bit at a time and
+ performs simultaneous multiplication of the data polynomial by x^32
+ and division by the CRC32C polynomial is described in the following
+ Verilog [ieee1364] code.
+
+
+
+
+
+
+Sheinwald, et. al. Informational [Page 11]
+
+RFC 3385 iSCSI CRC Considerations September 2002
+
+
+ /////////////////////////////////////////////////////////////////////
+ //File: CRC32_D1.v
+ //Date: Tue Feb 26 02:47:05 2002
+ //
+ //Copyright (C) 1999 Easics NV.
+ //This source file may be used and distributed without restriction
+ //provided that this copyright statement is not removed from the file
+ //and that any derivative work contains the original copyright notice
+ //and the associated disclaimer.
+ //
+ //THIS SOURCE FILE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS
+ //OR IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
+ //WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ //
+ //Purpose: Verilog module containing a synthesizable CRC function
+ //* polynomial: (0 1 2 4 5 7 8 10 11 12 16 22 23 26 32)
+ //* data width: 1
+ //
+ //Info: jand@easics.be (Jan Decaluwe)
+ //http://www.easics.com
+ /////////////////////////////////////////////////////////////////////
+ module CRC32_D1;
+ // polynomial: (0 1 2 4 5 7 8 10 11 12 16 22 23 26 32)
+ // data width: 1
+ function [31:0] nextCRC32_D1;
+ input Data;
+ input [31:0] CRC;
+ reg [0:0] D;
+ reg [31:0] C;
+ reg [31:0] NewCRC;
+ begin
+ D[0] = Data;
+ C = CRC;
+ NewCRC[0] = D[0] ^ C[31];
+ NewCRC[1] = D[0] ^ C[0] ^ C[31];
+ NewCRC[2] = D[0] ^ C[1] ^ C[31];
+ NewCRC[3] = C[2];
+ NewCRC[4] = D[0] ^ C[3] ^ C[31];
+ NewCRC[5] = D[0] ^ C[4] ^ C[31];
+ NewCRC[6] = C[5];
+ NewCRC[7] = D[0] ^ C[6] ^ C[31];
+ NewCRC[8] = D[0] ^ C[7] ^ C[31];
+ NewCRC[9] = C[8];
+ NewCRC[10] = D[0] ^ C[9] ^ C[31];
+ NewCRC[11] = D[0] ^ C[10] ^ C[31];
+ NewCRC[12] = D[0] ^ C[11] ^ C[31];
+ NewCRC[13] = C[12];
+ NewCRC[14] = C[13];
+
+
+
+Sheinwald, et. al. Informational [Page 12]
+
+RFC 3385 iSCSI CRC Considerations September 2002
+
+
+ NewCRC[15] = C[14];
+ NewCRC[16] = D[0] ^ C[15] ^ C[31];
+ NewCRC[17] = C[16];
+ NewCRC[18] = C[17];
+ NewCRC[19] = C[18];
+ NewCRC[20] = C[19];
+ NewCRC[21] = C[20];
+ NewCRC[22] = D[0] ^ C[21] ^ C[31];
+ NewCRC[23] = D[0] ^ C[22] ^ C[31];
+ NewCRC[24] = C[23];
+ NewCRC[25] = C[24];
+ NewCRC[26] = D[0] ^ C[25] ^ C[31];
+ NewCRC[27] = C[26];
+ NewCRC[28] = C[27];
+ NewCRC[29] = C[28];
+ NewCRC[30] = C[29];
+ NewCRC[31] = C[30];
+ nextCRC32_D1 = NewCRC;
+ end
+ endfunction
+ endmodule
+
+8.2 A Parallel Implementation in Hardware
+
+ A parallel implementation that processes 32 data bits at a time is
+ described in the following Verilog [ieee1364] code. In software
+ implementations, the next state logic is typically implemented by
+ means of tables indexed by the input and the current state.
+
+ /////////////////////////////////////////////////////////////////////
+ //File: CRC32_D32.v
+ //Date: Tue Feb 26 02:50:08 2002
+ //
+ //Copyright (C) 1999 Easics NV.
+ //This source file may be used and distributed without restriction
+ //provided that this copyright statement is not removed from the file
+ //and that any derivative work contains the original copyright notice
+ //and the associated disclaimer.
+ //
+ //THIS SOURCE FILE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS
+ //OR IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
+ //WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ //
+ //Purpose: Verilog module containing a synthesizable CRC function
+ //* polynomial: p(0 to 32) := "100000101111011000111011011110001"
+ //* data width: 32
+ //
+ //Info: jand@easics.be (Jan Decaluwe)
+
+
+
+Sheinwald, et. al. Informational [Page 13]
+
+RFC 3385 iSCSI CRC Considerations September 2002
+
+
+ //http://www.easics.com
+ /////////////////////////////////////////////////////////////////////
+ module CRC32_D32;
+ // polynomial: p(0 to 32) := "100000101111011000111011011110001"
+ // data width: 32
+ // convention: the first serial data bit is D[31]
+ function [31:0] nextCRC32_D32;
+ input [31:0] Data;
+ input [31:0] CRC;
+ reg [31:0] D;
+ reg [31:0] C;
+ reg [31:0] NewCRC;
+ begin
+ D = Data;
+ C = CRC;
+ NewCRC[0] = D[31] ^ D[30] ^ D[28] ^ D[27] ^ D[26] ^ D[25] ^ D[23]
+ ^
+ D[21] ^ D[18] ^ D[17] ^ D[16] ^ D[12] ^ D[9] ^ D[8] ^
+ D[7] ^ D[6] ^ D[5] ^ D[4] ^ D[0] ^ C[0] ^ C[4] ^ C[5] ^
+ C[6] ^ C[7] ^ C[8] ^ C[9] ^ C[12] ^ C[16] ^ C[17] ^
+ C[18] ^ C[21] ^ C[23] ^ C[25] ^ C[26] ^ C[27] ^ C[28] ^
+ C[30] ^ C[31];
+ NewCRC[1] = D[31] ^ D[29] ^ D[28] ^ D[27] ^ D[26] ^ D[24] ^ D[22]
+ ^
+ D[19] ^ D[18] ^ D[17] ^ D[13] ^ D[10] ^ D[9] ^ D[8] ^
+ D[7] ^ D[6] ^ D[5] ^ D[1] ^ C[1] ^ C[5] ^ C[6] ^ C[7] ^
+ C[8] ^ C[9] ^ C[10] ^ C[13] ^ C[17] ^ C[18] ^ C[19] ^
+ C[22] ^ C[24] ^ C[26] ^ C[27] ^ C[28] ^ C[29] ^ C[31];
+ NewCRC[2] = D[30] ^ D[29] ^ D[28] ^ D[27] ^ D[25] ^ D[23] ^ D[20]
+ ^
+ D[19] ^ D[18] ^ D[14] ^ D[11] ^ D[10] ^ D[9] ^ D[8] ^
+ D[7] ^ D[6] ^ D[2] ^ C[2] ^ C[6] ^ C[7] ^ C[8] ^ C[9] ^
+ C[10] ^ C[11] ^ C[14] ^ C[18] ^ C[19] ^ C[20] ^ C[23] ^
+ C[25] ^ C[27] ^ C[28] ^ C[29] ^ C[30];
+ NewCRC[3] = D[31] ^ D[30] ^ D[29] ^ D[28] ^ D[26] ^ D[24] ^ D[21]
+ ^
+ D[20] ^ D[19] ^ D[15] ^ D[12] ^ D[11] ^ D[10] ^ D[9] ^
+ D[8] ^ D[7] ^ D[3] ^ C[3] ^ C[7] ^ C[8] ^ C[9] ^ C[10] ^
+ C[11] ^ C[12] ^ C[15] ^ C[19] ^ C[20] ^ C[21] ^ C[24] ^
+ C[26] ^ C[28] ^ C[29] ^ C[30] ^ C[31];
+ NewCRC[4] = D[31] ^ D[30] ^ D[29] ^ D[27] ^ D[25] ^ D[22] ^ D[21]
+ ^
+ D[20] ^ D[16] ^ D[13] ^ D[12] ^ D[11] ^ D[10] ^ D[9] ^
+ D[8] ^ D[4] ^ C[4] ^ C[8] ^ C[9] ^ C[10] ^ C[11] ^
+ C[12] ^ C[13] ^ C[16] ^ C[20] ^ C[21] ^ C[22] ^ C[25] ^
+ C[27] ^ C[29] ^ C[30] ^ C[31];
+ NewCRC[5] = D[31] ^ D[30] ^ D[28] ^ D[26] ^ D[23] ^ D[22] ^ D[21]
+ ^
+
+
+
+Sheinwald, et. al. Informational [Page 14]
+
+RFC 3385 iSCSI CRC Considerations September 2002
+
+
+ D[17] ^ D[14] ^ D[13] ^ D[12] ^ D[11] ^ D[10] ^ D[9] ^
+ D[5] ^ C[5] ^ C[9] ^ C[10] ^ C[11] ^ C[12] ^ C[13] ^
+ C[14] ^ C[17] ^ C[21] ^ C[22] ^ C[23] ^ C[26] ^ C[28] ^
+ C[30] ^ C[31];
+ NewCRC[6] = D[30] ^ D[29] ^ D[28] ^ D[26] ^ D[25] ^ D[24] ^ D[22]
+ ^
+ D[21] ^ D[17] ^ D[16] ^ D[15] ^ D[14] ^ D[13] ^ D[11] ^
+ D[10] ^ D[9] ^ D[8] ^ D[7] ^ D[5] ^ D[4] ^ D[0] ^ C[0] ^
+ C[4] ^ C[5] ^ C[7] ^ C[8] ^ C[9] ^ C[10] ^ C[11] ^
+ C[13] ^ C[14] ^ C[15] ^ C[16] ^ C[17] ^ C[21] ^ C[22] ^
+ C[24] ^ C[25] ^ C[26] ^ C[28] ^ C[29] ^ C[30];
+ NewCRC[7] = D[31] ^ D[30] ^ D[29] ^ D[27] ^ D[26] ^ D[25] ^ D[23]
+ ^
+ D[22] ^ D[18] ^ D[17] ^ D[16] ^ D[15] ^ D[14] ^ D[12] ^
+ D[11] ^ D[10] ^ D[9] ^ D[8] ^ D[6] ^ D[5] ^ D[1] ^
+ C[1] ^ C[5] ^ C[6] ^ C[8] ^ C[9] ^ C[10] ^ C[11] ^
+ C[12] ^ C[14] ^ C[15] ^ C[16] ^ C[17] ^ C[18] ^ C[22] ^
+ C[23] ^ C[25] ^ C[26] ^ C[27] ^ C[29] ^ C[30] ^ C[31];
+ NewCRC[8] = D[25] ^ D[24] ^ D[21] ^ D[19] ^ D[15] ^ D[13] ^ D[11]
+ ^
+ D[10] ^ D[8] ^ D[5] ^ D[4] ^ D[2] ^ D[0] ^ C[0] ^ C[2] ^
+ C[4] ^ C[5] ^ C[8] ^ C[10] ^ C[11] ^ C[13] ^ C[15] ^
+ C[19] ^ C[21] ^ C[24] ^ C[25];
+ NewCRC[9] = D[31] ^ D[30] ^ D[28] ^ D[27] ^ D[23] ^ D[22] ^ D[21]
+ ^
+ D[20] ^ D[18] ^ D[17] ^ D[14] ^ D[11] ^ D[8] ^ D[7] ^
+ D[4] ^ D[3] ^ D[1] ^ D[0] ^ C[0] ^ C[1] ^ C[3] ^ C[4] ^
+ C[7] ^ C[8] ^ C[11] ^ C[14] ^ C[17] ^ C[18] ^ C[20] ^
+ C[21] ^ C[22] ^ C[23] ^ C[27] ^ C[28] ^ C[30] ^ C[31];
+ NewCRC[10] = D[30] ^ D[29] ^ D[27] ^ D[26] ^ D[25] ^ D[24] ^
+ D[22] ^
+ D[19] ^ D[17] ^ D[16] ^ D[15] ^ D[7] ^ D[6] ^ D[2] ^
+ D[1] ^ D[0] ^ C[0] ^ C[1] ^ C[2] ^ C[6] ^ C[7] ^ C[15] ^
+ C[16] ^ C[17] ^ C[19] ^ C[22] ^ C[24] ^ C[25] ^ C[26] ^
+ C[27] ^ C[29] ^ C[30];
+ NewCRC[11] = D[21] ^ D[20] ^ D[12] ^ D[9] ^ D[6] ^ D[5] ^ D[4] ^
+ D[3] ^ D[2] ^ D[1] ^ D[0] ^ C[0] ^ C[1] ^ C[2] ^ C[3] ^
+ C[4] ^ C[5] ^ C[6] ^ C[9] ^ C[12] ^ C[20] ^ C[21];
+ NewCRC[12] = D[22] ^ D[21] ^ D[13] ^ D[10] ^ D[7] ^ D[6] ^ D[5] ^
+ D[4] ^ D[3] ^ D[2] ^ D[1] ^ C[1] ^ C[2] ^ C[3] ^ C[4] ^
+ C[5] ^ C[6] ^ C[7] ^ C[10] ^ C[13] ^ C[21] ^ C[22];
+ NewCRC[13] = D[31] ^ D[30] ^ D[28] ^ D[27] ^ D[26] ^ D[25] ^
+ D[22] ^
+ D[21] ^ D[18] ^ D[17] ^ D[16] ^ D[14] ^ D[12] ^ D[11] ^
+ D[9] ^ D[3] ^ D[2] ^ D[0] ^ C[0] ^ C[2] ^ C[3] ^ C[9] ^
+ C[11] ^ C[12] ^ C[14] ^ C[16] ^ C[17] ^ C[18] ^ C[21] ^
+ C[22] ^ C[25] ^ C[26] ^ C[27] ^ C[28] ^ C[30] ^ C[31];
+ NewCRC[14] = D[30] ^ D[29] ^ D[25] ^ D[22] ^ D[21] ^ D[19] ^
+
+
+
+Sheinwald, et. al. Informational [Page 15]
+
+RFC 3385 iSCSI CRC Considerations September 2002
+
+
+ D[16] ^
+ D[15] ^ D[13] ^ D[10] ^ D[9] ^ D[8] ^ D[7] ^ D[6] ^
+ D[5] ^ D[3] ^ D[1] ^ D[0] ^ C[0] ^ C[1] ^ C[3] ^ C[5] ^
+ C[6] ^ C[7] ^ C[8] ^ C[9] ^ C[10] ^ C[13] ^ C[15] ^
+ C[16] ^ C[19] ^ C[21] ^ C[22] ^ C[25] ^ C[29] ^ C[30];
+ NewCRC[15] = D[31] ^ D[30] ^ D[26] ^ D[23] ^ D[22] ^ D[20] ^
+ D[17] ^
+ D[16] ^ D[14] ^ D[11] ^ D[10] ^ D[9] ^ D[8] ^ D[7] ^
+ D[6] ^ D[4] ^ D[2] ^ D[1] ^ C[1] ^ C[2] ^ C[4] ^ C[6] ^
+ C[7] ^ C[8] ^ C[9] ^ C[10] ^ C[11] ^ C[14] ^ C[16] ^
+ C[17] ^ C[20] ^ C[22] ^ C[23] ^ C[26] ^ C[30] ^ C[31];
+ NewCRC[16] = D[31] ^ D[27] ^ D[24] ^ D[23] ^ D[21] ^ D[18] ^
+ D[17] ^
+ D[15] ^ D[12] ^ D[11] ^ D[10] ^ D[9] ^ D[8] ^ D[7] ^
+ D[5] ^ D[3] ^ D[2] ^ C[2] ^ C[3] ^ C[5] ^ C[7] ^ C[8] ^
+ C[9] ^ C[10] ^ C[11] ^ C[12] ^ C[15] ^ C[17] ^ C[18] ^
+ C[21] ^ C[23] ^ C[24] ^ C[27] ^ C[31];
+ NewCRC[17] = D[28] ^ D[25] ^ D[24] ^ D[22] ^ D[19] ^ D[18] ^
+ D[16] ^
+ D[13] ^ D[12] ^ D[11] ^ D[10] ^ D[9] ^ D[8] ^ D[6] ^
+ D[4] ^ D[3] ^ C[3] ^ C[4] ^ C[6] ^ C[8] ^ C[9] ^ C[10] ^
+ C[11] ^ C[12] ^ C[13] ^ C[16] ^ C[18] ^ C[19] ^ C[22] ^
+ C[24] ^ C[25] ^ C[28];
+ NewCRC[18] = D[31] ^ D[30] ^ D[29] ^ D[28] ^ D[27] ^ D[21] ^
+ D[20] ^
+ D[19] ^ D[18] ^ D[16] ^ D[14] ^ D[13] ^ D[11] ^ D[10] ^
+ D[8] ^ D[6] ^ D[0] ^ C[0] ^ C[6] ^ C[8] ^ C[10] ^ C[11] ^
+ C[13] ^ C[14] ^ C[16] ^ C[18] ^ C[19] ^ C[20] ^ C[21] ^
+ C[27] ^ C[28] ^ C[29] ^ C[30] ^ C[31];
+ NewCRC[19] = D[29] ^ D[27] ^ D[26] ^ D[25] ^ D[23] ^ D[22] ^
+ D[20] ^
+ D[19] ^ D[18] ^ D[16] ^ D[15] ^ D[14] ^ D[11] ^ D[8] ^
+ D[6] ^ D[5] ^ D[4] ^ D[1] ^ D[0] ^ C[0] ^ C[1] ^ C[4] ^
+ C[5] ^ C[6] ^ C[8] ^ C[11] ^ C[14] ^ C[15] ^ C[16] ^
+ C[18] ^ C[19] ^ C[20] ^ C[22] ^ C[23] ^ C[25] ^ C[26] ^
+ C[27] ^ C[29];
+ NewCRC[20] = D[31] ^ D[25] ^ D[24] ^ D[20] ^ D[19] ^ D[18] ^
+ D[15] ^
+ D[8] ^ D[4] ^ D[2] ^ D[1] ^ D[0] ^ C[0] ^ C[1] ^ C[2] ^
+ C[4] ^ C[8] ^ C[15] ^ C[18] ^ C[19] ^ C[20] ^ C[24] ^
+ C[25] ^ C[31];
+ NewCRC[21] = D[26] ^ D[25] ^ D[21] ^ D[20] ^ D[19] ^ D[16] ^ D[9]
+ ^
+ D[5] ^ D[3] ^ D[2] ^ D[1] ^ C[1] ^ C[2] ^ C[3] ^ C[5] ^
+ C[9] ^ C[16] ^ C[19] ^ C[20] ^ C[21] ^ C[25] ^ C[26];
+ NewCRC[22] = D[31] ^ D[30] ^ D[28] ^ D[25] ^ D[23] ^ D[22] ^
+ D[20] ^
+ D[18] ^ D[16] ^ D[12] ^ D[10] ^ D[9] ^ D[8] ^ D[7] ^
+
+
+
+Sheinwald, et. al. Informational [Page 16]
+
+RFC 3385 iSCSI CRC Considerations September 2002
+
+
+ D[5] ^ D[3] ^ D[2] ^ D[0] ^ C[0] ^ C[2] ^ C[3] ^ C[5] ^
+ C[7] ^ C[8] ^ C[9] ^ C[10] ^ C[12] ^ C[16] ^ C[18] ^
+ C[20] ^ C[22] ^ C[23] ^ C[25] ^ C[28] ^ C[30] ^ C[31];
+ NewCRC[23] = D[30] ^ D[29] ^ D[28] ^ D[27] ^ D[25] ^ D[24] ^
+ D[19] ^
+ D[18] ^ D[16] ^ D[13] ^ D[12] ^ D[11] ^ D[10] ^ D[7] ^
+ D[5] ^ D[3] ^ D[1] ^ D[0] ^ C[0] ^ C[1] ^ C[3] ^ C[5] ^
+ C[7] ^ C[10] ^ C[11] ^ C[12] ^ C[13] ^ C[16] ^ C[18] ^
+ C[19] ^ C[24] ^ C[25] ^ C[27] ^ C[28] ^ C[29] ^ C[30];
+ NewCRC[24] = D[31] ^ D[30] ^ D[29] ^ D[28] ^ D[26] ^ D[25] ^
+ D[20] ^
+ D[19] ^ D[17] ^ D[14] ^ D[13] ^ D[12] ^ D[11] ^ D[8] ^
+ D[6] ^ D[4] ^ D[2] ^ D[1] ^ C[1] ^ C[2] ^ C[4] ^ C[6] ^
+ C[8] ^ C[11] ^ C[12] ^ C[13] ^ C[14] ^ C[17] ^ C[19] ^
+ C[20] ^ C[25] ^ C[26] ^ C[28] ^ C[29] ^ C[30] ^ C[31];
+ NewCRC[25] = D[29] ^ D[28] ^ D[25] ^ D[23] ^ D[20] ^ D[17] ^
+ D[16] ^
+ D[15] ^ D[14] ^ D[13] ^ D[8] ^ D[6] ^ D[4] ^ D[3] ^
+ D[2] ^ D[0] ^ C[0] ^ C[2] ^ C[3] ^ C[4] ^ C[6] ^ C[8] ^
+ C[13] ^ C[14] ^ C[15] ^ C[16] ^ C[17] ^ C[20] ^ C[23] ^
+ C[25] ^ C[28] ^ C[29];
+ NewCRC[26] = D[31] ^ D[29] ^ D[28] ^ D[27] ^ D[25] ^ D[24] ^
+ D[23] ^
+ D[15] ^ D[14] ^ D[12] ^ D[8] ^ D[6] ^ D[3] ^ D[1] ^
+ D[0] ^ C[0] ^ C[1] ^ C[3] ^ C[6] ^ C[8] ^ C[12] ^ C[14] ^
+ C[15] ^ C[23] ^ C[24] ^ C[25] ^ C[27] ^ C[28] ^ C[29] ^
+ C[31];
+ NewCRC[27] = D[31] ^ D[29] ^ D[27] ^ D[24] ^ D[23] ^ D[21] ^
+ D[18] ^
+ D[17] ^ D[15] ^ D[13] ^ D[12] ^ D[8] ^ D[6] ^ D[5] ^
+ D[2] ^ D[1] ^ D[0] ^ C[0] ^ C[1] ^ C[2] ^ C[5] ^ C[6] ^
+ C[8] ^ C[12] ^ C[13] ^ C[15] ^ C[17] ^ C[18] ^ C[21] ^
+ C[23] ^ C[24] ^ C[27] ^ C[29] ^ C[31];
+ NewCRC[28] = D[31] ^ D[27] ^ D[26] ^ D[24] ^ D[23] ^ D[22] ^
+ D[21] ^
+ D[19] ^ D[17] ^ D[14] ^ D[13] ^ D[12] ^ D[8] ^ D[5] ^
+ D[4] ^ D[3] ^ D[2] ^ D[1] ^ D[0] ^ C[0] ^ C[1] ^ C[2] ^
+ C[3] ^ C[4] ^ C[5] ^ C[8] ^ C[12] ^ C[13] ^ C[14] ^
+ C[17] ^ C[19] ^ C[21] ^ C[22] ^ C[23] ^ C[24] ^ C[26] ^
+ C[27] ^ C[31];
+ NewCRC[29] = D[28] ^ D[27] ^ D[25] ^ D[24] ^ D[23] ^ D[22] ^
+ D[20] ^
+ D[18] ^ D[15] ^ D[14] ^ D[13] ^ D[9] ^ D[6] ^ D[5] ^
+ D[4] ^ D[3] ^ D[2] ^ D[1] ^ C[1] ^ C[2] ^ C[3] ^ C[4] ^
+ C[5] ^ C[6] ^ C[9] ^ C[13] ^ C[14] ^ C[15] ^ C[18] ^
+ C[20] ^ C[22] ^ C[23] ^ C[24] ^ C[25] ^ C[27] ^ C[28];
+ NewCRC[30] = D[29] ^ D[28] ^ D[26] ^ D[25] ^ D[24] ^ D[23] ^
+ D[21] ^
+
+
+
+Sheinwald, et. al. Informational [Page 17]
+
+RFC 3385 iSCSI CRC Considerations September 2002
+
+
+ D[19] ^ D[16] ^ D[15] ^ D[14] ^ D[10] ^ D[7] ^ D[6] ^
+ D[5] ^ D[4] ^ D[3] ^ D[2] ^ C[2] ^ C[3] ^ C[4] ^ C[5] ^
+ C[6] ^ C[7] ^ C[10] ^ C[14] ^ C[15] ^ C[16] ^ C[19] ^
+ C[21] ^ C[23] ^ C[24] ^ C[25] ^ C[26] ^ C[28] ^ C[29];
+ NewCRC[31] = D[30] ^ D[29] ^ D[27] ^ D[26] ^ D[25] ^ D[24] ^
+ D[22] ^
+ D[20] ^ D[17] ^ D[16] ^ D[15] ^ D[11] ^ D[8] ^ D[7] ^
+ D[6] ^ D[5] ^ D[4] ^ D[3] ^ C[3] ^ C[4] ^ C[5] ^ C[6] ^
+ C[7] ^ C[8] ^ C[11] ^ C[15] ^ C[16] ^ C[17] ^ C[20] ^
+ C[22] ^ C[24] ^ C[25] ^ C[26] ^ C[27] ^ C[29] ^ C[30];
+ nextCRC32_D32 = NewCRC;
+ end
+ endfunction
+
+8.3 Some Hardware Implementation Comments
+
+ The iSCSI spec specifies that the most significant 32 bits of the
+ data be complemented prior to performing the CRC computation. For
+ most implementations of the CRC algorithm, such as the ones described
+ here, which perform simultaneous multiplication by x^32 and division
+ by the CRC polynomial, this is equivalent to initializing the CRC
+ register to ones regardless of the CRC polynomial. For other
+ implementations, in particular one that only performs division by the
+ CRC polynomial (and for which the prescribed multiplication by x^32
+ is performed externally) initializing the CRC register to ones does
+ not have the same effect as complementing the most significant 32
+ bits of the message. With such implementations, for the CRC32c
+ polynomial, initializing the CRC register to 0x2a26f826 has the same
+ effect as complementing the most significant 32 bits of the data.
+ See reference [Tuikov&Cavanna] for more details.
+
+8.4 Fast Hardware Implementation References
+
+ Fast hardware implementations start from a canonic scheme (as the one
+ presented in 7.2) and optimize it based on different criteria. Two
+ classic papers on this subject are [Albertengo1990] and [Glaise1997].
+ A more modern (and systematic) approach can be found in [Shie2001]
+ and [Sprachman2001].
+
+9. Summary and Conclusions
+
+ The following table is a summary of the error detection capabilities
+ of the different codes analyzed. In the table, d is the minimal
+ distance at block length block (in bits), i/byte - software
+ instructions/byte, Table size (if table lookup needed), T-look number
+ of lookups/byte, Pudb - Pud burst and Puds - Pud sporadic:
+
+
+
+
+
+Sheinwald, et. al. Informational [Page 18]
+
+RFC 3385 iSCSI CRC Considerations September 2002
+
+
+ +-----------------------------------------------------------+
+ | Code |d| Block |i/Byte|Tsize|T-look| Pudb | Puds |
+ +-----------------------------------------------------------+
+ | Fletcher32|3| 2^19 | 2 | - | - | 10^-37 | 10^-36 |
+ +-----------------------------------------------------------+
+ | Adler32 |3| 2^19 | 3 | - | - | 10^-36 | 10^-35 |
+ +-----------------------------------------------------------+
+ | IEEE-802 |3| 2^16 | 2.75 | 2^18| 0.5/b| 10^-41 | 10^-40 |
+ +-----------------------------------------------------------+
+ | CRC32C |3| 2^31-1| 2.75 | 2^18| 0.5/b| 10^-41 | 10^-40 |
+ +-----------------------------------------------------------+
+
+ The probabilities for undetected errors in the above table are
+ computed assuming uniformly distributed data. For real data - that
+ can be biased - [Stone98], checksums behave substantially worse than
+ CRCs.
+
+ Considering the protection level it offers, the lack of sensitivity
+ for biased data and the large block it can protect, we think that
+ CRC32C is a good choice as a basic error detection mechanism for
+ iSCSI.
+
+ Please observe also that burst errors characterized by a fixed
+ average time will have a higher impact on error detection capability
+ as the speed of the channels (machines and networks) increases. The
+ only way to keep the Pud within bounds for the long-term is to reduce
+ the BER by using better coding of lower levels of the channel.
+
+10. Security Considerations
+
+ These codes detect unintentional changes to data such as those caused
+ by noise. In an environment where an attacker can change the data, it
+ can also change the error-detection code to match the new data.
+ Therefore, the error-detection codes overviewed here do not provide
+ protection against attacks. Indeed, these codes are not intended for
+ security purposes; they are meant to be used within some application,
+ and the application's threat model and security design control the
+ security considerations for the use of the CRC.
+
+11. References and Bibliography
+
+ [Albertengo1990] G. Albertengo, R. Sisto, "Parallel CRC Generation
+ IEEE Micro", Vol. 10, No. 5, October 1990, pp. 63-
+ 71.
+
+ [Arazi] B Arazi, "A commonsense Approach to the Theory of
+ Error Correcting codes".
+
+
+
+
+Sheinwald, et. al. Informational [Page 19]
+
+RFC 3385 iSCSI CRC Considerations September 2002
+
+
+ [Baicheva] T Baicheva, S Dodunekov and P Kazakov, "Undetected
+ error probability performance of cyclic redundancy-
+ check codes of 16-bit redundancy", IEEE Proceedings
+ on Communications, 147:253-256, October 2000.
+
+ [Black] "Fast CRC32 in Software" by Richard Black, 1994, at
+ www.cl.cam.ac.uk/Research/SRG/bluebook/21/crc/crc.
+ html.
+
+ [Castagnoli93] Guy Castagnoli, Stefan Braeuer and Martin Herrman
+ "Optimization of Cyclic Redundancy-Check Codes with
+ 24 and 32 Parity Bits", IEEE Transact. on
+ Communications, Vol. 41, No. 6, June 1993.
+
+ [braun01] Florian Braun and Marcel Waldvogel, "Fast
+ Incremental CRC Updates for IP over ATM Networks",
+ IEEE, High Performance Switching and Routing, 2001,
+ pp. 48-52.
+
+ [FITS] "NASA FITS documents" at http://heasarc.gsfc.nasa.
+ gov/docs/heasarc/ofwg/docs/general/checksum/node26.
+ html.
+
+ [Fujiwara89] Toru Fujiwara, Tadao Kasami, and Shu Lin, "Error
+ detecting capabilities of the shortened hamming
+ codes adopted forerror detection in IEEE standard
+ 802.3", IEEE Transactions on Communications, COM-
+ 37:986989, September 1989.
+
+ [Glaise1997] Glaise, R. J., "A two-step computation of cyclic
+ redundancy code CRC-32 for ATM networks", IBM
+ Journal of Research and Development, Volume 41,
+ Number 6, 1997.
+
+ [ieee1364] IEEE Standard Hardware Description Language Based on
+ the Verilog Hardware Description Language, IEEE
+ Standard 1364-1995, December 1995.
+
+ [LinCostello] S. Lin and D.J. Costello, Jr., "Error Control
+ Coding: Fundamentals and Applications", Englewood
+ Cliffs, NJ: Prentice Hall, 1983.
+
+ [Peterson] W Wesley Peterson & E J Weldon - Error Correcting
+ Codes - First Edition 1961/Second Edition 1972.
+
+
+
+
+
+
+
+Sheinwald, et. al. Informational [Page 20]
+
+RFC 3385 iSCSI CRC Considerations September 2002
+
+
+ [RFC2026] Bradner, S., "The Internet Standards Process --
+ Revision 3", BCP 9, RFC 2026, October 1996.
+
+ [Ritter] Ritter, T. 1986. The Great CRC Mystery. Dr. Dobb's
+ Journal of Software Tools. February. 11(2): 26-34,
+ 76-83.
+
+ [Polynomials] "Information on Primitive and Irreducible
+ Polynomials" at http://www.theory.csc.uvic.ca/~cos/
+ inf/neck/PolyInfo.html.
+
+ [RFC1146] Zweig, J. and C. Partridge, "TCP Alternate Checksum
+ Options", RFC 1146, March 1990.
+
+ [RFC1950] Deutsch, P. and J. Gailly, "ZLIB Compressed Data
+ Format Specification version 3.3", RFC 1950, May
+ 1996.
+
+ [Shie2001] Ming-Der Shieh, et. al, "A Systematic Approach for
+ Parallel CRC Computations", Journal of Information
+ Science and Engineering, Vol.17 No.3, pp.445-461.
+
+ [Sprachman2001] Michael Sprachman, "Automatic Generation of Parallel
+ CRC Circuits", IEEE Design & Test May-June 2001.
+
+ [Stone98] J. Stone et. al., "Performance of Checksums and
+ CRC's over Real Data", IEEE/ACM Transactions on
+ Networking, Vol. 6, No. 5, October 1998.
+
+ [Williams] Ross Williams - A PAINLESS GUIDE TO CRC ERROR
+ DETECTION ALGORITHMS widely available on the net -
+ (e.g., ftp.adelaide.edu.au/pub/rocksoft/crc_v3.txt)
+
+ [Wolf82] J.K. Wolf, Arnold Michelson and Allen Levesque, "On
+ the probability of undetected error for linear block
+ codes", IEEE Transactions on Communications, COM-30:
+ 317-324, 1982.
+
+ [Wolf88] J.K. Wolf, R.D. Blackeney, "An Exact Evaluation of
+ the Probability of Undetected Error for Certain
+ Shortened Binary CRC Codes", Proc. MILCOM - IEEE
+ 1988.
+
+ [Wolf94J] J.K. Wolf and Dexter Chun, "The single burst error
+ detection performance of binary cyclic codes", IEEE
+ Transactions on Communications COM-42:11-13, January
+ 1994.
+
+
+
+
+Sheinwald, et. al. Informational [Page 21]
+
+RFC 3385 iSCSI CRC Considerations September 2002
+
+
+ [Wolf94O] Dexter Chun and J.K. Wolf, "Special Hardware for
+ computing the probability of undetected error for
+ certain binary crc codes and test results", IEEE
+ Transactions on Communications, COM-42:2769-2772.
+
+ [Tuikov&Cavanna] Luben Tuikov and Vicente Cavanna, "The iSCSI CRC32C
+ Digest and the Simultaneous Multiply and Divide
+ Algorithm", January 30, 2002. White paper
+ distributed to the IETF ips iSCSI reflector.
+
+12. Acknowledgements
+
+ We would like to thank Matt Wakeley for providing us with the
+ motivation to co-author this paper and for helpful discussions on the
+ subject matter, during his employment with Agilent.
+
+13. Authors' Addresses
+
+ Julian Satran
+ IBM, Haifa Research Lab
+ MATAM - Advanced Technology Center
+ Haifa 31905, Israel
+ EMail: julian_satran@il.ibm.com
+
+
+ Dafna Sheinwald
+ IBM, Haifa Research Lab
+ MATAM - Advanced Technology Center
+ Haifa 31905, Israel
+ EMail: Dafna_Sheinwald@il.ibm.com
+
+
+ Pat Thaler
+ Agilent Technologies
+ 1101 Creekside Ridge Drive
+ Suite 100, M/S RH21
+ Roseville, CA 95661
+ EMail: pat_thaler@agilent.com
+
+
+ Vicente Cavanna
+ Agilent Technologies
+ 1101 Creekside Ridge Drive
+ Suite 100, M/S RH21
+ Roseville, CA 95661
+ EMail: vince_cavanna@agilent.com
+
+
+
+
+
+Sheinwald, et. al. Informational [Page 22]
+
+RFC 3385 iSCSI CRC Considerations September 2002
+
+
+14. Full Copyright Statement
+
+ Copyright (C) The Internet Society (2002). All Rights Reserved.
+
+ This document and translations of it may be copied and furnished to
+ others, and derivative works that comment on or otherwise explain it
+ or assist in its implementation may be prepared, copied, published
+ and distributed, in whole or in part, without restriction of any
+ kind, provided that the above copyright notice and this paragraph are
+ included on all such copies and derivative works. However, this
+ document itself may not be modified in any way, such as by removing
+ the copyright notice or references to the Internet Society or other
+ Internet organizations, except as needed for the purpose of
+ developing Internet standards in which case the procedures for
+ copyrights defined in the Internet Standards process must be
+ followed, or as required to translate it into languages other than
+ English.
+
+ The limited permissions granted above are perpetual and will not be
+ revoked by the Internet Society or its successors or assigns.
+
+ This document and the information contained herein is provided on an
+ "AS IS" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING
+ TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING
+ BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION
+ HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF
+ MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
+
+Acknowledgement
+
+ Funding for the RFC Editor function is currently provided by the
+ Internet Society.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Sheinwald, et. al. Informational [Page 23]
+