CoaXPress 协议的CRC及其具体实现
CoaXPress CRC
在CXP协议中,CRC用在stream packet和control packet中,用于指示数据是否错误,如果是control packet, device发现CRC错误后应该给出CRC错误的回应。
下表是回应的packet格式,在高速数据链路downconnection中。

其中CXP使用的CRC定义如下:
CRC多项式: x32 + x26 + x23 + x22 + x16 + x12 + x11 + x10 + x8 + x7 + x5 + x4 + x2 + x + 1
初始值: 0xFFFFFFFF
REFIN: true
REFOUT: true
XorOut: 0x00000000
进行CRC校验时,LSB FIRST,P0 FIRST
CRC校验哪些数据呢?
以Control packet为例说明:
下表是没有tag标签的control command 包,其中明确说明了,参与CRC校验的数据是从0到N+1,不包含K27.7和0x02,且如果是read command packet,实际就只有word 0,1 参与校验;

同样,协议给出了一个示例:
下面是一个完整的read control packet,其中0x56 0x86 0x5D 0x6F 是CRC校验结果,对应的word 为0x6F5D8656
K27.7 K27.7 K27.7 K27.7 0x02 0x02 0x02 0x02 0x00 0x00 0x00 0x04 0x00 0x00 0x00 0x00 0x56 0x86 0x5D 0x6F K29.7 K29.7 K29.7 K29.7
CRC校验HDL代码
有了协议给出的示例,我们可以选择正确的CRC32 代码,CRC一般分为串行和并行2种,我们的应用选择串行计算即可。
代码参考: http://outputlogic.com/?page_id=321
//-----------------------------------------------------------------------------
// Copyright (C) 2009 OutputLogic.com
// This source file may be used and distributed without restriction
// provided that this copyright statement is not removed from the file
// and that any derivative work contains the original copyright notice
// and the associated disclaimer.
//
// THIS SOURCE FILE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS
// OR IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
// WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
//-----------------------------------------------------------------------------
// CRC module for data[0:0] , crc[31:0]=1+x^1+x^2+x^4+x^5+x^7+x^8+x^10+x^11+x^12+x^16+x^22+x^23+x^26+x^32;
//-----------------------------------------------------------------------------
module crc(
input [0:0] data_in,
input crc_en,
output [31:0] crc_out,
input rst,
input clk);
reg [31:0] lfsr_q,lfsr_c;
assign crc_out = lfsr_q;
always @(*) begin
lfsr_c[0] = lfsr_q[31] ^ data_in[0];
lfsr_c[1] = lfsr_q[0] ^ lfsr_q[31] ^ data_in[0];
lfsr_c[2] = lfsr_q[1] ^ lfsr_q[31] ^ data_in[0];
lfsr_c[3] = lfsr_q[2];
lfsr_c[4] = lfsr_q[3] ^ lfsr_q[31] ^ data_in[0];
lfsr_c[5] = lfsr_q[4] ^ lfsr_q[31] ^ data_in[0];
lfsr_c[6] = lfsr_q[5];
lfsr_c[7] = lfsr_q[6] ^ lfsr_q[31] ^ data_in[0];
lfsr_c[8] = lfsr_q[7] ^ lfsr_q[31] ^ data_in[0];
lfsr_c[9] = lfsr_q[8];
lfsr_c[10] = lfsr_q[9] ^ lfsr_q[31] ^ data_in[0];
lfsr_c[11] = lfsr_q[10] ^ lfsr_q[31] ^ data_in[0];
lfsr_c[12] = lfsr_q[11] ^ lfsr_q[31] ^ data_in[0];
lfsr_c[13] = lfsr_q[12];
lfsr_c[14] = lfsr_q[13];
lfsr_c[15] = lfsr_q[14];
lfsr_c[16] = lfsr_q[15] ^ lfsr_q[31] ^ data_in[0];
lfsr_c[17] = lfsr_q[16];
lfsr_c[18] = lfsr_q[17];
lfsr_c[19] = lfsr_q[18];
lfsr_c[20] = lfsr_q[19];
lfsr_c[21] = lfsr_q[20];
lfsr_c[22] = lfsr_q[21] ^ lfsr_q[31] ^ data_in[0];
lfsr_c[23] = lfsr_q[22] ^ lfsr_q[31] ^ data_in[0];
lfsr_c[24] = lfsr_q[23];
lfsr_c[25] = lfsr_q[24];
lfsr_c[26] = lfsr_q[25] ^ lfsr_q[31] ^ data_in[0];
lfsr_c[27] = lfsr_q[26];
lfsr_c[28] = lfsr_q[27];
lfsr_c[29] = lfsr_q[28];
lfsr_c[30] = lfsr_q[29];
lfsr_c[31] = lfsr_q[30];
end // always
always @(posedge clk, posedge rst) begin
if(rst) begin
lfsr_q <= {32{1'b1}};
end
else begin
lfsr_q <= crc_en ? lfsr_c : lfsr_q;
end
end // always
endmodule // crc
Copyright 2009-2013 OutputLogic.com |
CoaXPress 协议的CRC及其具体实现的更多相关文章
- CoaXPress 线缆和接插件的设计要求
本文的原理部分内容不仅适用于CoaXPress 协议,也同样适用于其它高速信号传输情形.在高速.低干扰信号传输时,线缆和接插件的选取是非常讲究的,我们在实际应用中经常会遇到线缆原因.阻抗匹配原因导致的 ...
- 2013年8月份第1周51Aspx源码发布详情
校企工作室OA源码 2013-8-9 [VS2010]源码描述:主要模块及系统管理功能说明:一.考勤功能模块:考勤分成三个功能,显示签到功能,查询功能,管理功能.1.签到功能分析:在签到功能中,我们 ...
- .NET Core/.NET之Stream简介
之前写了一篇C#装饰模式的文章提到了.NET Core的Stream, 所以这里尽量把Stream介绍全点. (都是书上的内容) .NET Core/.NET的Streams 首先需要知道, Syst ...
- 【设计经验】4、SERDES关键技术总结
一.SERDES介绍 随着大数据的兴起以及信息技术的快速发展,数据传输对总线带宽的要求越来越高,并行传输技术的发展受到了时序同步困难.信号偏移严重,抗干扰能力弱以及设计复杂度高等一系列问题的阻碍.与并 ...
- SERDES关键技术总结
转自https://www.cnblogs.com/liujinggang/p/10125727.html 一.SERDES介绍 随着大数据的兴起以及信息技术的快速发展,数据传输对总线带宽的要求越来越 ...
- 自学工业控制网络之路1.4-典型的现场总线介绍CAN
返回 自学工业控制网络之路 自学工业控制网络之路1.4-典型的现场总线介绍CAN 1991年3月,发布了CAN技术贵干v2.0,包含了A.B两部分.CAN2.0A给出报文标准格式,CAN2.0B给出了 ...
- CAN总线概述
基本概念 CAN 是Controller Area Network 的缩写(以下称为CAN),是ISO国际标准化的串行通信协议.在汽车产业中,出于对安全性.舒适性.方便性.低公害.低成本的要求,各种各 ...
- .NET Core/.NET之Stream简介 Rx.NET 简介
.NET Core/.NET之Stream简介 之前写了一篇C#装饰模式的文章提到了.NET Core的Stream, 所以这里尽量把Stream介绍全点. (都是书上的内容) .NET Core ...
- modbus_百度经验
转自:https://jingyan.baidu.com/article/2c8c281dbdfa9f0009252a74.html 图片都没了,百度真差劲---还是博客园好!!! ModBus通讯规 ...
- 从零开始的计算机网络基础(图文并茂,1.8w字,面试复习必备)
前言 在互联网高速发展的今天,我们通过手机,电脑等通讯设备可以很轻松达到未出茅庐便知天下事的境界.每天我们都要访问数不胜数的网站,通过打开浏览器,输入网址两步搞定.当然更为常规的做法是打开浏览器,设置 ...
随机推荐
- [转帖]BIS出口管制新规说明会,进一步明确十大问题
https://zhuanlan.zhihu.com/p/573765504 10月13日晚9点,BIS就出口管制新规举行电话会议简报,出口执法助理副部长Thea Kendler主持会议.小白总结要点 ...
- [转帖]Nginx性能优化详解
https://developer.aliyun.com/article/886146?spm=a2c6h.24874632.expert-profile.256.7c46cfe9h5DxWK 感觉文 ...
- echarts api的介绍
参考的地址:https://echarts.apache.org/zh/api.html echarts.init echarts.init(dom?: HTMLDivElement|HTMLCanv ...
- 深度学习应用篇-推荐系统[11]:推荐系统的组成、场景转化指标(pv点击率,uv点击率,曝光点击率)、用户数据指标等评价指标详解
深度学习应用篇-推荐系统[11]:推荐系统的组成.场景转化指标(pv点击率,uv点击率,曝光点击率).用户数据指标等评价指标详解 1. 推荐系统介绍 在网络技术不断发展和电子商务规模不断扩大的背景下, ...
- LyScript 实现Hook隐藏调试器
LyScript 插件集成的内置API函数可灵活的实现绕过各类反调试保护机制,前段时间发布的那一篇文章并没有详细讲解各类反调试机制的绕过措施,本次将补充这方面的知识点,运用LyScript实现绕过大多 ...
- Shell常用命令与脚本实例
#!/bin/sh echo "Hello shell" # ----------------------字符串---------------------# readonly ...
- Liunx知识点整理
Linux知识点整理 目录和文件 ls (list)显示当前目录下的文件或目录 a 显示所有文件及目录 (ls内定将文件名或目录名称开头为"."的视为隐藏档,不会列出) l 除文件 ...
- 《ASP.NET Core 微服务实战》-- 读书笔记(第8章)
第 8 章 服务发现 面对大量服务,为了简化配置和管理工作,我们需要了解"服务发现"概念 回顾云原生特性 配置外置 将 URL 和登录凭证移到配置文件和 C# 代码之外,放到环境变 ...
- Linux 列出文件的绝对路径
1.使用ls中列出文件的绝对路径ls | sed "s:^:`pwd`/:" 2.列出当前目录下的所有文件(包括隐藏文件)的绝对路径, 对目录不做递归find $PWD -maxd ...
- C++ 单例模式以及内存管理
引用: https://zhuanlan.zhihu.com/p/37469260 https://www.cnblogs.com/xiaolincoding/p/11437231.html http ...