




已阅读5页,还剩108页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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 STD 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 IN1 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 下一页 返回 上一页 74LS138真值表 返回 译码器译码器是最常用的组合电路之一 三线 八线译码器74LS138的真值表如上表所示 例6 2 用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 BEGINindatayyy 11111011 下一页 返回 上一页 when 011 yyyyyy XXXXXXXX ENDcase elsey 11111111 ENDIF ENDPROCESS ENDbehave38 下一页 返回 上一页 双向总线缓冲器 返回 双向总线缓冲器双向总线缓冲器用于数据总线的驱动和缓冲 典型的双向总线缓冲器如上图所示 图中的双向总线缓冲器有两个数据输入输出端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语句常用来描述总线或编码 译码行为 可读性比if语句强 格式如下 caseiswhen when when endcase 其中expression为判断的条件表达式 condition为判断条件的一个特定的值 sequentialsentence为在该判断条件的某一特定值成立的情况下通过顺序描述语句所描述的逻辑行为 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 BEGINindatayyy 11111011 when 011 yyyyyy XXXXXXXX ENDcase 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 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 2 条件信号赋值语句 赋值目标 表达式WHEN赋值条件ELSE表达式WHEN赋值条件ELSE 表达式 例ENTITYmuxISPORT a b c INBIT p1 p2 INBIT z OUTBIT END ARCHITECTUREbehvOFmuxISBEGINz aWHENp1 1 ELSEbWHENp2 1 ELSEc END 选择信号赋值语句 WITH选择表达式SELECT赋值目标信号 表达式WHEN选择值 表达式WHEN选择值 表达式WHEN选择值 例 WITHseltSELECTmuxout aWHEN0 1 0或1bWHEN2TO5 2或3 或4或5cWHEN6 dWHEN7 Z WHENOTHERS 块语句 块语句将一系列并行描述语句进行组合 目的是改善并行语句及其结构的可读性 可使结构体层次鲜明 结构明确 块语句的语法如下 标记 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为一无限循环语句 2 PROCESS语句具有顺序 并行运行双重性 3 进程必须由敏感信号的变化来启动 4 信号是多个进程间的通信线 PROCESS语句特点 5 一个进程中只允许描述对应于一个时钟信号的同步时序逻辑 进程描述语句 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 上例的综合结果 例 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文件名 元件定义 声明 语句 元件例化语句 元件声明 例 元件声明语句的使用Componentand2Port i1 i2 instd logic O1 outstd logic endcomponent componentaddgeneric n positive port x y instd logic vector n 1downto0 z outstd logic vector n 1downto0 carry outstd logic endcomponent 元件例化 元件的例化把低层元件安装 调用 到当前层次设计实体内部的过程 包括 类属参数传递 元件端口映射 元件例化语句的格式为 genericmap portmap 元件例化 其中 instance name为例化元件的名字 component name为引用的元件的名字 genericmap 为例化元件的类属映射部分 portmap 为例化元件的端口映射部分 例 元件例化语句的使用u1 ADDgenericmap N 4 portmap x y z carry 端口映射方式可以采用名称关联和位置关联的方法 元件例化 采用名称关联方式 低层次端口名 当前层次端口名 信号名 例 or2portmap o n6 i1 n3 i2 n1 采用位置关联方式 当前层次端口名 当前层次端口名 例 or2portmap n3 n1 n6 当采用位置关联方式时 例化的端口表达式 信号 必须与元件声明语句中的端口顺序一致 一个低层次设计在被例化前必须有一个元件声明 元件例化 例 使用元件声明和例化语句构造半加器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 例 利用元件例化语句设计如下所示电路 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 例 6 生成语句 标号 FOR循环变量IN取值范围GENERATE说明 BEGIN并行语句 ENDGENERATE 标号 表达式TO表达式 递增方式 如1TO5表达式DOWNTO表达式 递减方式 如5DOWNTO1 标号 IF条件GENERATE说明 BEGIN并行语句 ENDGENERATE 标号 取值范围 生成语句有一种复制作用 在设计中 只要根据某些条件 设定好某一元件或设计单位 就可以利用生成语句复制一组完全相同的并行元件或设计单元电路结构 生成语句的两种形式 生成语句 if generate语句 有条件地生成0个或1个备份 If generate为并行语句 if generate没有类似于if语句的else或elsif分支语句 ifgenerate语句的语法格式 ifgeneratebegin endgenerate 其中 为标号 为产生语句的运行条件 为并行描述语句 用生成语句的 比特加法器 entityEXAMPLEisport A B inBIT VECTOR 0to7 CIN inBIT SUM outBIT VECTOR 0to7 COUT outBIT endEXAMPLE architectureARCHIofEXAMPLEisSignalC BIT VECTOR 0to8 beginC 0 CIN COUT C 8 LOOP ADD forIin0to7generateSUM I A I xorB I xorC I C I 1 A I andB I or A I andC I or B I andC I endgenerate endARCHI 用if generate语句创建8比特加法器 entityEXAMPLEisgeneric N INTEGER 8 port A B inBIT VECTOR Ndownto0 CIN inBIT SUM outBIT VECTOR Ndownto0 COUT outBIT endEXAMPLE architectureARCHIofEXAMPLEissignalC BIT VECTOR N 1downto0 beginL1 if N 4andN 32 generateC 0 CIN COUT C N 1 LOOP ADD forIin0toNgenerateSUM I A I xorB I xorC I C I 1 A I andB I or A I andC I or B I andC I endgenerate endgenerate endARCHI 例 利用生成语句产生的八个相同的电路模块 主要的VHDL程序如下 COMPONENTCOMPISPORT X INSTD LOGIC Y OUTSTD LOGIC ENDCOMPONENTCOMP SIGNALA B STD LOGIC VECTOR 0TO7 GEN FORIINA RANGEGENERATEU1 COMPPORTMAP X A I Y B I ENDGENERATEGEN 并行过程调用语句 PROCEDURE过程名 参数1 参数2 IS 声明语句 BEGIN 顺序处理语句 END过程名 并行过程调用语句可以作为一个并行语句直接出现在结构体或块语句中 并行过程调用语句的功能等效于包含了同一个过程调用语句的进程 并行过程调用语句的语句调用格式与前面讲的顺序过程调用语句是相同的 过程调用的实质内容要先装入程序包中 Package 过程名 关联参数表 并行过程调用 位置关联方式 名字关联方式 参数关联方式 例 设有一过程PROCEDUREvect a b INBIT x y INOUTBIT 则调用时 位置关联方式 vect in1 in2 out1 out2 名字关联方式 vect a in1 b in2 x out1 y out2 使用说明 1 过程的参数表中可以使用IN OUT INOUT三种 不能理解为端口 2 过程可以返回多个变量 通过OUT INOUT定义的参数返回 3 参数对象可以为常量 IN方式 信号
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年乡镇退役军人服务站招聘考试热点分析
- 2025年农村医疗保障员招聘面试模拟题及答案详解
- 2025年人力资源管理实战模拟题及案例分析教程
- 2025年中成药制药生产线合作协议书
- 2025年市政工程项目建议书
- 2025年镍压延加工材项目发展计划
- 福建省莆田市某校2024-2025学年一年级上学期第一次月考数学试题
- 心内科考试试题及答案
- 抗焦虑失眠药课件
- 抗心律失常课件
- 2025年重庆市永川区社区工作者招聘考试笔试试题(含答案)
- 电气自动化基础知识课件
- 家畜繁殖员上岗证考试题库及答案
- DG-TJ08-2097-2025 地下管线探测技术标准
- 数学鲁教版九年级上学期分层计划
- 甘肃省合理用药管理办法
- 新解读《建筑工程消防施工质量验收规范 DBJ-T 15-248-2022》
- 第十三章 三角形 单元测试 2025-2026学年人教版(2024)八年级数学上册
- 女生的青春期健康教育
- 以《论语》为翼:高中生价值观构建的教学实践与探索
- 妇产科电子护理文书书写规范
评论
0/150
提交评论