FPGA的时钟质量对设计的影响

小梅哥编写,未经许可严禁用于任何商业用途

近期,一直在调试使用Verilog编写的以太网发送摄像头数据到电脑的工程(以下简称以太网图传)。该工程基于今年设计的一款FPGA教学板AC620。AC620上有一个百兆以太网接口和一个通用CMOS摄像头接口,因此非常适合实现以太网图传功能。CMOS摄像头接口没有什么好说的,就是IO而已,这里先重点介绍下以太网接口。

以太网接口使用了一片10/100M自适应以太网收发器(PHY),型号为RTL8201。该芯片和FPGA采用标准的MII接口进行连接。什么是MII接口呢?这里暂不做任何介绍,因为今天要介绍的主角不是他。关于MII接口等以太网知识,可以关注小梅哥的FPGA以太网系列连载博客。简单点说,对于以太网发送数据来说,有一个发送时钟、一个发送使能信号和4位并行的数据发送信号,对于以太网接收数据,有一个接收时钟、一个接收数据有效信号和4位并行的数据接收信号。在发送时,发送使能信号有效,则每个字节的数据被拆分成2个4位的数据然后通过4位的数据信号,通过两个周期的时钟信号,依次传递到以太网PHY芯片,再由PHY进行并串转换,串行编码等工作后,将数据通过网络变压器加载到传输媒介(网线)上。在这里,以太网发送时钟是由以太网PHY芯片产生,然后送给FPGA使用的。该时钟信号一般叫做mii_tx_clk,当以太网速率为100Mbps时,该时钟信号为25MHz。而在FPGA侧,为了保证数据和控制信号的传输能够高度的同步于该以太网发送时钟信号,因此往往直接使用该以太网发送时钟信号作为相关时序逻辑的时钟信号。也因为这个要求,问题随之产生——该以太网时钟信号作为众多时序逻辑的时钟信号,其时钟质量和到达各个寄存器的时间最好也没有大的偏差,这样才能够保证时序收敛,从而使得设计的逻辑运行稳定。

在AC620 FPGA开发板上,该以太网发送时钟信号连接在了EP4CE10F17型FPGA的D11引脚上。而D11只是一个普通的FPGA输入输出管脚,非时钟输入管脚。因此从该引脚接入的信号如果不经过任何处理,将无法像专用时钟输入管脚上输入的信号一样被连接到全局时钟资源上。那么该时钟信号在FPGA片上进行走线时,只能使用片上的长线和短线布线资源,有时候甚至要通过LUT连接,才能到达各个寄存器。那么这里,问题就出现了,个人感觉的主要问题最起码有2点(不足的欢迎大家补充):

1、由于该时钟信号是通过各种长短布线资源,甚至经过LUT连接才能到达其驱动的各个寄存器,因此该时钟信号从进入FPGA管脚,到传递到各个寄存器的时钟输入端,其时间是很难保持相同的,距离的远近直接决定了该时钟信号的传输延迟。而这个传输延迟的差值,可能达到几纳秒甚至十几纳秒。这个差值,将直接影响数据的建立和保持时间,造成时序无法收敛,从而导致设计失败。我们可以通过下图更加直观的分析这个问题。

  • CLK认为是时钟输入脚输入的时钟信号。REG1是数据源,REG2是数据接收寄存器。REG1的输出端Q经过一段组合逻辑后连接到REG2的输入端D上。
  • REG1.CLK为CLK到达REG1的波形,相对于CLK,有一个延迟,设为Tclk1.
  • REG1.Q为REG1的输出端数据值,其值开始稳定下来时,相对于REG1.CLK,有一个延迟,设为Tco。
  • REG2.D为REG2的输入端D端口上的数据波形,该信号由REG1.Q经过组合逻辑传递后到达,因此REG1.Q到达REG2.D这个时间是数据传输时间,设为Tdata.
  • RERG2.CLK(OK)是使用全局时钟资源时理想的波形,这种情况下,认为CLK到达REG1和REG2的时间差很小。
  • RERG2.CLK(ERROR)是使用非全局时钟资源时的波形,这种情况下,认为CLK到达REG1和REG2的时间差可能较大,设这个差值为Tclk2。

由于REG2.D端口上的数据将在REG2.CLK的上升沿被采样,那么。当使用全局时钟资源时可以看到,在REG2.CLK的上升沿前后一段时间,数据是保持稳定的。而使用非全局时钟资源的时候,由于时钟走线的延迟,REG2.CLK到达REG2的时间将会有一个较大的差值,在这种情况下。在REG2.CLK的上升沿前后,REG2.D上的数据可能已经不稳定甚至变化了。因此导致数据接收失败。

2、使用非全局布线资源,时钟信号在布线的过程中更容易受到周围信号的干扰。导致时钟质量变差。什么意思呢?打个比方,一只小鸟和一只兔子共同穿越一个满是灰尘的工地。工地上到处都是灰尘。小鸟从空中飞过,不直接与灰尘接触,因此基本不会沾到灰尘,因为它有自己独立的路线和空间。而兔子因为不会飞,因此只能跑着从工地中穿过,那么,不可避免的,兔子的脚上会沾上灰尘。导致当兔子穿过这个工地的时候,早已由小白兔变成了小灰兔。时钟信号也是如此,全局时钟资源有专门的时钟路径,在自己的空间走线,不穿过或很少穿过各种高速翻转的逻辑区域,因此很少受到污染。而非全局时钟资源没有专门的时钟路径,只能使用通用布线资源,而这些布线不可避免的会穿过很多高速翻转的逻辑区域。从而受到这些逻辑的翻转噪声的污染。最终时钟信号变的很差。例如边沿上升和下降更慢,占空比发送变化,时钟抖动增大等。

好了,回到问题的开头,由于AC620开发板上以太网PHY芯片的mii_tx_clk是连接到了FPGA的普通IO口上,因此如果不经过处理,该时钟信号将不能走全局时钟资源,因此只能通过普通布线资源走线,从而导致到达各个寄存器的时间差别很大,而且受到各个高速翻转逻辑的噪声影响也很大,时钟抖动严重。所以,当该时钟信号驱动的逻辑过多时,势必导致整个设计时序无法收敛,然后就会出现各种各样的问题。

接下分析下我所编写的以太网发送逻辑。由于该逻辑主要为讲解以太网的各种协议而设计,而以太网协议最典型的特征就是数据是分层打包的。因此我在设计该逻辑的时候也严格按照以太网分层的方式进行。分别为MAC层、IP层、UDP层和用户数据层。在MAC层、IP层和UDP层,我都使用了PHY提供的这个时钟信号,所以导致该时钟信号的扇出非常的高。

从Quartus II软件的编译报告可以看出,该时钟信号的扇出为193个。是所有非全局信号中扇出最高的。这么高扇出的一个信号,还是时钟,可以想象该时钟到达这193个位置的路径有多少种可能,要经过多少布线链接。可想而知该时钟信号有多差。所以,我在调试时候出现的问题就是——不做任何修改,将该工程编译多次,有的时候编译得到的sof文件下载进芯片后能跑一整夜不宕机,而有的时候编译得到的sof文件下载进入芯片后几秒钟内就宕机了。

为了解决这个问题,需要将mii_tx_clk这个时钟信号分配到全局时钟资源上。这样该时钟信号就能走全局时钟资源,扇出再多,也能差不多同时到达各个寄存器。也有了自己的专线,不用从灰尘里滚爬,不怕小白兔变小灰兔。

首先看下全局资源的使用情况,如下图。

可以看到,PLL的4个输出,复位输入,以及晶振输入的50M时钟(clk)都被分配到了全局时钟资源上,尤其是clk信号,扇出高达1018个。

那么怎样才能让我们普通IO输入的时钟信号mii_tx_clk信号也能进入全局时钟资源呢?在Cyclone IV E器件中,有这样的专用缓冲器,该缓冲器可以将普通IO或者寄存器产生的时钟信号分配到全局时钟资源上。该缓冲器对用户以IP的形式提供,在IP列表的IO分组中,名称叫做ALTCLKCTRL,如下图所示。

设置也非常简单只需选择该时钟控制器的用途,我们这里设置为"For global clock"。另外在输入数量那里选择相应的值即可,我们这里只需将mii_tx_clk接入全局时钟资源,不需要做多时钟切换,因此数量选择1,设置完成后点击finish即可。

将该IP例化到我们的设计中,先定义一个mii_tx_clk_g,代表走全局时钟资源的mii_tx_clk信号。然后将输入的mii_tx_clk信号连接到这个缓冲器的输入,将缓冲器的输出连接到mii_tx_clk_g上即可,再由mii_tx_clk_g作为时钟信号驱动之前的所有时序逻辑。如下图所示。


wire mii_tx_clk_g;

clk_ctrl clk_ctrl(

.inclk(mii_tx_clk),

.outclk(mii_tx_clk_g)

);

通过该缓冲器,将mii_tx_clk信号连接到了全局时钟资源上,再通过全局时钟资源去连接到各个寄存器,则时钟延迟和时钟抖动都变的很小,使得时序易于收敛,设计出来的系统就更加稳定了。下图为通过该缓冲器将mii_tx_clk分配到全局时钟信号上后的全局资源使用图,可以看到,mii_tx_clk信号已经被分配到了全局时钟资源上。再由此方式编译得到的sof文件,烧写到AC620开发板中,能持续稳定运行。再次编译工程,再下载测试,都能稳定运行,问题得以解决。

下图为使用AC620开发板进行以太网图传的实际照片。

总之,还是那句话:学无止境,治学严谨,学以致用。我是小梅哥,欢迎大家关注我,一起学习FPGA技术。

小梅哥

2017年7月8日星期六

武汉.光谷

时间: 2024-08-27 02:08:39

FPGA的时钟质量对设计的影响的相关文章

FPGA异步时钟设计中的同步策略

1 引言    基于FPGA的数字系统设计中大都推荐采用同步时序的设计,也就是单时钟系统.但是实际的工程中,纯粹单时钟系统设计的情况很少,特别是设计模块与外围芯片的通信中,跨时钟域的情况经常不可避免.如果对跨时钟域带来的亚稳态.采样丢失.潜在逻辑错误等等一系列问题处理不当,将导致系统无法运行.本文总结出了几种同步策略来解决跨时钟域问题. 2 异步设计中的亚稳态    触发器是FPGA设计中最常用的基本器件.触发器工作过程中存在数据的建立(setup)和保持(hold)时间.对于使用上升沿触发的触

FPGA 异步时钟处理方

1 如果FPGA设计中包含不同频率的时钟,就会涉及异步时钟的问题.我们需要一些方法来使得时钟同步,从而保证FPGA设计的可靠性. 2 在建立和保持时间所构成的有效时间窗口内,数据输入到触发器进行转换.如果数据的到达时间不满足建立或者保持时间就会产生时序冲突.此时触发器的输出就有可能停留在非逻辑0 或1 的范围内(这个状态叫做准稳态),从而造成逻辑错误. 3 如果异步时钟的相位不能够完全对齐就有可能引起2中所述的故障,而且这种故障是不可再现的,也无法通过仿真发现. 4 解决方法,即时钟同步问题:

【FPGA】006 【优化设计FPGA全局时钟管理模块】

1.rst_n--异步复位设计 1 `timescale 1ns/1ns 2 module FPGA_temp 3 ( 4 input clk, 5 input rst_n, 6 7 input a, 8 output reg b 9 ); 10 always@(posedge clk or negedge rst_n) 11 begin 12 if(!rst_n) 13 b <= 0; 14 else 15 b <= a; 16 end 17 endmodule  没有对复位信号进行处理,当

xilinx FPGA全局时钟资源的使用

1.什么是xilinx fpga全局时钟资源 时钟对于一个系统的作用不言而喻,就像人体的心脏一样,如果系统时钟的抖动.延迟.偏移过大,会导致系统的工作频率降低,严重时甚至会导致系统的时序错乱,实现不了预期的逻辑功能.xilinx fpga内的全局时钟资源可以很好的优化时钟的性能,因此在设计时要尽可能多的使用fpga内部的时钟资源.xilinx fpga内部的全局时钟采用全铜工艺实现,配合专用时钟缓冲和驱动结构,可以使进入全局时钟网络的时钟到达fpga内部各个逻辑单元的抖动和延迟最小.全局时钟资源

Xilinx FPGA全局时钟和全局时钟资源的使用方法

对FPGA的全局时钟了解不多,遂转载一篇文档: http://xilinx.eetop.cn/?action-viewnews-itemid-42 目前,大型设计一般推荐使用同步时序电路.同步时序电路基于时钟触发沿设计,对时钟的周期.占空比.延时和抖动提出了更高的要求.为了满足同步时序设计的要求,一般在FPGA设计中采用全局时钟资源驱动设计的主时钟,以达到最低的时钟抖动和延迟. FPGA全局时钟资源一般使用全铜层工艺实现,并设计了专用时钟缓冲与驱动结构,从而使全局时钟到达芯片内部的所有可配置单元

FPGA多时钟处理应用

FPGA项目设计中,通常会遇到多时钟处理.即一个PLL输出多个时钟,根据条件选择合适的时钟用作系统时钟.方案一: 外部晶振时钟进入PLL,由PLL输出多个时钟,MUX根据外部条件选择时钟输出做为系统使用. 方案在时钟频率比较低的情况下是可行的.设计时注意MUX使用组合逻辑实现的,注意case语句中default选项必须有输出,否则会出现锁存器. 当输出时钟频率较高时,这种方案的时序约束就比较麻烦.除了使用creat_clock命令约束PLL输入时钟,使用creat_generate_clock约

Xilinx FPGA控制器的Everspin STT-DDR4设计指南

自旋转移扭矩磁阻随机存取存储器(STT-MRAM)是一种持久性存储技术,可利用各种工业标准接口提供了性能,持久性和耐用性. Everspin推出了STT-MRAM产品,该产品利用称为JE-DDR4的JEDEC标准DDR4接口的变体,它包含了对完整系统支持所需的独特功能.本文将帮助工程师了解Xilinx FPGA控制器的Everspin STT-DDR4设计指南 2.启用ST-DDR4为了使设计人员能够快速集成ST-DDR4支持,该过程从Xilinx Vivado开发环境中生成的现有8Gb DDR

FPGA的FIR抽取滤波器设计

摘 要:本文介绍了FIR抽取滤波器的工作原理,重点阐述了用XC2V1000实现FIR抽取滤波器的方法,并给出了仿真波形和设计特点. 关键词:FIR抽取滤波器:流水线操作:FPGA 用FPGA实现抽取滤波器比较复杂,主要是因为在FPGA中缺乏实现乘法运算的有效结构,现在,FPGA中集成了硬件乘法器,使FPGA在数字信号处理方面有了长足的进步.本文介绍了一种采用Xilinx公司的XC2V1000实现FIR抽取滤波器的设计方法. 具体实现 结构设计 基于抽取滤波器的工作原理,本文采用XC2V1000实

【设计开发】 玩转FPGA (DE2-115) - 1602 LCD接口设计

一.前言 闲来无事,在X宝上搜寻了一套DE2-115的FPGA开发板以丰富业余生活.虽附带光盘里包含各外设及组件驱动及接口样例,但本着"不捣腾不痛快"的折腾精神,将DE2-115的各个外设重新整理并玩转一遍. DE2-115全貌见下图,LCD1602是一个简单.实用的显示交互界面:DE2-115中的1602不支持中文字库. 二.接口说明 1602 LCD模块接口如下图所示,对几个信号做简要说明: #4 (RS) - DB内容指示信号:0-当前DB数据为命令数据:1-当前DB数据为显示数