CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
(图)邪恶的韩国UMPC 使用 Java 编写数据库应用新规范
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  硬件/嵌入开发 >  硬件设计

帮忙解释:一个VHDL语言描述的10进制计数器cnt10

楼主angelanpan()2005-01-07 14:31:15 在 硬件/嵌入开发 / 硬件设计 提问

十进制计数器cn10  
  cnt10的输入端口:  
  en——允许计数  
  clk--时钟;  
  reset--复位;  
  输出端口为:  
  q--计数值输出;  
  carry--进位输出;  
   
  具体描述如下:  
  LIBRARY   IEEE;  
  USE   IEEE.STD_LOGIC_1164.ALL;  
  USE   IEEE.STD_LOGIC_ARITH.ALL;  
  ENTITY   cnt10   IS  
        PORT(reset,en,clk:IN   STD_LOGIC;  
                  carry:OUT   STD_ULOGIC;  
                  q:OUT   STD_ULOGIC_VECTOR(3   DOWNTO   0));  
  END   cnt10;  
   
  ARCHITECTURE   rtl   OF   cnt10   IS  
            SIGNAL   qs:STD_LOGIC_VECTOR(3   DOWNTO   O);  
            SIGNAL   ca:STD_ULOGIC;  
            BEGIN  
                  PROCESS(clk)  
                                  VARIABLE   q10:INTEGER;  
                              BEGIN  
                                    IF(clk'EVENT   AND   clk='1')THEN  
                                          IF(reset='1')THEN  
                                                  q10:=0;                  
                                          ELSIF(en='1')THEN  
                                                IF(q10=9)THEN  
                                                    q10:=0  
                                                    ca<='0';                                                                   ---(1)  
                                                ELSIF(q10=8)THEN  
                                                    q10:=q10+1;  
                                                    ca<='1';                                                                   ---(2)  
                                                ELSE  
                                                    q10:=q10+1;  
                                                    ca<='0';  
                                                END   IF;  
                                            END   IF;  
                                    END   IF;  
                                  qs<=CONV_STD_LOGIC_VECTOR(q10,4);  
                                  q<=TO_STDULOGICVECTOR(qs);  
                        END   PROCESS;  
              PROCESS(ca,en)  
              BEGIN  
                      carry<=ca   AND   en;  
              END   PROCESS;  
  END   rtl;  
   
    我初学vhdl,对这个描述有点问题:为什么当q10是9的时候,再加1,不进位,而是8的时候,加1就进位呢?就是上面的(1)(2)两个句子,按我的理解,难道不是应该当9加1的时候,carry不应该是1吗,8加1的时候,carry应该是0啊? 问题点数:20、回复次数:3Top

1 楼0909424(浪子)回复于 2005-01-07 15:21:42 得分 10

没写过VHDL,你的赋值好像是混合赋值的,可能是考虑了实际赋值延迟的问题Top

2 楼angelanpan()回复于 2005-01-07 18:41:21 得分 0

有没有高手写VHDL的啊?Top

3 楼neilkn()回复于 2005-01-09 05:27:06 得分 10

也刚学vhdl,说些个人看法:  
  signal   赋值跟   variable   赋值不同  
  variable是即时赋值的,而signal赋值是有一定延时的,如果carry   out有clk事件限制的话,就很容易从仿真图中看出这个方案跟你自己的方案见的差别在哪了。  
   
  其实你可以按自己的思路,更改下,然后看看仿真结果相差在哪。  
  然后再在carry的那个进程里,加入   clk'event   and   clk   =   '0'   的限制,再看看两个方案的仿真结果差别。  
   
  这个方案这么做,应该是为了确保carry在   q   为   9   时有效。Top

相关问题

  • javabean计数器
  • 计数器
  • .net计数器
  • 有关计数器......
  • 关于计数器
  • 做个计数器
  • 计数器问题
  • 计数器问题
  • 关于计数器
  • 关于计数器

关键词

  • ieee
  • cnt
  • clk
  • ulogic
  • std
  • logic
  • reset
  • en
  • then

得分解答快速导航

  • 帖主:angelanpan
  • 0909424
  • neilkn

相关链接

  • CSDN Blog
  • 技术文档
  • 代码下载
  • 第二书店
  • 读书频道

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
惹火投票。。火热进行中...

社区焦点:

教你怎样用C#搞笑整人
最懒惰的程序员写的Cache
程序员如何掌握专业英语
Java栈与堆
分享:让人懊恼的面试
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo