在系统可编程技术
第 12讲
VHDL语言语言主要描述
语句
VHDL主要描述语句
并行处理语句
顺序处理语句
在结构体
( ARCHITECTURE)

执行的语句
在进程( PROCESS)
函数( FUNCTION)
过程( PROCEDURE)
中执行的语句
硬件
描述
的特

高级
语言
的特

VHDL顺序语句
?顺序语句只能出现在进程( Process)、函数
( Function)和过程( Procedure)中;
?顺序语句像高级计算机语言一样,按其出现的
先后顺序依次执行;
?用来描述复杂的逻辑关系及逻辑运算。
常用的顺序处理语句有,
信号代入语句
变量赋值语句
CASE语句
IF语句
LOOP语句
VHDL顺序语句
1、信号代入语句
格式,
目的信号量 <=信号量表达式;
目的信号量 <=信号量表达式 AFTER N ns;
注意,
信号代入语句和关系操作符相同,<=”,但其使
用位置不一样,应根据上下文加以判断;
信号代入语句两边信号量的数据类型及位长度必须
一致。
延时只在仿真时起作用,逻辑综合时被忽略。
信号赋值不是立即发生,而是在进程结束时 。
VHDL顺序语句
例,
architecture abc of example is
signal c,STD_LOGIC;
begin
PROCESS(a,b)
begin
c<=a and b after 10 ns;
a<=?1?;
b<=?1?;
b<=?0?;
out<=c;
end process;
end abc;
注意信
号定义
的位置
VHDL顺序语句
2、变量代入语句
格式,
变量,=表达式;
注意,
变量是局部量,只能在所定义的进程、过程、和函
数中使用。
变量赋值是立即发生,不能加延时。
在进程中描述逻辑关系及算法时最好使用变量,以
避免出错。
进程结束时,变量的结果只能由信号带出。
VHDL顺序语句
例,
architecture abc of example is
begin
PROCESS(a,b)
variable tmp:std_logic;
begin
tmp:=a and b;
out<=tmp;
end process;
end abc;
注意变
量定义
的位置
VHDL顺序语句
3,CASE语句
格式,
Case 表达式 Is
WHEN 选择值 =>顺序处理语句 ;
……
WHEN 选择值 =>顺序处理语句 ;
WHEN OTHERS =>顺序处理语句 ;
End case;
注意,
CASE语句至少包含一个条件句;
CASE语句中条件表达式的值必须列举穷尽,但不
能重复;
无法穷举,用 OTHERS表达。
V
H
D
L




例,四选一数据选择器
architecture abc of example is
signal sel:std_logic_vector(1 downto 0);
begin
sel<=b &a;
process(sel)
begin
case sel is
when,00” => f<=i0;
when,01” => f<=i1;
when,10” => f<=i2;
when,11” => f<=i3;
when others => null;
end case;
end process;
end abc;
为什么
还要
others
VHDL顺序语句
4,IF语句
格式 1,
IF 条件 THEN 顺序处理语句;
END IF;
格式 2,
IF 条件 THEN 顺序处理语句;
ELSE 顺序处理语句;
END IF;
格式 3,
IF 条件 1 THEN 顺序处理语句;
ELSIF 条件 2 THEN 顺序处理语句;
……
ELSE 顺序处理语句;
END IF;
注意,IF 语句隐含有优先级的关系,可用来设计具有优
先权的电路 。
V
H
D
L




例,四选一数据选择器
architecture abc of example is
signal sel:std_logic_vector(1 downto 0);
begin
sel<=b &a;
process(sel)
begin
IF sel=“00” then f<=i0;
ELSIF sel=“01”then f<=i1;
ELSIF sel=“10”then f<=i2;
ELSIF sel=“11”then f<=i1;
END IF;
end process;
end abc;
不需穷
尽所有
情况
VHDL顺序语句
5,LOOP语句 —FOR循环
格式,
标号,FOR 循环变量 IN 循环次数范围 LOOP
顺序处理语句;
……
END LOOP;
注意,
循环变量只是一个临时变量,由 LOOP语句自动定
义,不需预先定义;
LOOP语句范围内不要再使用其它与该循环变量同
名的标识符。
循环次数完成后程序自动退出循环。
VHDL顺序语句
例,8位奇偶校验电路
architecture abc of example is
begin
PROCESS(a)
variable tmp:std_logic;
begin
tmp:=?0?;
FOR i IN 0 to 7 LOOP
tmp:=tmp XOR a(i);
END LOOP;
Y<=tmp;
end process;
end abc;
能否定
义为信
号?
VHDL顺序语句
5,LOOP语句 —WHILE循环
格式,
标号,WHILE 循环控制条件 LOOP
顺序处理语句;
……
END LOOP;
注意,
循环控制条件没有直接给出循环次数,可以是任何
条件表达式,条件为“真”,进行循环,条件为“假”,
退出循环。
条件表达式需初始化。
VHDL顺序语句
例,8位奇偶校验电路
architecture abc of example is
begin
PROCESS(a)
variable tmp:std_logic;
begin
tmp:=?0?;
i:=0;
WHILE (i<8) LOOP
tmp:=tmp XOR a(i);
i:=i+1;
END LOOP;
Y<=tmp;
end process;
end abc;
注意变
量 I 初
始化和
在循环
中的加 1
处理
VHDL并行语句
?并行语句是在结构体中执行的语句;
?语句的执行与程序书写的顺序无关,故可以颠
倒书写顺序,不影响程序设计功能;
?它体现了硬件电路的运行特点。
常用的顺序处理语句有,
进程语句
并发信号代入语句
条件信号代入语句
选择信号代入语句
BLOCK语句
VHDL并行语句
1、进程语句( PROCESS)语句
格式,
标号,PROCESS(信号 1,信号 2,…… )
BEGIN
……
END PROCESS 标号;
注意,
进程语句本身是并行语句,进程的内部才是顺序执行;
同一结构体中,可以有多个进程,它们之间是并行关
系。
进程之间通过信号传递信息。
VHDL并行语句
例,
architecture abc of example is
signal c,STD_LOGIC;
begin
JC1:PROCESS(a,b)
begin
c<=a and b after 10 ns;
end process JC1;
JC2:PROCESS(c)
begin
if (c=?1? ) then d<=?1?;
else d<=?0?;
end process JC2;
end abc;
两进程
通过信
号 C传
递信息
VHDL并行语句
2、信号代入语句
格式,
目的信号量 <=信号量表达式;
目的信号量 <=信号量表达式 AFTER N ns;
注意,
进程中出现的代入语句称为信号代入语句;
结构体中出现的代入语句称为并发信号代入语句。
VHDL并行语句
例,
architecture abc of example is
signal c,STD_LOGIC;
begin
x<= a or b;
y<= a xnor b;
JC1:PROCESS(a,b)
begin
c<=a and b after 10 ns;
end process JC1;
end abc;
并发
信号
代入
语句
信号
代入
语句
VHDL并行语句
3、条件信号代入语句
格式,
目的信号量 <=表达式 1 WHEN 条件 1 ELSE
表达式 2 WHEN 条件 2 ELSE
……
表达式 n;
注意,
条件信号代入语句的功能与进程中的 IF语句相同;
ELSE不能省略,只有最后语句才有分号;
有优先级关系,第一句优先级最高;
允许有重叠现象。
VHDL并行语句
例,8-3优先权编码器
architecture abc of example is
begin
out<=,000” when input(0)=?1? else
,001” when input(1)=?1? else
,010” when input(2)=?1? else
,011” when input(3)=?1? else
,100” when input(4)=?1? else
,101” when input(5)=?1? else
,110” when input(6)=?1? else
,111” when input(7)=?1? else
,XXX”;
end abc;
VHDL并行语句
4、选择信号代入语句
格式,
WITH 表达式 SELECT
目的信号量 <=表达式 1 WHEN 条件 1,
表达式 2 WHEN 条件 2,
……
表达式 n WHEN OTHERS ;
注意,
选择信号代入语句的功能与进程中的 CASE语句相
同;
每句后是逗号,只有最后语句才有分号;
无优先级关系;
不允许条件有重叠现象,条件必须涵盖全部。
VHDL并行语句
例,4选 1数据选择器
architecture abc of example is
begin
sel<=a & b;
with sel select
f <=i0 when,00”,
i1 when,01”,
i2 when,10”,
i3 when,11”,
?x? when others;
end abc;
VHDL并行语句
5,BLOCK(块)语句
格式,
标号,BLOCK
BEGIN
并行处理语句;
END BLOCK 标号;
注意,
块语句可以看成是结构体的子模块;
块语句可以使结构体层次鲜明,结构明确;
块内定义的数据类型、数据对象(信号、变量、常
量)、子程序等都是局部的;
VHDL并行语句
例,architecture abc of example is
begin
a1:BLOCK
signal x:std_logic;
begin
x<=a and b;
c<=x;
end BLOCK a1;
b1:BLOCK
signal y:std_logic;
begin
y<=a or c;
end BLOCK b1;
end abc;