实验五 含有控制信号的计数器VHDL设计

一、实验目的

学习计数器的设计、仿真和硬件测试,进一步熟悉VHDL设计技术。

二、实验仪器与器材

计算机1台,GW48-PK2S实验箱1台,QuartusⅡ6.0 1套。

三、实验

1. 基本命题

在QuartusⅡ上设计一个含计数使能、异步复位和计数值并行预置功能的4位加法计数器,并进行编辑、编译、综合、适配、仿真,给出其所有信号的时序仿真波形。

1)        实验原理

由数电知识可知,4位加法计数器由clk时钟,rst置位,en使能,cq输出,cout进位输出构成。

2)        程序设计

 

3)        编译仿真波形

图1   4位加法计数器波形

从图1分析可知,在每一个时钟上身沿到来的时候,4位加法计数器计数值加1(图中1),最大计数值为15,并进行进位输出(图中2);当rst为高电平时,输出清零。

2. 扩展命题

在上述设计基础上,设计具有同步复位和计数值并行预置功能的8位加法计数器。并进行编辑、编译、综合、适配、仿真,给出其所有信号的时序仿真波形。

1)        实验原理

由原来的设计的两个4位加法计数器件组成一个8位加法计数器U0。设有两个4位加法计数器U1,U2。我们规定U1为U0的低位,U2为U0的高位。将U1的进位输出cout连接到U2的时钟输入clk;U1和U2的rst连接在一起作为总置位端brst;en也连接在一起,作为总使能端ben。U2的进位输出cout作为总进位输出bcout;

2)        程序设计

3)        编译仿真波形

             图2.1   8位加法计数器从0计数到26

图2.2   8位加法计数器从26计数到50

8位加法计数器可以计数到196,但是后面的计数运行正常且与前面相似,不再截图。

4)        分析结果

从图中可以看出,实验的结果与预期相符。

 

 

四、实验设计思路

图5-1是一含计数使能、异步复位和计数值并行预置功能的4位加法计数器。如图所示,图中间是4位锁存器;rst是异步清信号,高电平有效;clk是锁存信号;D[3:0]是4位数据输入端。当ENA为‘1’时,多路选择器将加1器的输出值加载于锁存器的数据端;当ENA为‘0’时将“0000”加载于锁存器。

附图5-1  4位加法计数器的RTL电路图

设计提示:

若目标器件是EP1C6Q240C8,建议选实验电路模式5,用键8(PIO7)控制RST;用键7(PIO6)控制ENA;计数溢出COUT接发光管D8(PIO15);输出Y是计数输出,接数码1(PIO19-PIO16,低位靠右);时钟CLK接clock0,通过跳线选择4Hz信号。引脚锁定后进行编译、下载和硬件测试实验。

五、实验思考题

(1)是否可以不定义信号 CQI,而直接用输出端口信号完成加法运算,即: OUTY <= OUTY + 1 ?  为什么?

假设可行,将cnt4中的实验程序修改为直接使用输出端口信号完成加法运算,如图3所示。经分析,程序中的输出cq是不可读的,另外,如果没有一个变量来保存程序的计数值,那么程序就相当于一个组合逻辑电路,不具备计数的功能。

 

图3直接使用输出端口信号完成加法运算

 

六、问题的总结

 1、Cnt4中的不准确的进位输出,导致cnt8中的计数出错。 
之前在cnt4判断进位的输出的语句如图3 所示。该语句检测当计数值为15的时候,就进行输出。当4位加法计数器的数量为一个的时候,可以正常工作。但是复用cnt4的时候,发现8位加法计数器cnt8的计数出现了如图4的错误。经分析,在cnt8中时,当低位cnt4的计数值为15,同时输出一个进位信号到高位cnt4,照成高位cnt4多计数了一次。由于在下一个时钟到来的时候,低位的cnt4才重新从0开始计数,因此会产生仿真结果与预期不符。只要我们将程序修改为如下方程序块1所示。

图3 进位输出语句

图3 Cnt8计数输出不准确


LIBRARYieee;

USEieee.std_logic_1164.ALL;

USEieee.std_logic_unsigned.ALL;

ENTITY cnt4 IS

PORT(clk, rst, en :INstd_logic;        --clk时钟,rst置位,en使能

cq :OUTstd_logic_vector(3DOWNTO0);--cq输出

cout :OUTstd_logic);                 --cout进位输出

END cnt4;

ARCHITECTURE behave OF cnt4 IS

BEGIN

    PROCESS(clk,rst,en)

       VARIABLE cqi :std_logic_vector(3DOWNTO0);

       BEGIN

           IF rst = '1' THEN  cqi :=(OTHERS=>'0');-- 计算机异步复位

           ELSIF clk='1' and clk'eventTHEN        -- 检测时钟上升沿

              IF en='1' THEN                        -- 检测是否允许计数(同步使能)

                  IF cqi <15  THEN  cqi := cqi +1;  -- 允许计数,检测是否小于15

                  ELSE cqi :=(OTHERS=>'0');      -- 大于15,计数值清零

                  ENDIF;

              ENDIF;

           ENDIF;

         IF cqi =15THEN

           IF clk='1' and clk'eventTHEN 

              cout <= '1';                         -- 计数大于15,输出进位信号

           ENDIF;

           ELSE cout <='0';

         ENDIF;

         cq <= cqi;                                   -- 将计数值送往输出端口

ENDPROCESS;

END behave;

 

代码块1 修改后的cnt4代码

作者:kissazi2 
出处:http://www.cnblogs.com/kissazi2/ 
本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

转载:http://www.cnblogs.com/kissazi2/p/3175462.html

时间: 2025-01-24 15:39:31

实验五 含有控制信号的计数器VHDL设计的相关文章

实验五

实验五  排序   院 .系  海师计教系  班级 计本二班 学   号  200624101101  姓名  杨振平 完成日期  2007-12-19   源程序名 123.cpp   一.题目 定义一个无序序列,使用插入排序.希尔排序.快速排序及堆排序等各种内部排序方法使之有序. 二.需求分析       本程序在Windows环境下用用Visual C++编写,完成程序内部排序算法的实现: 三.概要设计 主函数中调用 Bubble_Sort();//起泡排序               I

实验四 时序逻辑电路的VHDL设计

一.实验目的 熟悉QuartusⅡ的VHDL文本设计过程,学习简单时序逻辑电路的设计.仿真和测试方法. 二.实验 1. 基本命题 用VHDL文本设计触发器,触发器的类型可任选一种.给出程序设计.仿真分析.硬件测试及详细实验过程. ① 实验原理 由数电知识可知,D触发器由输入的时钟信号(CLK).数据输入口(D)和数据输出(Q)构成.本程序通过进程监视CLK和D\,当CLK为上升沿的时候,将D赋值给Q,要完成这个赋值操作,必须再借助一个信号S来进行值的传递. ② 程序设计 ③ 仿真分析 仿真预测:

从五方面探究智慧城市顶层设计失败原因

3月28日,在由中国科协主办的智慧城市发展论坛上,中国科协常委.中国工程院院士吴曼青表示,智慧城市建设要做好顶层设计,要分级分类推进新型智慧城市建设,更好运用信息化手段感知社会态势,畅通沟通渠道,辅助科学决策,推进国家智能体系建设. 智慧城市顶层设计是什么? 智慧城市顶层设计是针对智慧城市建设,从全局的视角出发,进行总体架构的设计,对整个架构的各个方面.各个层次.各种参与力量.各种正面的促进因素和负面的限制因素进行统筹考虑和设计.作为智慧城市的建设主体,城市政府应充分借鉴发达国家电子政务顶层设计

php计数器的设计与实现第1/2页_PHP编程

本程序有4个计数器. index.php是一个普通的计数器可以看出总次数和哪个人来这个站点的次数,点几次加几次,不防水. index1.php也是一个防水的计数器可以看出次数和哪个人来这个站点的次数,点几次加几次,防水,5秒加一次. index2.php是一个防水的计数器可以看出总次数和哪个人来这个站点的次数,点几次加几次,防水,2秒加一次. indexa.php是一个普通和防水和图形的计数器3合一的.可以看出总次数和哪个人来这个站点的次数,防水,有图形. 关键语句: 防水的:$sql = "S

(十五)WebGIS中平移功能的设计和实现

文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/. 1.前言 这一章我们将详细讲解WebGIS工具栏中另一个基础工具--平移工具(Pan).在介绍命令模式时,我们已经知道了此工具为Tool型的. 这个工具主要有如下两个功能: A.当切换到此工具上时,按下鼠标不放,移动鼠标时可以拖动地图. B.当切换到此工具上时,点击鼠标(鼠标不做平移),可以使地图平移,以点击处为中心. 2.设计 2.1 原理 我们已经知道,WebGI

数据结构教程 第二十二课 实验五 数组实验

教学目的: 掌握二维数组的实现方法 教学重点: 二维数组的存储表示,二维数组的基本操作 教学难点: 二维数组的基本操作 授课内容: 数组的顺序存储表示和实现: #include<stdarg.h> #define MAX_ARRAY_DIM 8 typedef struct { ElemType *base; int dim; int *bounds; int *constants; }Array; Status InitArray(Array &A,int dim,...); Sta

实验五附加

六. 源程序(带注释) #include<stdio.h> #include<stdlib.h> #include<time.h> #define MAX 100  //定义数组的长度 #define M  5  //希尔排序的趟数 int sort[MAX];  //定义要排序的数组 int move,compare;//移动次数,比较次数 /*********************起泡排序***************************/ void Bubb

ASP计数器设计详解-1

计数器|设计|详解 Active Server Pager(动态服务器主页,简称ASP),通过读写服务器的文件,结合script语言(VBscript或Jscript)和html码可以方便地实现页面计数器功能.现流行的ASP教材和网络上的ASP教程都谈到过ASP计数器的设计问题,但是都过于简单,比如没有提到怎样实现计数器脚本和主页面的分离以及图象计数器的实现等.下面就作者为单位制作NT web站点的经验,举实例循序渐进谈谈关于ASP计数器的设计,希望能给ASP的初学者和对ASP WEB编程有兴趣

ASP计数器设计详解(转载)

计数器|设计|详解 Active Server Pager(动态服务器主页,简称ASP),通过读写服务器的文件,结合script语言(VBscript或Jscript)和html码可以方便地实现页面计数器功能.现流行的ASP教材和网络上的ASP教程都谈到过ASP计数器的设计问题,但是都过于简单,比如没有提到怎样实现计数器脚本和主页面的分离以及图象计数器的实现等.下面就作者为单位制作NT web站点的经验,举实例循序渐进谈谈关于ASP计数器的设计,希望能给ASP的初学者和对ASP WEB编程有兴趣