求助,altera fpga对内部信号直接用内部PLL倍频,该怎么做
时间:10-02
整理:3721RD
点击:
代码如下,quartus综合报错说,第19行的pll ip的输入,只能是片外管脚,或者另一个pll的输出管脚,而不能直接连一个寄存器clk_recover;
请问这种情况有没有什么办法解决,请各位大侠支招?
要求:
1)不能把clk_recover接出去,再接回来,因为片外管脚连接不方便动;
2)valid信号只能由内部时序逻辑生成,因为是一个复杂的算法;
- module fpga_top (
- input wire clki,
- output wire clko
- );
- // 时序逻辑生成valid
- reg valid;
- ...........
- // 由valid生成含抖动的恢复时钟clk_recover
- reg clk_recover;
- always @(posedge clki)
- if (valid)
- clk_recover <= ~clk_recover;
- else
- clk_recover <= clk_recover;
- // 用pll IP对clk_recover进行锁定和倍频,并输出
- pll pll_inst (
- .inclk0 (clk_recover),
- .c0 (clko)
- );
- 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信号捕获不就行了么。如果考虑到亚稳态,用两级同步器就可以了。
楼上正解
