FPGA_clock1
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)。
fpga参考时钟

fpga参考时钟
FPGA(Field-Programmable Gate Array,现场可编程门阵列)通常需要使用参考时钟来同步其逻辑运算和数据传输。
参考时钟是一个稳定、可靠且精确的时钟信号,是FPGA内部操作和外部接口的基准。
选择FPGA的参考时钟需要考虑以下几点:
1.时钟源选择:参考时钟通常由外部时钟源提供,如晶体振
荡器或频率发生器。
选择合适的时钟源应根据应用需求和性能要求进行。
2.时钟频率选择:根据FPGA的设计要求和外部相关设备的
接口要求,选择适当的时钟频率。
同时,考虑时钟单元(Clocking Resources)在FPGA内部的供应和分配能力,以保证设计的正确性和稳定性。
3.同步和相位关系:FPGA内部的各个模块需要在时钟的上
升沿或下降沿处进行同步。
因此,在设计过程中,需要考虑好各个模块之间、FPGA与外部设备之间的时钟同步和相位关系。
4.时钟分配:在FPGA设计中,需要合理分配时钟信号以满
足不同模块的时钟需求。
根据设计的复杂性,可以使用时钟分频、时钟倍频、时钟延迟等技术来生成和调整时钟信号。
5.时钟约束:在FPGA设计环境中,应使用时钟约束(Clock
Constraints)来指定时钟信号的性质、约束和时序要求。
这样,设计工具可以更好地优化和验证时钟分配、数据路
径和时序关系。
综上所述,选择FPGA的参考时钟需要考虑时钟源、时钟频率、同步关系、时钟分配和时钟约束等因素。
合理选择和设计参考时钟对于保证FPGA设计的正确性、性能和可靠性至关重要。
fpga时钟相位

fpga时钟相位(原创实用版)目录1.FPGA 时钟处理单元的发展与概述2.FPGA 中常见的时钟处理单元3.如何调整 FPGA 中的时钟相位4.FPGA 时钟相位的应用案例5.总结正文FPGA(现场可编程门阵列)是一种集成电路,可以由用户编程和配置,以实现特定的功能。
在 FPGA 中,时钟处理单元是至关重要的组成部分,因为它们负责处理和控制时钟信号,以确保各个组件按照正确的节拍工作。
随着 FPGA 技术的不断发展,时钟处理单元也在不断改进,以满足日益增长的性能需求。
1.FPGA 时钟处理单元的发展与概述FPGA 发展至今,已经推出了许多系列。
例如,Xilinx 公司推出了Zynq 系列,该系列 FPGA 集成了处理器、内存和可编程 I/O,提供了更高的灵活性和性能。
此外,Xilinx 还推出了新工具 Vitis,用于协助用户设计和开发 FPGA。
在 Vitis 中,用户可以轻松创建和配置时钟处理单元。
在 FPGA 中,常见的时钟处理单元包括 MMCM(Multi-MCM)和 PLL (Phase-Locked Loop)。
MMCM 是一种时钟管理单元,用于将多个时钟信号整合为一个统一的时钟树。
PLL 则是一种时钟生成器,可以通过锁相环技术产生具有固定相位的时钟信号。
在 7 系列 FPGA 中,用户可以清晰地看到这些时钟处理单元。
2.FPGA 中常见的时钟处理单元除了 MMCM 和 PLL 之外,FPGA 中还有其他类型的时钟处理单元。
例如,DCM(Digital Clock Manager)是一种数字时钟管理器,用于控制和调节时钟信号的频率、相位和占空比。
在早期的 FPGA 中,DCM 是主要的时钟处理单元。
随着技术的发展,DCM 逐渐被 MMCM 和 PLL 所取代。
3.如何调整 FPGA 中的时钟相位在 FPGA 中调整时钟相位,通常可以通过修改时钟处理单元的配置来实现。
例如,对于 PLL,用户可以通过调整锁相环的参数,如参考时钟频率、反馈电阻等,以改变输出时钟的相位。
fpga 门控时钟 功耗

fpga 门控时钟功耗FPGA(可编程逻辑门阵列)是一种灵活的集成电路芯片,其门控时钟和功耗是在设计和应用FPGA时需要考虑的重要因素。
下面将介绍FPGA的门控时钟和功耗的相关概念和影响因素:1.门控时钟:FPGA中的门控时钟(Clock Gating)技术是一种用来减小功耗的技术。
它基于时钟信号,通过控制特定部分的电路时钟使能信号,实现对电路的部分停止或冻结。
通过精确控制时钟信号的分配,可以降低那些不需要运行或处于空闲状态的部分的功耗。
2.功耗:FPGA的功耗是指FPGA芯片在工作中消耗的电能。
FPGA的功耗由多个因素决定,包括运行的电路逻辑、时钟频率、输入输出功耗、时钟和数据冲突等。
功耗的高低直接影响到芯片的工作稳定性、散热需求和电池寿命等。
影响FPGA功耗的因素包括:•逻辑电路:芯片中运行的逻辑电路数量和复杂度直接影响功耗。
•时钟频率:时钟频率越高,功耗也越高。
高时钟频率可能需要更多的功率来驱动逻辑和开关电容。
•输入输出功耗:与外部设备的通信和I/O电路相关的功耗。
•激活逻辑:即芯片中具体逻辑的使用情况,未使用或未激活的逻辑不会消耗功耗。
•工艺制程:不同的工艺制程也会影响功耗,先进的工艺通常具有更低的功耗。
减小FPGA的功耗可以通过以下策略实施:•优化逻辑设计:减少逻辑元件的数量和复杂度,精简逻辑电路。
•优化时钟频率:选择适当的时钟频率,以平衡性能和功耗。
•使用门控时钟技术:通过控制部分电路的时钟使能信号,降低空闲电路的功耗。
•合理布局和布线:减少布线的长度和电容负载,优化功耗表现。
在设计和实现FPGA时,需要综合考虑门控时钟和功耗,根据实际需求进行优化和权衡。
同时,对于特定的应用场景,还可以选择适合的低功耗模式、电源管理和时钟路由等技术,以进一步减小FPGA的功耗。
fpga时钟约束语法

fpga时钟约束语法FPGA(现场可编程门阵列)是一种基于硬件描述语言(HDL)进行逻辑设计的可编程电子器件。
在FPGA设计中,时钟约束是非常重要的一部分,它决定了电路中时钟信号的起始、结束时间、时钟的频率以及时钟和其他信号之间的关系。
时钟约束语法指的是在HDL代码中编写时钟约束的语法规则和格式。
时钟约束语法主要由以下几个部分组成:时钟名称,时钟频率,时钟周期,时钟延迟和时钟关系等。
1.时钟名称:时钟名称是一个唯一的标识符,用于区分不同的时钟信号。
在FPGA设计中,通常会有多个时钟信号,每个时钟信号都应该有一个独立的名称。
2.时钟频率:时钟频率指的是时钟信号的周期性重复的时间间隔。
在时钟约束语法中,我们可以指定时钟频率的最小值和最大值。
这个范围可以根据实际的设计要求进行设置。
3.时钟周期:时钟周期是时钟信号从一个上升沿到下一个上升沿的时间间隔。
在时钟约束语法中,我们可以指定时钟周期的最小值和最大值。
通常,对于同一个时钟信号,其最小周期和最大周期应该尽量接近。
4.时钟延迟:时钟延迟指的是时钟信号到达其他逻辑元件的时间。
在时钟约束语法中,我们可以指定时钟延迟的最大值和最小值。
时钟延迟包括时钟信号从发生器到寄存器的传播延迟和时钟信号从寄存器到发生器的传播延迟。
5.时钟关系:时钟关系指的是时钟信号与其他信号之间的时序关系。
在时钟约束语法中,我们可以指定两个信号之间的相对关系,例如两个信号的寄存器之间的延迟应该小于或等于一个特定的值。
在FPGA设计中,使用时钟约束语法可以确保电路中的时钟信号能够按照预期的方式运行。
这样可以提高电路的性能和稳定性,并减少潜在的时序问题。
下面是一个简单的时钟约束语法示例:```verilogcreate_clock -period 10 [get_pins clk] //设置时钟频率为10ns,clk为时钟信号名称set_input_delay 5 -clock [get_pins clk] [get_pins input] //设置输入信号的时钟延迟为5nsset_output_delay 3 -clock [get_pins clk] [get_pins output] //设置输出信号的时钟延迟为3nsset_max_delay 8 -from [get_pins input] -to [get_pins output] -clock [get_pins clk] //设置输入信号到输出信号的最大时钟延迟为8ns```在上面的示例中,`create_clock`命令用于设置时钟频率,`set_input_delay`和`set_output_delay`命令用于设置输入和输出信号的时钟延迟,`set_max_delay`命令用于设置输入信号到输出信号的最大时钟延迟。
fpga内dcm全局时钟的使用详解

在 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的功能包括消除时钟的延时、频率的合成、时钟相位的调整等系统方面的需求。
FPGA原理与应用综合练习题

第一阶段测验本卷共分为1大题24小题,总分100 分。
本卷得分:100•1.变量和信号的描述正确的是()。
A.变量赋值号是:=2.在EDA中,IP的中文含义是()。
D.知识产权核3.可编程逻辑器件的英文简称是()。
D.PLD4.现场可编程门阵列的英文简称是()。
A.FPGA5.不属于顺序语句的是()。
B.LOOP语句6.VHDL中顺序语句放置位置说法正确的是()。
D.前面的说法都正确7.VHDL运算符优先级的说法正确的是()。
C.逻辑运算的优先级最低8.使用STD_LOGIG_1164使用的数据类型时()。
B.必须在库和包集合中声明9.可以不必声明而直接引用的数据类型是()。
C.BIT10.关于VHDL数据类型,正确的是()。
B.用户可以定义子类型11.关于VHDL数据类型,正确的是()。
D.运算与数据类型无关12.变量和信号的描述正确的是()。
B.信号可以带出进程13.在VHDL语言中,下列对进程(PROCESS)语句的语句结构及语法规则的描述中,不正确的是_____。
C.进程由说明部分、结构体部分、和敏感信号三部分组成;(进程由声明语句、顺序语句、敏感信号列表组成)14.VHDL语言中信号定义的位置是()。
D.结构体中特定位置15.关于1987标准的VHDL语言中,标识符描述正确的是()。
B.下划线不能连用16.描述项目具有逻辑功能的是()。
B.结构体17.一个项目的输入输出端口是定义在()。
A.实体中18.关于VHDL中的数字,请找出以下数字中最大的一个:_____。
(整型数字的表示) A.2#1111_1110#--二进制数,下划线不影响数值大小,只是增强可读性,转换成10进制数为:25419.下列标识符中,_____是不合法的标识符。
(标识符开头必须是英文字符)B.9moon20.LIBRARY___;--库的声明USEIEEE.STD_LOGIC_1164.ALL;--库的引用,引用IEEE库中的std_logic_1164中的所有项目 A.IEEE21.VHDL语言是一种结构化设计语言;一个设计实体(电路模块)包括实体与结构体两部分,结构体描述____。
xilinx fpga中时钟输入管脚的约束

xilinx fpga中时钟输入管脚的约束在Xilinx FPGA中,时钟输入管脚的约束是非常重要的,它决定了时钟信号的稳定性和数据流的正确性。
以下是一些关于时钟输入管脚约束的相关参考内容。
1. 器件手册在Xilinx FPGA的器件手册中,通常会提供关于时钟输入管脚的详细信息。
这些信息包括时钟输入管脚的功能、电气特性、使用限制等。
器件手册还可能提供特殊的时钟输入约束,如最大工作频率、时钟插入延迟等。
2. 约束文件在设计FPGA时,通常会使用一个约束文件来指定设计中的时钟输入管脚的相关约束。
约束文件是一个文本文件,其中可以定义各种约束,如时钟频率、时钟插入延迟、时钟占空比等。
对于时钟输入管脚,约束文件通常会指定时钟源(如外部晶振或PLL)以及时钟的时钟域和时钟频率。
3. Vivado Design Suite User GuideVivado是Xilinx FPGA的设计工具套件,其用户指南提供了关于时钟输入管脚约束的详细信息。
用户指南中包含了各种约束的语法和用法,如时钟约束(CLOCK)以及时钟域(CLOCK_DOMAIN)。
用户指南还提供了一些示例和最佳实践,帮助设计师正确地约束时钟输入管脚。
4. 库元件和IP核的文档库元件和IP核是在FPGA设计中常用的组件。
对于这些组件,文档中通常会提供有关时钟输入管脚约束的信息。
例如,文档可能会包含有关时钟输入的建议,如时钟频率范围、时钟上升/下降时间要求等。
5. 官方论坛和社区Xilinx官方论坛和其他在线社区,如Xilinx FPGA设计社区,是一个寻求技术支持和问题解答的好地方。
这些论坛中的讨论和帖子通常包含关于时钟输入管脚约束的有用信息,如如何正确约束复杂时钟结构、如何解决时钟插入延迟等。
6. 应用笔记和技术文章Xilinx和其他第三方通常会发布一些应用笔记和技术文章,分享关于FPGA设计的有用信息。
这些文档中可能包含有关时钟输入管脚约束的实用技巧和教程,如如何避免时钟抖动、如何降低时钟插入延迟等。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
关于时钟的讨论
无沦是用离散逻辑、可编程逻辑,还是用全定制硅器件实现的任何数字设计,为了成功地操作,可靠的时钟是非常关键的。
设计不良的时钟在极限的温度、电压或制造工艺的偏差情况下将导致错误的行为,并且调试困难、花销很大。
在设计PLD/FPGA时通常采用几种时钟类型。
时钟可分为如下四种类型:全局时钟、门控时钟、多级逻辑时钟和波动式时钟。
多时钟系统能够包括上述四种时钟类型的任意组合。
1.全局时钟
对于一个设计项目来说,全局时钟(或同步时钟)是最简单和最可预测的时钟。
在PLD/FPGA设计中最好的时钟方案是:由专用的全局时钟输入引脚驱动的单个主时钟去钟控设计项目中的每一个触发器。
只要可能就应尽量在设计项目中采用全局时钟。
PLD/FPGA都具有专门的全局时钟引脚,它直接连到器件中的每一个寄存器。
这种全局时钟提供器件中最短的时钟到输出的延时。
图1 示出全局时钟的实例。
图1 定时波形示出触发器的数据输入D[1..3]应遵守建立时间和保持时间的约束条件。
建立和保持时间的数值在PLD数据手册中给出,也可用软件的定时分析器计算出来。
如果在应用中不能满足建立和保持时间的要求,则必须用时钟同步输入信号(参看下一章“异步输入”)。
图1 全局时钟
(最好的方法是用全局时钟引脚去钟控PLD内的每一个寄存器,于是数据只要遵守相对时钟的建立时间tsu和保持时间th)
2.门控时钟
在许多应用中,整个设计项目都采用外部的全局时钟是不可能或不实际的。
PLD具有乘积项逻
辑阵列时钟(即时钟是由逻辑产生的),允许任意函数单独地钟控各个触发器。
然而,当你用阵列时钟时,应仔细地分析时钟函数,以避免毛刺。
通常用阵列时钟构成门控时钟。
门控时钟常常同微处理器接口有关,用地址线去控制写脉冲。
然而,每当用组合函数钟控触发器时,通常都存在着门控时钟。
如果符合下述条件,门控时钟可以象全局时钟一样可靠地工作:
1.驱动时钟的逻辑必须只包含一个“与”门或一个“或”门。
如果采用任何附加逻在某些工作状态下,会出现竞争产生的毛刺。
2.逻辑门的一个输入作为实际的时钟,而该逻辑门的所有其它输入必须当成地址或控制线,它们遵守相对于时钟的建立和保持时间的约束。
图2和图3 是可靠的门控时钟的实例。
在 图2 中,用一个“与”门产生门控时钟,在 图3 中,用一个“或”门产生门控时钟。
在这两个实例中,引脚nWR和nWE考虑为时钟引脚,引脚ADD[o..3]是地址引脚,两个触发器的数据是信号D[1..n]经随机逻辑产生的。
图2 “与”门门控时钟
图3 “或”门门控时钟
图2和图3 的波形图显示出有关的建立时间和保持时间的要求。
这两个设计项目的地址线必须在时钟保持有效的整个期间内保持稳定(nWR和nWE是低电平有效)。
如果地址线在规定的时间内未保持稳定,则在时钟上会出现毛刺,造成触发器发生错误的状态变化。
另一方面,数据引脚D[1..n]只要求在nWR和nWE的有效边沿处满足标准的建立和保持时间的规定。
我们往往可以将门控时钟转换成全局时钟以改善设计项目的可靠性。
图4 示出如何用全局时钟重新设计 图2 的电路。
地址线在控制D触发器的使能输入,许多PLD设计软件,如MAX+PLUSII软件都提供这种带使能端的D触发器。
当ENA为高电平时,D输入端的值被钟控到触发器中:当ENA为低电平时,维持现在的状态。
图4 “与”门门控时钟转化成全局时钟
图4 中重新设计的电路的定时波形表明地址线不需要在nWR有效的整个期间内保持稳定;而只要求它们和数据引脚一样符合同样的建立和保持时间,这样对地址线的要求就少很多。
图 给出一个不可靠的门控时钟的例子。
3位同步加法计数器的RCO输出用来钟控触发器。
然而,计数器给出的多个输入起到时钟的作用,这违反了可靠门控时钟所需的条件之一。
在产生RCO信号的触发器中,没有一个能考虑为实际的时钟线,这是因为所有触发器在几乎相同的时刻发生翻转。
而我们并不能保证在PLD/FPGA内部QA,QB,QC到D触发器的布线长短一致,因此,如 图5 的时间波形所示,在器从3计到4时,RCO线上会出现毛刺(假设QC到D触发器的路径较短,即QC的输出先翻转)。
图5 不可靠的门控时钟
(定时波形示出在计数器从3到4改变时,RCO信号如何出现毛刺的)
图6 给出一种可靠的全局钟控的电路,它是图5不可靠计数器电路的改进,RCO控制D触发器的使能输入。
这个改进不需要增加PLD的逻辑单元。
图6 不可靠的门控时钟转换为全局时钟
(这个电路等效于图5电路,但却可靠的多)。