|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: effect of initializing CRC reg to 1's depends on implementation?>>>>> "vince" == vince cavanna <vince_cavanna@agilent.com> writes: vince> In working with Luben Tuikov to document the math behind the vince> CRC I discovered something that surprised me. I intend to vince> study this further but hope someone can save me work by vince> pointing out that I am wrong (or right) and offering some vince> proof. vince> Consider two ways to implement the iSCSI CRC with a serial vince> divider (see PDF file): vince> 1. divide the message directly using a serial circuit that, vince> when its stages are initialized to zeroes, simultaneously vince> multiplies by x^32 and divides by G(x). vince> 2. pre-multiply message by x^32 and then divide the results by vince> G(x) using a serial circuit that, when its stages are vince> initialized to zeroes performs a division by G(x). vince> The two circuits, of course, produce the same results when vince> they are initialized to 0's. vince> In the approach in (1) initializing the register to 1's vince> appears equivalent (produces the same quotient; same vince> remainder) to initializing the register to 0's and vince> complementing the most significant 32 bits of the message vince> prior to processing. vince> In the approach of (2) such an equivalence does not appear vince> true! vince> This means to me that it is meaningless to specify that the vince> CRC must be initialized to 1's unless we refer to a specific vince> implementation which we did not do in the iSCSI spec! What is vince> troublesome is that I have seen claims in the literature (and vince> in one textbook on data communications) that initializing the vince> CRc to 1's is equivalent to complementing the most significant vince> n bits of the dividend for both implementations. I have also vince> seen the same claim with no reference to an implementation vince> (e.g. iSCSI) which would imply that the implementation does vince> not matter. I must be sounding like a broken record at this point, but I believe the answer is to use the Ethernet spec as an example. The Ethernet spec has the mathematical definition of the CRC in the body of the spec. In other words, it talks about complementing the message, multiplying by x^32. dividing by G(x), and so forth. That definition is unambiguous. In addition, the Ethernet spec gives an EXAMPLE implementation in appendix C. That is not normative; it merely shows one way to translate the math into gates. In that example implementation -- and NOT in the mathematical definition in the normative part -- it is meaningful to talk about initializing the shift register to all 1's. I would recommend using the same descriptive approach in the iSCSI spec. It may be possible simply to copy the description as it appears there (with suitable alteration to the placement of the LFSR taps, of course, for the sample implementation); I see no copyright claims on the document that prevent doing so. paul
Home Last updated: Fri Dec 14 13:17:44 2001 8061 messages in chronological order |