模可变计数器设计

合集下载

实验一 模可变计数器

实验一 模可变计数器

南昌大学实验报告学生姓名:柳宇航学号:6102113025专业班级:通信工程中兴131班实验类型:□验证□综合□设计□创新实验日期:2015.10.22实验成绩:实验一模可变计数器的设计(一)实验要求完成设计、仿真、调试、下载、硬件测试等环节,在EDA实验装置上实现模可变计数器功能,具体要求如下:1、设置一个按键控制改变模值,按键按下时模为10-99之间(具体数值自行确定)的数,没按下时模为100-199之间(具体数值自行确定)的数;2、计数结果用三位数码管十进制显示。

(二)实验步骤1.选定M=0时,实现模值为17的计数;M=1时,实现模值为119的计数。

2.建立工作库文件夹,输入计数器的Verilog代码并存盘。

3.选目标器件CycloneII中的EP2C35F672C8并编译。

4.建立仿真波形文件,设置仿真结束时间和输入条件,进行波形仿真。

图1仿真波形的建立图2M=0时模17计数仿真M=0时,计数到16,灯亮M=1M=0复位M=1时,计数到118,灯亮图3M=1时模119计数仿真波形分析:当RST为高电平时,计数清零。

当RST为低电平,使能位EN为高电平时,开始计数:模控制位M为低电平时,则计数器记到16时归0后重新计数,实现模为17的计数功能;模控制位M为高电平时,则计数器记到118时归0后重新计数,实现模为119的计数功能。

当EN 为低电平时,暂停计数。

5.管脚分配clk PIN_C13en PIN_A5m PIN_B5rst PIN_A6sel[0]PIN_G18sel[1]PIN_G17sel[2]PIN_G16SG[0]PIN_F13SG[1]PIN_F14SG[2]PIN_F15SG[3]PIN_E15SG[4]PIN_F16SG[5]PIN_F17SG[6]PIN_E18SG[7]PIN_F18d[0]PIN_H106.下载测试。

下载到实验箱上测试,下推K7(M=0),可以从实验箱数码管观察到0~16模17计数。

模可变16位加法计数器.

模可变16位加法计数器.

课程设计任务书学生姓名:专业班级:指导教师:工作单位:信息工程学院题目: 模可变16位加法计数器设计初始条件:可用仪器: PC机(Quartus II软件)硬件:EDA-IV型实验箱。

要求完成的主要任务:(1)设计任务设计可变16位加法计数器,可通过3个选择位M2、M1、M0实现最多8种不同模式的计数方式,例如可构成5、10、16、46、100、128、200、256进制,共8种计数模式。

(2)时间安排:2012.12.17 课程设计任务布置、选题、查阅资料2012.12.18-21 设计,软件编程、仿真和调试2012.12.22 2012.12.23 实验室检查仿真结果,验证设计的可行性和正确性,熟悉实验平台和试验箱2012.12.24-26 设计的硬件调试2012.12.27-28 机房检查设计成果,现场演示硬件实物,提交设计说明书及答辩指导教师签名:年月日系主任(或责任教师)签名:年月日目录摘要.................................... 错误!未定义书签。

Abstract (II)1 计数器的工作原理 (1)2 设计原理 (3)2.1 整体设计原理 (3)2.2 单元模块的设计 (4)2.2.1 计数模块的设计 (4)2.2.2显示模块的设计 (5)2.2.3分频模块的设计 (5)2.2.4 顶层模块的设计 (5)3 单元模块元件原理图 (6)4 电路系统的功能仿真 (8)5 硬件调试 (10)6 个人小结 (12)参考文献 (13)附录 (14)摘要计数器的种类按照计数器中的触发器是否同时翻转分类,可将计数器分为同步计数器和异步计数器两种,如果按照计数过程中数字增减分类,又可将计数器分为加法计数器、减法计数器和可逆计数器,随时钟信号不断增加的为加法计数器,不断减少的为减法计数器,可增可减的叫做可逆计数器。

计数器不仅能用于对时钟脉冲计数,还可以用于分频、定时、产生节拍脉冲和脉冲序列以及进行数字运算等。

基于VHDL的多功能可变模计数器设计

基于VHDL的多功能可变模计数器设计

end if ;
17
集成电路设计
屈宝鹏等 :基于 V HDL 的多功能可变模计数器设计
end if ; end if ; END PROCESS ; END ARC H ITEC TU R E one ;
值得注意的是 ,这里所设计的多功能可变模计数器 具有如下特点 :
(1) 该设计的多功能可变模计数器具有多个功能 控制端 。因此各个控制端的优先权顺序就成为设计的 关键 ,经过理论分析和仿真调试 ,最终确认的优先权顺 序为 :clr (清零) →clk (时钟触发) →s (置数) →en (使能) →up dn (计数方向) 。这个优先权顺序可以有效地保证 各个功能的完整实现 ,以及技术器的稳定运行 。
图 1 基本可变模计数器的电路符号
从上述的代码可以看出 ,基本的可变模计数器的功 能单一 。仿真验证则表明在进行模值变换时 ,基本的可 变模计数器存在一些功能上的缺陷 :计数器若是由较小 的模值变化为较大的模值时 ,能正常的进行变模计数 ; 但当其由较大的模值变化为较小的模值 ,则可能出现计 数失控 ,如图 2 所示 ,图中显示了当模值由 12 变换为 7 时 ,即发生了计数失控 。失控的原因是大于当模值由 12 变换为 7 时 ,计数输出为 q 为 11 ,大于当前模值 7 的 计数最大值 6 ,由此产生了计数失控 。
EN TIT Y co unter IS POR T (clk ,clr ,s ,en ,updn :in std_logic ; d :in integer range 0 to 99 ; m :in integer range 0 to 99 ; co :OU T std_logic ; q :buffer integer range 0 to 99) ;

模可变计数器设计

模可变计数器设计

实验二模可变计数器设计一、实验目的(1) 掌握关于简单数字电路的设计和静态数码管的设计。

(2)熟悉VHDL中进程语句的使用。

(3)掌握数码管的显示。

二、实验内容与要求(1)设计设置一位控制位M,要求M=0:模23计数;M=1:模109计数。

(2)计数结果用静态数码管显示,显示BCD码。

(3)给出此项设计的仿真波形。

三、设计原理(1)计数器能够计数的前提就是在使能端有效时,因此设计了en作为输入信号。

(2)计数器应该还要有异步清零端,因此设计了rst作为一个输入信号。

另外因为这是模可变的计数器,因此还需要m作为一个输入信号控制计数的模(3)计数器的基本工作原理是在CP:时钟脉冲输入端,每个上升沿到来时,计一个数,即自身加一,因此设计了计数的变量mmm(4)若是X模,则应该在小于X时计数,一旦记到X时,应该输出一个进位,因此需要设计一个变量limit作为参量,只有在小于limit时才可以计数,否则就应该清零。

又由于在模切换时,要求只要小于22或108就可以计数,因此limit要赋予不同的值(由m控制),且在是否执行加一前进行判断。

(5)因为一个静态数码管需要四位输出,最大计数是108,要用三个静态数码管,因此mmm要设计成一个std_logic_vector(11 downto 0)共12位,来对应三个数码管的输出。

(6)因为std_logic_vector(11 downto 0)这是二进制的加法,因此不能直接显示,否则就出现错误了,因此涉及到了二进制转换为十进制。

当低八位为10011010,前四位与后四位分别加6,即01100110;若低四位出现1010,要加6,即0110,进行调整。

(7)计数器的加一和调整是逻辑上是不同条件的相与,因此用到if语句。

四、实验器材PC机,试验箱,quartus软件五、实验程序library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity count isport(clk,rst,en,m:in std_logic;m1,m2,m3:out std_logic_vector(3 downto 0);cout:out std_logic);end count;architecture behav of count isbeginprocess(clk,rst,en,m)variable limit:std_logic_vector(11 downto 0); ---limit用来控制是否小于22或108variable mmm:std_logic_vector(11 downto 0);--mmm用来计数beginif m='0' then limit:="000000100010"; ---给limit赋值,为m=0时为22,else limit:="000100001000"; ---m=1时为108end if;if rst='1' then mmm:=(others=>'0'); ----异步清零elsif clk'event and clk='1' then ----判断时钟上升沿if en='1' then ----判断使能端if mmm<limit then mmm:=mmm+"000000000001";---计数器加一if mmm(7 downto 0)="10011010"then mmm:=mmm+"000001100110";elsif mmm(3 downto 0)="1010"then mmm:=mmm+"000000000110";end if; ---进行加六调整else mmm:=(others=>'0');end if;end if;end if;if mmm=limit then cout<='1'; ---计数值到达模值时输出else cout<='0';end if;m1(3 downto 0)<=mmm(3 downto 0);m2(3 downto 0)<=mmm(7 downto 4);m3(3 downto 0)<=mmm(11 downto 8); ---数码管输出显示end process;end;六、实验步骤(1)建立工作库文件夹,输入设计项目原理图或VHDL代码并存盘。

EDA模可变计数器设计

EDA模可变计数器设计

实验二 模可变计数器设计一、实验目的1.熟悉EDA 技术开发流程;2.熟悉Quartes II 集成开发软件的使用;3.初步熟悉PH-1V 型实验装置的使用;二、实验要求1.学习多层次设计方法,设计一位控制为M ,使M=0;模23记数;M=1;实现109记数;结果用静态数码管显示。

三、实验设计思路本实验可以分成三部分来设计,第一部分为计数部分这里采用文本输入法设计(VHDL 语言)设计模23计数和模109计数,第二部分为功能选择,当M=0时实现模23计数。

当M=1时,模109计数。

第三部分是数码管显示部分,这也是本实验的难点。

我们知道数码管上显示的是十进制的BCD 码,因此这里必须有译码的过程。

如何将二进制输出转换成十进制的BCD 码输出是本实验的关键一步,这里有很多办法实现。

可以采用补码的方式实现,但是实现比较繁琐。

另外可以采用软件的方法实现,把个位、十位、和百位分开来显示。

在IEEE 库函数中有一个可以将整数转换成位矢量的函数conv_std_logic_vector (A,位长)。

实验流图如下:四、实验程序LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;--转换函数库ENTITY CNTM1 ISPORT (CLK,RST,EN:IN STD_LOGIC;M:IN STD_LOGIC;--功能选择位a,b,c:OUT STD_LOGIC_VECTOR (3 DOWNTO 0));--数码显示输出END CNTM1;ARCHITECTURE behav OF CNTM1 ISsignal a1,b1,c1:std_logic_vector(3 downto 0);--信号传递输出BEGINPROCESS (CLK,RST,EN,M,a1,b1,c1)V ARIABLE N :INTEGER RANGE 0 to 1000;--控制变量BEGINIF RST ='1' THEN N:=0;--清零ELSIF CLK 'EVENT AND CLK='1' THEN –上升沿触发IF EN = '1' THENIF M='0' THEN—选择模23计数IF N<22 THEN N:=N+1;ELSE N:=0;END IF;ELSEIF N<108 THEN N:=N+1;--模109计数ELSE N:=0;a1<=conv_std_logic_vector((N /100),4);--显示百位输出b1<=conv_std_logic_vector(((N / 10) mod 10),4);--显示十位输出c1<=conv_std_logic_vector((N MOD 10),4);--显示个位输出END IF;END IF;END IF;END IF;a<=a1;b<=b1;c<=c1;END PROCESS;END behav;五、实验步骤1、建立工作库文件和编辑设计文件(1)在D盘新建一个文件夹用来保存工程文件(2)打开QuartusⅡ8.0软件,选择菜单File->New->VHDL File,点击OK后在打开的界面下输入已经设计好的程序。

(完整word版)基于VHDL的多功能可变模计数器

(完整word版)基于VHDL的多功能可变模计数器

基于VHDL的多功能可变模计数器设计0 引言随着电子技术、计算机技术和EDA技术的不断发展,利用FPGA/CPLD进行数字系统的开发已被广泛应用于通信、航天、医疗电子、工业控制等领域。

与传统电路设计方法相比,FPGA/CPLD具有功能强大,开发周期短,投资少,便于追踪市场变化及时修改产品设计,以及开发工具智能化等特点。

近年来,FPGA/CPLD发展迅速,随着集成电路制造工艺的不断进步,高性价比的FPGA/CPLD器件推陈出新,使FPGA/CPLD成为当今硬件设计的重要途径。

在FPGA/CPLD的应用设计开发中,VHDL语言作为一种主流的硬件描述语言,具有很强的电路描述和建模能力,能从多个层次对数字系统进行建模和描述,从而大大简化了硬件设计任务,提高了设计效率和可靠性,并在语言易读性和层次化、结构化设计方面。

表现出了强大的生命力和应用潜力。

QuartusⅡ是Altera公司在21世纪初推出的FPGA/CPLD集成开发环境,是Altera公司前一代FPGA/CPLD集成开发环境Max+PlusⅡ的更新换代产品,其界面友好,使用便捷,功能强大,为设计者提供了一种与结构无关的设计环境,使设计者能方便地进行设计输入、快速处理和器件编程。

计数器是数字系统中使用最多的时序电路之一,不仅能用于对时钟脉冲计数,还可以用于分频、定时、产生节拍脉冲和脉冲序列以及进行数字运算等。

可变模计数器由于计数容量可以根据需要进行变化,为其广泛使用创造了便利。

这里在QuartusⅡ开发环境下,用VHDL 语言设计了一种具有清零、置数、使能控制、可逆计数和可变模功能的计数器。

1 基本可变模计数器设计可变模计数器是指计数/模值可根据需要进行变化的计数器。

电路符号图1所示,clk 为时钟脉冲输入端,clr为清零端,m为模值输入端,q为计数输出端。

基本可变模计数器的VHDL代码如下所示:说明:上述代码设计采用了常用的if语句结构,即“if条件句then顺序语句elsif条件句then顺序语句else顺序语句end if”结构,实现模值小于99的可变模计数。

基于FPGA的模可变16进制加法器的设计

基于FPGA的模可变16进制加法器的设计

课程设计任务书学生姓名:兰翔专业班级:电子科学与技术2班指导教师:葛华工作单位:信息工程学院题目:模可变16位加法计数器设计初始条件:QuartusII6.0,微机要求完成的主要任务:深入学习Verilog HDL语言与FPGA理论知识。

利用QuartusII强大的硬件语言处理功能,数字电路仿真功能以及波形处理功能,实现模可变16位加法计数器设计。

1.利用Verilog HDL语言描述计数器功能;2.用QuartusII对Verilog HDL语言进行仿真;3. 撰写《EDA技术应用实践》课程设计说明书。

时间安排:学习Verilog HDL语言的概况第1天学习Verilog HDL语言的基本知识第2、3天学习QuartusII的应用环境,仿真功能。

第4、5天课程设计第6-9天答辩第10天指导教师签名:年月日系主任(或责任教师)签名:年月日目录摘要 (I)A BSTRACT.......................................................... I I1.设计任务 (1)1.1初始条件 (1)1.2课题要求 (1)1.3设计要求 (1)2.Q UARTUS II简介 (2)3.课题内容 (3)3.1 总体框图 (3)3.2 各部分功能 (3)3.2.1按键触发 (3)3.2.2 LED显示部分 (5)3.2.3计数部分 (6)4.心得体会 (8)参考文献 (9)附录一V ERILOG HDL原程序 (10)附录二总原理图 (15)摘要FPGA(Field Programmable Gate Array)即“现场可编程门阵列”是应着当代微电子技术迅猛发展而产生的一种技术,到现在为止,已经存在了27年。

由于其电路执行速度快、上市时间短、成本低廉、可靠性高、易于维护升级而被人们所青睐,目前已经广泛用于通信、信号处理、嵌入式处理器、图形处理和工业控制的领域。

本次课设就是在Altera公司的FPGA设计平台QuartusII上进行的计数器设计。

vhdl课程设计设计模为 4、8、12、16的可变计数器实验报告总结

vhdl课程设计设计模为 4、8、12、16的可变计数器实验报告总结

VHDL课程设计 - 可变计数器实验报告总结
一、设计概述
本课程设计的主要目标是设计并实现一个可变计数器,其模(Modulo)值可以在4、8、12、16之间进行选择。

计数器采用VHDL编程语言进行描述,并在FPGA开发板上进行测试验证。

二、设计实现
1. 硬件平台:我们选择了Xilinx的FPGA开发板作为硬件平台,它具有丰富的I/O资源和足够的逻辑单元,可以满足我们的设计需求。

2. VHDL编程:我们采用VHDL语言进行编程,实现了模4、模8、模12和模16的可变计数器。

通过选择不同的计数模式,计数器的模值可以在4、8、12、16之间进行切换。

3. 测试与验证:为了验证计数器的功能,我们编写了测试平台,并通过仿真和实际硬件测试对计数器进行了全面的测试。

三、实验结果与分析
1. 实验结果:通过仿真和实际硬件测试,我们验证了计数器的
功能正确性。

在不同的模值下,计数器都能正确地进行计数操作,并且在达到模值后能正确地回绕到0。

2. 结果分析:实验结果表明,我们的VHDL编程和FPGA开发技能得到了很好的应用和提升。

同时,通过这次课程设计,我们更深入地理解了可变计数器的设计和实现原理,提高了我们的硬件设计能力。

四、总结与展望
本次课程设计让我们深入了解了VHDL编程语言和FPGA开发技术,提高了我们的硬件设计能力。

通过实际的设计和测试,我们成功地实现了一个可变模值的计数器,达到了课程设计的要求。

在未来的学习和工作中,我们将继续深入学习FPGA设计和VHDL编程,不断提高自己的硬件设计能力。

同时,我们也期待将这种技术应用于更多的实际项目中,为工程实践做出贡献。

变模计数器

变模计数器

数字电路课程设计报告——变模计数器课程设计任务书一﹑题目:16进制计数器 , 计数器的计数模值可变,计数模 M 从 2~16变化,用多路开关控制 M 的选择。

原始条件:该系统由计数模值设置开关电路、变模控制模块、 16进制计数器、显示驱动电路构成。

二、要求完成设计的主要任务如下:(变模计数器输出状态表如表 2-1所示。

电路设计框图如图 2-1所示。

图 2-1变模计数器设计框图一、实验目的1、设计变模计数器,掌握变模计数器的设计方法,实现二 ~十六进制之间的转换。

2、掌握中规模集成计数器 74LS85的逻辑功能和使用方法3、计数器的计数模 M 值可变,多路开关控制 M 的选择二、设计理念变模开关控制电路:设置三个开关来控制切换 A 、 B 、 C 三个输入端,就可以实现 001到 111的进制实现功能。

变模控制电路:计数器四位输出送 4-16译码器,译码器输出接 16选 1数据选择器,数据选择器控制端接模设置开关电路(拨码开关。

显示驱动电路:计数器输出送显示译码器,再送 4段 LED 显示器。

三、实验原理通过 161计数器计数输出送给 4-16译码器,再送给选择器,最后显示驱动。

通过计数器的计数模值可变,计数模 M 从 2~16变化,用多路控制 M 的选择。

根据变模计数器的引脚图,电路图(如下图所示。

进行变模计数器的设计。

四、实验设备74LS85 一个74LS161 一个74LS00 一个导线若干面包板一个电路板一个电源线一个五、实验内容(1 电路图:手绘电路图 (2 各芯片的引脚图74LS00 引脚图 74LS85 引脚图74LS161 引脚图(3)仿真电路图六、实验心得本次课程设计是一次典型的逻辑电路设计实验,在实验过程中主要利用到逻辑电路设计的思想按照步骤按部就班的进行实验。

本次的实验创新之处在于通过芯片上的输出,来实现变模计数器的功能。

因为本次设计为计数器,故在设计的过程中先画出基本电路图,再根据基本电路图在画出仿真的电路图看是否实现所要求的任务。

基于VHDL的多功能可变模计数器设计

基于VHDL的多功能可变模计数器设计

基于VHDL的多功能可变模计数器设计
屈宝鹏;张喜凤
【期刊名称】《现代电子技术》
【年(卷),期】2009(032)016
【摘要】可变模计数器作为一种基本数字电路模块,在各种数字系统中应用广泛.在对现有的可变模计数器的研究基础上,在QuartusⅡ开发环境中,用VHDL语言设计一种功能更加强大的可变模计数器,它具有清零、置数、使能控制、可逆计数和可变模等功能,并且对传统的可变模计数器的计数失控问题进行研究,最终设计出一种没有计数失控缺陷的可变模计数器,并以ACEX1K系列EP1K30QC208芯片为硬件环境,验证了其各项设计功能.结果表明该设计正确,功能完整,运行稳定.
【总页数】3页(P16-18)
【作者】屈宝鹏;张喜凤
【作者单位】陕西国防工业职业技术学院,陕西,西安,710300;陕西国防工业职业技术学院,陕西,西安,710300
【正文语种】中文
【中图分类】TP332
【相关文献】
1.一种基于FPGA的可变模计数器的VHDL实现 [J], 侯静
2.基于VHDL的可逆计数器的设计与实现 [J], 张喜凤;屈宝鹏
3.基于VHDL语言的可置数十位计数器的设计 [J], 王晓峰
4.基于VHDL语言的可置数十位计数器的设计 [J], 王晓峰
5.运用MSI设计时序逻辑电路(三)——设计任意进制模可变计数器 [J], 陈文彬因版权原因,仅展示原文概要,查看原文内容请购买。

EDA模可变计数器设计

EDA模可变计数器设计

实验报告学生姓名:EDA小王子学号:国家机密专业班级:国家机密实验类型:□验证□综合√设计□创新实验日期:国家机密实验成绩:很高实验二模可变计数器设计(模23/模109)一、实验目的1.学习一般的数字电路设计;2.学习数码管的输出方法;3.进一步熟悉Quartes II集成开发软件的使用以及PH-1V型实验装置的使用二、实验要求学习多层次设计法,设置一位控制位M,要求M=0:模23计数;M=1:模109计数;计数结果用静态数码管显示。

三、实验设计1.设计思路:数字电路以前学过模值计数器的设计,而这个实验只是在原类型题加了一个模值转换的设置,再加上要求用数码管显示,所以必须把计数结果转换成BCD码,所以干脆直接使用BCD码进行模值控制。

2.实验程序:LIBRARY IEEE ;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY count ISPORT (CLK,RST,EN,M : IN STD_LOGIC;CQ1,CQ2,CQ3 : OUT STD_LOGIC_VECTOR (3 DOWNTO 0) ;COUT : OUT STD_LOGIC ) ;END ENTITY count;ARCHITECTURE one OF count ISSIGNAL model : INTEGER;BEGINPROCESS (CLK,RST,EN,M,model)VARIABLE CQI : STD_LOGIC_VECTOR (11 DOWNTO 0) ;BEGINIF 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' THENIF EN = '1' THENIF CQI < model THENIF 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;四、主要仪器设备及耗材实验工具软件,实验箱。

模16的功能可变计数器

模16的功能可变计数器

EDA考试:模16的功能可变计数器一、实验目的1、设计一个模为16的计数器,功能可变,包括不计数,减法,加法,置数。

结果由数码管显示。

2、熟练掌握ISE软件进行FPGA开发的过程以及实验箱的使用方法。

3、了解对设计电路进行功耗分析的方法。

4、了解ISE设计报告中电路资源利用率的情况分析。

5、掌握使用VHDL创建测试文件的方法。

二、实验原理模为16,控制信号为MA、MB,MA和MB为00时不计数,01时加法计数,10时减法计数,三、代码1、源代码library IEEE;use IEEE.STD_LOGIC_1164.ALL;use ieee.std_logic_unsigned.all;entity exam33 isPort ( clk : in STD_LOGIC;MA: in STD_LOGIC;MB : in STD_LOGIC;datain : in STD_LOGIC_VECTOR (3 downto 0);ledout : out STD_LOGIC_VECTOR (6 downto 0));end exam33;architecture Behavioral of exam33 issignal led:std_logic_vector(6 downto 0);signal cnt:std_logic_vector(3 downto 0):="0000";beginprocess(clk)beginif(clk' event and clk='1') thenif(MA='0' and MB='0') thencnt<=cnt;elsif (MA='0' and MB='1')thenif cnt="1111" thencnt<="0000";else cnt<=cnt+'1';end if;elsif (MA='1' and MB='0')thenif cnt="0000" thencnt<="1111";else cnt<=cnt-'1';end if;elsecnt<=datain;end if;end if;end process;ledout<=not led;with cnt selectled<="1111001" when"0001", "0100100" when"0010","0110000" when"0011","0011001" when"0100","0010010" when"0101","0000010" when"0110","1111000" when"0111","0000000" when"1000","0010000" when"1001","0001000" when"1010","0000011" when"1011","1000110" when"1100","0100001" when"1101","0000110" when"1110","0001110" when"1111","1000000" when others;end Behavioral;2、波形代码LIBRARY ieee;USE ieee.std_logic_1164.ALL;ENTITY exam33tb ISEND exam33tb;ARCHITECTURE behavior OF exam33tb ISCOMPONENT exam33PORT(clk : IN std_logic;MA : IN std_logic;MB : IN std_logic;datain : IN std_logic_vector(3 downto 0);ledout : OUT std_logic_vector(6 downto 0));END COMPONENT;--Inputssignal clk : std_logic := '0';signal MA : std_logic := '0';signal MB : std_logic := '0';signal datain : std_logic_vector(3 downto 0) := (others => '0');--Outputssignal ledout : std_logic_vector(6 downto 0);BEGIN-- Instantiate the Unit Under Test (UUT)uut: exam33 PORT MAP (clk => clk,MA => MA,MB => MB,datain => datain,ledout => ledout);clk<=not clk after 10 ns;MA<=not MA after 200 ns;MB<=not MB after 100 ns;datain<="1010";END;四、仿真波形五、管脚适配可编程器件与拨码开关和数码管段码的连接情况七、电路资源利用率分析八、验证现象当MA、MB为“00”计数器不计数;当MA、MB为“01”计数器加法计数,步长为一;当MA、MB为“00”计数器减法计数,步长为一;当MA、MB为“11”计数器置数。

变模计数器

变模计数器

南昌大学实验报告学生姓名:学号:专业班级:实验类型:□验证□综合□设计□创新实验日期:实验成绩:实验二模可变计数器设计(一)实验目的1.进一步熟悉PH-1V型实验装置和QuartusⅡ软件的使用;2.进一步熟悉和掌握EDA设计流程;3.学习简单组合、时序电路的EDA设计;4.学习计数器中二进制码到BCD码的转换技巧;5.学习PH-1V型实验装置上数码管的输出方法。

(二)设计要求完成设计、仿真、调试、下载、硬件测试等环节,在PH-1V型EDA实验装置上实现模可变计数器功能,具体要求如下:1.设置一个按键控制改变模值,按键按下时模为10-99之间(具体数值临时确定)的数,没按下时模为100-199之间(具体数值临时确定)的数;2.计数结果用三位(静态)数码管十进制显示。

(三)主要仪器设备1.微机1台2.QuartusII集成开发软件 1套3.PH-1V型EDA实验装置1套(四)实验总体设计该实验要求实现模可变计数,便可首先分别设计出模88和模132的计数器,然后采用一个m电平控制模值,当m=0,实现模88计数;当m=1,实现模132计数。

设计计数器时,即从0开始计数至模值减1这个数时复位为0再开始计数,如模88:从0开始增1计数,当计数到87时复位为0。

然后实验要求计数值用十进制BCD码在数码管上输出,要把相应的计数值转换成十进制BCD码,如对应55,则要转换成01010101B=55H=85,即将55加上30便可实现转换。

而对应不同范围的计数值加上相应的差值转换成十进制BCD码输出。

(四)实验重难点设计1. 用文本输入法设计模可变计数器(1)打开Quartus II软件,进入编辑环境。

(2)创建新的文本文件,命名为cnt88132,根据其总体设计思路写出相应的语句如下:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity cnt88132 isport(clk,rst,en,m:in std_logic;q:out std_logic_vector (11 downto 0);cout:out std_logic);end cnt88132;architecture behav of cnt88132 isbeginprocess(clk,rst,en,m)variable qq:std_logic_vector (11 downto 0); beginif rst='1' then qq:=(others=>'0');elsif clk'event and clk='1' thenif en='1' and m='0' thenif qq<87 then qq:=qq+1;else qq:=(others=>'0');end if;elsif en='1' and m='1' thenif qq<131 then qq:=qq+1;else qq:=(others=>'0');end if;end if;end if;if m='0' and qq=87 then cout<='1';elsif m='1' and qq=131 then cout<='1';else cout<='0';end if;if qq<10 then q<=qq;end if;if qq<20 and qq>9 then q<=qq+6;end if;if qq<30 and qq>19 then q<=qq+12;end if;if qq<40 and qq>29 then q<=qq+18;end if;if qq<50 and qq>39 then q<=qq+24;end if;if qq<60 and qq>49 then q<=qq+30;end if;if qq<70 and qq>59 then q<=qq+36;end if;if qq<80 and qq>69 then q<=qq+42;end if;if qq<90 and qq>79 then q<=qq+48;end if;if qq<100 and qq>89 then q<=qq+54;end if;if qq<110 and qq>99 then q<=qq+156;end if; if qq<120 and qq>109 then q<=qq+162;end if; if qq<130 and qq>119 then q<=qq+168;end if; if qq<140 and qq>129 then q<=qq+174;end if; end process;end behav;3、编辑好程序后进行仿真测试。

模可变计数器

模可变计数器

南昌大学实验报告学生姓名:俞鑫学号: 106100210075 专业班级:通信102班实验类型:□验证□综合□设计□创新实验日期:实验成绩:模可变计数器的设计一、实验要求利用控制位M来改变模长要求M=1时模为114计数,M=0时模为16计数;二、实验步骤1.选目标器件CycloneII中的EP2C35F672C8,建立名为count的工作库文件夹,输入计数器的VHDL代码。

LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY count 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);--计数器的个,十,百位 COUT:OUT STD_LOGIC; --溢出信号SEL:OUT STD_LOGIC_VECTOR(7 DOWNTO 0) --位选信号);END count;ARCHITECTURE behav OF count 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_LOGIC_VECTOR(3 DOWNTO 0); --数码管显示值0SIGNAL MODEL : STD_LOGIC_VECTOR(11 DOWNTO 0); --模长信号BEGINP1:PROCESS(CLK) --进程P1分出的频率用来数码管的位选扫描BEGINIF CLK'EVENT AND CLK = '1' THEN CNT<=CNT+1;IF CNT=130 THEN CLK1<='1'; --130分频ELSE CLK1<='0';END IF;END IF;END PROCESS;P2:PROCESS(EN,RST,M,CLK1) --计数BEGINCASE M ISWHEN '0'=>MODEL<="000000010101"; --16WHEN '1'=>MODEL<="000100010011"; --114END CASE;GW<=J(3 downto 0);SW<=J(7 downto 4);BW<=J(11 downto 8);IF RST='1' THEN J<=(others=>'0');ELSIF CLK1'EVENT AND CLK1='1' THENIF EN='1' THENIF J<MODEL THENIF 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 J<=(others=>'0');END IF;END IF;END IF;END PROCESS;P3:PROCESS( CLK) --数码管控制BEGINIF CLK'EVENT AND CLK='1' THENIF CNT8<"010" THEN CNT8 <=CNT8+1;ELSE CNT8<=(OTHERS=>'0');END IF;END IF;SEL(0)<=sel0 ;SEL(1)<=sel1 ;SEL(2)<=sel2 ;CASE CNT8 IS --个、十、百分别送数码管动态显示WHEN "000" => sel2<='0';sel1<='1';sel0<='0';A<=GW;WHEN "001" => sel2<='0';sel1<='0';sel0<='1';A<=SW;WHEN "010" => sel2<='0';sel1<='0';sel0<='0';A<=BW;WHEN OTHERS =>NULL;END CASE;END PROCESS ;P4:PROCESS(A) --七段译码BEGINCASE A ISWHEN "0000" =>SG<="00111111"; WHEN "0001" =>SG<="00000110";WHEN "0010" =>SG<="01011011"; WHEN "0011" =>SG<="01001111";WHEN "0100" =>SG<="01100110"; WHEN "0101" =>SG<="01101101";WHEN "0110" =>SG<="01111101"; WHEN "0111" =>SG<="00000111";WHEN "1000" =>SG<="01111111"; WHEN "1001" =>SG<="01101111";WHEN OTHERS=>NULL;END CASE;END PROCESS;COUT <='1' WHEN J =MODEL ELSE '0';END behav;2.将上述编辑的文件保存,并编译3.建立仿真波形文件,进行波形仿真。

模可变计数器设计Verilog语言

模可变计数器设计Verilog语言

模可变计数器设计(一)实验目的1、进一步熟悉实验装置和QuartusⅡ软件的使用;2、进一步熟悉和掌握EDA设计流程;3、学习简单组合、时序电路的EDA设计;4、学习计数器中二进制码到BCD码的转换技巧;5、学习实验装置上数码管的输出方法。

(二)设计要求完成设计、仿真、调试、下载、硬件测试等环节,在EDA实验装置上实现模可变计数器功能,具体要求如下:1、设置一个按键控制改变模值,按键按下时模为10-99之间(具体数值自行确定)的数,没按下时模为100-199之间(具体数值自行确定)的数;2、计数结果用三位数码管十进制显示。

(三)主要仪器设备3、微机1台4、QuartusII集成开发软件1套5、EDA实验装置1套(四)实验步骤主要有三个模块1:一个模20和模119的计数器2:数码管的显示3:BCD的调整源程序:module count (clk,m,en,rst,a,sel,SG,d);input clk,m,en,rst;output [7:0] SG;output [2:0] sel;output a;(* synthesis, keep *) reg clk1;(* synthesis, keep *) wire [3:0] gw,sw,bw;/*(* synthesis, keep *) */reg [3:0]a;reg [11:0] q;reg [11:0] model;reg [7:0] cnt,SG;reg [2:0] sel;reg [0:0]d;output [0:0]d;always @(posedge clk)begin cnt=cnt+1;if (cnt==200) begin clk1=1'b1; cnt=0; endelse clk1=1'b0; //200分频,CLK为数码管扫描频率,CLK1为计数频率if (sel<2) sel=sel+1; else sel=0; end //sel为数码管选择always @(sel) begincase (sel)0: a=bw; //0数码管为百位1: a=sw; //1数码管为十位2: a=gw; //2数码管为个位default: a=0;endcasecase (a)0:SG<=8'b00111111; 1:SG<=8'b00000110;2:SG<=8'b01011011; 3:SG<=8'b01001111;4:SG<=8'b01100110; 5:SG<=8'b01101101;6:SG<=8'b01111101; 7:SG<=8'b00000111;8:SG<=8'b01111111; 9:SG<=8'b01101111; //8段译码值default: SG=8'b11111111;endcase endalways @(m)if (m) model=12'b000000100000; //模值20else model=12'b000100011001; //模值119assign gw=q[3:0];assign sw=q[7:4];assign bw=q[11:8];always @(posedge clk1,negedge rst)beginif (!rst) q=0;else if (en)beginif (q<model)beginif (gw==9) begin q=q+7; if (sw==9) q=q+96; end //BCD调整 else q=q+1;endelse q=0;endendalways @(q)if(q<model) d<=0;else d<=1;endmodule波形仿真:Clk1是计数频率,每来一个clk1信号q计数一次如图所示:rst=1有效时开始计数 clk为扫描频率sel=0时数码管显示百位a=0sel=1时数码管显示十位a=1sel=2时数码管显示个位a=3m=1 模20计数器m=0 模119计数器管脚分配:SG[0] PIN_F13SG[1] PIN_F14SG[2] PIN_F15SG[3] PIN_E15SG[4] PIN_F16SG[5] PIN_F17SG[6] PIN_E18SG[7] PIN_F18clk PIN_C13en PIN_H8m PIN_J9rst PIN_C5sel[0] PIN_G18sel[1] PIN_G17sel[2] PIN_G16d[0] PIN_G13(五)实验心得本实验主要是三大模块的编写,第一次的实验在老师给的参考代码下进行的,不过错误依然很多,主要有几个重点药掌握,一是首先要编写出能够计数的模块,用m来控制模值的变化m=1时模值为20 m=0时模值为119;二是计数模块都是二进制计数的,而要在数码管上显示计数的话就必须进行BCD调整,并且q是一个是十二位的寄存器,通过把gw=q[3:0]; sw=q[7:4]; bw=q[11:8]赋值的方法;一个个的显示在数码管上,由于clk的频率比较快,所以可以看到三位数码管显示的值,我觉得管脚分配也是比较关键的!一开始我就把个位和百位显示的值搞反了序列信号发生和检测器设计(一)实验目的1、进一步熟悉EDA实验装置和QuartusⅡ软件的使用方法;2、学习有限状态机法进行数字系统设计;3、学习使用原理图输入法进行设计。

变模计数器设计

变模计数器设计

武汉理工大学
数字电子技术基础课程设计报告
姓名:
班级:
学号:
指导老师:华剑
一.设计要求
设计一个变模计数器
当:X=0时,实现七进制加计数
X=1时,实现五进制加计数
二.设计思路
计数器最大为七进制,因此采用四位二进制计数器即可实现。

因此采用74LS161来进行设计。

三.元器件介绍
1.74LS161原理图和管脚图
74LS161逻辑功能表 U374LS161D QA 14QB 13QC 12QD 11RCO 15
A 3
B 4
C 5
D 6
ENP 7ENT 10
~LOAD 9~CLR 1
CLK 2
2.或门
3.与非门
4.单刀双掷开关
5.函数发生器
6.显示译码器
三.
电路模块设计
S2
键 = 空格
XFG1
U1
DCD_HEX
1.时钟信号输入
2.数字显示电路
3.同步置0电路
四.电路图
五.工作过程
1.X=0时,显示译码器从0到6依次循环显示
计数器从零开始计数。

当QDQCQBQA=0110时,经过或门和与非门得到低电平信号,使得LD=0,计数器置0。

接下来又从0开始循环计数。

2.X=1时,显示译码器从0到4依次循环显示
计数器从零开始计数。

当QDQCQBQA=0100时,经过或门和与非门得到低电平信号,使得LD=0,计数器置0。

接下来又从0开始循环计数。

六.仿真
经过仿真软件模拟,可以实现所要求实现的功能,设计成功。

可变模计数器

可变模计数器

实验名称:可变模数计数器一、实验目的:设计一个可变模计数器,计数器由3个触发器构成,在外部控制信号S2S1的控制下分别实现模3、模5、模7和模8的计数,即(1)、S2S1=00时,实现模3计数,触发器状态依次为0→1→2→0;(2)、S2S1=01时,实现模5计数,触发器状态依次为0→1→2→3→4→0;(3)、S2S1=10时,实现模7计数,触发器状态依次为0→1→2→3→4→5→6→0;(4)、S2S1=11时,实现模8计数,触发器状态依次为0→1→2→3→4→5→6→7→0;二、实验内容:(1)、顶层原理图:(2)、各个模块程序:1、模3:(库略)entity cnt3 isport(s2,s1,en,rd:in std_logic;clk:in std_logic;q:out std_logic_vector(3 downto 0));end cnt3;architecture cnt of cnt3 issignal qn:std_logic_vector(3 downto 0);beginprocess(clk,s1,s2)beginif (rd='0' ) thenqn<=X"0";elsif (en='0') thenqn<=X"0";elsif (clk'event and clk='1' and s1='0' and s2='0') thenif qn(3 downto 0)= X"2" then qn( 3 downto 0 )<="0000"; else qn<=qn+1; end if; end if; end process; q<=qn; end cnt; 2、模5:(库略) entity cnt5 is port( s2,s1,en,rd:in std_logic; clk:in std_logic; q:out std_logic_vector(3 downto 0) ); end cnt5;architecture cnt of cnt5 is signal qn:std_logic_vector(3 downto 0); begin process(clk,s1,s2) begin if (rd='0' ) then qn<=X"0"; elsif (en='0') then qn<=X"0"; elsif (clk'event and clk='1' and s1='1' and s2='0') then if qn(3 downto 0)= X"4" then qn( 3 downto 0 )<="0000"; elseqn<=qn+1;end if; --else --qn<=X"0"; end if; end process; q<=qn; end cnt;3、模7:(库略) entity cnt7 is port( s2,s1,en,rd:in std_logic; clk:in std_logic; q:out std_logic_vector(3 downto 0) ); end cnt7;architecture cnt of cnt7 is signal qn:std_logic_vector(3 downto 0); begin process(clk,s1,s2) begin if (rd='0' ) then qn<=X"0"; elsif (en='0') then qn<=X"0"; elsif (clk'event and clk='1' and s1='0' and s2='1') then if qn(3 downto 0)= X"6" then qn( 3 downto 0 )<="0000"; else qn<=qn+1;end if;--else--qn<=X"0";end if;end process;q<=qn;end cnt;4、模8:(库略)entity cnt8 isport(s2,s1,en,rd:in std_logic;clk:in std_logic;q:out std_logic_vector(3 downto 0));end cnt8;architecture cnt of cnt8 issignal qn:std_logic_vector(3 downto 0);beginprocess(clk,s1,s2)beginif (rd='0' ) thenqn<=X"0";elsif (en='0') thenqn<=X"0";elsif (clk'event and clk='1' and s1='1' and s2='1') thenif qn(3 downto 0)= X"7" thenqn( 3 downto 0 )<="0000";elseqn<=qn+1;end if;--else--qn<=X"0";end if;end process;q<=qn;end cnt;5、decoder显示:(库略)entity decoder isport(s1,s2:in std_logic;seg:out std_logic_vector(6 downto 0);done,dtwo,dthree,dfour:instd_logic_vector(3 downto 0));end decoder;architecture dec of decoder issignal d : std_logic_vector(3 downto 0); beginprocess(s1,s2)beginif ( s1='0' and s2='0') thend <=done;elsif ( s1='1' and s2='0') thend <=dtwo;elsif ( s1='0' and s2='1') thend <=dthree;elsed<=dfour;end if;end process;with d selectseg <="0111111" when "0000","0000110" when "0001","1011011" when "0010","1001111" when "0011","1100110" when "0100","1101101" when "0101","1111101" when "0110","0000111" when "0111","1111111" when "1000","1101111" when "1001","0000000" when others;end dec;三、实验总结:通过本次实验,掌握了从顶层文件原理图开始,自上而下的设计电路的方法,感受到此方法的在各个模块程序调试时的方便,有更好的逻辑思路。

可变模计数器

可变模计数器

一、实验目的:1. 掌握用 VHDL 硬件描述语言做电路综合设计方法。

2. 熟悉掌握程序的编译、仿真、生成模块及芯片引脚号码锁定方法并下载到目标芯片。

二、实验仪器:ZY11EDA13BE 型实验箱三、实验内容及要求:1. 设计一个可变模计数器。

2. 设计一个可变模计数器, 计数器有 3个触发器构成, 在外部控制信号 S2和 S1的控制下分别实现模 3、模 5、模 7和模 8计数器,即(1 S2S1=00时,实现模 3计数,触发器的状态一次0→ 1→ 2→ 0;(2 S2S1=01时,实现模 5计数,触发器的状态一次0→ 1→ 2→ 3→ 4→ 0;(3 S2S1=10时,实现模 7计数,触发器的状态一次0→ 1→ 2→ 3→ 4→ 5→ 6→ 0;(4 S2S1=11时,实现模 7计数,触发器的状态一次0→ 1→ 2→ 3→ 4→ 5→ 6→7→ 0; 并将结果输出到数码管上。

四实验程序二四译码部分LIBRARY IEEE;ENTITY M2_45 ISPORT(A: IN STD_LOGIC_VECTOR(1 DOWNTO 0; Y3,Y2,Y1,Y0: BUFFER STD_LOGIC;END M2_45;ARCHITECTURE A OF M2_45 ISSIGNAL SEL :STD_LOGIC_VECTOR(1 DOWNTO 0; SIGNAL QN :STD_LOGIC_VECTOR(2 DOWNTO 0; BEGINSEL(0<=A(0;SEL(1<=A(1;WITH SEL SELECTQN<="0001"WHEN"00", "0010"WHEN"01","0100"WHEN"10","1000"WHEN"11","0000"WHEN OTHERS;Y0<=QN(0;Y1<=QN(1;Y2<=QN(2;Y3<=QN(3;END A;模三部分LIBRARY IEEE;ENTITY MO3 ISPORT(CP,EN:IN STD_LOGIC;Q:OUT STD_LOGIC_VECTOR(2 DOWNTO 0 ;END MO3;ARCHITECTURE A OF MO3 ISSIGNAL QN:STD_LOGIC_VECTOR(2 DOWNTO 0 ; BEGIN PROCESS(CP,ENBEGINIF(EN='0'THENQN<="000";ELSIF(CP'EVENT AND CP='1'THENIF(QN="010"THENQN<="000";ELSEQN<=QN+1;END IF;END IF;END PROCESS;Q<=QN;END A;模五部分LIBRARY IEEE;ENTITY MO5 ISPORT(CP,EN:IN STD_LOGIC;Q:OUT STD_LOGIC_VECTOR(2 DOWNTO 0 ;END MO5;ARCHITECTURE A OF MO5 ISSIGNAL QN:STD_LOGIC_VECTOR(2 DOWNTO 0 ; BEGIN PROCESS(CP,ENBEGINIF(EN='0'THENQN<="000";ELSIF(CP'EVENT AND CP='1'THEN IF(QN="100"THENQN<="000";ELSEQN<=QN+1;END IF;END IF;END PROCESS;Q<=QN;END A;模七部分LIBRARY IEEE;ENTITY MO7 ISPORT(CP,EN:IN STD_LOGIC;Q:OUT STD_LOGIC_VECTOR(2 DOWNTO 0 ;END MO7;ARCHITECTURE A OF MO7 ISSIGNAL QN:STD_LOGIC_VECTOR(2 DOWNTO 0 ; BEGIN PROCESS(CP,ENBEGINIF(EN='0'THENQN<="000";ELSIF(CP'EVENT AND CP='1'THENIF(QN="110"THENQN<="000";ELSEQN<=QN+1;END IF;END IF;END PROCESS;Q<=QN;END A;模八部分LIBRARY IEEE;ENTITY MO8 ISPORT(CP,EN:IN STD_LOGIC;Q:OUT STD_LOGIC_VECTOR(2 DOWNTO 0;END MO8;ARCHITECTURE A OF MO8 ISSIGNAL QN:STD_LOGIC_VECTOR(2 DOWNTO 0 ; BEGINPROCESS(CP,ENBEGINIF(EN='0'THENQN<="000";ELSIF(CP'EVENT AND CP='1'THEN IF(QN="111"THENQN<="000";ELSEQN<=QN+1;END IF;END IF;END PROCESS;Q<=QN;END A;动态扫描部分LIBRARY IEEE;ENTITY CTL ISPORT(CP:IN STD_LOGIC;MO3,MO5,MO7,MO8:IN STD_LOGIC_VECTOR(2 DOWNTO 0; SEL:IN STD_LOGIC_VECTOR(1 DOWNTO 0;COUT:OUT STD_LOGIC_VECTOR(3 DOWNTO 0;END CTL;ARCHITECTURE A OF CTL ISBEGINPROCESS(CPBEGINIF(CP'EVENT AND CP='1'THENCASE SEL ISWHEN "00"=>COUT<=MO3(2 DOWNTO 0;WHEN "01"=>COUT<=MO5(2 DOWNTO 0;WHEN "10"=>COUT<=MO7(2 DOWNTO 0;WHEN "11"=>COUT<=MO8(2 DOWNTO 0;WHEN OTHERS=>COUT<="000";END CASE;END IF;END PROCESS;END A;BCD 译码部分LIBRARY IEEE;ENTITY BCDYM ISPORT(D:IN STD_LOGIC_VECTOR(2 DOWNTO 0; Q:OUT STD_LOGIC_VECTOR(6 DOWNTO 0; END BCDYM;ARCHITECTURE QQ OF BCDYM ISBEGINPROCESS(DBEGINCASE D ISWHEN"000"=>Q<="0111111";WHEN"001"=>Q<="0000110";WHEN"010"=>Q<="1011011";WHEN"011"=>Q<="1001111";WHEN"100"=>Q<="1100110";WHEN"101"=>Q<="1101101";WHEN"110"=>Q<="1111101";WHEN"111"=>Q<="0000111";WHEN OTHERS=>Q<="0000000";END CASE;END PROCESS;END QQ;五实验电路图 MO3 CP INPUT VCC CP Q[2..0] EN 0. inst3 M2_45 A[1..0] INPUT VCC A[1..0] Y0 Y1 Y2 Y3 MO5 CP Q[2..0] EN CTL BCDY M D[2..0] CP MO3[2..0] MO5[2..0] inst11 COUT[2..0] Q[6..0] inst inst5 MO7[2..0] MO8[2..0]SEL[1..0] MO7 CP Q[2..0] EN inst10 Q[6..0] inst7 OUTPUT MO8 CP Q[2..0] EN inst8 //。

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

模可变计数器设计(一)实验目的1、进一步熟悉实验装置和QuartusⅡ软件的使用;2、进一步熟悉和掌握EDA设计流程;3、学习简单组合、时序电路的EDA设计;4、学习计数器中二进制码到BCD码的转换技巧;5、学习实验装置上数码管的输出方法。

(二)设计要求完成设计、仿真、调试、下载、硬件测试等环节,在EDA实验装置上实现模可变计数器功能,具体要求如下:1、设置一个按键控制改变模值,按键按下时模为10-99之间(具体数值自行确定)的数,没按下时模为100-199之间(具体数值自行确定)的数;2、计数结果用三位数码管十进制显示。

(三)主要仪器设备3、微机1台4、QuartusII集成开发软件1套5、EDA实验装置1套(四)实验步骤主要有三个模块1:一个模20和模119的计数器2:数码管的显示3:BCD的调整源程序:module count (clk,m,en,rst,a,sel,SG,d);input clk,m,en,rst;output [7:0] SG;output [2:0] sel;output a;(* synthesis, keep *) reg clk1;(* synthesis, keep *) wire [3:0] gw,sw,bw;/*(* synthesis, keep *) */reg [3:0]a;reg [11:0] q;reg [11:0] model;reg [7:0] cnt,SG;reg [2:0] sel;reg [0:0]d;output [0:0]d;always @(posedge clk)begin cnt=cnt+1;if (cnt==200) begin clk1=1'b1; cnt=0; endelse clk1=1'b0; //200分频,CLK为数码管扫描频率,CLK1为计数频率if (sel<2) sel=sel+1; else sel=0; end //sel为数码管选择always @(sel) begincase (sel)0: a=bw; //0数码管为百位1: a=sw; //1数码管为十位2: a=gw; //2数码管为个位default: a=0;endcasecase (a)0:SG<=8'b00111111; 1:SG<=8'b00000110;2:SG<=8'b01011011; 3:SG<=8'b01001111;4:SG<=8'b01100110; 5:SG<=8'b01101101;6:SG<=8'b01111101; 7:SG<=8'b00000111;8:SG<=8'b01111111; 9:SG<=8'b01101111; //8段译码值default: SG=8'b11111111;endcase endalways @(m)if (m) model=12'b000000100000; //模值20else model=12'b000100011001; //模值119assign gw=q[3:0];assign sw=q[7:4];assign bw=q[11:8];always @(posedge clk1,negedge rst)beginif (!rst) q=0;else if (en)beginif (q<model)beginif (gw==9) begin q=q+7; if (sw==9) q=q+96; end //BCD调整else q=q+1;endelse q=0;endendalways @(q)if(q<model) d<=0;else d<=1;endmodule波形仿真:Clk1是计数频率,每来一个clk1信号q计数一次如图所示:rst=1有效时开始计数clk为扫描频率sel=0时数码管显示百位a=0sel=1时数码管显示十位a=1sel=2时数码管显示个位a=3m=1 模20计数器m=0 模119计数器管脚分配:SG[0] PIN_F13SG[1] PIN_F14SG[2] PIN_F15SG[3] PIN_E15SG[4] PIN_F16SG[5] PIN_F17SG[6] PIN_E18SG[7] PIN_F18clk PIN_C13en PIN_H8m PIN_J9rst PIN_C5sel[0] PIN_G18sel[1] PIN_G17sel[2] PIN_G16d[0] PIN_G13(五)实验心得本实验主要是三大模块的编写,第一次的实验在老师给的参考代码下进行的,不过错误依然很多,主要有几个重点药掌握,一是首先要编写出能够计数的模块,用m来控制模值的变化m=1时模值为20 m=0时模值为119;二是计数模块都是二进制计数的,而要在数码管上显示计数的话就必须进行BCD调整,并且q是一个是十二位的寄存器,通过把gw=q[3:0]; sw=q[7:4]; bw=q[11:8]赋值的方法;一个个的显示在数码管上,由于clk的频率比较快,所以可以看到三位数码管显示的值,我觉得管脚分配也是比较关键的!一开始我就把个位和百位显示的值搞反了序列信号发生和检测器设计(一)实验目的1、进一步熟悉EDA实验装置和QuartusⅡ软件的使用方法;2、学习有限状态机法进行数字系统设计;3、学习使用原理图输入法进行设计。

(二)设计要求完成设计、仿真、调试、下载、硬件测试等环节,在EDA实验装置上实现一个串行序列信号发生器和一个序列信号检测器的功能,具体要求如下:1、先用设计0111010011011010序列信号发生器,其最后6BIT数据用LED显示出来;2、再设计一个序列信号检测器,检测上述序列信号,若检测到串行序列“11101”则输出为“1”,否则输出为“0”;(三)主要仪器设备1、微机1台2、QuartusII集成开发软件1套3、EDA实验装置1套(四)实验步骤主要两部分1:序列信号发生器设置q<=16'b0111010011011010;q[0]<=q[15];Q<=q[15];q[15:1]<=q[14:0] ;通过循环移位串行输出2:序列信号检测器状转移态图一共有六个状态分别为S = 5'd00000,A = 5'd00001,B = 5'd00011,C = 5'd00110,D = 5'd01101,E = 5'd11010;源程序:module xulie(clk,rst,z,Q,led); input clk,rst;output Q,z;output [4:0] led;reg [4:0] led;reg [4:0] state;reg Q,z;reg [4:0] a;reg [15:0] q;parameter S = 5'd00000,A = 5'd00001,B = 5'd00011,C = 5'd00110,D = 5'd01101,E = 5'd11010;always @(posedge clk)beginif(rst==0) beginq<=16'b0111010011011010;endelse beginq[0]<=q[15];Q<=q[15];q[15:1]<=q[14:0] ;endendalways @(posedge clk)beginif(state==D && Q==1)begin z<=1;led<=5'b11101;endelse begin z<=0;led<=5'b00000;endendalways @(posedge clk or negedge rst)if(!rst)beginstate<=S;endelsecasex(state)S: if(Q==1)state<=A;else state<=S;A: if (Q==1)state<=B;else state<= S;B: if (Q==1)state<=C;else state<=S;C: if(Q==0)state<=D;else state<=C;D: if(Q==1)state<=E;else state<=S;E: if(Q==0)state<=S;else state<=A;default: state<=S;endcaseendmodule波形仿真当rst=1是序列信号发生器循环发出0111010011011010 当检测到11101是z=1输出高电平,并且同时使11101序列显示在五个led灯上(五)实验心得做实验之前准备了很多,实验时还是出现了很多问题,一开始序列信号发生器在第一个周期之后就会多出一个0即输出00111010011011010,原因在于Q<=q[15]; q[15:1]<=q[14:0] ;q[0]<=Q;因为q[0]<=Q需要一个时钟的上升沿才能执行,所以就会多输出一个0;其次状态转移图也是关键,需要记忆六个不同的状态;做这个实验让我学到了casex的一些用法;进一步了解编写verilog语言。

相关文档
最新文档