微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > 如何用verilog在fpga中实现精确延时

如何用verilog在fpga中实现精确延时

时间:10-02 整理:3721RD 点击:
做的东西要实现各种不同的精确延时   最小的小于时钟周期    不知道用什么实现比较好啊    求高手指点

很急啊   请高手帮忙

就没高手愿意指点一下吗

...............................................
还是没人愿意帮忙

FPGA里确实个别的有一些延迟元件,还可以用逻辑元件或布线来实现延迟,但是都不能用于实现精确的延迟,因为它们的延迟特性随温度的变化而变化。

一个代替的做法可能能行:
利用Altera的PLL生成相位不同的时钟,最后固定输出的FF在IOB当中。
因为Altera的PLL可以生成任意相位的时钟,实现精确的延迟,把输出FF固定在IOB当中是为了消除FF到管腿的延时不确定性。
这种方法在时钟高速时会带来很多时序问题吧。

谢谢楼上的兄弟,可我程序要求是一千多种不同的延时,基本上这个程序就是干这个的   也可以说是隔一个时间段输出一个特定的数据  每个时间段都不一样   有一千多个  晕死了

哈?那就给你想个虽然不是十分精确,但是可以解决个数的办法。
比如把输入的时钟增频50倍,这就可以得到输入时钟50分之一的时间为单位的所有延迟了。
PLL有3到5个时钟输出,搞好了应该能对付那一千多个延迟。一个时钟以上的延迟用FF之后再用增频时钟数数。

哈哈  可以试试   谢谢哥们了

采用更高的时钟,对信号进行采样

成本所限    用20m的晶振     有没有比较好的解决方法

采用FPGA内部PLL对时钟倍频,根据你的延时精度,选择倍频系数,用PLL的输出时钟采样输入信号

学习了~

不要寄希望于普通的组合逻辑来延迟。
倍频是不错的选择,或者你看你的库中是否有延迟线之类的IP。
但是无论如何,上千种不同的延时要求还是挺奇怪以及难以实现的吧?

学习了。谢谢。

学习了

1000多个延时?
我靠
还是不同的?
在同一个always里海好做
要不在同一个那就麻烦了

不好说
和你的时钟有关系

应该只有PLL(DCM)能搞规定了

PLL倍频加N个D触发器同步可得

逻辑单元延迟不确定

FPGA逻辑单元延迟不确定

你要延时什么,是将信号进行延时吗,如果是对输入信号进行延时,可以用同步逻辑打几拍,这个延时是非常准确的。硬件延时好像还没听过,没听说用FPGA进行延时的,只有在处理信号和数据时才会将信号进行延时处理,以便信号能够对齐

看一看

布线加约束,时序仿真要加

首先在FPGA中要产生延时,信号必须经过一定的物理资源。在硬件描述语言中有关键词Wait for xx ns,需要说明的是该语法是仅仅用于仿真而不能用于综合的。
可综合的延时方法有:
使信号经过逻辑门得到延时(如非门);
使用器件提供的延时单元(如Altera公司的LCELL);注意:当使用多级非门的时候综合器往往会将其优化掉,因为综合器会认为一个信号非两次还是它。虽然不同的厂家的芯片宏单元的结构不同,但概括而言都是由一些组合逻辑外加一或二个触发器而构成。在实际应用中,当一个模块内的组合逻辑被使用了那么与其对应的触发器也就不能用了;同样如果触发器单元被用了那么组合逻辑单元也就废了。这就是有时候(特别是使用CPLD)虽然设计使用的资源并不多但布局布线器却报告资源不够使用的原因。
当需要对某一信号作一段延时时,入门的新手(比如我这一类的)往往在此信号后串接一些非门或其它门电路,此方法在分离电路中是可行的。但在FPGA中,开发软件在综合设计时会将这些门当作冗余逻辑去掉,达不到延时的效果。用ALTERA公司的Quartus II开发FPGA时,可以通过插入一些LCELL原语来产生一定的延时,但这样形成的延时在FPGA芯片中并不稳定,会随温度等外部环境的改变而改变,因此并不提倡这样做。在此,可以用高频时钟来驱动一移位寄存器,待延时信号作数据输入,按所需延时正确设置移位寄存器的级数,移位寄存器的输出即为延时后的信号。此方法产生的延时信号与原信号比有误差,误差大小由高频时钟的周期来决定。对于数据信号的延时,在输出端用数据时钟对延时后信号重新采样,就可以消除误差。
       这里说的误差,值得探讨一下。暂时先不做深入了解。下面一一实现。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top