4668|10

80

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

求助:VHDL设计计数器的问题 [复制链接]

设计一个16位的计数器对CLK1计数,上位机通过STRB对当前的计数值进行锁存,CS为计数器的片选,RD为读选通,读取锁存后的计数值
在QUARTUS中仿真,结果正确,可下载到CPLD后,发现即使CLK1没有输入信号,计数器也在计数,即语句CLK1 'event AND CLK1='1'好像没有起作用,counter1<=counter1+'1';一直在运行
下面是程序,请帮我看看原因在哪,我用的型号是MAXII

library IEEE;
use IEEE.std_logic_1164.all;
use ieee.std_logic_arith.all;
use ieee.std_logic_unsigned.all;

entity counter is
   port(
         CS:  in std_logic;
         STROBE:  in std_logic;
         CLK1: in std_logic;
         CLR: in std_logic;
         RD:  in std_logic;
         DATA: out std_logic_vector(15 downto 0)
        );

end counter;

architecture behavior of sixcounter is
    signal counter1: std_logic_vector(15 downto 0):=x"0000";      --计数值
    signal counter1_temp: std_logic_vector(15 downto 0):=x"0000";  --锁存值
   
   
begin
    COUNT1: process(CS,CLR,CLK1)                     --计数
           begin
            if(CLR='0' AND CS='0') then
                counter1<=x"0000";
            elsif(CLK1 'event AND CLK1='1') then
                 if(counter1=x"FFFF") then
                     counter1<=x"0000";
                  else  counter1<=counter1+'1';
                 end if;
            end if;
         end process COUNT1;
     
   
      STRB: process(CS,STROBE)                       --锁存
             begin
              if(STROBE 'event AND STROBE='1') then
                 if(CS='0') then
                   counter1_temp<=counter1;
                 end if;
              end if;
        end process STRB;   
     

      READDATA: process(CS,RD)                       --读取
             begin
             if(CS='0' AND RD='0') then
               DATA<=counter1_temp(15 downto 0);  
              else DATA<="ZZZZZZZZZZZZZZZZ";
             end if;
       end process READDATA;

end behavior;

最新回复

可下载到CPLD后,初始值无效了  详情 回复 发表于 2007-10-16 01:00
点赞 关注

回复
举报

81

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
“发现即使CLK1没有输入信号,计数器也在计数,”这个可能性不大,除非要干扰什么的不好说。
你不如先确认下 的脚有没有对,时钟信号是不是他,用示波器看看
而后把,counter1直接输出,看看对应位的变化 是不是计数器动作的样子
 
 

回复

60

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
电路已经查过好多遍了,应该没错,CLK1脚一直为低电平,我把counter1<=counter1+'1'换成常数赋值counter1<=x"1234" 结果单片机读到的DATA就是"1234",所以才怀疑CLK1 'event AND CLK1='1'没有起作用,可仿真的结果都是正确的,太奇怪了
 
 
 

回复

66

帖子

0

TA的资源

一粒金砂(初级)

4
 
CLK1脚一直为低电平 时钟是间隙着给的吗
 
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

5
 
CLK1 'event AND CLK1='1' 这个语句该没有什么问题
内部逻辑要认真检查的,不是做了 SIM 就ok得,你有要求时序马
 
 
 

回复

77

帖子

0

TA的资源

一粒金砂(初级)

6
 
看起来程序没问题
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

7
 
会不会是虚焊?
 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

8
 
感觉你的程序应该有问题,比如
    READDATA: process(CS,RD)                       --读取
             begin
             if(CS='0' AND RD='0') then
               DATA<=counter1_temp(15 downto 0);  
              else DATA<="ZZZZZZZZZZZZZZZZ";
             end if;
       end process READDATA;
DATA是输出引脚,但是他的敏感信号只有CS,RD,它的触发信号CLK在哪呢?所以DATA的值不会受CLK影响。
  一家之言,希望对你有帮助
 
 
 

回复

86

帖子

0

TA的资源

一粒金砂(初级)

9
 
o~长见识了 这两个process该有相同的地方

      STRB: process(CS,STROBE)                       --锁存
             begin
              if(STROBE 'event AND STROBE='1') then
                 if(CS='0') then
                   counter1_temp<=counter1;
                 end if;
              end if;
        end process STRB;   
     

      READDATA: process(CS,RD)                       --读取
             begin
             if(CS='0' AND RD='0') then
               DATA<=counter1_temp(15 downto 0);  
              else DATA<="ZZZZZZZZZZZZZZZZ";
             end if;
       end process READDATA;

 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

10
 
像tigerxd  说的,搂朱最好把 下面的简化下,直接用CS,RD作为三态的驱动,
        READDATA:   process(CS,RD)                                               --读取
                          begin
                          if(CS= "0 "   AND   RD= "0 ")   then
                              DATA <=counter1_temp(15   downto   0);     
                            else   DATA <="ZZZZZZZZZZZZZZZZ";
                          end   if;
       end   process   READDATA;
 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

11
 
可下载到CPLD后,初始值无效了
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表