VHDL并行语句
1、进程语句(Process)
特点:
进程结构内部所有语句顺序执行。
多进程间是并行执行的,并可访问构造体(Architecture)和实体(Entity)中的信号。
进程的启动由信号敏感表中的信号来触发,也可用WAIT语句等待一个触发事件的成立。(不同时使用)
[进程名]PROCESS[敏感信号表]
变量说明语句:
……
BEGIN
…...
顺序说明语句
…...
END PROCESS [进程名];
e.g(PROCESS)
ARCHITECTURE behav OF half_adder IS
BEGIN
Padder: PROCESS (a,b)
BEGIN
Sum <= a XOR b AFTER 5 ns;
Carry <= a AND b AFTER 5 ns;
END PROCESS Padder;
END behav;
WAIT --无限等待
WAIT ON --敏感信号变化
WAIT UNTIL 表达式 --表达式成立是进程启动
WAIT FOR 时间表达式 --时间到,进程启动
e.g(WAIT)
ARCHITECTURE example OF xor_gate IS
BEGIN
PROCESS
BEGIN
OUT_q <= ind1 xor ind2 AFTER 10ns;
WAIT ON ind1, ind2;
END PROCESS;
END example;
2、Block语句
块(BLOCK)是结构体中的子模块,Block可以把许多并行语句包装在一起,可嵌套。
块名:BLOCK[(保护表达式)]
[类属子句 --用于信号的映射及参数的定义,常用GENERIC语句、
类属接口表;] --GENERIC_MAP语句、PORT语句、PORT_MAP语句实现
[端口子句 --主要对改块用到的客体加以说明。可说明的项目有USE子句、
类属接口表;] --子程序说明及子程序体,类型说明及常数说明、信号说明和元--件说明
块说明部分
BEGIN
并行语句A
并行语句B
......
END BLOCK [块标号];
LIBRARY IEEE
USE WORK.math.ALL;
USE IEEE.STD_LOGIC_1164.ALL;
PACKAGE math IS
TYPE TW32 IS ARRAY(31 DOWNTO 0) OF STD_LOGIC;
FUNCTION TW_add (a, b; tw32) RETURN TW32;
FUNCTION TW_sub (a,b; tw32) RETURN TW32;
END math;
ENTITY cpu IS
PORT (clk, interrupt: IN STD_LOGIC;
ADD: OUT TW32;
Comt: IN INTEGER;
data: INOUT TW32);
END cpu;
ARCHITECTURE cpu_blk OF cpu IS
SIGNAL addr_bus, data_bus: TW32;
BEGIN
ALU: BLOCK --模块标号
PORT(a_bus, b_bus: IN TW32; --模块端口说明
d_out: OUT TW32;
c_bus: IN INTEGER);
PORT(a_bus => addr_bus, --模块信号端口映射
b_bus => data_bus,
d_out => data,
c_bus => comt);
SIGNAL AD_BUS: TW32;
BEGIN
d_out <= tw_add(a_bus, b_bus) WHEN c_bus = 0 ELSE --函数调用
tw_sub(a_bus, b_bus) WHEN c_bus = 1 ELSE --函数调用
a_bus;
END BLOCK ALU;
END cpu_blk;
3、过程和过程调用语句(concurrent procedure call)
register_proc(ck => clock, d => reg_in, q => reg_out); --procedure调用
4、信号代入语句(SIGNAL ASSIGNMENT)
并发信号代入语句(Concurrent Signal Assignment)
q<= a + b;
b<= a + q; --结果同一般编程语言不同。
条件信号代入语言(Conditional Signal Assignment)
目标信号 <= 表达式1 WHEN 条件1 ELSE
表达式2 WHEN 条件2 ELSE
表达式3 WHEN 条件3 ELSE
......
表达式n WHEN 条件n ELSE
表达式n+1;
选择信号代入语言(Selective Signal Assignment)
WITH 表达式 SELECT
目标信号 <= 表达式1 WHEN 条件1
表达式2 WHEN 条件 2
表达式3 WHEN 条件 3
......
表达式n WHEN 条件 n
表达式n+1 WHEN OTHERS;
5、参数传递语句(GENERIC)
GENERIC用于不同层次设计模块之间信息的传递和参数的传递,令器件模块化和通用化。可用于位矢量的长度、数组的位长、器件的延时时间等参数的传递,必须是整数型,其它类型无法综合。
6、通用模块、元件调用语句(COMPONENT)
COMPONENT语句指定了本结构中所调用的是哪一个模块,这些模块在元件库中。
格式:
COMPONENT 元件名 --指定调用元件
GENERIC 说明; --被调用元件参数映射
PORT 说明; --被调用元件端口映射
END COMPONENT;
7、端口映射语句(PORT MAP)
端口映射语句将现成元件的端口信号映射成高层次设计电路中的信号。
标号名: 元件名 PORT MAP (信号,...);
e.g
U1: and2 PORT MAP(d0, d1, U0);
8、生成语句(GENERATE)
用来产生多个相同的结构和描述规则结构,如块矩阵,元件例化和进程。
标号: FOR 变量 IN 区间 GENERATE
并行处理的生成语句
END GENERATE [标号名];
标号: IF 条件 GENERATE
并行处理的生成语句
END GENERATE [标号名];