杨老师 发表于 2022-3-21 11:10:16

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

第3节 存储控制功能


本项目接收光纤数据后,首先会保存到DDR3中,等存够一定数据时,读出数据,送到PCIE。接收板一共有4片DDR3,每片DDR3的数据位宽是16位。要注意的是,虽然有4片DDR4,但这4片DDR3不是各自独立工作的。在硬件设计时,将DDR3的地址线、控制线共用,数据线分开。也就是说,4片DDR3同时进行读写,对FPGA来说,这相当于一片64位的DDR3。由于光纤数据一共有4路,并且4路数据都同时过来的,但只有一片64位的DDR3,如果不做处理,必须会有冲突。所以必须要做一个调度模块:4路光纤数据,首先会保存到内部的写FIFO中;调度模块判断4路FIFO的空闲情况,从而决定读取哪一路数据,存到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功能

PCIE实现FPGA与上位机通信的功能,通信包文有两种,种是业务包文,一种是配置包文。配置包文是用来对接收卡、发送卡内的寄存器读写的包文。例如上位机对接收卡通道的开户和关闭,对发送卡的数据收发控制、上位机读取接收卡的内部状态等,均是由配置包文来实现的。业务包文是指发送卡里的AD采集的数据,是真正上位机要保存的数据。下面上位机和FPGA的通信格式。
包文类型(16b)读写属性(1b)板卡编号(15b)寄存器地址(16b)寄存器数据(32b)无效填充(48b)

Ø 包文类型:用来指示是业务包文还是配置包文。业务包文的包文类型为16'h55AA;配置包文的类型为16'hF8F8。Ø 读写属于:用于上位机指示对FPGA的寄存器进行写,还是读其值 。Ø 板卡编号:用来指示当前包文是对哪个板卡进行配置,可以理解为设备地址。例如是对接收卡或具体的一个发送卡进行寄存器读取。编号为0~3表示发送板0~3,编号4为接收卡。Ø 寄存器地址:这个可以理解 为寄存器地址。Ø 寄存器数据:对寄存器配置的数据,如果是读的话,则填0。
上位机当要配置或者读取寄存器时,会按格式产生一个配置包文,通过PCIE传给FPGA。FPGA的内部有一个PCIE IP核。该IP核支持AXI4并且是包文形式,从PCIE里接收到包文数据,并送往协议解析模块。协议解析模块分析该包文,特别是对包文编号进行识别。根据编号,如果是接收卡配置包文,则直接对内部的寄存器进行读取;如果是某一路发送板配置包文,则将该包文转发到该路光纤接口。如果是读取寄存器数据,则会将配置包文返回给上位机,具体路径是:协议解析模块处理后,将寄存器数据补充到包文的数据域,然后读该包文转给6选1 SP调度模块。在该调度模块中,从6路包文(1路是业务包文,1路是接收卡返回的配置包文,其他4路是4个光纤返回的配置包文),选取一路发给PCIE IP核。上位机从包文类型中,识别出业务包文还是配置包文,做相对应的处理。明德扬已经针对本项目录制了视频课程,感兴趣的同学可以加兰老师微信了解



杨老师 发表于 2022-3-21 16:28:05

加小助理VX:【13316124179】获取电子书籍讲义、PPT课件、案例源码、学习答疑。暗号1进VX群与大伙共同学习FPGA。
页: [1]
查看完整版本: (项目经验)明德扬光纤项目概述(下)