怎样检测最后一个脉冲

[复制链接]
832|11
手机看帖
扫描二维码
随时随地手机跟帖
yuzhexian|  楼主 | 2016-10-15 07:14 | 显示全部楼层 |阅读模式
本帖最后由 yuzhexian 于 2016-10-17 20:03 编辑

QQ截图20161015071050.png

上面是周期信号/tg,下面是输入信号va,一个周期内,
输入信号有1到4个脉冲不等,怎样鉴相最后一个或者取出最后一个脉冲,求大神帮忙。 QQ截图20161015081621.png QQ截图20161015080837.png

现在用d触发器鉴相,只能得到第一个脉冲的鉴相信号,求解决方法需要的信号是这样的:

QQ截图20161015090217.png

已找到方法,编了一段程序
library IEEE;
use IEEE.std_logic_1164.all;
entity va4 is
  port (     
        va: IN std_logic;
        tg: IN std_logic;
        q: OUT std_logic
        );
end va4;
Architecture COUNT_3 of va4 is
signal q1: std_logic;
Begin
process(tg,va)
VARIABLE C: INTEGER RANGE 0 TO 4;
  begin
  if(tg='0') then
        q1<='1';
  elsif(va'event and va='1') then
       C:=C+1;
      if(C=4) then q1<='0'; C:=0;
     ELSE q1<='1';
    end if;
  end if;
end process;
q<=q1;
END COUNT_3;

QQ截图20161017195358.png
可惜不够灵活,va信号只能要求4个,不能1-4任意几个,实用价值不高,
在此谢谢大家的回复关注,先结贴了,以后慢慢讨论。
QQ截图20161015085736.png

相关帖子

diweo| | 2016-10-15 07:58 | 显示全部楼层
不管是第几个,来一个就记录一个,后面的把前面的覆盖。等到一个周期结束的时候,就得到最后一个了。  不知道可不可行?

使用特权

评论回复
yuzhexian|  楼主 | 2016-10-15 08:16 | 显示全部楼层
本帖最后由 yuzhexian 于 2016-10-15 08:22 编辑
diweo 发表于 2016-10-15 07:58
不管是第几个,来一个就记录一个,后面的把前面的覆盖。等到一个周期结束的时候,就得到最后一个了。  不知 ...

谢谢,不知道如何实现,求指教。

使用特权

评论回复
玄德| | 2016-10-15 11:32 | 显示全部楼层

这可能吗?除非有前提:有且只有四个脉冲。
重新规划你的需求。


使用特权

评论回复
yuzhexian|  楼主 | 2016-10-15 13:20 | 显示全部楼层
玄德 发表于 2016-10-15 11:32
这可能吗?除非有前提:有且只有四个脉冲。
重新规划你的需求。

谢谢,如果只有4个脉冲怎样设计呢?

使用特权

评论回复
玄德| | 2016-10-15 13:43 | 显示全部楼层
yuzhexian 发表于 2016-10-15 13:20
谢谢,如果只有4个脉冲怎样设计呢?


数个数,第三个以后开始检测边缘。

使用特权

评论回复
oayzw| | 2016-10-15 13:55 | 显示全部楼层
好像实时不行吧,软件判断的结果是有延迟的

使用特权

评论回复
caojihui521| | 2016-10-15 23:08 | 显示全部楼层
逻辑分析仪是不是可以抓取啊

使用特权

评论回复
七颗咖啡豆| | 2016-10-15 23:33 | 显示全部楼层
这是要纯硬件检测

使用特权

评论回复
yuzhexian|  楼主 | 2016-10-16 08:08 | 显示全部楼层
本帖最后由 yuzhexian 于 2016-10-16 08:16 编辑
玄德 发表于 2016-10-15 13:43
数个数,第三个以后开始检测边缘。

写了一段程序,但q输出端横为高电平,麻烦看下哪里错了
tg是周期信号,va是输入信号,q是检测第四的脉冲的输出信号,想c计数到4时把q输出变成低电平
library IEEE;
use IEEE.std_logic_1164.all;

entity va4 is
  port (
        va: IN std_logic;
        tg: IN std_logic;
        q: OUT std_logic
        );
end va4;
Architecture COUNT_3 of va4 is
Begin
  process(tg,va)
VARIABLE C: INTEGER RANGE 0 TO 4;
  begin
    if(tg'event and tg='0') then
       q<='1';
       C:=0;
      if(va'event and va='1') then
       C:=C+1;
     if(C=4) then
        q<='0';
        C:=0;
    end if;
    end if;
end if;
end process;

END COUNT_3; QQ截图20161016081000.png

使用特权

评论回复
玄德| | 2016-10-16 10:55 | 显示全部楼层
yuzhexian 发表于 2016-10-16 08:08
写了一段程序,但q输出端横为高电平,麻烦看下哪里错了
tg是周期信号,va是输入信号,q是检测第四的脉冲的 ...


看不懂VHDL,学习一下modelsim仿真吧,
如果确定四个脉冲,事情很简单。



使用特权

评论回复
玄德| | 2016-10-16 11:56 | 显示全部楼层
yuzhexian 发表于 2016-10-16 08:08
写了一段程序,但q输出端横为高电平,麻烦看下哪里错了
tg是周期信号,va是输入信号,q是检测第四的脉冲的 ...


1、好像没看到复位逻辑,
2、相等的比较,是=而不是==,确定吗?
3、信号不变化,说明没有对应的条件,或者有条件但执行错。

还是建议学校modelsim仿真,初学者必备,
所有信号、变量的值都显示,找问题就方便。


使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

221

主题

272

帖子

0

粉丝