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

硬件描述语言VHDL——并行语句

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

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

并行语句是是硬件描述语言的特殊之处,这也是硬件描述语言不可少的一部分。硬件电路例如:总线,它需要多个输入。这个时候,我们必须并发的给出总线上的数据。软件程序设计语言也有并发,但是在性能要求不是苛刻的情形下,无需使用并发。软件的并发由多线程和多进程来实现。

在VHDL中,并发语句是同时执行的。它们的书写顺序和执行顺序没有关系。在结构体中的并行语句主要有一下几种:

  1. 进程语句;
  2. 并行信号赋值语句;
  3. 并行过程调用语句;
  4. 元件例化语句;
  5. 生成语句;
  6. 块语句。

简单信号赋值语句

代码语言:javascript
复制
信号<=表达式;

选择信号赋值语句

代码语言:javascript
复制
WITH 选择表达式 SELECT
信号<=表达式1 WHEN 选择值1,
	  表达式2 WHEN 选择值2,
	  ......
	  表达式n WHEN OTHERS;        --最后一行这里是分号。其余行是逗号

WITH——SELECT语句是当“选择表达式”的值等于WHEN后面的选择值时,将WHEN前面的表达式值赋给信号。

  • 选择值必须互斥,不能重复。
  • 该语句不能用于进程(PROCESS)中。
  • 选择信号赋值语句不允许出现范围覆盖不全的情况。

条件信号赋值语句

代码语言:javascript
复制
信号<=表达式1 WHEN 赋值条件1 ELSE
	  表达式2 WHEN 赋值条件2 ELSE
	  ......
	  表达式n WHEN 赋值条件n ELSE
	  表达式;		--最后一项可以不跟条件子句,用于表示以上赋值条件都不满足的情形。
  • 条件信号赋值语句允许赋值条件重叠,因为,它赋值条件根据书写顺序来逐项测试。一旦发现某一赋值条件得到满足,即将相应表达式的值赋给信号,并且不在测试后面的赋值条件。也就是说,语句之间有优先级顺序,按照书写的先后顺序从高到低排列优先级。适合实现优先级编码器。

进程语句

进程语句PROCESS是VHDL中最重要的语句之一。它的特点如下:

  • 进程与进程之间是并发,这点和软件程序设计语言是一致的。进程内部是顺序执行的。
  • 进程只有在敏感信号发生变化的时候才会执行。

进程语句的格式如下

代码语言:javascript
复制
进程名:]PROCESS[(敏感信号列表)]	--进程名不是必须的
[声明区];			--定义进程内部使用的变量,不能在此处定义信号,信号在ARCHITECTURE中定义
BEGIN
顺序语句;
END PROCESS[进程名];
  • 当敏感信号列表中的任意一个发生变化的时候,PROCESS将被启动。
  • PROCESS内部执行是顺序的
  • 在进程内对同一个信号的多次赋值只有最后一次生效。
  • 在不同进程之中不能对同一信号进行赋值。
  • 在一个进程中不能同时对时钟上升,下降沿都敏感。

进程与时钟

进程是由敏感信号的变化来启动的,因此可将时钟作为进程启动的敏感信号。时钟信号的上升沿和下降沿是我们最常使用的。当时钟信号clk是STD_LOGIC类型的时候,时钟信号在VHDL中的描述方法如下:

代码语言:javascript
复制
上升沿描述:clk'EVENT AND clk = '1';
下降沿描述:clk'EVENT AND clk = '0';

除此之外,VHDL语言还预定义了两个函数来描述上升沿和下降沿。

代码语言:javascript
复制
上升沿描述:rising_edge(clk);
下降沿描述:falling_edge(clk);

注意下面的错误格式:

代码语言:javascript
复制
--错误格式1
PROCESS(clk)
BEGIN
IF rising_edge(clk) THEN		--不能同时对上升沿和下降沿都敏感
......
ELSIF falling_edge(clk) THEN
......
END IF;
END PROCESS;
--错误格式2
PROCESS(clk)
BEGIN
IF rising_edge(clk) THEN
......
ELSE			--不能有ELSE,这相当于除了对上升沿敏感,还对下降沿敏感
......
END IF;
END PROCESS;
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019年04月07日,如有侵权请联系 cloudcommunity@tencent.com 删除

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 简单信号赋值语句
  • 选择信号赋值语句
  • 条件信号赋值语句
  • 进程语句
    • 进程与时钟
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档