实验二 模可变计数器(DOC)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

南昌大学实验报告

学生姓名:学号:专业班级:中兴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(1001 1001B,数码管显示99)+103(01100111B)=100(0001 0000 0000);

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.进程敏感信号为RST EN M 三个,当RST为低电平,EN为高电平时则计数,否则不计数。

6.位选信号的设置:

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

对应关系:

表一位选信号

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

图一思维框图

四.实现方法一:原理图输入法设计(自己独立完成)

1. 建立文件夹

建立自己的文件夹(目录),如c:\myeda,进入Windows操作系统

Quartus II不能识别中文,文件及文件夹名不能用中文。

2. 原理图设计输入

打开Quartus II,选菜单File→New,选择“Device Design File->Block Diagram->Schematic File”项。点击“OK”,在主界面中将打开“Block Editor”窗口。

(1)分频器模块:(实体名为CLKDIV)

--时间:2012年9月28号

--版本:7.0

--功能:分频器(100分频)

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;

USE IEEE.STD_LOGIC_ARITH.ALL;

USE IEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITY CLKDIV IS—定义实体名为CLKDIV

PORT(CLK : IN STD_LOGIC;--输入信号为自带时钟

CLK_DIV : OUT STD_LOGIC);--输出信号为分频后的时钟信号

END CLKDIV;

ARCHITECTURE RT1 OF CLKDIV IS

SIGNAL DA TA:INTEGER RANGE 0 TO 100;--实现100分频

SIGNAL CLK_TEMP:STD_LOGIC;

BEGIN

PROCESS(CLK)

BEGIN

IF RISING_EDGE(CLK) THEN

IF(DATA=100) THEN

DATA<=0;

CLK_TEMP<=NOT CLK_TEMP;

ELSE

DATA<=DATA+1;

END IF;

END IF;

CLK_DIV<=CLK_TEMP;

END PROCESS;

END RT1;

(2)计数模块:(实体名为COUNT)

--时间:2012年9月28号

--版本:7.0

--功能:模可变计数器

LIBRARY IEEE ;

USE IEEE.STD_LOGIC_1164.ALL;

USE IEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITY count IS

PORT (CLK,RST,EN,M : IN STD_LOGIC;--输入变量为CLK、复位信号:RST、使能端信号:EN、

--以及模变转换信号:M

CQ1,CQ2,CQ3 : OUT STD_LOGIC_VECTOR (3 DOWNTO 0) ;--输出信号为计数的个、十、百位COUT : OUT STD_LOGIC ) ;--count为进位位

END ENTITY count;

ARCHITECTURE one OF count IS

SIGNAL model : INTEGER;

BEGIN

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

V ARIABLE CQI : STD_LOGIC_VECTOR (11 DOWNTO 0) ;

BEGIN

IF M = '0' THEN model <= 34;

ELSIF M = '1' THEN model <= 264;

ELSE model <= 0;

END IF;

IF RST = '1' THEN CQI := (OTHERS => '0');

ELSIF CLK'EVENT AND CLK = '1' THEN

IF EN = '1' THEN

IF CQI < model THEN

IF CQI(7 DOWNTO 0) = 153 THEN CQI := CQI + 103 ;

ELSIF CQI(3 DOWNTO 0) = 9 THEN CQI := CQI + 7 ;

ELSE CQI := CQI + 1 ;

END IF;

ELSE CQI := (OTHERS => '0') ;

END IF;

END IF;

END IF;

IF CQI = model THEN COUT <= '1';

ELSE COUT <= '0';

END IF;

CQ1 <= CQI(3 DOWNTO 0);

CQ2 <= CQI(7 DOWNTO 4);

CQ3 <= CQI(11 DOWNTO 8);

END PROCESS;

END ARCHITECTURE one;

(3)数码管显示模块:(实体名为scan_led)

--时间:2012年9月28号

--版本:7.0

--功能:数码管显示

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;

相关文档
最新文档