前言集成开发环境中提供的FPGA功能模块,即IP核的丰富程度,也体现了开发环境的成熟度。提供的IP核越多,则用户能更多的直接使用IP核,提高效率,减少开发调试时间。这一篇即体验PDS中自带的IP核,以PLL为例。 过程创建工程创建空的工程pll IP核配置Tools->IP Compiler
看到又如下IP
选择PLL下的PLL(1.5),设置实例名Instance Name,点击Customize配置参数
Basic Configuration中配置输入时钟为外部时钟源的50MHz,勾选Enable Port pll_rst 然后勾选Enable clkoutx就可以配置对应参数,一共支持5个通道
勾选show Internal Settings ofPLL可以看到配置参数
生成IP
提示如下,关闭窗口即可
关闭IP窗口
例化方法如下
Pll代码如下
- module ip_pll(
- input sys_clk , //系统时钟
- input sys_rst_n , //系统复位,低电平有效
- //输出时钟
- output clk_100m , //100Mhz时钟频率
- output clk_100m_180deg, //100Mhz时钟频率,相位偏移180度
- output clk_50m , //50Mhz时钟频率
- output clk_25m , //25Mhz时钟频率
- output clk_25m_75 , //25Mhz时钟频率,占空比75.0%
- output locked
- );
-
- //锁相环
- pll_clk u_pll_clk (
- .pll_rst (~sys_rst_n ), // input
- .clkin1 (sys_clk ), // input
- .pll_lock (locked ), // output
- .clkout0 (clk_100m ), // output
- .clkout1 (clk_100m_180deg), // output
- .clkout2 (clk_50m ), // output
- .clkout3 (clk_25m ), // output
- .clkout4 (clk_25m_75 ) // output
- );
-
- Endmodule
复制代码
例化新建ip_pll.v 文件作为顶层文件,例化pll
- module ip_pll(
- input sys_clk , //系统时钟
- input sys_rst_n , //系统复位,低电平有效
- //输出时钟
- output clk_2m , //2Mhz时钟频率
- output locked
- );
-
- //锁相环
- pll_clk u_pll_clk (
- .pll_rst (~sys_rst_n ), // input
- .clkin1 (sys_clk ), // input
- .pll_lock (locked ), // output
- .clkout0 (clk_2m ) // output
- );
-
- endmodule
复制代码
约束
测试生成bit文件,下载 可以看到LED0和LED2亮,由于频率太快为2M所以LED0看起来是常量。 我们希望可以动态修改pll的输出占空比 双击u_pll_clk进行修改
选择高级模式
配置参数
使能Dynamic Duty,配置ODIV0就可以配置输出频率
例化时配置占空比.dyn_duty0 (200)
- module ip_pll(
- input sys_clk , //系统时钟
- input sys_rst_n , //系统复位,低电平有效
- //输出时钟
- output clk_2m , //2Mhz时钟频率
- output locked
- );
-
- //锁相环
- pll_clk u_pll_clk (
- .pll_rst (~sys_rst_n ), // input
- .clkin1 (sys_clk ), // input
- .pll_lock (locked ), // output
- .clkout0 (clk_2m ), // output
- .dyn_duty0 (200),
- .rstodiv (0)
- );
-
- endmodule
复制代码
可以看到LED0的亮度改变。
这样就可以动态修改占空比实现呼吸灯效果了。 总结开发环境提供的IP核配置非常简单,操作流程也很自然清晰,IDE整体使用体验非常不错。
|