Welcome to our site! EDAboard.com is an international Electronics Discussion Forum focused on EDA software, circuits, schematics, books, theory, papers, asic, pld, 8051, DSP, Network, RF, Analog Design, PCB, Service Manuals... and a whole lot more! To participate you need to register. Registration is free. Click here to register now.
procedure for checksum is:
1. slice the data into 16-bit slices
2. sums up the 16-bit data start from the 1st, if overflow, add 1 into the sum
3. if the remaining data has only 8-bit, pad x"00" to its end to become 16-bit
I might not sound it clear, below is part of example of vhdl code, this is not compilable, just for quick understanding of checksum calculation:
in16b = unsigned(15 downto 0)
sum = unsigned(16 downto 0), initial = (OTHERS => '0')
result = std_logic_vector(15 downto 0)
p.s: when examining checksum, result = x"FFFF" means correct; when generating checksum, result = calculated checksum
IF (cs = '1') THEN
sum := sum + in16b;
IF (sum(16) = '1') THEN
sum := '0' & sum(15 downto 0) + "1";
IF (finsih = '1') THEN
FOR i IN 0 TO 15 LOOP
result(i) <= NOT(std_logic(sum(i)));
link provided by benradu have lot of information about code for CRC...
btw I suppose u meant to CRC-32 that is used for Ethernet. According to 802.3 standard specification, section 3.2.8 - Frame Chksum Sequence (FCS) field:
".....The encoding is defined by the following generating polynomial.
G(x) = x32 + x26 + x23 + x22 + x16 + x12 + x11 + x10 + x8 + x7 + x5 + x4 + x2 + x + 1
Mathematically, the CRC value corresponding to a given frame is defined by the following procedure:
a) The first 32 bits of the frame are complemented.
b) The n bits of the frame are then considered to be the coefficients of a polynomial M(x) of degree n–1.
(The first bit of the Destination Address field corresponds to the x(n–1) term and the last bit of the data field corresponds to the x0 term.)
c) M(x) is multiplied by x32 and divided by G(x), producing a remainder R(x) of degree ≤31.
d) The coefficients of R(x) are considered to be a 32-bit sequence.
e) The bit sequence is complemented and the result is the CRC.
The 32 bits of the CRC value are placed in the frame check sequence field so that the x31 term is the leftmost bit of the first octet, and the x0 term is the right most bit of the last octet. (The bits of the CRC are thus transmitted in the order x31, 30,…, x1, x0.) See reference [B32].