版权声明:本文为博主原创文章,转载请注明博客地址: https://cloud.tencent.com/developer/article/1433296
并行语句是是硬件描述语言的特殊之处,这也是硬件描述语言不可少的一部分。硬件电路例如:总线,它需要多个输入。这个时候,我们必须并发的给出总线上的数据。软件程序设计语言也有并发,但是在性能要求不是苛刻的情形下,无需使用并发。软件的并发由多线程和多进程来实现。
在VHDL中,并发语句是同时执行的。它们的书写顺序和执行顺序没有关系。在结构体中的并行语句主要有一下几种:
信号<=表达式;
WITH 选择表达式 SELECT
信号<=表达式1 WHEN 选择值1,
表达式2 WHEN 选择值2,
......
表达式n WHEN OTHERS; --最后一行这里是分号。其余行是逗号
WITH——SELECT语句是当“选择表达式”的值等于WHEN后面的选择值时,将WHEN前面的表达式值赋给信号。
信号<=表达式1 WHEN 赋值条件1 ELSE
表达式2 WHEN 赋值条件2 ELSE
......
表达式n WHEN 赋值条件n ELSE
表达式; --最后一项可以不跟条件子句,用于表示以上赋值条件都不满足的情形。
进程语句PROCESS是VHDL中最重要的语句之一。它的特点如下:
进程语句的格式如下
进程名:]PROCESS[(敏感信号列表)] --进程名不是必须的
[声明区]; --定义进程内部使用的变量,不能在此处定义信号,信号在ARCHITECTURE中定义
BEGIN
顺序语句;
END PROCESS[进程名];
进程是由敏感信号的变化来启动的,因此可将时钟作为进程启动的敏感信号。时钟信号的上升沿和下降沿是我们最常使用的。当时钟信号clk是STD_LOGIC类型的时候,时钟信号在VHDL中的描述方法如下:
上升沿描述:clk'EVENT AND clk = '1';
下降沿描述:clk'EVENT AND clk = '0';
除此之外,VHDL语言还预定义了两个函数来描述上升沿和下降沿。
上升沿描述:rising_edge(clk);
下降沿描述:falling_edge(clk);
注意下面的错误格式:
--错误格式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;