微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > 求助,altera fpga对内部信号直接用内部PLL倍频,该怎么做

求助,altera fpga对内部信号直接用内部PLL倍频,该怎么做

时间:10-02 整理:3721RD 点击:

代码如下,quartus综合报错说,第19行的pll ip的输入,只能是片外管脚,或者另一个pll的输出管脚,而不能直接连一个寄存器clk_recover;
请问这种情况有没有什么办法解决,请各位大侠支招?
要求:
1)不能把clk_recover接出去,再接回来,因为片外管脚连接不方便动;
2)valid信号只能由内部时序逻辑生成,因为是一个复杂的算法;

  1. module fpga_top (
  2.     input wire clki,
  3.     output wire clko
  4. );

  5. // 时序逻辑生成valid
  6. reg valid;
  7. ...........

  8. // 由valid生成含抖动的恢复时钟clk_recover
  9. reg clk_recover;
  10. always @(posedge clki)
  11.     if (valid)
  12.         clk_recover <= ~clk_recover;
  13.     else
  14.         clk_recover <= clk_recover;

  15. // 用pll IP对clk_recover进行锁定和倍频,并输出
  16. pll pll_inst (
  17.     .inclk0 (clk_recover),
  18.     .c0      (clko)
  19. );
  20. endmodule

复制代码

altera的PLL的输入时钟,需要从全局时钟管脚接入,否则会报错

有没有办法把内部寄存器,连到全局时钟上

让这个信号通过一个clkctrl再接pll试下

试了一下,通过一个clkctrl再接pll,还是报同样的错误;

clk_recover不要定义为reg型试试
另外,先把clk_recover给一个中间变量,再输入到PLL中
而且,似乎clk_recover要由外部时钟输入给他才行

你这个程序有问题哈。

你是做 两个clk切换   
  你可以用pll先产生着两个clk ,相位设置好 一个是0相位,一个180度相位   然后在输出应用时 再切换

What is u FPGA Device?

你这个程序,pll是quartus自动生成的IP,在设定的时候,需要定义输入时钟的频率吧,FPGA板子都有自己的内定原始时钟频率的,然后再分频,你这个输入的时钟是变化的,肯定不行的。

看了一下你的这个设计,感觉完全没必要用pll去做clk_recover的分频。你先用pll分频好,再用输出的register根据valid信号捕获不就行了么。如果考虑到亚稳态,用两级同步器就可以了。

楼上正解

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top