电子信息工程基于VHDL的100进制计数器报告
- 格式:doc
- 大小:96.57 KB
- 文档页数:10
Verilog HDL实验报告Verilog 实验报告题目:JK触发器、同步计数器系部名称:通信工程专业名称:通信工程班级:班内序号:学生姓名:时间:2010.11.28一、实验内容:用JK触发器构成同步计数器:设计一个同步计数器,其逻辑图和JK触发器的逻辑图所示。
清零信号clear低电平有效,输入数据在时钟信号clock的上升沿被锁存,触发器在clock的下降沿输出,当count_enable信号为低电平时停止计数。
写出同步计数器的verilog描述和激励模块,在激励模块中使用clear和count_enable对计数器进行测试,并显示输出计数Q[3:0]。
二、实验原理图:JK触发器构成同步计数器源代码://主模块module synchronous_counter(clear,clock,count_enable,Q);input clear,clock,count_enable;output [3:0] Q;wire qbar1,qbar2,qbar3,qbar0;wire a,b,c;assign a = Q[0] & count_enable;assign b = a & Q[1];assign c = b & Q[2];JK_flip_flop myJK(count_enable,count_enable,clock,clear,Q[0],qbar0);JK_flip_flop myJK1(a,a,clock,clear,Q[1],qbar1);JK_flip_flop myJK2(b,b,clock,clear,Q[2],qbar2);JK_flip_flop myJK3(c,c,clock,clear,Q[3],qbar3);endmodule//调用的JK触发器模块module JK_flip_flop(j,k,clock,clear,q,qbar);input j,k,clock,clear;output q,qbar;wire a,b,y,ybar,c,cbar,d,q,qbar;assign a = ~ (((qbar & j)& clock) & clear);assign b = ~ ((clock & k) & q);assign y = ~ (a & ybar);assign ybar = ~ ((y & clear) & b);assign c = ~(y & cbar);assign cbar = ~ clock;assign d = ~ (cbar & ybar);assign q = ~ (c & qbar);assign qbar = ~ ((q & clear) & d);endmodule测试文件源代码:module count_test;reg count_enable=1,clock=0,clear=0;wire [3:0]Q;synchronous_counter myCount(clear,clock,count_enable,Q);initial #10 clear=1;always@(negedge clock)begin$monitor($time," clear=%b,count_enable=%b,Q=%b%b%b%b\n",clear,count_enable,Q[3],Q[2],Q[1],Q[0]);endalways clock = #5 ~clock;always count_enable= #170 ~count_enable; endmodule实验结果:波形图:三、实验心得:这次实验比上一次顺利多了,可能是因为有了前一次的铺垫,我对软件的熟悉度有了一定的提高。
实验名称:100进制同步计数器设计专业班级:姓名:学号:实验日期:一、实验目的:1、掌握计数器的原理及设计方法;2、设计一个0~100的计数器;3、利用实验二的七段数码管电路进行显示;二、实验要求:1、用VHDL 语言进行描写;2、有计数显示输出;3、有清零端和计数使能端;三、实验结果:1. VHDL程序LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;PACKAGE my_pkg ISComponent nd2 -- 或门PORT (a,b: IN STD_LOGIC;c: OUT STD_LOGIC);END Component;Component led_decoderPORT (din:in std_logic_vector(3 downto 0 ); --四位二进制码输入seg:out std_logic_vector(6 downto 0) ); --输出LED七段码END Component;1Component CNT60 --2位BCD码60进制计数器PORT( CR:IN STD_LOGIC;EN:IN STD_LOGIC;CLK:IN STD_LOGIC;OUTLOW:BUFFER STD_LOGIC_VECTOR(3 DOWNTO 0);OUTHIGH:BUFFER STD_LOGIC_VECTOR(3 DOWNTO 0) );END Component;Component CNT100 --带使能和清零信号的100进制计数器PORT(CLK:IN STD_LOGIC;EN:IN STD_LOGIC;CLR:IN STD_LOGIC;OUTLOW:BUFFER STD_LOGIC_VECTOR(3 DOWNTO 0);OUTHIGH:BUFFER STD_LOGIC_VECTOR(3 DOWNTO 0) ); END Component;Component freq_div --50MHZ时钟分频出1HzPORT(clkinput : IN STD_LOGIC;output : OUT STD_LOGIC);END Component;Component jtd --交通灯控制器PORT(CLKIN:IN STD_LOGIC; --50MHZR1,G1,R2,G2,R3,G3,R4,G4:OUT STD_LOGIC; --红绿灯信号输出GAO,DI:BUFFER STD_LOGIC_VECTOR(3 DOWNTO 0) --倒计时输出);END Component;END my_pkg;LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE work.my_pkg.ALL; --打开程序包ENTITY Demo3 ISPORT (CRl:IN STD_LOGIC;ENl:IN STD_LOGIC;CLKIN: IN STD_LOGIC;LEDLOW,LEDHIGH: OUT STD_LOGIC_VECTOR(6 downto 0));END Demo3;ARCHITECTURE behv OF Demo3 ISSIGNAL CLKTEMP: STD_LOGIC; --定义中转信号SIGNAL LEDLOWTEMP,LEDHIGHTEMP:STD_LOGIC_VECTOR(3 downto 0);BEGINu1:freq_div PORT MAP(CLKIN,CLKTEMP); --位置关联方式u2:CNT60 PORTMAP(CR=>CRl,EN=>ENl,CLK=>CLKTEMP,OUTLOW=>LEDLOWTEMP,OUTHIGH=>LEDHIGHTE MP); --名字关联方式u3:led_decoder PORT MAP(LEDLOWTEMP,LEDLOW); --低位数码管输出u4:led_decoder PORT MAP(LEDHIGHTEMP,LEDHIGH); --高位数码管输出END behv;LIBRARY ieee;USE ieee.std_logic_1164.all;ENTITY freq_div ISPORT(clkinput : IN STD_LOGIC;output : OUT STD_LOGIC);END freq_div;ARCHITECTURE rt OF freq_div ISSIGNAL count_signal : INTEGER RANGE 0 TO 25000000;signal mid1 : STD_LOGIC ;BEGINPROCESS (clkinput)BEGINIF (clkinput'EVENT AND clkinput = '1') THENif count_signal=24999999 then --50MHz division to 1Hzcount_signal <= 0;mid1<= not mid1;elsecount_signal <= count_signal + 1;end if;output <= mid1;end if;END PROCESS;end rt;--文件名:decoder.vhdlibrary IEEE;use IEEE.STD_LOGIC_1164.ALL;entity led_decoder isPort (din:in std_logic_vector(3 downto 0 ); --四位二进制码输入seg:out std_logic_vector(6 downto 0) ); --输出LED七段码end led_decoder;architecture Behavioral of led_decoder isbeginprocess(din)begincase din iswhen "0000" =>seg<="1000000";--0when "0001" => seg<="1111001";--1when "0010" => seg<="0100100";--2when "0011" => seg<="0110000";--3when "0100" => seg<="0011001";--4when "0101" => seg<="0010010";--5when "0110" => seg<="0000010";--6when "0111" => seg<="1011000";--7when "1000" => seg<="0000000";--8when "1001" => seg<="0010000";--9when others => seg<="0000110";--Eend case;end process;end Behavioral;LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY CNT60 ISPORT(CR:IN STD_LOGIC;EN:IN STD_LOGIC;CLK:IN STD_LOGIC;OUTLOW:BUFFER STD_LOGIC_VECTOR(3 DOWNTO 0);OUTHIGH:BUFFER STD_LOGIC_VECTOR(3 DOWNTO 0) );END CNT60;ARCHITECTURE behav OF CNT60 ISBEGINPROCESS(CLK,CR,EN)BEGINif CR='1' thenOUTHIGH<="0000";OUTLOW<="0000";elsif EN ='1'thenIF CLK'EVENT AND CLK='1' THENIF OUTHIGH="1001" AND OUTLOW="1001" THENOUTHIGH<="0000";OUTLOW<="0000";ELSIF OUTLOW="1001" THENOUTHIGH<=OUTHIGH+1;OUTLOW<="0000";ELSE OUTLOW<=OUTLOW+1;END IF;END IF;END IF;END PROCESS;END behav;2.仿真结果以及说明①. 分频器仿真结果:经过多次仿真,发现按照实验要求分频出1HZ的频率是无法仿真出需要的结果的,因为时钟脉冲太多,QuartusII显示不了。
vhdl实验报告VHDL实验报告引言:VHDL(Very High Speed Integrated Circuit Hardware Description Language)是一种硬件描述语言,广泛应用于数字电路设计和仿真。
本篇实验报告将介绍我在VHDL实验中的学习和实践经验,包括实验目的、实验过程、实验结果以及对VHDL的理解和展望。
一、实验目的VHDL实验的主要目的是让我们掌握VHDL语言的基本语法和使用方法,能够利用VHDL描述数字电路,并通过仿真和综合工具进行验证和实现。
通过这些实验,我们可以深入了解数字电路的原理和设计方法,提高我们的逻辑设计能力和工程实践能力。
二、实验过程在实验过程中,我们首先学习了VHDL的基本语法,包括实体声明、端口声明、信号声明等。
然后,我们通过实例学习了VHDL的建模方法,包括组合逻辑电路的建模和时序逻辑电路的建模。
在组合逻辑电路的建模中,我们学习了使用逻辑运算符和条件语句描述电路的功能;在时序逻辑电路的建模中,我们学习了使用过程语句和时钟信号描述电路的状态转换。
在学习了VHDL的基础知识后,我们开始进行实验设计。
我们选择了一个简单的数字电路,如4位加法器,来进行实验验证。
首先,我们通过VHDL语言描述了加法器的功能和结构,包括输入端口、输出端口和中间信号。
然后,我们使用仿真工具进行了功能仿真,验证了加法器的正确性。
接着,我们使用综合工具将VHDL代码综合成门级电路,并进行了时序仿真和时序优化,验证了加法器的时序正确性和性能。
三、实验结果通过实验,我们成功地实现了4位加法器的功能,并验证了其正确性和性能。
在功能仿真中,我们输入了不同的测试数据,观察了输出结果,发现加法器能够正确地进行加法运算,并得到了正确的结果。
在时序仿真中,我们观察了电路的时序行为,包括输入信号的变化、输出信号的响应和中间信号的传播延迟等,发现加法器能够在时序上满足要求,并且具有较好的性能。
实验七100进制计数器设计实验报告一、实验要求1.GW48实验箱;2、用层次设计方式设计100进制计数器, 并进行编译、仿真、下载;3.总结实验步骤和实验结果。
二、实验内容在数字系统中, 计数器不仅能记录输入时钟脉冲的个数, 还可以实现分频、定时、产生节拍脉冲和脉冲序列等。
常用的计数器包括加法计数器、减法计数器和加减可逆计数器。
用层次化设计方法设计一个可控的100进制计数器的计数、译码电路,(1)计数器的时钟输入信号为1s(2)计数器的功能是从0到99计数, 输出显示采用8421BCD码的编码方式。
(3)有一个复位端clr和两个控制端plus和Plus Minus 功能minus, 在这些控制信号的作用下(如下表所示), 计数器具有复位、增或减计数、暂停功能。
Clr0 X X 复位为01 1 0 递增计数1 0 1 递减计数1 1 1 暂停计数这里作为的层次设计方法是指“Top-Down”的设计方法, 它能够把复杂的设计分解为许多简单的逻辑来实现。
本例中可分为两个子模块, 一个是计数模块, 一个是译码模块,由顶层模块将两个子模块组合起来。
多层次结构电路的描述既可以采用文本方式, 也可以用图形和文本混合设计的方式, 这里我们采用文本方式。
(1)计数器模块设计Module zdws(q,clk,clr,plus,minus);inputclk,clr,plus,minus;output[7:0]q;reg[7:0]q;always@(posedgeclk or negedgeclr)beginif(!clr) q<=8'h00;elsecase({plus,minus})2'b10:begin //递增if(q[3:0]==4'd9)beginq[3:0]<=4'd0;if(q[7:4]==9)q[7:4]=4'd0;else q[7:4]<=q[7:4]+1'b1;endelse q[3:0]<=q[3:0]+1'b1;end2'b01:begin //递减if(q[3:0]==4'd0)beginq[3:0]<=4'd9;if(q[7:4]==0)q[7:4]=4'd9;else q[7:4]<=q[7:4]-1'b1;endelse q[3:0]<=q[3:0]-1'b1;end2'b11:q<=q; //暂停default:q<=4'bx;endcaseendendmodule(2)译码电路模块module BCD(in,out);output[6:0]out;input[3:0]in;reg[6:0]out;always@(in)begincase(in)4'd0:out=7'b1111110;4'd1:out=7'b0110000;4'd2:out=7'b1101101;4'd3:out=7'b1111001;4'd4:out=7'b0110011;4'd5:out=7'b1011011;4'd6:out=7'b1011111;4'd7:out=7'b1110000;4'd8:out=7'b1111111;4'd9:out=7'b1111011;default:out=7'bx;endcaseendendmodule(3)顶层电路模块module top(out1,out2,clk,clr,plus,minus);output[6:0]out1,out2;inputclk,clr,plus,minus;wire[7:0]qout;zdws u1(qout,clk,clr,plus,minus);//模块调用, 端口采用位置对应调用法bcd u2(qout[7:4],out1);bcd u3(qout[3:0],out2);endmodule硬件逻辑验证: 选择实验电路结构图NO.6.可取实验电路结构图的PIO40~PIO46接out1[6..0],PIO32~PIO38接out2[6..0],CLOCK0接clk, PIO13接clr(键8), PIO12接plus(键7), PIO11接minus(键6)。
《电气工程及其自动化EDA课程设计》课程设计报告\题目:数字频率计的设计院(系):机电与自动化学院专业班级:电气工程及其自动化学生姓名: XXX学号: 2011XXXXXXX指导教师: XXX 】2014年1月6日至2014年1月10日#华中科技大学武昌分校《电气工程及其自动化EDA课程设计》设计任务书(目录摘要 (1)一.课程设计要求及内容 (1)主要技术指标 (1)工作内容及要求 (1)二数字频率计的基本原理 (1)数字频率计的组成 (1):数字频率器的原理 (2)三具体电路模块设计 (2)100MHz分频器 CLK_GEN的设计 (2)带时钟使能的十进制计数器CNT10的设计 (3)32位锁存器REG32B的设计 (5)测频控制信号发生器TESTCTL的设计 (6)动态输入编译译码器HC4511的设计 (7)四数字频率计系统模块的设计 (9)>系统模块程序设计及仿真波形 (9)数字频率计系统顶层设计 (10)五心得体会 (13)课程设计成绩评定表 (14)(摘要数字频率计是一种用十进制数字显示被测信号频率的一种数字测量仪器,其功能是测量正弦信号,方波信号,尖脉冲信号以及其他各种单位时间内变化的物理量,因此已经成为电路设计的常用元器件之一,有它不可替代的地位。
在电子技术中,频率与许多电参量的设计测量方案,测量结果都有着十分紧密的关系,因此频率的测量就显得更为重要。
测量频率的方法有很多种,其中数字计数器测量频率具有精度高,使用方便,测量迅速,以及便于实现测量过程自动化等优点,是频率测量的重要手段之一。
其原理为通过测量一定闸门时间内信号的脉冲个数。
本文阐述了利用VHDL语言在CPLD器件的基础上设计一个简单的数字频率计的过程。
采用VHDL编程技术设计实现的数字频率计,除被测信号的整形部分,键输入部分和数码显示部分以外,其余全部在一片集成电子芯片上实现,整个系统非常精简,而且具有灵活的现场可更改性。
(此文档为word格式,下载后您可任意编辑修改!)福建农林大学计算机与信息学院信息工程类实验报告2013年11 月18日实验项目列表福建农林大学计算机与信息学院信息工程类实验报告系:电子信息工程系专业:电子信息工程年级: 2010级姓名:秦绍杰学号:实验课程: VHDL数字系统设计实验室号:__ 田C407 实验设备号: 36 实验时间:11.12指导教师签字:成绩:实验一数控分频器的设计1.实验目的和要求学习数控分频器的设计、分析和测试方法。
2.实验原理信号有不同的分频比,数控分频器就是用计数值可并行预置的加法计数器设计完成的,方法是将计数溢出位与预置数加载输入信号相接即可,详细设计程序如例1所示。
数控分频器的仿真波形如图1所示:输入不同的CLK频率和预置值D,给出如图1的时序波形。
100.0μs200.0μs300.0μs400.0μs图1 当给出不同输入值D时,FOUT输出不同频率(CLK周期=50ns)3.主要仪器设备(实验用的软硬件环境)实验的硬件环境是:微机一台GW48 EDA实验开发系统一套电源线一根十芯JTAG口线一根USB下载线一根USB下载器一个示波器实验的软件环境是:Quartus II 9.0软件4.操作方法与实验步骤(1)创建工程,并命名位test。
(2)打开QuartusII,建立VHDL文件,并输入设计程序。
保存为DVF.(3)选择目标器件。
Acex1k—EP1K100QC208-3。
(4)启动编译。
(5)建立仿真波形图。
(6)仿真测试和波形分析。
(7)引脚锁定编译。
(8)编程下载。
(9)硬件测试5.实验内容及实验数据记录在实验系统上硬件验证例5-20的功能。
可选实验电路模式1(第一章图4);键2键1负责输入8位预置数D(PIO7-PIO0);CLK由clock0输入,频率选65536Hz或更高(确保分频后落在音频范围);输出FOUT接扬声器(SPKER)。
编译下载后进行硬件测试:改变键2键1的输入值,可听到不同音调的声音。
北华航天工业学院《EDA技术综合设计》课程设计报告报告题目:基于VHDL的计数器及数码显示器作者所在系部:电子工程系作者所在专业:自动化作者所在班级:B08221作者姓名:刘承东指导教师姓名:崔瑞雪完成时间:2010-11-29内容摘要计数器要求在一个数码管上可以显示十进制加法计数功能,在另一个数码管上线数十二进制加法计数功能。
并且在另两个数码管上显示十六进制可逆计数器功能,最后用两个数码管显示六十进制加法计数功能。
共用到六个数码管。
因此要完成抢答器的逻辑功能,该电路至少应包括译码模块、计数模块、数码显示。
关键词:EDA、可编程逻辑器件、计数器、显示器目录一概述 (1)二方案设计与论证 (1)三程序设计流程图 (2)四单元电路设计 (3)3.1. 数据选择器设计 (3)3.2 计数模块的设计 (4)3.3 译码器模块的设计 (10)3.4 主电路连线图 (11)四器件编程与下载 (11)五实验设备 (11)六心得体会 (11)七参考文献 (12)课程设计任务书一、概述抢答器的逻辑结构较简单,它主要由十进制加法计数模块、十二进制加法计数模块、十六进制可逆计数模块、六十进制加法计数模块与数据选择模块和译码模块组成。
在整个计数器中最关键的是如何实现各个模块的计数。
除此之外,各个计数器还需有一个使能信号和一个归零信号,以便计数器能实现计数和停止。
特别的是十进制计数器需要有一个进位。
显示时需要六个数码管。
二、方案设计与论证将该任务分成六个模块进行设计,分别为:十进制加法计数模块、十二进制加法计数模块、十六进制可逆计数模块、六十进制加法计数模块、译码模块、数据选择模。
1、计数模块:在这六个个模块中主要实现计数功能,;使能端en;抢计数器报时钟信号clk;系统复位信号rst;。
注意的是十进制计数器中需要添加一个进位信号c2、译码模块:在这个模块中主要实现计数过程中将BCD码转换成7段的功能。
3、数据选择模块在这个模块中主要实现计数过程中的数据输入功能,输入信号才c10[3..0]、c12[3..0]、c16[6..0];c60[6..0]计数输出信号sel;数据输出信号daout;计数脉冲clk,实现c10、c12、c16 、c60按脉冲轮流选通,在数码管上显示。
实验二计数器的设计一、实验内容1.结合教材中的介绍熟悉Quartus Ⅱ软件的使用及设计流程;2.计数器设计原理;3.对应的VHDL 代码源程序。
二、实验目的1.掌握文本输入设计方法;2.熟悉QuartusⅡ软件的使用及设计流程;3.掌握计数器原理,能进行计数器的设计。
三、实验器材PC机一台、EDA教学实验系统一台、导线若干四、实验要求1、用文本输入法编写一个计数器代码,用波形编辑工具生成一个计数器的测试向量,完成计数器的时序仿真。
2、至少两种方案实现。
3、分析实验数据。
4.个人总结及感想。
五、实验原理与内容1、原理:将时钟信号作为计数器的信号,当RST = '1'时,计数器异步复位。
当RST=‘0’时并到时钟上升沿时,由使能端EN控制计数,高电平开始计数。
并通过逻辑运算,实现计数进位并清零。
2.实验方案:【本实验选择方案1】方案1:增加一个同步使能控制端口,利用它来控制计数器是否计数。
设置中间变量,采用顺序描述语句IF来实现功能。
方案2:设置两个变量,根据算术原理,当个位数(变量1)大于9时,向十位(变量2)进位实现功能。
六、实验步骤1、用文本输入法设计一个计数器;1》建立项目:启动QuartusII,选择菜单File——New progect wizard,输入项目名与实体名一致。
2》编译:选择菜单File—New,新建VHDL File文件,输入程序代码并保存。
2、利用步骤一得到的计数器使用图形输入法实现波形时序仿真;1》打开波形编辑器:选择File--New---Vector Waveform File。
2》导入全部引脚 : 选择View---Utility Windows---Node Finder选择Pins:all。
选择Edit——End time设置50us。
3》仿真:手动绘制输入波形向量。
并设置为时序仿真。
进行仿真七、实验报告1、实验源程序:方案一代码:---------------------------------------------------------- LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;-------------------------------------------------------------------------------------------------------ENTITY count100 ISPORT (CLK,RST,EN : IN STD_LOGIC;CQ : OUT STD_LOGIC_VECTOR(7 DOWNTO 0);COUT : OUT STD_LOGIC );END count100;------------------------------------------------------------------------------------------------------- ARCHITECTURE behav OF count100 ISBEGINPROCESS(CLK, RST, EN)V ARIABLE CQI : STD_LOGIC_VECTOR(7 DOWNTO 0);BEGINIF RST = '1' THEN CQI := (OTHERS =>'0') ; --计数器异步复位ELSIF CLK'EVENT AND CLK='1' THEN --检测时钟上升沿IF EN = '1' THEN --检测是否允许计数(同步使能)IF CQI < 99 THEN CQI := CQI + 1; --允许计数, 检测是否小99ELSE CQI := (OTHERS =>'0'); --大于99,计数值清零END IF;END IF;END IF;IF CQI = 99 THEN COUT <= '1'; --计数大于99,输出进位信号ELSE COUT <= '0';END IF;CQ <= CQI; --将计数值向端口输出END PROCESS;END behav;方案二代码:----------------------------------------------------------------------------------library ieee;use ieee.std_logic_1164.all;-----------------------------------------------------------------------------------entity counter100 isport (clk,reset:in std_logic;cout1,cout2:out std_logic_vector(6 downto 0));end counter100;-----------------------------------------------------------------------------------architecture counter of counter100 isbeginprocess (clk,reset)variable temp1: integer range 0 to 10; ----temp1为个位variable temp2: integer range 0 to 10; ----temp2为十位begin------------------------- ------counter100:------------------------------------if (reset='1') thentemp1 := 0;temp2 := 0;elsif (clk'event and clk = '1') thentemp1 := temp1+1;if (temp1=10) thentemp1 := 0; --------个位等于10时进位temp2 := temp2+1;if (temp2=10) then --------十位等于10时计数100 temp2 := 0;end if;end if;end if;end process;end counter;----------------------------------------------------------------------------------2.仿真图:功能仿真:A[7..0]B[7..0]OUT[7..0]ADDER D QPREENACLRA[8..0]B[8..0]OUTEQUALA[7..0]B[7..0]OUTLESS_THANSELDATAADATABOUT0MUX21A dd0 8' h01 --Equal01' h0 --9' h063 --CQI~[7..0]8' h00 --CLK RST ENCOUTCQ[7..0] Les s Than08' h63 --CQI[7..0]3、分析实验结果:由波形图可知:当复位信号 RST=‘1’时计数值立即清零.当使能信号EN=‘0’无效时,输出cq保持当前状态.只有在复位信号RST=‘0’且使能信号EN=‘1’有效时,计数器正常工作.当计数值CQ为9时,COUT输出一个高电平。
目录一、设计要求--------------------------------------------------------------------------------二、设计目的--------------------------------------------------------------------------------三、设计方案--------------------------------------------------------------------------------四、设计原理---------------------------------------------------------------------------------五、硬件要求---------------------------------------------------------------------------------六、调试与问题疑点------------------------------------------------------------------------七、设计步骤----------------------------------------------------------------------------------八、体会、对设计工作的总结与展望---------------------------------------------------- 一、设计要求(1)设计带计数允许和复位输入的100进制计数器,要求完成顶层电路图和底层VHDL文件;(2)进行功能仿真;(3)下载并验证计数器功能;(4)按上述步骤设计100进制计数器;(5)为上述设计建立元件符号。
二、设计目的(1)设计一个带计数允许和复位端的100进制计数器。
(2)熟练掌握各种计数器类型模块的描述方法。
(3)能用计数器构成十进制、六十进制、十二进制等所需进制的计数器。
(4)体会EDA技术的优点。
三、设计方案设计两个按键,一个有停止、开始的功能,另一个有复位清零的功能,具体的看表1-1。
计数程序,并输出显示信号。
利用多个进程来完成以上的设计方案。
四、设计原理library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;use ieee.std_logic_arith.all;entity bcd_100d isport(en,rst,clk:in std_logic;duan:out std_logic_vector(5 downto 0);cout:out std_logic_vector(6 downto 0)); end;architecture one of bcd_100d issignal clk_1k:std_logic;signal clk_100h:std_logic;signal cnt6:integer range 0 to 3;signal data:std_logic_vector(3 downto 0);signal data1:std_logic_vector(3 downto 0);signal dout:std_logic_vector(5 downto 0);signal s:std_logic_vector(6 downto 0);signal led1,led2,led3,led4:std_logic_vector(3 downto 0);beginprocess (clk)variable cnt1:integer range 0 to 250;variable cnt2:integer range 0 to 100;beginif clk'event and clk='1' thenif cnt1=250 thencnt1:=0;if cnt2=100 thencnt2:=0;clk_1k<=not clk_1k;elsecnt2:=cnt2+1;end if;elsecnt1:=cnt1+1;end if;end if;end process;process (clk)variable cnt1:integer range 0 to 4000; variable cnt2:integer range 0 to 4000;beginif clk'event and clk='1' thenif cnt1=4000 thencnt1:=0;if cnt2=4000 thencnt2:=0;clk_100h<=not clk_100h;elsecnt2:=cnt2+1;end if;elsecnt1:=cnt1+1;end if;end if;end process;process(clk_1k)beginif clk_1k'event and clk_1k='1' thenif cnt6=3 thencnt6<=0;elsecnt6<=cnt6+1;end if;end if;end process;process(cnt6)begincase cnt6 iswhen 0=>dout<="111110";when 1=>dout<="111101";when others=>null;end case;end process;process(dout)begincase dout iswhen"111110"=>data<=led1;when"111101"=>data<=led2;when others=>null;end case;end process;process(clk_100h)beginif rst='0' thenled2<="0000";led1<="0000";elsif clk_100h'event and clk_100h='1' then if en='1' thencase led1 iswhen"1001"=>led1<="0000";case led2 iswhen"1001"=>led2<="0000";led1<="0000";when others=>led2<=led2+1;end case;when others=>led1<=led1+1;end case;end if;end if;end process;process(data)begincase data iswhen"0000"=>s<="0111111";--0when"0001"=>s<="0000110";--1when"0010"=>s<="1011011";--2when"0011"=>s<="1001111";--3when"0100"=>s<="1100110";--4when"0101"=>s<="1101101";--5when"0110"=>s<="1111101";--6when"0111"=>s<="0000111";--7when"1000"=>s<="1111111";--8when"1001"=>s<="1101111";--9when others=>null;end case;end process;duan<=dout;cout<=s;end;五、硬件要求表2-1六、调试与问题疑点问题疑点:1. 怎样实现两数码管同时显示.2. 怎样实现数字的循环.调试:1. 编译无误,然后就对照自己所设计的功能按键状态(表1-1),看是否符合设计结果要求.2. 检查无误,然后对自己规定的设计方案分配引脚(表2-1),进行编译无误,就下载到实验板上来验证设计效果.如果与自己的想法有出入,就要进行修改最后要达到自己的结果.3. 验证的结果与是否符合自己所规定的设计方案.七、设计步骤100HZ1K输出位选信号八、体会、对设计工作的总结与展望在这次设计实验中,我深刻地体会到思路清晰是十分行重要的,从分频开始,到数码管显示,再到实现计数。
每一步都是非常重要的,刚开始时我就遇到了:怎样实现两数码管同时显示,怎样实现数字的循环这两个问题思路也很模糊,但参考了大量的资料后,我的思路也就渐渐地清晰了,问题也解决了。
这使我明白了参考资料能使我们学到很多课堂上无法学到和知识。
我相信在以后的设计中,只要肯思考就一定会有突破。
.。