明德扬论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

微信扫一扫,快捷登录!

查看: 844|回复: 1

(项目经验)明德扬光纤项目概述(下)

[复制链接]

3

主题

4

帖子

1121

积分

金牌会员

Rank: 6Rank: 6

积分
1121
发表于 2022-3-21 11:10:16 | 显示全部楼层 |阅读模式

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

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

x
第3节 存储控制功能
图片3.png

本项目接收光纤数据后,首先会保存到DDR3中,等存够一定数据时,读出数据,送到PCIE
接收板一共有4DDR3,每片DDR3的数据位宽是16位。要注意的是,虽然有4DDR4,但这4DDR3不是各自独立工作的。在硬件设计时,将DDR3的地址线、控制线共用,数据线分开。也就是说,4DDR3同时进行读写,对FPGA来说,这相当于一片64位的DDR3
由于光纤数据一共有4路,并且4路数据都同时过来的,但只有一片64位的DDR3,如果不做处理,必须会有冲突。所以必须要做一个调度模块:4路光纤数据,首先会保存到内部的写FIFO中;调度模块判断4FIFO的空闲情况,从而决定读取哪一路数据,存到DDR3中。没有被读取的,则继续保存在FIFO中,直到被调度出来。
在设计调度模块时,要注意如下几点:
a. 调度的优先级
一共有4路数据,那么调度器的优先级如何选择,即如果4路中有多于1路均同时有数据,那么该如何选择哪一路。例如,您可以指定第0~3路优先级依次由高变低,即当第0路有数据,一定选择0路;当第0路没有数据了,再决定看下一路。当采用此方式时,就要考虑是否存在如下情况:第0路一直有数据,导致其他路一直无法读出送到DDR3呢,这是要思考的问题。
b. 调度的单位
调度的单位是指:选择了一路数据后,会读取多少个数据才结束。可供选择是1个数据、多个数据,或者是读到FIFO空为止。这里要思考的是,1个数据最灵活,但是最繁琐,会出现频率调度的情况;如果是越多的数据,调度没有那么繁琐了,但也意味着写FIFO要临时存比较多的数据才行,所以这里要有一个平衡。
c. 调度的起启水线
调度的起启水线:当FIFO存够多少个数据,才可以被调度器调度。这个是要考虑DDR的写速度、光纤的输入速度、以及调度单位的。例如,如果调度单位为1024个数据,起启水线100,当DDR写速度比光纤速度快时,就可能会存在DDR写到一半时,新的数据还没有来的情况。
当然,最省事的,就是将起启水线设置为跟调度单位一样,这样就绝对不存在问题,但这会存在一定的浪费。为什么呢?我们设想如下场景,当往DDR写数据的同时,光纤也会同时有新的数据送到写FIFO。我们可以计算DDR的写速度,以及新数据输入速度,根据速度差,得到起启水线。最理想的情况,就是当最后一个数据写到FIFO时,刚好也要将该数据写到DDR,然后调度结束。这样做的好处,就是将FIFO的深度设置为最适合的大小,从而节省资源。
FPGA领域,貌似还不能理解FIFO深度多一点或者少一点有什么所谓。但在芯片设计领域则是经常考虑的点。笔者在做芯片设计时,经常要花很多精力去计算出最省资源的方案。其实这也说明了FPGA设计和芯片设计的区别,区别是做得更细、设计得更好。
by the way,就如我一直在强调的,FPGA和芯片是一个讲究做细节的技术,很多人可以做很粗的功能,但很少人可以做很细的功能,例如图像显示很多人都会,但用较少资源来实现图像显示,那就不会了。
第4节 PCIE功能
图片4.png


PCIE实现FPGA与上位机通信的功能,通信包文有两种,种是业务包文,一种是配置包文。
配置包文是用来对接收卡、发送卡内的寄存器读写的包文。例如上位机对接收卡通道的开户和关闭,对发送卡的数据收发控制、上位机读取接收卡的内部状态等,均是由配置包文来实现的。
业务包文是指发送卡里的AD采集的数据,是真正上位机要保存的数据。
下面上位机和FPGA的通信格式。
包文类型
16b
读写属性
(1b)
板卡编号
15b
寄存器地址
16b
寄存器数据
32b
无效填充
48b
Ø 包文类型:用来指示是业务包文还是配置包文。业务包文的包文类型为16'h55AA;配置包文的类型为16'hF8F8
Ø 读写属于:用于上位机指示对FPGA的寄存器进行写,还是读其值 。
Ø 板卡编号:用来指示当前包文是对哪个板卡进行配置,可以理解为设备地址。例如是对接收卡或具体的一个发送卡进行寄存器读取。编号为0~3表示发送板0~3,编号4为接收卡。
Ø 寄存器地址:这个可以理解 为寄存器地址。
Ø 寄存器数据:对寄存器配置的数据,如果是读的话,则填0
上位机当要配置或者读取寄存器时,会按格式产生一个配置包文,通过PCIE传给FPGAFPGA的内部有一个PCIE IP核。该IP核支持AXI4并且是包文形式,从PCIE里接收到包文数据,并送往协议解析模块。
协议解析模块分析该包文,特别是对包文编号进行识别。根据编号,如果是接收卡配置包文,则直接对内部的寄存器进行读取;如果是某一路发送板配置包文,则将该包文转发到该路光纤接口。
如果是读取寄存器数据,则会将配置包文返回给上位机,具体路径是:协议解析模块处理后,将寄存器数据补充到包文的数据域,然后读该包文转给61 SP调度模块。在该调度模块中,从6路包文(1路是业务包文,1路是接收卡返回的配置包文,其他4路是4个光纤返回的配置包文),选取一路发给PCIE IP核。
上位机从包文类型中,识别出业务包文还是配置包文,做相对应的处理。

图片4.png

3

主题

4

帖子

1121

积分

金牌会员

Rank: 6Rank: 6

积分
1121
 楼主| 发表于 2022-3-21 16:28:05 | 显示全部楼层
加小助理VX:【13316124179】获取电子书籍讲义、PPT课件、案例源码、学习答疑。暗号1进VX群与大伙共同学习FPGA。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则


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

GMT+8, 2022-8-16 21:09 , Processed in 0.064464 second(s), 6 queries , File On.

Powered by Discuz! X3.4

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

© 2001-2019 Comsenz Inc.

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