Spartan 3E中的BUFGMUX问题
研究了一下,好像BUFGCTRL这个东西有一个Ignore0,Ignore1设置,貌似能解决这个问题。但是Spartan 3E有BUFGCTRL吗?如果没有,BUFGMUX有没有类似的设置或其它解决办法!
BUFG, BUFGCE, BUFGMUX三个实际上使用的都是同一个结果,前两者是后者的某参数固定版(将另一输入置0,或CE置0得到),按理说切换使用应该没问题。
你能确定在时钟失效后,你的切换使能CE是有效的吗?就是说CE是直接从芯片外输入,没有经过寄存器或其它控制的?我怀疑时钟坏掉后,CE也被锁死不能工作所致。
我大概记得bufgce的ce只有在时钟是低的时候有效,所以如果时钟一直是高,但是CE变了,是不会切换时钟了。
BUFGMUX没有CE控制脚啊,我怀疑是它要做无缝切换需要某种条件,然而我的时钟在有的时候会出一些杂乱的信号出来,这些信号正好把它搞死了。不知道你应用的时候是不是两路时钟都始终有?
BUFGMUX_inst_2 : BUFGMUX
port map (
O => srp_clk_int, -- Clock MUX output
I0 => '0', -- Clock0 input
I1 => CLKFX, -- Clock1 input
S => sysclklocked -- Clock select input
);
S 就相当于CE,作为I0,I1选择输入的,我指的就是这个S控制源,你能保证没受到已坏掉的CLOCK影响?是直接从PIN外引入,或者是不是寄存器输出,与该输入输入CLOCK都没关系?
直接引脚引入的,但是这两个时钟源是由另外的两个IC产生的,它们有可能输出正常的时钟,有可能输出低电平,高电平或是一些杂乱的信号,现在就是两路输入时钟都有时钟的时候都能正常切换,当有一路没有时钟的时候,有时候也能切换,有时候就不能切换!我是直接将BUFGMUX输出引到一个TP脚测试的。关键是看手册上有这么一段搞不清楚:
The BUFGMUX not only multiplexes two clock signals but does it in a way that eliminates
any timing hazards. This allows switching from one clock source to a completely
asynchronous clock source without glitches. The element guarantees that when the select
line S is toggled to choose the other clock source, the output remains in the inactive state
until the next active clock edge on either input. The output can be either High or Low when
disabled (when toggling between clock inputs). The default is Low. A cross-coupled
register pair ensures the BUFGMUX output does not inadvertently generate a clock edge.
不知道是等另一路时钟沿到来就行,还是两路的时钟沿都必须到来,才有输出。
应该是一路就可了,要么你做个试验看看,把一路一直拉低不输出时钟,另路正常,然后再切换下看看。
同时,要是这个问题真解决不了的话,能不能想法子能保证芯片输出时钟一直为有效?有没有这样的配置?
我也想保持两路时钟始终正常,但是那需要驱动调整,而且还不一定能够调出来,在另一份资料上看到了更多的资料
When the S input changes, the BUFGMUX does not drive the new input to the output until
the previous clock input is Low and the new clock input has a High-to-Low transition. By
not toggling on the first Low-to-High transition of the input, the output clock pulse is
never shorter than the shortest input clock pulse.
有可能是我没信号那一路保持在了高电平造成的问题!
你查资料还挺能查到的,再来个招试试,你把两个输入信号都进DCM,然后出来的信号再进BUFGMUX,有没有效果我不敢保证。感觉DCM输入失锁后说不定会将时钟拉到低处,或者对于急速变化的输入时钟,在偶尔毛刺或啥的情况下,能挺过来。对DCM的RST复位端,如何进行复位也要考虑下,这要看下DCM失效后能不能不需要手动复位来自动恢复正常。
DCM不行啊,已经用了,现在基本确定就是一路时钟保持在高电平出的问题,如果这时候我用镊子把它拉低一下,就可以切过去了,我的DCM设计都增加了手动复位接口,即在异常的时候由驱动给我一个信号进行复位,主要是为了保险,在另一个设计中,我发现部分质量差的晶振输入到DCM的时钟会把DCM搞死,虽然换晶振能解决这个问题,但还是预防一下万一吧!
可以增加看门狗之类的东西,如果一段时间无正常时钟就拉低不?比如由软件检测,一段时间没法反应就将计数器减至0,通过个BUFGCE将输入时钟拉低, 两个经过BUFGCE的时钟再经过BUFGMUX选择。
因为这是全局时钟资源,应该是可以串接的,
呵呵,谢谢你的热心回复!以后多交流哈!你说的是一个办法,但是在我这个设计上全局时钟比较多,不适用。现在我们让驱动在没有输出的时候Power Down前端的两颗IC,解决了问题!
