完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
大家好,
我有一个用Spartan 3E控制HV脉冲的设备。 使用赛普拉斯的GPIF协议寻址多达512个寄存器和外部SRAM,与外部PC和存储器进行通信。 时钟系统基于两个不同的外部时钟:48MHz控制GPIF通信和50MHz。我还使用DCM(由48MHz时钟驱动)创建270度移位时钟,以获得正确的信号读/写成一些静态 SRAM和另一个DCM创建一个20MHz时钟(从50MHz时钟)来控制脉冲的产生。 问题是,有时由于HV产生的噪声,我不再能够读取寄存器,并且我读取所有寄存器地址的相同值。 即便在这一刻,20MHz时钟仍能正常工作。 我想这个问题是由于48MHz DCM冻结,因为重置FPGA一切都恢复正常。 这有可能吗? 如果是,请问您是否有任何关于如何避免冻结DCM或如何自动重置的建议? 如果没有,你对如何解释这种行为有任何想法吗? 外部时钟始终有效。 非常感谢 克劳迪奥 以上来自于谷歌翻译 以下为原文 Hi all, I have a device controlling HV pulses with a Spartan 3E. The communication with an external PC and memories is done using the GPIF protocol from Cypress addressing up to 512 registers and an external SRAM. The clock system is based on two different external clocks: a 48MHz controlling the GPIF communication and a 50MHz. I also use a DCM (driven by the 48MHz clock) to create a 270 degree shifted clock to obtain correct signals to read/ write into some static SRAM and another DCM to create a 20MHz clock (from the 50MHz clock) to control the pulse generation. The problem is that sometimes due to the noise generated by the HV I'm no longer able to read the registers and I read always the same value for all the register addresses. Even in this moment the 20MHz clock continues to work properly. I guess this issue is due to the freeze of the 48MHz DCM because resetting the fpga everything is resumed and works properly. Is it possible this? If yes, please, do you have any suggestion about how to avoid a freeze of the DCM or how to reset it automatically? If not, do you have any idea about how to explain this behavior? The external clock is always working. Thanks a lot Claudio |
|
相关推荐
9个回答
|
|
你不需要BUFGMUX,只需要一个IBUFG。
问题是,如果你没有在时钟爆发到多个BUFG / DCM组件之前自己实例化,那么工具将会出错,因为它们最终会推断出多个输入缓冲区。 如果您想使用时钟向导,您有两种选择: 1)在其中一个时钟向导模块中,使用“单端”作为时钟输入,并将IBUFG的输出带到该模块的输出端口。 然后其他BUFG或DCM将使用来自输入缓冲区的时钟而无需进一步缓冲(即,如果您有另一个时钟向导模块,则需要使用“内部”作为时钟输入,因此它不会添加另一个IBUFG)。 2)将所有时钟向导模块设置为使用“internal”作为时钟源,然后在代码的顶层实例化IBUFG。 使用IBUFG的输出来驱动复位发生器的BUFG以及使用相同时钟输入工作的任何DCM。 您不能做的是直接从输入引脚网络扇出,因为工具将推断出多个输入缓冲区。 - Gabor 在原帖中查看解决方案 以上来自于谷歌翻译 以下为原文 You don't need a BUFGMUX, just an IBUFG. The problem is that if you don't instantiate it yourself before the point where the clock breaks out into multiple BUFG / DCM components, then the tools will error out because they ill end up inferring more than one input buffer. If you want to use the clocking wizard you have two choices: 1) in one of your clock wizard modules, use "Single-ended" as the clock input, and bring the output of the IBUFG to an output port of that module. Then other BUFG or DCMs would use that clock from the input buffer without further buffering (i.e. if you have another clocking wizard module it would need to use "Internal" as the clock input so it doesn't add another IBUFG). 2) Set all clocking wizard modules to use "internal" as the clock source, then instantiate the IBUFG at the top level of your code. Use the output of the IBUFG to drive the BUFG for the reset generator as well as any DCMs that work from the same clock input. What you can't do is have fan-out directly from the input pin net because the tools will infer multiple input buffers. -- GaborView solution in original post |
|
|
|
在导致其失锁的时钟事件后,DCM不会自动重新获得锁定。
它需要重置。 我通常会添加一个重置控制器来执行此操作。 复位控制器必须运行的时钟不是它正在复位的DCM的输出。 在您的情况下,它可能是来自引脚的输入时钟通过额外的BUFG,或者您可以使用50 MHz系统的现有时钟。 其余控制器的想法是,当DCM锁定且DCM状态显示输入时钟正常运行时,您有一个计数器保持在复位状态。 否则它会计数。 允许终端计数回绕到零(这很重要)。 然后,当计数器大于某个值(通常接近终端计数)时,DCM的复位被置位。 计数器应足够大,以便在最坏情况锁定时间的数据表时间结束后才能重置DCM。 如果锁定时间太长,这会阻止它不断重置DCM。 显然,DCM的输出将无法使用,并且您可能还需要重置DCM下游的其他电路。 但是,如果您的系统能够容忍,那么它仍然比重新加载比特流更好。 - Gabor 以上来自于谷歌翻译 以下为原文 The DCM will not automatically re-gain lock after a clock event that causes it to lose lock. It needs to be reset. I normally add a reset controller to do this. The reset controller must run on a clock that is not the output of the DCM it is resetting. In your case it could be the input clock from the pin via an additional BUFG, or you could use an existing clock from the 50 MHz system. The idea of the rest controller is that you have a counter which is held in reset when the DCM is locked and the DCM status shows that the input clock is running normally. Otherwise it counts up. At terminal count is allowed to wrap back to zero (this is important). Then the reset of the DCM is asserted when the counter is greater than some value, usually near the terminal count. The counter should be large enough that it doesn't reset the DCM until after the data sheet time for worst case lock time has elapsed. That prevents it from constantly resetting the DCM if it takes too long to lock. Obviously there will be some time period when that DCM's output is unusable, and you may also need to reset other circuitry downstream of the DCM. However if your system can tolerate that, it's still better than re-loading the bitstream. -- Gabor |
|
|
|
你好Gabor,
谢谢你的回答。 所以不建议使用dcm的clock0输出来做你建议的。 如果我很好理解,即使该线在锁定时停止也会停止。 这是对的吗? 我试图限制fpga电路的复位,避免丢失系统状态并自动恢复 我想只重置通信寄存器 克劳迪奥 以上来自于谷歌翻译 以下为原文 Hello Gabor, thank you for your anwer. So it is not recommended to use the clock0 output of the dcm to do what you suggested. If I well understand, even that line is stopped when lock is down. Is it correct? My though is to try to limit the reset of the fpga circuitry avoiding to lose the status of the system and recover it automatically I would like to reset only the communication registers Claudio |
|
|
|
锁定时,CLK0输出可能会发生转换,但复位输入有效时不会发生转换。
因此,如果将CLK0用于向DCM生成复位信号的状态逻辑,则一旦复位信号被置位,它就会被卡住。 另请注意,当锁定置为无效时,任何DCM输出的时序都可能超出约束条件(较短的脉冲宽度或较高的频率)。 - Gabor 以上来自于谷歌翻译 以下为原文 There can be transitions on the CLK0 output when lock is down, but not while the reset input is active. So if you use CLK0 for the state logic that generates the reset signal to the DCM it will get stuck as soon as the reset signal is asserted. Also note that any DCM outputs may have timing that is outside of your constraints (shorter pulse width or higher frequency) while lock is deasserted. -- Gabor |
|
|
|
我试图实现你的建议,但我发现我在尝试直接从输入引脚创建bufg时遇到错误。
唯一没有错误的方法是我发现用50MHz引脚信号创建一个bufgmux,然后我用bufgmux的输出创建了一个bufg。 bufgmux的相同输出进入dcm内部。 请查看附件。 我计划使用如上所述获得的信号clk0_out来驱动剩余信号 bufgmux也以这种方式使用,让我使用第二个dcm用于48MHz时钟输入,否则工具由于所需的另一个bufgmux的位置而给出错误。 两个时钟有输入引脚:183和185 克劳迪奥 clockgen.txt 4 KB 以上来自于谷歌翻译 以下为原文 I tried to implement your suggestion, but I found that I have errors trying to create a bufg directly from the input pin. The only way, without errors, I found has been to create a bufgmux with the 50MHz pin signal, then I've created a bufg using the output of the bufgmux. The same output of the bufgmux goes inside the dcm. Please take a look at the attached file. I planned to use the signal clk0_out obtained as described to drive the rest signal The bufgmux has been used in that way also to let me use a second dcm for the 48MHz clock input, otherwise the tools is giving an error due to the position of the other bufgmux required. The two clocks have input pins: 183 and 185 Claudio clockgen.txt 4 KB |
|
|
|
你不需要BUFGMUX,只需要一个IBUFG。
问题是,如果你没有在时钟爆发到多个BUFG / DCM组件之前自己实例化,那么工具将会出错,因为它们最终会推断出多个输入缓冲区。 如果您想使用时钟向导,您有两种选择: 1)在其中一个时钟向导模块中,使用“单端”作为时钟输入,并将IBUFG的输出带到该模块的输出端口。 然后其他BUFG或DCM将使用来自输入缓冲区的时钟而无需进一步缓冲(即,如果您有另一个时钟向导模块,则需要使用“内部”作为时钟输入,因此它不会添加另一个IBUFG)。 2)将所有时钟向导模块设置为使用“internal”作为时钟源,然后在代码的顶层实例化IBUFG。 使用IBUFG的输出来驱动复位发生器的BUFG以及使用相同时钟输入工作的任何DCM。 您不能做的是直接从输入引脚网络扇出,因为工具将推断出多个输入缓冲区。 - Gabor 以上来自于谷歌翻译 以下为原文 You don't need a BUFGMUX, just an IBUFG. The problem is that if you don't instantiate it yourself before the point where the clock breaks out into multiple BUFG / DCM components, then the tools will error out because they ill end up inferring more than one input buffer. If you want to use the clocking wizard you have two choices: 1) in one of your clock wizard modules, use "Single-ended" as the clock input, and bring the output of the IBUFG to an output port of that module. Then other BUFG or DCMs would use that clock from the input buffer without further buffering (i.e. if you have another clocking wizard module it would need to use "Internal" as the clock input so it doesn't add another IBUFG). 2) Set all clocking wizard modules to use "internal" as the clock source, then instantiate the IBUFG at the top level of your code. Use the output of the IBUFG to drive the BUFG for the reset generator as well as any DCMs that work from the same clock input. What you can't do is have fan-out directly from the input pin net because the tools will infer multiple input buffers. -- Gabor |
|
|
|
谢谢Gabor的回答。
我无法使用时钟向导。 核心生成器说我不支持它。 克劳迪奥 以上来自于谷歌翻译 以下为原文 Thank you Gabor for your answer. I cannot use the clocking wizard. The core generator says that it is not supported by my part. Claudio |
|
|
|
好吧,对于Spartan 3E,“Clocking”下有许多不同的内核,它们基本上形成了与向导相同的功能。
如果您选择“单个DCM_SP”,您将看到类似“CLKIN源”的选项。 在那里你应该选择“内部”从核心生成的源代码中删除IBUFG。 - Gabor 以上来自于谷歌翻译 以下为原文 Well, for Spartan 3E there are a number of different cores under "Clocking" that essentially form the same functions you would get from the wizard. If you select for example "Single DCM_SP" you will see similar options like "CLKIN Source." It's there that you should choose "Internal" to remove the IBUFG from the source code generated by the core. -- Gabor |
|
|
|
谢谢Gabor,
“单个DCM_SP”是我使用的核心,但在您的建议之前,使用外部时钟选项。 现在一切正常。 克劳迪奥 以上来自于谷歌翻译 以下为原文 Thank you Gabor, "Single DCM_SP" has been the core I used, but, before your suggestion, with the external clock option. Now everything works fine. Claudio |
|
|
|
只有小组成员才能发言,加入小组>>
2379 浏览 7 评论
2794 浏览 4 评论
Spartan 3-AN时钟和VHDL让ISE合成时出现错误该怎么办?
2261 浏览 9 评论
3335 浏览 0 评论
如何在RTL或xilinx spartan fpga的约束文件中插入1.56ns延迟缓冲区?
2427 浏览 15 评论
有输入,但是LVDS_25的FPGA内部接收不到数据,为什么?
755浏览 1评论
请问vc707的电源线是如何连接的,我这边可能出现了缺失元件的情况导致无法供电
543浏览 1评论
求一块XILINX开发板KC705,VC707,KC105和KCU1500
364浏览 1评论
1960浏览 0评论
681浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-22 07:36 , Processed in 1.326542 second(s), Total 95, Slave 78 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号