前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >硬件描述语言VHDL——顺序语句

硬件描述语言VHDL——顺序语句

作者头像
zy010101
发布2019-05-25 19:50:16
1.9K0
发布2019-05-25 19:50:16
举报
文章被收录于专栏:程序员程序员

版权声明:本文为博主原创文章,转载请注明博客地址: https://cloud.tencent.com/developer/article/1433284

VHDL语言的基本语句分为两大类,顺序语句和并行语句。这是由于硬件设计的特点所引起的。假设需要设计一个三输入的与门和两输入的或门,将它们两个的结果作为输入给加法器,那么这就需要同时给5个信号。这是并行的,不能顺序执行。

在VHDL中,变量的赋值语句使用":="这个符号,变量的赋值是立即生效的。

信号的赋值语句使用"<=",它的赋值是有延迟的,不是立即生效的。

变量是个局部量,而信号是全局的。信号是有实际的物理硬件与之对应的。

WAIT语句

wait语句是控制程序是否挂起的语句,一般有如下几类:

代码语言:javascript
复制
wait;		--进程在无限等待
wait on	信号表;	--等待信号表中某个信号发生,然后执行进程
wait until 条件表达式;	--当条件表达式为真,执行进程。	
wait for 25 ns;	--等待25ns以后,执行进程。

需要注意的是,wait for一般只用来进行仿真,不能用来产生实际的信号。因为综合器不能准确产生时间。

IF语句

代码语言:javascript
复制
--IF语句格式1
IF 条件表达式 THEN
	顺序语句;
END IF;

--IF语句格式2
IF 条件表达式 THEN
	顺序语句;
ELSE 
	顺序语句;
END IF;

--IF语句格式3
IF 条件表达式 THEN
	顺序语句;
ELSIF 条件表达式 THEN
	顺序语句;
	......
ELSE
	顺序语句;
END IF;

if语句和一般的软件程序设计语言并没有什么区别,需要注意的是它使用的是elsif,而不是elseif。并且if语句需要使用end if来结束。IF语句是按照顺序自上而下逐一判断条件是否成立,适合用来设计优先编码器。

  • IF语句可以嵌套,但是层数不易过多。
  • IF语句允许判断条件重叠,这是因为它是自上而下执行的。
  • 当IF语句的条件无重叠的时候,建议使用CASE语句来代替。
  • IF的分支必须包含所有情形,否则综合器就会认为你需要引入锁存器。

CASE语句

case语句一般以case开头,后面跟上表达式和IS。注意所有的表达式的值都必须穷举,不能穷举的值用others表示。case语句以end case;结束。它和软件语言不一样,没有break。

代码语言:javascript
复制
case 条件 is
	when 取值1 => 顺序处理语句1;
	when 取值2 => 顺序处理语句2;    --  =>相当于IF语句中的THEN
	......
	when others => 顺序处理语句n;
end case;
  • CASE语句的所有条件判断是不具备优先级的,是并发执行的。
  • CASE语句中所有的取值必须保证是互斥的。
  • CASE语句比IF语句更加消耗芯片资源。

LOOP语句

代码语言:javascript
复制
标号: for 循环变量 in 取值范围 loop
	顺序处理语句;
	end loop 标号;

这个和汇编语言极其相似。循环变量将会从取值范围的左边逐渐变化到取值范围的右边,一般是采用TO或者是DOWNTO来指定范围的。通常循环变量的类型无需说明。

代码语言:javascript
复制
标号:while 条件表达式 loop
	顺序处理语句;
	end loop 标号;

这个和for loop语句是类似的效果。只不过for loop的循环次数是确定的,while loop的循环次数不确定。这就类似于C语言的for循环和while循环。

循环语句中的标号不是必须的,通常在多重循环里我们必须使用标号。一个例子如下:

代码语言:javascript
复制
FOR i IN 0 TO 9 LOOP
	sum:=sum + 1;
END LOOP;

需要注意的是一般的综合器只支持FOR_LOOP语句,而不支持WHILE_LOOP语句。并且范围只能是具体的数值。

NEXT语句和EXIT语句

next语句相当于C语言的continue语句,而exit语句相当于C语言的break语句。

代码语言:javascript
复制
next;
next 标号;
代码语言:javascript
复制
exit;
exit 标号;

RETURN语句

return语句是用来结束当前最内层的函数或者是过程体的执行。

代码语言:javascript
复制
return 表达式;		--只能用在函数中
return;			--只能用在过程中	

NULL语句

NULL语句只是一种占位操作,它不进行任何操作,不会产生时延。一般它用在when others语句后面的顺序执行语句中。用来表示除正常情形以外不做任何其他操作。

代码语言:javascript
复制
WHEN OTHERS => NULL;

这个NULL实质上隐含了引入锁存器的含义,所以一般不在组合逻辑电路中使用。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019年03月20日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • WAIT语句
  • IF语句
  • CASE语句
  • LOOP语句
  • NEXT语句和EXIT语句
  • RETURN语句
  • NULL语句
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档