王斯 电信10-01 秒表设计目录1 引言 11.1 课程设计的目的 21.2 课程设计的内容 22 EDA、VHDL简介 22.1 EDA技术 22.2 硬件描述语言——VHDL 32.2.1 VHDL的简介 32.2.2 VHDL语言的特点 32.2.3 VHDL的设计流程 43设计过程 53.1 设计规划 53.2 顶层模块设计 63.3 底层模块设计 64 系统仿真 135 结束语 166参考文献 171 引言在科技高度发展的今天,集成电路和计算机应用得到了高速发展尤其是计算机应用的发展它在人们日常生活已逐渐崭露头角大多数电子产品多是由计算机电路组成,如:、mp3等而且将来的不久他们的身影将会更频繁的出现在我们身边各种家用电器多会实现微电脑技术电脑各部分在工作时多是一时间为基准的本文就是基于计算机电路的时钟脉冲信号、状态控制等原理设计出的数字秒表秒表在很多领域充当一个重要的角色在各种比赛中对秒表的精确度要求很高,尤其是一些科学实验他们对时间精确度达到了几纳秒级别1.1 课程设计的目的本次设计的目的就是在掌握EDA实验开发系统的初步使用基础上,了解EDA技术,对计算机系统中时钟控制系统进一步了解,掌握状态机工作原理,同时了解计算机时钟脉冲是怎么产生和工作的。
在掌握所学的计算机组成与结构课程理论知识时通过对数字秒表的设计,进行理论与实际的结合,提高与计算机有关设计能力,提高分析、解决计算机技术实际问题的能力通过课程设计深入理解计算机结构与控制实现的技术,达到课程设计的目标1.2 课程设计的内容利用VHDL语言设计基于计算机电路中时钟脉冲原理的数字秒表该数字秒表能对0秒~59分59.99秒范围进行计时,显示最长时间是59分59秒计时精度达到10ms设计了复位开关和启停开关复位开关可以在任何情况下使用,使用以后计时器清零,并做好下一次计时的准备2 EDA、VHDL简介2.1 EDA技术EDA是指以计算机为工作平台,融合了应用电子技术、计算机技术、智能化技术的最新成果而开发出的电子CAD通用软件包,它根据硬件描述语言HDL完成的设计文件,自动完成逻辑编译、化简、分割、综合、优化、布局布线及仿真,直至完成对于特定目标芯片的适配编译、逻辑映射和编程下载等工作目前EDA主要辅助进行三个方面的设计工作:IC设计、电子电路设计和PCB设计没有EDA技术的支持,想要完成超大规模集成电路的设计制造是不可想象的;反过来,生产制造技术的不断进步又必将对EDA技术提出新的要求。
2.2 硬件描述语言——VHDL2.2.1 VHDL的简介VHDL语言是一种用于电路设计的高级语言它在80年代的后期出现最初是由美国国防部开发出来供美军用来提高设计的可靠性和缩减开发周期的一种使用范围较小的设计语言 但是,由于它在一定程度上满足了当时的设计需求,于是他在1987年成为A I/IEEE的标准(IEEE STD 1076-1987)1993年更进一步修订,变得更加完备,成为A I/IEEE的A I/IEEE STD 1076-1993标准目前,大多数的CAD厂商出品的EDA软件都兼容了这种标准自IEEE公布了VHDL的标准版本,IEEE-1076(简称87版)之后,各EDA公司相继推出了自己的VHDL设计环境,或宣布自己的设计工具可以和VHDL接口此后VHDL在电子设计领域得到了广泛的接受,并逐步取代了原有的非标准的硬件描述语言1993年,IEEE对VHDL进行了修订,从更高的抽象层次和系统描述能力上扩展VHDL的内容,公布了新版本的VHDL,即IEEE标准的1076-1993版本,(简称93版)现在,VHDL和Verilog作为IEEE的工业标准硬件描述语言,又得到众多EDA公司的支持,在电子工程领域,已成为事实上的通用硬件描述语言。
有专家认为,在新的世纪中,VHDL于Verilog语言将承担起大部分的数字系统设计任务2.2.2 VHDL语言的特点VHDL的程序结构特点是将一项工程设计,关于用VHDL和原理图输入进行CPLD/FPGA设计的粗略比较:在设计中,如果采用原理图输入的设计方式是比较直观的你要设计的是什么,你就直接从库中调出来用就行了这样比较符合人们的习惯在对一个设计实体定义了外部界面后,一旦其内部开发完成后,其他的设计就可以直接调用这个实体这种将设计实体分成内外部分的概念是VHDL系统设计的基本点应用VHDL进行工程设计的优点是多方面的1)与其他的硬件描述语言相比,VHDL具有更强的行为描述能力,从而决定了他成为系统设计领域最佳的硬件描述语言强大的行为描述能力是避开具体的器件结构,从逻辑行为上描述和设计大规模电子系统的重要保证2)VHDL丰富的仿真语句和库函数,使得在任何大系统的设计早期就能查验设计系统的功能可行性,随时可对设计进行仿真模拟3)VHDL语句的行为描述能力和程序结构决定了他具有支持大规模设计的分解和已有设计的再利用功能符合市场需求的大规模系统高效,高速的完成必须有多人甚至多个代发组共同并行工作才能实现。
4)对于用VHDL完成的一个确定的设计,可以利用EDA工具进行逻辑综合和优化,并自动的把VHDL描述设计转变成门级网表5)VHDL对设计的描述具有相对独立性,设计者可以不懂硬件的结构,也不必管理最终设计实现的目标器件是什么,而进行独立的设计2.2.3 VHDL的设计流程它主要包括以下几个步骤:1.文本编辑:用任何文本编辑器都可以进行,也可以用专用的HDL编辑环境通常VHDL文件保存为.vhd文件,Verilog文件保存为.v文件2.功能仿真:将文件调入HDL仿真软件进行功能仿真,检查逻辑功能是否正确(也叫前仿真,对简单的设计可以跳过这一步,只在布线完成以后,进行时序仿真)3.逻辑综合:将源文件调入逻辑综合软件进行综合,即把语言综合成最简的布尔表达式逻辑综合软件会生成.edf或.edif 的EDA工业标准文件4.布局布线:将.edf文件调入PLD厂家提供的软件中进行布线,即把设计好的逻辑安放PLD/FPGA内5.时序仿真:需要利用在布局布线中获得的精确参数,用仿真软件验证电路的时序也叫后仿真) 通常以上过程可以都在PLD/FPGA厂家提供的开发工具6.器件编程3设计过程3.1 设计规划根据系统设计要求,系统的组成框图如图3—1所示。
数字秒表计时控制电路计时电路显示电路控制模块时基分频电路计数器扫描电路译码器六进制计数器十进制计数器图3—1 系统组成框图系统设计采用自顶向下的设计方法,它主要是由控制模块、时基分频模块、计时模块和显示模块四部分组成1)控制模块 计时控制模块的作用是对计时过程进行控制计时控制模块可用两个按钮开关来完成秒表的启动、停止和复位2)计时模块 计时模块执行计时功能,计时的方法是对标准时钟脉冲计数由于计时范围是0秒~59分59.59秒,所以计时器可以由两个60进制计数器和一个100进制计数器构成,其中分和秒采用60进制计数器,毫秒采用100进制计数器3)显示模块计时显示电路的作用是将计时值在LED七段译码数码管上显示出来计时电路产生的计时值经过BCD七段译码后,驱动LED数码管3.2 顶层模块设计以上所描述的模块的程序编写均在同一工程下,由程序生成的元件也在该工程下,所以可以在该工程下再建一原理图作为顶层,将所需要的元件按照要求进行连线,加入输入输出处端口并改名包层原理图,并将原理图置为顶层文件如下图:3.3 底层模块设计 底层单元模块共有七个,全部用VHDL语言描述它主要是由计时电路、计时控制电路及显示电路组成。
3.3.1 计时模块计时电路执行计时功能,主要是由时基分频器、计数器组成计时方法是对标准时钟脉冲计数,计数器是由一个100进制计数器和两个60进制计数器构成,其中毫秒位采用100进制计数器,秒位和分位采用60进制计数器100进制计数器的源程序:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity cnt100 is port(cs,clk:in std_logic; co:buffer std_logic; s_10ms,s_100ms:buffer std_logic_vector(3 downto 0); clear:in std_logic);end ;architecture behave of cnt100 issignal clock:std_logic;beginprocess(clk) variable count1:integer range 0 to 5;begin if clk'event and clk='1' then if count1<5 then count1:=count1+1; else clock<=not clock; count1:=0; end if; end if;end process;process(clock,cs,clear)begin if clear='0' then if cs='1' then if clock'event and clock='1' then co<='0'; if s_10ms=9 then s_10ms<=(others=>'0'); if s_100ms=9 then s_100ms<=(others=>'0');co<=not co; else s_100ms<=s_100ms+1; end if; else s_10ms<=s_10ms+1; end if; end if; else s_10ms<=s_10ms;s_100ms<=s_100ms; end if;else s_10ms<=(others=>'0');s_100ms<=(others=>'0');end if;end process;end behave;60秒进制计数器源程序:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity cnt60s is port(clk:in std_logic; co:buffer std_logic; s_1s,s_10s:buffer std_logic_vector(3 downto 0); clear:in std_logic);end ;architecture behave of cnt60s isbegin process(clk)begin if clear='0' then if clk'event and clk='1' then co<='0'; if s_1s=9 then s_1s<=(others=>'0'); if s_10s=5 then s_10s<=(others=>'0');co<=not co; else s_10s<= s_10s+1; end if; else s_1s<= s_1s+1; end if; end if;else s_1s<=(others=>'0');s_10s<=(others=>'0');end if;end process;end behave;60分进制源程序:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity cnt60m is port(clk:in std_logic; s_1min,s_10min:buffer std_logic_vector(3 downto 0); clear:in std_logic);end ;architecture behave of cnt60m isbegin process(clk)begin if clear='0' then if clk'event and clk='1' then if s_1min=9 then s_1min<=(others=>'0'); if s_10min=5 then s_10min<=(others=>'0'); else s_10min<= s_10min+1; end if; else s_1min<= s_1min+1; end if; end if; else s_1min<=(others=>'0');s_10min<=(others=>'0');end if;end process;end behave;3.3.2 分频模块分频模块的作用把输入时钟信号变为分频输出信号。
源程序:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity fenpin is port (clk:in std_logic; ft:out std_logic);end fenpin;architecture a of fenpin issignal fm:std_logic;beginprocess(clk)variable num:integer range 0 to 100;beginif clk'event and clk='1' then if num<50 then num:=num+1; else num:=1; fm<=not fm; end if ;end if;ft<=fm;end process;end a;3.3.3 显示模块计时显示电路的作用是将计时值在LED数码管上显示出来计时电路产生的值经过BCD七段译码后,驱动LED数码管BCD七段译码器源程序:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY BCD IS PORT( BCD:IN STD_LOGIC_VECTOR(3 DOWNTO 0); LED:OUT STD_LOGIC_VECTOR(6 DOWNTO 0)); END BCD;ARCHITECTURE ART OF BCD ISBEGINLED<="1111110"WHEN BCD ="0000" ELSE"0110000"WHEN BCD ="0001" ELSE"1101101"WHEN BCD ="0010" ELSE"1111001"WHEN BCD ="0011" ELSE"0110011"WHEN BCD ="0100" ELSE"1011011"WHEN BCD ="0101" ELSE"1011111"WHEN BCD ="0110" ELSE"1110000"WHEN BCD ="0111" ELSE"1111111"WHEN BCD ="1000" ELSE"1111011"WHEN BCD ="1001" ELSE"0000000";END ART;3.3.4 控制模块计时模块的作用是针对计时过程进行控制。
计时控制模块可用俩个按钮来完成秒表的启动、停止和复位控制模块源程序:library ieee;use ieee.std_logic_1164.all;entity control is port(s_10ms,s_100ms,s_1s,s_10s,s_1min,s_10min:in std_logic_vector(3 downto 0); choose:in std_logic_vector(2 downto 0); y:out std_logic_vector(3 downto 0)); end ;architecture behave of control is begin process(choose) begincase choose is when "000"=>y<=s_10ms; when "001"=>y<=s_100ms; when "010"=>y<=s_1s; when "011"=>y<=s_10s; when "100"=>y<=s_1min; when "101"=>y<=s_1min; when others=>null; end case;end process;end behave;4 系统仿真(1) 分频模块的仿真(如图 4-1所示)图 4-1 分频器仿真图clk为时钟输入信号,ft为分频输出信号。
2) 计时电路模块的仿真(如图 4-2~图4-4所示)① 六十秒进制计数器的仿真(如图4-2所示)② 六十分进制计数器的方针(如图4-3所示)③ 一百进制计数器的仿真(如图4-4所示)图4-2 六十秒进制计数器的仿真图图4-3六十分进制计数器的仿真图图 4-4一百进制计数器的仿真图(3) 显示电路模块的仿真(如图4—5所示)① BCD七段译码器驱动器的仿真(如图 4-5所示)图4-5 BCD七段译码器的仿真图5 结束语开始做设计时总是会犯一些错误,只有经过不停的改错不停的编译得到正确的程序说明了作为软件编程人员是不能粗心大意的,一个程序的质量的高低与你细心与否有着一定的联系在编程时,我充分使用了结构化的思想,这样程序检查起来也比较方便,调试时也给了我很大方便,只要一个模块一个模块的进行调就可以了,充分体现了结构化编程的优势在设计中要求我要有耐心和毅力,还要细心,稍有不慎,一个小小的错误就会导致结果的不正确,而对错误的检查要求我要有足够的耐心,通过这次设计和设计中遇到的问题,也积累了一定的经验,对以后从事集成电路设计工作会有一定的帮助在应用VHDL的过程中让我真正领会到了其并行运行与其他软件顺序执行的差别及其在电路设计上的优越性。
用VHDL硬件描述语言的形式来进行数字系统的设计方便灵活,利用EDA软件进行编译优化仿真极大地减少了电路设计时间和可能发生的错误,降低了开发成本,这种设计方法在数字系统设计中发挥越来越重要的作用 6参考文献[1] 潘 松 黄继业. EDA技术与VHDL. 清华大学出版社,2009.916。