VHDL语言_进程描述语法

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

进程描述语法
本章小结 一 进程和进程之间是并发关系,一个进程内的语句是
顺序逐条执行的 二 只有当敏感信号的值发生变化时,进程才开始运行 三 进程中定义的变量只能在进程中使用,和结构体中
定义的信号不同,信号赋值采用<=,变量赋值采用:=
进程里不可以存在条件信号赋值语句和选择信号
赋值语句等并行赋值语句。 例4.4
例4.3
library ieee;
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_1164.all;
entity mux21 is
entity mux21 is
进程描述语法
进程描述格式的解释: 1)进程由关键字process开始,在结构体内声明的信号、 常数、函数等都可以在进程中使用。在进程内部可以定义进 程内部使用的变量。 2)进程关键字后的信号列表称为敏感信号表,敏感信号决 定进程是否运行。当敏感信号的值发生变化,进程开始运行 ,从进程中的第一条语句逐行执行到最后一行。 3)没有敏感信号列表,则必须有wait until语句,使用的 格式为:
编译报错 ERROR:sequential signal assignment ERROR: found illegal use of a selected signal
cannot contain conditional waveforms
assignment statement in process statement part
进程描述语法
3.2 变量赋值语句 格式为 变量名:=表达式;
采用进程描述素数检测逻辑电路的例子如下:
architecture li8_arch of li8 is --结构体
begin
process(a)
--进程,a是敏感信号
variable y0,y1,y2,y3:std_logic; --在进程内定义变量
wait until 表达式; 当表达式成立,进程开始运行。例如,wait until x=‘1’ ;表示当x=1后,进程开始运行。
进程描述语法
三、进程中可以使用的顺序描述语句 3.1 顺序语句赋值语句
该语句与并发信号赋值语句有相同的格式,也 是使用赋值符号<=,但是因为在进程内部使用, 所以是顺序赋值,而不是并发赋值。
begin
y3:=a(0)and not a(3);
--变量赋值,使用变量赋值符号:=
y2:=a(1)and not a(2) and not a(3);
--变量赋值
y1:=a(1)and not a(2) and a(0);--变量赋值
y0:=a(0)and not a(1) and a(2);--变量赋值
信号赋值语句
在进程中使用if语句描述素数进程逻辑电路的例子
architecture li9_arch of li9 is --结构体
begin
process(a)
--进程
variable p:integer;
--定义变量
begin
p:=conv_integer(a);
--将4位二进制数a转换成整数
s:in std_logic; y:out std_logic); end entity mux21; architecture one of mux21 is
begin process(s,a,b) begin with s select y<=a when '0', b when '1'; end process; end architecture one;
port(a,b:in std_logic;
port(a,b:in std_logic; s:in std_logic;
y:out std_logic); end entity mux21; architecture one of mux21 is
begin process(s,a,b) begin y<=a when s='0' else b when s='1'; end process; end architecture one;
第一学时 VHDL语言基础
第2单元 进程描述语法
老师:XXX
日期:XXXXXXX
进程描述语法
核心知识点 一 进程是VHDL支持的行为描述过程 二 进程的描述格式 三 进程中可以使用顺序语句赋值语句、变量
赋值语句、if语句和case语句 四 进程中赋值语句的讨论
进程描述语法
一 、进程的定义 VHDL语言支持行为描述,进程process就
进程描述语法
4.2 变量的时钟边沿赋值 这里所说的变量的时钟赋值,是指变量赋值需要
通过时钟边沿的驱动。 由于变量不同于信号,其赋值是立即进行的,所
以如果一个变量在时钟边沿到来时多次赋值,然后再 将其赋给其它信号或变量,则将其最后一次赋值所得 到的值在赋给其它信号或变量。
信号赋值语句
例4.2 library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity test is
是行为描述的关键字。 含义:
1)一个进程就是一个顺序描述语句的集合。 进程和进程之间、进程和其他并发描述之间是 并发关系。 3)进程可以描述组合和时序电路。
进程描述语法
二、进程的描述格式 process (信号名,信号名,…,信号名)
定义变量 定义常数 begin 顺序描述语句 … 顺序描述语句 end process;
信号赋值语句
使用case语句描述素数检测逻辑电路的例子
architecture li10_arch of li10 is begin
process(a) begin
case conv_integer(a) is when 1=>w<=’1’; when 2=>w<=’1’; when 3|5|7|11|13=>w<=’1’; when others =>w<=’0’; end case; end process; end li10_arch;
begin process(a,b) variable s: std_logic_vector(3 downto 0); begin s:=a; s:=a+b; y<=s+1; end process; end architecture one;
在例4.1中,由于s是 变量,所以对s的赋值 都是立即起作用的。 由于y<=s+1写在 s:=a+b之后,所以 将a+b的值赋给y。仿 真结果下图所示。
w<=y3 or y2 or y1 or y0; --信号顺序赋值
end process;
end
进程描述语法
3.3 if语句 格式为: if 条件语句 then 顺序语句 end if; if 条件语句 then 顺序语句 else 顺序语句 end if; if 条件语句1 then 顺序语句 elsif 条件语句2 then 顺序语句 … elsif 条件语句N then 顺序语句 else 顺序语句 end if;
port(clk:in std_logic; a,b:in std_logic_vector(3 downto 0); y:out std_logic_vector(3 downto 0)); end entity test; architecture one of test is
begin process(clk) variable s: std_logic_vector(3 downto 0); begin if clk='1'and clk'event then s:=a; y<=s+1; s:=a+b; end if; end process; end architecture one;
进程描述语法
四、进程中赋值语句的讨论 4.1 变量的普通赋值
这里所说的变量的普通赋值,是指变量赋值不需 要通过时钟边沿的驱动。由于进程中的语句都是顺序 语句,所以进程中的变量赋值都是顺序执行的。
但有一点需要注意,如果在一个进程中多次为一 个变量赋值时,赋值会立即起作用,这就与C语言等 普通的高级语言相类似。
信号赋值语句
在例4.2的中, • 如果clk发生变化,则执行此进程,如果clk出现上升
沿,则执行if语句中的几句赋值语句; • 对s的进行赋值s:=a,所以将a的值立即赋给s; • y<=s+1这句赋值语句紧接着s:=a的后面,所以将
此时的s加1然后赋给y。 仿真结果如图所示。
进程描述语法
4.3 进程里不可以有并行赋值语句
if p=1 or p=2 then w<=’1’;
--if,then语句
elsif p=3 or p=5 or p=7 or p=13 then w<=’1’;
--elsif,then语句
else w<=’0’;
--else语句
end if;
end process;
end li9_arch;
进程描述语法
3.4 case语句 case语句也是一种顺序语句,它的语法格式如下:
case 表达式 is when 选择值 => 顺序语句 … when 选择值 => 顺序语句 when others =>顺序语句
end case 只要表达式的值等于选择值,就执行其后的顺序语句。选 择值可以使用单个值或用“|”分割的多个值,选择值不能 相同。若选择值不能包含表达式的所有值,则需要使用关 键字others来代替剩余的选择值。
信号赋值语句
例4.1 library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity test is
port(clk:in std_logic; a,b:in std_logic_vector(3 downto 0); y:out std_logic_vector(3 downto 0)); end entity test; architecture one of test is
相关文档
最新文档