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芯片的时钟源需要选择稳定、精确的时钟源。

FPGA中DCM工作原理及其在高速ADC电路中的应用

FPGA中DCM工作原理及其在高速ADC电路中的应用
GTLP、HSTL、LVCMOS、LVDCI、LVDS、LVPECL、
LVlvrL、PCI、PCIX和SSTL等多种格式的10标准。
2.2全局差分时钟输入IIBUFGDSJ IBUFG的差分输入形式,当信号从一对差分全局时钟
管脚输入时,必须使用IBUFGDS作为全局时钟输入缓冲。 IBUFG支持BLVDS、LDT、LVDSEXT、LVDS、LVPECL和 ULVDS等多种格式的10标准。
3.1时钟输入信号(CLKIN) DcM的用户源时钟输入,输入到该脚的时钟信号
频率范围必须在器件给出的指标范围之内,该脚通常是 连接到器件原型IBUF、IBUFG(在DCM的同一侧位置)、
BUFGMUX。
3.2时钟反馈输入信号(CLKFBJ DCM的参考,反馈时钟输入,DCM的反馈输入信号必
须与DCM的CLK0或CLK2X输出相连,反馈时钟的驱动可 以是内部的BUFGMUX,或者是DCM所在位置的IBUFG或 IBUF,当使用IBUF时,管脚至I]DCM的输入偏斜是未得到补 偿的。当IBUFG作为DCM的CLKFB的输入源时,需遵守下 面两条规则:
PSDONE
图1 Vi rtex系列FPGA中DCM电路及时钟管理相关器件原型
一牛一卓一木一木一术一宰一牛一奉一木一'I‘一幸一木一牛一幸一奉一半一幸一年一宰一幸一宰一车一幸一幸一宰一牛一事一木一木一木一木一幸一幸一牢一丰一半一,lc一半一一木一章一丰一半一幸一
..■一
[4lZ黼J,陆长捷,工程可靠性教程【M】,北京:国防工业出 等译【M】.北京:电子工业出版社,2005.1:138. [213E少萍,工程可靠性【M】.北京:北京航空航天大学出版
3.8相位调节移位时钟(PSCLKJ D C M的相位调节移位时钟可以是cLKI N。也可

FPGA开发全攻略——配置电路

FPGA开发全攻略——配置电路

FPGA开发全攻略——配置电路展开全文配置电路FPGA配置方式灵活多样,根据芯片是否能够自己主动加载配置数据分为主模式、从模式以及JTAG模式。

典型的主模式都是加载片外非易失( 断电不丢数据) 性存储器中的配置比特流,配置所需的时钟信号( 称为CCLK) 由FPGA内部产生,且FPGA控制整个配置过程。

从模式需要外部的主智能终端( 如处理器、微控制器或者DSP等) 将数据下载到FPGA中,其最大的优点就是FPGA 的配置数据可以放在系统的任何存储部位,包括:Flash、硬盘、网络,甚至在其余处理器的运行代码中。

JTAG 模式为调试模式,可将PC 中的比特文件流下载到FPGA中,断电即丢失。

此外,目前赛灵思还有基于Internet 的、成熟的可重构逻辑技术System ACE解决方案。

(1) 主模式在主模式下,FPGA上电后,自动将配置数据从相应的外存储器读入到SRAM中,实现内部结构映射;主模式根据比特流的位宽又可以分为:串行模式( 单比特流) 和并行模式( 字节宽度比特流) 两大类。

如:主串行模式、主SPI Flash 串行模式、内部主SPI Flash串行模式、主BPI 并行模式以及主并行模式,如图5-19所示。

(2) 从模式在从模式下,FPGA 作为从属器件,由相应的控制电路或微处理器提供配置所需的时序,实现配置数据的下载。

从模式也根据比特流的位宽不同分为串、并模式两类,具体包括:从串行模式、JTAG模式和从并行模式三大类,其概要说明如图5-20所示。

(3)JTAG模式在JTAG模式中,PC和FPGA通信的时钟为JTAG接口的TCLK,数据直接从TDI进入FPGA,完成相应功能的配置。

图5-19 常用主模式下载方式示意图图5-20 常用的从模式下载方式示意图目前,主流的FPGA芯片都支持各类常用的主、从配置模式以及JTAG,以减少配置电路失配性对整体系统的影响。

在主配置模式中,FPGA自己产生时钟,并从外部存储器中加载配置数据,其位宽可以为单比特或者字节;在从模式中,外部的处理器通过同步串行接口,按照比特或字节宽度将配置数据送入FPGA芯片。

XilinxFPGA配置clocking时钟动态相位输出

XilinxFPGA配置clocking时钟动态相位输出

XilinxFPGA配置clocking时钟动态相位输出
开发平台基于Vivado2017.3,器件使⽤的是Kintex7。

先贴个时序图:
如何动态配置clocking输出时钟相位,⾸先在ip核设置界⾯,勾选Dynamic Phase Shift,在左侧接⼝总览⾥⾯可以看到多出来4个信号,psclk:⽤于相移控制信号的驱动时钟,psen:控制相位偏移的使能信号,psincdec:⽤于相位正负偏移的信号,1表⽰正向偏移,0表⽰负向偏移。

最后psdone是相位偏移完成标志信号。

权威的接⼝说明可以⾃⾏查阅xilinx 官⽅⼿册pg065。

标题
在第⼆页输出时钟最后勾选Use Fine PS,
标题
关注⼀下VCO的频率,⼀个psen⾼脉冲,输出相位偏移1/56个VCO周期。

标题
然后例化⼀下,写个testbench,我看clocking这个ip核的example中,psclk的频率设置的是100Mhz。

仿真使⽤的Vivado⾃带的仿真器,因为Modelsim仿真时,psdone信号死活不拉⾼,估计是有BUG。

仿真波形如下,⼀个psen,输出时钟相位偏移20ps。

刚好等于1/891Mhz/56
标题
标题。

fpga时钟相位

fpga时钟相位

FPGA时钟相位1. 什么是FPGA时钟相位?在了解FPGA时钟相位之前,首先需要了解FPGA和时钟的基本概念。

FPGA(Field Programmable Gate Array)是一种可编程逻辑器件,可以根据用户的需求重新配置内部的逻辑电路。

它由可编程逻辑单元(PLU)和可编程互连资源(PIR)组成,可以用于实现各种数字逻辑电路。

时钟是FPGA中非常重要的一个概念,它是FPGA内部逻辑电路运行的基准,用于同步各个逻辑单元的操作。

时钟信号的频率决定了FPGA的工作速度和性能。

FPGA时钟相位是指时钟信号的相对时间偏移量。

在FPGA中,时钟信号会被分发到各个逻辑单元,时钟相位的不同会导致不同逻辑单元在不同时间点上进行操作,从而影响FPGA的功能和性能。

2. FPGA时钟相位的重要性FPGA时钟相位对于FPGA的功能和性能至关重要。

合理地控制时钟相位可以避免时序问题,提高FPGA的工作稳定性和性能。

2.1 时序问题时序问题是指在FPGA中由于时钟相位不正确而导致的电路操作错误。

当时钟信号到达逻辑单元时,逻辑单元的输入信号必须满足一定的时间要求,否则逻辑单元可能无法正确地完成操作。

时序问题主要包括以下几种情况:•setup violation:逻辑单元的输入信号在时钟上升沿之前就发生了变化,导致逻辑单元无法正确读取输入信号。

•hold violation:逻辑单元的输入信号在时钟上升沿之后才发生变化,导致逻辑单元在时钟上升沿之后仍然读取上一时钟周期的输入信号。

•clock skew:时钟信号在传输过程中由于电路延迟不均匀而导致的相位差异,可能导致时序问题。

2.2 时钟频率和性能FPGA的时钟频率决定了其工作速度和性能。

时钟频率越高,FPGA的工作速度越快,性能越好。

然而,时钟频率的提高也会增加时序问题的可能性。

合理地控制时钟相位可以提高FPGA的时钟频率和性能,同时确保电路的正确运行。

3. FPGA时钟相位的调整方法FPGA时钟相位的调整方法主要有以下几种:3.1 时钟分频时钟分频是通过改变时钟信号的频率来调整时钟相位的一种方法。

DCM功能分析及其使用方法

DCM功能分析及其使用方法

设为首页添加到收藏夹实体认证 网站地图服务项目免费注册请登录您好,欢迎来到元器件交易网!首页资讯IC非IC安防专区求购供应商PDF西安专区论坛首页行情原创专题芯片新品观察公司评测谍照技术滚动直播间IC概念股元器件导购DCM功能分析及其使用方法 DCM主要功能 1. 分频倍频:DCM可以将输入时钟进行multiply或者divide,从而得到新的输出时钟。

2. 去skew:DCM还可以消除clock的skew,所谓skew就是由于传输引起的同一时钟到达不同地点的延迟差。

3. 相移:DCM还可以实现对输入时钟的相移输出,这个相移一般是时钟周期的一个分数。

4. 全局时钟:DCM和FPGA内部的全局时钟分配网络紧密结合,因此性能优异。

5. 电平转换:通过DCM,可以输出不同电平标准的时钟。

DCM的特点与能力(Spartan-3系列为例) ?数量:4 DCM / FPGA(也有例外) --应该够用了 ?数字频率综合器输入(CLKIN):1-280MHz ?延迟锁相环输入(CLKIN):18-280MHz ?时钟输入源(CLKIN): Global buffer input pad Global buffer output General-purpose I/O (no deskew) Internal logic (no deskew) --上面最后两个分别是外部的普通IO口和内部的逻辑,没有deskew,所以时钟质量不会很好。

?频率综合器输出(CLKFX、CLKFX180):是CLKIN的M/D倍,其中 M=2..32 D=1..32 --这样看来最大能倍频32倍,最小能16分频。

?时钟dividor输出(CLKDV):是CLKIN的下列分频1.5, 2,2.5, 3,3.5, 4,4.5, 5,5.5, 6,6.5, 7,7.5, 8, 9, 10, 11, 12, 13, 14, 15, or 16 --发现没有,最大的分频也是16。

FPGA管脚分配时需注意的一些事项(以xilinx xc4vsx55为例)

FPGA管脚分配时需注意的一些事项(以xilinx xc4vsx55为例)

FPGA管脚分配时需注意的一些事项(以xilinx xc4vsx55为例)FPGA管脚分配时需注意的一些事项(以xilinx xc4vsx55为例)平台:XC4VSX55 ISE10.1设计过FPGA的原理图,看FPGA的手册,说管脚的分配问题,如时钟管脚要用GC类管脚,而且单端时钟输入时要用P类型的管脚,不能用N类型管脚等等。

一直以来都没有试验过,今天试验一把,以求各种验证。

1)GC类全局时钟管脚是否可用作普通IO使用?所谓GC类管脚,就是在管脚的称是诸如IO_L1P_GC_LC等带有GC的管脚。

其实手册中说的是GC类管脚可以用作IO的,但在《Xilinx FPGA开发实用教程》(清华出版社)574页倒数第八行提到:“所有从全局时钟管脚输入的信号必须经过IBUF元,否则在布局布线时会报错”,于是今天我试了一下,将某一GC 类管脚分配给一个普通的输入口(也试验了分配给一个普通的输出口),经布局布线后,未出错。

因此得出结论:GC类全局时钟管脚可以作为普通IO使用。

(不知道是不是我对书中提到的全局时钟管脚理解有误,如果是,请网友别拍我,敬请留言指正)2)非GC类全局时钟管脚是否可以作时钟使用?其实至于说能否作为时钟使用,这里有另一层函义。

当然,如果你把一个普通IO口配置成输入口,就把它的输入信号作为时钟,那是没问题的。

但我们一般不这么做,因为时钟信号对于我们来说是一个很重要的信号,因此FPGA在内部会有特殊照顾,如果你使用FPGA传门为时钟预留的管脚,并作一些处理,那么你的时钟对于各种模块的时延是可以忽略的,因为时钟在布线时是单独走的一层,而如果你就仅用普通IO 的话,经过FPGA内部布局布线后,从它的输到,再到各个使用时钟的地方,有的线长,有的线短,它的时延将是不一样的。

这些东西还是看一些FPGA结构的内容吧。

在xilinx里有专门的DCM IP核可供调用,在ISE中执行project——>New Source——>IP(CORE Generator & Architecture Wizard)——>FPGA Features andDesign——>Clocking——>Virtex-4——>Single DCM ADV v9.1i,可得如下界面:需要特别注意的是CLKIN Source需要选择是External还是Internal,各自生成的源文件如下:==========================选择External=========================`timescale 1ns / 1psmodule clk_test(CLKIN_IN,CLKIN_IBUFG_OUT,CLK0_OUT,LOCKED_OUT);input CLKIN_IN;output CLKIN_IBUFG_OUT;output CLK0_OUT;output LOCKED_OUT;wire CLKFB_IN;wire CLKIN_IBUFG;wire CLK0_BUF;wire GND_BIT;wire [6:0] GND_BUS_7;wire [15:0] GND_BUS_16;assign GND_BIT = 0;assign GND_BUS_7 = 7'b0000000;assign GND_BUS_16 = 16'b0000000000000000;assign CLKIN_IBUFG_OUT = CLKIN_IBUFG;assign CLK0_OUT = CLKFB_IN;IBUFG CLKIN_IBUFG_INST (.I(CLKIN_IN),.O(CLKIN_IBUFG));BUFG CLK0_BUFG_INST (.I(CLK0_BUF),.O(CLKFB_IN));DCM_ADV DCM_ADV_INST (.CLKFB(CLKFB_IN), .CLKIN(CLKIN_IBUFG),.DADDR(GND_BUS_7[6:0]),.DCLK(GND_BIT),.DEN(GND_BIT),.DI(GND_BUS_16[15:0]),.DWE(GND_BIT),.PSCLK(GND_BIT),.PSEN(GND_BIT),.PSINCDEC(GND_BIT),.RST(GND_BIT),.CLKDV(),.CLKFX(),.CLKFX180(),.CLK0(CLK0_BUF),.CLK2X(),.CLK2X180(),.CLK90(),.CLK180(),.CLK270(),.DO(),.DRDY(),.LOCKED(LOCKED_OUT),.PSDONE());defparam DCM_ADV_INST.CLK_FEEDBACK = "1X";defparam DCM_ADV_INST.CLKDV_DIVIDE = 2.0;defparam DCM_ADV_INST.CLKFX_DIVIDE = 1;defparam DCM_ADV_INST.CLKFX_MULTIPLY = 4;defparam DCM_ADV_INST.CLKIN_DIVIDE_BY_2 = "FALSE";defparam DCM_ADV_INST.CLKIN_PERIOD = 16.129;defparam DCM_ADV_INST.CLKOUT_PHASE_SHIFT = "NONE";defparam DCM_ADV_INST.DCM_AUTOCALIBRATION = "TRUE";defparam DCM_ADV_INST.DCM_PERFORMANCE_MODE = "MAX_SPEED";defparam DCM_ADV_INST.DESKEW_ADJUST = "SYSTEM_SYNCHRONOUS";defparam DCM_ADV_INST.DFS_FREQUENCY_MODE = "LOW";defparam DCM_ADV_INST.DLL_FREQUENCY_MODE = "LOW";defparam DCM_ADV_INST.DUTY_CYCLE_CORRECTION = "TRUE";defparam DCM_ADV_INST.FACTORY_JF = 16'hF0F0;defparam DCM_ADV_INST.PHASE_SHIFT = 0;defparam DCM_ADV_INST.STARTUP_WAIT = "FALSE";endmodule==========================选择Internal=========================`timescale 1ns / 1psmodule clk1_test(CLKIN_IN,CLK0_OUT,LOCKED_OUT);input CLKIN_IN;output CLK0_OUT;output LOCKED_OUT;wire CLKFB_IN;wire CLK0_BUF;wire GND_BIT;wire [6:0] GND_BUS_7;wire [15:0] GND_BUS_16;assign GND_BIT = 0;assign GND_BUS_7 = 7'b0000000;assign GND_BUS_16 = 16'b0000000000000000;assign CLK0_OUT = CLKFB_IN;BUFG CLK0_BUFG_INST (.I(CLK0_BUF),.O(CLKFB_IN));DCM_ADV DCM_ADV_INST (.CLKFB(CLKFB_IN),.CLKIN(CLKIN_IN),.DADDR(GND_BUS_7[6:0]),.DCLK(GND_BIT),.DEN(GND_BIT),.DI(GND_BUS_16[15:0]),.DWE(GND_BIT),.PSCLK(GND_BIT),.PSEN(GND_BIT),.PSINCDEC(GND_BIT),.RST(GND_BIT),.CLKDV(),.CLKFX(),.CLKFX180(),.CLK0(CLK0_BUF),.CLK2X(),.CLK2X180(),.CLK90(),.CLK180(),.CLK270(),.DO(),.DRDY(),.LOCKED(LOCKED_OUT),.PSDONE());defparam DCM_ADV_INST.CLK_FEEDBACK = "1X";defparam DCM_ADV_INST.CLKDV_DIVIDE = 2.0;defparam DCM_ADV_INST.CLKFX_DIVIDE = 1;defparam DCM_ADV_INST.CLKFX_MULTIPLY = 4;defparam DCM_ADV_INST.CLKIN_DIVIDE_BY_2 = "FALSE";defparam DCM_ADV_INST.CLKIN_PERIOD = 16.129;defparam DCM_ADV_INST.CLKOUT_PHASE_SHIFT = "NONE";defparam DCM_ADV_INST.DCM_AUTOCALIBRATION = "TRUE";defparam DCM_ADV_INST.DCM_PERFORMANCE_MODE = "MAX_SPEED";defparam DCM_ADV_INST.DESKEW_ADJUST = "SYSTEM_SYNCHRONOUS";defparam DCM_ADV_INST.DFS_FREQUENCY_MODE = "LOW";defparam DCM_ADV_INST.DLL_FREQUENCY_MODE = "LOW";defparam DCM_ADV_INST.DUTY_CYCLE_CORRECTION = "TRUE";defparam DCM_ADV_INST.FACTORY_JF = 16'hF0F0;defparam DCM_ADV_INST.PHASE_SHIFT = 0;defparam DCM_ADV_INST.STARTUP_WAIT = "FALSE";endmodule比较以上两段代码,区别在于选择是External时CLKIN经过了IBUFG才到的DCM_ADV,而选择Internal 的CLKIN则直接到了DCM_AV,而IBUFG就是原语“全局时钟缓冲”单元,我们使用时要选择External,只有当我们的级联两个DCM模块时,直接与外面相连的选External,而另一个选择Internal。

在FPGA开发中尽量避免全局复位的使用

在FPGA开发中尽量避免全局复位的使用

在FPGA开发中尽量避免全局复位的使用最近几天读了Xilinx网站上一个很有意思的白皮书(white paper,wp272.pdf),名字叫《Get Smart About Reset:Think Local, Not Global》,在此分享一下心得,包括以前设计中很少注意到的一些细节。

在数字系统设计中,我们传统上都认为,应该对所有的触发器设置一个主复位,这样将大大方便后续的测试工作。

所以,在所有的程序中,我往往都在端口定义中使用同一个reset信号(其实好多时候根本就没有用到)。

所以,当看到文档中提到,“不建议在FPGA设计中使用全局复位,或者说应该努力避免这种设计方式”时,许多设计人员(包括我)都会觉得非常难以理解,这种设计思想跟我们通常的认识是相冲突的!继续读下去,不知不觉发现这个白皮书讲的还真是在理。

接下来把我的个人理解讲述一下。

1.全局复位是不是关键时序?全局复位信号一般由以下三种途径获得:1. 第一种,最常见的,就是用一个复位按钮产生一个复位信号接到FPGA的全局复位管脚上。

它的速度显然是非常慢的(因为是机械结构),而且存在抖动的问题。

2. 第二种是上电的时候由电源芯片产生的,如TI的TPS76x系列的电源系统一般都可以产生复位信号,供主芯片上电复位使用。

3. 第三种是由控制芯片产生的复位脉冲,这个是我们设计人员可以方便使用程序控制的。

在这些情况下,复位信号的变化与FGPA芯片内部信号相比看起来是及其缓慢的,例如,复位按钮产生的复位信号的周期至少是在毫秒级别的,而我们FPGA内部信号往往是纳米或者微秒级别的。

复位信号的频率是如此之低,以至于我们任务它不属于关键时序(not timing-critical)。

即使是对此类信号进行时序约束,约束的周期也是非常长的。

全局复位脉冲的周期远大于时钟周期,所以传统意义上假设FPGA芯片中所有的触发器都能够得到有效的复位。

然而,随着FPGA性能和工作频率的快速提高,这种假设开始不再成立。

FPGA DCM使用详解

FPGA DCM使用详解

FPGA DCM使用详解DCM(Digital Clock Manager)即基础时钟管理模块,是基于Xilinx的FPGA普遍采用的DLL(Delay Lock Loop)模块,在时钟管理与控制方面,DCM功能更加强大,使用更加灵活。

一、DCM主要功能1.分频倍频:DCM可以将输入时钟进行multiply或者divide,从而得到新的输出时钟。

2.去skew:DCM还可以消除clock的skew,所谓skew就是由于传输引起的同一时钟到达不同地点的延迟差。

3.相移:DCM还可以实现对输入时钟的相移输出,这个相移一般是时钟周期的一个分数。

4.全局时钟:DCM和FPGA内部的全局时钟分配网络紧密结合,因此性能优异。

5.电平转换:通过DCM,可以输出不同电平标准的时钟。

DCM的特点与能力(Spartan-3系列为例)数量:4DCM/FPGA(也有例外)应该够用了数字频率综合器输入(CLKIN):1-280MHz延迟锁相环输入(CLKIN):18-280MHz时钟输入源(CLKIN):1)Global buffer input pad2)Global buffer output3)General-purpose I/O(no deskew)4)Internal logic(no deskew)最后两个分别是外部的普通IO口和内部逻辑,没有deskew,所以时钟质量不会很好。

频率综合器输出(CLKFX、CLKFX180):是CLKIN的M/D倍,其中M=2..32D=1..32这样看来最大能倍频32倍,最小能16分频。

时钟dividor输出(CLKDV):是CLKIN的下列分频1.5,2,2.5,3,3.5,4,4.5,5,5.5,6,6.5,7,7.5,8,9,10,11,12,13,14,15,or16由此可见,最大的分频也是16,不过能支持半分频,比用频率综合器方便。

倍频输出(CLK2X、CLK2X180):CLKIN的2倍频时钟conditioning、占空比调整:这个对所有时钟输出都施加,占空比为50%。

FPGA芯片模块结构及功能知识详解

FPGA芯片模块结构及功能知识详解

FPGA芯片模块结构及功能知识详解目前主流的FPGA仍是基于查找表技术的,已经远远超出了先前版本的基本性能,并且整合了常用功能(如RAM、时钟管理和DSP)的硬核(ASIC型)模块。

如图1-1所示(注:图1-1只是一个示意图,实际上每一个系列的FPGA都有其相应的内部结构),FPGA芯片主要由6部分完成,分别为:可编程输入输出单元、基本可编程逻辑单元、完整的时钟管理、嵌入块式RAM、丰富的布线资源、内嵌的底层功能单元和内嵌专用硬件模块。

图1-1:FPGA芯片的内部结构每个模块的功能如下:1、可编程输入输出单元(IOB):可编程输入/输出单元简称I/O单元,是芯片与外界电路的接口部分,完成不同电气特性下对输入/输出信号的驱动与匹配要求,其示意结构如图1-2所示。

FPGA内的I/O按组分类,每组都能够独立地支持不同的I/O 标准。

通过软件的灵活配置,可适配不同的电气标准与I/O物理特性,可以调整驱动电流的大小,可以改变上、下拉电阻。

目前,I/O口的频率也越来越高,一些高端的FPGA通过DDR 寄存器技术可以支持高达2Gbps的数据速率。

图1-2:典型的IOB内部结构示意图外部输入信号可以通过IOB模块的存储单元输入到FPGA的内部,也可以直接输入FPGA 内部。

当外部输入信号经过IOB模块的存储单元输入到FPGA内部时,其保持时间(Hold Time)的要求可以降低,通常默认为0。

为了便于管理和适应多种电器标准,FPGA的IOB被划分为若干个组(bank),每个bank的接口标准由其接口电压VCCO决定,一个bank只能有一种VCCO,但不同bank的VCCO可以不同。

只有相同电气标准的端口才能连接在一起,VCCO电压相同是接口标准的基本条件。

2、可配置逻辑块(CLB):CLB是FPGA内的基本逻辑单元。

CLB的实际数量和特性会依器件的不同而不同,但是每个CLB都包含一个可配置开关矩阵,此矩阵由4或6个输入、一些选型电路(多路复用器等)和触发器组成。

Xilinx FPGA 内部结构深入分析

Xilinx FPGA 内部结构深入分析

Xilinx FPGA 内部结构深入分析作者:fpga001。

论坛:芯片动力(SocVista)。

网页地址:/bbs/viewthread.php?tid=3443&extra=page%3D2&page=7发表时间:2009.12IOB的结构请大家看到手册的第1页,这是IOB的review部分。

IO block 是高手的领地,一般接触FPGA第一年都不会太关心到这个部分。

注意看,IOB有三个数据通道:输入、输出、三态控制。

每个通道都有一对存储器件,他们可以当做寄存器或者锁存起来使用,视乎你的设置。

输入通道有可编程的延迟模块,可以确保hold time为零。

(这是在什么场合使用?请达人补充!)另外可以看到输入输出通道都有完备的DDR支持,这个在后面可以看到。

所有图都请参考PDF原文,这里就不再粘贴了。

可编程输入延迟看到手册第3页,这个像两根鱼骨似的构造就是输入延迟了。

输入延迟一共16节,每节250ps,所以总共的延迟在0~4ns之间。

这个鱼骨的构造非常巧妙,前面8节直接级联,只有一个输出。

这样8节以内的调整就跳过这根长鱼骨;而超过8节的调整就直接利用第一根鱼骨,然后在后面的8节中进行微调。

调整的输出分别供给IOB中的异步和同步单元,异步就是直接穿过IOB,同步则是经由存储单元流出IOB。

异步单元精度较高,可以单节调整,所以精度为250ps;同步单元精度稍低,两个节为单位调整,所以精度只有500ps。

上述内容看图便知可编程输入延迟的设置输入延迟的设置只能在Image配置的时候建立,在设备工作期间无法改变。

我想有两种方法可以改变输入延迟的设置:1. 通过延迟原语在代码中设置;2. 通过FPGA editor在P&R完成后在ngc文件中修改。

存储单元存储单元可以配置为D触发器,就是我们常说的FF,Xilinx称之为FD;也可以配置为锁存器,Xilinx称之为LD。

输出和三态通路各有一对寄存器外加一个MUX。

dcm代码语句解释

dcm代码语句解释

dcm代码语句解释
DCM(digital clock manager)是较高级FPGA产品中集成的专门用于时钟综合、消除时钟偏斜和进行时钟相位调整的固件资源,利用DCM 完成时钟倍频、分频、相移十分方便,给FPGA的系统时钟设计带来了方便,同时也带来了的可靠性问题
为了应用FPGA中内嵌的数字时钟管理(DCM)模块建立可靠的系统时钟。

首先对DCM的工作原理进行分析,然后根据DCM的工作原理给出了一种DCM动态重配置的设计方法。

DCM动态重配置设计是利用一个常有的时钟对DCM的工作状态标识进行监测,当DCM由于输入时钟的瞬时抖动或突然变化而失锁后,自动产生一个脉冲将DCM 复位,使其重新锁定并恢复正常工作。

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是带有时钟使能端的全局缓冲。

  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倍,完成了预定功能。

相关文档
最新文档