【问题标题】:What's CRC with 64b in and 32b out?什么是 64b 输入和 32b 输出的 CRC?
【发布时间】:2012-10-22 09:25:25
【问题描述】:

我正在开发一个软件实用程序来将一些数据传输到 pci-e 板。为了避免数据传输错误,我在每个数据包中添加了一个 CRC 字段,以便 pci-e 板可以使用 CRC 值验证接收到的数据。

然后我们发现CRC值校验失败。

我正在使用 boost::crc_32_type 来生成 CRC 值,而硬件人员告诉我板上的 CRC 实现来自 http://www.easics.com/webtools/crctool,他们正在使用 64 数据总线宽度版本的 CRC32 - ETHERNET / AAL5。

那么,是否可以使用 boost::crc_32_type 来与他们正在使用的那个一起工作?

任何建议将不胜感激!

[编辑 2013.02.20]

  1. 工作 crc 模板应具有以下定义:
    boost::crc_optimal
  2. 每8个字节的顺序在被处理之前需要颠倒
  3. std::for_each 用来代替 process_bytes 来得到结果,不过我还是不太明白它们之间的区别。

【问题讨论】:

    标签: boost fpga crc


    【解决方案1】:

    您可以使用crc_32_type - 首先您必须确保您的字节与硬件人员的字节顺序相同。 EASICS 代码使用的约定是流中的第一个字节进入 Data[63:56]。

    【讨论】:

    • 根据您的建议,我已经颠倒了消息中每个 8 字节单元的字节顺序,但结果仍然与硬件中的单元没有不同。那么,EASICS 的代码在针对 64 位数据输入进行优化的同时仍然是 CRC32?
    • 你的多项式值是如何得到的?这也可以得到位反转或字节反转,具体取决于
    • 再次感谢您的回复:) 我们在 EASICS 上使用的多项式是 (0 1 2 4 5 7 8 10 11 12 16 22 23 26 32),我在 crc_32_type 中使用的那个是默认的 0x04C11DB7。如果我理解正确,它们是同一件事(来自 IEEE 802.3)?
    • 另外,我刚刚注意到EASICS生成的文件中有一条注释://约定:第一个串行位是D[63]。这是否意味着我应该反转每个 8 字节单元的整个位顺序?
    猜你喜欢
    • 1970-01-01
    • 2013-12-07
    • 1970-01-01
    • 2010-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-13
    相关资源
    最近更新 更多