原创 同步使能,异步清零,简单的三位十进制计数器

2012-7-24 11:44 5883 7 11 分类: FPGA/CPLD

昨天,邹老师布置了一个小小的实验,是根据实验箱的一个实验进行修改的,要求是实现一个三位十进制的计数器,计数满后要有溢出信号、、

 

可以说,这个要求是比较简单的,很容易实现。可是对于我们刚刚开始入门的新手,要解决的问题也不少。有压力,才有动力,如果每天都按照实验给出的例程去做,去演示实验,然后理解人家的程序,一点儿没有自己去写,去思考,那样学起来,相信收获也不会很大,正如我们以前学习单片机,C语言一样,开始应该多多看看人家代码的风格,结构,算法,可是,到一定程度,还是必须自己一个一个敲! 这样自己才能掌握得更好! 

 

对于我们几个,基础都差不多,也应该说在FPGA 这方面没什么基础来说,自己去写代码,不考虑其他优化,仅仅实现一个小小功能,都不是很容易的!不过我还好,前面玩过一点儿开发板,但是学习的都是verilog ,VHDL 对我们来说都是不熟悉的,连基本的结构,语法和语句都只看了书上的第四章,不会用几个语句,这样去写,说实话,开始思考的时候,真的是有点儿不知道怎么下手的感觉啊!

 

后面,我大概看了一个类似的,是书上实现的一个一位十进制计数的代码,然后去理解它怎么实现的,这样经过,不断的修改和调试,终于基本仅仅在功能上完成了老师的要求,对于这个结果,我自己还算满意,毕竟过程中,我更加熟悉了,文本输入设计的一个完整流程,包括输入,编译,锁定引脚,仿真,下载,等等、、

现在,有必要更进一步把EDA的软件工具用得更熟悉,quartus 、modelsim、synplify等,然后把VHDL语言,通过继续学习每个实验代码,不断学习其语法结构,语言现象,

还需要深入学习数字逻辑基本设计技巧和思维,了解和使用FPGA芯片内部资源、、

 

暑假留校的日子里,这已经不是第一次了,我自己觉得自己蛮喜欢这样的时光,感觉很好! 这次暑假,生活得蛮好,还报了驾校,现在都快学场地了,其中感悟也很多,不过在这样的学习的气氛里,也不好又来乱写一些自己的想法,呵呵,再另一个地方总结吧! 

 

 

最后,思考了一下,觉得自己的代码写得好烂,根本没脸贴出来,不过,我觉得,敢于出丑才会有进步!所以、、、大家见笑了啊!!

 

这个,仅仅是用了FPGA芯片实现了,小小的十进制计数的功能,然后通过IO口输出4位二进制的BCD码,通过实验室箱上的译码芯片,译码驱动数码管显示的十进制数!可以说,FPGA只做了计数的功能,按理说,用FPGA实现一个译码的逻辑是很容易的,不过,这里由于实验要求,也没能做得多么复习,真的见笑了、、

 

 

其实和邹老师讨论的过程中,发现就这么一个简单的实验还是可以从很多细节的地方节约硬件资源,比如这里用的是每位数码管一个4位的二进制计数,这样总共需要12根IO,但是如果,直接用一个10位的二进制计数,这样能节约两根IO,不过程序译码就麻烦点儿了、、

 

最后,对我的小小博客,敬上一个“垃圾”代码:

 

 

--三位十进制计数器  mige  - 2012.07.23
 
LIBRARY IEEE; --使用IEEE的库
USE     IEEE.STD_LOGIC_1164.ALL;
USE     IEEE.STD_LOGIC_UNSIGNED.ALL; -- 库文件  程序包
 
ENTITY  cnt10b3  IS 
PORT ( CLK,RST,EN : IN  STD_LOGIC; -- 使能  复位 时钟信号
  CQ ,CQ1, CQ2 : OUT  STD_LOGIC_VECTOR (3 DOWNTO 0); -- 分别对应 输出显示
 
的 三个数码管端口
  COUT : OUT STD_LOGIC);  --进位信号  对应LED显示 溢出显示
END cnt10b3 ; 
 
ARCHITECTURE  mige  OF cnt10b3 IS
 
BEGIN 
PROCESS (CLK, RST ,EN)
 VARIABLE CQI : STD_LOGIC_VECTOR  (3 DOWNTO 0 ); --变量 0
 VARIABLE CQI1 : STD_LOGIC_VECTOR (3 DOWNTO 0 ); --变量 1 
 VARIABLE CQI2 : STD_LOGIC_VECTOR (3 DOWNTO 0 ); --变量 2
 
BEGIN
IF  RST = '1'  THEN  CQI := (OTHERS => '0'); 
 CQI1:= (OTHERS => '0');
                 CQI2:= (OTHERS => '0');  -- 复位信号 
 
ELSIF  CLK'EVENT AND CLK='1'  THEN  -- 时钟信号是否上升沿到来
IF EN = '1'  THEN                  -- 如果使能信号允许  则计数
 
IF CQI < 9  THEN  CQI :=  CQI + 1; -- 十进制计数 
ELSE  CQI := (OTHERS => '0' ); --清零
--  CQ <= CQI;   --显示 第一位数码管 
 
IF CQI1 < 9   THEN  CQI1 := CQI1 + 1; -- 第一个数码管满9  进位到第二个数码管
ELSE  CQI1 := (OTHERS => '0' ); --清零
--  CQ1 <= CQI1;   --显示 第二位数码管
 
IF CQI2 < 9  THEN CQI2 := CQI2 + 1; -- 第二个数码管满9  进位到第三个数码管
ELSE  CQI2 := (OTHERS => '0' ); --清零
--  CQ2 <= CQI2;   --显示 第三位数码管
 
        END IF;
END IF;
END IF;
END IF;
END IF;
 
 IF CQI2 = 9 AND CQI1 = 9 AND CQI = 9  THEN COUT<='1'; -- 999 溢出 LED显示
ELSE COUT <= '0' ;
END IF ;
CQ <= CQI; 
CQ1 <= CQI1;
CQ2 <= CQI2;  --计数值向端口输出 
END PROCESS ; 
END mige;

 

 

 

 

 

 

PARTNER CONTENT

文章评论4条评论)

登录后参与讨论

用户1707737 2012-7-27 16:54

纯硬件? 模电的,运放,电源之类的吗,还是FPGA ? 单片机也分难易的啊,比如51,就是最基本,入门的了,蛮简单的,要是ARM 这类的,那就比较难了,我觉得做纯硬件,也有时候需要用到“控制”或者“运算”这些要求吧,这个用MCU 好整些啊!

用户1567315 2012-7-26 16:46

我还一直在弄硬件啊,都没敢向单片机挑战。

用户1707737 2012-7-24 16:33

嘿嘿,谢谢

用户403664 2012-7-24 16:13

必须顶,很详细
相关推荐阅读
用户1707737 2013-04-11 11:56
从台式机到智能机:电脑发烧友的逐渐终结
  其实,电脑发烧友真是一个很古老的词了,现在一般喜欢谈论极客,而非什么发烧友。而在我微博所关注的1000多人中,基本几个月都不会出现戴尔、联想、英特尔、甚至华硕、宏基、英伟达等一个字眼,所以,电脑发...
用户1707737 2013-04-07 23:09
从OEM到Apple
前几天的苹果售后消费者**事件,以库克的一份致歉信算是作为了一个结尾。不过这让我想起了3年前短短几个月内富士康13人连跳的跳楼案,乍一看,这两者似乎是没什么联系的事情,并不能让我们联想到什么,或者有兴...
用户1707737 2013-01-02 22:50
写在2012年最后一天的博客
好久没贴过自己的一篇文章了,不是不上END,我几乎天天都上来看看里面的新闻,消息,博文这些。只是这段时间自己没做出什么东西,不知道写什么,不过马上12年结束了,赶在结束前,贴一篇吧,留作回忆。   ...
用户1707737 2012-11-18 22:41
IC设计专业
现在我急需了解IC设计这个专业,想请对这方面和这个专业比较了解的朋友帮助下我。我主要是想知道,全国大学中,哪些学校的IC设计这个专业(研究生),实力比较强?东南大学集成电路学院的IC设计专业呢? 这个...
用户1707737 2012-11-13 16:10
实验室分方向和学生、指导老师的双向选择
前两天,我们的科技创新实验室模式改革了,由以前的一两个指导老师统一管理纪律和学习。改成了,由系里面所有电子方向的老师组成指导组,分几个学习方向,进行学生和指导老师的双向选择。 也就是说,现在具...
用户1707737 2012-11-04 17:08
第七届ITAT信息技术比赛之PCB设计
昨天,跟学校去南宁参加ITAT的复赛(http://www.itatedu.com/itatCompete/compete7/index.asp )。我在当时报科目的时候是选的PCB设计,本来上届...
我要评论
4
7
关闭 站长推荐上一条 /3 下一条