版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
..现代电子技术实验报告数字跑表的设计目录……………2一、基于FPGA的VHDL设计流程………….31.1VHDL语言介绍…………..31.1.1VHDL的特点…………..31.2FPGA开发介绍…………..41.2.1FPGA简介……………...41.2.2FPGA设计流程………...41.2.3实验板使用芯片XC3S200A介绍………6二、总体电路的设计……………62.1设计要求……………...62.2系统工作原理…………62.3单元电路的划分……………………...6三、电子秒表的单元电路设计…………73.1电子秒表的设计过程及结果分析………….73.1.1分频器……………………..73.1.2按键消抖…………………...83.1.3控制电路…………………..83.1.4计数器……………………..93.1.5寄存器……………………..123.1.6显示模块…………...……...153.1.7使能模块…………17四、顶层设计…………184.1顶层设计…………184.2分配引脚和下载实现………194.3测试结果及结论20五、经验及收获22一、基于FPGA的VHDL设计流程1.1VHDL语言介绍VHDL<Very-high-speedIntegratedCircuitHardwareDescriptionLanguage>诞生于1982年.1987年底,VHDL被IEEE〔TheInstituteofElectricalandElectronicsEngineers和美国国防部确认为标准硬件描述语言.自IEEE公布了VHDL的标准版本〔IEEE-1076之后,各EDA公司相继推出了自己的VHDL设计环境,并宣布自己的设计工具可以和VHDL接口.此后VHDL在电子设计领域得到了广泛的接受,并逐步取代了原有的非标准硬件描述语言.1993年,IEEE对VHDL进行了修订,从更高的抽象层次和系统描述能力上扩展VHDL的内容,公布了新版本的VHDL,即IEEE标准的1076-1993版本.现在,VHDL和VERILOG作为IEEE的工业标准硬件描述语言,又得到众多EDA公司的支持,在电子工程领域,已成为事实上的通用硬件描述语言.有专家认为,在新的世纪中,VHDL和VERILOG语言将承担起几乎全部的数字系统设计任务.1.1.1VHDL语言的特点与其他硬件描述语言相比,VHDL具有以下特点:1、功能强大、设计灵活:VHDL具有功能强大的语言结构,可以用简洁明确的源代码来描述复杂的逻辑控制.它具有多层次的设计描述功能,层层细化,最后可直接生成电路级描述.VHDL支持同步电路、异步电路和随机电路的设计,这是其他硬件描述语言所不能比拟的.VHDL还支持各种设计方法,既支持自底向上的设计,又支持自顶向下的设计;既支持模块化设计,又支持层次化设计.2、支持广泛、易于修改:由于VHDL已经成为IEEE标准所规范的硬件描述语言,大多数EDA工几乎都支持VHDL,这为VHDL的进一步推广和广泛应用奠定了基础.在硬件电路设计过程中,主要的设计文件是用VHDL编写的源代码,因为VHDL易读和结构化,所以易于修改设计.3、强大的系统硬件描述能力:VHDL具有多层次的设计描述功能,既可以描述系统级电路,又可以描述门级电路.而描述既可以采用行为描述、寄存器传输描述或结构描述,也可以采用三者混合的混合级描述.另外,VHDL支持惯性延迟和传输延迟,还可以准确地建立硬件电路模型.VHDL支持预定义的和自定义的数据类型,给硬件描述带来较大的自由度,使设计人员能够方便地创建高层次的系统模型.4、独立于器件的设计、与工艺无关:设计人员用VHDL进行设计时,不需要首先考虑选择完成设计的器件,就可以集中精力进行设计的优化.当设计描述完成后,可以用多种不同的器件结构来实现其功能.5、很强的移植能力:VHDL是一种标准化的硬件描述语言,同一个设计描述可以被不同的工具所支持,使得设计描述的移植成为可能.6、易于共享和复用:VHDL采用基于库〔Library的设计方法,可以建立各种可再次利用的模块.这些模块可以预先设计或使用以前设计中的存档模块,将这些模块存放到库中,就可以在以后的设计中进行复用,可以使设计成果在设计人员之间进行交流和共享,减少硬件电路设计.1.2FPGA开发介绍现场可编程门阵列〔FPGA器件是八十年代中期出现的新产品,它的应用大大地方便了IC的设计,因而随着数字技术日益广泛的应用,以FPGA为代表的ASIC器件得到了迅速的普及和发展,器件集成度和速度都在高速增长.传统的电路设计过程是:先画原理图、把原理图绘制成印制电路板图、再制版、安装、调试.有了FPGA,我们只需要在计算机上绘出原理图,再运行相应的软件,就可把所设计的逻辑电路在FPGA中实现.所有步骤均可自动完成.电子设计工程师自己设计专用集成电路成为了一件很容易的事情.FPGA作为专用集成电路〔ASIC概念上的一个新型范畴和门类,以其高度灵活的用户现场编程方式,现场定义高容量数字单片系统的能力,能够重复定义、反复改写的新颖功能,为复杂数字系统设计、研制以及产品开发提供了有效的技术手段.电子应用设计工程师应用FPGA技术不仅可避免通常ASIC单片系统设计周期长,前期投资风险大的弱点,而且克服了过去板级通用数字电路应用设计的落后,繁琐和不可靠性.目前FPGA的两个重要发展与突破是,大多数厂商在其高端器件上都提供了片上的处理器〔如CPU、DSP等硬核〔HardCore或固化核〔FixedCore.比如Xilinx的VirtexIIPro芯片可以提供PowerPC,而Altera的Stratix、Excalibur等系列芯片可以提供Nios、DSP和Arm等模块.在FPGA上集成微处理器,使SOPC设计更加便利与强大.另一个发展是在不同器件商推出的高端芯片上大都集成了高速串行收发器,一般能够达到3Gb/s以上的数据处理能力,在Xilinx、Altera、Lattice都有相应的器件型号提供该功能.这些新功能使FPGA的数据吞吐能力大幅度增强.1.2.2FPGA设计流程对于目标器件为FPGA和CPLD的HDL设计,其工程设计的基本流程如图:图1FPGA设计流程图1、文本编辑用任何文本编辑器都可以进行,通常VHDL文件保存为vhd文件,Verilog文件保存为v文件.2、使用编译工具编译源文件HDL的编译器有很多,ACTIVE公司,MODELSIM公司,SYNPLICITY公司,SYNOPSYS公司,VERIBEST公司等都有自己的编译器.3、逻辑综合将源文件调入逻辑综合软件进行综合.综合的目的是在于将设计的源文件由语言转换为实际的电路.但是此时还没有在芯片中形成真正的电路.这一步的最终目的是生成门电路级的网表<Netlist>.4、布局、布线将第3步生成的网表文件调入PLD厂家提供的软件中进行布线,即把设计好的逻辑安放到CPLD/FPGA内.这一步的目的是生成用于下载<编程Programming>的编程文件.在这一步,将用到第3步生成的网表,并根据CPLD/FPGA厂商的器件容量,结构等进行布局、布线.这就好像在设计PCB时的布局布线一样.先将各个设计中的门根据网表的内容和器件的结构放在器件的特定部位.然后,在根据网表中提供的各门的连接,把各个门的输入输出连接起来.最后,生成一个供编程的文件.这一步同时还会加一些时序信息<Timing>到你的设计项目中去,以便于你做后仿真.5、后仿真利用在布局布线中获得的精确参数,用仿真软件验证电路的时序.<也叫布局布线仿真或时序仿真>.这一步主要是为了确定你的设计在经过布局布线之后,是不是还满足你的设计要求.6、编程,下载如果前几步都没有发生错误,并且符合设计要求,这一步就可以将由适配器等产生的配置或下载文件通过编程器或下载电缆下载到目标芯片中.7、硬件测试硬件测试的目的是为了在更真实的环境中检验HDL设计的运行情况,特别是对于HDL程序设计上不是十分规范,语义上含有一定歧义的程序.1.2.3实验板使用芯片XC3S200A介绍本实验设计中采用的是Xilinx公司的ETL-001FPGA开发板进行开发设计,该开发板所提供的主芯片XC3S200A是Xilinx公司最新推出的90nm半导体工艺的低端低成本的FPGA芯片,可以广泛地运用在通信,军事,电力,控制,消费电子,汽车电子绝大多数电子应用领域.芯片主要特性如下表1所示:表1实验板XC3S200A该芯片是基于SRAM工艺的超大规模可编程逻辑芯片,提供了高达20万的等效系统门,3854个查找表〔LUT,3854个寄存器〔FF,288Kbit的块状SRAM以及16个18*18的乘法器,以及60对差分I/O,LVD.芯片主要特性如上表示.二、系统总体设计2.1电子秒表的设计任务目标1、跑表精度为0.01秒2、跑表计时范围为:1小时3、设置开始计时/停止计时、复位两个按钮4、显示工作方式:用六位BCD七段数码管显示读数.显示格式:00:00:00扩展功能:按键消抖;选手时间分时显示;2.2系统工作原理系统基本流程图如图:图1系统基本流程图2.3单元电路的划分根据要求设计的电路包括以下几个模块:1.分频器:由于我们要以1ms为最小单位进行计时.分频器的功能是对晶体振荡器产生的48MHz时钟信号进行分频,产生1KHz的基准信号,对晶体振荡器产生的时钟信号进行分频,产生时间基准信号.2.计数锁存器:由于我们要实现按不同的键让秒表产生不同的反应.所以需要这个模块对时间基准脉冲进行计数,完成计时功能.并完成对数据的锁存使显示保持暂停.3.控制器:由于我们要实现按不同的键让秒表产生不同的反应.所以需要这个模块控制计数器的运行、停止以及复位,产生锁存器的使能信号.4.按键消抖电路:由于普通按键会产生抖动现象,只按一下,可能出现多次抖动的现象,使按键不灵敏.所以需要消除按键输入信号抖动的影响,输出单脉冲.5.扫描显示的控制电路:包括扫描计数器、数据选择器和7段译码器,控制8个数码管以扫描方式显示计时结果.单元电路划分总框图如下图2:图2单元电路划分总框图三、单元电路设计3.1单元电路设计思路3.1.1分频器分频器的功能是对晶体振荡器产生的48MHz时钟信号进行分频,产生1KHz和100Hz的基准信号.对于频率为1khz的信号,分频系数为48000,因此需要一个24000进制的计数器,每当计数24000个时钟,分频输出信号c1000取反一次,c1000取反两次得到一个周期的信号.这样可实现对输入时钟信号的4800次分频,从而得到1khz的信号.对于频率为100hz的信号,原理相同,分频系数为480000.生成的分频器模块如图3所示:图3分频器模块其中,clkin为48MHz晶振时钟信号;c1000为分频输出的1KHz时钟信号,c100为分频输出的100Hz时钟信号.设计程序如下:libraryIEEE;useIEEE.STD_LOGIC_1164.ALL;useIEEE.STD_LOGIC_arith.ALL;useIEEE.STD_LOGIC_unsigned.ALL;entityfdivisPort<clkin:inSTD_LOGIC;c1000:outSTD_LOGIC;c100:outSTD_LOGIC>;endfdiv;architectureBehavioraloffdivissignalc1000_temp:integerrange0to23999:=0;signalc100_temp:integerrange0to239999:=0;signalfd1000,fd100:STD_LOGIC:='0';beginprocess<clkin>isbegin ifrising_edge<clkin>then ifc1000_temp=23999thenc1000_temp<=0;fd1000<=notfd1000; elsec1000_temp<=c1000_temp+1; endif; endif; endprocess; c1000<=fd1000; process<clkin>is begin ifrising_edge<clkin>then ifc100_temp=239999thenc100_temp<=0;fd100<=notfd100; elsec100_temp<=c100_temp+1; endif; endif; endprocess; c100<=fd100;endBehavioral;仿真波形图4如下图4分频器仿真波形由仿真波形可知,分频器的设计是符合预期期望的,当产生输入晶振信号时,经过分频器内部处理的信号最终产生两个输出信号,分别是1KHz和100Hz,由波形图可以看出,当时钟信号计数24000个脉冲时,1KZ的波形翻转一次,从而产生1KZ的信号;同理,100Hz的信号也符合预期设计.3.1.2按键消抖由于实验板上的按键,在按下和松开的短暂时间里,会出现抖动现象,这样会严重影响按键的效果,故此需要设计一个消抖电路,来消除这种不利的影响,按键消抖电路不仅可以消除按键抖动的影响,而且每按一次键,只输出一个脉冲,其宽度为一个时钟周期,达到整形的作用,按键消抖电路是利用时间基准信号对按键按下时产生的抖动进行整形,使其输出为正常的脉冲信号的.消抖设计框图5如下:图5消抖模块设计原理图程序设计如下:libraryIEEE;useIEEE.STD_LOGIC_1164.ALL;useIEEE.STD_LOGIC_unsigned.ALL;useIEEE.STD_LOGIC_arith.ALL;entityXDisPort<clk1k:inSTD_LOGIC;keyin:inSTD_LOGIC;keyout:outSTD_LOGIC>;endXD;architectureBehavioralofXDissignalkey1,key2:std_logic;signalcount:integerrange1to3:=1beginprocess<clk1k,keyin>beginifclk1k'eventandclk1k='1'thenifcount=3then key1<='1'; else key1<='0'; count<=count+1; endif; key2<=key1; endif;ifkeyin='0'then count<=1;endif;endprocess;keyout<=<notkey1>andkey2;endBehavioral;仿真波形图6如下:在按键按下的一个周期内,消抖模块输出仅有一个时钟周期,抑制了按键按下状态不稳的情况。计数器十进制计数器是每当计数从1记到9时,下一位产生一个进位信号,进而输入到下一个计数器的时钟输入端,进而达到秒表所要求的计数进制.计数器是在时钟基准信号的情况下,分频为我们需要的计时时间信号,电子秒表的最低位为0.01秒,即需要100Hz的脉冲,当最低一位计数满9时,向前进1,同时自身为0,重复循环.本设计中采用的是异步计时器,当上一位计数到9时,产生时钟进位,下一时钟在进位成立时,开始计时加1,以此内推,最终输出6组,计时信号,分别是0.01秒位,0.1秒位,秒个位,秒十位,分个位,分十位.当计数到59’59’59时计数清零为00’00’00重复计时.数字跑表需要用六位七段数码管显示,数码管显示数字分别用2个6进制计数器和4个10进制计数器对其计数,从秒表显示的右侧到左侧计数器分别为十进制、十进制、十进制、六进制、十进制、六进制、十进制计数器,如图7所示:图7数码管显示示意图计数器的设计图如下:10进制计数器的框图如下:图810进制计数器的框图6进制计数器的框图如下:图96进制计数器的框图相应程序设计如下:10进制程序设计如下:libraryIEEE;useIEEE.STD_LOGIC_1164.ALL;useIEEE.STD_LOGIC_arith.ALL;useIEEE.STD_LOGIC_unsigned.ALL;entitycount101isPort<rst:inSTD_LOGIC;clk:inSTD_LOGIC;carryin:inSTD_LOGIC;carryout:outSTD_LOGIC;countout:outSTD_LOGIC_VECTOR<3downto0>>;endcount101;architectureBehavioralofcount101issignalcount:STD_LOGIC_VECTOR<3downto0>:="0000";beginprocess<clk,rst> beginifrst='1'thencount<="0000"; elseifrising_edge<clk>then ifcarryin='1'then ifcount<"1001"thencount<=count+1; elsecount<="0000"; endif; endif; elsenull; endif; endif; endprocess; countout<=count; carryout<='1'whencarryin='1'andcount="1001"else'0';endBehavioral;6进制程序设计如下:libraryIEEE;useIEEE.STD_LOGIC_1164.ALL;useIEEE.STD_LOGIC_arith.ALL;useIEEE.STD_LOGIC_unsigned.ALL;entitycount6isPort<rst:inSTD_LOGIC;clk:inSTD_LOGIC;carryin:inSTD_LOGIC;carryout:outSTD_LOGIC;countout:outSTD_LOGIC_VECTOR<3downto0>>;endcount6;architectureBehavioralofcount6issignalcount:STD_LOGIC_VECTOR<3downto0>:="0000";beginprocess<clk,rst> beginifrst='1'thencount<="0000"; elseifrising_edge<clk>then ifcarryin='1'then ifcount<"0101"thencount<=count+1; elsecount<="0000"; endif; endif; elsenull; endif; endif; endprocess; countout<=count; carryout<='1'whencarryin='1'andcount="0101"else'0';endBehavioral;仿真波形如下图:10进制的仿真波形如下:图1010进制计数器仿真图形由图可见,设计模块对波形个数计数,从产生结果为2进制的4位数.从0000到1001,结果正确.6进制的仿真波形如下:图116进制计数器的仿真波形有图可知,6进制计数器设计正确,脉冲时钟上升沿到来时计数器开始计数,从0000到1001,然后重复循环.3.1.4寄存器数据锁存器,在使能为1时,将当前数据送到寄存器中保存,可记录4组数据,当再次使能时,将寄存的数据赋给输出,显示寄存器中的4组数据.设计框图如下图:图12寄存器设计框图寄存器程序设计如下:libraryIEEE;useIEEE.STD_LOGIC_1164.ALL;useIEEE.STD_LOGIC_UNSIGNED.ALL;useIEEE.STD_LOGIC_ARITH.ALL;entitysave2isPort<lacthin:inSTD_LOGIC;reset:inSTD_LOGIC;mhin:inSTD_LOGIC_VECTOR<3downto0>;mlin:inSTD_LOGIC_VECTOR<3downto0>;shin:inSTD_LOGIC_VECTOR<3downto0>;slin:inSTD_LOGIC_VECTOR<3downto0>;dsin:inSTD_LOGIC_VECTOR<3downto0>;csin:inSTD_LOGIC_VECTOR<3downto0>;mhout:outSTD_LOGIC_VECTOR<3downto0>;mlout:outSTD_LOGIC_VECTOR<3downto0>;shout:outSTD_LOGIC_VECTOR<3downto0>;slout:outSTD_LOGIC_VECTOR<3downto0>;dsout:outSTD_LOGIC_VECTOR<3downto0>;csout:outSTD_LOGIC_VECTOR<3downto0>>;endsave2;architectureBehavioralofsave2issignalmh1out,ml1out,sh1out,sl1out,ds1out,cs1out:std_logic_vector<3downto0>;signalmh2out,ml2out,sh2out,sl2out,ds2out,cs2out:std_logic_vector<3downto0>;signalmh3out,ml3out,sh3out,sl3out,ds3out,cs3out:std_logic_vector<3downto0>;signalmh4out,ml4out,sh4out,sl4out,ds4out,cs4out:std_logic_vector<3downto0>;signalmh11out,ml11out,sh11out,sl11out,ds11out,cs11out:std_logic_vector<3downto0>;signalcount:std_logic_vector<3downto0>:="0000";beginprocess<lacthin,reset>beginifreset='1'thencount<="0000";elsiflacthin'eventandlacthin='1'thenifcount="1000"then count<="0000"; else count<=count+1; endif;endif;endprocess;process<count,mhin,mlin,shin,slin,dsin,csin>begincasecountiswhen"0000"=>mh1out<=mhin;ml1out<=mlin;sh1out<=shin;sl1out<=slin;ds1out<=dsin;cs1out<=csin;mh11out<=mhin;ml11out<=mlin;sh11out<=shin;sl11out<=slin;ds11out<=dsin;cs11out<=csin; when"0001"=>mh2out<=mhin;ml2out<=mlin;sh2out<=shin;sl2out<=slin;ds2out<=dsin;cs2out<=csin;mh11out<=mhin;ml11out<=mlin;sh11out<=shin;sl11out<=slin;ds11out<=dsin;cs11out<=csin; when"0010"=>mh3out<=mhin;ml3out<=mlin;sh3out<=shin;sl3out<=slin;ds3out<=dsin;cs3out<=csin;mh11out<=mhin;ml11out<=mlin;sh11out<=shin;sl11out<=slin;ds11out<=dsin;cs11out<=csin; when"0011"=>mh4out<=mhin;ml4out<=mlin;sh4out<=shin;sl4out<=slin;ds4out<=dsin;cs4out<=csin;mh11out<=mhin;ml11out<=mlin;sh11out<=shin;sl11out<=slin;ds11out<=dsin;cs11out<=csin; when"0100"=>mh11out<=mhin;ml11out<=mlin;sh11out<=shin;sl11out<=slin;ds11out<=dsin;cs11out<=csin; when"0101"=>mh11out<=mh1out;ml11out<=ml1out;sh11out<=sh1out;sl11out<=sl1out;ds11out<=ds1out;cs11out<=cs1out; when"0110"=>mh11out<=mh2out;ml11out<=ml2out;sh11out<=sh2out;sl11out<=sl2out;ds11out<=ds2out;cs11out<=cs2out; when"0111"=>mh11out<=mh3out;ml11out<=ml3out;sh11out<=sh3out;sl11out<=sl3out;ds11out<=ds3out;cs11out<=cs3out; when"1000"=>mh11out<=mh4out;ml11out<=ml4out;sh11out<=sh4out;sl11out<=sl4out;ds11out<=ds4out;cs11out<=cs4out; whenothers=>mh11out<=mhin;ml11out<=mlin;sh11out<=shin;sl11out<=slin;ds11out<=dsin;cs11out<=csin;endcase;endprocess;mhout<=mh11out;mlout<=ml11out;shout<=sh11out;slout<=sl11out;dsout<=ds11out;csout<=cs11out;endBehavioral;寄存器仿真波形图如下:由图,在按键脉冲上升沿来到之前,输入直接输出,程序只进行了对数据的存储功能<由于截图大小在报告中显示范围的有限,只记录第4次按键及之后的图形>,当第五次,按下latchin时,输出为第一次按键时的输入值,按第6次时,输出为第二次记录时的输入值.依次类推,当第8次按键以后,再按第9次,程序又重复循环.图13寄存器仿真波形图3.1.5显示控制模块实验板上设计了8位7段数码显示,以便编程者将基本的数字信息通过数码管显示出来,原理图如下:图15显示控制原理图在控制电路部分,使用了一组PNP三极管〔Q1~Q8将正极的控制电平由高电平转为低电平,这样数码管的位数和段位的控制都统一成了低电平有效.在位数控制部分加入了3-8译码器以简化位数编码,用DIG接口的二进制数据000~111直接表示数码管第一位到第八位的位选信号.利用动态扫描原理和设计要求,显示控制模块包含一个六选一数据器、三八译码器和七段译码器.六进制计数器通过cnt依次加1来控制使每次只将一路输入数据赋给输出,六选一数据选择器利用cnt的依次加1来轮番从低位至高位选择输入口,三八译码器根据cnt的值判断选择输入端,以完成显示的位选.用case语句来决定当输入口决定以后,输入口的数据要显示为具体多少数值.此步骤对照数码管的段选来完成.原理框图的设计如下所示:图16显示控制模块框图具体程序设计如下:libraryIEEE;useIEEE.STD_LOGIC_1164.ALL;useIEEE.STD_LOGIC_arith.ALL;useIEEE.STD_LOGIC_unsigned.ALL;entitycontroisPort<clk:inSTD_LOGIC;mh:inSTD_LOGIC_VECTOR<3downto0>;ml:inSTD_LOGIC_VECTOR<3downto0>;sh:inSTD_LOGIC_VECTOR<3downto0>;sl:inSTD_LOGIC_VECTOR<3downto0>;ds:inSTD_LOGIC_VECTOR<3downto0>;cs:inSTD_LOGIC_VECTOR<3downto0>;sel:outSTD_LOGIC_VECTOR<7downto0>;led7:outSTD_LOGIC_VECTOR<6downto0>>;endcontro;architectureBehavioralofcontroissignalcnt:STD_LOGIC_VECTOR<2downto0>:="000";signaldata:STD_LOGIC_VECTOR<3downto0>;begin--scanchoose1from6 process<clk> begin ifrising_edge<clk>then ifcnt="101"thencnt<="000"; elsecnt<=cnt+1; endif; endif; endprocess; process<cnt,cs,ds,sl,sh,ml,mh> begin casecntis when"000"=>data<=cs;sel<="11101111"; when"001"=>data<=ds;sel<="11011111"; when"010"=>data<=sl;sel<="01111111"; when"011"=>data<=sh;sel<="11111110"; when"100"=>data<=ml;sel<="11111011"; when"101"=>data<=mh;sel<="11110111"; whenothers=>null; endcase; endprocess; --led7:todecidethenumber process<data> begin led7<="0000000"; casedatais when"0000"=>led7<="0000001"; when"0001"=>led7<="1001111"; when"0010"=>led7<="0010010"; when"0011"=>led7<="0000110"; when"0100"=>led7<="1001100"; when"0101"=>led7<="0100100"; when"0110"=>led7<="0100000"; when"0111"=>led7<="0001111"; when"1000"=>led7<="0000000"; when"1001"=>led7<="0000100"; whenothers=>null; endcase; endprocess;endBehavioral;根据设计所做仿真如图:图17显示控制模块仿真波形图根据仿真波形,随着计数脉冲个数的逐次递加,38译码器将数据输入端选择出来,实现对数码管的位选,7段译码器对应相应的数字,即段选信号,从而使显示控制模块同时实现了位选与段选的功能.3.1.6使能模块使能模块的主要功能是产生计数器的使能控制信号.在输入信号的作用下,输出信号发生翻转.根据系统设计要求,设置开始计时/停止计时按键,该按键每按一次,跑表开始或停止计时,再按一次,停止或开始计时.该模块的设计原理框图如下所示:图18使能原理设计框图其设计程序如下所示:libraryIEEE;useIEEE.STD_LOGIC_1164.ALL;useIEEE.STD_LOGIC_arith.ALL;useIEEE.STD_LOGIC_unsigned.ALL;entityenisPort<k:inSTD_LOGIC;e
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025-2026学年江苏省南京市十三中初三九月月考物理试题含解析
- 安徽省淮北市烈山区重点中学2025-2026学年初三第二学期期末考试数学试题含解析
- 广东省佛山市禅城区2025-2026学年初三下学期3月联考物理试题含解析
- 理化检验就业方向
- 护理教学竞赛中的创新策略课件
- 中建电焊工安全专项培训
- 护理实践中的沟通障碍与解决
- 护理记录的信息化管理
- 急性胸痛的护理操作规范与流程
- 2026三年级数学上册 集合单元的难点攻克
- 6 会摇尾巴的狼 课件(共24张)
- 人工智能训练师-国家职业标准
- 全国大学生英语竞赛竞赛攻略
- 供应商资格审查表工程施工类
- 公司人力资源优化方案
- YS/T 231-2015钨精矿
- 第一章-导论(地理信息系统概论)课件
- 建筑施工企业安全生产知识手册
- ERP原理基本知识课件
- 反渗透膜安装幻灯片
- 地铁接触网连续检测施工工法
评论
0/150
提交评论