在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
12
返回列表 发新帖
楼主: ZLS

太奇怪啦!!不可能!!

[复制链接]
发表于 2004-6-10 17:34:59 | 显示全部楼层

太奇怪啦!!不可能!!



下面引用由ZLS2004/06/10 04:53pm 发表的内容:
REST是计数使能信号还是复位信号
…………………………………………………………
REST为高复位(为高就停止记数),REST为低初始化。

那什么时候计数呢
 楼主| 发表于 2004-6-10 17:59:07 | 显示全部楼层

太奇怪啦!!不可能!!

PROCESS(CLK)         --同步
BEGIN
IF CLK' EVENT AND CLK='1' THEN
  IF BUFY1="00000000000000" THEN      
      IF REST='1' THEN
        BUFY1<="00000000000000";
      ELSE
        BUFY1<="00000011001000";      --200
        XAXA2<=‘0’;
      END IF;
  ELSE
     BUFY1<=BUFY1-1;
     XAXA2<=NOT XAXA2;      
  END IF;
END IF;
END PROCESS;

假如,REST为高复位(为高就停止记数),REST为低初始化。初始化后BUFY1/=0,
下一个CLK来的时候就记数。BUFY1/=0,REST没有用。
发表于 2004-6-10 20:03:37 | 显示全部楼层

太奇怪啦!!不可能!!

entity pulse is
    Port (reset: in std_logic;
          clk: in std_logic;
bufy1ut std_logic_vector(0 to 13);
           outt: out std_logic );
end pulse;
architecture Behavioral of pulse is
signal regoutt: std_logic;
signal bufferr:std_logic_vector(13 downto 0);
begin
PROCESS(clk,reset)
BEGIN
if reset='1' then
    bufferr<="00000011001000";
    regoutt<='0';
elsif clk' event and clk='1'then
    if(bufferr>"00000000000000")then
bufferr<=bufferr-'1';
regoutt<=not regoutt;
end if;
end if;

END PROCESS;

outt<=regoutt;   
bufy1<=bufferr;
end Behavioral;
你看这样行么?????大致写了一下,,而且我也一直没用vhdl了,,,
 楼主| 发表于 2004-6-11 09:10:15 | 显示全部楼层

太奇怪啦!!不可能!!

PROCESS(clk,reset)
BEGIN
if reset='1' then
   bufferr<="00000011001000";
   regoutt<='0';
elsif clk' event and clk='1'then
   if(bufferr>"00000000000000")then
bufferr<=bufferr-'1';
regoutt<=not regoutt;
end if;
end if;
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
我必须等到bufferr=0的时候才对bufferr赋值。才能保证每次都只有100个脉冲输出。
并且reset是随机的。
PROCESS(clk,reset)
BEGIN
IF bufferr="000000000000" THEN
  if reset='1' then
     bufferr<="00000011001000";
     regoutt<='0';
   END IF;
elsif clk' event and clk='1'then
   if(bufferr>"00000000000000")then
      bufferr<=bufferr-'1';
      regoutt<=not regoutt;
   end if;
end if;

这样没有问题吧????
 楼主| 发表于 2004-6-11 10:03:53 | 显示全部楼层

太奇怪啦!!不可能!!

我把同样的程序写到CPLD上,但是效果一样,是不是可以排除硬件问题,就是软件出错。
我还是不明白错在那里??就这十几段程序。
 楼主| 发表于 2004-6-12 09:43:30 | 显示全部楼层

太奇怪啦!!不可能!!

是不是毛刺问题?
我改成同步复位,效果要比异步复位好一点,但是还是要出错。
加个触发器可以去毛刺??
发表于 2004-6-12 13:08:04 | 显示全部楼层

太奇怪啦!!不可能!!

将包括同步复位在内的所有逻辑都放到if clk' event and clk='1'then下去,就不会有任何问题了。
 楼主| 发表于 2004-6-14 09:52:01 | 显示全部楼层

太奇怪啦!!不可能!!

将包括同步复位在内的所有逻辑都放到if clk' event and clk='1'then下去,就不会有任何问题了

^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
PROCESS(CLK)         --同步
BEGIN
IF CLK' EVENT AND CLK='1' THEN
   IF BUFY1="00000000000000" THEN      
       IF REST='1' THEN
         BUFY1<="00000000000000";
       ELSE
         BUFY1<="00000011001000";      --200
       END IF;
   ELSE
      BUFY1<=BUFY1-1;
      XAXA2<=NOT XAXA2;      
   END IF;
END IF;
END PROCESS;
  
OUT<=XAXA2;
这样???我试过,也不对。
  
 楼主| 发表于 2004-6-16 08:29:31 | 显示全部楼层

太奇怪啦!!不可能!!

REST为组合逻辑产生的信号,有毛刺,用来复位和置位,很危险。
CLK也是组合逻辑产生的,也可能有毛刺。
毛刺真是个头痛的问题。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /2 下一条


小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-11-23 11:56 , Processed in 0.020267 second(s), 6 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表