搜索
bottom↓
回复: 29

想在FPGA的电路里增加延时,串联多个门电路可行吗?

[复制链接]

出0入0汤圆

发表于 2011-1-27 20:15:48 | 显示全部楼层 |阅读模式
如题,最近在使用Spartan-3AN。想在输入的CLK信号上加一点延时,但又不是很多(10-30ns吧),做成可调节的。想了很多办法都不行,最后想到了加一些逻辑门电路的方法。实验失败,从逻辑分析仪看波形和之前的一样,一点延时都没增加。好像ISE在综合的时候认为这些电路是多余的就给优化掉了。我想问问有没有办法不让ISE不优化这些电路呢?

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

发表于 2011-1-27 20:24:54 | 显示全部楼层
有办法啊。大不了损失一个管教。

出0入0汤圆

发表于 2011-1-27 20:29:26 | 显示全部楼层
最正规方式用个100M时钟把数据打到1-2容量的移位寄存器

出0入0汤圆

 楼主| 发表于 2011-1-27 20:46:22 | 显示全部楼层
可能是刚才我没有讲清楚,外部输入的是SPI的SCK,我需要把这个信号延时一段时间(小于半个SCK)在FPGA内部再使用。
如果按照LS的做法延时,是不是就超过一个时钟周期了?

出0入0汤圆

发表于 2011-1-27 21:02:14 | 显示全部楼层
肯定有办法,altera我就这么干过,但是这样的东西是不能用到产品里去的。不稳定,随温度和器件批次飘移太大

出0入0汤圆

发表于 2011-1-27 21:03:19 | 显示全部楼层
回复【3楼】htjgdw  
-----------------------------------------------------------------------

为什么要这样做?
spi肯定是你方法错了
你应该用下降沿触发采样输入值

出50入0汤圆

发表于 2011-1-27 21:10:05 | 显示全部楼层
单独有一个比较快的主时钟,然后做延时就是了

2楼的方法是最靠谱的,硬件延时,很头疼的。

出0入0汤圆

 楼主| 发表于 2011-1-27 21:27:25 | 显示全部楼层
还是没理解我的意思。
如果是一个一直存在的时钟,我可以用2楼的方法去做。
现在情况是:SCK时钟是外部SPI接口输入的,并且FPGA内部的电路要靠这个时钟触发做一系列工作,并把结果通过MISO送回外面的controller   使用高频的主时钟倒是可以增加一些可用的沿,但是和SCK同步就不好做了。因为这个是外部任何时候都可能输入的。
如果能够把输入的SCK倍频并使用,也可以达到我的目的。只是不会倍频电路,还请大家指教。

出0入0汤圆

发表于 2011-1-27 21:30:12 | 显示全部楼层
回复【7楼】htjgdw  
-----------------------------------------------------------------------

为什么不给fpga再加个时钟几倍于spi频率,异步工作      非要和spi同步?

出0入0汤圆

发表于 2011-1-27 21:35:55 | 显示全部楼层
SPI时钟数据相位肯定是合理的,你换个时钟沿处理

出0入0汤圆

 楼主| 发表于 2011-1-27 22:01:14 | 显示全部楼层
没错,现在我的电路可以工作。我们是想把延时可以微调的。

出0入0汤圆

发表于 2011-1-27 23:32:52 | 显示全部楼层
没见过这么做SPI通信的……无语

出0入0汤圆

发表于 2011-1-27 23:42:16 | 显示全部楼层
可以实现的,使用Keep约束。参考Xilinx的Constrains Guide(Xilinx\doc\usenglish\books\docs\cgd\cgd.pdf)

Before using KEEP, declare it with the following syntax:
attribute keep : string;
After KEEP has been declared, specify the VHDL constraint as follows:
attribute keep of signal_name: signal is “true”;
For a detailed discussion of the basic VHDL syntax, see “VHDL”.

Example:

attribute keep : string;
attribute keep of keep1: signal is "true";
attribute keep of keep2: signal is "true";

keep1 <= not sig_delay;
keep2 <= not keep1;

我也觉得这方法不大可靠,不好随便用。另外FPGA的倍频不是随便就能用的,有最小频率要求,还要很多个周期的稳定时间,在这里是肯定不适用的。

出0入4汤圆

发表于 2011-1-27 23:53:32 | 显示全部楼层
倍频后可以解决问题   

你想要什么位置触发都可以

出0入0汤圆

 楼主| 发表于 2011-1-28 00:00:57 | 显示全部楼层
谢谢大家了。我去查查看有没有verilog hdl的keep关键字。因为我现在用的是verilog。
大家对spi还是很熟悉啊,其实我也很明白:)。只是现在调的是一个未来的spi接口,和现在的spi很不一样。也许再过半年大家就了解了。在这里先给大伙拜个早年,谢谢大家了!

出0入0汤圆

发表于 2011-1-28 00:09:30 | 显示全部楼层
从开始就注定是个悲剧,回头是岸啊

出0入0汤圆

发表于 2011-1-28 09:53:44 | 显示全部楼层
还是用D触发器延时吧

出0入0汤圆

发表于 2011-1-28 09:57:32 | 显示全部楼层
如果你是想倍频或移相,请用DCM的phaes shift
如果你是想做可调延迟,请用I-delay-adj

出0入0汤圆

发表于 2011-2-11 22:52:14 | 显示全部楼层
如果想要相位差的话就把SPI的时钟信号取反操作就可以了

出0入0汤圆

发表于 2011-2-12 20:26:44 | 显示全部楼层
xilinx的DLL、DCM是基于延迟线的,可以来调延时,
如果是altera的芯片,则不行啦。

不过你可以用外部电路辅助,弄个早晚门延迟锁相环出来。

出55入66汤圆

发表于 2011-3-3 16:08:37 | 显示全部楼层
还可以用LUT延时,Spartan 3 -5系列的每个LUT延时大概是600ps。
但LUT延时会受温度和电压影响,可以用LUT做个tap delay电路来实时计算LUT延时

出0入0汤圆

发表于 2011-3-9 09:43:09 | 显示全部楼层
如果你的系统时钟频率大于你的两倍SCK时钟频率(如果SCK时钟随机产生的也行, 只要SCK时钟的脉冲宽度(或周期)大于你的两倍系统时钟周期),就用移位寄存器,就能保你延时小于半个SCK时钟周期,这样做稳定可靠,延时可调,如果你的系统时钟频率与SCK时钟频率差不多, 就要多损失两个管脚, 方法是SCK从A脚输入,B脚输出,电路板上把B脚与C脚把连在一起, 你使用C脚信号,这种方法也能延时,但延时量不可控。不要指望用逻辑门来延时,它会被优化掉的。

出0入0汤圆

发表于 2011-3-9 09:56:54 | 显示全部楼层
回复【22楼】yhzhx01
-----------------------------------------------------------------------

用逻辑门做延迟肯定是可以的,用底层原语,或者加约束防止优化就是了

出0入0汤圆

发表于 2011-3-9 11:04:17 | 显示全部楼层
回复【23楼】h2feo4 无机酸
-----------------------------------------------------------------------

怎么做?

出0入0汤圆

发表于 2011-3-9 14:40:48 | 显示全部楼层
回复【24楼】yhzhx01
-----------------------------------------------------------------------

如果是Xilinx的话,可以例化LUT
或者使用"s"约束,即保留网络名,详情看约束手册(UG625)

出0入0汤圆

发表于 2011-3-14 14:38:28 | 显示全部楼层
为什么要在CLK上加这些东西,看着不靠谱。。。。

出0入0汤圆

发表于 2011-3-15 10:50:13 | 显示全部楼层
看得头大,什么未来的SPI?这么神秘;
我看主要是同步CLK,通过2倍以上与CLK的系统时钟,进行同步,不知这种方法如何

singal buf: std_logic_vector(2 downto 0)
signal clkout: std_logic;--同步以后时钟



if(sysclk'event and sysclk ='1') then

buf<=buf(1 downto 0)&CLK;
clk<buf(2) and (not buf(1));

出0入0汤圆

发表于 2011-3-26 20:42:24 | 显示全部楼层
使用buf可以做,容易手温度影响;
如果用idelay_ctrl实现就很稳定还可调,只是实现起来比较麻烦。

出0入0汤圆

发表于 2011-3-26 21:30:14 | 显示全部楼层
我不知道楼主出于什么目的要加这样可控的延时,为什么不能通过时序约束来达到同样的目的呢?
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-24 15:20

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表