资源描述
1 11.1 传统的系统硬件设计方法传统的系统硬件设计方法1.2 利用硬件描述语言的硬件电路设计利用硬件描述语言的硬件电路设计方法方法第1章 数字系统硬件设计概述2 2数字系统设计历来存在两个分支,即系统硬件设计和系统软件设计。同样,设计人员也因工作性质不同,可分成硬件设计人员和软件设计人员。他们各自从事自己的工作,很少涉足对方的领域,特别是软件设计人员更是如此。但是,随着计算机技术的发展和硬件描述语言(Hardware Description Language,HDL)的出现,这种界线已经被打破。数字系统的硬件构成及其行为完全可以用HDL语言来描述和仿真。这样,软件设计人员也同样可以借助HDL语言设计出符合要求的硬件系统。不仅如此,利用HDL语言来设计系统硬件与利用传统方法设计系统硬件相比,还具有许多突出的优点。它是硬件设计领域的一次变革,对系统的硬件设计将产生巨大的影响。本章将详细介绍这种硬件设计方法的变化。3 3图1-1 六进制计数器的状态转移图4 4在计算机辅助电子系统设计出现以前,人们一直采用传统的硬件电路设计方法来设计系统的硬件。这种硬件设计方法具体有以下几个主要特征。1.1 传统的系统硬件设计方法传统的系统硬件设计方法5 5(1)采用自下至上(Bottom Up)的设计方法。自下至上的硬件电路设计方法的主要步骤是:根据系统对硬件的要求,详细编制技术规格书,并画出系统控制流图;然后根据技术规格书和系统控制流图,对系统的功能进行细化,合理地划分功能模块,并画出系统的功能框图;接着进行各功能模块的细化和电路设计;各功能模块的电路设计、调试完成后,将各功能模块的硬件电路连接起来再进行系统的调试;最后完成整个系统的硬件设计。自下至上的设计方法充分体现在各功能模块的电路设计中。下面以一个六进制计数器设计为例进行说明。6 6要设计一个六进制计数器,其方案是多种多样的,但是摆在设计者面前的一个首要问题是如何选择现有的逻辑元器件构成六进制计数器。设计六进制计数器首先从选择逻辑元器件开始。第一步,选择逻辑元器件。由数字电路的基本知识可知,可以用与非门、或非门、D触发器、JK触发器等基本逻辑元器件来构成一个计数器。设计者根据电路尽可能简单、价格合理、购买和使用方便等原则及各自的习惯来选择构成六进制计数器的元器件。本例中选择JK触发器和D触发器作为构成六进制计数器的主要元器件。7 7第二步,进行电路设计。假设六进制计数器采用约翰逊计数器。3个触发器连接应该产生8种状态,现在只使用6个状态,将其中的010和101两种状态禁止。这样六进制计数器的状态转移图如图1-1所示。从这个状态转移图可以看到,在计数过程中计数器的3个触发器的状态是这样转移的:首先3个触发器的状态均为0,即Q2Q1Q0=000,以后每来一个计数脉冲,其状态变化情况为000001011111110100000001。在知道六进制计数器的状态变化规律以后,就可以列出每个触发器的前一个状态和后一个状态变化的状态表,如表1-1所示。8 8表表1-1 触发器的状态变化表触发器的状态变化表9 9从表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所示。1010表表1-2 Q2、Q1输出和输出和D0的的J、K输入关系表输入关系表1111从表1-2中很容易写出以Q2、Q1为输入,以J、K为输出的两个真值表。该真值表实际上就是或非门的真值表和与门的真值表。将Q2、Q1分别连到或非门的输入端,将或非门的输出连到Q0的J输入端,再将Q2、Q1分别连接到与门的输入端,将与门的输出端与D0的K输入端相连,这样,一个六进制计数器的硬件电路设计就完成了,如图1-2所示。当然,触发器的时钟端应和计数脉冲端相连接,系统复位信号应和触发器的置“0”端相连接,这样就可以保证实际电路的正常工作。1212图1-2 六进制约翰逊计数器原理图1313与六进制计数器模块设计一样,系统的其它模块也按此方法进行设计。在所有硬件模块设计完成以后,再将各模块连接起来,进行调试。如有问题,则进行局部修改,直至整个系统调试完毕为止。由上述设计过程可以看到,系统硬件的设计是从选择具体元器件开始的,并用这些元器件进行逻辑电路设计,完成系统各独立功能模块的设计,然后将各功能模块连接起来,完成整个系统的硬件设计。上述过程从最底层开始设计,直至最高层设计完毕,故将这种设计方法称为自下至上的设计方法。1414(2)采用通用的逻辑元器件。在传统的硬件电路设计中,设计者总是根据系统的具体需要,选择市场上能买到的逻辑元器件来构成所要求的逻辑电路,从而完成系统的硬件设计。尽管随着微处理器的出现,在由微处理器及其相应硬件构成的系统中,许多系统的硬件功能可以用软件功能来实现,从而在较大程度上简化了系统硬件电路的设计,但是这种选择通用的元器件来构成系统硬件电路的方法并未改变。1515(3)在系统硬件设计的后期进行仿真和调试。在传统的系统硬件设计方法中,仿真和调试通常只有在后期完成系统硬件设计以后才能进行,因为进行仿真和调试的仪器一般为系统仿真器、逻辑分析仪和示波器等,它们只有在硬件系统已经构成后才能使用。这样,系统设计时存在的问题只能在后期才会较容易地被发现,即传统的硬件设计方法对系统设计人员提出了较高的要求,一旦考虑不周,系统设计存在较大缺陷,那么就有可能要重新设计系统,使得设计周期大大延长。1616 (4)主要设计文件是电原理图。在用传统的硬件设计方法对系统进行设计并调试完毕后,所形成的硬件设计文件主要是由若干张电原理图构成的文件。在电原理图中详细标注了各逻辑元器件的名称和相互间的信号连接关系。该文件是用户使用和维护系统的依据。对于小系统,这种电原理图只要几十张至几百张即可。但是,如果系统比较大,硬件比较复杂,那么这种电原理图可能有几千张、几万张甚至几十万张。如此多的电原理图给归档、阅读、修改和使用都带来了极大的不便。1717传统的硬件电路设计方法已经沿用了几十年,是目前广大电子工程师所熟悉和掌握的一种方法。但是,随着计算机技术、大规模集成电路技术的发展,这种传统的设计方法已大大落后于当今技术的发展。一种崭新的、采用硬件描述语言的硬件电路设计方法已经兴起,它的出现给硬件电路设计带来了一次重大的变革。1818一般来说,在硬件电路设计中采用计算机辅助设计技术(CAD)到20世纪80年代才得到了普及和应用。一开始,人们仅仅利用计算机软件来实现印刷板的布线,以后才慢慢实现了插件板级规模的电子电路设计和仿真。在我国所使用的工具中,最有代表性的设计工具是Tango和早期的ORCAD。它们的出现使得电子电路设计和印刷板布线工艺实现了自动化。但是,就设计方法而言,其仍采用自下至上的设计方法,利用已有的逻辑元器件来构成硬件电路。1.2 利用硬件描述语言的硬件电路利用硬件描述语言的硬件电路设计方法设计方法1919随着大规模专用集成电路(ASIC)的开发和研制,为了提高开发的效率,增加已有开发成果的可继承性以及缩短开发时间,各ASIC研制和生产厂家相继开发了用于各自目的的硬件描述语言。其中最有代表性的是美国国防部开发的VHDL语言(VHSIC Hardware Description Language)、Verilog公司开发的Verilog-HDL以及日本电子工业振兴协会开发的UDL/I语言。所谓硬件描述语言,就是可以描述硬件电路的功能、信号连接关系及定时关系的语言。它比电原理图能更有效地表示硬件电路的特性。例如,一个二选一选择器的电原理图如图1-3(a)所示,用VHDL语言描述的二选一选择器如图1-3(b)所示。2020图1-3 二选一选择器的电原理图与VHDL语言描述(a)二选一选择器的电原理图;(b)二选一选择器的VHDL语言描述2121利用硬件描述语言编程来表示逻辑器件及系统硬件的功能和行为,是该设计方法的一个重要特征。利用HDL语言设计系统硬件的方法,归纳起来具有以下几个特点。(1)采用自上至下(Top Down)的设计方法。所谓自上至下的设计方法,就是从系统的总体要求出发,自上至下地逐步将设计内容细化,最后完成系统硬件的整体设计。在利用HDL的硬件设计方法中,设计者将系统硬件设计自上至下分成三个层次进行。2222第一层次是行为描述。所谓行为描述,实质上就是对整个系统数学模型的描述。一般来说,对系统进行行为描述的目的是试图在系统设计的初始阶段,通过对系统行为描述的仿真来发现设计中存在的问题。在行为描述阶段并不真正考虑其实际的操作和算法用什么方法来实现,考虑更多的是系统的结构及其工作过程是否能达到系统设计规格书的要求。下面仍以六进制计数器为例,说明如何用VHDL语言以行为方式来描述它的工作特性。2323【例【例1-1】用VHDL语言以行为方式描述六进制计数器的工作特性。LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY counter ISPORT(clk:IN STD_LOGIC;rs:IN STD_LOGIC;count_out:OUT STD_LOGIC_VECTOR(2 DOWNTO 0);END ENTITY counter;ARCHITECTURE behav OF counter IS2424SIGNAL next_count:STD_LOGIC_VECTOR(2 DOWNTO 0);BEGINcount_proc:PROCESS(rs,clk)IS BEGIN IF rs=0 THEN next_count next_count next_count next_count next_count next_count next_count next_count=XXX;END CASE;END IF;count_out=next_count AFTER 10ns;END PROCESS count_proc;END ARCHITECTURE behav;2626从例1-1中可以看出,该段VHDL语言程序勾画出了六进制计数器的输入、输出引脚和内部计数过程的计数状态变化时序及关系。这实际上是计数器工作模型的描述。当该程序仿真通过以后,说明六进制计数器模型是正确的。在此基础上再改写该程序,使其语句表达式易于用逻辑元件来实现,这是第二层次所要做的工作。2727第二层次是RTL方式描述。这一层次称为寄存器传输描述(又称数据流描述)。如前所述,用行为方式描述的系统结构的程序其抽象程度高,是很难直接映射到具体的逻辑元件结构用硬件来实现的。要想得到硬件的具体实现,必须将行为方式描述的VHDL语言程序改写为RTL方式描述的VHDL语言程序。也就是说,系统采用RTL方式描述,才能导出系统的逻辑表达式,才能进行逻辑综合。当然,这里所说的可以进行逻辑综合是有条件的,它是针对某一特定的逻辑综合工具而言的。2828 与例1-1行为方式描述等价的六进制计数器的RTL描述。LIBRARY IEEE;USE IEEE.STD_LDGIC_1164.ALL;USE WORK.NEW.ALL;ENTITY counter ISPORT(clk,rs:IN STD_LOGIC;q1,q2,q3:OUT STD_LOGIC);END ENTITY counter;ARCHITECTURE rtl OF counter ISCOMPONENT dff IS2929PORT(d,rs,clk:IN STD_LOGIC;q:OUT STD_LOGIC);END COMPONENT dff;COMPONENT djk ISPORT(j,k,rs,clk:IN STD_LOGIC;q:OUT STD_LOGIC);END COMPONENT djk;COMPONENT and2 ISPORT(a,b:IN STD_LOGIC;c:OUT STD_LOGIC);END COMPONENT and2;3030COMPONENT nor2 ISPORT(a,b:IN STD_LOGIC;c:OUT STD_LOGIC);END COMPONENT nor2;SIGNAL jin,kin,q1_out,q2_out,q3_out:STD_LOGIC;BEGINu1:nor2 PORT MAP(q3_out,q2_out,jin);u2:and2 PORT MAP(q3_out,q2,out,kin);u3:djk3131 PORT MAP(jin,kin,rs,clk,q1_out);u4:dff PORT MAP(q1_out,rs,clk,q2_out);u5:dff PORT MAP(q2_out,rs,clk,q3_out);q1=q1_out;q2=q2_out;q3=q3_out;END ARCHITECTURE rtl;3232在该例中,JK触发器、D触发器、与门和或非门都已在库WORK.NEW.ALL中定义了,这里可以直接引用。该例中的构造体直接描述了它们之间的连接关系。与例1-1相比,例1-2更趋于实际电路的描述。3333图1-4 自上至下设计系统硬件的过程3434在把行为方式描述的程序改写为RTL方式描述的程序时,编程人员必须深入了解逻辑综合工具的详细说明和具体规定,这样才能编写出合格的RTL方式描述的程序。在完成编写RTL方式的描述程序以后,再用仿真工具对RTL方式描述的程序进行仿真。如果通过这一步仿真,那么就可以利用逻辑综合工具进行综合了。第三层次是逻辑综合。逻辑综合是利用逻辑综合工具将RTL方式描述的程序转换成用基本逻辑元件表示的文件(门级网络表)。此时,如果需要,可以将逻辑综合结果以逻辑原理图的方式输出。3535也就是说,逻辑综合的结果相当于在人工设计硬件电路时,根据系统要求画出了系统的逻辑电原理图。此后对逻辑综合结果在门电路级上再进行仿真,并检查定时关系。如果一切都正常,那么系统的硬件设计就基本结束。如果在三个层次的某个层次上发现有问题,则都应返回上一层,寻找和修改相应的错误,然后向下继续未完的工作。3636由逻辑综合工具产生门级网络表后,在最终完成硬件设计时,还可以有两种选择:第一种是采用由自动布线程序将网络表转换成相应的ASIC芯片的制造工艺,做出ASIC芯片;第二种是将网络表转换成FPGA(现场可编程门阵列)或CPLD的编程码点,然后写入对应芯片,完成硬件电路设计。在用HDL语言设计系统硬件时,无论是设计一个局部电路,还是设计由多块插件板组成的复杂系统,上述自上至下的3个层次的设计步骤是必不可少的。利用自上至下设计系统硬件的过程如图1-4所示。3737由自上至下的设计过程可知,从总体行为设计开始到最终逻辑综合、形成网络表为止,每一步都要进行仿真检查,这样有利于尽早发现系统设计中存在的问题,从而可以大大缩短系统硬件的设计周期。这是用HDL语言设计系统硬件的最突出的优点之一。3838(2)系统中可大量采用ASIC芯片。由于目前众多制造ASIC芯片的厂家的工具软件都可支持HDL语言的编程,因此,硬件设计人员在设计硬件电路时,不受只能使用通用元器件的限制,而可以根据硬件电路设计需要,设计自用的ASIC芯片或可编程逻辑器件。这样最终会使系统电路设计更趋合理,体积也可大为缩小。3939(3)采用系统早期仿真。从自上至下的设计过程可以看到,在系统设计过程中要进行三级仿真,即行为层仿真、RTL层仿真和门级层仿真,也就是要进行系统数学模型的仿真、系统数据流的仿真和系统门电路电原理的仿真。这三级仿真贯穿系统硬件设计的全过程,从而可以在系统设计早期发现设计中存在的问题。与自下至上设计的后期仿真相比,可大大缩短系统的设计周期,节约大量的人力和物力。4040(4)降低了硬件电路的设计难度。在采用传统的硬件电路设计方法时,往往要求设计者在设计电路前写出该电路的逻辑表达式或真值表(或时序电路的状态表)。这一工作是相当困难和繁杂的,特别是在系统比较复杂时更是如此。例如,在设计六进制计数器时,必须编写输入和输出的真值表与状态表。根据表中的关系,写出逻辑表达式,并用相应的逻辑元件来实现。4141用HDL语言设计硬件电路,使设计者不必编写逻辑表达式或真值表。如图1-1和例1-1所示,只要知道六进制计数器的6个计数状态就行了,而无需写出相关电路的逻辑表达式。这使硬件电路的设计难度大幅度下降,从而也缩短了硬件电路的设计周期。据有关资料估计,仅此一项就可使设计周期缩短大约1/31/2。4242(5)主要设计文件是用HDL语言编写的源程序。在传统的硬件电路设计中,最后形成的主要文件是电原理图,而采用HDL语言设计系统硬件电路时,主要的设计文件是用HDL语言编写的源程序。如果需要,也可以转换成电原理图形式输出。用HDL语言的源程序作为归档文件有很多好处。其一是资料量小,便于保存。其二是可继承性好。当设计其它硬件电路时,可以使用文件中的某些库、进程和过程等描述某些局部硬件电路的程序。其三是阅读方便。阅读程序比阅读电原理图要更容易一些,阅读者很容易在程序中看出某一硬件电路的工作原理和逻辑关系,而阅读电原理图推知其工作原理却需要较多的硬件知识和经验,而且看起来也不那么一目了然。p经常不断地学习,你就什么都知道。你知道得越多,你就越有力量pStudyConstantly,AndYouWillKnowEverything.TheMoreYouKnow,TheMorePowerfulYouWillBe写在最后Thank You在别人的演说中思考,在自己的故事里成长Thinking In Other PeopleS Speeches,Growing Up In Your Own Story讲师:XXXXXX XX年XX月XX日
展开阅读全文