最新日志

发表于:2008-1-18 13:42:51
标签:无标签

1

FPGA设计注意事项

      1.一个模块尽量只用一个时钟, 在多时钟域的设计中设计到跨时钟域的最好有专门一个模块做时钟域的隔离。利于综合器综合。

      2.尽量在底层模块上做逻辑,在高层做例化,顶层模块只能做例化。

      3.在FPGA的设计上禁止用纯组合逻辑产生latch,带D触发器的latch是允许的。

      4.一般来说,进入FPGA的信号必须先同步,以提高系统工作频率。所有模块的输出都要寄存器化,以提高工作频率。

      5.不要用门控时钟,这会增加设计的不稳定性。如果要用到门控时钟,也要将门控信号用时钟的下降沿打一拍再输出与时钟相与。

      6.禁止用计数器分频后的信号做其它模块的时钟,而要改用时钟使能的方式,否则对设计的可靠性不利,也增加了静态时序分析的复杂性。

 

点击此处查看原文 >>

系统分类: CPLD/FPGA   |    用户分类: 无分类    |    来源: 整理

评论(0) | 阅读(369)
发表于:2008-1-11 11:28:05
标签:无标签

1

IC测试原理-存储器和逻辑芯片的测试

1 存储器术语的定义

在讨论存储器芯片测试之前,有必要先定义一些相关的术语。

写入恢复时间(Write Recovery Time):一个存储单元在写入操作之后到能正确读取之前这中间必须等待的时间。

锁存时间(Hold Time) :输入数据电平在锁存输入时钟之后必须保持的时间间隔。

数据保存时间(Pause Test):存储器单元能保持它们状态的时间,也是存储器内容能保持时间的测试。

刷新时间(Refresh Time) :存储器刷新前的最大允许时间间隔。

建立时间(Setup Time):输入数据电平在锁存时钟之前必须稳定保持的时间间隔。

速度(Speed):功能速度测试是通过重复地进行功能测试,同时改变芯片测试的周期或频率来完成的。测试的周期通常使用二进制搜索的办法来进行改变。这些测试能够测出芯片的最快运行速度。

读取时间(Access time):通常是指在读使能,芯片被选中或地址改变到输出端输出新数据的所需的时间。读取时间取决于存取单元排列次序。

2存储器芯片所需的功能测试

存储器芯片必须经过许多必要的测试以保证其功能正确。这些测试主要用来确保芯片不包含以下任何一种类型的错误:

存储单元短路:存储单元与电源或者地短路。

存储单元开路:存储单元在写入时状态不能改变。

相邻单元短路:根据不同的生产工艺,相邻的单元会被写入相同或相反的数据。

地址开路或短路:这种错误引起一个存储单元对应多个地址或者多个地址对应一个存储单元。这种错误不容易被检测,因为我们一次只能检查输入地址所对应的输出响应,很难确定是哪一个物理地址被真正读取。

存储单元干扰:它是指在写入或者读取一个存储单元的时候可能会引起它相邻的存储单元状态的改变,也就是状态被干扰了。

3 存储器芯片测试时用于错误检测的测试向量

测试向量是施加给存储器芯片的一系列的功能,即不同的读和写等的功能组合。它主要用于测试芯片的功能错误。常用的存储器测试向量如下所示,分别介绍一下他们的执行方式以及测试目的。

全“0”和全“1”测试图形:共含 4n个图形内容

执行方式:对所有单元写“1”再读取验证所有单元。对所有单元写“0”再读取验证所有单元。

目的: 检查存储单元短路或者开路错误。也能检查相邻单元短路的问题。

棋盘格(Checkerboard)测试图形:共含 4n个图形内容

执行方式:先运行0-1棋盘格向量,也就是第一个单元写1,第二个单元写0,第三个单元再写1,依此类推,直到最后一个单元,接下来再读取并验证所有单元。再运行一个1-0棋盘格向量,就是对所有单元写入跟0-1棋盘格完全相反的数据,再读取并验证所有单元。

目的: 这是功能测试,地址解码和单元干扰的一个最基本最简单的测试向量。它还能检查连续地址错误或者干扰错误,也通常用它作为存取时间的测量。

行进(Marching)测试图形:共含 5n个图形内容

执行方式:先对所有单元写0.读取第一个单元,再对第一个单元写1。再读取第二个单元,再对第二个单元写1,依此类推,直到最后一个单元。最后再重复上述操作,只是写入数据相反。

目的: 这是功能测试,地址解码和单元干扰的一个最基本最简单的测试向量。它还能检查连续地址错误或者干扰错误,也通常用它作为存取时间的测量。

行走(Walking)测试图形:共含 2n^2个图形内容

执行方式:先对所有单元写0,再读取所有单元。接下来对第一个单元写1,读取所有单元,读完之后把第一个单元写回0。再对第二个单元写1,读取所有单元,读完之后把第二个单元写回0。 继续用“1”走遍整个存储单元,然后全写“1”,用“0”走遍整个存储单元。

目的: 检查所有的地址解码错误。它的缺点是它的运行时间太长。假设读写周期为500ns,对一个4K的RAM进行行走(walking)图形测试就需要16秒的测试时间。如果知道存储器的结构,我们可以只进行行或者列的行走(walking)图形测试以减少测试时间。

Galloping写入恢复测试图形:共含12n^2 个图形内容

执行方式:对所有单元写0。再对第一个单元写1(基本单元),读取第二个单元,然后返回来读取第一个单元。再对第二个单元写0,读第二个单元。接下来再在其它所有单元和基本单元之间重复这个操作。等第一个单元作为基本单元的操作完成之后,再把第二个单元作为基本单元,再作同样的操作。依此类推,直到所有单元都被当过基本单元。最后,再重复上述过程,但写入数据相反。

目的: 这是功能测试,地址解码测试和干扰测试一个极好的向量。如果选择适当的时序,它还可以很好地用于写入恢复测试。同时它也能很好地用于读取时间测试。

其他的测试向量都类似于以上这些向量,都基于相同的核心理念。

4动态随机读取存储器(DRAM)

动态随机读取存储器(DRAM)的测试有以下的一些特殊要求:

①行地址和列地址在相同的地址线上输入(行列地址复用)。他们分别通过RAS和CAS信号来锁存。

②需要在固定的时间间隔内对芯片进行刷新。

③DRAM能够进行页操作。因此需要保持行地址不变而改变列地址(或者相反)。

5逻辑器件测试介绍

逻辑芯片功能测试用于保证被测器件能够正确完成其预期的功能。为了达到这个目的,必须先创建测试向量或者真值表,用于检测被测器件的内部故障。按故障覆盖率设计的真值表只能检测覆盖的故障。测试向量与测试时序结合在一起组成了逻辑器件功能测试的核心。

6 测试向量

测试向量-也称作测试图形或者真值表-由输入和输出状态组成,代表被测器件的逻辑功能。输入和输出状态是由字符来表示的,通常1/0用来表示输入状态,L/H/Z用来表示输出状态,X用来表示没有输入也不比较输出的状态。事实上可以用任何一套字符来表示真值表,只要测试系统能够正确解释和执行每个字符相应的功能。

测试向量是存储在向量存储器里面的,每行单独的向量代表一个单一测试周期的“原始”数据。从向量存储器里输入的数据与时序,波形格式以及电压数据结合在一起,通过通道电性能驱动电路施加给待测器件。待测器件的输出通过通道电性能电路上的比较电路在适当的采样时间与存储在向量存储器里的数据进行比较。这种测试被称作存储响应。

测试向量序列,除了待测器件的输入输出数据,还可能包含测试系统的一些运作指令。比如,时序的实时变换意味着以一个又一个向量之间的时间值或信号的格式发生变化了。输入驱动器可能需要被打开或者关闭,输出比较器也可能需要选择性地在周期之间开关。许多测试系统还支持像跳转,循环,向量重复,子程序等微操作指令。不同的测试仪,其测试仪指令的表示方式可能会不一样,这也是当把测试程序从一个测试平台转移到另一个测试平台时需要做向量转换的原因之一。

比较复杂的芯片,其测试向量一般是由芯片设计过程中的仿真数据提取而来。仿真数据需要重新整理以满足目标测试系统的格式,同时还需要做一些处理以保证正确的运行。通常测试向量是由上百万行的独立向量构成的。测试向量或者仿真数据可以由设计工程师,测试工程师或者仿真工程师来完成,但是要保证成功的向量生成,都必须对芯片本身和测试系统有非常全面地了解。

7测试资源的消耗值

当开发一个功能测试时,待测器件各方面的性能与功能都要考虑到。以下这些参数都要仔细地进行测试:

·VDD Min/Max (待测器件电源电压)

·VIL/VIH (输入电平)

·VOL/VOH (输出电平)

·IOL/IOH (输出负载电流)

·VREF (IOL/IOH转换电平值)

·测试频率(测试使用的周期)

·输入信号时序(时钟/建立时间/保持时间/ 控制)

·输入信号格式(输入信号的波形)

·输出时序(在周期内何时对输出进行采样)

·向量序列(向量文件内的开始/停止点)

上述的这些列表说明了功能测试会占用测试系统的大部分资源。功能测试主要由两大块组成,一是测试向量文件,另外一块是包含测试指令的主测试程序。测试向量代表了测试待测器件所需的输入输出逻辑状态。主测试程序包含了保证测试仪硬件能产生必要的电压,波形和时序等所必需的信息,如图1所示。

当执行功能测试的时候,测试系统把输入波形施加给待测器件,并一个周期一个周期,一个管脚一个管脚地监控输出数据。如果有任何的输出数据不符合预期的逻辑状态,电压或者时序,该功能测试结果为失效器件。

本文摘自《半导体技术》

点击此处查看原文 >>

系统分类: CPLD/FPGA   |    用户分类: 无分类    |    来源: 转贴

评论(0) | 阅读(353)
发表于:2007-12-27 10:51:51
标签:无标签

0

synplify tool

        最近不忙,正好可以研究一下综合工具。

点击此处查看原文 >>

系统分类: CPLD/FPGA   |    用户分类: 无分类    |    来源: 原创

评论(1) | 阅读(503)
发表于:2007-11-23 16:59:55
标签:无标签

0

FPGA的一点总结

    riple网友说:“写作是最好的学习方式”。所以我决定从现在开始就把自己所学所领悟的写出来,一方面是为了自我总结,另一方面也希望能对需要的同行们起到学习的作用!
    我写verilog也有一年时间了,可是真正入门估计也是在最近吧。最近我正在做一个256灰度级的LED全彩图像屏。老师设计了方案,我所要做的就是领悟并在FPGA上实现它。一开始的时候,我觉得蛮简单的,所以就照着设计的逻辑写了一堆代码,要说真正领悟,估计连皮毛都没沾上吧。我希望出现奇迹,那就是把它下载到FPGA上立刻就能正确运行,并且完美的显示我想要的图像。可是当我第一次心急如焚的下载了代码,发现我的LED显示屏一片黑,什么都没有。我顿时心灰意冷,觉得自己什么也干不了。
    后来在同事的帮助下,我知道我这么做是不对的。
    第一:“设计必须文档化。要将设计思路,详细实现等写入文档,然后经过严格评审通过后才能进行下一步的工作。这样做乍看起来很花时间,但是从整个项目过程来看,绝对要比一上来就写代码要节约时间,且这种做法可以使项目处于可控、可实现的状态。”,这是我最近才看了一个编写代码规范中的第一条。这一条实在尤为重要,我必须完全掌握设计思路,才能在写代码的时候不会照猫画虎,才能做到起步就是对的。
    第二:在我编译的时候,总会出现关键路径时序要求不满足的这个严重警告。因为我在设计中用了很多很多的分频时钟,可以说是整个设计是时钟满天飞。后来在我修改程序中,我按照设计的思路,只用整个模块的系统时钟做为全局时钟,这样,问题就不会出现了。而且,因为时钟很多,在我用到TimingQuest时,都不知道从哪里着手。
    第三:设计中产生了很多门控时钟,像这样的警告:"Found * node(s) in clock paths which may be acting as ripple and /or gated clocks-node(s) analyzed as buffle(s) resulting in clolk skew;"在我之后用了全局时钟以后,它就消失了,而且也保证了时序电路稳定。
    暂时先写这么多吧,我的256灰度级图像屏已经可以很清楚地显示一个漂亮的小孩子和美丽的玫瑰花了。虽然还有很多不足,但我相信一定可以克服的!也希望大家补充。icon

点击此处查看原文 >>

系统分类: CPLD/FPGA   |    用户分类: 无分类    |    来源: 原创

评论(0) | 阅读(731)
发表于:2007-11-7 15:27:17
标签:无标签

0

时序不满足

    对于时序不满足这种情况,多数还是在逻辑中找原因。我用了全局时钟,而不是用分频器产生的时钟,上面那个警告就自然消失了。也许有更好的办法,这可能只是最笨的一种办法了。呵呵,用了不少的资源。
    还要多学习,多实践。

点击此处查看原文 >>

系统分类: CPLD/FPGA   |    用户分类: 无分类    |    来源: 无分类

评论(0) | 阅读(398)
发表于:2007-11-2 15:34:37
标签:无标签

1

专业英语的重要性

   英语的重要性就是在你用这个西方软件的时候,能够明白它每一项都有什么功能。我的可怜的英语,阻icon碍了我工作的进展。看来得要狠狠的补一补了~ 


点击此处查看原文 >>

系统分类: 专业英语   |    用户分类: 无分类    |    来源: 无分类

评论(1) | 阅读(1147)
发表于:2007-11-1 11:18:07
标签:无标签

0

在quartus中遇到的时序警告

Critical Warning: Timing requirements were not met. See Report window for details.
Warning: Found invalid timing assignments -- see Ignored Timing Assignments report for details

多次遇到这样的警告,却不知该如何解决?

点击此处查看原文 >>

系统分类: CPLD/FPGA   |    用户分类: 无分类    |    来源: 无分类

评论(4) | 阅读(768)
总共 , 当前 /