scfor 发表于 2011-7-25 17:21:08

一路脉冲上升沿计数,然后某个时刻下降沿计数,CPLD怎么实现

高手帮帮忙

xivisi 发表于 2011-7-25 17:23:00

........楼主搜边沿检测 上升沿 下降沿 同时检测出来了后面的 不用我说了吧

scfor 发表于 2011-7-25 17:29:52

能说得详细点么 我是新手谢谢

smartkids77 发表于 2011-7-25 19:44:09

FPGA、CPLD里一般没有双边沿触发器,所以这样的代码一般是不可以综合的

306468117 发表于 2011-7-26 14:48:12

没理解明白你的意思。

arokh 发表于 2011-7-26 22:57:13

用一个足够快的高速脉冲抓你的“一路脉冲”。抓到前一个是‘1’后一个是‘0’说明是下降沿。反之是上升沿。一开始上升沿计数,对下降沿不理会,然后到了“某时刻”改成下降沿,不理会上升沿即可

scfor 发表于 2011-7-27 09:36:23

回复【5楼】arokh 圆圆的饭团
用一个足够快的高速脉冲抓你的“一路脉冲”。抓到前一个是‘1’后一个是‘0’说明是下降沿。反之是上升沿。一开始上升沿计数,对下降沿不理会,然后到了“某时刻”改成下降沿,不理会上升沿即可
-----------------------------------------------------------------------

貌似可以

gunslinger 发表于 2011-7-29 22:40:33

5楼说的对,就是用快的时钟来打慢的时钟,慢的时钟周期最少是快的两倍!!!

gunslinger 发表于 2011-7-29 22:46:29

pulse: in std_logic;(端口)

然后定义两个信号
reg1,reg2: std_logic;
process(clk)
begin
   if rising_edge(clk) then
      reg1<=pulse;
      reg2<=reg1;
   end if;
end process;
   上升沿就是(up_edge<=reg1 and (not reg2);
   下降沿      down_edge<= not reg1 and reg2;
剩下的你想怎么控制你说的算!!!!

40130064 发表于 2011-7-30 08:29:35

clk   :时钟大于大于din
din   :输入信号
up_diff :din 上升沿后输出一个clk周期宽的脉冲
dn_diff :din 下降沿后输出一个clk周期宽的脉冲


library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
use ieee.std_logic_arith.all;
ENTITY DIFF IS
   PORT (
      clk                     : in std_logic;   
      din                     : in std_logic;   
      up_diff,dn_diff          :out std_logic);   
END DIFF;

ARCHITECTURE epm570 OF DIFF IS   
   SIGNAL t1,t2            :std_logic;   

BEGIN
   PROCESS
   BEGIN
   WAIT UNTIL (clk'EVENT AND clk = '1');   
    t2 <= t1;   
    t1 <= din;
   END PROCESS;

up_diff<=t1 AND NOT t2;
dn_diff<=NOT t1 AND t2;

END epm570;

zgrdev 发表于 2011-8-2 17:11:53

组合逻辑的阻塞 试试
页: [1]
查看完整版本: 一路脉冲上升沿计数,然后某个时刻下降沿计数,CPLD怎么实现