您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 电子设计/PCB > VHDL硬件描述语言及数字逻辑电路设计 第1章
11.1传统的系统硬件设计方法1.2利用硬件描述语言的硬件电路设计方法第1章数字系统硬件设计概述2数字系统设计历来存在两个分支,即系统硬件设计和系统软件设计。同样,设计人员也因工作性质不同,可分成硬件设计人员和软件设计人员。他们各自从事自己的工作,很少涉足对方的领域,特别是软件设计人员更是如此。但是,随着计算机技术的发展和硬件描述语言(HardwareDescriptionLanguage,HDL)的出现,这种界线已经被打破。数字系统的硬件构成及其行为完全可以用HDL语言来描述和仿真。这样,软件设计人员也同样可以借助HDL语言设计出符合要求的硬件系统。不仅如此,利用HDL语言来设计系统硬件与利用传统方法设计系统硬件相比,还具有许多突出的优点。它是硬件设计领域的一次变革,对系统的硬件设计将产生巨大的影响。本章将详细介绍这种硬件设计方法的变化。3图1-1六进制计数器的状态转移图4在计算机辅助电子系统设计出现以前,人们一直采用传统的硬件电路设计方法来设计系统的硬件。这种硬件设计方法具体有以下几个主要特征。1.1传统的系统硬件设计方法5(1)采用自下至上(BottomUp)的设计方法。自下至上的硬件电路设计方法的主要步骤是:根据系统对硬件的要求,详细编制技术规格书,并画出系统控制流图;然后根据技术规格书和系统控制流图,对系统的功能进行细化,合理地划分功能模块,并画出系统的功能框图;接着进行各功能模块的细化和电路设计;各功能模块的电路设计、调试完成后,将各功能模块的硬件电路连接起来再进行系统的调试;最后完成整个系统的硬件设计。自下至上的设计方法充分体现在各功能模块的电路设计中。下面以一个六进制计数器设计为例进行说明。6要设计一个六进制计数器,其方案是多种多样的,但是摆在设计者面前的一个首要问题是如何选择现有的逻辑元器件构成六进制计数器。设计六进制计数器首先从选择逻辑元器件开始。第一步,选择逻辑元器件。由数字电路的基本知识可知,可以用与非门、或非门、D触发器、JK触发器等基本逻辑元器件来构成一个计数器。设计者根据电路尽可能简单、价格合理、购买和使用方便等原则及各自的习惯来选择构成六进制计数器的元器件。本例中选择JK触发器和D触发器作为构成六进制计数器的主要元器件。7第二步,进行电路设计。假设六进制计数器采用约翰逊计数器。3个触发器连接应该产生8种状态,现在只使用6个状态,将其中的010和101两种状态禁止。这样六进制计数器的状态转移图如图1-1所示。从这个状态转移图可以看到,在计数过程中计数器的3个触发器的状态是这样转移的:首先3个触发器的状态均为0,即Q2Q1Q0=000,以后每来一个计数脉冲,其状态变化情况为000→001→011→111→110→100→000→001→ …。在知道六进制计数器的状态变化规律以后,就可以列出每个触发器的前一个状态和后一个状态变化的状态表,如表1-1所示。8表1-1触发器的状态变化表Q2Q1Q0触发器状态计数脉冲前一状态当前状态前一状态当前状态前一状态当前状态1000001200011130111114111110511100061000009从表1-1中可以发现,Q2当前状态的输出是Q1前一状态的输出,而Q1当前状态的输出就是Q0前一状态的输出。这样,如Q2和Q1采用D触发器,则只要将Q0输出端与D1触发器的D输入端相连接,将D1触发器的输出(Q1)端与D2触发器的D输入端相连接即可。Q0输出关系复杂一些,因此必须选用JK触发器,并且利用Q1、Q2输出作为约束条件,经组合逻辑电路作为D0的J和K输入。Q2、Q1输出和D0的J、K输入关系如表1-2所示。10表1-2Q2、Q1输出和D0的J、K输入关系表Q2Q1Q0触发器状态计数脉冲前一状态前一状态JK前一状态当前状态10010012001011301001141101105110100610000011从表1-2中很容易写出以Q2、Q1为输入,以J、K为输出的两个真值表。该真值表实际上就是或非门的真值表和与门的真值表。将Q2、Q1分别连到或非门的输入端,将或非门的输出连到Q0的J输入端,再将Q2、Q1分别连接到与门的输入端,将与门的输出端与D0的K输入端相连,这样,一个六进制计数器的硬件电路设计就完成了,如图1-2所示。当然,触发器的时钟端应和计数脉冲端相连接,系统复位信号应和触发器的置“0”端相连接,这样就可以保证实际电路的正常工作。12图1-2六进制约翰逊计数器原理图13与六进制计数器模块设计一样,系统的其它模块也按此方法进行设计。在所有硬件模块设计完成以后,再将各模块连接起来,进行调试。如有问题,则进行局部修改,直至整个系统调试完毕为止。由上述设计过程可以看到,系统硬件的设计是从选择具体元器件开始的,并用这些元器件进行逻辑电路设计,完成系统各独立功能模块的设计,然后将各功能模块连接起来,完成整个系统的硬件设计。上述过程从最底层开始设计,直至最高层设计完毕,故将这种设计方法称为自下至上的设计方法。14(2)采用通用的逻辑元器件。在传统的硬件电路设计中,设计者总是根据系统的具体需要,选择市场上能买到的逻辑元器件来构成所要求的逻辑电路,从而完成系统的硬件设计。尽管随着微处理器的出现,在由微处理器及其相应硬件构成的系统中,许多系统的硬件功能可以用软件功能来实现,从而在较大程度上简化了系统硬件电路的设计,但是这种选择通用的元器件来构成系统硬件电路的方法并未改变。15(3)在系统硬件设计的后期进行仿真和调试。在传统的系统硬件设计方法中,仿真和调试通常只有在后期完成系统硬件设计以后才能进行,因为进行仿真和调试的仪器一般为系统仿真器、逻辑分析仪和示波器等,它们只有在硬件系统已经构成后才能使用。这样,系统设计时存在的问题只能在后期才会较容易地被发现,即传统的硬件设计方法对系统设计人员提出了较高的要求,一旦考虑不周,系统设计存在较大缺陷,那么就有可能要重新设计系统,使得设计周期大大延长。16(4)主要设计文件是电原理图。在用传统的硬件设计方法对系统进行设计并调试完毕后,所形成的硬件设计文件主要是由若干张电原理图构成的文件。在电原理图中详细标注了各逻辑元器件的名称和相互间的信号连接关系。该文件是用户使用和维护系统的依据。对于小系统,这种电原理图只要几十张至几百张即可。但是,如果系统比较大,硬件比较复杂,那么这种电原理图可能有几千张、几万张甚至几十万张。如此多的电原理图给归档、阅读、修改和使用都带来了极大的不便。17传统的硬件电路设计方法已经沿用了几十年,是目前广大电子工程师所熟悉和掌握的一种方法。但是,随着计算机技术、大规模集成电路技术的发展,这种传统的设计方法已大大落后于当今技术的发展。一种崭新的、采用硬件描述语言的硬件电路设计方法已经兴起,它的出现给硬件电路设计带来了一次重大的变革。18一般来说,在硬件电路设计中采用计算机辅助设计技术(CAD)到20世纪80年代才得到了普及和应用。一开始,人们仅仅利用计算机软件来实现印刷板的布线,以后才慢慢实现了插件板级规模的电子电路设计和仿真。在我国所使用的工具中,最有代表性的设计工具是Tango和早期的ORCAD。它们的出现使得电子电路设计和印刷板布线工艺实现了自动化。但是,就设计方法而言,其仍采用自下至上的设计方法,利用已有的逻辑元器件来构成硬件电路。1.2利用硬件描述语言的硬件电路设计方法19随着大规模专用集成电路(ASIC)的开发和研制,为了提高开发的效率,增加已有开发成果的可继承性以及缩短开发时间,各ASIC研制和生产厂家相继开发了用于各自目的的硬件描述语言。其中最有代表性的是美国国防部开发的VHDL语言(VHSICHardwareDescriptionLanguage)、Verilog公司开发的Verilog-HDL以及日本电子工业振兴协会开发的UDL/I语言。所谓硬件描述语言,就是可以描述硬件电路的功能、信号连接关系及定时关系的语言。它比电原理图能更有效地表示硬件电路的特性。例如,一个二选一选择器的电原理图如图1-3(a)所示,用VHDL语言描述的二选一选择器如图1-3(b)所示。20图1-3二选一选择器的电原理图与VHDL语言描述(a)二选一选择器的电原理图;(b)二选一选择器的VHDL语言描述21利用硬件描述语言编程来表示逻辑器件及系统硬件的功能和行为,是该设计方法的一个重要特征。利用HDL语言设计系统硬件的方法,归纳起来具有以下几个特点。(1)采用自上至下(TopDown)的设计方法。所谓自上至下的设计方法,就是从系统的总体要求出发,自上至下地逐步将设计内容细化,最后完成系统硬件的整体设计。在利用HDL的硬件设计方法中,设计者将系统硬件设计自上至下分成三个层次进行。22第一层次是行为描述。所谓行为描述,实质上就是对整个系统数学模型的描述。一般来说,对系统进行行为描述的目的是试图在系统设计的初始阶段,通过对系统行为描述的仿真来发现设计中存在的问题。在行为描述阶段并不真正考虑其实际的操作和算法用什么方法来实现,考虑更多的是系统的结构及其工作过程是否能达到系统设计规格书的要求。下面仍以六进制计数器为例,说明如何用VHDL语言以行为方式来描述它的工作特性。23【例1-1】用VHDL语言以行为方式描述六进制计数器的工作特性。LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYcounterISPORT(clk:INSTD_LOGIC;rs:INSTD_LOGIC;count_out:OUTSTD_LOGIC_VECTOR(2DOWNTO0));ENDENTITYcounter;ARCHITECTUREbehavOFcounterIS24SIGNALnext_count:STD_LOGIC_VECTOR(2DOWNTO0);BEGINcount_proc:PROCESS(rs,clk)ISBEGINIFrs='0'THENnext_count=000;ELSIF(clk'EVENTANDclk='1')THENCASEnext_countISWHEN000=next_count=001;WHEN001=next_count=011;25WHEN011=next_count=111;WHEN111=next_count=110;WHEN110=next_count=100;WHEN100=next_count=000;WHENOTHERS=next_count=XXX;ENDCASE;ENDIF;count_out=next_countAFTER10ns;ENDPROCESScount_proc;ENDARCHITECTUREbehav;26从例1-1中可以看出,该段VHDL语言程序勾画出了六进制计数器的输入、输出引脚和内部计数过程的计数状态变化时序及关系。这实际上是计数器工作模型的描述。当该程序仿真通过以后,说明六进制计数器模型是正确的。在此基础上再改写该程序,使其语句表达式易于用逻辑元件来实现,这是第二层次所要做的工作。27第二层次是RTL方式描述。这一层次称为寄存器传输描述(又称数据流描述)。如前所述,用行为方式描述的系统结构的程序其抽象程度高,是很难直接映射到具体的逻辑元件结构用硬件来实现的。要想得到硬件的具体实现,必须将行为方式描述的VHDL语言程序改写为RTL方式描述的VHDL语言程序。也就是说,系统采用RTL方式描述,才能导出系统的逻辑表达式,才能进行逻辑综合。当然,这里所说的可以进行逻辑综合是有条件的,它是针对某一特定的逻辑综合工具而言的。28与例1-1行为方式描述等价的六进制计数器的RTL描述。LIBRARYIEEE;USEIEEE.STD_LDGIC_1164.ALL;USEWORK.NEW.ALL;ENTITYcounterISPORT(clk,rs: INSTD_LOGIC;q1,q2,q3: OUTSTD_LOGIC);ENDENTITYcounter;ARCHITECTURErtlOFcounterISC
本文标题:VHDL硬件描述语言及数字逻辑电路设计 第1章
链接地址:https://www.777doc.com/doc-3132409 .html