正点原子学习小组
直播中

jf_1137202360

8年用户 1359经验值
擅长:嵌入式技术
私信 关注
[经验]

【正点原子DFPGL22G开发板体验】内置IP核使用体验-PLL之呼吸灯

前言
集成开发环境中提供的FPGA功能模块,IP核的丰富程度,也体现了开发环境的成熟度。提供的IP核越多,则用户能更多的直接使用IP,提高效率,减少开发调试时间。这一篇即体验PDS中自带的IP,PLL为例。
过程创建工程
创建空的工程pll
IP核配置
Tools->IP Compiler
图片1.png
看到又如下IP
图片2.png
选择PLL下的PLL(1.5),设置实例名Instance Name,点击Customize配置参数
图片3.png
图片4.png
图片5.png
Basic Configuration中配置输入时钟为外部时钟源的50MHz,勾选Enable Port pll_rst
然后勾选Enable clkoutx就可以配置对应参数,一共支持5个通道
图片6.png
勾选show Internal Settings ofPLL可以看到配置参数
图片7.png
生成IP
图片8.png
图片9.png
提示如下,关闭窗口即可
图片10.png
关闭IP窗口
图片11.png
例化方法如下
图片12.png
Pll代码如下
图片13.png
  1. module ip_pll(

  2.     input     sys_clk        ,   //系统时钟

  3.     input     sys_rst_n      ,   //系统复位,低电平有效

  4.     //输出时钟

  5.     output    clk_100m       ,   //100Mhz时钟频率

  6.     output    clk_100m_180deg,   //100Mhz时钟频率,相位偏移180度

  7.     output    clk_50m        ,   //50Mhz时钟频率

  8.     output    clk_25m        ,   //25Mhz时钟频率

  9.     output    clk_25m_75     ,   //25Mhz时钟频率,占空比75.0%

  10.     output    locked

  11.     );



  12. //锁相环

  13. pll_clk u_pll_clk (

  14.     .pll_rst     (~sys_rst_n     ),      // input   

  15.     .clkin1      (sys_clk        ),      // input

  16.     .pll_lock    (locked         ),      // output

  17.     .clkout0     (clk_100m       ),      // output

  18.     .clkout1     (clk_100m_180deg),      // output

  19.     .clkout2     (clk_50m        ),      // output

  20.     .clkout3     (clk_25m        ),      // output

  21.     .clkout4     (clk_25m_75     )       // output

  22. );



  23. Endmodule

例化
新建ip_pll.v 文件作为顶层文件,例化pll
  1. module ip_pll(

  2. input sys_clk , //系统时钟

  3. input sys_rst_n , //系统复位,低电平有效

  4. //输出时钟

  5. output clk_2m , //2Mhz时钟频率

  6. output locked

  7. );



  8. //锁相环

  9. pll_clk u_pll_clk (

  10. .pll_rst (~sys_rst_n ), // input

  11. .clkin1 (sys_clk ), // input

  12. .pll_lock (locked ), // output

  13. .clkout0 (clk_2m ) // output

  14. );



  15. endmodule

约束
图片14.png
测试
生成bit文件,下载
可以看到LED0LED2亮,由于频率太快为2M所以LED0看起来是常量。
我们希望可以动态修改pll的输出占空比
双击u_pll_clk进行修改
图片15.png
选择高级模式
图片16.png
配置参数
图片17.png
使能Dynamic Duty,配置ODIV0就可以配置输出频率
图片18.png
例化时配置占空比.dyn_duty0 (200)
  1. module ip_pll(

  2. input sys_clk , //系统时钟

  3. input sys_rst_n , //系统复位,低电平有效

  4. //输出时钟

  5. output clk_2m , //2Mhz时钟频率

  6. output locked

  7. );



  8. //锁相环

  9. pll_clk u_pll_clk (

  10. .pll_rst (~sys_rst_n ), // input

  11. .clkin1 (sys_clk ), // input

  12. .pll_lock (locked ), // output

  13. .clkout0 (clk_2m ), // output

  14. .dyn_duty0 (200),

  15. .rstodiv (0)

  16. );



  17. endmodule

可以看到LED0的亮度改变。
图片19.png
这样就可以动态修改占空比实现呼吸灯效果了。
总结
开发环境提供的IP核配置非常简单,操作流程也很自然清晰,IDE整体使用体验非常不错。

更多回帖

发帖
×
20
完善资料,
赚取积分