[X]关闭

FDMA使用疑惑

文档创建者:4AM
浏览次数:9640
最后更新:2019-12-18
 
你好,我在做CH10_FDMA_HDMI_2PC这章例程中有一些问题,在fdma_controller模块中,W0_REQ信号由fifo的rd_data_count产生,并且W0_REQ控制pkg_wr_areq的产生,fifo的rd_en信号连接到pkg_wr_en,pkg_wr_en信号是由FDMA输出的,在FDMA中,pkg_wr_en由axi_wvalid信号控制,axi_wvalid信号由w_cycle_flag和w_fdma_locked这两个信号控制,其中w_fdma_locked由pkg_wr_areq信号控制,我想问,如果没有fifo的读请求信号pkg_wr_en,那么fifo的读计数rd_data_count就不计数,W0_REQ信号就不能触发,进而pkg_wr_areq也不会为1,pkg_wr_areq不为1,在FDMA中w_fdma_locked也不为1,那么pkg_wr_en信号不也不为1,那么不就相当于fifo没有读请求信号,没有读请求不就没有读计数,也不会有pkg_wr_areq信号,这样不就形成死循环了。针对我自己这个问题,我想请教一下这个过程怎么实现的,可能是我那个方面没有理解,希望给出一些建议,谢谢。
pcie4.PNG pcie3.PNG pcie2.PNG pcie1.PNG

发表评论已发布 8

4AM

发表于 2019-9-16 18:54:35 | 显示全部楼层

fifo是不是应该用wr_data_count信号来控制

uisrc

发表于 2019-9-16 19:13:18 | 显示全部楼层

都是可以的,根据情况而定,显然这里用rd_data_count更加合理一些
1、因为这里是要把FIFO的数据读出来,然后写入到AXI4总线,那么自然观察读FIFO的计数器更合理
2、由于FIFO不管是写计数器还是读计数器都不精准,所以这个地方的计数器,也只是大概的用读FIFO更合理,因为没错从FIFO取数据都要确保FIFO的数据是足够的
3、如果你用写计数器确保,那么虽然在这里问题不大,但是如果FIFO比较短,而读的很快,可能写入的数据还没到读的FIFO接口,读FIFO就会出现丢数据。
越努力越幸运!加油!

4AM

发表于 2019-9-17 09:29:07 | 显示全部楼层

msxbo 发表于 2019-9-16 19:13
都是可以的,根据情况而定,显然这里用rd_data_count更加合理一些
1、因为这里是要把FIFO的数据读出来,然 ...

1.fifo的第一次读使能信号rd_en是怎么来的?
2.在fdma_controller的代码中,用fifo的读计数取控制,我就有一个疑问,pkg_rd_en信号在FDMA中产生,在FDMA中pkg_rd_en信号由pkg_wr_areq来控制,pkg_wr_areq信号是fdma_controller中的输出,当fifo的读计数计到256时,会产生W0_REQ信号,进而控制pkg_wr_areq信号,那么fifo第一次读数据的使能信号rd_en怎么来的呐?

uisrc

发表于 2019-9-17 13:13:32 | 显示全部楼层

首先看下如何往FDMA写数据
1、当FIFO的数据准备好后(FIFO有足够多的数据),发送pkg_wr_areq通知FDMA IP取FIFO数据,FDMA里面逻辑代码开始取数据,并且准备写入到DDR
2、assign pkg_wr_en= wnext; assign w_next=axi_wvailid&AXI_WREADY; 可以看到本质是axi_wvailid和AXI_WREADY;同时为1的时候往AXI4总线写数据

再看下如何从FDMA读数据
1、当FIFO的数据准备好后(FIFO有足够的空间存放数据),发送pkg_rd_areq通知FDMA IP从DDR取数据,FDMA里面逻辑代码开始从DDR取出数据
2、assign pkg_rd_en= rnext; assign r_next=AXI_RVALID&axi_rready; 可以看到本质是AXI_RVALID和axi_rready;同时为1的时候总线上的数据有效,并且写入到FIFO
越努力越幸运!加油!

4AM

发表于 2019-9-17 14:39:47 | 显示全部楼层

msxbo 发表于 2019-9-17 13:13
首先看下如何往FDMA写数据
1、当FIFO的数据准备好后(FIFO有足够多的数据),发送pkg_wr_areq通知FDMA IP取F ...

你说的这些我都看过了,针对你给我回复的我有两点疑惑
1.你说的fifo数据准备好(fifo有足够多的数据),发送pkg_wr_areq信号是什么意思,fifo的读使能信号rd_en(pkg_wr_en)不为1,rd_data_count(W0_rcnt)能计数吗?,能产生W0_REQ吗?,没有W0_REQ信号,怎么产生pkg_wr_areq信号,所以我不懂你说的fifo数据准备好(fifo有足够多的数据),发送pkg_wr_areq信号是什么意思

2.你说的当FIFO的数据准备好后(FIFO有足够的空间存放数据),发送pkg_rd_areq通知FDMA IP从DDR取数据,FDMA里面逻辑代码开始从DDR取出数据,但是代码中的顶层文件中pkg_rd_areq(1'b0), 你们是这样给出的,我也不明白你说的FIFO的数据准备好后(FIFO有足够的空间存放数据),发送pkg_rd_areq通知FDMA IP从DDR取数据是什么数据,pkg_rd_areq都没有,怎么取数据.
9.17.PNG
9.17.1.PNG

uisrc

发表于 2019-9-17 15:33:04 | 显示全部楼层

你是PCIE传图,只要把数据写入到DDR,所以只有FMDA的写传输,没有FMDA的读传输,当FIFO的缓存数据W0_rcnt >=PKG_SIZE 那么状态机就会设置pkg_wr_req=1  FDMA就开始准备传输了,当pkg_wr_en=1的时候才从FIFO读出数据,这里不就是用pkg_wr_en作为FIFO读使能了吗?

至于FMDA的读传输,这里我是顺便帮你解释下,读传输的原理,这是这里没用到而已.

希望你现在可以弄明白了


越努力越幸运!加油!

superhornet

发表于 2019-10-14 16:14:01 | 显示全部楼层

学习了
回复

使用道具 举报

HSL

发表于 2019-10-14 17:19:48 | 显示全部楼层

学习了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则