第3章VHDL语法基础77页PPT
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1,否则此信号维持原值。
例2:用IF语句描述图示硬件电路。
LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL;
此处的库、程序包使用 说明是否必要
ENTITY EXAMPLE IS
PORT (A,B,C: IN BOOLEAN;OUTPUT:OUT BOOLEAN);
A
OUTPUT
B
对应的硬件电路
END ARCHITECTURE ART;
例3: 由两个2选1多路选择器构成的电路逻辑描述如图所示, 其中,当P1和P2为高电平时下端的通道接通。
P1
P2 S
B
B
S
B
C
A
Z
A
AHale Waihona Puke MUX21MUX21
SIGNA A,B,C,P1,P2,Z: BIT; ... IF (P1=‘1’) THEN
例:WHILE COUNTER <=100 LOOP IF COUNTER>50 THEN REPORT "THE COUNTER IS OVER 50"; END IF; … END LOOP;
END IF;
END LOOP; --当I=1时返回LOOP语句继续比较
#金
四、REPORT语句
语句格式: [标号] REPORT “输出字符串” [SEVERIY 出错级别]
REPORT语句不增加硬件的任何功能,仿真时可用该语句提 高可读性。
REPORT语句等价于断言语句。 出错级别默认为NOTE。
4. EXIT- LOOP语句 EXIT [LOOP 标号] [WHEN 条件表达式];
EXIT语句用来结束LOOP语句。分四种控制: ① 单独EXIT时,无条件结束LOOP语句的执行。 ② EXIT [LOOP 标号],跳转到指定的LOOP标号处。 ③ EXIT [WHEN 条件],条件值=TRUE,跳出LOOP语句;条件
END CASE; END PROCESS; END ARCHITECTURE ART;
S1 S2 D C B A
‘X’--强未知的
S2 S1
D C
Z B A
注意:本例的第五个条件名是必需的,因为对于定义 STD_LOGIC_VECTOR数据类型的S,在VHDL综合过程中,它 可能的选择值除了00、01、10和11外,还可以有其他定义于 STD_LOGIC的选择值。
择值比较,相同执行对应的顺序语句,否则执行OTHERS 后 的顺序语句或结束语句END CASE。 语句中的选择值必须列举穷尽,又不能重复。 选择值不能列举穷尽时,语句WHEN OTHERS =>顺序语句; 通常不能缺省。
例1:用CASE语句描述4选1多路选择器。
LIBRARY IEEE;
BEGIN L1: WHILE N<=8 LOOP --这里的“<=”是小于等于的意思 OUTPUTX(N)<=INPUTX(N+8); N:=N+1; END LOOP L1; END PROCESS SHIFT1;
说明:在WHILE-LOOP语句的顺序语句中增加了一条循环次数 的计算语句,用于循环语句的控制。在循环执行中,当N的值等 于9时将跳出循环。
ELSIF(SR (3)=‘0’) THEN SC <="001";
ELSIF(SR (2)=‘0’) THEN SC <="101";
ELSIF(SR (1)=‘0’) THEN SC <="011";
ELSE SC <="111";
END IF; END PROCESS; END ARCHITECTURE ART;
PROCESS(A) IS
BEGIN TMP <=‘0’;
FOR N IN 0 TO 7 LOOP
TMP <=TMP XOR A(N);
END LOOP; Y<= TMP;
结果:
END PROCESS;
Y=‘0’— A含偶数个‘1’,
END ARCHITECTURE ART;
Y=‘1’— A含奇数个‘1’。
开始处;条件值=FALSE,不执行NEXT,继续向下执行。 ④ 全不缺省时,条件值=TRUE,跳到指定的LOOP标号处(注意:
并不一定是本循环语句的LOOP标号);条件值=FALSE,不 执行NEXT,继续向下执行。
例1: 例2:
… L1: FOR CNT IN 1 TO 8 LOOP S1:A(CNT):=‘0’; NEXT WHEN (B=C); S2 :A(CNT+8):=‘0’;
循环变量的值在每一次的循环中都会发生变化。 循环次数范围表示循环变量在循环过程中的取值范围,显然
FOR模式的循环次数是明确的。
例1: 利用LOOP语句中的循环变量简化同类顺序语句的表达式 的使用。 SIGNA A,B,C: STD_LOGIC_VECTOR(1 TO 3); … FOR N IN 1 TO 3 LOOP A(N)<=B(N) AND C(N); END LOOP;
SC:OUT STD_LOGIC_VECTOR(0 TO 2)); END ENTITY CODER; ARCHITECTURE ART OF CODER IS BEGIN PROCESS(SR) IS BEGIN
IF(SR(7)=‘0’) THEN SC<="000"; --(SR(7)=‘0’)
2. WHILE-LOOP语句: [标号]:WHILE 循环控制条件 LOOP 顺序语句
END LOOP [标号]; 循环控制条件为真执行顺序语句;为假结束循环。显然
WHILE模式的循环次数是未知的。
例:
WHILE-LOOP语句的使用。 SHIFT1: PROCESS(INPUTX) IS
VARIABLE N: POSITIVE:=1;
顺序语句与并行语句的双重特性,放在进程、块、子程序之内 是顺序语句,被放在进程、块、子程序之外是并行语句。
一、IF语句
语句结构:
IF 条件句 THEN 顺序语句;
{ELSIF 条件句 THEN 顺序语句};
[ELSE 顺序语句];
END IF;
IF语句是一种条件语句,根据语句中所设置的一种或多种 条件,有选择地执行指定的顺序语句。
END ENTITY EXAMPLE;
ARCHITECTURE ART OF EXAMPLE IS
BEGIN
PROCESS(A,B,C) IS
VARIABLE N: BOOLEAN;
BEGIN
C
IF A THEN N:=B;
ELSE N:=C; END IF; OUTPUT <=N; END PROCESS;
条件值是布尔型(TRUE或FALSE)。 条件=TRUE,执行THEN后顺序语句,条件全为FALSE时,
才会执行ELSE后顺序语句或结束语句END IF。
根据大括号和方括号部分可选情况,共有三种结构。
例1: IF (A>B)THEN OUTPUT<=‘1 ’;
END IF; 说明:若条件(A>B)检测结果为TRUE,则向信号OUTPUT赋值
--设初始值
FOR I IN 1 DOWNTO 0 LOOP
IF (A(I)=‘1’ AND B(I)=‘0’) THEN
A_LESS _B<=FALSE;
EXIT;
ELSIF (A(I)=‘0’ AND B(I)=‘1’) THEN
A_LESS _B<=TRUE;
--A<B
EXIT;
ELSE NULL;
ELSIF(SR(6)=‘0’) THEN SC <="100"; --(SR(7)=‘1’) AND (SR(6)=‘0’)
ELSIF(SR (5)=‘0’) THEN SC <="010"; --(SR (7)=‘1’)AND(SR
(6)=‘1’)AND(SR (5)=‘0’)
ELSIF(SR (4)=‘0’) THEN SC <="110";
SIGNA S :STD_LOGIC_VECTOR(1 DOWNTO 0);
BEGIN
S<=S1 & S2;
PROCESS(S,A,B,C,D) IS
BEGIN
并置运算符号
CASE S IS WHEN "00"=>Z<=A; WHEN "01"=>Z<=B; WHEN "10"=>Z<=C; WHEN "11"=>Z<=D; WHEN OTHERS =>Z<='X';
第3章 VHDL语法基础
3.1 顺序语句 3.2 并行语句
3.1 顺序语句
VHDL有两种类型语句:顺序语句和并行语句(并发语句)。 顺序语句的执行(指仿真执行)顺序是与它们的书写顺序基本
一致的。 并行语句的执行是同步进行的,或者说是并行运行的,其执行
方式与书写的顺序无关。 顺序语句又分两种情况:一种是真正的顺序语句。另一种具有
值=FALSE,继续LOOP循环。 ④ 全不缺省时,条件值=TRUE,跳出LOOP语句;条件值
=FALSE,跳到指定的LOOP标号处。
例: SIGNAL A,B:STD_LOGIC_VECTOR(1 DOWNTO 0);
SIGNAL A_LESS_B:BOOLEAN;
…
A_LESS_B<=FLASE;
ENTITY P_CHECK IS PORT (A:IN STD_LOGIC_VECTOR(7 DOWNTO 0); Y:OUT STD_LOGIC);
END ENTITY P_CHECK;
ARCHITECTURE ART OF P_CHECK IS SIGNAL TMP: STD_LOGIC;
BEGIN
说明:本例设计的是一个优先级编码器电路,因SR(7)先测试, 所以优先级最高。
二、CASE 语句 语句结构:
CASE 表达式 IS WHEN 选择值 =>顺序语句; WHEN 选择值 =>顺序语句;
… [ WHEN OTHERS =>顺序语句;] END CASE;
符号=>相当于THEN。 执行时,首先计算表达式的值,然后将该值与WHEN中的选
3. NEXT- LOOP语句 NEXT [LOOP 标号] [WHEN 条件表达式];
NEXT语句是对LOOP语句作有条件或无条件的转向控制。分 四种控制:
① 单独NEXT时,跳到本循环LOOP语句开始处。 ② NEXT [LOOP 标号],跳转到指定的LOOP标号处。 ③ NEXT [WHEN 条件],条件值=TRUE,跳到本循环LOOP语句
S1
USE IEEE.STD_LOGIC_1164.ALL;
S2
ENTITY MUX41 IS
D
PORT(S1,S2: IN STD_LOGIC;
C
A,B,C,D:IN STD_LOGIC;
Z: OUT STD_LOGIC);
B
END ENTITY MUX41;
A
S2 S1
D C
Z B A
ARCHITECTURE ART OF MUX41 IS
Z<=A; --执行条件是(P1=‘1’) ELSIF (P2=‘0’) THEN Z<=B; --执行条件是(P1=‘0’)AND (P2=‘0’)
ELSE Z<=C; --执行条件是(P1=‘0’)AND (P2=‘1’) END IF;
例4: LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL; ENTITY CODER IS PORT ( SR:IN STD_LOGIC_VECTOR(0 TO 7);
END LOOP L1;
… L1: FOR CNT IN 1 TO 8 LOOP S1:A(CNT):=‘0’; K:=0; L2:LOOP S2:B(k):=‘0’; NEXT L1 WHEN (E>F); S3:B(k+8):=‘0’; K:=K+1; END LOOP L2; END LOOP L1; …
说明:此段程序等效于顺序执行以下三个信号赋值操作。 A(1)<=B(1) AND C(1); A(2)<=B(2) AND C(2); A(3)<=B(3) AND C(3);
例2: FOR-LOOP语句的使用(8位奇偶校验逻辑电路)。
LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL;
如果使用BIT_VECTOR数据类型, WHEN OTHERS句 子就不必了。
注:书上的设计描述方法与此处不同。
三、LOOP语句
LOOP语句就是循环语句,它可以使所包含的一组顺序语句 被循环执行,其执行次数可由设定的循环参数决定,循环的 方式由NEXT和EXIT语句来控制。
1. FOR-LOOP语句: [标号]:FOR 循环变量 IN 循环次数范围 LOOP 顺序语句 END LOOP [标号];
例2:用IF语句描述图示硬件电路。
LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL;
此处的库、程序包使用 说明是否必要
ENTITY EXAMPLE IS
PORT (A,B,C: IN BOOLEAN;OUTPUT:OUT BOOLEAN);
A
OUTPUT
B
对应的硬件电路
END ARCHITECTURE ART;
例3: 由两个2选1多路选择器构成的电路逻辑描述如图所示, 其中,当P1和P2为高电平时下端的通道接通。
P1
P2 S
B
B
S
B
C
A
Z
A
AHale Waihona Puke MUX21MUX21
SIGNA A,B,C,P1,P2,Z: BIT; ... IF (P1=‘1’) THEN
例:WHILE COUNTER <=100 LOOP IF COUNTER>50 THEN REPORT "THE COUNTER IS OVER 50"; END IF; … END LOOP;
END IF;
END LOOP; --当I=1时返回LOOP语句继续比较
#金
四、REPORT语句
语句格式: [标号] REPORT “输出字符串” [SEVERIY 出错级别]
REPORT语句不增加硬件的任何功能,仿真时可用该语句提 高可读性。
REPORT语句等价于断言语句。 出错级别默认为NOTE。
4. EXIT- LOOP语句 EXIT [LOOP 标号] [WHEN 条件表达式];
EXIT语句用来结束LOOP语句。分四种控制: ① 单独EXIT时,无条件结束LOOP语句的执行。 ② EXIT [LOOP 标号],跳转到指定的LOOP标号处。 ③ EXIT [WHEN 条件],条件值=TRUE,跳出LOOP语句;条件
END CASE; END PROCESS; END ARCHITECTURE ART;
S1 S2 D C B A
‘X’--强未知的
S2 S1
D C
Z B A
注意:本例的第五个条件名是必需的,因为对于定义 STD_LOGIC_VECTOR数据类型的S,在VHDL综合过程中,它 可能的选择值除了00、01、10和11外,还可以有其他定义于 STD_LOGIC的选择值。
择值比较,相同执行对应的顺序语句,否则执行OTHERS 后 的顺序语句或结束语句END CASE。 语句中的选择值必须列举穷尽,又不能重复。 选择值不能列举穷尽时,语句WHEN OTHERS =>顺序语句; 通常不能缺省。
例1:用CASE语句描述4选1多路选择器。
LIBRARY IEEE;
BEGIN L1: WHILE N<=8 LOOP --这里的“<=”是小于等于的意思 OUTPUTX(N)<=INPUTX(N+8); N:=N+1; END LOOP L1; END PROCESS SHIFT1;
说明:在WHILE-LOOP语句的顺序语句中增加了一条循环次数 的计算语句,用于循环语句的控制。在循环执行中,当N的值等 于9时将跳出循环。
ELSIF(SR (3)=‘0’) THEN SC <="001";
ELSIF(SR (2)=‘0’) THEN SC <="101";
ELSIF(SR (1)=‘0’) THEN SC <="011";
ELSE SC <="111";
END IF; END PROCESS; END ARCHITECTURE ART;
PROCESS(A) IS
BEGIN TMP <=‘0’;
FOR N IN 0 TO 7 LOOP
TMP <=TMP XOR A(N);
END LOOP; Y<= TMP;
结果:
END PROCESS;
Y=‘0’— A含偶数个‘1’,
END ARCHITECTURE ART;
Y=‘1’— A含奇数个‘1’。
开始处;条件值=FALSE,不执行NEXT,继续向下执行。 ④ 全不缺省时,条件值=TRUE,跳到指定的LOOP标号处(注意:
并不一定是本循环语句的LOOP标号);条件值=FALSE,不 执行NEXT,继续向下执行。
例1: 例2:
… L1: FOR CNT IN 1 TO 8 LOOP S1:A(CNT):=‘0’; NEXT WHEN (B=C); S2 :A(CNT+8):=‘0’;
循环变量的值在每一次的循环中都会发生变化。 循环次数范围表示循环变量在循环过程中的取值范围,显然
FOR模式的循环次数是明确的。
例1: 利用LOOP语句中的循环变量简化同类顺序语句的表达式 的使用。 SIGNA A,B,C: STD_LOGIC_VECTOR(1 TO 3); … FOR N IN 1 TO 3 LOOP A(N)<=B(N) AND C(N); END LOOP;
SC:OUT STD_LOGIC_VECTOR(0 TO 2)); END ENTITY CODER; ARCHITECTURE ART OF CODER IS BEGIN PROCESS(SR) IS BEGIN
IF(SR(7)=‘0’) THEN SC<="000"; --(SR(7)=‘0’)
2. WHILE-LOOP语句: [标号]:WHILE 循环控制条件 LOOP 顺序语句
END LOOP [标号]; 循环控制条件为真执行顺序语句;为假结束循环。显然
WHILE模式的循环次数是未知的。
例:
WHILE-LOOP语句的使用。 SHIFT1: PROCESS(INPUTX) IS
VARIABLE N: POSITIVE:=1;
顺序语句与并行语句的双重特性,放在进程、块、子程序之内 是顺序语句,被放在进程、块、子程序之外是并行语句。
一、IF语句
语句结构:
IF 条件句 THEN 顺序语句;
{ELSIF 条件句 THEN 顺序语句};
[ELSE 顺序语句];
END IF;
IF语句是一种条件语句,根据语句中所设置的一种或多种 条件,有选择地执行指定的顺序语句。
END ENTITY EXAMPLE;
ARCHITECTURE ART OF EXAMPLE IS
BEGIN
PROCESS(A,B,C) IS
VARIABLE N: BOOLEAN;
BEGIN
C
IF A THEN N:=B;
ELSE N:=C; END IF; OUTPUT <=N; END PROCESS;
条件值是布尔型(TRUE或FALSE)。 条件=TRUE,执行THEN后顺序语句,条件全为FALSE时,
才会执行ELSE后顺序语句或结束语句END IF。
根据大括号和方括号部分可选情况,共有三种结构。
例1: IF (A>B)THEN OUTPUT<=‘1 ’;
END IF; 说明:若条件(A>B)检测结果为TRUE,则向信号OUTPUT赋值
--设初始值
FOR I IN 1 DOWNTO 0 LOOP
IF (A(I)=‘1’ AND B(I)=‘0’) THEN
A_LESS _B<=FALSE;
EXIT;
ELSIF (A(I)=‘0’ AND B(I)=‘1’) THEN
A_LESS _B<=TRUE;
--A<B
EXIT;
ELSE NULL;
ELSIF(SR(6)=‘0’) THEN SC <="100"; --(SR(7)=‘1’) AND (SR(6)=‘0’)
ELSIF(SR (5)=‘0’) THEN SC <="010"; --(SR (7)=‘1’)AND(SR
(6)=‘1’)AND(SR (5)=‘0’)
ELSIF(SR (4)=‘0’) THEN SC <="110";
SIGNA S :STD_LOGIC_VECTOR(1 DOWNTO 0);
BEGIN
S<=S1 & S2;
PROCESS(S,A,B,C,D) IS
BEGIN
并置运算符号
CASE S IS WHEN "00"=>Z<=A; WHEN "01"=>Z<=B; WHEN "10"=>Z<=C; WHEN "11"=>Z<=D; WHEN OTHERS =>Z<='X';
第3章 VHDL语法基础
3.1 顺序语句 3.2 并行语句
3.1 顺序语句
VHDL有两种类型语句:顺序语句和并行语句(并发语句)。 顺序语句的执行(指仿真执行)顺序是与它们的书写顺序基本
一致的。 并行语句的执行是同步进行的,或者说是并行运行的,其执行
方式与书写的顺序无关。 顺序语句又分两种情况:一种是真正的顺序语句。另一种具有
值=FALSE,继续LOOP循环。 ④ 全不缺省时,条件值=TRUE,跳出LOOP语句;条件值
=FALSE,跳到指定的LOOP标号处。
例: SIGNAL A,B:STD_LOGIC_VECTOR(1 DOWNTO 0);
SIGNAL A_LESS_B:BOOLEAN;
…
A_LESS_B<=FLASE;
ENTITY P_CHECK IS PORT (A:IN STD_LOGIC_VECTOR(7 DOWNTO 0); Y:OUT STD_LOGIC);
END ENTITY P_CHECK;
ARCHITECTURE ART OF P_CHECK IS SIGNAL TMP: STD_LOGIC;
BEGIN
说明:本例设计的是一个优先级编码器电路,因SR(7)先测试, 所以优先级最高。
二、CASE 语句 语句结构:
CASE 表达式 IS WHEN 选择值 =>顺序语句; WHEN 选择值 =>顺序语句;
… [ WHEN OTHERS =>顺序语句;] END CASE;
符号=>相当于THEN。 执行时,首先计算表达式的值,然后将该值与WHEN中的选
3. NEXT- LOOP语句 NEXT [LOOP 标号] [WHEN 条件表达式];
NEXT语句是对LOOP语句作有条件或无条件的转向控制。分 四种控制:
① 单独NEXT时,跳到本循环LOOP语句开始处。 ② NEXT [LOOP 标号],跳转到指定的LOOP标号处。 ③ NEXT [WHEN 条件],条件值=TRUE,跳到本循环LOOP语句
S1
USE IEEE.STD_LOGIC_1164.ALL;
S2
ENTITY MUX41 IS
D
PORT(S1,S2: IN STD_LOGIC;
C
A,B,C,D:IN STD_LOGIC;
Z: OUT STD_LOGIC);
B
END ENTITY MUX41;
A
S2 S1
D C
Z B A
ARCHITECTURE ART OF MUX41 IS
Z<=A; --执行条件是(P1=‘1’) ELSIF (P2=‘0’) THEN Z<=B; --执行条件是(P1=‘0’)AND (P2=‘0’)
ELSE Z<=C; --执行条件是(P1=‘0’)AND (P2=‘1’) END IF;
例4: LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL; ENTITY CODER IS PORT ( SR:IN STD_LOGIC_VECTOR(0 TO 7);
END LOOP L1;
… L1: FOR CNT IN 1 TO 8 LOOP S1:A(CNT):=‘0’; K:=0; L2:LOOP S2:B(k):=‘0’; NEXT L1 WHEN (E>F); S3:B(k+8):=‘0’; K:=K+1; END LOOP L2; END LOOP L1; …
说明:此段程序等效于顺序执行以下三个信号赋值操作。 A(1)<=B(1) AND C(1); A(2)<=B(2) AND C(2); A(3)<=B(3) AND C(3);
例2: FOR-LOOP语句的使用(8位奇偶校验逻辑电路)。
LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL;
如果使用BIT_VECTOR数据类型, WHEN OTHERS句 子就不必了。
注:书上的设计描述方法与此处不同。
三、LOOP语句
LOOP语句就是循环语句,它可以使所包含的一组顺序语句 被循环执行,其执行次数可由设定的循环参数决定,循环的 方式由NEXT和EXIT语句来控制。
1. FOR-LOOP语句: [标号]:FOR 循环变量 IN 循环次数范围 LOOP 顺序语句 END LOOP [标号];