请问zynq自定义IP中断持续脉冲长度是多少个时钟周期
先介绍一下我的情况1,我需要自定义IP 在FIFO收到1600个数据后产生一个中断送给PS 通知PS通过DMA收取数据 。
这个中断的脉冲需要持续多长呢。
2,ADC采集数据后降速率,如何才能生成与降低后的速率同相的时钟呢。FIR本身不提供时钟输出。
最后一张DMA-TLAST的图片与这个贴子无关,但是我删除不了 理论上不是脉冲持续的吗?软件进去中断后,写寄存器清除中断? 边沿中断1CLK;电平中断持续。看你怎么选择了。 dr2001 发表于 2018-12-6 08:16
边沿中断1CLK;电平中断持续。看你怎么选择了。
谢谢。其实最好的方法还是自己做实验确定,只是跑一次时间太长了。有点浪费
如果1CLK边沿触发的话PS那边自然是没有问题,PL这边因为我取的是FIFO的可编程满信号,从实验来看高电平会持续300个PL CLK 250M,PS那边是667M
这样会不会造成PS不断重复触发呢。因为我觉得这个电平持续时间太长了,PS那边中断里就只给一个信号量,处理完了高电平信号还在,应该会重复触发,而我又没有在电路上做中断清除处理。(写0或者写1清除FIFO的可编程满信号的高电平状态,直到下一个上升沿到来)
如果做边沿触发,那么FIFO的可编程满信号是不是自己要处理一下,保证每个上升沿输出成1CLK信号。
还有FIR降速后的时钟问题。我的想法是跟据给定的抽取率,做为分频依据,然后计数分频后输出做为异步FIFO的输入时钟,这样可行吗。还有没有更好的方法。
VIVADO编一次20多分钟,一天下来只能确定一两问题或者不确定的点,实在是折腾。
望指点 谢谢。 本帖最后由 gongcsf 于 2018-12-6 08:42 编辑
zxq6 发表于 2018-12-5 23:01
理论上不是脉冲持续的吗?软件进去中断后,写寄存器清除中断?
谢谢。与单片机有些不一样。清中断要自己处理
中断不用自己处理,可以设置上升沿触发,我弄错了。 看到了,中断可以用上升沿触发,不用自己处理了。
现在只有FIR输出后时钟的问题了。 既然用了dma的中断,为何还要用fifo的full呢?
dma发现fifo有数据就启动S2MM通道,向指定地址送数据,数据完成后,产生中断告知PS
楼主的应用场合不是这样的吗? qjs412_avr 发表于 2018-12-6 08:47
既然用了dma的中断,为何还要用fifo的full呢?
dma发现fifo有数据就启动S2MM通道,向指定地址送数据,数据 ...
我的数据是ADC产生的,一直不断,速率可变。
而AXI DMA 必须要求TLAST信号,那个DMA接收 计数器似乎只是一个摆设 ,没有接到TLAST信号DMA绝对不会生产接收完成中断。
而接收计数寄存器的值可以大于实际需要接收的数量,似乎一切以TLAST信号为准(流)
所以我只能用FIFO缓存,用计数来产生TLAST信号。
我看过其它BRAM的方法。接收数据后好像还要搬运一次才能进DDR ,所以我选择了 AIXS 流 gongcsf 发表于 2018-12-6 08:54
我的数据是ADC产生的,一直不断,速率可变。
而AXI DMA 必须要求TLAST信号,那个DMA接收 计数器似乎只 ...
是的,中断的产生不仅依靠tlast,这个还要看dma的工作模式,simple or SG
在simple模式下,的确是以tlast这个信号为准,例如FPGA需要发送1600Bytes ,而PS设定DMA的接收长度>=1600Bytres
只要FPGA发送结束,DMA就会产生中断
不知道您的ADC采样速率是不是很高,这样就要求PS的实时性要很高
可不可以这样,dma判断fifo的数据是否>=1600Bytes,符合条件,然后启动DMA-->写入DDR完成,产生中断
这样就要求,dma发送数据的速率要大于adc的采样速率,这样才能保证数据不丢
fifo的深度设置最好大于1600Bytes
本帖最后由 gongcsf 于 2018-12-6 09:56 编辑
dma sg 模式比较复杂,还没时间去弄。
dma 在普通模式下不能跟据接收数量产生接收完成中断,而是给tlast就生成接收完成中断 (没实际确定,只确定了无tlast信号,DMA无论接收多少都不会产生正确的中断)
ADC采样125M,32位i/q 降速10-1M 送TCP发送缓冲,网络是1000M的,一个包是<65535?(我不确定,因为还没做到那一部分) 65535/32 =2048所以我DMA一次最多接收2K
gongcsf 发表于 2018-12-6 09:18
dma sg 模式比较复杂,还没时间去弄。
dma 在普通模式下不能跟据接收数量产生接收完成中断,而是给tlast就 ...
S2MM这个方向上的tlast信号是由自定义IP FIFO产生的,在这个IP中会判断传输数据是否完成输出tlast
根据你的描述,大概可以知道的是FIFO与DMA之间没有产生tlast信号,dma会认为接下来还有数据,所以不会产生中断信号,由此可以判断s2mm_introut是根据tlast输出的
我查了下dma的vhdl代码,发现封装的比较深,没有查到
只需要在fifo中计数给出tlast即可使dma产生中断
ps对dma的接收长度设定不是产生中断的依据,猜测应该是给dma内部建立fifo深度用的
并且官方手册上说,这个设定值一定要大于实际传输长度,否则会产生不可预知的后果 qjs412_avr 发表于 2018-12-6 10:01
S2MM这个方向上的tlast信号是由自定义IP FIFO产生的,在这个IP中会判断传输数据是否完成输出tlast
根据 ...
计数产生TLAST信号并DMA接收送DDR。已经完成。现在是用一个IP读取FIFO数据数量while(nb>1600)来触发DMA单次传输。
我想通过可编程满信号做为中断信号。在中断中发送信号量来启动DMA单次传输。中断设置成上升沿触发。这个应该也没什么问题了。
ADC数据经过FIR抽取后速率降低。
现在要把FIR的数据输入FIFO 。确发现没有与FIR
同步的时钟。是否应该采取根据抽取率计数的方式来生成与FIR输出数率一样的时钟。还有没有别的方法。谢谢
DMA 需要TLAST这个问题困扰了我好几天。已经解决。如果早些得到你的指点就不用熬夜伤身体了 gongcsf 发表于 2018-12-6 10:21
计数产生TLAST信号并DMA接收送DDR。已经完成。现在是用一个IP读取FIFO数据数量while(nb>1600)来触发DMA单 ...
我也刚学zynq不久(以前是干单片机ARM之类的),只是前段时间一直在弄axi_dma,所以略知一二
关于FIR时钟问题,我不是很懂,FIFO不是可以干跨时钟域数据传输吗?
不知我的理解是否正确,FIFO的写入时钟和FIR的时钟相同,读取时钟和读取IP时钟相同
希望有其他同行能够帮到你 本帖最后由 gongcsf 于 2018-12-7 23:58 编辑
一直以为直接把FIFO满信号作为中断输入就可以了,
原来还有玄机啊,接口必须设置成中断类型才行,网上资料不多,当日记一样记录吧
谁便找个自定义IP加一个中断类型的接口转一下就可以了
FIFO满了才触发中断不会丢失数据吗? sunny_82 发表于 2018-12-9 11:50
FIFO满了才触发中断不会丢失数据吗?
可编程空满。4K深度,我设的2K
页:
[1]