搜索
bottom↓
回复: 23

用EPM240怎么实现输入系列信号延迟输出?

[复制链接]

出0入0汤圆

发表于 2012-5-9 17:56:54 | 显示全部楼层 |阅读模式
本帖最后由 mrbpost 于 2012-5-9 21:54 编辑

输入为系列高底电平信号,怎么利用EPM240将系列高底电平信号延迟T(十几毫秒)时间输出,  EPM240仅仅实现系列数字信号的延迟输出而不改变信号的频率.

谢谢各位提供的思路,晶振是1MHZ,输入信号的的频率在19MS~21MS之间变化,要求每个周波延迟18MS输出,可以做到吗?因为要求延迟误差是几微秒,所以晶振用1MHZ。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

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

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

出0入0汤圆

发表于 2012-5-9 18:02:01 | 显示全部楼层
用另一个高的频率的信号 多打几拍几可以了

出0入0汤圆

发表于 2012-5-9 18:11:34 | 显示全部楼层
本帖最后由 wangguanfu 于 2012-5-9 18:13 编辑

输出Fo_1MHZ比Fi_1MZ延迟300nS(3个F_10MHZ周期)

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入442汤圆

发表于 2012-5-9 18:48:29 | 显示全部楼层
这个恐怕EPM240搞不定吧。需要用一颗大容量缓存芯片做FIFO存储,同时要计算有多少路信号,每秒采样多少次。比如4路100MHz采样,则1s需要200MByte的容量,10ms也需要2MB的容量。

出0入0汤圆

发表于 2012-5-9 19:28:58 | 显示全部楼层
n个D触发器 + 同频时钟

出0入0汤圆

发表于 2012-5-9 20:15:11 | 显示全部楼层
这个有意思了,我正好最近也在想这个问题。我不光想实现这个延迟,还想这个延迟可控;不光延迟可控,还想上升沿延迟和下降沿延迟不一样,都可控。有哪位大虾有什么好思路吗?

出0入0汤圆

发表于 2012-5-9 20:28:44 | 显示全部楼层
刚看了3楼回复

刚开始打算 周期整数倍 由n决定,小于一个周期的由同频时钟的相位决定。但相位难以控制(要控制的话又变成3楼那种了),故3楼最优,延迟时间误差由高频的频率决定

出0入0汤圆

发表于 2012-5-9 20:58:37 | 显示全部楼层
本帖最后由 wangguanfu 于 2012-5-9 21:05 编辑
wye11083 发表于 2012-5-9 18:48
这个恐怕EPM240搞不定吧。需要用一颗大容量缓存芯片做FIFO存储,同时要计算有多少路信号,每秒采样多少次。 ...


仔细看了你的要求 呵呵 思路就有问题

出0入0汤圆

发表于 2012-5-9 21:02:58 | 显示全部楼层
水哥 发表于 2012-5-9 20:15
这个有意思了,我正好最近也在想这个问题。我不光想实现这个延迟,还想这个延迟可控;不光延迟可控,还想上 ...

把我3楼的电路扩展下 做成边沿检测然后分别对上/下沿打N拍就是了

出0入442汤圆

发表于 2012-5-9 21:10:07 | 显示全部楼层
wangguanfu 发表于 2012-5-9 20:58
仔细看了你的要求 呵呵 思路就有问题

我的思路是没有问题的。你要看清LZ写的是延时十几ms,不是几个周期!

出0入0汤圆

发表于 2012-5-9 21:16:34 | 显示全部楼层
wye11083 发表于 2012-5-9 21:10
我的思路是没有问题的。你要看清LZ写的是延时十几ms,不是几个周期!

LZ用240 又没说基频频率 他说十几ms。配合他的图,可以理解成基频一个周期时间也不小于十几ms!! 怎么可能是用100MHZ去采样呢

出0入0汤圆

发表于 2012-5-9 22:23:57 | 显示全部楼层
wangguanfu 发表于 2012-5-9 21:16
LZ用240 又没说基频频率 他说十几ms。配合他的图,可以理解成基频一个周期时间也不小于十几ms!! 怎么可 ...

wangguanfu的方法在理论上是可行的。
但是要在延时10mS的基础上,保证几个uS的误差,触发器则需要:0.018/(1/1000000)=18000个。显然EPM240的资源达不到。
还得用wye11083的方法才行。

出0入442汤圆

发表于 2012-5-9 22:37:25 | 显示全部楼层
wangguanfu 发表于 2012-5-9 21:16
LZ用240 又没说基频频率 他说十几ms。配合他的图,可以理解成基频一个周期时间也不小于十几ms!! 怎么可 ...

也是,看他的图是20ms,延时18ms的话,如果以1ms步进,用1K的频率就够了。

出0入442汤圆

发表于 2012-5-9 22:37:59 | 显示全部楼层
wangguanfu 发表于 2012-5-9 21:16
LZ用240 又没说基频频率 他说十几ms。配合他的图,可以理解成基频一个周期时间也不小于十几ms!! 怎么可 ...

因为我现在做的都是100M以上的信号,所以理所当然的是高频了。

出0入0汤圆

发表于 2012-5-10 09:06:13 | 显示全部楼层
本帖最后由 dragon_hn 于 2012-5-10 09:11 编辑

看清楼主的要求啦:要求延迟误差是几微秒!
所以照这个要求,最直接的是用18000个D触发器。
不过也有其他简便方法,因为楼主的输入信号频率很低,所以可以通过捕获输入信号的上下边沿用计数器来实现。

出0入0汤圆

发表于 2012-5-10 09:17:22 | 显示全部楼层
本帖最后由 dragon_hn 于 2012-5-10 09:21 编辑

题意:输入信号的的频率在19MS~21MS之间变化,要求每个周波延迟18MS输出,延迟误差是几微秒。
根据楼主的意思,只需要保存一个脉冲的上升沿和下降沿时间即可。
思路:
    IF(1MHz时钟上升沿) THEN
          IF (输入信号上升沿) THEN 上升沿计数器清零。END IF;
       IF (输入信号下降沿) THEN 下降沿计数器清零。END IF;
       IF (上升沿计数器==18000) THEN 输出信号置1.  END IF;
       IF (下降沿计数器==18000) THEN 输出信号置0.  END IF;
     END IF;

出0入0汤圆

发表于 2012-5-10 09:27:05 | 显示全部楼层
dragon_hn 发表于 2012-5-10 09:06
看清楼主的要求啦:要求延迟误差是几微秒!
所以照这个要求,最直接的是用18000个D触发器。
不过也有其他简 ...

18000个D触发器?有钱人啊

出0入0汤圆

发表于 2012-5-10 09:41:18 | 显示全部楼层
最主要的是看,要求的实际延时精度 与 理论延迟精度的误差是多少?
决定是否采用CPLD,FPGA,还是 单片机!

可参看12楼的分析

出0入0汤圆

发表于 2012-5-10 09:55:11 | 显示全部楼层
wangguanfu 发表于 2012-5-10 09:27
18000个D触发器?有钱人啊

18000个D触发器用FPGA不是什么难事。

照我下面的方法:
边沿检测用2个D触发器
每个计数器用17个D触发器。
输出用1个D触发器。
总共只需要2+17+17+1=37个D触发器,用EPM240完全胜任。

出0入0汤圆

 楼主| 发表于 2012-5-10 22:28:58 | 显示全部楼层
dragon_hn 发表于 2012-5-10 09:55
18000个D触发器用FPGA不是什么难事。

照我下面的方法:

非常感谢以上各位网友提供的意见方案,我根据回复情况总结了三种方案:

1,用多个D触发器实现延时,但由于EPM240的资源不够,显然做不到误差微秒的要求。
2,将波形采样存储,18MS后再读取输出,EPM240的RAM有限,需要外加缓存。
3,按照网友dragon_hn 提供的方案,写了一段代码如下:
/**************************************************************
*        File Name                :                signal_delay.v               
*        Author                        :               
*        Version                        :                Quartus II 9.1 SP2
*        CreateDate                :                2012/5/10
*        Description                :                phase compensation
**************************************************************/
/* pin allocation :  
* function       :  
*************************************************************/

module signal_delay( Rst,CLOCK_1M,A_ZRE0_CROSS,A_ZRE0_CROSS_MOVE);
input      CLOCK_1M;  // 时钟
input       A_ZRE0_CROSS; // 输入信号
input     Rst;
output    A_ZRE0_CROSS_MOVE; // 延迟输出信号
/**************************************************************
  *Description                :定时器1,时长:
  * pin allocation  :         
**************************************************************/
parameter UP_TIMER_VAL=131071; //
reg        up_timer18ms_enable;
reg [16:0] up_timer18ms_cnt; //
wire       up_timer18ms_over;
always @(posedge CLOCK_1M or negedge Rst)
        if (!Rst)
    up_timer18ms_cnt <=0;
      else
    up_timer18ms_cnt<= up_timer18ms_cnt + 1'b1;  

/**************************************************************
  *        Description                :定时器2,时长:
  * pin allocation  :         
**************************************************************/

parameter DOWN_TIMER_VAL =131071;      
reg        down_timer18ms_enable;
reg [16:0] down_timer18ms_cnt; //
wire       down_timer18ms_over;

always @(posedge CLOCK_1M)
    if (!Rst)
    down_timer18ms_cnt <= 0; //
    else
    down_timer18ms_cnt <= down_timer18ms_cnt+ 1'b1;

/**************************************************************
  *        Description                :        上升沿定时器清零
  * pin allocation  :  
**************************************************************/

always @(posedge A_ZRE0_CROSS)

up_timer18ms_cnt <= 0;

/**************************************************************
  *        Description                :  下降 沿定时器清零     
  * pin allocation  :
**************************************************************/
always @(negedge A_ZRE0_CROSS)

down_timer18ms_cnt <= 0;

/**************************************************************
  *        Description                :       
  * pin allocation  :  A_ZRE0_CROSS-->pin12 , A_ZRE0_CROSS_MOVE -->pin42
**************************************************************/

reg  A_ZRE0_CROSS_MOVE;
always @(posedge CLOCK_1M)
if(up_timer18ms_cnt==17999) //
A_ZRE0_CROSS_MOVE <=1;
  //end
else if(down_timer18ms_cnt==17999)
A_ZRE0_CROSS_MOVE <=0;

endmodule

为什么编译出错,Can't resolve multiple constant drivers for net "up_timer18ms_cnt [16]" at signal_delay.v(25) ,根据百度提示是两个进程不能对一个变量赋值,对CPLD不是很懂,VERILOG也是刚看了一些指令,希望大家多指教,怎么来改正这段代码实现输出信号延时要求,尤其希望网友dragon_hn根据你的思路给予指导,十分谢谢。

出0入0汤圆

 楼主| 发表于 2012-5-12 12:39:24 | 显示全部楼层
mrbpost 发表于 2012-5-10 22:28
非常感谢以上各位网友提供的意见方案,我根据回复情况总结了三种方案:

1,用多个D触发器实现延时,但由 ...

有知道的网友可以指点一下吗?

出0入0汤圆

发表于 2012-5-12 21:13:14 | 显示全部楼层
ENTITY NEW_DELAY IS

PORT(
  CLK   : IN  STD_LOGIC;     -- 1MHz
  DIN   : IN  STD_LOGIC;     -- 输入信号
  DOT   : OUT  STD_LOGIC      -- 输出信号
);

END ENTITY NEW_DELAY;

ARCHITECTURE FUNC OF NEW_DELAY IS
  SIGNAL DOT_XX  : STD_LOGIC;

BEGIN

PROCESS(CLK)

  VARIABLE CNT1T0 : STD_LOGIC_VECTOR(16 DOWNTO 0);
  VARIABLE CNT0T1 : STD_LOGIC_VECTOR(16 DOWNTO 0);
  VARIABLE DIN_SV : STD_LOGIC;

BEGIN
  IF (CLK'EVENT AND CLK = '1') THEN
    IF(DIN='0' AND DIN_SV='1') THEN
      CNT1T0:="00000000000000000";
    ELSE
      CNT1T0:=CNT1T0+1;
    END IF;
    IF(DIN='1' AND DIN_SV='0') THEN
      CNT0T1:="00000000000000000";
    ELSE
      CNT0T1:=CNT0T1+1;
    END IF;
    IF(CNT1T0=18000)  THEN
      DOT_XX<='0';
    END IF;
    IF(CNT0T1=18000)  THEN
      DOT_XX<='1';
    END IF;
    DIN_SV:=DIN;
  END IF;
END PROCESS;
  DOT<=DOT_XX;
END ARCHITECTURE FUNC;


VHDL程序,已经仿真通过,手工敲进电脑,然后可以转成verilog

出0入0汤圆

 楼主| 发表于 2012-5-15 20:11:11 | 显示全部楼层
dragon_hn 发表于 2012-5-12 21:13
ENTITY NEW_DELAY IS

PORT(

谢谢网友dragon_hn ,按照您的方案和提供的代码,用240已经实现了六路信号延迟功能。

出0入0汤圆

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

本版积分规则

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

GMT+8, 2024-7-24 03:24

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

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