实验二 模可变计数器DOC.docx

上传人:b****0 文档编号:440221 上传时间:2022-10-10 格式:DOCX 页数:20 大小:479.95KB
下载 相关 举报
实验二 模可变计数器DOC.docx_第1页
第1页 / 共20页
实验二 模可变计数器DOC.docx_第2页
第2页 / 共20页
实验二 模可变计数器DOC.docx_第3页
第3页 / 共20页
实验二 模可变计数器DOC.docx_第4页
第4页 / 共20页
实验二 模可变计数器DOC.docx_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

实验二 模可变计数器DOC.docx

《实验二 模可变计数器DOC.docx》由会员分享,可在线阅读,更多相关《实验二 模可变计数器DOC.docx(20页珍藏版)》请在冰豆网上搜索。

实验二 模可变计数器DOC.docx

实验二模可变计数器DOC

南昌大学实验报告

学生姓名:

学号:

专业班级:

中兴101班

实验类型:

□验证□综合■设计□创新实验日期:

2012、10、18成绩:

实验二模可变计数器的设计

一、实验目的

1.学习计数器的VHDL设计、波形仿真和硬件测试;

2.学会自己设计程序;

3.学会设计模可变计数器;

4.学习多层次设计方法。

二、实验内容与要求

1.计设置一位控制模的位M,要求M=0:

模23计数;当M=1:

模109计数。

2.计数结果用静态数码管显示,一个四位二进制表示0~9中的一个数;

3.给出此项设计的仿真波形;

4.应用实验装置验证此计数器的功能。

三、实验思路

1.按照实验要求,本实验可分为四个模块进程:

分频、模23与109计数转换、数码管控制、七段译码。

2.模可变计数器原理:

即在原有的模值计数器上加入模值转换功能

3.计数器的数码管显示

需注意十位和百位的进位即:

当个位数的数值为9的下一个脉冲来时转换为,同时向十位进一,转换的算法为:

9(1001)+7(0111)=0(0000),并进一位;

当数值为99时,用同样的方法转换:

153(10011001B,数码管显示99)+103(01100111B)=100(000100000000);

4.要求分别实现模23和模109的计数,因此我分别用buffer变量GW、SW、BW代表个位、十位、百位。

还有一个控制模的位M,当M为0时实现模23计数,只用到GW和SW分别为个位和十位计数;当M为1时实现模109计数,用GW、SW、BW分别为个位十位和百位计数。

由于端口不能参与运算,因些在结构体中定义了se10、sel1、sel2三个buffer变量,分别用来对应SEL(0)、SEL

(1)、SEL

(2);在程序的最后用端口接收信号。

5.进程敏感信号为RSTENM三个,当RST为低电平,EN为高电平时则计数,否则不计数。

6.位选信号的设置:

用整形变量CNT8分别使不同的位选信号对应不同的输入,而得到不同输出。

对应关系:

表一位选信号

Sel2sel1sel0

000

001

010

011

D

Q7

Q6

Q5

Q4

sel2sel1sel0

100

101

110

111

D

Q3

Q2

Q1

Q0

7.模23与模109计数转换思路框图:

图一思维框图

四.实现方法一:

原理图输入法设计(自己独立完成)

1.建立文件夹

建立自己的文件夹(目录),如c:

\myeda,进入Windows操作系统

●QuartusII不能识别中文,文件及文件夹名不能用中文。

2.原理图设计输入

打开QuartusII,选菜单File→New,选择“DeviceDesignFile->BlockDiagram->SchematicFile”项。

点击“OK”,在主界面中将打开“BlockEditor”窗口。

(1)分频器模块:

(实体名为CLKDIV)

--时间:

2012年9月28号

--版本:

7.0

--功能:

分频器(100分频)

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_ARITH.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYCLKDIVIS—定义实体名为CLKDIV

PORT(CLK:

INSTD_LOGIC;--输入信号为自带时钟

CLK_DIV:

OUTSTD_LOGIC);--输出信号为分频后的时钟信号

ENDCLKDIV;

ARCHITECTURERT1OFCLKDIVIS

SIGNALDATA:

INTEGERRANGE0TO100;--实现100分频

SIGNALCLK_TEMP:

STD_LOGIC;

BEGIN

PROCESS(CLK)

BEGIN

IFRISING_EDGE(CLK)THEN

IF(DATA=100)THEN

DATA<=0;

CLK_TEMP<=NOTCLK_TEMP;

ELSE

DATA<=DATA+1;

ENDIF;

ENDIF;

CLK_DIV<=CLK_TEMP;

ENDPROCESS;

ENDRT1;

(2)计数模块:

(实体名为COUNT)

--时间:

2012年9月28号

--版本:

7.0

--功能:

模可变计数器

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYcountIS

PORT(CLK,RST,EN,M:

INSTD_LOGIC;--输入变量为CLK、复位信号:

RST、使能端信号:

EN、--以及模变转换信号:

M

CQ1,CQ2,CQ3:

OUTSTD_LOGIC_VECTOR(3DOWNTO0);--输出信号为计数的个、十、百位

COUT:

OUTSTD_LOGIC);--count为进位位

ENDENTITYcount;

ARCHITECTUREoneOFcountIS

SIGNALmodel:

INTEGER;

BEGIN

PROCESS(CLK,RST,EN,M,model)

VARIABLECQI:

STD_LOGIC_VECTOR(11DOWNTO0);

BEGIN

IFM='0'THENmodel<=34;

ELSIFM='1'THENmodel<=264;

ELSEmodel<=0;

ENDIF;

IFRST='1'THENCQI:

=(OTHERS=>'0');

ELSIFCLK'EVENTANDCLK='1'THEN

IFEN='1'THEN

IFCQI

IFCQI(7DOWNTO0)=153THENCQI:

=CQI+103;

ELSIFCQI(3DOWNTO0)=9THENCQI:

=CQI+7;

ELSECQI:

=CQI+1;

ENDIF;

ELSECQI:

=(OTHERS=>'0');

ENDIF;

ENDIF;

ENDIF;

IFCQI=modelTHENCOUT<='1';

ELSECOUT<='0';

ENDIF;

CQ1<=CQI(3DOWNTO0);

CQ2<=CQI(7DOWNTO4);

CQ3<=CQI(11DOWNTO8);

ENDPROCESS;

ENDARCHITECTUREone;

(3)数码管显示模块:

(实体名为scan_led)

--时间:

2012年9月28号

--版本:

7.0

--功能:

数码管显示

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYscan_ledIS

PORT(clk:

INSTD_LOGIC;

data1,data2,data3

:

INSTD_LOGIC_VECTOR(3DOWNTO0);

scan:

OUTSTD_LOGIC_VECTOR(6DOWNTO0);--输出数码管的7位显示

choose:

OUTSTD_LOGIC_VECTOR(2DOWNTO0));--数码管位选信号

ENDENTITY;

ARCHITECTUREoneOFscan_ledIS

SIGNALcout8:

STD_LOGIC_VECTOR(2DOWNTO0);

SIGNALA:

STD_LOGIC_VECTOR(3DOWNTO0);

BEGIN

P1:

PROCESS(cout8)—数码管动态扫描

BEGIN

CASEcout8IS

WHEN"000"=>choose<="000";A<="0000";

WHEN"001"=>choose<="001";A<="0000";

WHEN"010"=>choose<="010";A<="0000";

WHEN"011"=>choose<="011";A<="0000";

WHEN"100"=>choose<="100";A<="0000";

WHEN"101"=>choose<="101";A<=data3;

WHEN"110"=>choose<="110";A<=data2;

WHEN"111"=>choose<="111";A<=data1;

WHENOTHERS=>NULL;

ENDCASE;

ENDPROCESSP1;

P2:

PROCESS(clk)

BEGIN

IFclk'EVENTANDclk='1'THENcout8<=cout8+1;

ENDIF;

ENDPROCESSP2;

P3:

PROCESS(A)—数码管译码

BEGIN

CASEAIS

WHEN"0000"=>scan<="0111111";--0

WHEN"0001"=>scan<="0000110";--1

WHEN"0010"=>scan<="1011011";--2

WHEN"0011"=>scan<="1001111";--3

WHEN"0100"=>scan<="1100110";--4

WHEN"0101"=>scan<="1101101";--5

WHEN"0110"=>scan<="1111101";--6

WHEN"0111"=>scan<="0000111";--7

WHEN"1000"=>scan<="1111111";--8

WHEN"1001"=>scan<="1101111";--9

WHEN"1010"=>scan<="1110111";--A

WHEN"1011"=>scan<="1111100";--B

WHEN"1100"=>scan<="0111001";--C

WHEN"1101"=>scan<="1011110";--D

WHEN"1110"=>scan<="1111001";--E

WHEN"1111"=>scan<="1110001";--F

WHENOTHERS=>NULL;

ENDCASE;

ENDPROCESSP3;

END;

2.包装元件入库。

编译通过后,单击File→CreateDefaultSymbol,当前文件变成了一个包装好的自己的单一元件(分频器:

CLKDIV;计数器:

COUNT;译码器:

scan_led),并被放置在工程路径指定的目录中以备后用。

3.保存各个模块的原理图

单击File→Saveas…按扭,出

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 自然科学 > 物理

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1