第四五讲并行语句和描述形式

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

1
并行语句概述
并行语句一般处于进程(PROCESS)的外部。所有并行
语句都是并行执行的,即与它们出现的先后次序无关。
并行语句特点 a.所有语句的执行是并行的;
b.每条语句的执行和其所在的位置无关;
c.并行语句的输出仅仅依赖于输入,没有其它的限制条件
2
结构体中的并行语句主要有7种: ① 并行信号赋值语句(CONCURRENT SIGNAL ASSIGNMENTS) ② 进程语句(PROCESS STATEMENTS) ③ 块语句(BLOCK STATEMENTS) ④ 条件信号赋值语句(SELECTED SIGNAL ASSIGNMENTS) ⑤ 元件例化语句(COMPONENT INSTANTIATIONS) ⑥ 生成语句(GENERATE STATEMENTS) ⑦ 并行过程调用语句(CONCURRENT PROCEDURE CALLS)
FA FA C3 FA C3C3
C3C3FA C2C2 C3FA FA C2
C2C2FA C1C1 C2FA FA C1
C1C1FA C1FA FA
Cin Cin Cin
C0C0 C0
A3 A3 A3
B3 B3 B3
A2 A2 A2
B2 B2 B2
A1 A1 A1
B1 B1 B1
A0 A0 A0
B0 B0 B0
19
Library ieee; Use ieee.std_logic_1164.all; Use ieee.std_logic_unsigned.all; Entity fulladder is Port (Ci : in std_logic; a,b : in std_logic; s : out std_logic; Co : out std_logic); End fulladder;
选择信号赋值语句
格式: WITH 选择表达式 SELECT 赋值目标信号<=表达式1 WHEN 条件1 表达式2 WHEN 条件2 : 表达式n WHEN 条件n; 该语句很象CASE 语句.
10
11
2.元件例化(Component Instantiation)语句
元件例化就是将预先设计好的设计实体定义为一个元件,然 后引用特定的语句将此元件与当前的设计实体中的指定端口 相连接,从而为当前设计实体引入一个新的低一级的设计层 次。
s,co : out std_logic);
end component; Begin
c(0)<=Cin;
U1: fuladd Port map(c(0),x(0),y(0),sum(0),c(1)); U2: fuladd Port map(c(1),x(1),y(1),sum(1),c(2));
Cout : out std_logic);
3
1.并行信号赋值语句
简单信号赋值语句 条件信号赋值语句 选择信号赋值语句
4
简单信号赋值语句
格式: 目的信号量<=信号量表达式 例: a<=b; q<=c+d;
信号赋值语句在进程中使用是顺序语句,但是
在进程外即在构造体中使用就是并发语句。
5
下面举一个应用示例,如下面电路:
A B &
C
≥1
D
用VHDL对电路的描述如下:
并行语句,元件同时产生
23
3 进程语句(process)
Process 语句的格式为:
[进程标号:] Process
[(敏感信号列表)]
[变量声明]
Begin 顺序语句; End Process [进程标号];
敏感表(Sensitivity list)包括进程的一些信号,当敏感表中的某个信号变化时进程才 被激活,进程内的顺序语句被执行。当进程结束时,进程内的输出信号值被更新,
并行语句的输出仅仅 每条语句的执行和其 所在的位置无关。
依赖于输入,没有其
它的限制条件。
c<=a and b; d<=a or b ;
END m1;
7
条件信号赋值语句
格式:目的信号量<=表达式1 WHEN 条件1 ELSE 表达式2 WHEN 条件2 ELSE 表达式3 WHEN 条件3 : ELSE 表达式n;
x x
y y
u3 u3
& &
来自百度文库
z1 z1
& &
u2 u2
15
Library ieee; Use ieee.std_logic_1164.all;
Architecture ndbev of nd2
Begin c <= not(a and b) End nd2behav
Entity nd2 is
Port (a,b : in std_logic; c : out std_logic;); End nd2;
End adder;
U3: fuladd Port map(c(2),x(2),y(2),sum(2),c(3)); U4: fuladd Port map(c(3),x(3),y(3),sum(3),c(4)); Cout<=c(4); End a;
22
U1: fuladd Port map (ci=>c(0),a=>x(0),b=>y(0),s=>sum(0),co=>c(1)); U2: fuladd Port map(ci=>c(1),a=>x(1),b=>y(1),s=>sum(1),co=>c(2));
Architecture m1 of fulladder is Signal tmp: std_logic_vector(1 downto 0); Begin tmp<=(‘0’ & a)+b+ci;
s<=tmp(0);--- 二 位 数 中 低 位 为 和 , 高 位 为
CO
co<=tmp(1); End m1;
Signal c: std_logic_vector(0 to 4);
Component fulladd Port( ci,a,b : in std_logic;
Use ieee.std_logic_unsigned.all;
Entity adder is Port (Cin : in std_logic; x,y : in std_logic_vector(3 downto 0); sum : out std_logic_vector(3 downto 0);
元件端口信息,与该元件 实现时的实体的port部分相 同并在结构体开始之前进
行声明
将元件端口和要描述的 电路的实际端口具体对 应,在结构体开始后进
行例化
例化名是必须存在的,它类似于标在当前系统(电路板)中的一个插座名
13
元件例化时端口映射方式:
a.位置对应方式 直接由输入信号和元件信号的对应位置进行映射。即: 元件标号:元件名 Port Map(信号A1, 信号B1,…); b.名字直接对应 元件标号:元件名 Port Map(组件信号A=>信号A1, 组件信号B=>信号B1,…);
a1 b1 c1 d1

x y
u3

z1

u2
17
U1 : nd2 port map(a1,b1,x); U2 : nd2 port map (a=>c1,c=>y,b=>d1);
U3 : nd2 port map (x,y,c=>z1);
U1
a1 a1 b1 b1
c1 c1 d1 d1
& &
x x
VHDL并行语句
• 并行语句结构是最具有VHDL特色的,相对于 传统的软件描述语言。在VHDL中,并行语句 有多种语句格式,各种并行语句在结构体中的 执行是同步进行的,或者说是并行运行的,其 执行方式与书写的顺序无关。在执行中,并行 语句之间可以有信息往来,也可以是互为独立、 互不相关、异步运行的(如多时钟情况)。每 一行语句内部的语句运行方式可以有两种不同 的运行方式,即并行执行方式(如块语句)和 顺序执行方式(如进程语句)。
a b

cy
16
Library ieee; Use ieee.std_logic_1164.all; Entity ord41 is Port (a1,b1,c1,d1 : in std_logic; z1 : out std_logic;);
Signal x,y:std_logic ; (存储结点)
S
C0 FA
Ci
a
b
20
利用一位全加器元件的调用实现四位全加器:
C4
S3 S2 S1 S0
C4 FA C3
C3 FA C2
C2 FA C1
C1 FA Cin
A3
B3
A2
S
B2
A1
B1
A0
B0
C0 FA
Ci
a
b
利用一位全加器元件的调用实现四位全加器:
21
Architecture a of adder is Library ieee; Use ieee.std_logic_1164.all;
作用 :为了方便电路描述,将具有某一逻辑功能的完整的
VHDL设计(元件)直接调用,避免重复描述。 元件例化语句由两部分组成,前一部分是将一个现成的设计实 体定义为一个元件的语句,第二部分则是此元件与当前设计实 体中的连接说明 .
12
使用格式 第一步:元件声明 Component 元件实体名 Port (元件端口信息) End Component 元件名 ; 第二步:元件例化 例化名 : 元件名元件 Port Map(端口映射);
进程进入等待(睡眠)状态,直到敏感表中的某一信号发生变化,进程被再次激活。
24
下面举一个应用示例,如下面电路:
A B &
C
≥1
D
用不同VHDL语句对电路的描述如下:
25
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 c<=a and b; d<=a or b ; End m1;
begin
U1 : nd2 port map(a1,b1,x);
U2 : nd2 port map (a=>c1,c=>y,b=>d1); U3 : nd2 port map (a=>x,y,c=>z1) End architecture ord41behv;
End ord41;
Architecture ord41behv of ord41 is Component nd2 Port (a,b : in std_logic; c : out std_logic;); End component
6
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
U3: fuladd Port map(ci=>c(2),a=>x(2),b=>y(2),s=>sum(2),co=>c(3)); U4: fuladd Port map(ci=>c(3),a=>x(3),b=>y(3),s=>sum(3),co=>c(4));
C4C4 C4
S3 S3 S3 S2 S2 S2 S1 S1 S1 S0 S0 S0
8
例:四选一电路 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY mux44 IS PORT(i0,i1,i2,i3,a,b:IN STD_LOGIC; q : OUT STD_LOGIC); END mux44; ARCHITECTURE aa OF mux44 IS SIGNAL sel: STD_LOGIC_VECTOR(1 DOWNTO 0); BEGIN sel<=b & a; q<= i0 WHEN sel="00" ELSE i1 WHEN sel="01" ELSE i2 WHEN sel="10" ELSE i3 WHEN sel="11" ; 9 END aa;
U1 : nd2 port map(a1,b1,x); U2 : nd2 port map (a=>c1,c=>y,b=>d1);
位置对应方式 名字直接对应 混合方式
14
U3 : nd2 port map (a=>x,y,c=>z1)
a b
U1

cy
a1 a1 b1 b1
c1 c1 d1 d1
& &
y y
u3 u3
& &
z1 z1
& &
u2 u2
18
例: 设计一个一位全加器
C0 FA
S
A
B
Ci
被加数 A 0 0 0 0 1 1 1 1
输入 加数 低位进位 B Ci 0 0 0 1 1 0 1 1 0 0 0 1 1 0 1 1
输出 和 S 0 1 1 0 1 0 0 1 进位 C0 0 0 0 1 0 1 1 1
相关文档
最新文档