[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [usb] crc algorithm



Hi Tambuna,
	Thanks for your example.
	It calculates one byte at a time
instead of one bit. That can be used for
hardward acceleration. Actually, there are
several ways to do it, depends on how you
compare your result to check weather the CRC check
sum is correct or not.
	Did you try your code with different
input (using random input), and come out the
same result?
	If you like I can write a small verilog
code for you.

regards
bo


--- RE Tambunan <kebloo@mitra.net.id> wrote:
> Hallo Bo...
> 
> Have you checked usb 2.0 core by Mr. Rudolf
> Usselman?
> especially at usbf_crc5.v and usbf_crc16.v ?
> Do you know the explanation of algorithm below and
> those modules ( e.g usbf_crc5.v)?
> Btw... algorithm I've shown you is based on Tom
> Coonan's
> in verilog, please check at  
> ftp://www.mindspring.com/users/tcoonan/gencrc.v
> 
> 
> Best Regard,
> 
> 
> 
> RE Tambunan
> 
> On 21 Feb 2002 at 11:55, Bo wrote:
> 
> > Hi Tambunan,
> >      I don't think that's a right way to
> > implement CRC check sum.
> >      There are two ways to implement it. Please
> > refer to Kwanie's post and his recently corrected
> one.
> > The second way is the prefer one in hardware
> design.
> > Because it saves time and easier to implement for
> > hardware acceleration.
> > 
> > Assume you have M-bit input, and N-bit CRC,
> > then you need M+N cycle to calculate CRC (without
> > hardware acceleration). M for input, N for "one's
> > complement of calculated CRC", then you can get
> the
> > fix remainder which is 01100.
> > 
> > datain for M is input, last N cycle is ~CRC.
> > 
> > 
> > assign crc0 = datain ^ crc[4];
> > 
> > crc[4] <= crc[3];
> > crc[3] <= crc[2];
> > crc[2] <= crc[4] ^ crc[1];
> > crc[1] <= crc[0];
> > crc[0] <= crc[4] ^ datain;
> > 
> > Good Luck.
> > 
> > bo
> > 
> > 
> > --- RE Tambunan <kebloo@mitra.net.id> wrote:
> > > On 20 Feb 2002 at 16:16, Bo wrote:
> > > 
> > > > Hi Tambunan,
> > > >     For my understanding, it really doesn't
> > > > matter what pattern you should fill during the
> > > > initialization. As far as you use the same
> > > > pattern on both encode and decode part, it
> should
> > > > come out the same result. You can check it use
> > > > math calculation, C or even verilog.
> > > 
> > > Hi Bo... I've checked the CRC calculation when
> CRC
> > > register initial value filled with 0 and 1 with
> some
> > > examples
> > > and I found that the result are different.
> > > I follow the rules from USB 1.1 specification
> and
> > > here is
> > > the algorithm for 5-bit CRC (CMIIW...):
> > > 
> > > // from 2nd paragraph section 8.3.5
> > > integer         i;
> > > reg [4..0]      crc5out, crc5poly;
> > > reg [11..0]    data;    
> > > 
> > > crc5out = 'b11111; // or crc5out = 'b00000;
> > > crc5poly = 'b00101;
> > > for (i=0; i<12; i=i+1) begin
> > >     msb = crc5out[4];
> > >     crc5out = crc5out << 1;
> > >     if ( (msb XOR data[i]) = 1) then begin
> > >         crc5out = crc5out XOR crc5poly;
> > >     end
> > > end
> > > 
> > > // from 3rd paragraph section 8.3.5 for CRC
> > > generator
> > > crc5out = ~crc5out;
> > > 
> > > 
> > > There are some examples in "CRC in USB"
> whitepaper
> > > I used to check above algorithm.
> > >  
> > > - setup addr 15 endp e
> > >   data = 'b10101000111
> > >   crc5out = 'b10111     ; for initial = 'b11111
> > >   crc5out = 'b00000     ; for initial = 'b00000
> > > 
> > > - out addr 3a endp a
> > >   data = 'b01011100101
> > >   crc5out = 'b11100     ; for initial = 'b11111
> > >   crc5out = 'b10100     ; for initial = 'b00000
> > > 
> > > - in addr 70 endp 4
> > >   data = 'b00001110010
> > >   crc5out = 'b01110     ; for initial = 'b11111
> > >   crc5out = 'b11001     ; for initial = 'b00000
> > > 
> > > Also have you check Mr. Rudi's core ?
> > > He also prefills crc5 and crc16 register with
> '1'
> > > (check usbf_pa.v and usb_pd.v).
> > > Btw... there is also an online document, which
> > > is a thesis of Mr. Myilone Anandarajah, that
> > > uses '0' to prefill CRC initial value.
> > > Any comment for this :-)....
> > > 
> > > Best regard,
> > > 
> > > 
> > > RE Tambunan
> > > --
> > > To unsubscribe from usb mailing list please
> visit http://www.opencores.org/mailinglists.shtml
> > 
> > __________________________________________________
> 
> --
> To unsubscribe from usb mailing list please visit
http://www.opencores.org/mailinglists.shtml


__________________________________________________
Do You Yahoo!?
Yahoo! Sports - Coverage of the 2002 Olympic Games
http://sports.yahoo.com
--
To unsubscribe from usb mailing list please visit http://www.opencores.org/mailinglists.shtml