发 帖  
原厂入驻New
申请华秋企业认证 多层板首单免费打样!
30s提交资料,10分钟通过审核(免费赔付+顺丰包邮)>>立即报名
modelsim仿真Altera的pll,希望得到9Mhz,但结果是1Mhz,不知道问题出在哪
420 modelsim
分享
本帖最后由 hello_shang 于 2019-12-7 14:47 编辑

输入50Mhz,希望通过pll得到9M的时钟,但仿真结果是1Mhz,不知道问题出在哪。


生成pll 仿真程序 波形图
0
已退回1积分
2019-12-7 12:09:56   评论 分享淘帖 邀请回答
3个回答
01. FPGA具体型号,不同型号的PLL支持频率上下限不同。
02. 我这边用EP2C8Q208C8N(飓风II系列)测试,PLL有输出范围:9.375MHz~640MHz,没有办法输出1MHz,我怀疑你遇到的就是这个情况。
03. 验证:
        a.  勾选“Enter Output Clock Frequency”;
        b.  右侧输入1MHz,理论上讲应该有红色警告,并显示最低可输出频率;
        c.  右侧输入10000MHz,理论上讲应该有红色警告,并显示最高可输出频率;
        
04. 常用低频输出方式:自己编写分频代码。
    参考示例:
   
*******************************************************
//clk_in  = 100MHz  ( 10ns )
//rst_n 低电平有效(常态为高电平)

parameter CLK_1M  = 32'd5_000_000   ;//1MHz ( 1000ns )

reg   clk_1m                    ;

always@(posedge clk_in or negedge rst_n)
begin
  if(!rst_n)
  begin
    clk_cnt <=  'h0             ;
    clk_1m  <=  'b0             ;
  end
  else  if(clk_cnt ==  CLK_1M - 1'b1)
  begin   
    clk_cnt <=  'h0             ;
    clk_1m  <=  ~clk_1m         ;
  end
  else
  begin
    clk_cnt <=  clk_cnt + 1'b1  ;
    clk_1m  <=   clk_1m         ;   
  end
end
*******************************************************
2019-12-7 13:45:41 3 评论

举报

3 条评论
  • 2019-12-7 13:48

    参数写错了:
    parameter CLK_1M  = 32'd50   ;//1MHz ( 1000ns )

  • 2019-12-7 13:54

    *******************************************************
    //设置锁相环PLL输出90MHz
    //clk_in  = 90MHz  10分频就是9MHz
    //rst_n 低电平有效(常态为高电平)

    parameter CLK_9M  = 32'd5       ;//9MHz ( 10分频 )

    reg   clk_9m                    ;

    always@(posedge clk_in or negedge rst_n)
    begin
      if(!rst_n)
      begin
        clk_cnt &lt;=  'h0             ;
        clk_9m  &lt;=  'b0             ;
      end
      else  if(clk_cnt ==  CLK_9M - 1'b1)
      begin   
        clk_cnt &lt;=  'h0             ;
        clk_9m  &lt;=  ~clk_9m         ;
      end
      else
      begin
        clk_cnt &lt;=  clk_cnt + 1'b1  ;
        clk_9m  &lt;=   clk_9m         ;   
      end
    end
    *******************************************************

    hello_shang 回复 卿小小_9e6: 2019-12-7 14:50

    非常感谢,也是一种方法

*******************************************************
//设置锁相环PLL输出90MHz
//clk_in  = 90MHz  10分频就是9MHz
//rst_n 低电平有效(常态为高电平)

parameter CLK_9M  = 32'd5       ;//9MHz ( 10分频 )

reg   clk_9m                    ;

always@(posedge clk_in or negedge rst_n)
begin
  if(!rst_n)
  begin
    clk_cnt <=  'h0             ;
    clk_9m  <=  'b0             ;
  end
  else  if(clk_cnt ==  CLK_9M - 1'b1)
  begin   
    clk_cnt <=  'h0             ;
    clk_9m  <=  ~clk_9m         ;
  end
  else
  begin
    clk_cnt <=  clk_cnt + 1'b1  ;
    clk_9m  <=   clk_9m         ;   
  end
end
*******************************************************
2019-12-7 13:55:19 3 评论

举报

3 条评论
  • 2019-12-7 17:23

    原来的pll在开发板上能产生9M,pll本身应该没有问题。可能是仿真哪里出了问题,结果才是1Mhz的

    卿小小_9e6 回复 hello_shang: 2019-12-9 09:20

    我尝试在CycloneIV上设置PLL为9MHz,设置OK。
    (但是仍对PLL的参数持怀疑态度,因为我设置成1ns=1GHz竟然没有报错。我最快要明天才能拿到硬件做实际测试,测试后我会附图回复)
    你的仿真代码和PLL设置没有问题,建议有条件的话使用示波器实际观察PLL的输出。

    hello_shang 回复 卿小小_9e6: 2019-12-9 12:29

    问题找到了,是仿真的问题,时间精度不匹配,原来的是1ns/1ns,改成1ns/1ps就正常了。有点郁闷吧。。

仿真时间精度问题,将精度设置成1ns/1ps,仿真就正常了。
2019-12-9 12:38:55 评论

举报

撰写答案

你正在撰写答案

如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。

高级模式
您需要登录后才可以回帖 登录 | 注册

我要提问
关闭

站长推荐 上一条 /5 下一条

快速回复 返回顶部 返回列表