2022年《VHDL实用教程》完整版- .pdf
KONXIN杭州康芯电子有限公司KONXIN第 3 章 VHDL程序结构19第 3 章 VHDL程序结构如何才算一个完整的VHDL 程序并没有完全一致的结论例如设计者注重于系统的行为仿真和仅注重综合后的时序仿真因为后者无需在程序中加入控制仿真的语句及设置相关的参数一个完整的设计实体的最低要求应该能为VHDL 综合器所接受即元件的形式而存在的VHDL 程序既可以被高层次的系统所调用也可以作为一个电路功能块而独立存在和独立运行并不是必须具备的模式实体ARCHITECTURE ? ? ? ? 32? ? ? o? ?o?11?VHDL程序中的最基本的部分最简单的VHDL程序结构中还应包括另一重要的部分LIBRARY? ? ? ? ?a ? ? ? 3? ?a?t y? ? ? ? ? ?tCONFIGURATION? ?11?o? ? ? ? ?3? a ?2? ?o? 3? ?1|? ? ? 3? ? ? ? ? ? ?a ?a o?31? 3.1 实 体实体是设计实体的表层设计单元它是设计实体对外的一个通信界面外界所看到的仅仅是它的界面上的各种接口用于描述此设计实体的逻辑结构和逻辑功能这一部分是不可见的名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 37 页 - - - - - - - - - VHDL 实用教程20不同逻辑功能的设计实体可以拥有相同的实体描述而其具体的逻辑功能是由设计实体中结构体的描述确定的它可以对一个门电路一块电路板乃至整个系统进行接口描述ENTITY 实体名 IS GENERIC ( 类属表 )END ENTITY 实体名ENTITY 实体名 IS?D? ? ? ?o ? ? ?2 ?D? VHDL 的编译器和综合器来说但为了便于阅读和分辨而由设计者添加的内容可以以小写方式来表示END ENTITY nand其中的 nand 即为设计者取的实体名在实体中定义的实体名即为这个设计实体的名称已有元件的调用和连接例 2-3 中的 1 位全加器的设计就是在其结构体中调用了描述或门和半加器的设计实体直接使用了它们的实体名b : IN STD_LOGIC ; cob =binso =e)=D ?EDA 软件对VHDL 文件的取名有特殊要求如 h_adder.vhd? VHDL 程序的文件名取为此程序的实体名是一种比较好的编程习惯名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 37 页 - - - - - - - - - KONXIN杭州康芯电子有限公司KONXIN第 3 章 VHDL程序结构213. GENERIC 类属说明语句类属常以一种说明的形式放在实体或块结构体前的说明部分类属与常数不同且不能再改变因此类属说明的一般书写格式如下数据类型 : 设定值 数据类型 : 设定值 ) ? ?D 1? ?2?y? ? ?2?D?Y?2?D? ? ?3?DD?a ?D? ? ?PORT? ?D? ? ?D? ? ? ?a? ?DD?a2?-? 11? ? ?D? ? ?D 2?D?a?t ?y? y? ?| ?3 y? ? ?y? ? ? ?t ? ? ?3?o?Y?aD?2?y?DD? ?D? 常 数名 是由设计者确定的类属常数名设定值 即为常数名所代表的数值VHDL 综合器仅支持数据类型为整数的类属值 ENTITY mcu1 IS GENERIC (addrwidth : INTEGER := 16); PORT( add_bus : OUT STD_LOGIC_VECTOR(addrwidth-1 DOWNTO 0) ); .在这里即定义add_bus 为一个16 位的标准位矢量其中所以这类似于将上例端口表写成对于类属值addrwidth的改变将对结构体中所有相关的总线的定义同时作了改变名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 37 页 - - - - - - - - - VHDL 实用教程22ENTITY PGAND2 IS GENERIC ( trise : TIME := 1 ns; tfall : TIME := 1 ns ) ; PORT ( a1 : IN STD_LOGIC ; a0 : IN STD_LOGIC ; z0 : OUT STD_LOGIC );END ENTITY PGAND2;这是一个准备作为2 输入与门的设计实体的实体描述tfall为下沿宽度这两个参数用于仿真模块的设计它在例化语句中调用了程序3-4?3D3-4中的类属变量n 并没有如程序3-2那样明确规定了它的取值并在两个不同的类属映射语句中作了不同的赋值显然为方便而迅速地改变电路的结构和规模提供了极便利的条件程序 3-4程序 3-5名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 37 页 - - - - - - - - - KONXIN杭州康芯电子有限公司KONXIN第 3 章 VHDL程序结构23 u2: andn GENERIC MAP (n =5) PORT MAP (a(0)=d3,a(1)=d4,a(2)=d5, a(3)=d6,a(4)=d7, c=q2); END;程序 给出了类属映射语句()配合端口映射语句()语句的使用范例描述元件间端口的衔接方式的它描述相应元件类属参数间的衔接和传送方式作一些相关的练习其端口表部分对设计实体与外部电路的接口通道进行了说明MODEo y?Y D? ? ? 1?和引导一些对库和程序包使用的说明语句实体端口说明的一般书写格式如下端口名 : 端口模式数据类型 ) ;其中的 端口名 是设计者为实体的每一个对外通道所取的名字如输入或输出等这是由于 VHDL 是一种强类型语言内部信号和操作数的数据类型有严格的规定一个实体通常有一个或多个端口实体与外界交流的信息必须通过端口通道流入或流出图 3-1是它对应的原理图程序 3-6? ?a2? ?3?D?o?a? 2?-1|? ? ? ? ?| ?t ?o?a2?y? ? ? ? ? ?a2?y?D?o? ?acbnand2图 3-1 nand对应的原理图符号名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 37 页 - - - - - - - - - VHDL 实用教程24h IN 模式并规定为单向只读模式Variable信息读入设计实体中OUT 定义的通道确定为输出端口可以通过此端口将信号输出设计实体h INOUT模式即从端口的内部看也可以通过此端口读入外部的数据信息信号既可以从此端口流出INOUT 模式包含了IN ? ? ?D?o?2? ?a?因此在程序中很方便地实现了P0 口作为可读可写的双向端口的功能BUFFER 定义的通道确定为具有数据读入功能的输出端口程序 3-7WR : IN STD_LOGIC; -读禁止读数BUFFER 模式从本质上将仍是OUT 模式即允许内部回读输出的信号, 即允许反馈可将计数器输出的计数信号回读与INOUT模式相比BUFFER 的区别在于回读而是由内部产生有时往往在时序上有所差异即利用 BUFFER 建立一个缓冲模式的端口或在结构体内定义一个缓冲节点信号SIGNAL?-1|名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 37 页 - - - - - - - - - KONXIN杭州康芯电子有限公司KONXIN第 3 章 VHDL程序结构25能和综合后的电路都是一样的由图 3-2可以看出而可能是一种电路的接口方式程序 3-8程序 3-9? ? ?y?3 ?DOUT 相当于只可输出的引脚与 TRI 引脚不同名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 37 页 - - - - - - - - - VHDL 实用教程26相当于双向引脚OUT表 3-1 端口模式说明端口模式端口模式说明 IN输入单向赋值模式 BUFFER具有读功能的输出模式从内部看可以读或写在实用中位BIT_VECTOR则其信号值是一个1 位的二进制数如程序3-3的端口a0这是取自 IEEE 库中 STD_LOGIC_1164程序包中BIT数据类型的定义则其信号值 是 一 组 二 进 制 数从 而 构 成 一 个 地 址 总 线 端 口 3.2 结构体结构体是实体所定义的设计实体中的一个组成部分结构体由两大部分组成常数子程序和元件等元素的说明部分h描述实体逻辑行为的它们包括各种形式的顺序描述语句和并行描述语句h以元件例化语句为特征的外部元件如程序 2-3?11?| ? ?2?11o? ? ? ? ?DD?a?11?2?¥ ? ? ?D? CONFIGURATION配置语句指明用于综合的结构体和用于仿真的结构体一个实体只能对应一个结构体如果实体代表一个器件符号当把这个符号例化成一个实际的器件安装到电路上时即指定一种实现方案图 3-2 程序 3-8或 3-9综合后的电路图名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 37 页 - - - - - - - - - KONXIN杭州康芯电子有限公司KONXIN第 3 章 VHDL程序结构27个结构体ARCHITECTURE 结构体名 OF 实体名 IS 说明语句 BEGIN 功能描述语句END ARCHITECTURE 结构体名 ;在书写格式上而结构体名 可以由设计者自己选择结构体的取名不可相重ARCHITECTUREBEGIN?11?D?3D2-2中的实体名是Latch在说明语句部分它的数据类型定义为 STD_LOGIC?11?2?11? ? ?11? ? ?2? 32. 结构体说明语句结构体中的说明语句是对结构体的功能描述语句中将要用到的信号(SIGNAL)常 数 (CONSTANT)函 数 (FUNCTION)和 过 程(PROCEDURE) 等加以说明在一个结构体中说明和定义的数据类型元件如果希望这些定义也能用于其它的实体或结构体中3. 功能描述语句结构如图3-3所示的功能描述语句结构可以含有五种不同类型的以并行方式工作的语句结构而在每一语句结构的内部可能含有并行运行的逻辑描述语句或顺序运行的逻辑描述语句这五种语句结构本身是并行语句如进程语句内所包含的是顺序语句h块语句是由一系列并行执行语句构成的组合体h进程语句定义顺序语句模块或内部的运算数据向其它的信号进行赋值名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 9 页,共 37 页 - - - - - - - - - VHDL 实用教程28h子程序调用语句用以调用过程或函数h元件例化语句对其它的设计实体作元件调用说明信号或高层次实体的界面端口进行连接它的结构体名是behav? ?11?D?3D ? ?D?o?a0 和 a1 与输出信号z0 间的逻辑关系结构体说明语句功能描述语句结构块语句进程语句名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 10 页,共 37 页 - - - - - - - - - KONXIN杭州康芯电子有限公司KONXIN第 3 章 VHDL程序结构29a0) VARIABLE zdf : STD_LOGIC ; BEGINzdf := a 1 AND a 0 ; -向变量赋值 IF zdf =1 THEN z0 = TRANSPORT zdf AFTER trise ; ELSIF zdf =0 THEN z0 = TRANSPORT zdf AFTER tfall ; ELSE z0 l_time,gb2 = s_time) ; - 局部端口参量设定名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 12 页,共 37 页 - - - - - - - - - KONXIN杭州康芯电子有限公司KONXIN第 3 章 VHDL程序结构31 PORT (pb : IN BIT; pb2 : INOUT BIT ); - 块结构中局部端口定义 PORT MAP (pb1 = b1, pb2 = a1 ) ; - 块结构端口连接说明 CONSTANT delay : Time := 1 ms ; - 局部常数定义 SIGNAL s1 : BIT ; - 局部信号定义 BEGIN s1 = pb1 AFTER delay ; pb2 output output output output = s1 ; END CASE END PROCESS p1 ?11?D?3o?D IF语句当其中任何一个信号改变时信号 cnt4被综合器用寄存器来实现还设置了计数清零信号clear和计数使能信号 stop?DD cnt4 b THEN RETURN a; ELSE RETURN b; END IF; END FUNCTION max; - 结束 FUNCTION 语句 END; - 结束PACKAGE BODY语句 - 函数应用实例名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 19 页,共 37 页 - - - - - - - - - VHDL 实用教程38 . USE WORK. packexp.ALL?3Dpackexp的说明部分的数据类型是标准位矢量类型中的最大值第 2 个函数中的参量ac 的数据类型都是实数类型第 3 个函数定义了一种新的乘法算符且返回值也是整数这个函数的函数名用的是以双引号相间的乘法算符如+ D?以表示 in1和 in2是两个信号返回值也是实数类型函数体函数体包含一个对数据类型变量等的局部说明一旦函数被调用在函数体结尾需以关键词END FUNCTION 以及函数名结尾及实际应用的实例有一个对函数max 的函数体的定义实例下段给出了一个调用此函数的应用实例并在进程PROCESS 中调用了此函数在进程中当 a 的 3 个位输入元素a(0)?oysam 的调用:();:()名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 20 页,共 37 页 - - - - - - - - - KONXIN杭州康芯电子有限公司KONXIN第 3 章 VHDL程序结构39 END ENTITY func BEGIN PROCESS ( a ) BEGIN m(0) = sam( a(0), a(1), a(2) ) ; m(1) = sam( a(2), a(0), a(1) ) ; m(2) b THEN RETURN a; ELSE RETURN b; END IF; END FUNCTION max; - 结束 FUNCTION 语句 FUNCTION max( a,b LIBRARY IEEE ; USE IEEE.STD_LOGIC_1164.ALL ; USE WORK.packexp.ALLIN STD_LOGIC_VECTOR )的调用 c2 = max(a2,b2); -对函数max( a,b IN INTEGER) 的调用 END;名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 22 页,共 37 页 - - - - - - - - - KONXIN杭州康芯电子有限公司KONXIN第 3 章 VHDL程序结构41作为强类型语言为此可定义以运算符重载式的重载函数程序3-21中以加号为函数名的函数即为运算符重载函数和MOD等和 STD_LOGIC_VECTOR的操作作了重载即通过重新定义运算符的方式或者允许不同的数据类型之间用此运算符进行运算示例没有把全部内容列出在程序包体部分只列出了对应的部分内容在程序包体中的最大整型数检出函数MAXIUM 只有函数体这是因为它只在程序包体内调用程序 3-21名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 23 页,共 37 页 - - - - - - - - - VHDL 实用教程42 return std_logic_vector(result) ; end ; . end STD_LOGIC_UNSIGNED ?2? ? ?3D ?D ?o y?D? ?o y ?y?o y?o y?+?a? ?o y?D? ?o y3?oy?1?语句打开了程序包STD_LOGIC_UNSIGNED?1? ? ?DD?STD_LOGIC_VECTOR位矢和一个整数相加并返回位矢类型的值则调用第三个函数有了重载函数试比较程序 3-22与程序 3-16中操作数数据类型方面的不同之处程序 3-22 ENTITY cnt4 IS PORT Clk : IN STD_LOGIC ; q : BUFFER STD_LOGIC_VECTOR(3 DOWNTO 0) ); END cnt4; ARCHITECTURE one OF cnt4 IS BEGIN PROCESS ( clk ) BEGIN IF clkEVENT AND clk = 1 THEN IF q=15 THEN - 这里=3D ? ?o?的重载函数 END IF ; END IF ; END PROCESS ; END one ;此例中q = 15q 的数据类型是位矢量类型而属于整数类型中两边的数据类型也不一样1?2?D?2 y?e?USE IEEE.STD_LOGIC_UNSIGNED.ALL打开了运算符重载函数的程序包名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 24 页,共 37 页 - - - - - - - - - KONXIN杭州康芯电子有限公司KONXIN第 3 章 VHDL程序结构433.5.3 过程子程序的另外一种形式是过程PROCEDUREPROCEDURE 过程名参数表 END PROCEDURE 过程名即由过程首和过程体构成过程体可以独立存在和使用而在程序包中必须定义过程首参数表 可以对常数并用关键词IN?D? ?aI NCONSTANT a1 : IN INTEGER 过程 pro2定义了两个参量它的数据类型为整数第二个参量是变量过程 pro3中只定义了一个信号参量它的流向模式是双向 INOUT一般地即 IN如果只定义了IN模式而未定义目标参量类型若只定义了INOUT 或 OUT2. 过程体过程体是由顺序语句组成的与函数一样其中的各种定义只能适用于过程体内部包括 WAIT 语句如果一个过程是在进程中调用的则不能在此过程中使用WAIT语句可以有两种不同的语句方式对过程进行调用对于前者一个过程被执行因为这时它只相当于一条顺序语句的执行名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 25 页,共 37 页 - - - - - - - - - VHDL 实用教程44者当这个过程处于并行语句环境中时即数据对象信号发生改变时这时的调用是属于并行语句方式的综合器一般不支持含有Wait语句的过程跳出循环 LOOP END LOOP Q1 ASSERT (v2 s, b = qf, c = q ) ; U2: nand PORT MAP ( a = q, b = r, c = qf ) ; END rsf ; CONFIGURATION sel OF rs1 IS FOR rsf FOR u1, u2 : nand USE ENTITY WORK.nand( two ) ; END FOR END sel ;这里假设与非门的设计实体已进入工作库WORK习题描述与原理图的关系3-2 子程序调用与元件例化有何区别3-3 VHDL自上而下系统设计功能的语言结构的基石是什么名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 35 页,共 37 页 - - - - - - - - - VHDL 实用教程543-4 是否有这样的可能即已从运行状态进入等待状态为什么与原理图输入法相比3-6 什么是重载函数如何调用重载算符函数如 74LS373CLOCK 和 OE3-8 画出与下例实体描述对应的原理图符号12?2?D?o? ?o?ENTITY dlatch ISPORT( d, cp : IN STD_LOGIC ; q, qn : BUFFER STD_LOGIC ) ;END dlatch ;ARCHITECTURE one OF dlatch IS SINGAL n1, n2 : STD_LOGIC ;BEGINn1= (NOT d) NAND cp ;n2= d NAND cp ;q = qn NAND n1 ; qn = q NAND n2 ;END one ;3-11 下面是一个简单的VHDL 描述ENTITYENTITY SN74LS20 IS名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 36 页,共 37 页 - - - - - - - - - KONXIN杭州康芯电子有限公司KONXIN第 3 章 VHDL程序结构55PORT ( I1A, I1B, I1C, I1D : IN STD_LOIGC ; I2A, I2B, I2C, I2D : IN STD_LOIGC ; O1, O2 : OUT STD_LOGIC ) ;END SN74LS20 ;ARCHITECTURE struc OF SN74LS20 ISBEGINO1 = NOT (I1A AND I1B AND I1C AND I1D) ;O2 = NOT (I1A AND I1B AND I1C AND I1D) ;END struc ;3-12 在 VHDL 程序中配置有何用处以嵌套 BLOCK 的语句方式设计三个并列的 3 输入或门过程与进程的异同点名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 37 页,共 37 页 - - - - - - - - -