实验二 模可变计数器(DOC)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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;