明德扬论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

微信扫一扫,快捷登录!

查看: 204873|回复: 0

个人总结版:包文的理解

[复制链接]
发表于 2019-12-3 21:44:00 | 显示全部楼层 |阅读模式

马上注册,看完整文章,学更多FPGA知识。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
个人总结版:包文的理解
作者:XYZ
本文为明德扬原创文章,转载请注明出处!

在通信工程中,包文是通信处理不可缺少的一部分,经过一段时间的学习总结,今天跟大家分享一下我对包文的理解。


一、包文的基本概念

在通信中,发送端首先将数据封装成一个个包文,接收端按包文为单位进行接收。例如以太网,发送端将数据封装成包文格式,该包文包含了目的地址、源地址、检验域、包文长度和包文数据等信号。接收端根据这些信息,就能正确地接收数据。每个包文之间互不相关,可以说包文是处理数据的基本单元

包文其实就是一组一组的用户数据,它可以由一个或者多个字节组成,机器以一个包文为单位,进行包文处理。用生活中的例子来解释,我们使用QQ传递消息时,QQ有可能会将当前的对话内容封装成一个包文,然后再传给另一端。那么根据实际情况,这个包文可长可短,对话内容少时,包文自然就短,对话内容长时,包文自然就很长了。


二、包文的传输

前面介绍了包文是一组一组的用户数据。包文在传递传输中,有可能会通过不同的接口进行传输,例如网线、串口、电话线、无线传输等,不管是什么样的方式传输,最终传到另一端的时候,必须又能够还原回原来的包文。就如我们通过QQ发了一段音频,那么对方收到的也会是一段音频,不能变成文字或者视频。在工程中就相当于我们将一个包文(48’h000102030405)从A发送到B,不管中间经过了什么接口,最终B要收到的就是(48’h000102030405)。

FPGA中,明德扬定义了一种数据接口,这种数据接口一般包含data,data_vld,data_sop,data_eop和data_mty等。

其解释如下:
data:类似的名称还有din,dout等,传递的数据,其可能由多根线组成,常用的8根线、16根线、32根线,分别表示一次可传送8位、16位和32位数据。
data_vld:数据有效表示信号;为1表示当前时刻的data有效,正在传递一个数据,为0时表示当前数据无效,不要去抓数据。(注意,很多人会误认为,用“data==0”表示“没有数据”,这是错误的观念,0本身也是一个数据,因为有可能A要将数据0传给B。真正表示数据有效还是无效的,是看vld信号,而不是看data。)
data_sop:包文头指示信号;表示当前的这个数据是包文的第一个数据。
data_eop:包文尾指示信号;表示当前的这个数据是包文的最后一个数据。
(通过data_sop,data_eop就可以很容易区分出各个包文,避免不同包文数据之间的错乱。)
data_mty:当前无效数据字节数;很多人不太理解这个信号的含义,前面说过,包文的长度是可长可短的,一般是以字节为单位,因此有可能长度为1、2、3~1000字节等,甚至更长的长度。假设现在data的位宽是32位,就是vld有效时,一次就传4个字节。现在问题来了,假如A要传给B,1个字节的包文,那么如何怎么告诉B现在是1个字节包文呢?这时就可通过mty为表示了,当其为3时,就表示当前data有3个字节无效,B收到后就知道怎么做了。有同学会问B有没有可能等于4,也就是全部无效呢?如果要表示全部无效,直接让vld等于0就好了,没有必要让mty来表示。

综上所述,通过上面几个信号,A和B之间能实现传递任何长度的包文。

三、包文的接口信号意义以及约定规范

FPGA可以定义如下信号来方便地传输,即能保留全部报文的信息,又能适合FPGA的接口
图片1.png
信号
说明
clk
模块工作时钟
rst_n
系统复位信号,低电平有效
en
en有两种用法:
1.使能命令信号,类似于vld,当其为1时表示一个命令有效;
2.使能状态指示,当其为1时表示处于使能状态。
vld
数据有效标志指示信号,表示当前的data数据有效。注意,vld不仅指示了数据有效,而且还指示了有效的次数。时钟收到多少个vld=1,就表示有多少个数据有效
data
包文数据。可以用din来表示输入的数据;dout表示输出的数据。接口位宽一般是8、16、24、32等8的整数倍。
mty
表示无效字节数。0全部有效。 vld=1eop=1时,mty才有效,其他时候为0
大头模式
err
整个包文错误指示,在eop=1vld=1有效时才有效
sop
包文起始指示信号,用于表示有效包文数据的第一个比特,当vld=1时此信号有效
eop
包文结束指示信号,用于表示有效包文数据的最后一个比特,当vld=1时此信号有效
rdy
模块准备好信号,用于模块之间控制数据发送速度
例如模块A发数据给模块B,则rdy信号由模块B产生,连到模块A(即对于B是输出信号,对于A是输入信号);
B要保证rdy产生正确,即此信号为1时,B一定能接收数据;
A要保证仅在rdy=1时才发送数据。

四、包文的接口信号应用

使用一个案例来加固学习效果。假设模块A要先后发送包文5字节包文:40’h0102030405和6字节包文:48’h060708091011给模块B。
一起来实现这个效果,分析目标可知信号连接和信号波形可设置如下所示:
图片2.png
模块A和模块B的连接信号


图片3.png
信号波形


该信号波形是数据位宽为16包文,包文的有效包文数据是:8’h01,8’h02,8’h03,8’h04,8’h05,8’h06,8’h07,8’h08,8’h09,8’h10,8’h11,当data_mty为高电平时,对应的data值16’h0500有一个字节无效,默认低位无效(即8’h00无效),所以data值为16’h0500时,有效值是8’h05。


以上就是本人对包文的理解和使用,更多相关FPGA的知识,大家可以在评论区与我进行交流讨论!

FPGA视频课程  培训班 FPGA学习资料
吴老师 18022857217(微信同号) Q1241003385
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|MDYBBS ( 粤ICP备16061416号 )

GMT+8, 2024-11-26 10:16 , Processed in 0.063456 second(s), 25 queries .

Powered by Discuz! X3.4

本论坛由广州健飞通信有限公司所有

© 2001-2019 Comsenz Inc.

快速回复 返回顶部 返回列表