加入收藏 设为首页 帮助中心
 
论坛首页
用户登录 | 用户注册 | 最新悬赏 | 最新贴子 | 会员中心 | 贴子搜索 | 网站地图 | 帮助中心 | 联系我们
站内搜索:
现在位置 > 维库电子开发网论坛 > EDA > FPGA/CPLD > FPGA实现信号延时的方法
帖子主题: FPGA实现信号延时的方法
你还没有登录,无法发表回复,请首先 登录.. [注 册]
积分:17 江懑
发表于:2008-10-8 11:25:00 楼主
级别:一星
积分:17分
注册:2008年08月30日

FPGA实现信号延时的方法汇总:
1、门延时数量级的延时(几个ns),可用逻辑门来完成,但告诉综合器不要将其优化掉(不精确,误差大,常常不被推荐)。比如用两个非门(用constraint 来告诉synthesizer 不要综合掉这些逻辑)。
2、使用delay cell,lcell。
3、采用更快的时钟,通过计数器来实现,对于比较小的延时,用两个DFF 级联就可以。
4、用fifo 或ram 实现。
5、通过移位寄存器实现,延迟的时间和移位寄存器的位数有关。
6、使用负时钟驱动DFF来获得半个时钟周期的延时。
7、使用合适的buffer甚至用几个buffer的串联。
8、VHDL Component Declaration:
COMPONENT LCELL
PORT (a_in : IN STD_LOGIC;
a_out: OUT STD_LOGIC);
END COMPONENT;
9、在寄存器赋值时加一点延时对仿真有好处,可以完全消除竞争现象。
比如这样的逻辑:
always @(posedge clk)
abc_r <= #`HOLD_DELAY abc_nxt;
是有利于仿真的。
编辑注:对这点持保留态度。
10、在综合时将忽略所有的延时语句。

Westor:
    异步电路产生延时的一般方法是插入一个Buffer、两级非门等,这种延时调整手段是不适用于同步时序设计思想的。首先要明确一点HDL语言中的延时控制语法,例如: #5 a<=4'b0101;其中的延时5个时间单位,是行为级代码描述,常用于仿真测试激励,但是在电路综合是会被忽略,并不能启动延时作用。同步时序电路的延时一般是通过时序控制完成的。换句话说,同步时序电路的延时被当作一个电路逻辑来设计。对于比较大的和特殊定时要求的延时,一般用高速时钟产生一个计数器,根据计数器的计数,控制延时;对于比较小的延时,可以用D触发器打一下,这种做法不仅仅使信号延时了一个时钟周期,而且完成了信号与时钟的初次同步,在输入信号采样和增加时序约束余量中使用。

Cherrydu:
    如果要实现一个“可综合”的信号延时(若干个时钟周期),比如给信号reset 让其下降沿延时若干周期,以用什么方法实现呢?我是用Verilog 来编这个程序的,我曾经试过在reset 上升沿到来时,用数时钟数目的方法实现延时,可是在Verilog 下,异步方法无法实现这个功能,同步的方法,if 语句不能嵌套两个沿的情况.

Rush:
    不用嵌套两个沿,触发条件只有CLK 即可,然后在下面检测RESET 信号,等他下降沿也就是由1 变为0 时(IF RESET=0)开始转入另外一个状态,然后在新状态中计数。

Darkage:
    altera 的一个lcell 的延时并不是固定的,而是要看你将lcell 的位置放在那里,两个lcell 的距离越远,延时就越大,不同的类型芯片,不同的级别,不同的温度都是不一样的,这些是要考虑到的。两个lcell 的延时可以从1 个多的ns 都10 多个ns 都可以做到的,要是对于环境条件要求不是很严格的时候,可以考虑这种方法,否则就要考虑其他的方案,或者做一些折中了。

丁丁:
    用Xilinx 器件中的LUT 实现SRL16 的功能,也就是1 个查找表实现16 级时延,替代16 个寄存器,可以大大节省资源。

 
积分:321 smr1113
发表于:2008-10-8 19:59:00 1 楼
级别:四星
版主
积分:321分
注册:2008年06月20日
学习。。。。。


没有你做不到的,只有你想不到的。

 
快速回复:
用户名: 密码:  验证码,看不清楚?请点击刷新验证码 注册新帐号?
上传图片格式(jpg/gif/png)和文件格式(rar/pdf)
 
 
网站简介s广告服务网站地图帮助信息联系方式问题报告
Copyright 2007 - 2008 bbs.weeqoo.com
Powered By weeqoo Version 8.0.0XML