2024年4月22日发(作者:藏红艳)
5
卷第
5
期
第
3
012
年
5
月
2
合肥工业大学学报
(
自然科学版
)
JOURNALOF
HEFEIUNIVERSITYOFTECHNOLOGY
Vol.35No.5
Ma2012
y
:/
.issn.1003Doi10.39695060.2012.05.015
-
j
USB3.0
头包信息中
CRC16
的
Verilo
-
g
实现
吴从中
,
尹夕振
,
彭
乐
()
合肥工业大学计算机与信息学院
,
安徽合肥
230009
摘
要
:
文章基于
C
根据
U
通过
VRC
检错原理
,
SB3.0
协议规定的要求
,
erilo
RC16
的
-
g
实现了一种并行的
C
计算方法
,
设计模块在
Q
给出了电路实现结构图
、
模块的接口信号
、
信号的物理意义以
uartus
中编译和仿真
,
并将实验结果与
U
及部分程序和仿真波形图
,
SB3.0
规范中给出的数据帧样本进行了比较
。
结果证明这种方
法能完成
U
满足数据传输准确性和时序要求
,
并能用于
USB3.0
头包信息中
CRC16
的计算
,
SB3.0
控制器包
-
的产生模块和包的检测模块
。
关键词
:
头包
;
控制器
USB3.0
协议
;
Verilo
g
语言
;
()
中图分类号
:
TP302.2
文献标识码
:
A
文章编号
:
10035060201205063204
---
VeriloimlementationofCRC6inUSB3.0headerinformationacket
-
1
gpp
,,
WUConzhonINXizhenENGLe
-
Y
-
P
gg
(,
H
,
H
)
SchoolofComuterandInformationefeiUniversitofTechnoloefei230009
,
China
pygy
:,
AbstractBasedontheCRCcheckrincileandaccordintothesecifiedreuirementsofUSB3.0a
-
ppgpq
,,
a
p
arallelCRC16calculationmethodisimlementedbVerilolanuaeandthedesinreement
-
pyggggg
,,
iscomiledandsimulatedintheQuartus.Thecircuitstructureinterfacesinalsofmodulemodule
pg
,,
meaninsofsinalsandsimulationwaveformchartareandthehsicalartialroramsresented
ggpyppgp
resultsarecomaredwiththesamledataframesbUSB3.0secification.Theexerimentaliven
ppyppg
rovesresultthatthismethodcancomletetheCRC16calculationofUSB3.0
p
acketheaderinforma
- -
pp
,
tionandmeettheaccuracandtimeseuencereuirementsofthedatatransmissionsoitcanbeused
yqq
enerationackettheandcheckinmodulesoftheofUSB3.0controller.for
gpg
:;;
V
;
acketKewordsUSB3.0areementheadererilolanuaecontroller
pgggg
y
的串行总线技术
,
用于连接大量的外围设备
,
传输
过程中用
CRC
来确保和检测数据的正确性
。
为
了解决在新的
U
常用的
CSB3.0
标准协议下
,
RC
校验码的串行算法在
USB
数据传输中已不能满
随着新一足新协议的要求所带来的一系列问题
,
代
U
国内外许多公司都开始
SB3.0
标准的出现
,
着手于
U
必然会应用头
SB3.0
相关产品的研发
,
包
C
所以研究头包
CRC16
的计算
,
RC16
的实
--
现有着现实的意义
。
本文根据
USB3.0
协议中的
规定
,
研究了头包数据传输中
CRC
校验码的并行
算法及其
Verilo
g
实现过程
。
0
引
言
通用串行总线
)
是一种标准的连接接
USB
(
[]
/,
口
。
U
是目前
SB3.0
1
传输数据速率达
5Gbs
[]
/
与传统串口
1USB2.0
2
版本的
10
倍
,
15200bs
的速度相比
,
是其
40000
多倍
,
USB3.0
协议规定
各种头包的传输需要
CRC
来保证头包信息传输
[]
的正确性
。
C
循环冗余校验码
)
是一种常用
RC
3
(
的检测错误码
,
具有很强的检错能力
,
且编码器和
错误检测电路都比较容易实现
,
是一种比较适合
高速串行传输的编码方法
。
而
USB
是一种高速
;
收稿日期
:
修回日期
:
2011102120111114
----
)
基金项目
:
中央高校基本科研业务费专项资金资助项目
(
2011HGZL0001
,
作者简介
:
吴从中
(
男
,
安徽安庆人
,
合肥工业大学副教授
,
硕士生导师
.1965-
)
第
5
期吴从中
,
等
:
USB3.0
头包信息中
CRC16
的
Verilo
-
g
实现
633
1
CRC
基本思想及头包结构
1.1
CRC
基本思想
是数据通信领域中最
CRC
即循环冗余校验
,
常用的一种差错校验码
,
其特征是信息字段和校
验字码字段的长度可任意选定
。
利用
CRC
进行
在发送端根据要传送的
k
位二进制码序列
,
检测
,
以一定的规则产生一个校验用的
r
位监督码
(,
附在原始信息后面
,
构成一个新的
k
+CRC
码
)
r
位二进制码序列
。
[]
在接收端
,
根据信息码和
CRC
4
码之间所遵
路由选择
、
设备地址等相关信
USB3.0
包的类型
、
息
,
在主机和设备通信的过程中
,
为保证信息传输
的正确性
,
并且要满足
U
本文采
SB3.0
传输速度
,
[]
能满足准确性和时序用并行的
CRC
5
计算方法
,
要求
。
2
CRC16
电路实现
-
USB3.0
协议中规定
,
CRC16
的生成多项式
-
16123
为
1
即
G
(
6′h100B
,
x
)
=
x
+
x
+
x
+
x
+1
。
模
块在被初始化后余数寄存器里面的数必须是
并且在开始每个字节计算的顺序为
16′hFFFF
,
0
~
7
字节
。
根据协议要求设计实现电路
,
如图
3
所示
。
循的规则进行检验
,
以确定传送中数据是否出错
与完整
。
1.2
USB3.0
头包结构
设备和主机之间通过
USB3.0
通信系统中
,
CRC16
保证数据传输的正确性
。
主机和设备通
-
信的最小单位是包
,
其中头包属于包的一部分
,
CRC16
就是用来保证头包信息的正确性
。
头包
-
长度是
1
包括
14
个字节
,
2
个字节的头信息和
2
。
头包结构如图
1
所示
。
个字节的
CRC16
-
图
3
CRC16
码的并行实现框图
-
串行数据首先需要进行串并转换
,
将转换后
的数据放寄存器中
。
将并行数据通过
CRC16
并
-
运算电路加入控制信号
,
控制信号决行运算电路
,
定并行运算电路的开和关
。
因为头包结构含有
每次处理都是以字节为单位来处理
,
12
个字节
,
后面字节的运算结果与前面计算的结果具有相关
性
,
所以需要一个余数寄存器将每次运算的
CRC16
结果保存起来
。
最后根据
USB3.0
协议
-
故在电路的输出端设置规定结果需要反向输出
,
了一个反相器
。
图
1
头包结构
、
主机和设备通信中的链路管理包
(
事
LMP
)
、、
务包
(
数据包
(
同步时间戳包
(
中
TP
)
DP
)
ITP
)
都需要对其头包信息的
C
以
RC16
进行计算
,
-
其结构如图
2
所示
。
ERDY
事务包为例
,
3
CRC16
算法模块的
Verilo
-
g
实现
3.1
CRC16
模块的端口定义
-
模块的接口信号见表
1
所列
。
表
1
接口信号
端
口
u30dcclk
-
s
u30dcrstn
-
s
crc16
-
sk
p
crc16
-
en
crc16
-
os
[]
crc16
-
dat31
:
0
[]
crc16
-
rsd15
:
0
方向
in
ut
p
in
ut
p
inut
p
in
ut
p
in
ut
p
inut
p
描
述
时钟信号
,
上升沿触发
低电平复位
保持信号
输入数据有效
CRC
输出信号采样使能
输入数据
图
2
ERDY
事务包结构
oututRC16
输出结果
C
-
p
链路管理包
、
事务包
、
数据包的头包和同步时
间戳包的结构与
E
都是
RDY
事务包的结构一样
,
由
1
实质上就是计算
DWO2
个字节组成
,
RD0
、
DWORD1
、
DWORD2
的
CRC
码
。
头包中包括
]
6-8
,
该模块采用同步设计
[
低电平信号异步
复位
,
crc16n
、
c16krcs
都属于
CRC
-
p
和
c
-
e
-
s
-
o
16
的控制信号
。
634
3.2
算法实现过程
自然科学版
)
合肥工业大学学报
(
第
35
卷
3.2.1
循环冗余码
CRC16
的逻辑原理
-
循环冗余码
CRC16
的逻辑原理如图
4
所
-
示
,
图中以
0
~
1
为循环余数的
5
表示的中间结果
,
二进制补码
,
最后通过反相器得到
CRC16
的循
-
环冗余码
。
图
5
CRC16
时序控制图
-
(
1
)
低电平复位后
,
crc16sd
就等于
-
r
16′hFFFF
;
()
复位信号无效
,
如果
c
则
2rc16k
p
=1
,
-
s
,
余数寄存器
;
crc16sdrc16sd
<
=c
-
r
-
r
()
如果
c
表示
3rc16kcrc16n=1
,
p
=0
,
-
s
-
e
此时输入数据有效
;
如果
c
则
crc16s=1
,
rc16
-
o
-
!
c
,!
c
,!
rsd
<
=
{
rc16al
[
0
]
rc16
-
cal
[
1
]
-
c
[],!
c
[,!
c
[,!
crc16al2rc16al3
]
rc16al4
]
-
c
-
c
-
c
[],!
c
[,![,!
crc16al5rc16al6
]
crc16al7
]
-
c
-
c
-
c
图
4
CRC16
逻辑原理图
-
,!
c
,!
ccrc16al
[
8
]
rc16al
[
9
]
rc16al
-
c
-
c
-
c
[,!
c
,!,!
10
]
rc16
-
cal
[
11
]
crc16al
[
12
]
-
c
,!
ccrc16al
[
13
!
crc16al
[
14
]
rc16al
-
c
-
c
-
c
[]})。
15
()
如果
c
则
c4rc16s=0
,
rc16sd
<
=
-
o
-
r
。
crc16al
-
c
)
其他情况下
,(
5crc16sd
<
=16′hFFFF
。
-
r
3.2.2
循环冗余码
CRC16
的计算方法
-
(
对应的
DC0
~
C150
~
15
)
-
型触发器的状态
为
R
并
0
~
R15
,
CRC16
的输入字节为
D0
~
D7
,
-
可以得到如下双字根据
CRC16
的计算规则
,
-
CRC16
并联计算的逻辑表达式
:
-
);
C0=
!
R15=
!(
R7^R11^R15^D0^D4
);
C1=
!
R14=
!(
R6^R10^R14^D1^D5
);
C2=
!
R13=
!(
R5^R9^R13^D2^D6
);
C3=
!
R12=
!(
R4^R8^R12^D3^D7
C4=
!
R11=
!
R3
;
);
C5=
!
R10=
!(
R2^R15^D0
);
C6=
!
R9=
!(
R1^R14^D1
);
C7=
!
R8=
!(
R0^R15^D0^R13^D2
);
C8=
!
R7=
!(
R15^D0^R14^D1^R12^D3
);
C9=
!
R6=
!(
R14^D1^R13^D2^R11^R15^D0^D4
);
C10=
!
R5=
!(
R13^D2^R12^D3^R10^R14^D1^D5
C11=
!
R4=
!(
R12^D3^R11^R15^D0^D4^R9^
);
R13^D2^D6
C12=
!
R3=
!(
R11^R15^D0^D4^R10^R14^D1^D5^R8^
);
R12^D3^D7
);
C13=
!
R2=
!(
R10^R14^D1^D5^R9^R13^D2^D6
);
C14=
!
R1=
!(
R9^R13^D2^D6^R8^R12^D3^D7
4
测试方法及仿真结果
根据
USB3.0sec
协议中的数据帧校验样本
p
所给出的测试样本
,
对设计进行测试
,
如图
6
所示
。
ERDY
事务包中有
3
个双字
:
;
第
1
个双字为
DWORD0=16′h0200004
;
第
2
个双字为
DWORD1=16′h00010003
。
第
3
个双字为
DWORD2=16′h00000000
电路复位之后
,
在时钟的下降沿依次输入
每个数据保持
DWORD0
、
DWORD1
、
DWORD2
,
1
个时钟
。
信号
crc16n
在
DWORD0
输入时刻
-
e
置高电平
,
保持到
DWO
在时钟上升
RD2
无效时
,
沿拉为低电平
。
c
表示输入的数据
rc16n
置高
,
-
e
位需要计算
CRC16
的数据
。
crc16s
在
-
-
o
保持
1
个时钟
。
当
DWORD2
输入时候置高
,
电路在时钟上升沿对
crc16s
为高电平时
,
-
o
输出
CCRC16
运算结果进行采样
,
RC16
的运算
--
。
在
Q
结果
,
即
crc16sduartus
中
Waveform
根
-
r
据时序输入数据帧校验样本数据
,
其仿真结果如
图
7
所示
。
)。
C15=
!
R0=
!(
R8^R12^D3^D7
3.2.3
循环冗余码时序控制
实现时序控制如图
5
所示
。
第
5
期吴从中
,
等
:
USB3.0
头包信息中
CRC16
的
Verilo
-
g
实现
635
图
6
数据帧校验样本
图
7
在
Quartus
中仿真结果
crc16sd
的值为
16′hFFFF
。
电路复位后
,
-
r
输入数据
32′h02000004
和
32′h00010003
的计算
结果分别为
1
结果被存入
6′h1FD0
为
16′h8F4E
,
余数寄存器中
。
输出结果在
crc16s
为高电平的时候进行
-
o
最终输出结果为
1
即为头包输出采样
,
6′h8F4E
,
CRC16
的计算结果
。
其结果与
USB3.0
协议中
-
的样本数据结果完全一致
,
说明该设计方法是有
符合
U
效的
,
SB3.0
协议的计算要求
。
[
参
考
文
献
]
[,
1
]
niversalserialbus3.0secificationRevision1.0
,
2008
U
p
[]
S.
[],
2niversalserialbus2.0secificationRevision2.0
,
2000
U
p
[]
S.
[]]
3RC
算法分析与实现
[
J.
微计算机信息
,
马吉明
.
字节型
C
():
2006
,
22332-3.
-
[]]
4J.
微电子学与
蒋安平
.
循环冗余校验码的硬件并行实现
[
():
计算机
,
2007
,
242107-109.
[]
陈晓莉
.
基于
U5SB
的
CRC
算法及其
VHDL
实现
张俊涛
,
[]():
J.
微计算机信息
,
2007
,
235289-290.
[]
6eriloHDL
设计技术
夏宇闻
.
复杂数字电路与系统的
V
g
[
M
]
.
北京
:
北京航空航天大学出版社
,
2002
:
26-45.
[]
面向
U7SB
应用的
CRC
编解码电路的设计与实现
张德云
.
[]:
自然科学版
,
2J.
合肥工业大学学报
:
005
,
28
(
3
)
292-295.
[]
于
冰
,
程
颖
.
基于数据可靠性的
U8SB
接口硬件
沈
健
,
]
设计及实现
[
自然科学版
,
J.
合肥工业大学学报
:
2007
,
():
308999-1002.
5
结束语
该
CRC16
实现方法完全能满足
USB3.0
头
-
能够用于设计包
CRC16
的正确性和时序要求
,
-
同时也能应用在
USB3.0
控制器中包组建模块
,
搭建测试平台时包的检测模块中
,
计算主机接收
,
到的头包文件的
C
然后与头包中的
CRC16RC
--
如果一致
,
说明头包文件传输正确
,
否则
16
比较
,
错误
。
虽然该设计方法面向
USB3.0
头包中的
通过改变端口信号的控制性能
,
也
CRC16
计算
,
-
能用于其他方面的设计
。
(
责任编辑
吕
杰
)
2024年4月22日发(作者:藏红艳)
5
卷第
5
期
第
3
012
年
5
月
2
合肥工业大学学报
(
自然科学版
)
JOURNALOF
HEFEIUNIVERSITYOFTECHNOLOGY
Vol.35No.5
Ma2012
y
:/
.issn.1003Doi10.39695060.2012.05.015
-
j
USB3.0
头包信息中
CRC16
的
Verilo
-
g
实现
吴从中
,
尹夕振
,
彭
乐
()
合肥工业大学计算机与信息学院
,
安徽合肥
230009
摘
要
:
文章基于
C
根据
U
通过
VRC
检错原理
,
SB3.0
协议规定的要求
,
erilo
RC16
的
-
g
实现了一种并行的
C
计算方法
,
设计模块在
Q
给出了电路实现结构图
、
模块的接口信号
、
信号的物理意义以
uartus
中编译和仿真
,
并将实验结果与
U
及部分程序和仿真波形图
,
SB3.0
规范中给出的数据帧样本进行了比较
。
结果证明这种方
法能完成
U
满足数据传输准确性和时序要求
,
并能用于
USB3.0
头包信息中
CRC16
的计算
,
SB3.0
控制器包
-
的产生模块和包的检测模块
。
关键词
:
头包
;
控制器
USB3.0
协议
;
Verilo
g
语言
;
()
中图分类号
:
TP302.2
文献标识码
:
A
文章编号
:
10035060201205063204
---
VeriloimlementationofCRC6inUSB3.0headerinformationacket
-
1
gpp
,,
WUConzhonINXizhenENGLe
-
Y
-
P
gg
(,
H
,
H
)
SchoolofComuterandInformationefeiUniversitofTechnoloefei230009
,
China
pygy
:,
AbstractBasedontheCRCcheckrincileandaccordintothesecifiedreuirementsofUSB3.0a
-
ppgpq
,,
a
p
arallelCRC16calculationmethodisimlementedbVerilolanuaeandthedesinreement
-
pyggggg
,,
iscomiledandsimulatedintheQuartus.Thecircuitstructureinterfacesinalsofmodulemodule
pg
,,
meaninsofsinalsandsimulationwaveformchartareandthehsicalartialroramsresented
ggpyppgp
resultsarecomaredwiththesamledataframesbUSB3.0secification.Theexerimentaliven
ppyppg
rovesresultthatthismethodcancomletetheCRC16calculationofUSB3.0
p
acketheaderinforma
- -
pp
,
tionandmeettheaccuracandtimeseuencereuirementsofthedatatransmissionsoitcanbeused
yqq
enerationackettheandcheckinmodulesoftheofUSB3.0controller.for
gpg
:;;
V
;
acketKewordsUSB3.0areementheadererilolanuaecontroller
pgggg
y
的串行总线技术
,
用于连接大量的外围设备
,
传输
过程中用
CRC
来确保和检测数据的正确性
。
为
了解决在新的
U
常用的
CSB3.0
标准协议下
,
RC
校验码的串行算法在
USB
数据传输中已不能满
随着新一足新协议的要求所带来的一系列问题
,
代
U
国内外许多公司都开始
SB3.0
标准的出现
,
着手于
U
必然会应用头
SB3.0
相关产品的研发
,
包
C
所以研究头包
CRC16
的计算
,
RC16
的实
--
现有着现实的意义
。
本文根据
USB3.0
协议中的
规定
,
研究了头包数据传输中
CRC
校验码的并行
算法及其
Verilo
g
实现过程
。
0
引
言
通用串行总线
)
是一种标准的连接接
USB
(
[]
/,
口
。
U
是目前
SB3.0
1
传输数据速率达
5Gbs
[]
/
与传统串口
1USB2.0
2
版本的
10
倍
,
15200bs
的速度相比
,
是其
40000
多倍
,
USB3.0
协议规定
各种头包的传输需要
CRC
来保证头包信息传输
[]
的正确性
。
C
循环冗余校验码
)
是一种常用
RC
3
(
的检测错误码
,
具有很强的检错能力
,
且编码器和
错误检测电路都比较容易实现
,
是一种比较适合
高速串行传输的编码方法
。
而
USB
是一种高速
;
收稿日期
:
修回日期
:
2011102120111114
----
)
基金项目
:
中央高校基本科研业务费专项资金资助项目
(
2011HGZL0001
,
作者简介
:
吴从中
(
男
,
安徽安庆人
,
合肥工业大学副教授
,
硕士生导师
.1965-
)
第
5
期吴从中
,
等
:
USB3.0
头包信息中
CRC16
的
Verilo
-
g
实现
633
1
CRC
基本思想及头包结构
1.1
CRC
基本思想
是数据通信领域中最
CRC
即循环冗余校验
,
常用的一种差错校验码
,
其特征是信息字段和校
验字码字段的长度可任意选定
。
利用
CRC
进行
在发送端根据要传送的
k
位二进制码序列
,
检测
,
以一定的规则产生一个校验用的
r
位监督码
(,
附在原始信息后面
,
构成一个新的
k
+CRC
码
)
r
位二进制码序列
。
[]
在接收端
,
根据信息码和
CRC
4
码之间所遵
路由选择
、
设备地址等相关信
USB3.0
包的类型
、
息
,
在主机和设备通信的过程中
,
为保证信息传输
的正确性
,
并且要满足
U
本文采
SB3.0
传输速度
,
[]
能满足准确性和时序用并行的
CRC
5
计算方法
,
要求
。
2
CRC16
电路实现
-
USB3.0
协议中规定
,
CRC16
的生成多项式
-
16123
为
1
即
G
(
6′h100B
,
x
)
=
x
+
x
+
x
+
x
+1
。
模
块在被初始化后余数寄存器里面的数必须是
并且在开始每个字节计算的顺序为
16′hFFFF
,
0
~
7
字节
。
根据协议要求设计实现电路
,
如图
3
所示
。
循的规则进行检验
,
以确定传送中数据是否出错
与完整
。
1.2
USB3.0
头包结构
设备和主机之间通过
USB3.0
通信系统中
,
CRC16
保证数据传输的正确性
。
主机和设备通
-
信的最小单位是包
,
其中头包属于包的一部分
,
CRC16
就是用来保证头包信息的正确性
。
头包
-
长度是
1
包括
14
个字节
,
2
个字节的头信息和
2
。
头包结构如图
1
所示
。
个字节的
CRC16
-
图
3
CRC16
码的并行实现框图
-
串行数据首先需要进行串并转换
,
将转换后
的数据放寄存器中
。
将并行数据通过
CRC16
并
-
运算电路加入控制信号
,
控制信号决行运算电路
,
定并行运算电路的开和关
。
因为头包结构含有
每次处理都是以字节为单位来处理
,
12
个字节
,
后面字节的运算结果与前面计算的结果具有相关
性
,
所以需要一个余数寄存器将每次运算的
CRC16
结果保存起来
。
最后根据
USB3.0
协议
-
故在电路的输出端设置规定结果需要反向输出
,
了一个反相器
。
图
1
头包结构
、
主机和设备通信中的链路管理包
(
事
LMP
)
、、
务包
(
数据包
(
同步时间戳包
(
中
TP
)
DP
)
ITP
)
都需要对其头包信息的
C
以
RC16
进行计算
,
-
其结构如图
2
所示
。
ERDY
事务包为例
,
3
CRC16
算法模块的
Verilo
-
g
实现
3.1
CRC16
模块的端口定义
-
模块的接口信号见表
1
所列
。
表
1
接口信号
端
口
u30dcclk
-
s
u30dcrstn
-
s
crc16
-
sk
p
crc16
-
en
crc16
-
os
[]
crc16
-
dat31
:
0
[]
crc16
-
rsd15
:
0
方向
in
ut
p
in
ut
p
inut
p
in
ut
p
in
ut
p
inut
p
描
述
时钟信号
,
上升沿触发
低电平复位
保持信号
输入数据有效
CRC
输出信号采样使能
输入数据
图
2
ERDY
事务包结构
oututRC16
输出结果
C
-
p
链路管理包
、
事务包
、
数据包的头包和同步时
间戳包的结构与
E
都是
RDY
事务包的结构一样
,
由
1
实质上就是计算
DWO2
个字节组成
,
RD0
、
DWORD1
、
DWORD2
的
CRC
码
。
头包中包括
]
6-8
,
该模块采用同步设计
[
低电平信号异步
复位
,
crc16n
、
c16krcs
都属于
CRC
-
p
和
c
-
e
-
s
-
o
16
的控制信号
。
634
3.2
算法实现过程
自然科学版
)
合肥工业大学学报
(
第
35
卷
3.2.1
循环冗余码
CRC16
的逻辑原理
-
循环冗余码
CRC16
的逻辑原理如图
4
所
-
示
,
图中以
0
~
1
为循环余数的
5
表示的中间结果
,
二进制补码
,
最后通过反相器得到
CRC16
的循
-
环冗余码
。
图
5
CRC16
时序控制图
-
(
1
)
低电平复位后
,
crc16sd
就等于
-
r
16′hFFFF
;
()
复位信号无效
,
如果
c
则
2rc16k
p
=1
,
-
s
,
余数寄存器
;
crc16sdrc16sd
<
=c
-
r
-
r
()
如果
c
表示
3rc16kcrc16n=1
,
p
=0
,
-
s
-
e
此时输入数据有效
;
如果
c
则
crc16s=1
,
rc16
-
o
-
!
c
,!
c
,!
rsd
<
=
{
rc16al
[
0
]
rc16
-
cal
[
1
]
-
c
[],!
c
[,!
c
[,!
crc16al2rc16al3
]
rc16al4
]
-
c
-
c
-
c
[],!
c
[,![,!
crc16al5rc16al6
]
crc16al7
]
-
c
-
c
-
c
图
4
CRC16
逻辑原理图
-
,!
c
,!
ccrc16al
[
8
]
rc16al
[
9
]
rc16al
-
c
-
c
-
c
[,!
c
,!,!
10
]
rc16
-
cal
[
11
]
crc16al
[
12
]
-
c
,!
ccrc16al
[
13
!
crc16al
[
14
]
rc16al
-
c
-
c
-
c
[]})。
15
()
如果
c
则
c4rc16s=0
,
rc16sd
<
=
-
o
-
r
。
crc16al
-
c
)
其他情况下
,(
5crc16sd
<
=16′hFFFF
。
-
r
3.2.2
循环冗余码
CRC16
的计算方法
-
(
对应的
DC0
~
C150
~
15
)
-
型触发器的状态
为
R
并
0
~
R15
,
CRC16
的输入字节为
D0
~
D7
,
-
可以得到如下双字根据
CRC16
的计算规则
,
-
CRC16
并联计算的逻辑表达式
:
-
);
C0=
!
R15=
!(
R7^R11^R15^D0^D4
);
C1=
!
R14=
!(
R6^R10^R14^D1^D5
);
C2=
!
R13=
!(
R5^R9^R13^D2^D6
);
C3=
!
R12=
!(
R4^R8^R12^D3^D7
C4=
!
R11=
!
R3
;
);
C5=
!
R10=
!(
R2^R15^D0
);
C6=
!
R9=
!(
R1^R14^D1
);
C7=
!
R8=
!(
R0^R15^D0^R13^D2
);
C8=
!
R7=
!(
R15^D0^R14^D1^R12^D3
);
C9=
!
R6=
!(
R14^D1^R13^D2^R11^R15^D0^D4
);
C10=
!
R5=
!(
R13^D2^R12^D3^R10^R14^D1^D5
C11=
!
R4=
!(
R12^D3^R11^R15^D0^D4^R9^
);
R13^D2^D6
C12=
!
R3=
!(
R11^R15^D0^D4^R10^R14^D1^D5^R8^
);
R12^D3^D7
);
C13=
!
R2=
!(
R10^R14^D1^D5^R9^R13^D2^D6
);
C14=
!
R1=
!(
R9^R13^D2^D6^R8^R12^D3^D7
4
测试方法及仿真结果
根据
USB3.0sec
协议中的数据帧校验样本
p
所给出的测试样本
,
对设计进行测试
,
如图
6
所示
。
ERDY
事务包中有
3
个双字
:
;
第
1
个双字为
DWORD0=16′h0200004
;
第
2
个双字为
DWORD1=16′h00010003
。
第
3
个双字为
DWORD2=16′h00000000
电路复位之后
,
在时钟的下降沿依次输入
每个数据保持
DWORD0
、
DWORD1
、
DWORD2
,
1
个时钟
。
信号
crc16n
在
DWORD0
输入时刻
-
e
置高电平
,
保持到
DWO
在时钟上升
RD2
无效时
,
沿拉为低电平
。
c
表示输入的数据
rc16n
置高
,
-
e
位需要计算
CRC16
的数据
。
crc16s
在
-
-
o
保持
1
个时钟
。
当
DWORD2
输入时候置高
,
电路在时钟上升沿对
crc16s
为高电平时
,
-
o
输出
CCRC16
运算结果进行采样
,
RC16
的运算
--
。
在
Q
结果
,
即
crc16sduartus
中
Waveform
根
-
r
据时序输入数据帧校验样本数据
,
其仿真结果如
图
7
所示
。
)。
C15=
!
R0=
!(
R8^R12^D3^D7
3.2.3
循环冗余码时序控制
实现时序控制如图
5
所示
。
第
5
期吴从中
,
等
:
USB3.0
头包信息中
CRC16
的
Verilo
-
g
实现
635
图
6
数据帧校验样本
图
7
在
Quartus
中仿真结果
crc16sd
的值为
16′hFFFF
。
电路复位后
,
-
r
输入数据
32′h02000004
和
32′h00010003
的计算
结果分别为
1
结果被存入
6′h1FD0
为
16′h8F4E
,
余数寄存器中
。
输出结果在
crc16s
为高电平的时候进行
-
o
最终输出结果为
1
即为头包输出采样
,
6′h8F4E
,
CRC16
的计算结果
。
其结果与
USB3.0
协议中
-
的样本数据结果完全一致
,
说明该设计方法是有
符合
U
效的
,
SB3.0
协议的计算要求
。
[
参
考
文
献
]
[,
1
]
niversalserialbus3.0secificationRevision1.0
,
2008
U
p
[]
S.
[],
2niversalserialbus2.0secificationRevision2.0
,
2000
U
p
[]
S.
[]]
3RC
算法分析与实现
[
J.
微计算机信息
,
马吉明
.
字节型
C
():
2006
,
22332-3.
-
[]]
4J.
微电子学与
蒋安平
.
循环冗余校验码的硬件并行实现
[
():
计算机
,
2007
,
242107-109.
[]
陈晓莉
.
基于
U5SB
的
CRC
算法及其
VHDL
实现
张俊涛
,
[]():
J.
微计算机信息
,
2007
,
235289-290.
[]
6eriloHDL
设计技术
夏宇闻
.
复杂数字电路与系统的
V
g
[
M
]
.
北京
:
北京航空航天大学出版社
,
2002
:
26-45.
[]
面向
U7SB
应用的
CRC
编解码电路的设计与实现
张德云
.
[]:
自然科学版
,
2J.
合肥工业大学学报
:
005
,
28
(
3
)
292-295.
[]
于
冰
,
程
颖
.
基于数据可靠性的
U8SB
接口硬件
沈
健
,
]
设计及实现
[
自然科学版
,
J.
合肥工业大学学报
:
2007
,
():
308999-1002.
5
结束语
该
CRC16
实现方法完全能满足
USB3.0
头
-
能够用于设计包
CRC16
的正确性和时序要求
,
-
同时也能应用在
USB3.0
控制器中包组建模块
,
搭建测试平台时包的检测模块中
,
计算主机接收
,
到的头包文件的
C
然后与头包中的
CRC16RC
--
如果一致
,
说明头包文件传输正确
,
否则
16
比较
,
错误
。
虽然该设计方法面向
USB3.0
头包中的
通过改变端口信号的控制性能
,
也
CRC16
计算
,
-
能用于其他方面的设计
。
(
责任编辑
吕
杰
)