VHDL并行语句
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
A U1
A1
C S1
B ND2
B1
A U3
C
B ND2
Z1
A U2
C1
C S2
B ND2
D1
例:
LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL;
ENTITY ND2 IS
PORT(A,B:IN STD_LOGIC; C:OUT STD_LOGIC);
END ENTITY ND2; ARCHITECTURE ARTND2 OF ND2 IS BEGIN
BEGIN
U1:ND2 PORT MAP (A1,B1,S1);
--位置关联方式
U2:ND2 PORT MAP (A=>C1,C=>S2,B=>D1); --名字关联方式
U3:ND2 PORT MAP (S1,S2,C=>Z1);
--混合关联方式
END ARCHITECTURE ARTORD41;
6、生成语句
z <= a WHEN p1 = '1' ELSE b WHEN p2 = '1' ELSE c;
END;
选择信号赋值语句
WITH 选择表达式 SELECT 赋值目标信号 <=表达式 WHEN 选择值,
表达式 WHEN 选择值, ...,
表达式 WHEN 选择值;
例 ... WITH selt SELECT muxout <= a WHEN 0|1 , -- 0或1
CLR
AND4 OR2
AD DE R41 A0 S0 A1 S1 A2 S2 A3 S3 B0
VCC 1
S0=0: =>Z[3..0]=A[3..0] S0=1: =>Z[3..0]=B[3..0]
MUX42
A0 A1 A2 A3
Z0 B0 Z1 B1 Z2 B2 Z3 B3
0
S0
OU T1[0] OU T1[1] OU T1[2] OU T1[3]
BEGIN 并行语句;
END GENERATE [标号] ;
取值范围
表达式 TO 表达式 ; -- 递增方式,如1 TO 5 表达式 DOWNTO 表达式 ; -- 递减方式,如5 DOWNTO 1
例:利用生成语句产生的八个相同的电路模块
A[0] A[1]
COMP INPUT OUTPUT
COMP INPUT OUTPUT
PROCESS语句在VHDL程序中,是描述硬件并行工作 行为的最常用、最基本的语句。
PROCESS 组成 PROCESS语句结构
进程说明
顺序描述语句
敏感信号参数表
信
变
进
子
顺
进
号
量
程
程
序
程
赋
赋
启
序
描
跳
值
值
动
调
述
出
语
语
语
用
语
语
句
句
句
语
句
句
句
说明
(1) 进程说明部分主要定义一些局部量,可包括数据 类型、常数、属性、子程序等。但需注意,在进程说 明部分中不允许定义信号和共享变量。
元件定义(声明)语句
COMPONENT 元件名 IS GENERIC (类属表); -- 元件定义语句 PORT (端口名表);
END COMPONENT 文件名; 元件例化语句
例化名 :元件名 PORT MAP( -- 元件例化语句 [端口名 =>] 连接端口名,...) ;
例:利用元件例化语句设计如下所示电路
组合电路型十进制加法器CNT10综合后的RTL硬件结构图
一般用于组合电路进程模式
__进程标记:
PROCESS (__信号名, __信号名, __信号名) VARIABLE __变量名 : STD_LOGIC; VARIABLE __变量名 : STD_LOGIC; BEGIN -- 指定信号 -- 指定变量 -- 过程调用 -- 如果语句 -- CASE语句 -- 循环语句 END PROCESS __进程标记;
...
4、进程语句
PROCESS语句结构的一般表达格式如下
[进程标号: ] PROCESS [ ( 敏感信号参数表 ) ] [IS] [进程说明部分]
BEGIN 顺序描述语句;
END PROCESS [进程标号];
在一个结构体中多个PROCESS语句可以同时并发运 行,而进程内部语句之间是顺序关系。
2、条件信号赋值语句
赋值目标 <= 表达式 WHEN 赋值条件 ELSE 表达式 WHEN 赋值条件 ELSE ... 表达式 ;
例 ENTITY mux IS
PORT ( a,b,c : IN BIT ; p1,p2 : IN BIT ; z : OUT BIT );
END; ARCHITECTURE behv OF mux IS BEGIN
U1:COMP PORT MAP (X=> A(I), Y=>B(I)); END GENERATE GEN; …
7、并行过程调用语句
并行过程调用语句可以作为一个并行语句直接出现 在结构体或块语句中。并行过程调用语句的功能等效于 包含了同一个过程调用语句的进程。并行过程调用语句 的语句调用格式与前面讲的顺序过程调用语句是相同的。
例: LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY CNT10 IS
PORT(CLR: IN STD_LOGIC;
IN1:IN STD_LOGIC_VECTOR(3 DOWNTO 0);
data_out
: OUT BIT );
END mul;
ARCHITECTURE ex OF mul IS
SIGNAL temp : BIT;
BEGIN
p_a : PROCESS (a, b, selx)
BEGIN
IF (selx = '0') THEN temp <= a;
ELSE temp <= b;
b WHEN 2 TO 5 , -- 2或3,或4或5 c WHEN 6 , d WHEN 7 , 'Z' WHEN OTHERS ; ...
3、块语句
块标号 : BLOCK [(块保护表达式)] 接口说明; 类属说明;
BEGIN 并行语句;
END BLOCK 块标号 ;
与大部分的VHDL语句不同,BLOCK语句的应 用,包括其中的类属说明和端口定义,都不会影响 对原结构体的逻辑功能的仿真结果。
OUT1:OUT STD_LOGIC_VECTOR(3 DOWNTO 0));
END ENTITY CNT10;
ARCHITECTURE ART OF CNT10 IS
BEGIN
PROCESS (IN1,CLR) IS
BEGIN
IF (CLR= ‘1’ OR IN1= "1001") THEN
OUT1<="0000"; --有清零信号,或计数已达9,OUT1输出0
过程调用的实质内容要先装入程序包中(Package):
PROCEDURE 过程名(参数1;参数2;) IS [声明语句;]
BEGIN [顺序处理语句;]
END 过程名;
并行过程调用:
过程名(关联参数表);
参数关联方式
位置关联方式 名字关联方式 =>
例:设有一过程PROCEDURE vect(a,b:IN BIT;
例 ... b1 : BLOCK SIGNAL s1: BIT ; BEGIN S1 <= a AND b ; b2 : BLOCK SIGNAL s2: BIT ; BEGIN s2 <= c AND d ; b3 : BLOCK BEGIN Z <= s2 ; END BLOCK b3 ; END BLOCK b2 ; y <= s1 ; END BLOCK b1 ;
-- 指定信号
-- 指定变量
-- 过程调用
-- 如果语句
-- CASE语句
-- 循环语句
END PROCESS __进程标记;
5、元件例化语句
元件例化就是将预先设计好的设计实体定义为一个元 件,然后利用特定的语句将此元件与当前的设计实体中的 指定端口相连接,从而为当前设计实体引入一个新的低一 级的设计层次。
1. PROCESS为一无限循环语句
2. PROCESS语句具有顺序/并行运行双重性
3. 进程必须由敏感信号的变化来启动 4. 信号是多个进程间的通信线 5. 一个进程中只允许描述对应于一个时钟信号的同步时序 逻辑
例:ENTITY mul IS
PORT (a, b, c, selx, sely : IN BIT;
生成语句有一种复制作用,在设计中,只要根据某 些条件,设定好某一元件或设计单位,就可以利用生成 语句复制一组完全相同的并行元件或设计单元电路结构。
[标号:] FOR 循环变量 IN 取值范围 GENERATE 说明;
BEGIN 并行语句;
END GENERATE [标号] ;
生成:语句的两种形式
[标号:] IF 条件 GENERATE 说明;
END IF;
END PROCESS p_a;
p_b: PROCESS(temp, c, sely)
BEGIN
IF (sely = '0') THEN data_out <= temp;
ELSE data_out <= c;
END IF;
ENDHale Waihona Puke BaiduPROCESS p_b;
END ex;
上例的综合结果
六、VHDL语言的并行语句
结构体
1、并行信号赋值语句 2、条件信号赋值语句 3、块语句 4、进程语句 5、元件例化语句 6、生成语句 7、并行过程调用语句
ARCHITECTURE
条
并
并
件元行
行
生 成 语 句
信号
信 号 赋 值
信号
件 例 化 语
信号
信 号 赋 值
信号
块 语 句
信号
进 程 语 句
信号
过 程 调 用
(2) 顺序描述语句部分可分为赋值语句、进程启动语 句、子程序调用语句、顺序描述语句和进程跳出语句 等。
(3)为启动进程,在进程中必须包含有一个显式的敏感 信号量表或者包含一个WAIT语句;敏感信号表应当紧 跟在PROCESS之后,含有敏感信号表的进程语句中不 允许再显式出现WAIT语句。
PROCESS语句特点
B[0] B[1]
…
A[7]
COMP INPUT OUTPUT
B[7]
主要的VHDL程序如下: … COMPONENT COMP IS
PORT (X:IN STD_LOGIC;Y: OUT STD_LOGIC); END COMPONENT COMP;
SIGNAL A,B:STD_LOGIC_VECTOR (0 TO 7); … GEN: FOR I IN A'RANGE GENERATE
用于时序电路进程模式
__进程标记:
PROCESS (__信号名, __信号名, __信号名)
VARIABLE __变量名 : STD_LOGIC;
VARIABLE __变量名 : STD_LOGIC;
BEGIN
WAIT UNTIL __时钟信号 = ‘1’;
或 CLK 'event and CLK='1'
ELSE
--否则作加1操作
OUT1<=IN1+1; --注意,使用了重载算符"+",重载算符"+"是在库
ENG IF;
--STD_LOGIC_UNSIGNED中预先声明的
END PROCESS;
END ARCHITECTURE ART;
IN 1[0]
NOT
IN 1[1]
IN 1[2]
IN 1[3]
Z1:OUT STD_LOGIC);
END ENTITY ORD41;
ARCHITECTURE ARTORD41 OF ORD41 IS
COMPONENT ND2 IS
PORT(A,B:IN STD_LOGIC; C:OUT STD_LOGIC);
END COMPONENT ND2; SIGNAL S1,S2:STD_LOGIC;
C<=A NAND B; END ARCHITECTURE ARTND2;
LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY ORD41 IS
A U1
A1
C S1
B ND2
B1
A U3
C
B ND2
Z1
A U2
C1
C S2
B ND2
D1
PORT(A1,B1,C1,D1:IN STD_LOGIC;
语句语
语
句
句
句
END ARCHITECTURE
结构体中的并行语句模块
1、并行信号赋值语句
赋值目标 = 表达式
例 ARCHITECTURE curt OF bc1 IS SIGNAL s1, e, f, g, h : STD_LOGIC ; BEGIN
output1 <= a AND b ; output2 <= c + d ; g <= e OR f ; h <= e XOR f ; s1 <= g ; END ARCHITECTURE curt;