第四讲 并行语句

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

A<=(others=>„0‟); B<=(„1‟,others=>„0‟);
信号A的每一位的值都为0。 信号B的第一位为1,其它位的值为0。
2. 段赋值
Signal c : std_logic_vector(1 to 4); c(1 to 2) <=“10”; c(1 to 4) <=“1010”;
注意: 如果PROCESS中已有敏感信号量的
说明,那么在进程中就不能再使用WAIT 语 句
WAIT UNTIL
WAIT UNTIL 直到条件满足
格式: WAIT UNTIL 布尔表达式
当进程执行到该语句时,被挂起;若布尔表 达式为真时,进程将被启动。
例: WAIT UNTIL ((x*10)<100)
When-else语句和With-select-When语句的差别
两个语句的关键不同是:对于条件的要求程度不同,前者
要求较松,后者要求严格。
a With-select-When语句中When后的constant_value必须
是互不相同的; b 而When-else语句中When后的logic_expression则不需要这样 的严格条件,因为其When后的logic_expression的优先权次序 为由先到后排列。
子程序及其调用
(1) 子程序概述 (2)函数(Function) (3)过程(Procedure) (4)子程序调用
子程序概述
子程序:在主程序调用它以后能将处理结果返
回主程序的程序模块。
子程序由顺序语句构成,用于完成重复性
的计算工作,子程序有两种类型,即过程 (Procedure)和函数(Function)。子程序的 使用方法只能通过子程序调用及与子程序的界 面端口进行通信。每调用一次子程序都意味着
进程语句(process)
Process 语句的格式为: [进程标号:] Process Begin [(敏感信号列表)] [变量声明]
顺序语句;
End Process [进程标号];
敏感表(Sensitivity list)包括进程的一些信号,当敏感表中的某个 信号变化时进程才被激活,进程内的顺序语句被执行。当进程结 束时,进程内的输出信号值被更新,进程进入等待(睡眠)状态, 直到敏感表中的某一信号发生变化,进程被再次激活。
A B & C
begin c<=a and b; end process
D2:process
D1 ;
(a, b)
begin d<= a or b ;
end process D2 ;
end m3;
≥1
D
WAIT语句

WAIT
WAIT ON
无限等待
敏感信号量变化


WAIT UNTIL
WAIT FOR
例:不允许有重叠现象;必须含盖所有条件
例:
Architecture m2 of and2 is Signal tmp : std_logic_vector(1 down to 0); Begin tmp<=d1 & d2; With tmp select f<=‟1‟ when “11”, „0‟ when others; End m2;
下面举一个应用示例,如下面电路:
A B &
C
≥1
D
用不同VHDL语句对电路的描述如下:
library ieee; use ieee.std_logic_1164.all;
Architecture m2 of exam1 is begin process (a, b) begin c<=a and b;
增加了一个硬件电路模块,因此,在实际使用
时,要密切关注和严格控制子程序的调用次数。
函数(Function)
Function 函数名 (参数表) Return 数据类型 IS --函数首 说明部分
Begin
顺序语句
--函数体
END Function 函数名;
注:参数表中参量可以是变量、信号、常数(默认) 无需定义参数的方向(默认为“输入”)
并行语句的输出仅仅
依赖于输入,没有其
它的限制条件。
c<=a and b; d<=a or b ;
END m1;
每条语句的执行和其 所在的位置无关。
二、条件式信号代入语句:When-Else
语法格式为:
赋值目标<= 表达式1 When 赋值条件 Else
表达式2 When赋值条件 Else
… 表达式N; 在结构体中的条件赋值语句的功能与在进程中的IF语句 相同,在执行条件信号语句时,每一赋值条件是按书写 的先后关系测定的。
条件满足
时间到
WAIT 语句
格式:WAIT ON 信号[,信号] 例: PROCESS BEGIN y<=a AND b; WAIT ON a,b; END PROCESS; 该例中的进程与下例中进程相同:
例: PROCESS(a,b) BEGIN y<=a AND b; END PROCESS;
例2
Function trans (value : bit_vector(0 to 3) )
Return bit_vector Is Begin
Case value IS
When “0000”=>Return “1100”; When “0101”=>Return “1100”; When Others=>Return “1111”; End Case; End Function trans;
一、直接赋值语句:<= 赋值运算符
作用:直接对目标对象进行赋值操作。 语法格式:Signal_name<=expression; 如:Signal A,B: std_logic_vector(7 down to 0); A<=“00000000”; B<=“10000000”; 我们也可以这样赋值:
END IF ;
END PROCESS;
WAIT FOR
WAIT FOR 等到时间到
格式: WAIT FOR 时间表达式
当进程执行到该语句时 , 被挂起 ; 等待 一定的时间后,进程将被启动. 例: WAIT FOR 20 ns
进程语句(PROCESS)特点
在一个构造体中多个 PROCESS 语句可以同时并 行的执行,该语句有如下特点: 1 、可以和其它进程语句同时执行 , 并可以存取构造体 和实体中所定义的信号 2、进程中的所有语句都按照顺序执行 3、为启动进程 ,在进程中必须包含一个敏感信号表或 WAIT语句 4、进程之间的通信是通过信号来实现的
我们曾举过一个二输入的与门电路的例子: Library ieee; Use ieee.std_logic_1164.all; Entity and2 is Port(d1,d2 : in std_logic;
op : out std_logic);
End and2; Architecture m1 of and2 is Begin op<= „1‟ when(d1=‟1‟ and d2=‟1‟)else
Entity exam1 is
Port (a,b : in std_logic; c,d : out std_logic); End exam1; Architecture m1 of exam1 is Begin c<=a and b; d<=a or b ; End m1;
d<= a or b ;
VHDL并行语句
并行语句一般处于进程(PROCESS)的外部。 所有并行语句都是并行执行的,
并行语句特点 a. 所有语句的执行是并行的; b. 每条语句的执行和其所在的位置无关; c. 并行语句的输出仅仅依赖于输入,没有其它的 限制条件
基本的并行语句
(1)直接赋值语句:<= 赋值运算符 (2)信号代入语句 (3)进程(Process)语句 (4)块(Block)语句 (5)子程序(Procedure/Function) (6)元件(Component)例化语句 (7)For-Generate语句
下面举一个应用示例,如下面电路:
A B &
C
≥1
D
用VHDL对电路的描述如下:
library ieee; use ieee.std_logic_1164.all; Entity exam1 is port (a,b : in std_logic; c,d : out std_logic); End exam1; Architecture m1 of exam1 is Begin
end process; end m2;
A B & C
≥1
D
Architecture m2 of exam1 is begin process (a, b)
Architecture m3 of exam1 is
begin
D1 :process
(a, b)
begin
c<=a and b; d<= a or b ; end process; end m2;
例1Hale Waihona Puke Baidu
函 数 体
函 数 调 用
Entity func Is Port ( a: in bit_vector (0 to 2) ; m : out bit_vector(0 to 2)); 输入 End Entity func; 变量 Architecture demo Of func Is Function sam ( x,y,z: bit) Return bit is Begin Return (x and y) or z End Function sam; Begin 注意:函数定 Process (a) Begin 义的位置 m(0)<=sam(a(0), a(1), a(2)); m(1)<=sam(a(2), a(0), a(1)); m(2)<=sam(a(1), a(2), a(0)); End Process; End Architecture demo;
3. 块赋值
Signal a,b,c,d : std_logic; Signal s : std_logic_vector(1 to 4); 位置关联 s <= “0100” ; (a,b,c,d) <= s ;
信号代入语句

并发信号代入语句 条件信号代入语句

选择信号代入语句
一、并发信号代入语句 格式: 目的信号量<=信号量表达式 例: C1 <= NOT (a AND b); C2 <= b AND c; 信号赋值语句在进程中使用是顺序语句,但是在 进程外即在构造体中使用就是并发语句。
c;
End m1;
三、选择式信号代入语句:With-Select-When
With expression Select
赋值目标<=表达式1 When constant_value1,
表达式2 When constant_value2, … 表达式n When Others; 选择式信号代入语句本身不能在进程中应用,其功能与进程中 的CASE语句相同。
„0‟;
End m1;
Library ieee; Use ieee.std_logic_1164.all; Entity mux is
Port(a,b,c : in bit;
p1,p2 : in bit z : out bit); End and2; Architecture m1 of mux is Begin z<= a when p1=„1‟ else b when p2=„1‟ else
模块语句(BLOCK)
BLOCK语句是结构体中积木化设计语言,适用于复 杂项目设计。 使用BLOCK语句描述的格式如下: 块标号:BLOCK BEGIN : 并行语句 : END BLOCK 块标号;
例:二选一电路
ENTITY mux IS PORT (d0,d1,sel: IN BIT; q: OUT BIT); END mux; ARCHITECTURE connect OF mux IS SIGNAL tmp1,tmp2,tmp3: BIT; BEGIN cale: BLOCK BEGIN tmp1<=d0 AND sel; tmp2<=d1 AND (NOT sel); tmp3<=tmp1 OR tmp2; q<=tmp3; END BLOCK cale; END connect;
WAIT UNTIL
WAIT UNTIL 语句有两种表达方式 1、WAIT UNTIL 信号=VALUE; 2、WAIT UNTIL 信号‘EVENT AND 信号
=VALUE
PROCESS
BEGIN WAIT UNTIL CLK’EVENT AND CLK=‘1’; IF(RESET=‘1’) THEN Q<=‘0’; ELSE Q<=D;
相关文档
最新文档