1

关于投票
大型设计中FPGA的多时钟设计策略

利用FPGA实现大型设计时,可能需要FPGA具有以多个时钟运行的多重数据通路,这种多时钟FPGA设计必须特别小心,需要注意最大时钟速率、抖动、最 大时钟数、异步时钟设计和时钟/数据关系。设计过程中最重要的一步是确定要用多少个不同的时钟,以及如何进行布线,本文将对这些设计策略深入阐述。

FPGA设计的第一步是决定需要什么样的时钟速率,设计中最快的时钟将确定FPGA必须能处理的时钟速率。最快时钟速率由设计中两个触 发器之间一个信号的传输时间P来决定,如果P大于时钟周期T,则当信号在一个触发器上改变后,在下一个逻辑级上将不会改变,直到两个时钟周期以后才改变, 如图1所示。

传输时间为信号在第一个触发器输出处所需的保持时间加上两级之间的任何组合逻辑的延迟,再加两级之间的布线延迟以及信号进入第二级触发器的设置时 间。无论时钟速率为多少,每一个FPGA设计所用的时钟必须具有低抖动特性。抖动S是触发器的一个时钟输入到另一个触发器的时钟输入之间的最大延迟。为使 电路正常工作,抖动必须小于两个触发器之间的传输时间。

图2显示了如果抖动大于传输时间(S>P)将出现的情况,该电路用时钟的两个上升沿来延迟信号1。然而,信号1上的一个改变会在相同的时钟周期上传输到的信号3上,从而引起信号2的改变。因为S>P,电路将不能不正常。

须注意的是,时钟速率与传输延时并没有什么关系,甚至普通的100bps时钟也会出现抖动问题。这意味着虽然FPGA供应商宣称他们的芯片具有较短的传输时间和很高的时钟速率,但抖动问题可能会严重,甚至那些没有运行在最高速率上的设计也是如此。

好在FPGA供应商已经认识到时钟抖动的影响,并在他们的芯片中提供低抖动的布线资源。这些特殊的布线能够在芯片中一个给定范围内的任何两个触发器 之间提供一个确定的最大抖动。部分产品的低抖动资源覆盖了整个芯片,而其它的则可能只覆盖了FPGA逻辑块中的一个特定的行或列。对于一个需要很多不同时 钟源的设计,这些低抖动FPGA是比较理想的选择。

多时钟设计的最严重问题之一是用异步时钟将两级逻辑结合在一起。由于异步时钟会产生亚稳态,从而严重降低设计性能,或完全破坏设计所能实现的功能。 在触发器的时序要求产生冲突时(设置时间和保持时间)将产生亚稳态,触发器的最终输出是未知的,并使整个设计处于不确定状态。如果有一级逻辑要将数据异步 地发送到另一级,图3所示的情形将不能满足触发器的设置和保持时间要求。确切地说,如果设计中含有异步逻辑将有可能会产生亚稳态。在处置异步资源时必需非 常小心,因为这可能产生一些很严重的问题。

多时钟设计

本文以电信应用中的E3多路复用/解复用设计为例。如图4所示,多路复用器接收来自一组独立线路接口芯片的16个独立E1信道,每一个信道都工作于 2.048MHz;经复用后,这些E1流组合成4个E2流,分别工作在8.0448MHz;4个E2流最后组合成一个E3流,以34.368Mbps的速 率串行发送出去。在接收端执行相反的操作:解复用器从E3流提取4个E2数据流,然后从E2流提取16个E1流,最终将E1流发送到接收端的线路接口芯 片。

这些E1线路接口在发送和接收时都独立工作,因此2.048MHz的时钟速率可以有+/- 20ppm的偏差。同样,因为大多数系统同时发送和接收数据,分立的多路复用器和多路解复用器将提供2个独立的E3流(发送和接收)。因此,两个 34.368MHz的时钟可以存在细微的差异。

由于E2流是在芯片上产生的,这些E2多路复用器可以共享同一个8.448MHz时钟。然而,由于接收的数据速率与我们所设计的板无关(且不能假定所有E2多路复用器使用相同时钟),所以E2解复用器时钟必须能工作在略为不同的速率下。

此外,假定设计中需要一个由工作频率为1MHz的处理器控制的独立SPI(串行外围接口)总线接口,该接口用于状态和控制。这样一来,设计中总共用 了32个2.048MHz时钟,5个8.448MHz时钟,2个34.368MHz时钟和一个1MHz时钟,总共多达40个时钟。

本设计中最快时钟是34.368MHz E3时钟。FPGA的最大时钟速率的确定很重要,因为设计的差异将影响到该最大值。然而,在芯片商的资料手册中常常可以看到“全局时钟设置及保持时间”和 “至CLB输出的时钟”两个参数,将这两个参数的最大值相加,再增加25%就能可以得到最小时钟周期的初略值,在最大时钟速率条件下允许10%的余量,以 保证过热条件下能正常工作。因此,我们设置的最小速率为40MHz,很多较新的FPGA都能够很容易地支持该频率。事实上,FPGA供应商已经推出了超过 300MHz的器件。

在确定了能满足最大频率要求的FPGA后,就需要保证有足够的空间来实现你的设计。如果所选的FPGA没有足够的余量,就不能提供足够的布线资源来 满足设计的时序约束。通常芯片供应商宣称的速率是最佳条件下的速率,FPGA供应商一般建议FPGA逻辑在布线功能开始明显变差以前可以用到80%。在选 择FPGA器件时,建议在新的设计时最好使FPGA逻辑用到50%左右,这样就允许计算起始设计大小出现超差,以及为在设计起动后产生不可避免的设计变更 留出空间。如果最终的设计只占用低于50%的资源,则可以使用同一系列中较小的FPGA以降低成本。

通过时序约束来规定慢时钟速率,从而可以改进设计中最快时钟的布线。在多路复用器例子中,如果设置FPGA布线工具SPI总线时钟为1MHz,而 E3时钟为40MHz,布线工具将尽量使E3时钟的逻辑电路模块相邻布局。如果由于空间的限制而不能将全部电路布局在一起,则首先应将SPI逻辑另外布 局,因为SPI逻辑可以处理更长传输延迟。所有FPGA供应商的布线工具都能规定这些较慢时钟速率。

减少时钟数量

根据市场调查,目前还没有哪个FPGA器件能够支持这种多路复用器/解复用器设计所需的40个时钟。所以,我们必须减少所需要的时钟数。

首先了解E2和E3多路复用器的时钟。前面已经分析了4个E2多路复用器工作在相同时钟下的可接受度,E3多路复用器运行于比E2时钟高得多的速 率,必需使用一个不同的时钟。但是,如果我们从E3时钟中引出E2时钟是否可行呢?因为E3多路复用器要从每个E2支路得到数据,我们可以在需要E2多路 复用器给我们数据时,简单地将脉冲送给每个多路复用器。我们没有去掉任何时钟,但E2时钟现在是基于E3时钟。

如果在所有的多路复用器中也使用同样的时钟,并且只使用一个使能信号来告诉E2多路复用器什么时候工作,这时会产生什么问题呢?如果E3多路复用器 用34.368MHz时钟产生使能信号,在这些使能信号上的抖动不会比用在FPGA中任何其它同步逻辑更大。所以,使能信号可以使用正常(高抖动)布线资 源,这样就不需要单独的8.448MHz多路复用器时钟,读取E1数据缓冲器的数据时也是一样。换言之,如果E2多路复用器需要数据,它可以激活到特定缓 冲器的使能信号。到缓冲器的时钟本身能够保持E3多路复用器所用的34.368MHz时钟,如图5所示。

最后,我们检查16个从线路接口芯片输入到FPGA的E1时钟。这些时钟有会产生下面几个问题:首先,16个时钟将占用太多可用芯片时钟布线资源; 其次,在同一个FPGA中使用16个异步时钟来驱动相互邻近的触发器,由于地弹、串扰和其它效应将产生噪声问题。例如,由于噪声的原因,一个正边沿触发器 会在下降边沿时改变输出状态,此类问题将难以处理。

作为一种可能的解决方案,我们推荐使用一个最快的时钟来对16个E1时钟采样。16个输入时钟都接近2.048MHz,并且还有一个 34.368MHz的系统时钟。这样,我们可以用34.368MHz时钟来对16个E1时钟分别进行采样,并将结果存储在一个16位存储器中(每个E1时 钟一个位)。然后,我们可以使用一个算法来检测在E1时钟上由低至高的转换,为每一个E1数据信号产生一个使能信号,并在下一个周期 (34.368MHz)中存储数据。

要成功实现这种方案,还必需了解时钟-数据关系以避免在数据变化时对数据采样,参见图6。请注意在时钟采样电路的第一级中使用了两个触发器以确保在亚稳态下正常工作。另外需要注意的是,数据和时钟必须具有相同时钟周期数的延迟。

我们已经成功地将多路复用器的时钟减少到一个时钟,同样的方法可否用在解复用器呢?E3解复用器必须采用一个外部输入时钟,这是因为驱动E3输入数 据的同一个片外器件利用到该时钟。由于E3解复用器知道在什么时候发送数据到E2解复用器,并能对每个E2解复用器产生使能信号,而四个E2解复用器能工 作在与E3多路复用器相同的主时钟下。同样,E2多路复用器能够为每个E1流产生使能信号。

如果我们假设线路接口芯片能够接受有间隙的时钟(gapped clock),一旦确定发出E1使能信号,我们只需要发送一个时钟脉冲至线路接口。然而,只需要简单地发送使能信号本身至接口芯片而不必产生一个新的时 钟。因为送至接口的数据将在使能信号的下降沿产生改变(参见图5),我们需要确认接口在时钟的上升沿进行采样。因为使能信号仅在线路接口芯片上而不是在 FPGA内用作一个时钟,就没有必要在一个低抖动源中进行布线。注意这是在知道将再也不会用主时钟的连续脉冲送数据到相同的从属器件中时才这样做。

1MHz SPI时钟并不能简单去掉,但我们现在通过使用使能信号和时钟过采样技术,将原先40个时钟减少到3个,这样我们就有了更大的器件选择范围。

异步时钟

在用异步时钟产生任何逻辑前应该尽量先考虑采用其它替代方法,用异步时钟的组合逻辑是产生亚稳态问题的主要原因。同样,当违反触发器的设置和保持时间约束时,在一个短时间内输出将具有不确定性,并且将最终设定在“1”或“0”上,确切的状态不可预知。

幸运的是对于亚稳态性问题已经有一些解决方案。图6说明了这一方案,这是一种双寄存器方法:进入第一级触发器的数据与时钟异步,所以第一级触发器几 乎肯定是亚稳态;然而,只要亚稳态的长度小于时钟的周期,第二级触发器就不会进入亚稳态。但是,FPGA供应商很少提供亚稳态时间,尽管该时间一般小于触 发器的设置和保持时间之和。

如果时钟不是太快而且能满足时序约束的话,像图6所示的电路将可能不会产生亚稳态。只要所有输出到触发器的通路由相同时钟驱动,即使第一级触发器的 输出可用,通常还是需要用像图6中电路来将亚稳态隔离到一条短线。采用这种方法后,将不太可能出现由于电路的改变而无意地在无时钟驱动的逻辑中用到该亚稳 太线。

如果读数据的是一个计数器,像从一个异步FIFO读或写地址,你应该考虑下列情况:一个传统的3位计数器在状态之间有一个、两个或三个位的变化,例 如读数发生在计数器从“011”到“100”变化的瞬间,则所有三个位的值将不确定,读的值会是八种可能状态中的任一种。如果计数器是使用格雷码,如表所 示,则每次仅有一位发生状态改变,如果读数发生在计数器变化的瞬间,则只有一个位会有问题,所以在读操作中只有两种可能结果,而且这两种可能结果是计数器 正好在读以前的值和正好在读以后的值时。因为读正好发生在计数器产生变化的瞬间,你不可能确切地说哪个值是正确的,即两者都应该认为是有效的。

另一个避免异步时钟问题的方法是忽略较慢的时钟,并用较快的时钟来采样。这需要数据有特殊的成帧特性(例如,具有一个前导码)来定义数据边界。这是 一个常用的方法,在差不多每一个具有UART形式的嵌入式系统都有应用。该方法是:采用一个非常快的时钟,比如数据符号率的16倍,在连续发现15个起始 字符后开始采样,则下一个16(左右)位相当于送的第一个位,再下一个16(左右)位对应下一个位,并以次类推。

系统分类: 自由话题
用户分类: 无分类
标签: 无标签
来源: 无分类
发表评论 阅读全文(86) | 回复(0)

1

关于投票
四种常用FPGA/CPLD设计思想与技巧

本文讨论的四种常用FPGA/CPLD设计思想与技巧:乒乓操作、串并转换、流水线操作、数据接口同步化,都是FPGA/CPLD逻辑设计的内在规律的体现,合理地采用这些设计思想能在FPGA/CPLD设计工作种取得事半功倍的效果。

 

FPGA/CPLD的设计思想与技巧是一个非常大的话题,由于篇幅所限,本文仅介绍一些常用的设计思想与技巧,包括乒乓球操作、串并转换、流水线操 作和数据接口的同步方法。希望本文能引起工程师们的注意,如果能有意识地利用这些原则指导日后的设计工作,将取得事半功倍的效果!

 

乒乓操作

 

“乒乓操作”是一个常常应用于数据流控制的处理技巧,典型的乒乓操作方法如图1所示。

 

乒乓操作的处理流程为:输入数据流通过“输入数据选择单元”将数据流等时分配到两个数据缓冲区,数据缓冲模块可以为任何存储模块,比较常用的存储单 元为双口RAM(DPRAM)、单口RAM(SPRAM)、FIFO等。在第一个缓冲周期,将输入的数据流缓存到“数据缓冲模块1”;在第2个缓冲周期, 通过“输入数据选择单元”的切换,将输入的数据流缓存到“数据缓冲模块2”,同时将“数据缓冲模块1”缓存的第1个周期数据通过“输入数据选择单元”的选 择,送到“数据流运算处理模块”进行运算处理;在第3个缓冲周期通过“输入数据选择单元”的再次切换,将输入的数据流缓存到“数据缓冲模块1”,同时将“ 数据缓冲模块2”缓存的第2个周期的数据通过“输入数据选择单元”切换,送到“数据流运算处理模块”进行运算处理。如此循环。

图1

 

乒乓操作的最大特点是通过“输入数据选择单元”和“输出数据选择单元”按节拍、相互配合的切换,将经过缓冲的数据流没有停顿地送到“数据流运算处理 模块”进行运算与处理。把乒乓操作模块当做一个整体,站在这个模块的两端看数据,输入数据流和输出数据流都是连续不断的,没有任何停顿,因此非常适合对数 据流进行流水线式处理。所以乒乓操作常常应用于流水线式算法,完成数据的无缝缓冲与处理。

 

乒乓操作的第二个优点是可以节约缓冲区空间。比如在WCDMA基带应用中,1个帧是由15个时隙组成的,有时需要将1整帧的数据延时一个时隙后处 理,比较直接的办法是将这帧数据缓存起来,然后延时1个时隙进行处理。这时缓冲区的长度是1整帧数据长,假设数据速率是3.84Mbps,1帧长 10ms,则此时需要缓冲区长度是38400位。如果采用乒乓操作,只需定义两个能缓冲1个时隙数据的RAM(单口RAM即可)。


 
 
1 ? 2 ? 3 ? 4 下一页 末页

当向一块RAM写数据的时候,从另一块RAM读数据,然后送到处理单元处理,此时每块RAM的容量仅需2560位即可,2块RAM加起来也只有5120位的容量。图2

 

另外,巧妙运用乒乓操作还可以达到用低速模块处理高速数据流的效果。如图2所示,数据缓冲模块采用了双口RAM,并在DPRAM后引入了一级数据预 处理模块,这个数据预处理可以根据需要的各种数据运算,比如在WCDMA设计中,对输入数据流的解扩、解扰、去旋转等。假设端口A的输入数据流的速率为 100Mbps,乒乓操作的缓冲周期是10ms。以下分析各个节点端口的数据速率。

 

A端口处输入数据流速率为100Mbps,在第1个缓冲周期10ms内,通过“输入数据选择单元”,从B1到达DPRAM1。B1的数据速率也是 100Mbps,DPRAM1要在10ms内写入1Mb数据。同理,在第2个10ms,数据流被切换到DPRAM2,端口B2的数据速率也是 100Mbps,DPRAM2在第2个10ms被写入1Mb数据。在第3个10ms,数据流又切换到DPRAM1,DPRAM1被写入1Mb数据。

 

仔细分析就会发现到第3个缓冲周期时,留给DPRAM1读取数据并送到“数据预处理模块1”的时间一共是20ms。有的工程师困惑于DPRAM1的 读数时间为什么是20ms,这个时间是这样得来的:首先,在在第2个缓冲周期向DPRAM2写数据的10ms内,DPRAM1可以进行读操作;另外,在第 1个缓冲周期的第5ms起(绝对时间为5ms时刻),DPRAM1就可以一边向500K以后的地址写数据,一边从地址0读数,到达10ms 时,DPRAM1刚好写完了1Mb数据,并且读了500K数据,这个缓冲时间内DPRAM1读了5ms;在第3个缓冲周期的第5ms起(绝对时间为 35ms时刻),同理可以一边向500K以后的地址写数据一边从地址0读数,又读取了5个ms,所以截止DPRAM1第一个周期存入的数据被完全覆盖以 前,DPRAM1最多可以读取20ms时间,而所需读取的数据为1Mb,所以端口C1的数据速率为:1Mb/20ms=50Mbps。因此,“数据预处理 模块1”的最低数据吞吐能力也仅仅要求为50Mbps。同理,“数据预处理模块2”的最低数据吞吐能力也仅仅要求为50Mbps。换言之,通过乒乓操 作,“数据预处理模块”的时序压力减轻了,所要求的数据处理速率仅仅为输入数据速率的1/2。

 

通过乒乓操作实现低速模块处理高速数据的实质是:通过DPRAM这种缓存单元实现了数据流的串并转换,并行用“数据预处理模块1”和“数据预处理模块2”处理分流的数据,是面积与速度互换原则的体现!

 

串并转换设计技巧

 

串并转换是FPGA设计的一个重要技巧,它是数据流处理的常用手段,也是面积与速度互换思想的直接体现。

串并转换的实现方法多种多样,根据数据的排序和数量的要求,可以选用寄存器、RAM等实现。前面在乒乓操作的图例中,就是通过DPRAM实现了数据 流的串并转换,而且由于使用了DPRAM,数据的缓冲区可以开得很大,对于数量比较小的设计可以采用寄存器完成串并转换。如无特殊需求,应该用同步时序设 计完成串并之间的转换。比如数据从串行到并行,数据排列顺序是高位在前,可以用下面的编码实现:图3


prl_temp<={prl_temp,srl_in};

 

其中,prl_temp是并行输出缓存寄存器,srl_in是串行数据输入。

对于排列顺序有规定的串并转换,可以用case语句判断实现。对于复杂的串并转换,还可以用状态机实现。串并转换的方法比较简单,在此不必赘述。

 

流水线操作设计思想

 

首先需要声明的是,这里所讲述的流水线是指一种处理流程和顺序操作的设计思想,并非FPGA、ASIC设计中优化时序所用的“Pipelining”。

 

流水线处理是高速设计中的一个常用设计手段。如果某个设计的处理流程分为若干步骤,而且整个数据处理是“单流向”的,即没有反馈或者迭代运算,前一个步骤的输出是下一个步骤的输入,则可以考虑采用流水线设计方法来提高系统的工作频率。

 

流水线设计的结构示意图如图3所示。其基本结构为:将适当划分的n个操作步骤单流向串联起来。流水线操作的最大特点和要求是,数据流在各个步骤的处 理从时间上看是连续的,如果将每个操作步骤简化假设为通过一个D触发器(就是用寄存器打一个节拍),那么流水线操作就类似一个移位寄存器组,数据流依次流 经D触发器,完成每个步骤的操作。流水线设计时序如图4所示。

 

流水线设计的一个关键在于整个设计时序的合理安排,要求每个操作步骤的划分合理。如果前级操作时间恰好等于后级的操作时间,设计最为简单,前级的输 出直接汇入后级的输入即可;如果前级操作时间大于后级的操作时间,则需要对前级的输出数据适当缓存才能汇入到后级输入端;如果前级操作时间恰好小于后级的 操作时间,则必须通过复制逻辑,将数据流分流,或者在前级对数据采用存储、后处理方式,否则会造成后级数据溢出。

 

在WCDMA设计中经常使用到流水线处理的方法,如RAKE接收机、搜索器、前导捕获等。流水线处理方式之所以频率较高,是因为复制了处理模块,它是面积换取速度思想的又一种具体体现。

 

数据接口的同步方法

 

数据接口的同步是FPGA/CPLD设计的一个常见问题,也是一个重点和难点,很多设计不稳定都是源于数据接口的同步有问题。

 

在电路图设计阶段,一些工程师手工加入BUFT或者非门调整数据延迟,从而保证本级模块的时钟对上级模块数据的建立、保持时间要求。还有一些工程师 为了有稳定的采样,生成了很多相差90度的时钟信号,时而用正沿打一下数据,时而用负沿打一下数据,用以调整数据的采样位置。这两种做法都十分不可取,因 为一旦芯片更新换代或者移植到其它芯片组的芯片上,采样实现必须从新设计。而且,这两种做法造成电路实现的余量不够,一旦外界条件变换(比如温度升高), 采样时序就有可能完全紊乱,造成电路瘫痪。

 

下面简单介绍几种不同情况下数据接口的同步方法:

1. 输入、输出的延时(芯片间、PCB布线、一些驱动接口元件的延时等)不可测,或者有可能变动的条件下,如何完成数据同步?

 

对于数据的延迟不可测或变动,就需要建立同步机制,可以用一个同步使能或同步指示信号。另外,使数据通过RAM或者FIFO的存取,也可以达到数据同步目的。图4

 

把数据存放在RAM或FIFO的方法如下:将上级芯片提供的数据随路时钟作为写信号,将数据写入RAM或者FIFO,然后使用本级的采样时钟(一般 是数据处理的主时钟)将数据读出来即可。这种做法的关键是数据写入RAM或者FIFO要可靠,如果使用同步RAM或者FIFO,就要求应该有一个与数据相 对延迟关系固定的随路指示信号,这个信号可以是数据的有效指示,也可以是上级模块将数据打出来的时钟。对于慢速数据,也可以采样异步RAM或者FIFO, 但是不推荐这种做法。

 

数据是有固定格式安排的,很多重要信息在数据的起始位置,这种情况在通信系统中非常普遍。通讯系统中,很多数据是按照“帧”组织的。而由于整个系统 对时钟要求很高,常常专门设计一块时钟板完成高精度时钟的产生与驱动。而数据又是有起始位置的,如何完成数据的同步,并发现数据的“头”呢?

 

数据的同步方法完全可以采用上面的方法,采用同步指示信号,或者使用RAM、FIFO缓存一下。

找到数据头的方法有两种,第一种很简单,随路传输一个数据起始位置的指示信号即可,对于有些系统,特别是异步系统,则常常在数据中插入一段同步码(比如训练序列),接收端通过状态机检测到同步码后就能发现数据的“头”了,这种做法叫做“盲检测”。

 

上级数据和本级时钟是异步的,也就是说上级芯片或模块和本级芯片或模块的时钟是异步时钟域的。

 

前面在输入数据同步化中已经简单介绍了一个原则:如果输入数据的节拍和本级芯片的处理时钟同频,可以直接用本级芯片的主时钟对输入数据寄存器采样, 完成输入数据的同步化;如果输入数据和本级芯片的处理时钟是异步的,特别是频率不匹配的时候,则只有用处理时钟对输入数据做两次寄存器采样,才能完成输入 数据的同步化。需要说明的是,用寄存器对异步时钟域的数据进行两次采样,其作用是有效防止亚稳态(数据状态不稳定)的传播,使后级电路处理的数据都是有效 电平。但是这种做法并不能保证两级寄存器采样后的数据是正确的电平,这种方式处理一般都会产生一定数量的错误电平数据。所以仅仅适用于对少量错误不敏感的 功能单元。

 

为了避免异步时钟域产生错误的采样电平,一般使用RAM、FIFO缓存的方法完成异步时钟域的数据转换。最常用的缓存单元是DPRAM,在输入端口使用上级时钟写数据,在输出端口使用本级时钟读数据,这样就非常方便的完成了异步时钟域之间的数据交换。

 

2. 设计数据接口同步是否需要添加约束?

 

建议最好添加适当的约束,特别是对于高速设计,一定要对周期、建立、保持时间等添加相应的约束。

 

这里附加约束的作用有两点:

 

a. 提高设计的工作频率,满足接口数据同步要求。通过附加周期、建立时间、保持时间等约束可以控制逻辑的综合、映射、布局和布线,以减小逻辑和布线延时,从而提高工作频率,满足接口数据同步要求。

 

b. 获得正确的时序分析报告。几乎所有的FPGA设计平台都包含静态时序分析工具,利用这类工具可以获得映射或布局布线后的时序分析报告,从而对设计的性能做 出评估。静态时序分析工具以约束作为判断时序是否满足设计要求的标准,因此要求设计者正确输入约束,以便静态时序分析工具输出正确的时序分析报告。

 

Xilinx和数据接口相关的常用约束有Period、OFFSET_IN_BEFORE、OFFSET_IN_AFTER、 OFFSET_OUT_BEFORE和OFFSET_OUT_AFTER等;Altera与数据接口相关的常用约束有Period、tsu、tH、tco 等。

系统分类: 自由话题
用户分类: 无分类
标签: 无标签
来源: 无分类
发表评论 阅读全文(87) | 回复(0)

0

关于投票
基于NIOS II处理器的面阵CCD采集系统设计

SOPC (片上可编程系统)是Altera公司提出的一种灵活、高效的SOC解决方案,能将处理器、存储器、I/O 口等系统设计需要的功能模块集成到一个PLD器件上,构建一个可编程的片上系统。本文介绍的面阵CCD采集系统,利用Altera的SOPC Builder定制的NIOS II软核处理器及与采集相关功能的“软” 硬件模块来实现信号的采集。它与目前具有同样功能的CCD采集系统相比,具有灵活、稳定、易升级、易维护等优点。本系统的实验在现有的数码相机平台上进 行。

1 系统设计
    系统原理框图如图1所示。目标物经光学镜头成像于在RJ21P3AH0PT的光敏面上,产生电荷包强度分布的图像,RJ21P3AH0PT为隔列转移面阵 CCD,在四相垂直驱动脉冲和两相水平驱动脉冲来驱动下,通过CCD内部将光信号转化为电信号。当LR38642的时序发生器对其施加特定时序脉冲时,每 个像素的电荷信号将被依次移出CCD,并经放大变成电压幅度不等的模拟视频信号OS。OS视频信号送到LR38642的模拟前端电路并转换为数字信号,在 NIOS II处理器的控制下通过自定制的CCD采集控制接口以及NIOS II处理器的Avalon总线,将图像数据高速地存储到外部存储器SDRAM中。
 

2 系统硬件及功能模块
2.1 CCD芯片及专用控制芯片LR38642
    本系统面阵CCD采用夏普公司的RJ21P3AH0PT 图像传感器,如图2所示,它为1/1.8英寸,330万象素(2096*1560),有效象素为321万(2080*1544)。它具有高感广度,暗电流 非常小,要求的水平驱动脉冲频率为18MHz,需要4相垂直驱动脉冲和两相水平驱动脉冲来驱动。对其驱动控制选用专用集成控制芯片LR38642,它集成 了时序发生器(LR38617)、垂直驱动器电路(LR36685)以及模拟前端模块(IR3Y48A1)等功能,如图3所示。
 
LR38642功能框图 
2.2 NIOS II处理器
    本系统中FPGA选用Altera Cyclone EP1C6Q240,在实现对NIOS II处理器硬件开发时,使用嵌入在QuartuslI中的SOPC Builder来创建相应“软” 硬件,通过NIOS II Development Kit来实现相应模块之间的开发,为实现面阵CCD的采集所选用的相应外设自己定制,其中CCD采集控制IP 自定制。具体外设架构及内核结构框图如图4所示。
 
2.3 外同步行、场信号控制模块
    CCD芯片驱动控制及ADC采集的关键在于对时序的控制,特别是外同步HD、VD的控制要求很高,我们的系统中,采用计数分频方式实现HD、VD 信号的产生,考虑到EP1C6Q240本身资源有限,我们在NIOS处理器外用CPLDEPM7128AETC100-10来定制同步信号IP核,同时此 芯片中还包含有自动(手动)变焦控制,CCD 加(掉) 电控制等模块。该模块的关键在于行、场消隐以及行、场信号之间的对应关系,如果HD、VD信号不精确,系统将无法控制得到CCD的正常输出信号。该模块的 时钟HVCLK信号为36MHz晶振信号CKI经LR38642内部的2分频后而得到,控制采集时由NIOS II发送一启动控制信号START来启动外同步行、场信号控制电路。
2.4 SCCB控制模块
    SCCB总线控制是I2C总线的一种,仅靠两根连线就能实现全双工同步数据传送:一根串行数据线(SDA),一根串行时钟线(SCL),在数据传输过程中 严格依I2C总线协议,在我们的系统中,考虑到SOPc Builder中通用桥模块中没有Avalon Wishbone桥,我们利用PIO口模拟I2C总线方式来传送控制字。对于该面阵CCD采集控制时SCCB控制用两次,
第一次:通过 ED0~ED2来设置LR38642中相应的寄存器组来产生CCD所需要的驱动脉冲以及对控制电子快门等。这一过程在上电复位时进行,ED0为启动控制信 号,当ED0启动有效后,由ED1传送时钟脉冲,由ED2传送数据,当25位控制字符写到LR38642中相应的寄存器后,时序发生器电路产生不同垂直驱 动脉冲组合及相关功能。
第二次:在采集控制时,通过控制CSN、SCK 以及SDATA实现PGA 控制,双相关采样控制,黑电平补偿以及ADC的转换等功能。每次写入之后,为验证写入正确与否,把相应寄存器的数据读出并与写入的数据比较,如果相同,说 明写入正确,否则写入错误。图5给出了上电复位时实际配置波形。
 

2.5 ADC采集控制及存储模块(以帧累积模式为例进行说明)
    在帧累积方式下,采集控制时,先从CCD光电转换器读出模拟数据,通过VD 给CCD 一个长度为T1 (T1=9×55.7ns×2640,其中2640为一个HD的时钟CLK数,每个CLK为1/18M=55.7ns,9为保持9个HD) 的低电平,在VD)变为高电平时,CCD 在CLK 的同步控制下,HD先维持260个行消隐时钟的低电平,随后HD变为高电平,经464个时钟的积累时间,再经过24个时钟哑元象素,2个时钟黑电平象素输 出后,在CLK 的同步控制下输出2096个有用象素,输出完有用象素后,再次进入行消隐阶段,(进入行消隐的前54个时钟输出的为黑电平象素) 为下次行输出做准备。在帧累积模式下采用奇偶两场分别输出,每场848个HD,其中场消隐9个HD时间内VD为低电平,随后VD变为高电平,经58个HD 场累积时间,以及2个HD的黑电平象素后,在HD的同步控制下,输出780行有用象素,后再次进入场消隐阶段进入行消隐的前5个时钟输出的为黑电平象 素),依据先奇行后偶行的顺序串行输出视频OS信号。当传输完2096*1560个像素时表明当前一幅图像传输完毕,对于判别是否开始传输以及是否传输完 毕,在我们的系统中,通过自定义的CCD采集IP核来对数据作出判断。
    自定义的采集IP核依HD、VD信号确定什么时间开始为有用信号、什么时间为结束有用信号,什么时间表示一场(一行)数据开始(结束)等功能,知道了开始 传输、结束传输、行(场)开始与结束等信息后,在NIOS II处理器的控制下,可以依IORD宏指令很容易将数据写到SDRAM中。在我们的系统中SDRAM 选用采用HYNIX公司的HY57V561620CT-H型SDRAM存储器。它的容量是256Mbit(16M *16bit),速度可以达到133M赫兹。为便于开发系统中SDRAM 控制器选用SOPCBuilder中的IP核。
    下面给出基于自定义采集IP核以及GPIO读写宏指令实现数据采集的部分程序代码。
……
while (IORD_ALTERA_AVALON_PIO_DATA (CCD_VD_ADDR)== 0x00);//场消隐(场逆程)
while (IORD_ALTERA_AVALON_PIO_DATA (CCD_VD_ADDR)== 0x01);//场正程,开始新的场CCD_VD= IORD_ALTERA_AVALON_PIO_DATA (CCD_VD_ADDR);
while(CCD_VD ==0x00)//等待场消隐开始写入SDRAM ,如为场正程则不写入SDRAM
{
  while ((uchar)(IORD_ALTERA_AVALON_PIO_DATA (CCD_CLK_ADDR))== 0x00);
  *SDRAM_Point=IORD_ALTERA_AVALON_PIO_DATA (CCD_VD_ADDR);
  SDRAM_Point++;
}
2.6 CCD智能电源控制模块
    由于面阵CCD正常工作有严格的加(掉)电顺序,所以必须严格按技术文档要求按规定加(掉)电,对于电源模块,我们选用了MAXIM 公司的Max685,Max687分别提供+15V,-9V 和+3.3V。为确保加(掉) 电顺序,EPM7128AETC100-10内设计的电源控制模块(EPM7128供电+3.3V 与CCD供电模块分开),在系统上电后,当按下POWER键时控制Max685的SEQ 为高电平时,随后Max685在SHDN及SYNC的控制下先输出+15V,后输出-9V,而后控制Max687的SHDN 为高电平控制输出+3.3V。关闭(掉电)时,按下POWER键先控制Max687的SHDN 为低电平,关断+3.3V,后设Max685的SEQ 为低电平时,在SHDN及SYNC的控制下控制先关断-9V,再关断+15V。

3 系统软件
    本采集系统模块的软件主要有两部分:一是基于NIOS II的PIO 口实现模拟I2C总线功能,一是图像数据写入到SDRAM。其程序流程图分别如图7、图8所示。
 
 

4 结束语
    该面阵CCD采集系统利用NIOS II作为FPGA 嵌入式处理器的解决方案,能较容易地实现面阵CCD图像的采集,由于采用“软”硬件实现面阵CCD的开发,调试过程中能不断更改“软件”就可达到改进硬件 功能目的。经实验测试,在帧累积模式下可实现1.6s采集一幅静止图像。同时由于面阵CCD采集系统本身是一个复杂系统,不确定因素较多,如变焦控制、电 磁兼容性等,对该系统还有待作进一步的研究。

系统分类: 自由话题
用户分类: 无分类
标签: 无标签
来源: 无分类
发表评论 阅读全文(76) | 回复(0)
总共 , 当前 /