ImageVerifierCode 换一换
格式:DOCX , 页数:23 ,大小:479.84KB ,
资源ID:25443855      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/25443855.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(实验二 模可变计数器讲解.docx)为本站会员(b****7)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

实验二 模可变计数器讲解.docx

1、实验二 模可变计数器讲解 南昌大学实验报告学生姓名: 学 号: 专业班级:中兴101班 实验类型:验证 综合 设计 创新 实验日期:2012、10、18 成绩: 实验二 模可变计数器的设计一、实验目的1.学习计数器的VHDL设计、波形仿真和硬件测试;2.学会自己设计程序;3.学会设计模可变计数器;4.学习多层次设计方法。二、实验内容与要求1.计设置一位控制模的位M,要求M=0:模23计数;当M=1:模109计数。2.计数结果用静态数码管显示,一个四位二进制表示09中的一个数;3.给出此项设计的仿真波形;4.应用实验装置验证此计数器的功能。三、实验思路1.按照实验要求,本实验可分为四个模块进程:

2、分频、模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计数,只

3、用到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分别使不同的位选信号对应不同的输入,而得到不同输出。对应关系:表一 位选信号Sel2sel1sel0000001010011DQ7Q6Q5Q4sel2sel1sel0100

4、101110111DQ3Q2Q1Q07模23与模109计数转换思路框图:图一 思维框图四实现方法一:原理图输入法设计(自己独立完成)1. 建立文件夹建立自己的文件夹(目录),如c:myeda,进入Windows操作系统 Quartus II不能识别中文,文件及文件夹名不能用中文。2. 原理图设计输入打开Quartus II,选菜单FileNew,选择“Device Design File-Block Diagram-Schematic File”项。点击“OK”,在主界面中将打开 “Block Editor”窗口。(1) 分频器模块:(实体名为CLKDIV)-时间:2012年9月28号-版本:

5、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 DATA:INTEGER RANGE 0 TO 100;-实

6、现100分频 SIGNAL CLK_TEMP:STD_LOGIC;BEGINPROCESS(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 IEE

7、E.STD_LOGIC_UNSIGNED.ALL;ENTITY count ISPORT (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 ISSIGNAL model : INTEGER;BEGIN PROCESS (CLK,

8、RST,EN,M,model) VARIABLE CQI : STD_LOGIC_VECTOR (11 DOWNTO 0) ; BEGIN IF M = 0 THEN model = 34; ELSIF M = 1 THEN model = 264; ELSE model 0); ELSIF CLKEVENT AND CLK = 1 THEN IF EN = 1 THEN IF CQI 0) ; END IF; END IF; END IF; IF CQI = model THEN COUT = 1; ELSE COUT = 0; END IF; CQ1 = CQI(3 DOWNTO 0);

9、CQ2 = CQI(7 DOWNTO 4); CQ3 choose = 000; A choose = 001; A choose = 010; A choose = 011; A choose = 100; A choose = 101; A choose = 110; A choose = 111; A NULL; END CASE; END PROCESS P1; P2:PROCESS(clk) BEGIN IF clkEVENT AND clk =1 THEN cout8 scan scan scan scan scan scan scan scan scan scan scan sc

10、an scan scan scan scan NULL; END CASE; END PROCESS P3;END; 2.包装元件入库。编译通过后,单击FileCreate Default Symbol,当前文件变成了一个包装好的自己的单一元件(分频器:CLKDIV;计数器:COUNT;译码器:scan_led),并被放置在工程路径指定的目录中以备后用。3.保存各个模块的原理图单击FileSave as按扭,出现对话框,选择自己的目录(如c:myeda),合适名称保存刚才输入的原理图,原理图的扩展名为.bdf。如图3所示。 图二 各个模块的原理图4设置工程文件(Project)以mokebia

11、n为工程名命名5. 选择目标器件6. 放置元件7. 添加连线将以上各器件连接成实验原理图如下:图三 原理图设计8. 编译(Compiler)单击Quartus II Compiler,跳出Compiler窗口,此编译器的功能包括网表文件的提取、设计文件的排错、逻辑综合、逻辑分配、适配(结构综合)、时序仿真文件提取和编程下载文件装配等。单击Start,开始编译!如果发现有错,排除错误后再次编译。7. 仿真,测试项目的正确性(仅对计数模块进行仿真测试)1)建立新的波形激励文件2)在波形编辑器窗口添加节点3)通过Edit-End Time 来设定仿真结束时间4)在CLOCK窗口中设置clk的时钟周期

12、为1s5)点击save保存6) 通过Tools下的Simulator Tools项进行仿真,然后观察输出波形。仿真波形如下:M=0,模23计数。COUNT进位。M=1,模109计数。COUNT进位。在跳变时有些许延迟M从1跳到0,切换到23计数M从0跳到1,切换到109计数RST=0,恢复计数RST=1,清零8. 观察分析波形9. 时序分析五、实现方法二:VHDL文本输入法设计-模可变计数器-程序来源:大部分由自己设计,部分程序摘自书上模10计数器设计,课本113页-2012年10月18日LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD

13、_LOGIC_UNSIGNED.ALL; -设计库和程序包名,其中将标准逻辑矢量-数据。Unsigned.all的用处是允许当遇到+号时,调用+号的算符重载函数。ENTITY mokebian ISPORT(CLK,M,EN,RST:IN STD_LOGIC; -定义端口 sel0,sel1,sel2:buffer STD_LOGIC; SG:OUT STD_LOGIC_VECTOR(7 DOWNTO 0); -端口类型为标准逻辑矢量数据,数码管八段 CLK1:buffer STD_LOGIC; GW,SW,BW: buffer STD_LOGIC_VECTOR(3 DOWNTO 0);-计数

14、器的个,十,百位 COUT:OUT STD_LOGIC; -溢出信号 SEL:OUT STD_LOGIC_VECTOR(7 DOWNTO 0) -位选信号 ); END mokebian;ARCHITECTURE behav OF mokebian ISSIGNAL CNT : STD_LOGIC_VECTOR(7 DOWNTO 0); -数码管分频计数 SIGNAL J : STD_LOGIC_VECTOR(11 DOWNTO 0); -12位BCD计数值 SIGNAL CNT8: STD_LOGIC_VECTOR(2 DOWNTO 0); -数码管选择 SIGNAL A : STD_LOG

15、IC_VECTOR(3 DOWNTO 0); -数码管显示值0 SIGNAL MODEL : STD_LOGIC_VECTOR(11 DOWNTO 0); -模长信号BEGIN -进程P1分出的频率用来数码管的位选扫描 P1:PROCESS(CLK) BEGIN IF CLKEVENT AND CLK = 1 THEN CNT=CNT+1; IF CNT=100 THEN CLK1=1; -100分频 ELSE CLK1MODELMODEL=000100001000; -109END CASE; GW=J(3 downto 0); SW=J(7 downto 4); BW=J(11 downt

16、o 8); IF RST=1 THEN J0); ELSIF CLK1EVENT AND CLK1=1 THEN IF EN=1 THEN IF JMODEL THEN IF GW=9 THEN -个位为9时加7调整 J=J+7; IF SW=9 THEN -十位为9时加103调整 J=J+103; END IF; ELSE J=J+1; END IF; ELSE J0); END IF; END IF; END IF;END PROCESS;-数码管控制 P3:PROCESS( CLK) BEGIN IF CLKEVENT AND CLK=1 THEN IF CNT8010 THEN CNT

17、8 =CNT8+1; ELSE CNT80); END IF; END IF;SEL(0)=sel0 ;SEL(1)=sel1 ;SEL(2) sel2=0;sel1=1;sel0=0;A sel2=0;sel1=0;sel0=1;A sel2=0;sel1=0;sel0=0;ANULL; END CASE; END PROCESS ; -七段译码P4:PROCESS(A) BEGIN CASE A IS WHEN 0000 =SGSGSGSGSGSGSGSGSGSGNULL;END CASE;END PROCESS; COUT device-引脚锁定,参照下载实验板1K100的引脚号说明书,

18、选择适当的引脚2.引脚锁定后,保存,必须重新进行一次全程编译,编译通过后才能编程下载。3、编程下载,用下载线将计算机并口和试验箱上的JTAG口接起来,接通电源。选择ToolsProgrammer菜单,打开programmer窗口。在mode中选中JTAG,将Program/Configure下的笑方框选中4在开始编程之前,必须正确设置编程硬件。点击“Hardware Setup”按钮,打开硬件设置口。点击“Add Hardware”打开硬件添加窗口,在“Hardware type”下拉框中选择“ByteBlasterMV or ByteBlaster II”,“Port”下拉框中选择“LPT1

19、”,点击OK按钮确认,关闭Hardware Setup窗口,完成硬件设置。5、点击“Start”按钮,开始编程下载 图(14)下载成功九、硬件测试结果(1)引脚说明开关K3,K1分别是使能控制开关和模值控制开关,K3断开时计数器停止计数,K3闭合时计数器正常工作。K1是模值控制开关,K1断开时M=0模23计数,K1闭合时M=1模109计数。开关K2控制RST,K2=1使得计数器复位重新开始计数.COUT表示计数器进位,锁定在LED1灯上,当计数器完成模23或模109计数后LED灯闪一次(2)实验现象下载成功后,开始在实验箱上检验结果,设置CLK=1KHZ当断开K3,即使EN=0时,可以看到数码

20、不计数;当K3为高电平即EN=1,而使K2为高电平,即RST=1时,可发现数码管显示为0,实现了复位当K3为高电平,即EN=1,使K2为低电平,即RST=0时,可发现数码管开始计数,并置M为0时数码管计数到22后开始清0,实现了模23计数,而将K1切换到高电平,即使M为1时,数码管计数到108后,开始清0,实现了模109计数。而且当数码管计数到45,我把K1置为低电平,即M为0时,个位,十位都清0,转向模23计数。因此实验硬件测试结果与程序要实现的功能相符合。实验成功。十、试验心得1.加深了自己对vhdl语言的运用,也更熟悉了实验过程中的操作。2.相比较第一个实验,这个实验感觉比第一个难,难度

21、主要体现在程序比第一个复杂许多,有许多需要重点注意的地方:(1)IF M = 0 THEN model = 34; ELSIF M = 1 THEN model = 264;此处模值应转换为十进制计数,BCD码22即为十进制中的34,BCD码中的108即为十进制中的264(2)IF CQI(7 DOWNTO 0) = 153 THEN CQI := CQI + 103 ; ELSIF CQI(3 DOWNTO 0) = 9 THEN CQI := CQI + 7 ;由于当计数到9时,BCD码为1001,而10的BCD码为0001 0000,并不是1010,所以当计数到9时,应加上7,计数到153时同理。注:若程序写为CQI(11 DOWNTO 0),在计数超过10后,将会变为16进位。3.通过这次实验,我能完成简单的设计;在对模可变计数器设计过程中,花了很多时间,发现自己有很多不足,需要多看书多程序,训练自己的逻辑思维也非常重要;最后,希望在以后的学习中,多用心去学习EDA这们技术,在实际操作中慢慢提

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

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