FPGA内DCM全局时钟的使用详解

合集下载

FPGA分频与倍频的简单总结(涉及自己设计,调用时钟IP核,调用MMCM原语模块)

FPGA分频与倍频的简单总结(涉及自己设计,调用时钟IP核,调用MMCM原语模块)

FPGA分频与倍频的简单总结(涉及⾃⼰设计,调⽤时钟IP核,调⽤MMCM原语模块)原理介绍1、分频FPGA设计中时钟分频是重要的基础知识,对于分频通常是利⽤计数器来实现想要的时钟频率,由此可知分频后的频率周期更⼤。

⼀般⽽⾔实现偶数系数的分频在程序设计上较为容易,⽽奇数分频则相对复杂⼀些,⼩数分频则更难⼀些。

1)偶分频系数=时钟输⼊频率/时钟输出频率=50MHz/5MHz=10,则计数器在输⼊时钟的上升沿或者下降沿从0~(10-1)计数,⽽输出时钟在计数到4和9时翻转。

2)奇分频系数=50MHz/10MHz=5,则两个计数器分别在输⼊时钟的上升沿和下降沿从0~ (5-1)计数,⽽相应的上升沿和下降沿触发的输出时钟在计数到1和4时翻转,最后将两个输出时钟进⾏或运算从⽽得到占空⽐为50%的5分频输出时钟。

下图所⽰为50MHz输⼊时钟进⾏10分频和5分频的仿真波形2、倍频两种思路:PLL(锁相环)或者利⽤门延时来搭建注意:此仿真是利⽤FPGA内部电路延迟来实现的倍频需要在后仿真下才能看到波形,在⾏为仿真下⽆法得到输出波形。

⼀、时钟IP的分频倍频相关参数说明输⼊时钟:clk_in1(125MHz)输出时钟:clk_out1(50MHz),clk_out2(74.25MHz)则VCO Freq=1262.5MHz=clk_in1*CLKFBOUT_MULT_F/DIVCLK_DIVIDE=125*50.5/5clk_out1(50MHz)=VCO_Freq/Divide=1265.5/25.250clk_out2(74.25MHz)=VCO_Freq/Divide=1265.5/17⼆、MMCME4_ADVMMCME4是⼀种混合信号块,⽤于⽀持频率合成、时钟⽹络设计和减少抖动。

基于相同的VCO频率,时钟输出可以有单独的分频、相移和占空⽐。

此外,MMCME4还⽀持动态移相和分数除法(1)Verilog 初始化模板MMCME4_ADV #(.BANDWIDTH("OPTIMIZED"), // Jitter programming.CLKFBOUT_MULT_F(5.0), // Multiply value for all CLKOUT.CLKFBOUT_PHASE(0.0), // Phase offset in degrees of CLKFB.CLKFBOUT_USE_FINE_PS("FALSE"), // Fine phase shift enable (TRUE/FALSE).CLKIN1_PERIOD(0.0), // Input clock period in ns to ps resolution (i.e. 33.333 is 30 MHz)..CLKIN2_PERIOD(0.0), // Input clock period in ns to ps resolution (i.e. 33.333 is 30 MHz)..CLKOUT0_DIVIDE_F(1.0), // Divide amount for CLKOUT0.CLKOUT0_DUTY_CYCLE(0.5), // Duty cycle for CLKOUT0.CLKOUT0_PHASE(0.0), // Phase offset for CLKOUT0.CLKOUT0_USE_FINE_PS("FALSE"), // Fine phase shift enable (TRUE/FALSE).CLKOUT1_DIVIDE(1), // Divide amount for CLKOUT (1-128).CLKOUT1_DUTY_CYCLE(0.5), // Duty cycle for CLKOUT outputs (0.001-0.999)..CLKOUT1_PHASE(0.0), // Phase offset for CLKOUT outputs (-360.000-360.000)..CLKOUT1_USE_FINE_PS("FALSE"), // Fine phase shift enable (TRUE/FALSE).CLKOUT2_DIVIDE(1), // Divide amount for CLKOUT (1-128).CLKOUT2_DUTY_CYCLE(0.5), // Duty cycle for CLKOUT outputs (0.001-0.999)..CLKOUT2_PHASE(0.0), // Phase offset for CLKOUT outputs (-360.000-360.000)..CLKOUT2_USE_FINE_PS("FALSE"), // Fine phase shift enable (TRUE/FALSE).CLKOUT3_DIVIDE(1), // Divide amount for CLKOUT (1-128).CLKOUT3_DUTY_CYCLE(0.5), // Duty cycle for CLKOUT outputs (0.001-0.999)..CLKOUT3_PHASE(0.0), // Phase offset for CLKOUT outputs (-360.000-360.000)..CLKOUT3_USE_FINE_PS("FALSE"), // Fine phase shift enable (TRUE/FALSE).CLKOUT4_CASCADE("FALSE"), // Divide amount for CLKOUT (1-128).CLKOUT4_DIVIDE(1), // Divide amount for CLKOUT (1-128).CLKOUT4_DUTY_CYCLE(0.5), // Duty cycle for CLKOUT outputs (0.001-0.999)..CLKOUT4_PHASE(0.0), // Phase offset for CLKOUT outputs (-360.000-360.000)..CLKOUT4_USE_FINE_PS("FALSE"), // Fine phase shift enable (TRUE/FALSE).CLKOUT5_DIVIDE(1), // Divide amount for CLKOUT (1-128).CLKOUT5_DUTY_CYCLE(0.5), // Duty cycle for CLKOUT outputs (0.001-0.999)..CLKOUT5_PHASE(0.0), // Phase offset for CLKOUT outputs (-360.000-360.000)..CLKOUT5_USE_FINE_PS("FALSE"), // Fine phase shift enable (TRUE/FALSE).CLKOUT6_DIVIDE(1), // Divide amount for CLKOUT (1-128).CLKOUT6_DUTY_CYCLE(0.5), // Duty cycle for CLKOUT outputs (0.001-0.999)..CLKOUT6_PHASE(0.0), // Phase offset for CLKOUT outputs (-360.000-360.000)..CLKOUT6_USE_FINE_PS("FALSE"), // Fine phase shift enable (TRUE/FALSE).COMPENSATION("AUTO"), // Clock input compensation.DIVCLK_DIVIDE(1), // Master division value.IS_CLKFBIN_INVERTED(1'b0), // Optional inversion for CLKFBIN.IS_CLKIN1_INVERTED(1'b0), // Optional inversion for CLKIN1.IS_CLKIN2_INVERTED(1'b0), // Optional inversion for CLKIN2.IS_CLKINSEL_INVERTED(1'b0), // Optional inversion for CLKINSEL.IS_PSEN_INVERTED(1'b0), // Optional inversion for PSEN.IS_PSINCDEC_INVERTED(1'b0), // Optional inversion for PSINCDEC.IS_PWRDWN_INVERTED(1'b0), // Optional inversion for PWRDWN.IS_RST_INVERTED(1'b0), // Optional inversion for RST.REF_JITTER1(0.0), // Reference input jitter in UI (0.000-0.999)..REF_JITTER2(0.0), // Reference input jitter in UI (0.000-0.999)..SS_EN("FALSE"), // Enables spread spectrum.SS_MODE("CENTER_HIGH"), // Spread spectrum frequency deviation and the spread type .SS_MOD_PERIOD(10000), // Spread spectrum modulation period (ns).STARTUP_WAIT("FALSE") // Delays DONE until MMCM is locked)MMCME4_ADV_inst (.CDDCDONE(CDDCDONE), // 1-bit output: Clock dynamic divide done.CLKFBOUT(CLKFBOUT), // 1-bit output: Feedback clock.CLKFBOUTB(CLKFBOUTB), // 1-bit output: Inverted CLKFBOUT.CLKFBSTOPPED(CLKFBSTOPPED), // 1-bit output: Feedback clock stopped.CLKINSTOPPED(CLKINSTOPPED), // 1-bit output: Input clock stopped.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.DO(DO), // 16-bit output: DRP data output.DRDY(DRDY), // 1-bit output: DRP ready.LOCKED(LOCKED), // 1-bit output: LOCK.PSDONE(PSDONE), // 1-bit output: Phase shift done.CDDCREQ(CDDCREQ), // 1-bit input: Request to dynamic divide clock.CLKFBIN(CLKFBIN), // 1-bit input: Feedback clock.CLKIN1(CLKIN1), // 1-bit input: Primary clock.CLKIN2(CLKIN2), // 1-bit input: Secondary clock.CLKINSEL(CLKINSEL), // 1-bit input: Clock select, High=CLKIN1 Low=CLKIN2.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 input.DWE(DWE), // 1-bit input: DRP write enable.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.PWRDWN(PWRDWN), // 1-bit input: Power-down.RST(RST) // 1-bit input: Reset);(2)本实验仿真所⽤参数配置说明及部分端⼝调⽤1、参数配置说明本实验通过输⼊时钟CLKIN1(150MHz),实现输出反馈时钟CLKFBOUT(150MHz)、输出时钟CLKOUT0(74.25MHz)、输出时钟CLKOUT1(74.25MHz)、输出时钟CLKOUT2(59.4MHz)、输出时钟CLKOUT3(49.5MHz)。

Xilinx-FPGA配置的一些细节

Xilinx-FPGA配置的一些细节

Xilinx-FPGA配置的一些细节Xilinx FPGA配置的一些细节2010年07月03日星期六 14:260 参考资料(1) Xilinx: Development System Reference Guide. dev.pdf, v10.1在Xilinx的doc目录下有。

(2) Xilinx: Virtex FPGA Series Configuration and Readback. XAPP138 (v2.8) March 11, 2005在Xilinx网站上有,链接/bvdocs/appnotes/xap p138.pdf(3)Xilinx: Using a Microprocessor to Configure Xilinx FPGAs via Slave Serial or SelectMAP Mode.XAPP502 (v1.5) December 3, 2007在Xilinx网站上有,链接/bvdocs/appnotes/xap p502.pdf注:此外xapp139和xapp151也是和配置相关的。

(4)Xilinx: Virtex-4 Configuration Guide. UG071 (v1.5) January 12, 2007(5) Tell me about the .BIT file format.链接:/FAQ_Pages/0026_Tell_me_about_bit_files.htm1 Xilinx配置过程主要讲一下Startup Sequence。

Startup Sequence由8个状态组成.除了7是固定的之外,其它几个的顺序是用户可设置的,而且Wait for DCM和DCI是可选的。

其中默认顺序如下:这些在ISE生成bit文件时通过属性页设定。

这几个状态的具体含义如下:Release_DONE : DONE信号变高GWE : 使能CLB和IOB,FPGA的RAMs和FFs可以改变状态GTS : 激活用户IO,之前都是高阻。

Spartan6时钟管理模块的介绍与使用

Spartan6时钟管理模块的介绍与使用

Spartan-6时钟管理模块的介绍与使用同步时序电路设计中最关键的是时钟设计,随着电路规模与速度的提高,对时钟的周期、占空比、延时和抖动等方面的要求也越来越高。

为了顺应这需求,Spartan-6系统器件在原有的DCM模块基础引入了模拟PLL模块构成了功能强大、控制灵活的时钟管理模块(CMT)。

每个CMT模块包含两个DCM模块和一个PLL模块。

Spartan-6系统器件有多至六个CMT模块。

一、器件组成与特性1.DCM模块主要有以下功能模块组成:a.DLL模块, 主要由延时线和控制逻辑组成。

b.数字频率合成器,为系统产生丰富的频率合成信号输出到CLKFX和CLKFX180。

可以提供2~32的倍乘与1~32的分频系数。

c.数字移相器, 可提供粗调的0,90,180,270度移相和具有动态调节能力的相位细调。

d.数字频谱合成器,产生扩频时钟减少电磁干扰(EMI)。

Spartan-6 DCM模块提供给用户的设计原语有DCM_SP和DCM_CLKGEN,DCM_SP在Spartan-3E FPGA器件中也有,而DCM_CLKGEN是Spartan-6新增的,可以用产生动态的频率合成信号和扩频时钟。

2.PLL模块,有一400MHz~1000 MHz压控振荡器(VCO),可提供8种移相(0°, 45°, 90°, 135°, 180°, 225°, 270°, 315°)和6个可独立编程倍乘与分频系数的输出信号。

提供给用户的设计原语有PLL_BASE和PLL_ADV,PLL_BASE是单独使用PLL模块最常调用的原语,允许使用PLL的最常用特性,PLL_ADV包括PLL_BASE所有的特性之外,还提供时钟切换及与DCM的连接。

可用于以下工作模式:a. 时钟网络去歪斜b. 频率合成c. 抖动滤波d. 零延时的缓冲f. PLL与PLL、DCM的级联二、使用指南1.注意时钟的输入与输出范围,所有应用不能超过范围.。

FPGA全局时钟资源相关原语及其使用(BUFG)

FPGA全局时钟资源相关原语及其使用(BUFG)

FPGA全局时钟资源相关原语及其使用FPGA全局时钟资源一般使用全铜层工艺实现,并设计了专用时钟缓冲与驱动结构,从而使全局时钟到达芯片内部的所有可配置单元(CLB)、I/O单元(IOB)和选择性块RAM(Block Select RAM)的时延和抖动都为最小。

为了适应复杂设计的需要,Xilinx的FPGA中集成的专用时钟资源与数字延迟锁相环(DLL)的数目不断增加,最新的Virtex II器件最多可以提供16个全局时钟输入端口和8个数字时钟管理模块(DCM)。

与全局时钟资源相关的原语包括:IBUFG、IBUFGDS、BUFG、BUFGP、BUFGCE、BUFGMUX、BUFGDLL和DCM 等。

1. IBUFG即输入全局缓冲,是与专用全局时钟输入管脚相连接的首级全局缓冲。

所有从全局时钟管脚输入的信号必须经过IBUF元,否则在布局布线时会报错。

IBUFG支持AGP、CTT、GTL、GTLP、HSTL、LVCMOS、LVDCI、LVDS、LVPECL、LVTTL、PCI、PCIX 和SSTL等多种格式的IO标准。

2. IBUFGDS是IBUFG的差分形式,当信号从一对差分全局时钟管脚输入时,必须使用IBUFGDS作为全局时钟输入缓冲。

IBUFG支持BLVDS、LDT、LVDSEXT、LVDS、LVPECL 和ULVDS等多种格式的IO标准。

3. BUFG是全局缓冲,它的输入是IBUFG的输出,BUFG的输出到达FPGA内部的IOB、CLB、选择性块RAM的时钟延迟和抖动最小。

4. BUFGCE是带有时钟使能端的全局缓冲。

它有一个输入I、一个使能端CE和一个输出端O。

只有当BUFGCE的使能端CE有效(高电平)时,BUFGCE才有输出。

5. BUFGMUX是全局时钟选择缓冲,它有I0和I1两个输入,一个控制端S,一个输出端O。

当S为低电平时输出时钟为I0,反之为I1。

需要指出的是BUFGMUX的应用十分灵活,I0和I1两个输入时钟甚至可以为异步关系。

Actel FPGA中PLL和全局时钟信号线

Actel FPGA中PLL和全局时钟信号线

library IEEE;use IEEE.std_logic_1164.all;USE IEEE.STD_LOGIC_TEXTIO.ALL;USE STD.TEXTIO.ALL;entity testbench isend entity testbench;architecture test_reg of testbench iscomponent mydesign isport( POWERDOWN : in std_logic;CLKA : in std_logic;LOCK : out std_logic;GLA : out std_logic);end component;signal POWERDOWN : std_logic;signal CLKA : std_logic:='0';signal LOCK, GLA : std_logic;constant ClockPeriod : TIME := 100 ns;beginUUT : mydesign port map (POWERDOWN=>POWERDOWN,CLKA=>CLKA,LOCK=>LOCK, GLA=>GLA);generate_clock : PROCESS (CLKA)BEGIN -- processCLKA <= NOT CLKA AFTER ClockPeriod/2;END PROCESS;process beginPOWERDOWN<='0';wait for 2000 ns;POWERDOWN<='1';wait for 100 ns;wait;end process;end architecture test_reg;测试结果如下图所示:由图可见,锁相环在lock信号变为高电平时生成了符合要求的输出时钟信号。

2.采用Clock & Management下的PLL-Static模块来实现输入时钟信号的相移功能(通过SmartDesign入口),Static PLL配置如下:采用上面的testbench,将其中的被调用模块名修改为此处PLL的模块名,在modelsim 环境下进行仿真,获得结果如下:从上图可见,在lock信号置高电平后,gla信号准确地在迟延90度后跟踪给定信号。

BUFG,IBUFG,BUFGP,IBUFGDS等含义以及使用

BUFG,IBUFG,BUFGP,IBUFGDS等含义以及使用

BUFG,IBUFG,BUFGP,IBUFGDS等含义以及使用目前,大型设计一般推荐使用同步时序电路。

同步时序电路基于时钟触发沿设计,对时钟的周期、占空比、延时和抖动提出了更高的要求。

为了满足同步时序设计的要求,一般在FPGA设计中采用全局时钟资源驱动设计的主时钟,以达到最低的时钟抖动和延迟。

FPGA全局时钟资源一般使用全铜层工艺实现,并设计了专用时钟缓冲与驱动结构,从而使全局时钟到达芯片内部的所有可配置单元(CLB)、I/O单元(IOB)和选择性块RAM(Block Select RAM)的时延和抖动都为最小。

为了适应复杂设计的需要,Xilinx的FPGA中集成的专用时钟资源与数字延迟锁相环(DLL)的数目不断增加,最新的Virtex II器件最多可以提供16个全局时钟输入端口和8个数字时钟管理模块(DCM)。

与全局时钟资源相关的原语常用的与全局时钟资源相关的Xilinx器件原语包括:IBUFG、IBUFGDS、BUFG、BUFGP、BUFGCE、BUFGMUX、BUFGDLL和DCM等,如图1所示。

1. IBUFG即输入全局缓冲,是与专用全局时钟输入管脚相连接的首级全局缓冲。

所有从全局时钟管脚输入的信号必须经过IBUF元,否则在布局布线时会报错。

IBUFG支持AGP、CTT、GTL、GTLP、HSTL、LVCMOS、LVDCI、LVDS、LVPECL、LVTTL、PCI、PCIX和SSTL等多种格式的IO标准。

G 单2. IBUFGDS是IBUFG的差分形式,当信号从一对差分全局时钟管脚输入时,必须使用IBUFGDS作为全局时钟输入缓冲。

IBUFG支持BLVDS、LDT、LVDSEXT、LVDS、LVPECL和ULVDS等多种格式的IO标准。

3. BUFG是全局缓冲,它的输入是IBUFG的输出,BUFG的输出到达FPGA内部的IOB、CLB、选择性块RAM的时钟延迟和抖动最小。

4. BUFGCE是带有时钟使能端的全局缓冲。

DCM简要使用说明

DCM简要使用说明

DCM简要使⽤说明DCM简要使⽤说明数字时钟管理模块(Digital Clock Manager,DCM)是Xilinx 的FPGA芯⽚及其它器件中经常采⽤的数字延迟锁相环(DLL,Delay Locked Loop)模块。

在时钟的管理与控制⽅⾯,DCM 与DLL 相⽐,功能更强⼤,使⽤更灵活。

DCM 的功能包括消除时钟的延时、频率的合成、时钟相位的调整等系统⽅⾯的需求。

对于DCM 模块来说,其关键参数为输⼊时钟频率范围、输出时钟频率范围、输⼊/输出时钟允许抖动范围等。

DCM 的主要优点在于:1.实现零时钟偏移(Skew),消除时钟分配延迟,并实现时钟闭环控制;2.时钟可以映射到PCB 上⽤于同步外部芯⽚,可以减少了对外部芯⽚的要求,将芯⽚内外的时钟控制⼀体化,以利于系统设计DCM 共由四部分组成,其中最底层仍采⽤成熟的DLL 模块;其次分别为数字频率合成器(DFS,Digital Frequency Synthesizer)、数字移相器(DPS,Digital Phase Shifter)和数字频谱扩展器(DSS,Digital Spread Spectrum)。

DCM的功能块和相应的信号⽰意图如下图所⽰:不同的芯⽚模块的DCM 输⼊频率范围是不同的。

下⾯按模块⼤致介绍⼀下DCM的各个功能模块:1)DLL 模块DLL 主要由⼀个延时线和控制逻辑组成。

延时线对时钟输⼊端CLKIN 产⽣⼀个延时,时钟分布⽹线将该时钟分配到器件内的各个寄存器和时钟反馈端CLKFB;控制逻辑在反馈时钟到达时采样输⼊时钟以调整⼆者之间的偏差,实现输⼊和输出的零延时,如下图所⽰具体⼯作原理是:控制逻辑在⽐较输⼊时钟和反馈时钟的偏差后,调整延时线参数,在输⼊时钟后不停地插⼊延时,直到输⼊时钟和反馈时钟的上升沿同步,锁定环路进⼊“锁定”状态,只要输⼊时钟不发⽣变化,输⼊时钟和反馈时钟就保持同步。

DLL 可以被⽤来实现⼀些电路以完善和简化系统级设计,如提供零传播延迟,低时钟相位差和⾼级时钟区域控制等。

fpga 设计中对时钟的使用

fpga 设计中对时钟的使用

fpga 设计中对时钟的使用FPGA(Field-Programmable Gate Array)是一种可编程逻辑器件,可以随意定制电路,称为“现场可编程门阵列”。

FPGA极大地促进了数字设计的发展,主要原因是它们具有高度灵活性和可编程性,在快速原型开发和快速市场推出方面具有重要作用。

时钟在FPGA设计中扮演重要的角色。

本文将介绍FPGA设计中时钟的使用。

一、时钟的概念和应用时钟通常被定义为一个周期性的信号,在数字电路中用于同步各个电路元素的运行。

FPGA设计中,时钟是同步时序逻辑电路的核心,因为它是控制数字逻辑电路元素的节拍。

当时钟沿上升或下降到达某一特定的时刻时,整个系统将同步更新到该时刻。

在FPGA设计中时钟决定了操作的速度,这个速度主要取决于FPGA芯片本身的异步延迟,不受时钟频率控制。

可以通过增加时钟频率来提高FPGA系统的速度,但也会造成增加功耗和热量。

时钟频率是由同步电路的最慢电路决定的。

如果时钟频率超过了最慢的同步电路,就会出现数据丢失或不稳定的情况,因此时钟频率需要在同步电路的最慢电路范围内进行选择。

时钟的应用包括以下几个方面:1.同步器:时钟作为同步器,在FPGA的硬件代码中用于实现逻辑延迟。

2.复位电路:时钟也可以用于生成复位信号,当时钟初次上升到达时,复位电路可以将系统重置为已知的状态。

3.频率分频:时钟信号可以通过分频器降低频率。

可以将一个高速时钟信号分裂成几个低速时钟信号,用于驱动各自的模块。

4. 数据采样模块:数据采样模块要求适当的时钟方式和时钟控制。

二、时钟对FPGA设计中的影响FPGA设计中时钟的正确使用对整个设计非常重要。

时钟频率的选择直接影响到FPGA芯片工作的稳定性和可靠性。

时钟信号的漏掉、翻转或者缺失将会导致逻辑分支的错误,从而影响到整个系统的正常运行。

为了保证时钟的稳定和可靠,一般采用以下方法:1.时钟源选择:FPGA芯片的时钟源需要选择稳定、精确的时钟源。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

在 Xilinx 系列 FPGA 产品中,全局时钟网络是一种全局布线资源,它可以保证时钟信号到达各个目标逻辑单元的时延基本相同。

其时钟分配树结构如图1所示。

图1.Xilinx FPGA全局时钟分配树结构针对不同类型的器件,Xilinx公司提供的全局时钟网络在数量、性能等方面略有区别,下面以Virtex-4系列芯片为例,简单介绍FPGA全局时钟网络结构。

Virtex- 4系列FPGA利用1.2V、90nm三栅极氧化层技术制造而成,与前一代器件相比,具备灵活的时钟解决方案,多达80个独立时钟与20个数字时钟管理器,差分全局时钟控制技术将歪斜与抖动降至最低。

以全铜工艺实现的全局时钟网络,加上专用时钟缓冲与驱动结构,从而可使全局时钟到达芯片内部所有的逻辑可配置单元,且I/O单元以及块RAM的时延和抖动最小,可满足高速同步电路对时钟触发沿的苛刻需求。

在FPGA设计中,FPGA全局时钟路径需要专用的时钟缓冲和驱动,具有最小偏移和最大扇出能力,因此最好的时钟方案是由专用的全局时钟输入引脚驱动的单个主时钟,去钟控设计项目中的每一个触发器。

只要可能就应尽量在设计项目中采用全局时钟,因为对于一个设计项目来说,全局时钟是最简单和最可预测的时钟。

在软件代码中,可通过调用原语 IBUFGP来使用全局时钟。

IBUFGP的基本用法是:IBUFGP U1(.I(clk_in), .O(clk_out));全局时钟网络对FPGA设计性能的影响很大,所以本书在第11章还会更深入、更全面地介绍全局时钟网络以及相关使用方法。

DCM模块的使用1.DCM模块的组成和功能介绍数字时钟管理模块(Digital Clock Manager,DCM)是基于Xilinx的其他系列器件所采用的数字延迟锁相环(DLL,Delay Locked Loop)模块。

在时钟的管理与控制方面,DCM与DLL相比,功能更强大,使用更灵活。

DCM的功能包括消除时钟的延时、频率的合成、时钟相位的调整等系统方面的需求。

DCM的主要优点在于:①实现零时钟偏移(Skew),消除时钟分配延迟,并实现时钟闭环控制;②时钟可以映射到PCB 上用于同步外部芯片,这样就减少了对外部芯片的要求,将芯片内外的时钟控制一体化,以利于系统设计。

对于DCM模块来说,其关键参数为输入时钟频率范围、输出时钟频率范围、输入/输出时钟允许抖动范围等。

DCM共由四部分组成,如图2所示。

其中最底层仍采用成熟的DLL模块;其次分别为数字频率合成器(DFS,Digital Frequency Synthesizer)、数字移相器(DPS,Digital Phase Shifter)和数字频谱扩展器(DSS,Digital Spread Spectrum)。

不同的芯片模块的DCM输入频率范围是不同的,例如:。

图2 DCM功能块和相应的信号1)DLL模块DLL 主要由一个延时线和控制逻辑组成。

延时线对时钟输入端CLKIN产生一个延时,时钟分布网线将该时钟分配到器件内的各个寄存器和时钟反馈端CLKFB;控制逻辑在反馈时钟到达时采样输入时钟以调整二者之间的偏差,实现输入和输出的零延时,如图3所示。

具体工作原理是:控制逻辑在比较输入时钟和反馈时钟的偏差后,调整延时线参数,在输入时钟后不停地插入延时,直到输入时钟和反馈时钟的上升沿同步,锁定环路进入“锁定”状态,只要输入时钟不发生变化,输入时钟和反馈时钟就保持同步。

DLL可以被用来实现一些电路以完善和简化系统级设计,如提供零传播延迟,低时钟相位差和高级时钟区域控制等。

图3 DLL简单模型示意图在Xilinx芯片中,典型的DLL标准原型如图4所示,其管脚分别说明如下:图4 Xilinx DLL的典型模型示意图CLKIN(源时钟输入):DLL输入时钟信号,通常来自IBUFG或BUFG。

CLKFB(反馈时钟输入):DLL时钟反馈信号,该反馈信号必须源自CLK0或CLK2X,并通过IBUFG或BUFG相连。

RST(复位):控制DLL的初始化,通常接地。

CLK0(同频信号输出):与CLKIN无相位偏移;CLK90与CLKIN 有90度相位偏移;CLK180与CLKIN 有180度相位偏移;CLK270与CL KIN有270度相位偏移。

CLKDV(分频输出):DLL输出时钟信号,是CLKIN的分频时钟信号。

DLL支持的分频系数为1.5,2,2.5,3,4,5,8 和16。

CLK2X(两倍信号输出):CLKIN的2倍频时钟信号。

LOCKED(输出锁存):为了完成锁存,DLL可能要检测上千个时钟周期。

当DLL 完成锁存之后,LOCKED有效。

在FPGA 设计中,消除时钟的传输延迟,实现高扇出最简单的方法就是用DLL,把CLK0 与CLKFB相连即可。

利用一个DLL可以实现2倍频输出,如图5所示。

利用两个DLL 就可以实现4倍频输出,如图6所示。

图5 Xilinx DLL 2倍频典型模型示意图图6 Xilinx DLL 4倍频典型模型示意图2)数字频率合成器DFS 可以为系统产生丰富的频率合成时钟信号,输出信号为CLKFB和CLKFX180,可提供输入时钟频率分数倍或整数倍的时钟输出频率方案,输出频率范围为1.5~320 MHz(不同芯片的输出频率范围是不同的)。

这些频率基于用户自定义的两个整数比值,一个是乘因子(CLKFX_ MULTIPLY),另外一个是除因子(CLKFX_ DIVIDE),输入频率和输出频率之间的关系为:比如取CLKFX_MULTIPLY = 3,CLKFX_DIVIDE = 1,PCB上源时钟为100 MHz,通过DCM 3倍频后,就能驱动时钟频率在300 MHz的FPGA,从而减少了板上的时钟路径,简化板子的设计,提供更好的信号完整性。

3)数字移相器DCM 具有移动时钟信号相位的能力,因此能够调整I/O信号的建立和保持时间,能支持对其输出时钟进行0度、90度、180度、270度的相移粗调和相移细调。

其中,相移细调对相位的控制可以达到1%输入时钟周期的精度(或者50 ps),并且具有补偿电压和温度漂移的动态相位调节能力。

对DCM输出时钟的相位调整需要通过属性控制PHASE_SHIFT来设置。

PS设置范围为 -255到+255,比如输入时钟为200 MHz,需要将输出时钟调整+ 0.9 ns的话,PS =(0.9ns/ 5ns)?56 = 46。

如果PHASE_ SHIFT值是一个负数,则表示时钟输出应该相对于CLKIN向后进行相位移动;如果PHASE_SHIFT是一个正值,则表示时钟输出应该相对于CLKIN向前进行相位移动。

移相用法的原理图与倍频用法的原理图很类似,只用把CLK2X输出端的输出缓存移到CLK90、CLK180或者CLK270端即可。

利用原时钟和移相时钟与计数器相配合也可以产生相应的倍频。

4)数字频谱合成器Xilinx 公司第一个提出利用创新的扩频时钟技术来减少电磁干扰(EMI)噪声辐射的可编程解决方案。

最先在FPGA中实现电磁兼容的EMIControl技术,是利用数字扩频技术(DSS)通过扩展输出时钟频率的频谱来降低电磁干扰,减少用户在电磁屏蔽上的投资。

数字扩频(DSS)技术通过展宽输出时钟的频谱,来减少EMI和达到FCC要求。

这一特点使设计者可极大地降低系统成本,使电路板重新设计的可能性降到最小,并不再需要昂贵的屏蔽,从而缩短了设计周期。

2.DCM模块IP Core的使用例:在ISE中调用DCM模块,完成50MHz时钟信号到75MHz时钟信号的转换。

1)在源文件进程中,双击“Create New Source”;然后在源文件窗口,选择“IP (CoreGen & Architecture Wizard)”,输入文件名“my_dcm”;再点击“Next”,在选择类型窗口中,“FPGA Features and Design –>Clocking ->Virtex-4”,然后选择“Single DCM ADV v9.1i”,如图7所示。

图7 新建DCM模块IP Core向导示意图<2> 点击“Next”,“Finish”进入Xilinx 时钟向导的建立窗口,如图8所示。

ISE默认选中CLK0和 LOCKED这两个信号,用户根据自己需求添加输出时钟。

在“Input Clock Frequency”输入栏中敲入输入时钟的频率或周期,单位分别是MHz和ns,其余配置保留默认值。

为了演示,这里添加了CLKFX 信号,并设定输入时钟为单端信号,频率为50MHz,其余选项保持默认值。

图8 DCM模块配置向导界面<3> 点击“Next”,进入时钟缓存窗口,如图9所示。

默认配置为DCM输出添加全局时钟缓存以保证良好的时钟特性。

如果设计全局时钟资源,用户亦可选择“Customize buffers”自行编辑输出缓存。

一般选择默认配置即可。

图9 DCM模块时钟缓存配置向导界面<4> 点击“Next”,进入时钟频率配置窗口,如图10所示。

键入输出频率的数值,或者将手动计算的分频比输入。

最后点击“Next”,“Finish”即可完成DCM模块IP Core的全部配置。

本例直接键入输出频率为75MHz即可。

图10 指定 DCM 模块的输出频率<5> 经过上述步骤,即可在源文件进程中看到“my_dcm.xaw”文件。

剩余的工作就是在设计中调用该DCM IP Core,其例化代码如下:module dcm_top(CLKIN_IN,RST_IN,CLKFX_OUT,CLKIN_IBUFG_OUT,CLK0_OUT,LOCKED_OUT);input CLKIN_IN;input RST_IN;output CLKFX_OUT;output CLKIN_IBUFG_OUT;output CLK0_OUT;output LOCKED_OUT;mydcm dcm1(.CLKIN_IN(CLKIN_IN),.RST_IN(RST_IN),.CLKFX_OUT(CLKFX_OUT),.CLKIN_IBUFG_OUT(CLKIN_IBUFG_OUT),.CLK0_OUT(CLK0_OUT),.LOCKED_OUT(LOCKED_OUT));endmodule<6> 上述代码经过综合Synplify Pro综合后,得到的RTL级结构图如图11所示。

图11 DCM模块的RTL结构示意图上述代码经过ModelSim仿真后,其局部仿真结果如图12所示。

从中可以看出,当LOCKED_OUT信号变高时,DCM模块稳定工作,输出时钟频率 CLKFX_OUT为输入时钟CLK_IN频率的1.5倍,完成了预定功能。

相关文档
最新文档