完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
使用 VHDL 进行数字电路描述时候,如果按照执行顺序对 VHDL 的程序进行分类,可以分为
顺序(sequential)描述语句和并行(concurrent)描述语句。顺序语句描述的程序总是按照 程序书写的顺序执行;而并行语句都是同时执行的,和程序的书写顺序无关。 VHDL 顺序语句描述方法 VHDL 中的顺序语句一般在进程中出现,或者以函数、过程的方式在进程中被调用。顺序 语句所涉及到的系统行为有时序流、控制、条件和迭代等。VHDL 中的顺序语句有 WAIT 语句、 断言语句、IF 语句、CASE 语句、LOOP 语句、NEXT 语句、过程调用语句和 NULL 语句,下面就 对它们进行详细介绍。 1.WAIT 语句 WAIT 语句允许把一个顺序执行的进程或子程序挂起,挂起的进程或子程序恢复的条件由 3 种不同的方法指定。WAIT 语句可以有不同的格式,分别有不同的作用,例如 WAIT ON 表示等 待到信号变化,WAIT UNTIL 表示等到一个表达式为真,而 WAIT FOR 表示等待一个固定的事件, 如果仅仅写一个 WAIT 的话就表示无限期的等待。 WAIT 语句能用于多种不同的目的,常用于为综合工具指定时钟输入。另一用途是将进程 的执行延时一段时间或者是为了动态地修改进程敏感表。 为了避免无休止的等待可以加一个超时付句,不管进行到哪儿或是条件有没有满足都允许 执行超时处理。下面的代码就演示了 WAIT UNTIL 语句的使用方法和超时处理的方法:
2.断言语句 断言语句的功能是为设计者报告一个文本字符串。断言语句包含一个布尔表达式,表达式 为真,该语句不做任何事;反之,它将输出一用户规定的字符串到标准输出终端。 断言语句规定输出字符串的严重程度为 4 个级别(NOTE、WARNING、ERROR 和 FAILURE), 它们的意思分别是注意、警告、错误和失败,严重层次递增。 断言语句的格式如下:
其中,关键字 ASSERT 后跟 CONDITION 布尔值表达式,它的条件决定 REPORT 付句规定的文 字表达式输出不输出,如果是假,文字表达式输出,如果是真,该文字表达式不输出。此外还 有两个可选的付句,REPORT 付句允许设计者指定输出文字表达式的值,如果不指定 REPORT 语 句,默认值是 ASSERTION VIOLATION,SEVERITY 付句允许设计者指定断言语句的严重级别,如 果没指定 SEVERITY 付句,其默认值是 ERROR。 下面是一个断言语句的使用实例,它表示对输入时钟进行检查,如果其建立时间小于 20ns,则输出 ERROR 信号:
3.IF 语句 IF 语句是根据所指定的条件来确定执行哪些语句,其格式如下:
IF 语句用关键字 IF 开头和用关键字 END IF 结尾,END IF 分开拼写。有两个可选付句(ELSIF 付句和 ELSE 付句),ELSIF 付句可重复并允许有多个 ELSIF 付句,可选 ELSE 付句但只允许有 一个 ELSE 付句。付句中的条件是一布尔表达式,如条件为真值,则下一语句被执行;如果条 件不为真,那么接着执行跟在 ELSE 付句后的顺序语句。 下面举一个 IF 语句的使用例子,如下:
以上代码的意义如下:有两个变量 weekend 和 weekday,每当 day 等于 saturday 或 sunday 时变量 weekend 变为真,执行跟着的下一句并控制转到跟在 END IF 之后的语句,否则转到 ELSIF 语句部分并检查 day 是否为 Saturday;当变量 day 等于 saturday,执行跟着的下一句并再次 控制转到跟在 END IF 之后的语句;若 day 并不等于 sunday 或 saturday,执行 ELSE 语句部分。 4.CASE 语句 当单个表达式的值在多个起作用的项中选择时用 CASE 语句。CASE 语句的格式如下:
下面是一个使用 CASE 语句执行处理器指令的例子:
5.循环语句 当需要重复操作时用循环语句,或者实现的模块需要很强的迭代能力时用循环语句:
其中循环条件可以用 WHILE 语句或者 FOR 语句来描述。 WHLIE 语句有一个循环控制的条件 condition,只要条件表达式为真,WHILE 循环语句就 一直执行下去,除非要退出循环。例如:
FOR 循环是根据预先的设定进行迭代,所指定的范围并不一定必须为整数值,也可以表示 成一个子类型的指示或者一个范围语句,例如:
FOR LOOP 语句的指数值(i)由 FOR 语句局部地说明,这和进程、函数和过程中变量 I 不 是一会事,它不需要显式地说明,由于 FOR LOOP 语句的虚拟性,循环指数要局部说明之。这 样在进程、函数或过程中存在同名变量时,它们会被分别处理并由它们的内含寻址。 此外,关于循环需要特别注意的是,在某些编程语言中循环指数的值可由赋予内部循环值 来改变,但是 VHDL 中是不允许对循环指数的任何赋值,这排除了在任何函数返回值中或在过 程的输出与双向参量中存在循环指数。 6.NEXT 语句 如果必须在这次迭代或循环中停下正在执行的语句,而转向下一个迭代时,用 NEXT 语句。 执行 NEXT 语句时,模块处理停在当前点并转到循环语句的开始。随着循环的第一个语句执行, 循环变量增加一个迭代值,直到迭代的限制值,循环停止。 下面是一个 NEXT 语句使用的例子:
7.EXIT 语句 EXIT 语句提供完全停下循环执行的能力。执行期间发生了明显的错误或者所有的进程已 执行完毕就跳出循环,EXIT 语句允许退出或跳出循环语句。执行 EXIT 语句后 EXIT 语句后面 的语句暂停执行,去执行循环语句后面的语句。 EXIT 语句的基本书写格式如下:
循环标号一般在多重循环中用于标明循环层次,如果 EXIT 语句后面添加循环标号,它将 会退出循环标号指定的循环。“WHEN 条件”项用于表明 EXIT 语句执行的条件,此条件为真时 才推出循环。 EXIT 语句的使用实例如下:
|
|
相关推荐 |
|
只有小组成员才能发言,加入小组>>
2907 浏览 3 评论
27715 浏览 2 评论
3484 浏览 2 评论
3990 浏览 4 评论
基于采用FPGA控制MV-D1024E系列相机的图像采集系统设计
2338 浏览 3 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-28 18:42 , Processed in 0.539574 second(s), Total 45, Slave 34 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号