1、l硬件描述语言(Hardware Description Language,HDL):即能够描述硬件电路功效、信号连接关系及定时即能够描述硬件电路功效、信号连接关系及定时关系一个语言。当前,关系一个语言。当前,VHDL和和Verilog HDL已已先后成为先后成为IEEE标准硬件描述语言。标准硬件描述语言。1 1第1页l 硬件描述语言硬件描述语言 VHDL:VHDL 英文全名是英文全名是VHSIC(Very High Speed Integrated Circuits)Hardware Description Language,即超高速集成电即超高速集成电路硬件描述语言。路硬件描述语言。2 2
2、第2页VHDL设计文件两个基本组成部分实体实体(Entity)结构体结构体(Architecture)配置配置(Configuration)包集合包集合(Package)库库(Library)一个完整一个完整VHDL程序程序库库 用于存放已编译实体、结构体、包集合和配置lVHDL程序基本结构程序基本结构实体部分实体部分描述设计系统外部接口信号(即输入/输出信号)结构体结构体用于描述系统内部电路配置配置用于从库中选取所需元件安装到设计单元实体中包集合包集合存放各设计模块能共享数据类型、常数、子程序等3 3第3页l标标识识符符规规则则是是VHDL语语言言中中符符号号书书写写普普通通规规则则。不不但
3、但对对电电子子系系统统设设计计工工程程师师是是一一个个约约束束,同同时时也也为为各各种种各各样样EDA工工具具提提供供了了标标准准书书写写规规范范,使使之之在在综综合合仿真过程中不生产生歧义,易于仿真。仿真过程中不生产生歧义,易于仿真。lVHDL语语言言有有两两个个标标准准版版:VHDL87版版和和VHDL93版版。VHDL87版版标标识识符符语语法法规规则则经经过过扩扩展展后后,形形成成了了VHDL93版版标标识识符符语语法法规规则则。前前一一部部分分称称为为短短标标识识符符,扩扩展展部部分分称称为为扩扩展展标标识识符符。VHDL93版版含含有有短标识符和扩展标识符两部分。短标识符和扩展标识
4、符两部分。标识符4 4第4页短标识符规则短标识符规则:短短标标识识符符由由字字母母、数数字字以以及及下下划划线线字字符符组组成成,且且含含有有以以下下特特征要求:征要求:第一个字符必须是字母;第一个字符必须是字母;最终一个字符不能是下划线;最终一个字符不能是下划线;不允许连续两个下划线;不允许连续两个下划线;在标识符中大、小写字母是等效。在标识符中大、小写字母是等效。VHDL中中注注释释文文字字一一律律为为2个个连连续续连连接接线线“-”,能能够够出出现现在在任一语句后面,也能够出现在独立行;任一语句后面,也能够出现在独立行;VHDL保留字(关键字)不能用于标识符;保留字(关键字)不能用于标识
5、符;5 5第5页以下标识符是非法:以下标识符是非法:_ tx_clk 8B10B large#number link_ _bar select rx_clk_比如:以下标识符是正当:比如:以下标识符是正当:tx_clk Three_state_Enable sel7D HIT_1124-标识符必须起始于字母标识符必须起始于字母-只能是字母、数字、下划线只能是字母、数字、下划线-不能有连续两个下划线不能有连续两个下划线-关键字(保留字)不能用于标识符关键字(保留字)不能用于标识符-最终字符不能是下划线最终字符不能是下划线6 6第6页扩展标识符规则扩展标识符规则:扩展标识符是扩展标识符是扩展标识符
6、是扩展标识符是VHDL93VHDL93VHDL93VHDL93版增加标识符书写规则:版增加标识符书写规则:版增加标识符书写规则:版增加标识符书写规则:(1)(1)(1)(1)扩展标识符用反斜杠来定界。比如:扩展标识符用反斜杠来定界。比如:扩展标识符用反斜杠来定界。比如:扩展标识符用反斜杠来定界。比如:multi_screensmulti_screensmulti_screensmulti_screens,eda_centroleda_centroleda_centroleda_centrol等都是正当扩展标识符。等都是正当扩展标识符。等都是正当扩展标识符。等都是正当扩展标识符。(2)(2)(2
7、)(2)允许包含图形符号、空格符。比如:允许包含图形符号、空格符。比如:允许包含图形符号、空格符。比如:允许包含图形符号、空格符。比如:mode A,$100,mode A,$100,mode A,$100,mode A,$100,p%namep%namep%namep%name等。等。等。等。(3)(3)(3)(3)反斜杠之间字符能够用保留字。比如:反斜杠之间字符能够用保留字。比如:反斜杠之间字符能够用保留字。比如:反斜杠之间字符能够用保留字。比如:buffer,buffer,buffer,buffer,entity,endentity,endentity,endentity,end等。等。
8、等。等。(4)(4)(4)(4)扩展标识符界定符两个斜杠之间能够用数字打头。如:扩展标识符界定符两个斜杠之间能够用数字打头。如:扩展标识符界定符两个斜杠之间能够用数字打头。如:扩展标识符界定符两个斜杠之间能够用数字打头。如:100$100$100$100$,2chip 2chip 2chip 2chip,4screens 4screens 4screens 4screens等。等。等。等。(5)(5)(5)(5)扩展标识符中允许多个下划线相连。比如:扩展标识符中允许多个下划线相连。比如:扩展标识符中允许多个下划线相连。比如:扩展标识符中允许多个下划线相连。比如:Four_screensFour
9、_screensFour_screensFour_screens,TWO_Computer_sharptor TWO_Computer_sharptor TWO_Computer_sharptor TWO_Computer_sharptor等。等。等。等。(6)(6)(6)(6)扩展标识符区分大小写。比如扩展标识符区分大小写。比如扩展标识符区分大小写。比如扩展标识符区分大小写。比如:EDA:EDA:EDA:EDA 与与与与edaedaedaeda不一样。不一样。不一样。不一样。(7)(7)(7)(7)扩展标识符与短标识符不一样。比如扩展标识符与短标识符不一样。比如扩展标识符与短标识符不一样。比
10、如扩展标识符与短标识符不一样。比如:COMPUTER:COMPUTER:COMPUTER:COMPUTER 与与与与ComputerComputerComputerComputer不一样。不一样。不一样。不一样。7 7第7页信号和变量主要区分:信号和变量主要区分:1.变量变量 是一个局部量,只能用于进程或子程序中;是一个局部量,只能用于进程或子程序中;信号信号 是一个全局量,它能够用来进行进程之间通信。是一个全局量,它能够用来进行进程之间通信。2.变量赋值变量赋值 马上生效,不存在延时行为;马上生效,不存在延时行为;信号赋值信号赋值 含有非马上性,信号之间传递含有延时性。含有非马上性,信号之间
11、传递含有延时性。4.信号赋值信号赋值 能够出现在进程中,也能够直接出现在结构体中,能够出现在进程中,也能够直接出现在结构体中,但它们但它们运行含义运行含义不一样:不一样:前者前者属次序信号赋值,此时赋值操作要属次序信号赋值,此时赋值操作要视进程是否已被开启;视进程是否已被开启;后者后者属并行信号赋值,其赋值操作是各自属并行信号赋值,其赋值操作是各自独立并行发生。独立并行发生。3.变量变量 用作进程中暂存数据单元;用作进程中暂存数据单元;信号信号 用作电路中信号连线。用作电路中信号连线。8 8第8页5.在进程中在进程中变量和信号赋值形式与操作过程不一样变量和信号赋值形式与操作过程不一样:在在变变
12、量量赋赋值值语语句句中中,该该语语句句一一旦旦被被执执行行,其其值值马马上上被被赋赋予予变变量量。在执行下一条语句时,该变量值即为上一句新赋值。在执行下一条语句时,该变量值即为上一句新赋值。在在信信号号赋赋值值语语句句中中,该该语语句句即即使使被被执执行行,其其值值不不会会使使信信号号马马上上发发生生代代入入,在在下下一一条条语语句句执执行行时时,仍仍使使用用原原来来信信号号值值。直直到到进进程程结结束束之之后后,全全部部信信号号赋赋值值实实际际代代入入才才次次序序进进行行处处理理。所所以以,实实际际代入过程和赋值语句执行是分开进行。代入过程和赋值语句执行是分开进行。如例如例a所表示。所表示。
13、9 9第9页例例a a 信号和变量值代入区分举例信号和变量值代入区分举例 PROCESS(a,b,c,d)BEGIN d=a;x=b+d;d=c;y=b+d;END PROCESS;结果:结果:x=b+c;y=b+c;PROCESS(a,b,c)VARIABLE d:std_logic_vector(3 downto 0);BEGIN d:=a;x=b+d;d:=c;y=b+d;END PROCESS;结果:结果:x=b+a;y=b+c;当进程运行时,信号赋值将自上而下次当进程运行时,信号赋值将自上而下次序执行,但第一项赋值操作并不会发生,序执行,但第一项赋值操作并不会发生,这是因为信号赋值是
14、在进程结束时才起这是因为信号赋值是在进程结束时才起作用。因为在进程结束更新时,作用。因为在进程结束更新时,d最终最终一个赋值为一个赋值为c,所以执行结果为该式。,所以执行结果为该式。1010第10页数据类型数据类型含含 义义整数整数整数整数32位,位,取值范围:取值范围:(2311)(2311)实数实数浮点数,取值范围:浮点数,取值范围:-1.0e+38 1.0e+38位位逻辑逻辑0或或1位矢量位矢量l位矢量,用双引号括起来一组数据布尔量布尔量l逻辑“真”或“假”,用TRUE和FALSE标识字符字符ASCII字符字符字符串字符串字符矢量字符矢量时间时间时间单位时间单位fs,ps,ns,s,ms
15、,sec,min,hr自然数、正整数自然数、正整数l整数子集:自然数取值范围为0(2311);正整数是大于0整数错误等级错误等级Note,warning,error,failure标准数据类型1111第11页u IEEE库库STD_LOGIC_1164程序包中定义程序包中定义STD_LOGIC类型和类型和STD_LOGIC_VECTOR类型。(类型。(VHDL93标准)标准)STD_LOGIC类型数据能够含有九种取值,其含义以下类型数据能够含有九种取值,其含义以下:U:初始值初始值X:不定态不定态0:强制强制01:强制强制1Z:高阻态高阻态W:弱信号不定态弱信号不定态L:弱信号弱信号0H:弱信
16、号弱信号1_:不可能情况(可忽略值)不可能情况(可忽略值)其中,其中,“X”方便了系统仿真,方便了系统仿真,“Z”方便了双向总线描述。方便了双向总线描述。1212第12页STD_LOGIC_VECTOR类型定义以下类型定义以下:TYPE STD_LOGIC_VECTOR IS ARRAY(NATURAL RANGE)OF STD_LOGIC;1313第13页次序语句l信号代入语句信号代入语句 l变量赋值语句变量赋值语句lWAIT语句语句lIF语句语句lCASE语句语句lLOOP语句语句lNEXT语句语句lEXIT语句语句lRETURN语句语句lNULL语句语句 次序语句次序语句 用在进程或子用
17、在进程或子程序中,用来定义进程或程序中,用来定义进程或子程序子程序行为行为。次序语句次序语句每一条语句执行每一条语句执行(指仿真执行)都是按语(指仿真执行)都是按语句排列次序执行。句排列次序执行。1414第14页例a 设计4选1多路选择器ENTITY mux4_1 ISPORT(d :INSTD_LOGIC_VECTOR(3 DOWNTO 0);sel :INSTD_LOGIC_VECTOR(1 DOWNTO 0);y :OUT STD_LOGIC);END mux4_1;ARCHITECTURE rtl OF mux4_1 ISBEGINPROCESS(d,sel)BEGINIF(sel=0
18、0)THEN y=d(0);ELSIF(sel=01)THEN y=d(1);ELSIF(sel=10)THEN y=d(2);ELSE y=d(3);END IF;END PROCESS;END rtl;次序语句1515第15页并行语句并发语句主要包含:并发语句主要包含:n进程语句进程语句nBLOCK语句语句n并发代入语句并发代入语句n条件代入语句条件代入语句n选择信号语句选择信号语句nASSERT(并行断言)语句(并行断言)语句nCOMPONENT(元件调用)语句(元件调用)语句nGENERATE(生成生成)语句语句1616第16页l条件信号代入语句条件信号代入条件信号代入语句也是并发描述
19、语句语句也是并发描述语句。条件信号赋值语句格式为:目标信号目标信号=表示式表示式1 WHEN 条件条件1 ELSE 表示式表示式2 WHEN 条件条件2 ELSE 表示式表示式n;并发描述语句1717第17页例a:4选1多路选择器ENTITY wmux4_1 ISPORT(i0,i1,i2,i3,a,b:INSTD_LOGIC;q:OUT STD_LOGIC);END wmux4_1;ARCHITECTURE rtl OF wmux4_1 ISSIGNAL sel:STD_LOGIC_VECTOR(1 downto 0);BEGINsel=b&a;q=i0 WHEN sel=00 ELSE i
20、1 WHEN sel=01 ELSE i2 WHEN sel=10 ELSE i3 WHEN sel=11 ELSE X;END rtl;并发描述语句1818第18页PROCESSPROCESS语句关键点:语句关键点:(1)PROCESS语句结构由三个关键部分组成,即进程说明语语句结构由三个关键部分组成,即进程说明语句部分、次序描述语句部分和句部分、次序描述语句部分和敏感信号参数表(可能有多敏感信号参数表(可能有多个敏感信号)个敏感信号).(2)即使即使PROCESS语句结构括号内容,如语句结构括号内容,如“进程标号进程标号”、“敏感信号表敏感信号表”能够省略,但普通都需标明最少一个敏感能够省
21、略,但普通都需标明最少一个敏感信号。这是因为当进程中定义任一敏感信号发生改变时,信号。这是因为当进程中定义任一敏感信号发生改变时,进程马上进程马上“开启开启”,即进程中次序语句就立刻次序执行一,即进程中次序语句就立刻次序执行一次,当进程中最终一个语句执行完成后,执行过程将返回次,当进程中最终一个语句执行完成后,执行过程将返回到第一个语句,以到第一个语句,以等候等候下一次敏感信号改变,如此循环往下一次敏感信号改变,如此循环往复以至无限。复以至无限。不然若不标明敏感信号不然若不标明敏感信号,除了初始化阶段除了初始化阶段,进进程永远不会被再次激活。程永远不会被再次激活。1919第19页(3)(3)进
22、程说明语句部分主要定义一些局部进程说明语句部分主要定义一些局部变量变量,可包含数据,可包含数据类型、常数、属性、子程序等。类型、常数、属性、子程序等。但需注意,但需注意,在进程说明在进程说明语句中不允许定义信号。语句中不允许定义信号。(4)(4)在进程中在进程中,只能将信号列入敏感信号表只能将信号列入敏感信号表,而不能将变量列而不能将变量列入敏感信号表入敏感信号表,即进程只对信号敏感即进程只对信号敏感,而对变量不敏感。而对变量不敏感。(5)(5)进程开启是由敏感信号表中敏感信号改变激活,但也可进程开启是由敏感信号表中敏感信号改变激活,但也可用用WAITWAIT语句语句(有四种书写格式),替换敏
23、感信号表功效。有四种书写格式),替换敏感信号表功效。2020第20页lWAIT语句语句WAIT语句有以下四种形式:语句有以下四种形式:WAIT -无限等候无限等候 WAIT ON 敏感信号表;敏感信号表;-敏感信号量改变,进程开启敏感信号量改变,进程开启 WAIT UNTIL 条件表示式;条件表示式;-表示式成立时,进程开启表示式成立时,进程开启 WAIT FOR 时间表示式;时间表示式;-时间到,进程开启时间到,进程开启WAITWAIT语句语句语句语句是进程(含过程)同时语句,是进是进程(含过程)同时语句,是进是进程(含过程)同时语句,是进是进程(含过程)同时语句,是进程开启点。在进程(或过
24、程)中,当执行到程开启点。在进程(或过程)中,当执行到程开启点。在进程(或过程)中,当执行到程开启点。在进程(或过程)中,当执行到WAIT WAIT 等候语句时,运行程序将被挂起,直到等候语句时,运行程序将被挂起,直到等候语句时,运行程序将被挂起,直到等候语句时,运行程序将被挂起,直到满足此语句结束挂起条件后,将重新开始执行满足此语句结束挂起条件后,将重新开始执行满足此语句结束挂起条件后,将重新开始执行满足此语句结束挂起条件后,将重新开始执行进程(或过程)中程序。进程(或过程)中程序。进程(或过程)中程序。进程(或过程)中程序。WAITWAIT作为进程体一作为进程体一作为进程体一作为进程体一条
25、语句同进程体内其它语句次序执行。条语句同进程体内其它语句次序执行。条语句同进程体内其它语句次序执行。条语句同进程体内其它语句次序执行。1.未设置挂起条件,表示未设置挂起条件,表示2.永远挂起,即无限等候。永远挂起,即无限等候。2.敏感信号等候语句,即敏感信号一旦敏感信号等候语句,即敏感信号一旦发生改变将结束挂起,再次开启进程。发生改变将结束挂起,再次开启进程。VHDL要求,已列出敏感信号表进程要求,已列出敏感信号表进程中不能使用任何形式中不能使用任何形式WAIT语句。普语句。普通,通,WAIT语句可用于进程中任何地语句可用于进程中任何地方。方。3.条件等候语句。被此语句挂起进程需满条件等候语句
26、。被此语句挂起进程需满足以下两个条件才能结束挂起状态,重足以下两个条件才能结束挂起状态,重新开启:新开启:条件表示式中所含信号发生了改变;条件表示式中所含信号发生了改变;此信号改变后,且满足此信号改变后,且满足WAIT语句所设语句所设条件。条件。两条件缺一不可,且必须依照以上次序两条件缺一不可,且必须依照以上次序完成。完成。4.超时等候语句(此语句不超时等候语句(此语句不可综合,故不再讨论)。可综合,故不再讨论)。例例 1:利用利用WAIT语句设计与非门电路。语句设计与非门电路。nandx:PROCESS BEGIN y=a NAND b;WAIT ON a,b;END PROCESS nan
27、dx;次序语句2121第21页并发描述语句l3.2.9 COMPONENT语句语句 元件例化语句使我们能够把原来设计好元件例化语句使我们能够把原来设计好VHDL功效模功效模块看成元件一样用在其它块看成元件一样用在其它VHDL文件中。文件中。元件说明语句书写格式为:元件说明语句书写格式为:COMPONENT 元件名元件名 GENERIC 说明;说明;PORT 说明;说明;END COMPONENT;元件例化语句格式为:元件例化语句格式为:标号:元件名标号:元件名 GENERIC MAP(参数,(参数,)标号:元件名标号:元件名 PORT MAP(连接端口,(连接端口,)元件例化:即引入一个连接关
28、系,它将预先设计好设计实元件例化:即引入一个连接关系,它将预先设计好设计实体定义为一个元件,然后利用体定义为一个元件,然后利用特定语句特定语句将此元件与当前设将此元件与当前设计实体中指定端口相连接,从而为当前设计实体引入一个新计实体中指定端口相连接,从而为当前设计实体引入一个新低一级设计层次。低一级设计层次。元件例化是使元件例化是使VHDL设计实体组成自上而设计实体组成自上而下层次化设计一个主要路径。下层次化设计一个主要路径。元件例化能够是元件例化能够是多层次多层次。2222第22页例1:半加器ENTITY h_adder ISPORT(a,b:INSTD_LOGIC;s,c:OUT STD_
29、LOGIC);END h_adder;ARCHITECTURE rtl OF h_adder ISBEGINc=a AND b;s=a XOR b;END rtl;例2:全加器abcsh_adderabcsh_adderacibscoc1c2s1u1u2并发描述语句2323第23页例2:全加器ENTITY f_adder ISPORT(a,b,ci:INSTD_LOGIC;s,co:OUT STD_LOGIC);END f_adder;ARCHITECTURE arc OF f_adder ISCOMPONENT h_adderPORT(a,b:INSTD_LOGIC;s,c:OUT STD_
30、LOGIC);END COMPONENT;SIGNAL s1,c1,c2:STD_LOGIC;BEGINu1:h_adder PORT MAP(a,b,s1,c1);u2:h_adder PORT MAP(s1,c1,s,c2);co=c1 OR c2;END arc;并发描述语句2424第24页 从设计方法学角度来看,数字系统设计方法可分为从设计方法学角度来看,数字系统设计方法可分为自顶向下自顶向下 和和自底向上自底向上两种。两种。以自顶向下观点来分析,设计过程是分层次。在每一个层次上,以自顶向下观点来分析,设计过程是分层次。在每一个层次上,大致都有描述、划分、综合和验证等四种类型工作。我们
31、把靠近概大致都有描述、划分、综合和验证等四种类型工作。我们把靠近概念设计层次定义为抽象级别较高层次;而把靠近物理实现层次定义念设计层次定义为抽象级别较高层次;而把靠近物理实现层次定义为较低层次。显然,设计者希望从高层次描述开始,经过为较低层次。显然,设计者希望从高层次描述开始,经过EDA工具工具逐步实现芯片版图设计。这是自动设计理想境界,是逐步实现芯片版图设计。这是自动设计理想境界,是EDA工具高度工具高度发展结果。发展结果。因为门级芯片设计和生产使我们积累起门级单元库;今后在门因为门级芯片设计和生产使我们积累起门级单元库;今后在门级单元库基础上又建立起宏单元库(比如加法器、译码器、多路选级单
32、元库基础上又建立起宏单元库(比如加法器、译码器、多路选择器、计数器择器、计数器)。这种从小模块逐层结构大模块以至整个系统)。这种从小模块逐层结构大模块以至整个系统方法,称为自底向上法。方法,称为自底向上法。数字系统设计方法数字系统设计方法2525第25页lVHDL语言库分为:语言库分为:设计库、资源库设计库、资源库。l设设计计库库对对当当前前设设计计是是永永远远可可见见,在在使使用用它它们们时时候候无无需需在在源源代代码码开开头头部部分分使使用用Library子子句句、USE子子句句申申明明;包包含含有有STD库库和和WORK库库(是是VHDL语语言工作库,用于保留当前正在进行设计)言工作库,用于保留当前正在进行设计)。l资资源源库库是是常常规规元元件件和和标标准准模模块块存存放放库库,使使用用哪哪个个资资源源库库要要预预先先申申明明,使使用用哪哪个个程程序序包包要要说说明明是是“可可见见”;包包含含有有IEEE库库、VITAL库库和和用用户户自自定定义义库。库。2626第26页l练习题:练习题:请用请用VHDL描述带异步复位和同时复位描述带异步复位和同时复位D触发触发器。器。2727第27页