MMCME2_ADV介绍 高级混合模式时钟管理器(7 Series FPGA)
目录
高级混合模式时钟管理器(Advanced Mixed Mode Clock Manager)
MMCME2_ADV
高级混合模式时钟管理器(Advanced Mixed Mode Clock Manager)
Introduction
The MMCME2 is a mixed signal block designed to support frequency synthesis, clock network deskew, and jitter reduction. The clock outputs can each have an individual divide, phase shift and duty cycle based on the same VCO frequency. Additionally, the MMCME2 supports dynamic phase shifting and fractional divides.
MMCME2是一个混合信号模块,旨在支持频率合成,时钟网络偏移校正和抖动降低。 时钟输出可以根据相同的VCO频率分别具有单独的分频,相移和占空比。 此外,MMCME2支持动态相移和小数分频。
Design Entry Method
从上表可见,推荐的使用方法是产生IP核的方式来使用这个设计元件。
当然也可以直接例化原语的方式,但这种方式恐怕菜鸟用不好。(为什么这么说呢?因为这个原语有很多参数,如果通过IP核产生的话,你就只需要选择需要产生的时钟的功能即可,参数值都自动给你计算好了,当然你也可以自己计算,这是老鸟的玩法。如果你使用原语直接实例化的话,那恭喜你,有事干了,恐怕你也干不了。)
端口描述(Port Descriptions)
端口很多,对于端口的描述我分为几个小类来说下,事实上,我们看这篇文章的介绍的时候不妨先看下如何产生这样的一个IP核,见博文:通过Clocking Wizard定制和生成一个IP核(MMCM)(Virtex7)(ISE版),使用Vivado产生一个IP核,过程以及介绍都差不多,这不重要。
通过实实在在产生这样一个IP核的过程中,我们可以了解到IP核产生的GUI界面上的时钟功能,例如对输入的设计,输出的设计,反馈的设计等等功能。通过这样的一个直观的认识可以更加深刻的理解如下端口的意义。
除了这以外,还应该看一下,该IP核的架构知识,可以了解一下,都是有利无害的。LogiCORE IP Clocking Wizard 之 Core Architecture(时钟IP核的核架构介绍)
看了架构的框图,我们就有一个比较直观的画面,时钟输入,时钟输出,可配置原语,反馈等等。
好了,下面正式进入主题,对于端口的描述:
可见上面这些端口都带有CLKFB这个字符串,这代表这时钟反馈,CLKFB后面的IN代表到MMCM的反馈时钟引脚,显然OUT就代表反馈输出引脚,OUTB就代表一个与OUT相位完全相反的反馈输出引脚,CLKFBSTOPPED是一个状态引脚,它表明反馈时钟已经停止了。
上面的这些引脚都是和时钟输入输出有关的,时钟输出的引脚只贴出来了一部分,下面会继续介绍。CLKIN后面加一个SEL构成CLKINSEL,这个幼儿园英语水平的人也应该能猜到这是一个输入时钟选择引脚了吧,如果该引脚状态为HIGH的话,选择主输入时钟(CLKIN1,Primary clock input),否则,状态为LOW,则选择第二时钟输入,也就是辅助时钟输入(CLKIN2,Secondary clock input)。这样的话,CLKIN1和CLKIN2就不需要介绍了,就是主输入时钟引脚和辅助输入时钟引脚,可以参考博文:通过Clocking Wizard定制和生成一个IP核(MMCM)(Virtex7)(ISE版)来查看辅助输入时钟引脚的简单介绍。
最后说这个CLKINSTOPPED,这个引脚也是一个状态引脚,指示输入时钟已停止。
不多介绍这个引脚了,等理解更深刻些后,我会全面阅读并维护博文。
MMCM就是一个时钟管理器,它可以实现时钟的分频,倍频,所以肯定会有一系列的时钟输出了。
CLKOUT代表时钟输出,CLKOUT后面的数字,0到6表明第几个输出,再后面的B呢?代表相位与原输出相反,也就是翻转180°。
这样就把下面的引脚也说完了。
上面这几个引脚都是时钟输出引脚,上面已经说了。
这几个以D开头的引脚就比较恶心了,它是时钟功能(Dynamic Reconfiguration)的首字母D,就是和这个Clocking features有关的一些引脚。
IP和生成页面就有这么一个时钟功能选项:
选了之后,你就要面对这些东西了。
目前还不太懂,就不多说了。
上面的这些端口,我们可以分析一下:
首先是LOCKED,我们先翻译一下人家的描述,在说自己的见解:
来自MMCM的输出,其指示MMCM何时在预定义窗口内实现相位对准以及在预定义PPM范围内的频率匹配。 上电后MMCM自动锁定,无需额外复位。 如果输入时钟停止或违反相位对准(例如,输入时钟相移),则LOCKED将被置为无效。 LOCKED置为无效后,MMCM会自动重新获取锁定。
可见,这个端口是来自MMCM的输出端口,干嘛用的呢?是指示MMCM实现相位对准(Phase alignment)和频率匹配的,其实上面的翻译很清楚了,我就不解释了。
还有一些端口是PS开头的,PS是什么意思呢?就是Phase shift的首字母,
看下面这幅图,是时钟产生向导图:
可见,我选了动态相位偏移之后,就会出现这些以PS开头的端口。
而由这篇博文也知道:通过Clocking Wizard定制和生成一个IP核(MMCM)(Virtex7)(ISE版),动态相移的作用是改变输出时钟之间的相位关系。
这样的话,PSCLK就是相位偏移时钟;
PSDONE是一个输出端口,代表相位偏移结束;
PSEN是相位偏移使能信号;
PSINCDEC,这个名字不太直观吗?非也,如果知道这两个单词,就很直观了,Phase shift increment/decrement control.中的increment/decrement,就是一个增量,一个减量的问题,意思是相移增量/减量控制。
PWRDWN,这个端口是POWERDOWN的缩写,它什么作用呢?我还不是太懂,不多说。
最后一个:RST,看它的描述和翻译:
Asynchronous reset signal. The MMCM will synchronously re-enable itself when this signal is released (i.e., MMCM re-enabled). A reset is required when the input clock conditions change (e.g., frequency).
异步复位信号。 当该信号被释放时,MMCM将同步地重新启用(即,MMCM重新启用)。 当输入时钟条件改变时(例如,频率),需要复位。
这就是一个异步复位端口。
可用参数以及例化模板介绍
数据手册还给出了可用参数的介绍,我就不贴出来了,因为如果使用IP核产生向导进行定制该IP核时,参数一般是不需要自己计算的。
下面给出例化模板:
Verilog Instantiation Template
// MMCME2_ADV: Advanced Mixed Mode Clock Manager
// 7 Series
// Xilinx HDL Libraries Guide, version 14.7
MMCME2_ADV #(
.BANDWIDTH("OPTIMIZED"), // Jitter programming (OPTIMIZED, HIGH, LOW)
.CLKFBOUT_MULT_F(5.0), // Multiply value for all CLKOUT (2.000-64.000).
.CLKFBOUT_PHASE(0.0), // Phase offset in degrees of CLKFB (-360.000-360.000).
// CLKIN_PERIOD: Input clock period in ns to ps resolution (i.e. 33.333 is 30 MHz).
.CLKIN1_PERIOD(0.0),
.CLKIN2_PERIOD(0.0),
// CLKOUT0_DIVIDE - CLKOUT6_DIVIDE: Divide amount for CLKOUT (1-128)
.CLKOUT1_DIVIDE(1),
.CLKOUT2_DIVIDE(1),
.CLKOUT3_DIVIDE(1),
.CLKOUT4_DIVIDE(1),
.CLKOUT5_DIVIDE(1),
.CLKOUT6_DIVIDE(1),
.CLKOUT0_DIVIDE_F(1.0), // Divide amount for CLKOUT0 (1.000-128.000).
// CLKOUT0_DUTY_CYCLE - CLKOUT6_DUTY_CYCLE: Duty cycle for CLKOUT outputs (0.01-0.99).
.CLKOUT0_DUTY_CYCLE(0.5),
.CLKOUT1_DUTY_CYCLE(0.5),
.CLKOUT2_DUTY_CYCLE(0.5),
.CLKOUT3_DUTY_CYCLE(0.5),
.CLKOUT4_DUTY_CYCLE(0.5),
.CLKOUT5_DUTY_CYCLE(0.5),
.CLKOUT6_DUTY_CYCLE(0.5),
// CLKOUT0_PHASE - CLKOUT6_PHASE: Phase offset for CLKOUT outputs (-360.000-360.000).
.CLKOUT0_PHASE(0.0),
.CLKOUT1_PHASE(0.0),
.CLKOUT2_PHASE(0.0),
.CLKOUT3_PHASE(0.0),
.CLKOUT4_PHASE(0.0),
.CLKOUT5_PHASE(0.0),
.CLKOUT6_PHASE(0.0),
.CLKOUT4_CASCADE("FALSE"), // Cascade CLKOUT4 counter with CLKOUT6 (FALSE, TRUE)
.COMPENSATION("ZHOLD"), // ZHOLD, BUF_IN, EXTERNAL, INTERNAL
.DIVCLK_DIVIDE(1), // Master division value (1-106)
// REF_JITTER: Reference input jitter in UI (0.000-0.999).
.REF_JITTER1(0.0),
.REF_JITTER2(0.0),
.STARTUP_WAIT("FALSE"), // Delays DONE until MMCM is locked (FALSE, TRUE)
// Spread Spectrum: Spread Spectrum Attributes
.SS_EN("FALSE"), // Enables spread spectrum (FALSE, TRUE)
.SS_MODE("CENTER_HIGH"), // CENTER_HIGH, CENTER_LOW, DOWN_HIGH, DOWN_LOW
.SS_MOD_PERIOD(10000), // Spread spectrum modulation period (ns) (VALUES)
// USE_FINE_PS: Fine phase shift enable (TRUE/FALSE)
.CLKFBOUT_USE_FINE_PS("FALSE"),
.CLKOUT0_USE_FINE_PS("FALSE"),
.CLKOUT1_USE_FINE_PS("FALSE"),
.CLKOUT2_USE_FINE_PS("FALSE"),
.CLKOUT3_USE_FINE_PS("FALSE"),
.CLKOUT4_USE_FINE_PS("FALSE"),
.CLKOUT5_USE_FINE_PS("FALSE"),
.CLKOUT6_USE_FINE_PS("FALSE")
)
MMCME2_ADV_inst (
// Clock Outputs: 1-bit (each) output: User configurable clock outputs
.CLKOUT0(CLKOUT0), // 1-bit output: CLKOUT0
.CLKOUT0B(CLKOUT0B), // 1-bit output: Inverted CLKOUT0
.CLKOUT1(CLKOUT1), // 1-bit output: CLKOUT1
.CLKOUT1B(CLKOUT1B), // 1-bit output: Inverted CLKOUT1
.CLKOUT2(CLKOUT2), // 1-bit output: CLKOUT2
.CLKOUT2B(CLKOUT2B), // 1-bit output: Inverted CLKOUT2
.CLKOUT3(CLKOUT3), // 1-bit output: CLKOUT3
.CLKOUT3B(CLKOUT3B), // 1-bit output: Inverted CLKOUT3
.CLKOUT4(CLKOUT4), // 1-bit output: CLKOUT4
.CLKOUT5(CLKOUT5), // 1-bit output: CLKOUT5
.CLKOUT6(CLKOUT6), // 1-bit output: CLKOUT6
// DRP Ports: 16-bit (each) output: Dynamic reconfiguration ports
.DO(DO), // 16-bit output: DRP data
.DRDY(DRDY), // 1-bit output: DRP ready
// Dynamic Phase Shift Ports: 1-bit (each) output: Ports used for dynamic phase shifting of the outputs
.PSDONE(PSDONE), // 1-bit output: Phase shift done
// Feedback Clocks: 1-bit (each) output: Clock feedback ports
.CLKFBOUT(CLKFBOUT), // 1-bit output: Feedback clock
.CLKFBOUTB(CLKFBOUTB), // 1-bit output: Inverted CLKFBOUT
// Status Ports: 1-bit (each) output: MMCM status ports
.CLKFBSTOPPED(CLKFBSTOPPED), // 1-bit output: Feedback clock stopped
.CLKINSTOPPED(CLKINSTOPPED), // 1-bit output: Input clock stopped
.LOCKED(LOCKED), // 1-bit output: LOCK
// Clock Inputs: 1-bit (each) input: Clock inputs
.CLKIN1(CLKIN1), // 1-bit input: Primary clock
.CLKIN2(CLKIN2), // 1-bit input: Secondary clock
// Control Ports: 1-bit (each) input: MMCM control ports
.CLKINSEL(CLKINSEL), // 1-bit input: Clock select, High=CLKIN1 Low=CLKIN2
.PWRDWN(PWRDWN), // 1-bit input: Power-down
.RST(RST), // 1-bit input: Reset
// DRP Ports: 7-bit (each) input: Dynamic reconfiguration ports
.DADDR(DADDR), // 7-bit input: DRP address
.DCLK(DCLK), // 1-bit input: DRP clock
.DEN(DEN), // 1-bit input: DRP enable
.DI(DI), // 16-bit input: DRP data
.DWE(DWE), // 1-bit input: DRP write enable
// Dynamic Phase Shift Ports: 1-bit (each) input: Ports used for dynamic phase shifting of the outputs
.PSCLK(PSCLK), // 1-bit input: Phase shift clock
.PSEN(PSEN), // 1-bit input: Phase shift enable
.PSINCDEC(PSINCDEC), // 1-bit input: Phase shift increment/decrement
// Feedback Clocks: 1-bit (each) input: Clock feedback ports
.CLKFBIN(CLKFBIN) // 1-bit input: Feedback clock
);
// End of MMCME2_ADV_inst instantiation
别看到这个例化模板吓死了,这只是一个总的例化模板,和实际使用的还是有差距的,当你用IP核产生向导产生一个你定制的IP核时,例化模板只会出现你选择的一些功能。例如下面一个例化模板:
//----------- Begin Cut here for INSTANTIATION Template ---// INST_TAG
mmcm_clk instance_name
(// Clock in ports
.CLK_IN1(CLK_IN1), // IN
// Clock out ports
.CLK_OUT1(CLK_OUT1), // OUT
.CLK_OUT2(CLK_OUT2), // OUT
// Status and control signals
.RESET(RESET),// IN
.LOCKED(LOCKED)); // OUT
// INST_TAG_END ------ End INSTANTIATION Template ---------
所以要根据实际情况来哈。
略表诚意,贴上数据手册地址:http://www.xilinx.com/support/documentation/sw_manuals/xilinx14_7/7series_hdl.pdf
上一篇: 学习ZYNQ之FPGA7(基础语法2)
下一篇: ARM嵌入式实验ARM微处理器指令系统