Lattice FPGA 开发工具Diamond使用流程总结——IP核使用、原语调用

由于前面文章已经讲解了ip的使用方式,此文讲解利用PLL核产生相位可调的时钟信号,以及IO delay原语,这些在高速接口中经常用到。注意此文针对的是ECP5系列芯片。

一、利用PLL核产生相位可调的时钟信号

1)配置PLL核。

打开pll核配置界面如下所示,使能需要的时钟信号,设置输入时钟频率以及相应的输出时钟频率。(其中要注意CLKFB选项,待动态调整相位的时钟不能作为此选项的配置,这里我们选择CLKOS作为待调整时钟,此时CLKFB选项可选为CLKOP),点击OptionalPorts,进入动态相位调整使能选项。

如下,勾选动态相位端口,左侧显示了PLL模块端口示意图。

2)参数配置与例化

配置完pll后,在Hierarchy 窗口找到创建的PLL核,右击>Goto sourace definition ,打开pll的HDL文件,进行顶层例化和参数配置。

创建的pll核HDL源码如下,源码包括了pll的端口和相关参数的定义,根据需要配置相关参数。在顶层中例化pll核,并按时序要求生成相关信号,综合后配置引脚,生成bit流即可。

3)主要信号\参数说明

端口信号说明:

PHASESEL[1:0]信号为片选信号,决定使能哪一路输出时钟做动态相位调整。

PHASEDIR 决定了相位要调整成“超前”还是”滞后”。

PHASESTEP和PHASELOADREG分别是两种工作模式下触发信号,下降沿有效。

如下,设置PHASESEL不同的参数值,选择某一路时钟做相位调整(一个时间点只能调整一路时钟)。

 如下,设置PHASEDIR不同参数值,选择相位调整的方向。

 如下,如果选用PHASESTEP信号(下降沿触发)来触发相位调整,则遵循下面时序。

此种触发下,每次相移的步长(单位:度)由下面公式计算:

(CLKO<n>_FPHASE/(8*CLKO<n>_DIV)*360 

n,代表待调整相位的时钟的下标,如CLKOP,这里n就是P

公式中的参数可在创建的PLL核的hdl文件中找到,CLKO<n>_DIV为软件自动计算的固定值,参数CLKO<n>_FPHASE可以根据自己需求调整

如下,如果选用PHASELOADREG信号(下降沿触发)来触发相位调整,则遵循下面时序。

此种触发下,每次相移的步长(单位:度)由下面公式计算:

[(CLKO<n>_CPHASE – CLKO<n>_DIV)/( CLKO<n>_DIV + 1)] * 360

n,代表待调整相位的时钟的下标。如CLKOP,这里n就是P

公式中的参数可在创建的PLL核的hdl文件中找到,CLKO<n>_DIV为软件自动计算的固定值,参数CLKO<n>_CPHASE可以根据自己需求调整

二、IO delay原语

利用DELAYF原语可以将输入信号延时后输出,延时的最小单位为25ps,最大延时为127*25ps。

其模块示意图如下

端口说明:

A           输入信号

LOADN      复位信号,对输入信号做动态延时调整时,此信号必须设为0

MOVE       延时动态调整触发信号,下降沿有效

DIRECTION   在MOVE下降沿被采集;置0时,增加对输入信号的延时,置1时减少对输入信号的延时

CFLAG        延时溢出标志,表示不能再增加延时了

原语:

module DELAYF (

input A, LOADN, MOVE, DIRECTION,

output Z, CFLAG );

parameter  DEL_MODE = "USER_DEFINED";

parameter  DEL_VALUE = 0;  

endmodule

DEL_MODE: "ECLK_ALIGNED", "ECLK_CENTERED",
"ECLK_CENTERED_MIPI", "ECLK_CENTERED_SLVS", "SCLK_ALIGNED",
"SCLK_CENTERED", "SCLK_ZEROHOLD", "USER_DEFINED" (default)

DEL_VALUE :0-127

猜你喜欢

转载自blog.csdn.net/weixin_41895751/article/details/124737303
今日推荐