完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
嗨,
我在FIFO存储器中写入一些数据时遇到了麻烦。 目前,我正在使用Artix 7(XA7A100T-256-3),并使用Vivado 2014.2合成,实现和生成位文件。 在我的设计中,我使用FIFO生成器12.0(接口类型本机)生成了一个独立的时钟blocm RAMFIFO。 写时钟频率为200 MHz。 要写入的数据来自使用FIR编译器7.1生成的FIR滤波器。 我试图只写入选定的数据,所以我通过控制写使能信号有选择地将数据写入FIFO。 当我直接连接FIR滤波器的输出,并使用FIR滤波器输出的有效信号作为写使能时,它工作得很好。 但是,对于我的应用,我实际上需要在FIR滤波器的三个输出之间应用多路复用器,每个FIR滤波器由32位组成,并将多路复用器的输出馈送到FIFO的数据输入。 在这种情况下,事情并不完美。 选择信号来自我自己编写的模块(不是从IP生成的)。 在合成原理图中,我可以看到FIR滤波器的三个输出连接到LUT,LUT的输出连接到FIFO的数据输入。 其写使能信号也来自该模块。 我尝试过多次测试。 1. FIFO的数据输入连接到FIR的输出(没有使用LUT实现的多路复用器)。 写使能信号从用户定义的模块馈送。 - >工作正常。 2.三个FIR滤波器的输出被多路复用,然后根据需要连接到FIFO。 FIR滤波器的输入固定为常数值。 - >工作正常。 3.三个FIR滤波器的输出被多路复用,然后根据需要连接到FIFO。 FIR滤波器的输入不固定为恒定值,动态变化。 - >不行。 我可以看到一些带有大量噪音的原始信号(以ramdom方式)。 我基本上怀疑这个多路复用数据路径没有正确关闭时序,因为FIR滤波器的输出(在DSP模块中的Artix 7物理布局?)必须前往CLB(实现用户定义的模块)和阻塞RAM( 其中实现了FIFO),而不是直接从DSP块到Block RAM。 4.我也试过内置FIFO而不是块RAM FIFO,我没有尝试过分布式RAM - >不工作 5.我还尝试以延迟方式选通写使能信号,使32位数据路径有足够的时间到达FIFO - >不工作 6.我尝试了不同的实施策略,特别注意时间 - 它们都没有工作。 另外,我在verilog代码中实现多路复用的方式如下 分配DATA_OUT =(strobe_ch [0])? DATA_IN [31:0] :( strobe_ch [1])? DATA_IN [63:32]:DATA_IN [95:64]; 当然,strobe_ch [0]和strobe_ch [1]不会同时变高。 从而, 1.我想知道是否有人想要实现我想要实现的目标:多路复用输入到FIFO并使其正常工作。 (多路复用使用固定输入,但不使用不同的输入)。 2.或者是否知道如何正确约束数据路径的延迟? 我使用set_max_delay -from [FIR clock]到[FIFO数据引脚],但它没有做任何更好的事情。 3.强制FIFO时钟中的定时队列? 用于FIFO时钟的时钟已经是时序约束,但是.. FIFO的XDC显示其读写时钟有100MHz而不是200MHz,我似乎无法改变它们。 任何建议或建议将不胜感激。 |
|
相关推荐
11个回答
|
|
嗨丹尼尔,
我已经尝试了多次测试,结果发现问题来自并行FIR滤波器。 我不确定为什么会发生这种情况,但当我使用单个FIR滤波器时,FIR滤波器显示出优异的性能。 另一方面,当FIR滤波器并行实例化或在AXI4流中使用并行路径时,滤波器响应会降低。 由于噪声对于我想要的信号非常小,这意味着它只影响相对最低有效位,并且根据我的测试,信号在通过滤波器后会降级。 这是FIR编译器7.1的任何已知问题或如何解决这个问题? 谢谢, Joohyun 在原帖中查看解决方案 |
|
|
|
如果它在模拟器中工作正常但硬件失败,则听起来像是时间问题。
您的逻辑和FIFO的写端口是否由相同的200 MHz时钟(不是相同的频率,但来自相同源的相同时钟或时钟)馈送? 如果没有,你将会遇到问题而没有一点点工作。 丹尼尔 |
|
|
|
嗨丹尼尔,
是的,Verilog描述的FIR滤波器,FIFO和我自己的模块运行频率为200 MHz,时钟源相同。 虽然FIR滤波器以200 MHz运行,但数据以40 MHz的频率馈送,这意味着输出端的tvalid信号每25ns选通一次。 它保持高电平2.5 ns,这是200MHz时钟的半周期。 没有LUT来实现MUX,一切正常。 使用LUT,它无法正常工作。 一个有趣的事情是Spartan 6使用了相同的设计。在那个时候,我只在两个FIR滤波器之间进行多路复用,并且工作正常。 现在,我正在处理三个FIR滤波器,我很难过。 感谢您的回复,请拍下任何想法进行探索。 谢谢, Joohyun |
|
|
|
如果选通仅高达2.5 ns,则您的约束需要反映出来,否则您可能会错过设置和保持窗口。
您可以为相关路径添加set_max_delay -datapath_only-from XXX -to YYY 2.5约束。 但是你仍然需要让信号持续一个时钟周期让FIFO注意它,所以如果你从一个LUT进入一个保持设置的锁存器直到时钟清零它,那么你将把脉冲延伸到一个时钟 周期。 丹尼尔 |
|
|
|
谢谢您的回复。,
对不起,这是我的错误,说2.5 ns。 FIR滤波器输出的tvalid信号是200 MHz的整个周期。 FIR滤波器的tvalid选通脉冲为5 ns,因此对于后续阶段使用,它可以在一个时钟上升沿(200 MHz)内保持高电平。 由我自己的模块生成的写使能信号也高达5 ns。 我已经尝试过包含时序限制,但它没有做任何更好的事情: set_max_delay 4.000 -from [get_pins FIR_4 / aclk] -to [get_pins FIFO_1 / din] FIR_4 / aclk是馈送200 MHz时钟的引脚,FIFO_1 / din是32位数据路径的目标。 代表着 FIR_4:32位数据| ----- FIR_5:32位数据| MUX生成32位数据 - > FIFO_1 FIR_6:32位数据| ------ / | 选择 任何其他建议,或时间限制的任何错误? 谢谢, Joohyun |
|
|
|
不,看起来电路的这一部分应该能够正常工作。如果您生成一系列数字而不是FIR输出,您可以将其输入FIFO,您可以验证您的工作正在运行.Daniel
|
|
|
|
嗨丹尼尔,
我已经尝试了多次测试,结果发现问题来自并行FIR滤波器。 我不确定为什么会发生这种情况,但当我使用单个FIR滤波器时,FIR滤波器显示出优异的性能。 另一方面,当FIR滤波器并行实例化或在AXI4流中使用并行路径时,滤波器响应会降低。 由于噪声对于我想要的信号非常小,这意味着它只影响相对最低有效位,并且根据我的测试,信号在通过滤波器后会降级。 这是FIR编译器7.1的任何已知问题或如何解决这个问题? 谢谢, Joohyun |
|
|
|
你好Joohyun,既然你的问题不是关于FIFO的问题,为什么不通过接受消息(例如你的最后一个)作为解决方案来标记这个线程。
然后在并行FIR滤波器上启动一个新线程,看看你在那里得到了什么样的响应.Daniel |
|
|
|
“我基本上怀疑这个多路复用数据路径没有正确关闭时序,因为FIR滤波器的输出(在DSP模块中的Artix 7物理布局?)必须前往CLB(实现用户定义的模块)并阻止RAM
(实现FIFO的地方),而不是直接从DSP模块到Block RAM。“ 当你考虑3辆公共汽车试图挤压通过,然后回到块公羊...... 尝试编写已注册输入和输出的mux模块。 延迟会花费几个时钟周期,但在路由时序方面会很容易。 |
|
|
|
感谢您的帮助!
|
|
|
|
|
|
|
|
只有小组成员才能发言,加入小组>>
2281 浏览 7 评论
2694 浏览 4 评论
Spartan 3-AN时钟和VHDL让ISE合成时出现错误该怎么办?
2176 浏览 9 评论
3250 浏览 0 评论
如何在RTL或xilinx spartan fpga的约束文件中插入1.56ns延迟缓冲区?
2321 浏览 15 评论
有输入,但是LVDS_25的FPGA内部接收不到数据,为什么?
582浏览 1评论
1648浏览 1评论
145浏览 1评论
在使用xc5vsx95T时JTAG扫片不成功,测量TDO无信号输出
2298浏览 0评论
611浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-8-23 21:15 , Processed in 1.436025 second(s), Total 97, Slave 80 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191