




已阅读5页,还剩200页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
VHDL语言的顺序语句 顺序语句 SequentialStatements 用来实现模型的算法描述 这些语句从多侧面完整地描述数字系统的硬件结构和基本逻辑功能 其中包括通信的方式 信号的赋值 多层次的元件例化以及系统行为等 顺序语句和并行语句是VHDL程序设计中两大基本描述语句系列 并行语句 ConcurrentStatements 用来表示各模型算法描述之间的连接关系 顺序语句只能出现在进程 PROCESS 过程 PROCEDURE 函数 FUNCTION 中 其它都是并行语句 顺序语句是相对于并行语句而言的 其特点是每一条顺序语句的执行 指仿真执行 顺序是与它们的书写顺序基本一致的 理解 一个进程是由一系列顺序语句构成的 而进程本身属并行语句 也就是说 在同一设计实体中 所有的进程是并行执行的 每个进程内部是顺序执行的 VHDL有如下六类基本顺序语句 信号赋值语句变量赋值语句 1 赋值语句 2 流程控制语句 3 等待语句 4 子程序调用语句 5 返回语句 6 空操作语句 IF语句CASE语句LOOP语句NEXT语句EXIT语句 RETURN语句 NULL语句 WAIT语句 过程调用函数调用 对象赋值语句 赋值语句的功能就是将一个值或一个表达式的运算结果传递给某一数据对象 如信号或变量 或由此组成的数组 VHDL设计实体内的数据传递以及对端口界面外部数据的读写都必须通过赋值语句的运行来实现 变量赋值与信号赋值在对象赋值语句中 主要分为对变量或信号的赋值操作 其不同点主要表现在以下两个方面 赋值方式的不同 硬件实现的功能不同 信号代表电路单元 功能模块间的互联 代表实际的硬件连线 变量代表电路单元内部的操作 代表暂存的临时数据 所有对象均分为 变量和信号对象 有效范围的不同 信号的作用范围 程序包 实体 结构体 全局量 而变量的作用范围是 进程 子程序 局部量 赋值行为的不同 信号赋值延迟更新数值 时序电路 变量赋值立即更新数值 组合电路 信号的多次赋值对一个进程多次赋值时 只有最后一次赋值有效 多个进程的赋值表示 多源驱动 线与 线或 三态 目的变量 表达式 变量的说明和赋值限定在顺序区域内 即只能在进程或子程序中使用 它无法传递到进程之外 目的信号 表达式 例 y 1 例 x 15 信号赋值可以在顺序区域内作顺序语句 也可以在结构体中当作并行语句使用 赋值语句 A 变量赋值语句 B 信号赋值语句 赋值目标赋值语句中的赋值目标有四种类型 1 标识符赋值目标及数组单元素赋值目标标识符赋值目标是以简单的标识符作为被赋值的信号或变量名 数组单元素赋值目标的表达形式为 数组类信号或变量名 下标名 下标名可以是一个具体的数字 也可以是一个文字表示的数字名 它的取值范围在该数组元素个数范围内 下标名若是未明确表示取值的文字 不可计算值 则在综合时 将耗用较多的硬件资源 且一般情况下不能被综合 段下标元素赋值目标及集合块赋值目标段下标元素赋值目标可用以下方式表示 数组类信号或变量名 下标1TO DOWNTO下标2 括号中的两个下标必须用具体数值表示 并且其数值范围必须在所定义的数组下标范围内 两个下标的排序方向要符合方向关键词TO或DOWNTO 例 VARIABLEA B STD LOGIC VECTOR 1TO4 A 1TO2 10 等效于A 1 1 A 2 0 A 4DOWNTO1 1011 集合块赋值目标 是以一个集合的方式来赋值的 对目标中的每个元素进行赋值的方式有两种 即位置关联赋值方式和名字关联赋值方式 例 SIGNALA B C D STD LOGIC SIGNALS STD LOGIC VECTOR 1TO4 VARIABLEE F STD LOGIC VARIABLEG STD LOGIC VECTOR 1TO2 VARIABLEH STD LOGIC VECTOR 1TO4 S 0 1 0 0 A B C D S 位置关联方式赋值 其他语句 3 E 4 F 2 G 1 1 G 2 H 名字关联方式赋值 示例中的信号赋值语句属位置关联赋值方式 其赋值结果等效于 A 0 B 1 C 0 D 0 示例中的变量赋值语句属名字关联赋值方式 赋值结果等效于 G 2 H 1 G 1 H 2 E H 3 F H 4 例 变量和信号赋值的比较信号赋值 architecturertlofsigissignala b std logic 定义信号beginprocess a b begina b b a endprocess endrtl 结果是a和b的值互换 变量赋值 architecturertlofvarisbeginprocessvariablea b std logic 定义变量begina b b a endprocess endrtl 结果是a和b的值都等于b的初值 例 变量赋值实现循环语句功能process indicator sig variabletemp std logic begintemp 0 foriin0to3looptemp tempxor sig i andindicator i endloop output temp endprocess 以上语句等效为 process indicator sig variabletemp std logic begintemp 0 temp tempxor sig 0 andindicator 0 temp tempxor sig 1 andindicator 1 temp tempxor sig 2 andindicator 2 temp tempxor sig 3 andindicator 3 output temp endprocess 流程控制语句 第一种 第二种 A IF语句 IF条件句THEN顺序语句 ENDIF IF条件句THEN顺序语句 ELSE顺序语句 ENDIF 第三种 IF条件句1THEN顺序语句1 ELSIF条件2THEN顺序语句2 ELSIF条件nTHEN顺序语句n ELSE顺序语句n 1 ENDIF 例 IF SET 1 THENc b ENDIF 例 IF sel 1 THENc a ELSEc b ENDIF 例用IF语句描述一个四选一电路 LIBRARYIEEE USEIEEE STE LOGIC 1164 ALL ENTITYmux4ISPORT input INSTD LOGIC VECTOR 3DOWNTO0 sel INSTD LOGIC VECTOR 1DOWNTO0 Y OUTSTD LOGIC ENDmux4 ARCHITECTURErt1OFmux4ISBEGINPROCESS input sel BEGINIF sel 00 THENY input 0 ELSIF Sel 01 THENY input 1 ELSIF Sel 10 THENY input 2 ELSEY input 3 ENDIF ENDPROCESS ENDrt1 IF语句不仅可用于选择器设计 还可用于比较器 译码器等进行条件控制的逻辑设计 IF语句中至少应有一个条件句 条件句必须由布尔表达式构成 条件表达式中能使用关系运算操作及逻辑运算操作的组合表达式 IF语句颠倒条件判别次序 会引起在综合时逻辑功能的变化 即IF语句判别条件不可颠倒 IF语句中 先处理最起始的条件 如果不满足 再处理下一个条件 一般把条件约束最多的作为起始条件 例 用IF语句设计D型触发器LIBRARYIEEE USEIEEE STD LOGIC 1164 ALL ENTITYdff1ISPORT elk d INSTD LOGIC q OUTSTD LOGIC ENDdff1 ARCHITECTUREstructureOFdff1ISBEGINPROCESS elk BEGIN IF elk EVENTANDelk 1 THENq d ENDIF ENDPROCESS ENDstructure 当clk活动且clk l时 门闩条件成立 输入信号d代入给输出信号 即输出端口再现输入端口的值 当条件不成立时 输出值不变化 例 if语句实现二选一电路architecturertlofmux2isbeginprocess a b sel beginif sel 1 theny a elsey b endif endprocess endrtl if语句中隐含了优先级别的判断 最先出现的条件优先级最高 可用于设计具有优先级的电路 典型的电路是3 8译码电路 例 用IF语句设计二选一电路LIBRARYIEEE USEIEEE STD LOGIC 1164 ALL ENTITYmux2ISPORT a b sel INSTD LOGIC C OUTSTD LOGIC ENDmux2 ARCHITECTUREexampleOFmux2ISBEGINPi PROCESS a b sel BEGINIF sel 1 THENC a ELSEC b ENDIF ENDPROCESS ENDexample 8 3优先编码器真值表 编码器8 3线优先编码器的输入信号为input 0 input 0 input 1 input 2 input 3 input 4 input 5 input 6 和input 7 输出信号为output 0 output 1 和output 2 输入信号中input 7 的优先级别最高 依次类推 input 0 的优先级别最低 8 3线优先编码器的真值表如上表所示 表中 为任意值 下一页 返回 上一页 例 8 3线优先编码器的VHDL程序 LIBRARYieee USEieee std logic 1164 ALL ENTITYENCODER38ISPORT input INstd logic VECTOR 7DOWNTO0 output OUTstd logic VECTOR 2DOWNTO0 ENDENCODER38 ARCHITECTUREART3OFENCODER38ISBEGINPROCESS INPUT BEGIN 下一页 返回 上一页 IFinput 7 0 THENoutput 000 ELSIFinput 6 0 THENoutput 001 ELSIFinput 5 0 THENoutput 010 ELSIFinput 4 0 THENoutput 011 ELSIFinput 3 0 THENoutput 100 ELSIFinput 2 0 THENoutput 101 ELSIFinput 1 0 THENoutput 110 ELSIFinput 0 0 THENoutput 111 ELSEoutput XXX ENDIF ENDPROCESS ENDART3 下一页 返回 上一页 LIBRARYieee USEieee std logic 1164 ALL ENTITYbianma83ISPORT input INstd logic VECTOR 7DOWNTO0 output OUTstd logic VECTOR 2DOWNTO0 ENDbianma83 ARCHITECTUREART3OFbianma83ISBEGINPROCESS input BEGINcaseinputiswhen 01111111 outputoutputoutputoutputoutputoutputoutputoutputnull WHENothers output XXX endcase ENDPROCESS ENDART3 双向总线缓冲器 返回 双向总线缓冲器双向总线缓冲器用于数据总线的驱动和缓冲 典型的双向总线缓冲器如上图所示 图中的双向总线缓冲器有两个数据输入输出端A和B 一个方向控制端DIR和一个选通端EN EN 0时双向缓冲器选通 若DIR 0 则A B 反之则B A 例 双向总线冲器的VHDL描述 LIBRARYieee USEieee std logic 1164 ALL ENTITYBIDIRISPORT A B INOUTstd logic VECTOR 7DOWNTO0 EN DIR INstd logic ENDBIDIR ARCHITECTUREARTOFBIDIRISSIGNALAOUT BOUT std logic VECTOR 7DOWNTO0 BEGINPROCESS A EN DIR BEGINIF EN 0 AND DIR 1 THENBOUT A ELSEBOUT ZZZZZZZZ ENDIF B BOUT ENDPROCESS PROCESS B EN DIR BEGINIF EN 0 AND DIR 1 THENAOUT B ELSEAOUT ZZZZZZZZ ENDIF A AOUT ENDPROCESS ENDART CASE语句 CASE表达式ISWhen选择值 顺序语句 When选择值 顺序语句 WhenOTHERS 顺序语句 ENDCASE 选择值可以有四种不同的表达方式 单个普通数值 如6 数值选择范围 如 2TO4 表示取值为2 3或4 并列数值 如3 5 表示取值为3或者5 混合方式 以上三种方式的混合 CASE语句 四选一电路 entitymultiplexers 2isport a b c d instd logic s instd logic vector 1downto0 o outstd logic endmultiplexers 2 architecturearchiofmultiplexers 2isbeginprocess a b c d s begincasesiswhen 00 oooo d endcase endprocess endarchi 1 条件句中的选择值必须在表达式的取值范围内 2 除非所有条件句中的选择值能完整覆盖CASE语句中表达式的取值 否则最末一个条件句中的选择必须用 OTHERS 表示 3 CASE语句中每一条语句的选择只能出现一次 不能有相同选择值的条件语句出现 4 CASE语句执行中必须选中 且只能选中所列条件语句中的一条 这表明CASE语句中至少要包含一个条件语句 使用CASE语句需注意以下几点 CASE语句常用来描写总线行为 编码器和译码器的结构 CASE语句与IF语句功能相似但CASE语句的可读性好 非常简洁 74LS138真值表 译码器是最常用的组合电路之一 三线 八线译码器74LS138的真值表如上表所示 例 用VHDL描述的三线 八线译码器74LS138源程序 LIBRARYieee USEieee std logic 1164 ALL entitydecoder38isport a b c g1 g2a g2b instd logic y outstd logic vector 7downto0 ENDdecoder38 architecturebehave38OFdecoder38issignalindata std logic vector 2downto0 Variableindata std logic vector 2downto0 BEGINindatayyy 11111011 when 011 yyyyyy XXXXXXXX ENDcase elsey 11111111 ENDIF ENDPROCESS ENDbehave38 IF g1 1 andg2a 0 andg2b 0 THENIF indata 000 THENy 11111110 ELSIF indata 001 THENy 11111101 ELSIF indata 010 THENy 11111011 ELSIF indata 011 THENy 11110111 ELSIF indata 100 THENy 11101111 ELSIF indata 101 THENy 11011111 ELSIF indata 110 THENy 10111111 ELSIF indata 111 THENy 01111111 ELSEY XXXXXXXX ENDIF elsey 11111111 ENDIF ENDPROCESS ENDbehave38 LOOP语句 标号 FOR循环变量IN循环次数范围LOOP顺序语句 ENDLOOP 标号 用法示例 L2 LOOPa a 1 EXITL2WHENa 10 当a大于10时跳出循环ENDLOOPL2 2 FOR LOOP语句 语法格式如下 1 单个LOOP语句 其语法格式如下 标号 LOOP顺序语句 ENDLOOP 标号 标号 WHILE条件LOOP顺序语句 ENDLOOP 标号 3 WHILE LOOP语句 语法格式如下 用法示例 FORIIN0TO7LOOPTmp tmpXORa I ENDLOOP 用法示例 FORIIN0TO7LOOPTmp tmpXORa I ENDLOOP 用法示例 WHILEi 4LOOPb bANDa i vout i b I I 1 ENDLOOP 例 while loop语句的使用sum 0 i 0 aaa while i 10 loopsum sum i i i 1 endloopaaa 在使用该语句时 应该注意 循环变量i需事先定义 赋初值 并指定其变化方式 一般综合工具不支持while loop语句 例 用for loop语句描述的8位奇偶校验电路Libraryieee useieee std logic 1164 all entityparity checkisport a instd logic vector 7downto0 y outstd logic endparity check architecturertlisparity checkisbeginprocess a variabletmp std logic begintmp 1 forIin0to7looptmp tmpxora i endloop y tmp endprocess endrtl NEXT语句 NEXT 第一种语句格式NEXTLOOP标号 第二种语句格式NEXTLOOP标号WHEN条件表达式 第三种语句格式 NEXT有三种用法 其语法格式如下 当LOOP标号缺省时 则执行NEXT语句时 即刻无条件终止当前的循环 跳回到本次循环LOOP语句开始处 开始下一次循环 否则跳转到指定标号的LOOP语句开始处 重新开始执行循环操作 若WHEN子句出现并且条件表达式的值为TRUE 则执行NEXT语句 进入跳转操作 否则继续向下执行 用法示例 L1 FORCNTIN1TO8LOOPS1 A CNT 0 NEXTWHEN B C S2 A CNT 8 0 ENDLOOPL1 当程序执行到NEXT语句时 如果条件判断式 b c 的结果为TRUE 将执行NEXT语句 并返回到L1 使cnt加1后执行S1开始的赋值语句 否则执行S2开始的赋值语句 EXIT语句 EXIT 第一种语句格式EXITLOOP标号 第二种语句格式EXITLOOP标号WHEN条件表达式 第三种语句格式 EXIT有三种用法 其语法格式如下 这种语句格式与前述的NEXT语句的格式和操作功能非常相似 惟一的区别是NEXT语句是跳向LOOP语句的起始点 而EXIT语句则是跳向LOOP语句的终点 EXIT语句为程序需要处理保护 出错和警告状态时 提供了一种快捷 简便的调试方法 等待语句 WAIT语句 WAIT 第一种语句格式WAITON信号表 第二种语句格式WAITUNTIL条件表达式 第三种语句格式WAITFOR时间表达式 第四种语句格式 超时等待语句 EXIT有四种用法 其语法格式如下 用法示例1 SIGNALs1 s2 STD LOGIC PROCESSBEGIN WAITONs1 s2 ENDPROCESS WAIT ON信号表 UNTIL条件表达式 FOR时间表达式 用法示例2 Waituntilenable 1 单独的WAIT表示永远挂起 一般地 只有WAIT UNTIL格式的等待语句可以被综合器接受 其余语句格式只能在VHDL仿真器中使用 WAIT UNTIL语句有以下三种表达方式 WAITUNTIL信号 Value 1 WAITUNTIL信号 EVENTAND信号 Value 2 WAITUNTILNOT信号 STABLEAND信号 Value 3 如果设clock为时钟信号输入端 以下四条WAIT语句所设的进程启动条件都是时钟上跳沿 所以它们对应的硬件结构是一样的 WAITUNTILclock 1 WAITUNTILrising edge clock WAITUNTILNOTclock STABLEANDclock 1 WAITUNTILclock 1 ANDclock EVENT 例 用waituntil语句描述时钟沿 实现D触发器的VHDL语言描述 architecturertlofdisbeginprocessbeginwaituntilclk eventandclk 1 q d endprocess endrtl 例 PROCESSBEGINrst loop LOOPWAITUNTILclock 1 ANDclock EVENT 等待时钟信号NEXTrst loopWHEN rst 1 检测复位信号rstx a 无复位信号 执行赋值操作WAITUNTILclock 1 ANDclock EVENT 等待时钟信号NEXTrst loopWhen rst 1 检测复位信号rsty b 无复位信号 执行赋值操作ENDLOOPrst loop ENDPROCESS VHDL规定 已列出敏感量的进程中不能使用任何形式的WAIT语句 断言语句 在仿真中为了能得到更多信息 经常要用到断言语句 assert 其语法如下 AssertReportSeverity 断言语句能够监测到在VHDL设计中不希望的条件 比如 在generic中的错误的值 常数和产生条件 或者在调用函数时错误的调用参数等 对于在断言语句中的任何错误条件 综合工具根据错误的级别 产生警告信息 或者拒绝设计和产生错误信息 出错级别共有5种 Note Warning Error Failure Fatal 需要注意的是 XST的综合工具对断言语句只支持静态的条件 返回语句 RETURN语句是一段子程序结束后 返回主程序的控制语句 它有两种格式 第一种格式只能用于过程 它后面一定不能有表达式 第二种格式只能用于函数 它后面必须有条件表达式 它是函数结束的必要条件 函数结束必须用RETURN语句 RETURN 第一种语句格式RETURN表达式 第二种语句格式 空操作语句 空操作语句的语句格式如下 NULL 在下例的CASE语句中 NULL用于排除一些不用的条件 CASEOpcodeISWHEN 001 tmp regaANDregb WHEN 101 tmp regaORregb WHEN 110 tmp NOTrega WHENOTHERS NULL ENDCASE 调用过程的语句格式如下 过程名 形参名 实参表达式 形参名 实参表达式 一个过程的调用将分别完成以下三个步骤 1 将IN和INOUT模式的实参值赋给欲调用的过程中与它们对应的形参 2 执行这个过程 3 将过程中IN和INOUT模式的形参值返回给对应的实参 子程序调用语句 A 过程调用语句 B 函数调用语句 函数调用与过程调用是十分相似的 不同之处是 调用函数将返还一个指定数据类型的值 函数的参量只能是输入值 例 PROCEDURErs SIGNALs r INSTD LOGIC SIGNALq nq INOUTSTD LOGIC ISBEGINIF s 1 ANDr 1 THENREPORT Forbiddenstate sandrarequualto 1 RETURN ELSEq sANDnqAFTER5ns nq sANDqAFTER5ns ENDIF ENDPROCEDURErs 例 FUNCTIONopt a b opr STD LOGIC RETURNSTD LOGICISBEGINIF opr 1 THENRETURN aANDb ELSERETURN aORb ENDIF ENDFUNCTIONopt 函数语句 函数语句分为两个部分 函数首和函数体 1 函数首的格式为 FUNCTION函数名称 参数列表 RETURN数据类型名 2 函数体的格式为 FUNCTION函数名称 参数列表 RETURN数据类型名IS说明部分BEGIN顺序语句RETURN返回变量END函数名称 调用函数语句的格式为 Y 函数名称 参数列表 例用FUNCTION语句描述在两个数中找出最大值 并用函数调用方式求出最大值 这段程序放在一个程序包 PACKAGE 中 1 在程序包名称为BF1的程序包中定义函数名称为MAX1的函数 程序包文件名为bf1 VHD 放在当前的WORK库中 LIBRARYIEEE USEIEEE STD LOGIC 1164 ALL PACKAGEBF1IS 定义程序包的包头 BF1是程序包名称FUNCTIONMAX1 A STD LOGIC VECTOR 定义函数首 函数名称是MAXB STD LOGIC VECTOR RETURNSTD LOGIC VECTOR 定义函数返回值的类型ENDBF1 PACKAGEBODYBF1IS 定义程序包体FUNCTIONMAX1 A STD LOGIC VECTOR 定义函数体B STD LOGIC VECTOR RETURNSTD LOGIC VECTORISVARIABLETMP STD LOGIC VECTOR A RANGE BEGINIF A B THENTMP A ELSETMP B ENDIF RETURNTMP TMP是函数返回变量ENDMAX1 ENDBF1 例用FUNCTION语句描述在两个数中找出最大值 并用函数调用方式求出最大值 这段程序放在一个程序包 PACKAGE 中 2 调用函数MAX1的程序 文件名是SMAX VHD LIBRARYIEEE USEIEEE STD LOGIC 1164 ALL LIBRARYWORK 用户当前工作库 可以不列出USEWORK BF1 ALL ENTITYSMAXISPORT D1 DA DB INSTD LOGIC VECTOR 3DOWNTO0 CLK SET INSTD LOGIC Do OUTSTD LOGIC VECTOR 3DOWNTO0 ENDSMAX ARCHITECTUREaOFSMAXISBEGINPROCESS CLK BEGINIF CLK EVENTANDCLK 1 THENIF SET 1 THEN SET 1 同步置数DO D1 ELSEDO MAX1 DA DB 调用MAX1函数ENDIF ENDIF ENDPROCESS VHDL语言的并行语句 1 并行信号赋值语句 4 进程语句 3 块语句 2 条件信号赋值语句 5 元件例化语句 6 生成语句 7 并行过程调用语句 结构体 并行信号赋值语句 信号赋值语句可以在进程内部使用 此时它以顺序语句的形式出现 当信号赋值语句在结构体的进程外使用时 信号赋值语句将作为并行语句形式出现 1 并行信号赋值语句 赋值目标 表达式 例ARCHITECTUREcurtOFbc1ISSIGNALs1 e f g h STD LOGIC BEGINoutput1 aANDb output2 c d g eORf h eXORf s1 g ENDARCHITECTUREcurt 并行信号赋值语句 例 两种等价描述的信号赋值语句architecturebehavofa varis 并行信号赋值语句beginoutput aandb orc endbehav architecturebehavofa varis 进程内部信号赋值语句beginprocess a b c beginoutput aandb orc endprocess endbehav 并行信号赋值语句 从上面的例子可以看出 一个简单并行信号赋值语句实际上是一个进程的缩写 并行信号赋值语句中的任何一个信号值发生变化时 赋值操作就会立即执行 而在进程内 当敏感向量表中的敏感向量发生变化时 赋值操作才会执行 2 条件信号赋值语句 赋值目标 表达式WHEN赋值条件ELSE表达式WHEN赋值条件ELSE 表达式 例ENTITYmuxISPORT a b c INBIT p1 p2 INBIT z OUTBIT END ARCHITECTUREbehvOFmuxISBEGINz aWHENp1 1 ELSEbWHENp2 1 ELSEc END 条件信号赋值语句 条件信号赋值语句是并发描述语句 它可以根据不同条件将多个不同的表达式其中的一个值带入信号量 条件信号赋值语句 例 用条件信号赋值语句描述四选一电路entitymux4isport i0 i1 i2 i3 instd logic sel instd logic vector 1downto0 q outstd logic endmux4 architecturertlofmux4isbeginq i0whensel 00 elsei1whensel 01 elsei2whensel 10 elsei3 endrtl 条件信号赋值语句与进程中的多选择if语句等价 注意 1 只有当条件满足时 才能将这个条件前面的表达式赋给目标信号 2 它是一种并行描述语句 不能在进程和子程序中使用 3 语句对条件判断是有序的 位于前面的条件具有较高的优先级 4 语句中最后一个表达式的后面不含有WHEN子句 5 语句中条件表达式的结果为布尔型数值 同时允许条件重叠 6 条件信号赋值语句不能嵌套 因此不能用于生成锁存器 7 与IF语句有相近的功能 3 选择信号赋值语句 WITH选择表达式SELECT赋值目标信号 表达式WHEN选择值 表达式WHEN选择值 表达式WHEN选择值 例 WITHseltSELECTmuxout aWHEN0 1 0或1bWHEN2TO5 2或3 或4或5cWHEN6 dWHEN7 Z WHENOTHERS 注意 1 只有当条件满足时 才能将这个条件前面的表达式赋给目标信号 2 它是一种并行描述语句 不能在进程和子程序中使用 3 语句中的表达式后面都含有WHEN子句 4 语句对选择条件的测试是同时进行的 因此不允许选择条件重叠 5 语句中的选择条件不允许出现涵盖不全的情况 6 选择信号赋值语句与进程中的case语句等价 例 用选择信号赋值语句描述四选一电路entitymux4isport i0 i1 i2 i3 instd logic sel instd logic vector 1downto0 q outstd logic endmux4 architecturertlofmux4issignalsel std logic vector 1downto0 beginsel b选择信号赋值语句与进程中的case语句等价 块语句 块语句将一系列并行描述语句进行组合 目的是改善并行语句及其结构的可读性 可使结构体层次鲜明 结构明确 块语句的语法如下 标记 block 块保护表达式 块说明项 begin 并行语句 endblock 标记 块语句 1 块语句的使用不影响逻辑功能以下两种描述结果相同 例3 58 块语句描述一a1 out1 1 after2ns a2 out2 1 after2ns a3 out3 1 after2ns 例3 59 块语句描述二a1 out1 1 after2ns blk1 blockbegina2 out2 1 after2ns a3 out3 1 after2ns endblockblk1 块语句 嵌套块 子块声明与父块声明的对象同名时 子块声明将忽略掉父块声明 B1 blocksignals bit begins aandb B2 blocksignals bit begins candd B3 blockBeginz s endblockB3 endblockB2 y s endblockB1 块语句 卫式块 由保护表达式值的真 假决定块语句的执行与否 综合工具不支持该语句 Entityeg1isPort a inbit z outbit endeg1 architecturertlofeg1isbeginguarded block block a 1 beginz 1 whenguardelse 0 endblock endrtl 4 进程语句 进程标号 PROCESS 敏感信号参数表 IS 进程说明部分 BEGIN顺序描述语句 ENDPROCESS 进程标号 PROCESS语句结构的一般表达格式如下 在一个结构体中多个PROCESS语句可以同时并发运行 而进程内部语句之间是顺序关系 PROCESS语句在VHDL程序中 是描述硬件并行工作行为的最常用 最基本的语句 PROCESS组成 PROCESS语句结构 进程说明 顺序描述语句 敏感信号参数表 信号赋值语句 变量赋值语句 进程启动语句 子程序调用语句 顺序描述语句 进程跳出语句 1 进程说明部分主要定义一些局部量 可包括数据类型 常数 属性 子程序等 但需注意 在进程说明部分中不允许定义信号和共享变量 2 顺序描述语句部分可分为赋值语句 进程启动语句 子程序调用语句 顺序描述语句和进程跳出语句等 3 为启动进程 在进程中必须包含有一个显式的敏感信号量表或者包含一个WAIT语句 敏感信号表应当紧跟在PROCESS之后 含有敏感信号表的进程语句中不允许再显式出现WAIT语句 说明 如果有wait语句 则不允许有敏感信号表 其格式为 PROCESSBEGIN sequentialstatementsWAITON a b ENDPROCESS 进程描述语句 1 同步进程的敏感信号表中只有时钟信号 例 只有时钟信号的进程process clk beginif clk eventandclk 1 thenifreset 1 thendata 00 elsedata in data endif endif endprocess 进程描述语句 2 异步进程敏感信号表中除时钟信号外 还有其它信号 例 带有复位和时钟信号的进程process clk reset beginifreset 1 thendata 00 elsif clk eventandclk 1 thendata in data endif endprocess 例 ENTITYmulISPORT a b c selx sely INBIT data out OUTBIT ENDmul ARCHITECTUREexOFmulISSIGNALtemp BIT BEGINp a PROCESS a b selx BEGINIF selx 0 THENtemp a ELSEtemp b ENDIF ENDPROCESSp a p b PROCESS temp c sely BEGINIF sely 0 THENdata out temp ELSEdata out c ENDIF ENDPROCESSp b ENDex 上例的综合结果 1 PROCESS为一无限循环语句 2 PROCESS语句具有顺序 并行运行双重性 3 进程必须由敏感信号的变化来启动 4 信号是多个进程间的通信线 PROCESS语句特点 5 一个进程中只允许描述对应于一个时钟信号的同步时序逻辑 例 LIBRARYIEEE USEIEEE STD LOGIC 1164 ALL USEIEEE STD LOGIC UNSIGNED ALL ENTITYCNT10ISPORT CLR INSTD LOGIC IN1 INSTD LOGIC VECTOR 3DOWNTO0 OUT1 OUTSTD LOGIC VECTOR 3DOWNTO0 ENDENTITYCNT10 ARCHITECTUREARTOFCNT10ISBEGINPROCESS IN1 CLR ISBEGINIF CLR 1 ORIN1 1001 THENOUT1 0000 有清零信号 或计数已达9 OUT1输出0ELSE 否则作加1操作OUT1 IN1 1 注意 使用了重载算符 重载算符 是在库ENGIF STD LOGIC UNSIGNED中预先声明的ENDPROCESS ENDARCHITECTUREART 组合电路型十进制加法器CNT10综合后的RTL硬件结构图 一般用于组合电路进程模式 进程标记 PROCESS 信号名 信号名 信号名 VARIABLE 变量名 STD LOGIC VARIABLE 变量名 STD LOGIC BEGIN 指定信号 指定变量 过程调用 如果语句 CASE语句 循环语句ENDPROCESS 进程标记 用于时序电路进程模式 进程标记 PROCESS 信号名 信号名 信号名 VARIABLE 变量名 STD LOGIC VARIABLE 变量名 STD LOGIC BEGINWAITUNTIL 时钟信号 1 或CLK eventandCLK 1 指定信号 指定变量 过程调用 如果语句 CASE语句 循环语句ENDPROCESS 进程标记 元件例化语句 例化名 元件名PORTMAP 元件例化语句 端口名 连接端口名 元件例化就是将预先设计好的设计实体定义为一个元件 然后利用特定的语句将此元件与当前的设计实体中的指定端口相连接 从而为当前设计实体引入一个新的低一级的设计层次 COMPONENT元件名ISGENERIC 类属表 元件定义语句PORT 端口名表 ENDCOMPONENT文件名 元件定义 声明 语句 元件例化语句 元件例化语句的理解元件例化语句引入的是一种连接关系 即将预先设计好的设计实体定义成一个元件 然后利用例化语句将此元件与当前的设计实体中的指定端目相连接 从而为当前设计实体引入了一个低一级的设计层次 也可以这样来理解例化语句 当前设计实体相当于一个较大的电路系统 预先设计好的设计实体相当于一个要插在这个电路系统板上的芯片 而当前设计实体中的例化语句则相当于这块电路板上准备接收此芯片的一个插座 元件例化语句通常由元件声明和元件例化两部分组成 语句书写格式如下 下一页 上一页 元件声明部分COMPONENT元件名GENERIC 参数表 PORT 端口信息 ENDCOMPONENT 元件例化部分例如 元件名PORTMAP 端口名 连接端口名 第一部分的 元件声明 是对预先设计好的元件的定义语句 相当于对一个已有的设计实体进行封装 使其只留出对外的接口界面 也就像一个集成芯片只对外留出几个引脚一样 类属表 可定义一些参数 端口信息 可列出已有元件端口的名称 模式 数据类型 该部分可放在结构体中 语句说明部分 下一页 上一页 第一部分的 元件例化 用于说明当前设计实体和被调用元件的连接关系 其中 例化名 是必须的 它类似于当前电路系统板上的一个插座名 而 元件名 则是已定义好的 准备在此插座上插入的元件 或芯片 名称 端口名 是已有的元件 或芯片 的端口名称 是关联 连接 符号 连接端口名 则是当前系统与准备接入的元件对应端口相连的通信端口 相当于插座上各插针的引脚名 已有元件的 端口名 与当前系统的 连接端口名 的关联描述有两种方式 一种是上述方式 在这种方式下 已有元件的 端口名 关联符号 都是必须存在的 端口名 连接端口名 在PORTMAP语句中的位置可以是任意的 下一页 上一页 另一种是位置关联方式 在这种方式下 端口名 和 都可省去 在PORTMAP了句中只列出当前系统中的 连接端口名 即可 但要求 连接端口名 的排列顺序与 元件声明 中已有元件 端口信息 中所列的端口名排列顺序相同 书写格式为例化名 元件名PORTMAP 连接端口名1 连接端口名2 例 利用例化语句设计图2 5所示的电路 首先完成与非门的设计LIBRARYIEEE USEIEEE STDLOGIC1164 ALL ENTITYmvnand2IS 下一页 上一页 图2 5 返回 下一页 上一页 PORT a b INSTD LOGIC y OUTSTD LOGIC ENDmvnand2 ARCHITECTUREoneOFmvnand2ISBEGINy aNANDb ENDone 利用例化语句完成设计LIBRARYIEEE USEIEEE STDLOGIC1164 ALL 下一页 上一页 ENTITYord4ISPORT a b c d INSTD LOGIC z OUTSTD LOGIC ENDord4 ARCHITECTUREbehvOFord4ISCOMPONENTmynand2 元件声明部分PORT a b INSTD LOGIC y OUTSTD LOGIC ENDCOMPONENT SIGNALtempl temp2 STD LOGIC 下一页 上一页 BEGIN 元件例化部分U1 mynand2PORTMAP a b templ 一按位置关联U2 mynand2PORTMAP a c b d y temp2 按名字关联U3 mynand2PORTMAP templ temp2 y z 混合关联ENDbehv 例 利用元件例化语句设计如下所示电路 LIBRARYIEEE USEIEEE STD LOGIC 1164 ALL ENTITYND2ISPORT A B INSTD LOGIC C OUTSTD LOGIC ENDENTITYND2 ARCHITECTUREARTND2OFND2ISBEGINCC1 C S2 B D1 名字关联方式U3 ND2PORTMAP S1 S2 C Z1 混合关联方式ENDARCHITECTUREARTORD41 例 元件例化 例 使用元件声明和例化语句构造半加器EntityNAND2isport A B inBIT Y outBIT endNAND2 architectureARCHIofNAND2isbeginY AnandB endARCHI entityHALFADDERisport X Y inBIT C S outBIT endHALFADDER architectureARCHIofHALFADDERiscomponentNAND2port A B inBIT Y outBIT endcomponent forall NAND2useentitywork NAND2 ARCHI signalS1 S2 S3 BIT beginC S3 NANDA NAND2portmap X Y S3 NANDB NAND2portmap X S3 S1 NANDC NAND2portmap S3 Y S2 NANDD NAND2portmap S1 S2 S endARCHI 四位全加器的程序文件名为adder4 VHD LIBRARYIEEE USEIEEE STD LOGIC 1164 ALL USEIE
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年尚库新能源智慧产业园运营方案
- 2025年新疆重点项目-年产10万吨聚羧酸系减水剂项目可行性研究报告
- 2025年中国生物滴灌肥项目投资计划书
- 2025年低空经济政策调整与航空物流市场研究报告
- 2025年无人机在风电叶片巡检中的应用与智能识别算法研究进展报告
- 中国肿瘤热治疗仪行业市场前景预测及投资价值评估分析报告
- 2025年低空经济「人机协同」安全操作规范培训体系优化报告
- 2025年无人机长沙产业园研发制造与区域经济发展报告
- 考点攻克苏科版八年级物理上册《物态变化》达标测试试卷(详解版)
- 2025年辅警面试题库及正确答案
- 第16课+国家出路的探索与列强侵略的加剧+知识清单 高三历史统编版必修中外历史纲要上一轮复习
- 2025年九省联考新高考 物理试卷(含答案解析)
- 《情感表达》课件 2024-2025七年级艺术美术上册人民教育出版社
- 二次结构阶段危险源清单(房建)
- 山东电力系统调度规程
- Python极客项目编程
- 《无人机航迹规划》课程标准(高职)
- 画法几何及机械制图习题册参考答案完整课件
- 藏文五年级上册课件
- 小学二年级数学奥数植树问题(锯木头剪绳子)课件
- 职业生涯规划书模具设计
评论
0/150
提交评论