M
Matt
Guest
I've been looking over the following post concerning parallel crc
computation and how to handle a multi-byte parallel bus where the data
can end in any 8b position:
http://groups.google.com/group/comp.lang.vhdl/browse_frm/thread/587b14d0fc43dbc1
All of the identities Allan calls out make perfect sense, except when
I try
#5.) If the CRC register is initialised to zero,
CRC(A & B) = CRC(CRC(A) & B))
If I use some some test code, and the easics crc generator (http://
www.easics.com/webtools/crctool) :
reg [31:0]a = 32'haaaaaaaa;
reg [31:0]b = 32'hbbbbbbbb;
@(posedge clk) crca = nextCRC32_D64({{32{1'b0}},a}, {32{1'b0}});
@(posedge clk) crcab = nextCRC32_D64({a,b}, {32{1'b0}});
@(posedge clk) crcab2 = nextCRC32_D64({crca,b}, {32{1'b0}});
where nextCRC32_D64 is the easics CRC function, arguments are (data,
lfsr state)
I do not get CRC({A, B}) = CRC({CRC(A) , B}))
I'm replacing the &'s with {}'s, since this originally came from a
vhdl group, and I'm assuming he's referring to the vhdl concat
operator.
What I actually get is
CRC(A) = 85f89652
CRC({a,b}) = 8a0c00ba
CRC({CRC(A),b} = cae34aea
I'm sure I must have missed something along the way, but I don't know
what it is.
Any help or direction you could provide would be greatly appreciated.
Thank you
computation and how to handle a multi-byte parallel bus where the data
can end in any 8b position:
http://groups.google.com/group/comp.lang.vhdl/browse_frm/thread/587b14d0fc43dbc1
All of the identities Allan calls out make perfect sense, except when
I try
#5.) If the CRC register is initialised to zero,
CRC(A & B) = CRC(CRC(A) & B))
If I use some some test code, and the easics crc generator (http://
www.easics.com/webtools/crctool) :
reg [31:0]a = 32'haaaaaaaa;
reg [31:0]b = 32'hbbbbbbbb;
@(posedge clk) crca = nextCRC32_D64({{32{1'b0}},a}, {32{1'b0}});
@(posedge clk) crcab = nextCRC32_D64({a,b}, {32{1'b0}});
@(posedge clk) crcab2 = nextCRC32_D64({crca,b}, {32{1'b0}});
where nextCRC32_D64 is the easics CRC function, arguments are (data,
lfsr state)
I do not get CRC({A, B}) = CRC({CRC(A) , B}))
I'm replacing the &'s with {}'s, since this originally came from a
vhdl group, and I'm assuming he's referring to the vhdl concat
operator.
What I actually get is
CRC(A) = 85f89652
CRC({a,b}) = 8a0c00ba
CRC({CRC(A),b} = cae34aea
I'm sure I must have missed something along the way, but I don't know
what it is.
Any help or direction you could provide would be greatly appreciated.
Thank you