基于EDA的三位十进制计数器
- 格式:wps
- 大小:555.50 KB
- 文档页数:7
南京工程学院自动化学院实验报告课程名称电子设计自动化EDA技术实验项目名称10进制计数器设计实验学生班级实验学生姓名同组学生姓名实验时间实验地点实验成绩评定指导教师签字年月日24其中D 表示输入初始计数值,Sta 为计数开始,Q 表示当前计数值;LD 表示预制计数值,LD 为“0”,初始计数值打入器件;UD 表示计数方向,UD 为‘0’,计数器加计数,UD 为‘1’,计数器减计数;C 表示器件工作态,C 为‘0’,表示计数器正在计数;C 为‘1’,表示计数器计数结束;CP 为计数脉冲。
四、实验方案设计、实验方法 1. 实验方案10进制计数器的VHDL 描述有多种方法,设计过程中可以采用计数脉冲CP 作为敏感量,CP 的每个上升沿,计数值Q 加‘1’或减‘1’,加到‘9’后回‘0’或减到‘0’后回‘9’,语句可采用case …when 、with …select 、if …then 以及加减运算等多种结构实现。
也可以首先设计基本的触发器、锁存器等元件,而后通过元件的互联实现。
本实验中根据真值表用if-then 结构实现10进制计数器 2. 实验方法首先根据前文所述,对照真值表的列出的不同输入逻辑状态,分情况依次输出于输入的对应关系,而后编译综合,由开发系统自行实现电路功能。
五、实验步骤1. 设计输入 利用FILE\New 菜单输入VHDL 源程序,创建源文件D0 D1 D2 D3 CP Sta LD UDQ0 Q1 Q2 Q3 C62. 器件及管脚逻分配图管脚分配情况如图,所选器件为EPM7032AELCC44-43. 仿真波形10进制计数器的仿真波形如下图,从波形可以得出,输入输出满足前文真值表,设计电路功能达到设计要求4. 时序分析图上述时间分析可以得到,输出信号存在3ns的时间延迟,它主要与器件速度、表达逻辑的合理性有关,选用速度更高器件、优化设计可以使该值降低。
8。
2.1 十进制计数器流程2.11 建立工作库文件夹和编辑设计文件任何一项设计都是一项工程(Project),都必须首先为此工程建立一个放置与此工程相关的所有设计文件的文件夹。
此文件夹将被EDA软件默认为工作库(Work Library)。
一般,不同的设计项目最好放在不同的文件夹中,而同一工程的所有文件都必须放在同一文件夹中。
在建立了文件夹后就可以将设计文件通过Quartus II的文本编辑器编辑并存盘,步骤如下:(1)新建一个文件夹。
这里假设本项设计的文件夹取名为CNT10B,在D盘中,路径为d:\cnt10b 。
注意,文件夹名不能用中文,也最好不要用数字。
(2)输入源程序。
打开QuartusII,选择菜单File→New。
在New窗口中的Device Design Files中选择编译文件的语言类型,这里选择“VHDL File”(如图2-1所示)。
然后在VHDL 文本编译窗中输入(键入)例3-22所示的VHDL示例程序。
图2-1 选择编辑文件的语言类型《示例程序和实验指导课件位置》:\EDA_BOOK3_FOR_1C6\chpt4\EXPT53_cnt10\工程cnt10【例3-22】LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY CNT10 ISPORT (CLK,RST,EN : IN STD_LOGIC;CQ : OUT STD_LOGIC_VECTOR(3 DOWNTO 0);COUT : OUT STD_LOGIC );END CNT10;ARCHITECTURE behav OF CNT10 ISBEGINPROCESS(CLK, RST, EN)VARIABLE CQI : STD_LOGIC_VECTOR(3 DOWNTO 0);BEGINIF RST = '1' THEN CQI := (OTHERS =>'0') ; --计数器异步复位ELSIF CLK'EVENT AND CLK='1' THEN --检测时钟上升沿IF EN = '1' THEN --检测是否允许计数(同步使能)IF CQI < 9 THEN CQI := CQI + 1; --允许计数, 检测是否小于9 ELSE CQI := (OTHERS =>'0'); --大于9,计数值清零END IF;END IF;END IF;IF CQI = 9 THEN COUT <= '1'; --计数大于9,输出进位信号ELSE COUT <= '0';END IF;CQ <= CQI; --将计数值向端口输出END PROCESS;(3)文件存盘。
物理与电气工程学院课程设计报告十进制计数器设计一、实验任务熟悉QuartusⅡ的Verilog HDL文本设计流程全过程,学习计数器的设计、仿真和硬件测试。
EDA的设计流程为原理图/HDL文本编辑、逻辑综合、FPGA/CPLD适配、FPGA/CPLD编程下载。
EDA的设计所用的软件是Quartus II 软件,Quartus II 软件可以用图形输入、VHDL文本输入的方法输入,之后进行时序仿真,EDA设计流程的最后一步是将程序下载到开发板上,进行硬件测试。
二、实验原理根据频率的定义和频率测量的基本原理,测定信号的频率必须有一个脉宽为1秒的对输入信号脉冲计数允许的信号;1秒计数结束后,计数值锁入锁存器的锁存信号和为下一测频计数周期作准备的计数器清0信号。
这3个信号可以由一个测频控制信号发生器产生,即图6-24中的TESTCTL,它的设计要求是,TESTCTL的计数使能信号CNT_EN能产生一个1秒脉宽的周期信号,并对频率计的每一计数器CNT10的ENA使能端进行同步控制。
当CNT_EN高电平时,允许计数;低电平时停止计数,并保持其所计的脉冲数。
在停止计数期间,首先需要一个锁存信号LOAD的上跳沿将计数器在前1秒钟的计数值锁存进各锁存器REG4B中,并由外部的7段译码器译出,显示计数值。
设置锁存器的好处是,显示的数据稳定,不会由于周期性的清零信号而不断闪烁。
锁存信号之后,必须有一清零信号RST_CNT对计数器进行清零,为下1秒钟的计数操作作准备。
按规定编写程序如下:module CNT10 (CLK,RST,EN,LOAD,COUT,DOUT,DATA);input CLK,EN,RST,LOAD;input [3:0] DATA;output [3:0] DOUT;output COUT;reg [3:0] Q1 ; reg COUT ;assign DOUT = Q1;always @(posedge CLK or negedge RST) beginif (!RST) Q1 <= 0;else if (EN) beginif (!LOAD) Q1 <= DATA;else if (Q1<9) Q1 <= Q1+1;else Q1 <= 4'b0000; endendalways @(Q1)if (Q1==4'h9) COUT = 1'b1;else COUT = 1'b0;endmodule编写Verilog程序描述一个电路,实现以下功能:设计带有异步复位、同步计数使能和可预置型的十进制计数器。
模323计数器设计实验报告一、实验内容在QuartusII平台上,利用VHDL代码实现学号323计数器的设计,并在三位数码管显示出来。
二、实验步骤与过程分析1、建立工程。
打开Quartus II软件平台,点击File---〉new project wizard建立一个工程xuehao_323,工程所在文件夹名字为xuehao_323,设置顶层实体名称为xuehao_323,点击next设置device,按照实验箱上FPGA的芯片名更改编程芯片的设置。
分析:选择的硬件平台是Altera EPF10K20TI144_4的FPGA试验箱。
2、添加VHDL文件。
在所在工程添加文件cnt10.vhd(十进制计数器),cnt_xuehao.vhd(323进制计数器),scan_led3_vhd.vhd(三位数码管显示),exp_cnt_xuehao323_7seg.vhd(数码管显示323三位学号计数器)四个文件。
这里通过老师给出的代码进行修改且理解:cnt10.vhd如下:分析:这是十进制计数器的VHDL代码设计,因为十进制有十个状态,所以输入数据和输出状态需要四位宽,其中输入端口有aclr 清零端,clock时钟信号,cnt_en使能端,data[3..0]数据输入,sload装载使能,当aclr为高电平有效时,输出清零,从0开始,计数为时钟信号clock的上升沿到来时且使能端cnt_en 为高电平有效时自动加1(sload为低电平时),如果装载使能sload为高电平有效时,则装载数据data[3..0],输出端口有两个,分别为cout(当q[3..0]为9时输出为高电平),q[3..0]变化为0—9循环变化。
cnt_xuehao.vhd分析如下:这里是调用cnt_10十进制计数器的元件例化来设计323(学号)计数器。
输入端口aclr(高电平有效清零端),clock(时钟信号上升沿有效),cnt_en(使能端),sload(装载时能,高电平有效时装在输入的数据),datab[3..0],datas[3..0],datag[3..0](三位学号的数据输入端,每位变化相当于一个十进制计数器);输出端口qb[3..0](百位)qs[3..0](十位)qg [3..0](个位)变化为qb qs qg=000到322共323中状态,当等于322时,输出cout为高电平指示达到一个循环。
现代电子设计实验报告实验名称:3位十进制循环计数器的设计系(科):信息科学与技术系班级:学号:姓名:完成时间:2012年4月24日. 1 .一、实验内容(一)设计要求1.设计一个3位十进制循环计数器,从0加到999,再恢复到0,循环往复。
每秒计数器加1。
2.有复位功能,当复位端reset为高时,计数器清零,停止计数。
3.可以控制计数的开始start和停止stop。
当计数开始start信号有效时,计数器开始计数;当计数停止stop信号有效时,计数停止;当start信号再次有效时,继续计数。
4.计数器的计数值采用动态显示方式在数码管上显示出来。
5.进行设计,仿真并下载程序到实验箱的CPLD模块板进行验证。
(二)电路模块cyclecntsysclk reset startSE G[6. SCAN[7.★提示:reset信号可以使用拨动开关来产生。
start和stop信号使用按键来实现输入信号:sysclk:基准时钟,50MHz;reset:异步复位信号,高有效;start,stop:计数开始和计数停止信号输入;. 2 .输出信号:SEG[6..0]:段码信号输出。
SCAN[7..0]:位码信号输出。
二、实验原理此系统的核心为一个三位循环计数器,将此计数器的输出结果通过分位电路动态显示到三个数码管上面。
另外的辅助电路分别为四个不同频率的分频器和按键去抖电路。
三、设计方案四、原理图. 3 .. 4 .五、模块设计(一)分频电路1.设计原理分频器就是对较高频率的信号进行分频,得到较低频率的信号。
定义一个计数器对输入时钟进行计数,在计数的前一半时间里,输出高电平,在计数的后一半时间里,输出低电平,这样输出的信号就是占空比为50%的偶数分频信号。
例如,6分频,计数值为0~2输出高电平,计数值为3~5输出低电平。
2.VHDL程序代码输出为1HZ分频电路N=50MHZ/1HZ=50000000Library ieee;Use ieee.std_logic_1164.all;Use ieee.std_logic_unsigned.all;Use ieee.std_logic_arith.all;Entity fdiv1 isgeneric(N: integer:=50000000); --rate=N,N是偶数port(clkin: IN std_logic;clkout: OUT std_logic);End fdiv1;Architecture a of fdiv1 is. 5 .signal cnt: integer range 0 to n-1;Beginprocess(clkin) --计数beginif(clkin'event and clkin='1') thenif(cnt<n-1) thencnt <= cnt+1;elsecnt <= 0;end if;end if;end process;process(cnt) --根据计数值,控制输出时钟脉冲的高、低电平beginif(cnt<n/2) thenclkout <= '1';elseclkout <= '0';end if;end process;End a;输出为10HZ分频电路N=50MHZ/10HZ=5000000. 6 .Library ieee;Use ieee.std_logic_1164.all;Use ieee.std_logic_unsigned.all;Use ieee.std_logic_arith.all;Entity fdiv10 isgeneric(N: integer:=5000000); --rate=N,N是偶数port(clkin: IN std_logic;clkout: OUT std_logic);End fdiv10;Architecture a of fdiv10 issignal cnt: integer range 0 to n-1;Beginprocess(clkin) --计数beginif(clkin'event and clkin='1') thenif(cnt<n-1) thencnt <= cnt+1;elsecnt <= 0;end if;end if;end process;. 7 .process(cnt) --根据计数值,控制输出时钟脉冲的高、低电平beginif(cnt<n/2) thenclkout <= '1';elseclkout <= '0';end if;end process;End a;输出为200HZ分频电路N=50MHZ/200HZ=250000Library ieee;Use ieee.std_logic_1164.all;Use ieee.std_logic_unsigned.all;Use ieee.std_logic_arith.all;Entity fdiv10 isgeneric(N: integer:=250000); --rate=N,N是偶数port(clkin: IN std_logic;clkout: OUT std_logic);End fdiv10;Architecture a of fdiv10 is. 8 .signal cnt: integer range 0 to n-1;Beginprocess(clkin) --计数beginif(clkin'event and clkin='1') thenif(cnt<n-1) thencnt <= cnt+1;elsecnt <= 0;end if;end if;end process;process(cnt) --根据计数值,控制输出时钟脉冲的高、低电平beginif(cnt<n/2) thenclkout <= '1';elseclkout <= '0';end if;end process;End a;输出为1000HZ分频电路N=50MHZ/1000HZ=50000Library ieee;. 9 .Use ieee.std_logic_1164.all;Use ieee.std_logic_unsigned.all;Use ieee.std_logic_arith.all;Entity fdiv10 isgeneric(N: integer:=50000); --rate=N,N是偶数port(clkin: IN std_logic;clkout: OUT std_logic);End fdiv10;Architecture a of fdiv10 issignal cnt: integer range 0 to n-1;Beginprocess(clkin) --计数beginif(clkin'event and clkin='1') thenif(cnt<n-1) thencnt <= cnt+1;elsecnt <= 0;end if;end if;end process;process(cnt) --根据计数值,控制输出时钟脉冲的高、低电平. 10 .beginif(cnt<n/2) thenclkout <= '1';elseclkout <= '0';end if;end process;End a;(二)扫描电路1.设计原理当reset和stop信号起作用时,输出到计数器的信号为低电平,只有当start 和脉冲信号起作用时,输出才为高。
计算机与信息技术学院设计性实验报告一、实验目的1.掌握计数器的工作方式2.掌握计数器程序设计方法3.设计一个999计数器,使波形图从0计数到999。
二、实验仪器或设备装Quartue II 5.0软件的微机一台三、总体设计(设计原理、设计方案及流程等)(一)设计原理1.对于一个矩形信号脉冲序列,如果在其上升沿计一次数,就可以设计一个十进制计数器,当计数够10次后,进位端就有一个输出。
2.可以用三个十进制计数器设计一个电路,使其可以计数从0到999,即可以设计出一个999计数器。
3.在Quartue II 5.0的编译环境中,可以根据Verilog HDL的文件生成一个与源程序对应的结构功能框图。
(二)设计方案及流程1.设计方案:(1)在Verilog HDL的编译环境里,编写代码,设计一个十进制计数器即count10,使其在输入信号clk的上升沿进行计数,并在输出端q把计数结果输出。
当计数到9时,进位端cout为1,并使输出端q为0 ,其他时候进位端cout为0。
(2)根据count10.v生成一个与其相对应的功能结构框图,第一个框图的进位输出作为第二个的输入,第二个框图的进位输出作为第三个框图的输入。
则第一个框图的输出即为个位,第二个框图的输出即为十位,第三个框图的输出即为百位。
三者组合即可从0计数到999。
2.流程图图1 流程图四、实验步骤(包括主要步骤、代码分析等)(一)主要步骤1.打开Quartue II 5.0集成调试软件2.单击“File”-“New”-“Verilog HDL File”,新建一个Verilog HDL 文件,命名为“count10.v”。
3.新建工程,命名为“count10”,进行“编译”。
4.单击“File”—“Create/Update”生成一个十进制计数器的结构功能框图。
5.单击“File”-“New”-“Other Files”-“Block Symbol File”,在此环境下将生成的十进制计数器的结构功能框图找出来,并找出所需要的输入输出引脚,按照电路原理图连接电路。
三位的十进制加法计数器的VHDL语言--VHDL程序如下:LIBRARY ieee;UsE ieee。
std_logic_1164。
all;ENTITY cnt1000 IsPORT(clk : IN STD_LOGIC;clr : IN STD_LOGIC;en : IN STD_LOGIC;count : OUT I NTEGER RANGE 0 TO 999; co :OUT STD_LOGIC);END cnt1000;ARCHITECTURE a OF cnt1000 IsSIGNAL s : INTEGER RANGE 0 TO 999;BEGINPROCESS (clk, clr)BEGINIF clr = '0’ THENs 〈= 0;ELSIF (clk'EVENT AND clk = '1’) THENIF en = '1' THENIF s<999 THENs <= s + 1;ELSE s<=0;END IF;ELSEs <= s;END IF;IF s = 999 THEN co 〈='1’;ELSE co <=’0';END IF;END IF;END PROCESS;count 〈= s;END a;摘要:根据教学实践, 介绍了VHDL 硬件描述语言进行工程设计的优点。
他既是一种与实际技术相独立的语言, 不束缚于某一特定的模拟程序或数字装置上,也不把设计方法强加于设计者,他允许设计者在其使用范围内选择工艺和方法,描述能力极强, 覆盖了逻辑设计的诸多领域和层次,并支持众多的硬件模型;也是一种在数字电路教学中全新的理论联系实际的教学方法和全新的培养学生实际动手能力的有效工具。
同时简要地说明VHDL 硬件描述语言的支撑软件M ax+ Plus.并结合实例详细阐明VHDL 语言在M ax+ Plus 软件的环境下对数字电路的设计、应用方法及使用时需注意的几个方面事项。
计数器一、实验目的1、设计一个带使能输入、进位输出及同步清0的增1十进制计数器2、设计一个带计数使能、同步清0、同步加载的4位计数器3、设计一个带使能、同步清0控制和进位输出的增14位二进制计数器,计数结果由一位7段码管显示。
4、设计一个带使能和同步清0控制的增1减18位二进制计数器,计数结果由7段数码管显示。
二、实验内容1、带使能、同步清0控制和进位输出的增14位二进制计数器VHDL源代码library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;entity counter2 isPort ( clk : in STD_LOGIC;clr : in STD_LOGIC;en : in STD_LOGIC;co : out STD_LOGIC;y : out STD_LOGIC_VECTOR (6 downto 0));end counter2;architecture Behavioral of counter2 issignal cnt:STD_LOGIC_VECTOR(3 downto 0);signal led:STD_LOGIC_VECTOR(6 downto 0);beginprocess(clk)beginif(clk'event and clk='1')thenif clr='1' thencnt<=(others=>'0');elsif en='1' thenif cnt="1111" thencnt<="0000";elsecnt<=cnt+'1';end if;end if;end if;end process;co<='1' when cnt="1111" else '0';y<=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;激励文件源代码LIBRARY ieee;USE ieee.std_logic_1164.ALL;USE ieee.std_logic_unsigned.all;USE ieee.numeric_std.ALL;ENTITY counter_2_tbw_vhd ISEND counter_2_tbw_vhd;ARCHITECTURE behavior OF counter_2_tbw_vhd IS-- Component Declaration for the Unit Under Test (UUT) COMPONENT counter2PORT(clk : IN std_logic;clr : IN std_logic;en : IN std_logic;co : OUT std_logic;y : OUT std_logic_vector(6 downto 0));END COMPONENT;--InputsSIGNAL clk : std_logic := '0';SIGNAL clr : std_logic := '0';SIGNAL en : std_logic := '0';--OutputsSIGNAL co : std_logic;SIGNAL y : std_logic_vector(6 downto 0);BEGIN-- Instantiate the Unit Under Test (UUT)uut: counter2 PORT MAP(clk => clk,clr => clr,en => en,co => co,y => y);clk<=not clk after 20 ns;tb : PROCESSBEGINclr<='1','0' after 30 ns;en<='0','1' after 20 ns;-- Wait 100 ns for global reset to finish--wait for 100 ns;-- Place stimulus herewait; -- will wait foreverEND PROCESS;END;功能仿真时序仿真管脚设置NET "clk" LOC = "E10" ;NET "clr" LOC = "L13" ;NET "co" LOC = "F12" ;NET "en" LOC = "L14" ;NET "y<0>" LOC = "B4" ;NET "y<1>" LOC = "A4" ;NET "y<2>" LOC = "D5" ;NET "y<3>" LOC = "C5" ;NET "y<4>" LOC = "A6" ;NET "y<5>" LOC = "B6" ;NET "y<6>" LOC = "E7" ;实验现象七段数码管显示0、1、2、3、4、5、6、7、8、9、A、b、C、d、E、F,每次循环完成co所接led灯亮一下,表示进位。
eda实验报告十进制计数器设计流程下载温馨提示:该文档是我店铺精心编制而成,希望大家下载以后,能够帮助大家解决实际的问题。
文档下载后可定制随意修改,请根据实际需要进行相应的调整和使用,谢谢!并且,本店铺为大家提供各种各样类型的实用资料,如教育随笔、日记赏析、句子摘抄、古诗大全、经典美文、话题作文、工作总结、词语解析、文案摘录、其他资料等等,如想了解不同资料格式和写法,敬请关注!Download tips: This document is carefully compiled by theeditor.I hope that after you download them,they can help yousolve practical problems. The document can be customized andmodified after downloading,please adjust and use it according toactual needs, thank you!In addition, our shop provides you with various types ofpractical materials,such as educational essays, diaryappreciation,sentence excerpts,ancient poems,classic articles,topic composition,work summary,word parsing,copy excerpts,other materials and so on,want to know different data formats andwriting methods,please pay attention!EDA实验报告:十进制计数器设计流程详解一、实验背景与目的在电子设计自动化(EDA)领域,计数器是一种常见的数字逻辑电路,用于实现数字系统的计数功能。
三位十进制计数器一、设计目的采用文本输入法设计三位十进制加法计数器。
编写VHDL源代码,得出正确的仿真波形,并在实验开发系统上进行硬件演示。
二、设计内容设计一个三位10进制计数器,对计数器相关的理论进行分析、归纳和总结;三位10进制计数器的结构组成及原理分析。
程序代码(含注释);给出程序中主要函数或者语句的功能说明和使用说明;给出程序仿真运行结果和图表、以及实验结果分析和总结。
三、计数器设计原理计数器的输入信号是计数信号(CLK),门控信号是手动清零信号(RESET)、手动允许计数(ENA)。
清零信号Rest为1时,保持在清零状态,计数脉冲上升沿无效;允许计数端为0时,为保持状态,这时保持至最后一个计数,计数脉冲上升沿无效;清零信号为0,允许计数信号为1时,计数器上升沿脉冲计数。
计数器是在数字系统中使用最多的时序电路,它不仅能用于对时钟脉冲计数,还可以用于分频,定时,产生节拍脉冲和脉冲序列以及进行数字运算等。
计数器是一个典型的时序电路,分析计数器就能更好地了解时序电路的特性。
三位十进制计数显示器的设计分三步完成。
先设计十进制计数电路,再设计显示译码电路,最后建立一个顶层文件将两者连接起来。
四、设计程序代码1)三位十进制计数程序:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY COU10 ISPORT(CLK,RESET,CIN :IN STD_LOGIC;CO :OUT STD_LOGIC;BCDAP :OUT STD_LOGIC_VECTOR(3 DOWNTO 0);BCDBP :OUT STD_LOGIC_VECTOR(3 DOWNTO 0);BCDCP :OUT STD_LOGIC_VECTOR(3 DOWNTO 0));END COU3;ARCHITECTURE BEHAVE OF COU3 ISSIGNAL BCDAN:STD_LOGIC_VECTOR(3 DOWNTO 0);SIGNAL BCDBN:STD_LOGIC_VECTOR(3 DOWNTO 0);SIGNAL BCDCN:STD_LOGIC_VECTOR(3 DOWNTO 0);BEGINBCDAP<=BCDAN;BCDBP<=BCDBN;BCDCP<=BCDCN;KK1:PROCESS(CLK)BEGINIF(CLK'EVENT AND CLK='1')THENIF(RESET='0')THENBCDAN<="0000";ELSIF(CIN='1')THENIF(BCDAN="1001")THENBCDAN<="0000";ELSEBCDAN<=BCDAN+'1';END IF;END IF;END IF;END PROCESS KK1;KK2:PROCESS(CLK)BEGINIF(CLK'EVENT AND CLK='1')THENIF(RESET='0')THENBCDBN<="0000";ELSIF(CIN='1') AND (BCDAN="1001")THENIF(BCDBN="1001")THENBCDBN<="0000";ELSEBCDBN<=BCDBN+'1';END IF;END IF;END IF;END PROCESS KK2;KK3:PROCESS(CLK)BEGINIF(CLK'EVENT AND CLK='1')THENIF(RESET='0')THENBCDCN<="0000";ELSIF(CIN='1') AND (BCDBN="1001") AND (BCDAN="1001")THENIF(BCDCN="1001")THENBCDCN<="0000";ELSEBCDCN<=BCDCN+'1';END IF;END IF;END IF;END PROCESS KK3;END BEHAVE;2)显示译码器程序:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY YIMAQI ISPORT(II:IN STD_LOGIC_VECTOR(3 DOWNTO 0); Y :OUT STD_LOGIC_VECTOR(6 DOWNTO 0)); END SEG7;ARCHITECTURE BEHAVE OF SEG7 ISSIGNAL INDATA:STD_LOGIC_VECTOR(3 DOWNTO 0); BEGININDATA<=II;PROCESS(INDATA)BEGINCASE INDATA ISWHEN"0000"=> Y<="0000001";WHEN"0001"=> Y<="1001111";WHEN"0010"=> Y<="0010010";WHEN"0011"=> Y<="0000110";WHEN"0100"=> Y<="1001100";WHEN"0101"=> Y<="0100100";WHEN"0110"=> Y<="0100000";WHEN"0111"=> Y<="0001111";WHEN"1000"=> Y<="0000000";WHEN"1001"=> Y<="0000100";WHEN"1010"=> Y<="0001000";WHEN"1011"=> Y<="1100000";WHEN"1100"=> Y<="0110001";WHEN"1101"=> Y<="1000010";WHEN"1110"=> Y<="0110000";WHEN"1111"=> Y<="0111000";WHEN OTHERS=>Y<="XXXXXXX";END CASE;END PROCESS;END BEHAVE;3)顶层文件:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY DINGCEN ISPORT(CLK,RESET,ENA:IN STD_LOGIC;SEG1: OUT STD_LOGIC_VECTOR(6 DOWNTO 0);SEG2: OUT STD_LOGIC_VECTOR(6 DOWNTO 0);SEG3: OUT STD_LOGIC_VECTOR(6 DOWNTO 0));END COU37SEG;ARCHITECTURE X37 OF COU37SEG ISCOMPONENT SEG7PORT(II:IN STD_LOGIC_VECTOR(3 DOWNTO 0);Y :OUT STD_LOGIC_VECTOR(6 DOWNTO 0));END COMPONENT;COMPONENT COU3PORT(CLK,RESET,CIN:IN STD_LOGIC;BCDAP: OUT STD_LOGIC_VECTOR(3 DOWNTO 0);BCDBP: OUT STD_LOGIC_VECTOR(3 DOWNTO 0);BCDCP: OUT STD_LOGIC_VECTOR(3 DOWNTO 0));END COMPONENT;SIGNAL A,B,C:STD_LOGIC_VECTOR(3 DOWNTO 0);BEGINU0:COU3 PORT MAP(CLK,RESET,ENA,A,B,C);U1:SEG7 PORT MAP(A,SEG1);U2:SEG7 PORT MAP(B,SEG2);U3:SEG7 PORT MAP(C,SEG3);END X37;五、程序设计步骤1)打开ispEXPERT软件,建立一个新的工程cnt10;1 单击菜单File→New Project2 输入工程路径,工程名2)建立VHDL文件单击File→New菜单项,选择VHDL File选项,单击OK按钮以建立VHDL文件,分别建立十进制计数程序的vhd文件COU10.vhd,显示译码器vhd文件YIMAQI.vhd和顶层文件DINGNGCEN.vhd3)然后设定管脚4)最后保存编译运行,生成可下载到板子里面的jed文件5)器件下载6)波形仿真结果六、设计结果与分析三位十进制加法计数器实现了从000到999的计数,当计数到999时,计数器的输出置0,下一次又从0到999计数。
复位信号RESET跳变为低电平时,计数器的输出被置零。
0到999的计数可以在实验板上数码管显示出来。
七、心得体会通过这次设计,进一步掌握了ispEXPERT软件的使用方法以及硬件编程下载的基本技能,并掌握了三位十进制计数器的设计原理。
三位十进制加法计数器电路实现从0到999的计数,当计到999时,计数器回到0,又从0到999计数。
而计数是计脉冲的个数,有一个脉冲到来便计数一次。
本次实现简单地实现了三位十进制加法计数器的功能,为以后的计数器的实现奠定了基础,使我们更加明白和理解计数器的逻辑结构及其功能。
在实验过程中,比较容易出问题的是引脚的锁定,稍微不注意就会把数码管显示的位数颠倒,要不断参考程序分析清楚引脚和数码管对应的接法才能显示正常。