一、实验目的

学习计数器的设计、仿真和硬件测试,进一步熟悉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 );--cq输出

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

END cnt4;

ARCHITECTURE behave OF cnt4 IS

BEGIN

PROCESS(clk,rst,en)

);

BEGIN

' ');-- 计算机异步复位

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

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

 

',计数值清零

ENDIF;

ENDIF;

ENDIF;

THEN

' and clk'eventTHEN

cout ',输出进位信号

ENDIF;

';

ENDIF;

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

ENDPROCESS;

END behave;

代码块1 修改后的cnt4代码

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

  1. 实验六 序列信号检测器的VHDL设计

    一.实验目的 (1)进一步熟悉Quartus II软件和GW48-PK2S实验系统的使用方法: (2)用状态机实现序列检测器的设计,了解一般状态机的设计与应用 二.实验内容 1. 基本命题 利用Qua ...

  2. 2018-2019-1-20165221&20165225 《信息安全系统设计》实验五:通讯协议设计

    2018-2019-1-20165221&20165225 <信息安全系统设计>-实验五:通讯协议设计 OpenSSL学习: 简介: OpenSSL是为网络通信提供安全及数据完整性 ...

  3. Java实验四和实验五

    实验四 类的继承性和多态性 [开发语言及实现平台或实验环境] Windows2000 或XP,JDK1.6与Jcreator4.0 [实验目的] 1.  掌握OOP方式进行程序设计的方法, 2.  了 ...

  4. TheSuperego 实验五 团队作业2:毕业设计选题系统

    项目 内容 课程班级博客链接 https://edu.cnblogs.com/campus/xbsf/2018CST 这个作业要求链接 https://www.cnblogs.com/nwnu-dai ...

  5. 20145210 20145226 《信息安全系统设计基础》实验五 简单嵌入式WEB服务器实验

    20145210 20145226 <信息安全系统设计基础>实验五 简单嵌入式WEB服务器实验 结对伙伴:20145226 夏艺华 实验报告封面 实验目的与要求 · 掌握在ARM开发板实现 ...

  6. 20145212 实验五《Java网络编程》

    20145212 实验五<Java网络编程> 一.实验内容 1.运行下载的TCP代码,结对进行,一人服务器,一人客户端: 2.利用加解密代码包,编译运行代码,一人加密,一人解密: 3.集成 ...

  7. 20145213《Java程序设计》实验五Java网络编程及安全

    20145213<Java程序设计>实验五Java网络编程及安全 实验内容 1.掌握Socket程序的编写. 2.掌握密码技术的使用. 3.设计安全传输系统. 实验预期 1.客户端与服务器 ...

  8. 20145206《Java程序设计》实验五Java网络编程及安全

    20145206<Java程序设计>实验五 Java网络编程及安全 实验内容 1.掌握Socket程序的编写: 2.掌握密码技术的使用: 3.设计安全传输系统. 实验步骤 我和201451 ...

  9. 20145308刘昊阳 《Java程序设计》实验五报告

    20145308刘昊阳 <Java程序设计>实验五 Java网络编程及安全 实验报告 实验名称 Java网络编程及安全 实验内容 1.掌握Socket程序的编写: 2.掌握密码技术的使用: ...

随机推荐

  1. sql Server中SET QUOTED_IDENTIFIER的使用

    在存储过程中经常会有 Sql代码   SET QUOTED_IDENTIFIER on SET QUOTED_IDENTIFIER off 这样的语句,那么SET QUOTED_IDENTIFIER到 ...

  2. 构建ASP.NET网站十大必备工具(2)

    正常运行时间 当一个网站发布以后,你肯定希望你的网站不会遇到任何问题,一直处在正常运行状态之中.现在,我使用下面这些工具来监控“Superexpert.com”网站,确保它一直处在正常运行状态之中. ...

  3. jdk代理和cglib代理

    1.jdk静态代理(静态代理和动态代理) 本质:在内存中构建出接口的实现类. 缺陷:只能对实现接口的类实现动态代理, 使用cglib可以对没有实现接口的类进行动态代理. 2.cglib动态代理     ...

  4. AngularJS学习---Routing(路由) & Multiple Views(多个视图) step 7

    1.切换分支到step7,并启动项目 git checkout step- npm start 2.需求: 在步骤7之前,应用只给我们的用户提供了一个简单的界面(一张所有手机的列表),并且所有的模板代 ...

  5. PHP对自己I/O流访问的封装(转)

    php://stdin:访问PHP进程相应的输入流,比如用在获取cli执行脚本时的键盘输入. php://stdout:访问PHP进程相应的输出流. php://stderr:访问PHP进程相应的错误 ...

  6. XML文件操作(C#)

    XML应用于Web开发的许多方面,常用于简化数据的存储和共享,它的设计宗旨是传输数据,而非显示数据.下面简单介绍一下C#是如何对XML文件进行读取的. 1.首先,建立XML对象并关联XML文件 str ...

  7. 第一章 Mybtais的两种启动方式

    Mybatis的两种启动方式如下: 1.xml实现: xml的实现方式中,主要是通过手动创建SqlSession,然后调用session.selectOne()方法实现来实现. 首先是创建Config ...

  8. AngularJs自定义指令详解(2) - template

    一些用于定义行为的指令,可能不需要使用template参数. 当指定template参数时,其值可以是一个字符串,表示一段HTML文本,也可以是一个函数,这函数接受两个参数:tElement和tAtt ...

  9. Google搜索质量评估员指南

    Google: 此文档是我们(谷歌)的一份搜索质量评估员指南,可作为搜索质量评估员的培训材料.其中主要介绍了一类名为“网址评分”的评分任务,此类任务要求评估员查看搜索查询与可能返回的相应结果.他们需要 ...

  10. MySQL使用小记

    时间格式化: select date_format('2008-08-08 22:23:01', '%Y%m%d%H%i%s'); 去重复: use iksdb3; select distinct ` ...