第7章 VHDL语句

合集下载

8.VHDL基本语句和函数

8.VHDL基本语句和函数

4)
格式
IF
条件1 THEN 条件1 顺序语句1 顺序语句1; 条件2 ELSIF 条件2 THEN 顺序语句2 顺序语句2; …… 条件n ELSIF 条件n THEN 顺序语句n; 顺序语句n; ELSE 顺序语句n+1; 顺序语句n+1; IF; END IF;
注意
这类语句可以实现不同类型电路的描述。 这类语句可以实现不同类型电路的描述。 其任一分支顺序语句的执行条件是以上各分支 条件相与, 条件相与,即语句中顺序语句的执行条件具有 向上相与的功能。 向上相与的功能。
注意ቤተ መጻሕፍቲ ባይዱ
•条件句中的选择值必须在表达式的取值范围内; 条件句中的选择值必须在表达式的取值范围内; 条件句中的选择值必须在表达式的取值范围内 •CASE语句中每一条件句的选择只能出现一次,相同 CASE语句中每一条件句的选择只能出现一次 CASE语句中每一条件句的选择只能出现一次, 选择值的条件语句不能重复出现; 选择值的条件语句不能重复出现; •所有表达式的值都必须穷举,不能穷举的值用 所有表达式的值都必须穷举, 所有表达式的值都必须穷举 OTHERS表示 表示。 OTHERS表示。
Library ieee; use ieee.std_logic_1164.all; entity test_06 is port( d: in std_logic; x: out std_logic); end test_06; architecture test_06 of test_06 is signal a: std_logic_vector(3 downto 0); signal b: std_logic_vector(2 downto 0); begin process begin a<="1010"; b<="111"; if(a>b) then x<=d; else x<='0'; end if; end process; end test_06;

VHDL语言描述语句

VHDL语言描述语句

LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY mux4 IS PORT( input:IN STD_LOGIC_VECTOR(3 DOWNTO 0); en:IN STD_LOGIC_VECTOR(1 DOWNTO 0); y:OUT STD_LOGIC); END mux4; ARCHITECTURE aa OF mux4 IS BEGIN PROCESS(input,en) BEGIN IF (en="00") THEN y<=input(0); ELSIF (en="01") THEN y<=input(1); 例2(例5-9)四选一数据选择器 ELSIF (en="10") THEN y<=input(2); ELSE y<=input(3); END IF; END PROCESS; END aa;
例程:
PROCESS(clk) BEGIN IF clk’event and clk=‘1’ THEN q<=d; qb<=NOT d; END IF; END PROCESS;
(2)用作选择控制时的IF语句书写格式为 IF (条件) THEN 顺序处理语句1; ELSE 顺序处理语句2; END IF;
语法说明:
时钟沿的VHDL描述方法总结(3种): 上升沿描述1: clk’event and clk=‘1’ ; 下降沿描述1: clk’event and clk=‘0’ ;
上升沿描述2:
clk='1' AND clk'EVENT AND clk'LAST_VALUE='0‘ 下降沿描述2: clk=‘0' AND clk'EVENT AND clk'LAST_VALUE=‘1‘

vhdl生成语句的使用

vhdl生成语句的使用

生成语句生成语句(GENERATE)是一种可以建立重复结构或者是在多个模块的表示形式之间进行选择的语句。

由于生成语句可以用来产生多个相同的结构,因此使用生成语句就可以避免多段相同结构的VHDL程序的重复书写(相当于‘复制’)。

生成语句有两种形式:FOR- GENERATE模式和IF- GENERATE模式。

FOR- GENERATE 模式的生成语句FOR- GENERATE 模式生成语句的书写格式为:[标号:]FOR 循环变量 IN 离散范围 GENERATE<并行处理语句>;END GENERATE [标号];其中循环变量的值在每次的循环中都将发生变化;离散范围用来指定循环变量的取值范围,循环变量的取值将从取值范围最左边的值开始并且递增到取值范围最右边的值,实际上也就限制了循环的次数;循环变量每取一个值就要执行一次GENERATE语句体中的并行处理语句;最后FOR- GENERATE模式生成语句以保留字END GENERATE [标号:];来结束GENERATE语句的循环。

生成语句的典型应用是存储器阵列和寄存器。

下面以四位移位寄存器为例,说明FOR- GENERATE模式生成语句的优点和使用方法。

下图所示电路是由边沿D触发器组成的四位移位寄存器,其中第一个触发器的输入端用来接收四位移位寄存器的输入信号,其余的每一个触发器的输入端均与左面一个触发器的Q端相连。

图用D触发器构成的四位移位寄存器根据上面的电路原理图,写出四位移位寄存器的VHDL描述如下。

LIBRARY IEEE;USE IEEE. STD_LOGIC_1164.ALL;ENTITY shift_reg ISPORT(di:IN STD_LOGIC;cp:IN STD_LOGIC;do:OUT STD_LOGIC);ARCHITECTURE structure OF shift_reg ISCOMPONENT dff --元件说明PORT(d:IN STD_LOGIC;clk:IN STD_LOGIC;q:OUT STD_LOGIC);END COMPONENT;SIGNAL q:STD_LOGIC_VECTOR(4 DOWNTO 0);BEGINdff1:dff PORT MAP (di,cp,q(1)); --元件例化dff2:dff PORT MAP (q(1),cp,q(2));dff3:dff PORT MAP (q(2),cp,q(3));dff4:dff PORT MAP (q(3),cp,do);END structure;在上例的结构体中有四条元件例化语句,这四条语句的结构十分相似。

VHDL基本语句

VHDL基本语句

PROCESS(a, b) BEGIN y<=a AND b; WAIT ON a, b; END PROCESS;
- - 错误语句
WAIT UNTIL表达式; WAIT UNTIL((x*10)<100); 建立一个隐式的敏感信号量表 一个隐式的敏感信号量表
WAIT FOR 时间表达式 WAIT FOR 20 ns; WAIT FOR (a*(b+c));
例:
LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY mux4 IS PORT(a,b,i0,i1,i2,i3: IN STD_LOGIC; q: OUT STD_LOGIC); END mux4; ARCHITECTURE mux4_behave OF mux4 IS SIGNAL sel: INTEGER RANGE 0 TO 3; BEGIN B: PROCESS(a,b,i0,i1,i2,i3) BEGIN
LIBRARY IEEE; USE IEEE. STD_LOGIC_1164.ALL; ENTITY dff IS PORT (clk,d: IN STD_LOGIC; q: OUT STD_LOGIC); END dff; ARCHITECTURE rtl OF dff IS BEGIN PROCESS(clk) BEGIN IF(clk′EVENT AND clk=′1′) THEN q<=d; END IF; END PROCESS; END rtl;
顺序语句
· WAIT语句; · 断言语句; · 信号代入语句; · 变量赋值语句; · IF语句; · CASE语句; · LOOP语句; · NEXT语句; · EXIT语句; · 过程调用语句; · NULL语句。

vhdl条件赋值语句

vhdl条件赋值语句

vhdl条件赋值语句vhdl是一种硬件描述语言,用于描述硬件电路的行为和结构。

在vhdl中,条件赋值语句是一种常用的语法结构,用于根据特定条件给变量赋值。

下面列举了10个关于vhdl条件赋值语句的例子。

1. 当输入信号X为1时,将输出信号Y赋值为0;否则将Y赋值为1。

```vhdlprocess (X)beginif X = '1' thenY <= '0';elseY <= '1';end if;end process;```2. 当输入信号A为0时,将输出信号B赋值为C的值;否则将B赋值为D的值。

```vhdlprocess (A, C, D)beginif A = '0' thenB <= C;elseB <= D;end if;end process;```3. 根据输入信号Sel的值,选择对应的输入信号并赋值给输出信号Out。

```vhdlprocess (Sel, In1, In2, In3)begincase Sel iswhen "00" =>Out <= In1;when "01" =>Out <= In2;when "10" =>Out <= In3;when others =>Out <= "0000";end case;end process;```4. 如果输入信号X大于等于Y,则将输出信号Z赋值为1;否则将Z赋值为0。

```vhdlprocess (X, Y)beginif X >= Y thenZ <= '1';elseZ <= '0';end if;end process;```5. 当输入信号Valid为1且输入信号Data的值为偶数时,将输出信号Even赋值为1;否则将Even赋值为0。

vhdl语言

vhdl语言

VHDL语言简介VHDL(VHSIC Hardware Description Language)即可高速集成电路硬件描述语言,是一种用于描述数字系统和电路的硬件描述语言。

它在1981年由美国国防部的高速集成电路联合委员会(VHSIC)开发,用于设计大规模集成电路。

VHDL是一种面向对象的语言,可以用于描述各种数字系统,从简单的逻辑门到复杂的处理器。

它提供了丰富的语法和语义,使得设计人员可以准确地描述他们的电路和系统。

VHDL的优势VHDL作为一种硬件描述语言,在数字系统设计中具有许多优势。

1.可重用性:VHDL允许设计人员创建可重用的模块和子系统,这些模块和子系统可以在不同的项目中重复使用,提高了设计效率和可维护性。

2.仿真和验证:VHDL具有强大的仿真和验证能力,可以在设计之前对系统进行全面的仿真和验证。

这有助于检测和纠正潜在的问题,并确保系统在硬件实现之前达到预期的功能。

3.抽象级别:VHDL允许设计人员在不同的抽象级别上描述系统,从高级的行为级别到底层的结构级别。

这使得设计人员可以根据需要在不同的级别上工作,并且可以更容易地进行系统级别的优化。

4.灵活性和可扩展性:VHDL支持灵活的设计方法和工作流程,并允许设计人员在设计过程中进行迭代和修改。

它还可以与其他常用的设计工具和方法集成,以满足特定的需求。

VHDL语言的基本结构VHDL语言由模块、实体、架构以及信号和过程等基本元素组成。

模块(Module)模块是VHDL中描述数字系统的最基本单位。

一个模块可以包含多个实体和架构,并通过连接信号进行通信。

每个模块都有一个顶层实体和一个或多个架构。

实体(Entity)实体是描述模块的接口和行为的抽象。

它定义了输入输出端口,以及模块对外部环境的接口。

一个实体可以有一个或多个架构。

架构(Architecture)架构描述模块的具体行为和内部结构。

它定义了模块的内部信号和过程,以及对外部信号和过程的接口。

vhdl if语句

vhdl if语句

vhdl if语句
嘿,你知道 VHDL 里的 if 语句吗?这玩意儿可太有意思啦!就好比你在走一条路,遇到不同的岔口,if 语句就像是那个帮你决定走哪条路的指示牌。

比如说,你正在设计一个数字电路,if 语句就能根据不同的条件来控制信号的走向。

咱就拿一个简单的例子来说吧,想象一下有个信号灯系统,红灯、黄灯、绿灯。

如果现在是红灯,那其他灯就得熄灭,这时候 if 语句就发挥作用啦!它就像个聪明的小指挥家,说:“嘿,如果是红灯,那就让红灯亮,其他灯都别亮。


在 VHDL 编程里,if 语句可灵活了呢!它能让你的设计变得超级智能。

你可以设置各种复杂的条件,就像给它穿上了不同的魔法外衣。

哎呀呀,它简直就是编程世界里的小精灵呀!
再比如,你设计一个温度控制系统,if 温度过高,那就启动风扇降温;if 温度过低,那就开启加热装置。

你看,这多神奇呀!它能根据实际情况做出最恰当的反应,是不是很厉害?
而且哦,if 语句还能嵌套使用呢,就像俄罗斯套娃一样,一层套一层。

这能让你的逻辑变得更加复杂和精细。

比如说,先判断一个大条件,然后在满足这个大条件的基础上,再判断小条件,这就像走迷宫一样,一层一层地深入。

你说,VHDL 的 if 语句是不是超级有趣,超级实用?它真的是让我
们的编程变得丰富多彩呀!我的观点就是,VHDL 的 if 语句是非常强
大且不可或缺的,它为我们的数字电路设计带来了无限的可能和便利!。

VHDL语言的顺序语句

VHDL语言的顺序语句
vhdl语言的顺序语 句
目 录
• 顺序语句概述 • 顺序语句概述 • 赋值语句 • 条件语句 • 循环语句 • 控制流语句
01
CATALOGUE
顺序语句概述
过程块(process block)
过程块是顺序语句的一种形式,它包含一系列的顺序语句,按照一定的顺序执行。
过程块通常在仿真过程中按照时间顺序逐行执行。
loop-statement循环语句
语法示例
```vhdl
loop_statement: process(some_signal)
loop-statement循环语句
01
02
begin
• 循环体
03
if some_condition then
loop-statement循环语句
• 条件满足时执行的代码
并行过程块(concurrent process block)
并行过程块是另一种形式的顺序语句,它包含一系列的顺序语句,这些语句在仿真过程中同时执行。
并行过程块通常用于描述数字系统的并发行为。
02
CATALOGUE
赋值语句
连续赋值语句
总结词
在连续赋值语句中,信号或变量的值 在每个仿真时间步都会更新。
case语句
end case;
```
conditional语句
描述:类似于其他编程语言中的三元操作符。
01
02
语法
```vhdl
03
04
signal_name <= "0" when condition else "1";
```
05
06
上述语句表示,如果条件为真,则将 `signal_name`设置为"0",否则设置为 "1"。

VHDL语言

VHDL语言
PORT (a, b : IN STD_LOGIC; co,so : OUT STD_LOGIC); END h_adder;
VHDL语言的基本结构
实体结构
ENTITY 实体名 IS PORT ( 端口名1,端口名2,…端口名n :方向 数据类型名; … 端口名a,端口名b,…端口名m :方向 数据类型名);
80年代初,产生VHDL(Very high speed IC HDL)语言。 1987.12 ,作为IEEE标准(87版)。 1993 ,经修改的VHDL再次被IEEE标准认证(93版)。 1995 ,中国国家技术监督局推荐为国家标准。
VHDL语言的优点
支持自上而下的设计方法(整体描述)
半加器描述事例: WHEN “00” => so<=‘0’; co<=‘0’ ; WHEN “01” => so<=‘1’; co<=‘0’ ; WHEN “10” => so<=‘1’; co<=‘0’ ; WHEN “11” => so<=‘0’; co<=‘1’ ;
P.42 表3-3
VHDL语言的基本结构
实体 用以描述外部端口
构造体 用以描述内部结构及行为
实体结构
ENTITY 实体名 IS PORT ( 端口名1,端口名2,…端口名n :方向 数据类型名; … 端口名a,端口名b,…端口名m :方向 数据类型名);
END 实体名;
半加器实体说明举例 ENTITY h_adder IS
。 l任何标识符必须以英文字母开头。 l必须是单一下划线“_”,且其前后都必须有英文字母或数字。 l标识符中的英语字母不分大小写。 l允许包含图形符号(如回车符、换行符等),也允许包含空格符。

vhdl语法

vhdl语法

在VHDL语言里,不同类型的数据信号之间不能互 相赋值。当需要不同类型数据之间传递信息时,就需 要类型转换函数将其中的一种类型数据转换为另一中 数据类型后,再进行信号的传递。
• 1999年,IEEE又将数字模拟混合VHDL的版本作为工业标准, 即IEEE1076.3;
一、VHDL概述
VHDL与电路图设计电路的方式不同:
和电路图设计方式相比: (1)易于修改;
(2)设计能力更强;
(3)VHDL语言很方便:独立于器件设计;相同的程
序代码可以用于不同厂家生产的器件。
一、VHDL概述
设计范例:2输入与门
a b
c
电路真值表
a 0 1 0 1
b 0 0 1 1
c 0 0 0 1
一、VHDL 概述 IEEE; LIBRARY
USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_ARITH.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; Entity and2 is Port( a : in bit; 双减号--为VHDL程序的 b : in bit; 注释符,类似C语言中的 //注释符。 c : out bit); End and2; --实体定义结束。
端口名
端口模式
数据类型
一、VHDL概述
端口模式(MODE)有以下几种类型: IN ;OUT;INOUT ;BUFFER
端口模式可用下图说明:(黑框代表一个设计或模块)

IN
OUT
BUFFER
INOUT
(3)ARCHITECTURE定义区
实体的实现。即说明电路执行什么动作或实现功能。 定义格式: Architecture 结构体名 of 实体名 is

vhdl 基础语法

vhdl 基础语法

vhdl 基础语法VHDL(Very High Speed Integrated Circuit Hardware Description Language)是一种硬件描述语言,用于描述数字系统的行为和结构。

以下是VHDL的基础语法:1. 实体(Entity):用于描述模块的接口和端口。

实体的语法如下:```entity entity_name isport (-- 输入端口input_name : in data_type;-- 输出端口output_name : out data_type);end entity_name;```2. 架构(Architecture):用于描述模块的内部行为和逻辑。

架构的语法如下:```architecture architecture_name of entity_name issignal signal_name : data_type;begin-- 逻辑实现end architecture_name;```3. 信号(Signal):用于在模块内部传递数据。

信号的语法如下:```signal signal_name : data_type;```4. 过程(Process):用于描述模块的并发行为。

过程的语法如下:```process (sensitivity_list)begin-- 逻辑实现end process;```5. 语句(Statement):用于描述模块的具体操作。

常见的语句包括:- 赋值语句:```signal_name <= value;```- 选择语句:```case expression iswhen value1 =>-- 逻辑实现1when value2 =>-- 逻辑实现2when others =>-- 默认逻辑实现end case;```- 循环语句:```for i in range loop-- 逻辑实现end loop;```这些是VHDL的基础语法,可以用于描述数字系统的行为和结构。

VHDL的元件例化语句

VHDL的元件例化语句
port(a,b:in std_logic; y:out std_logic);
end nand_2; architecture one of nand_2 is begin
process(a,b) begin
y<=a nand b; end process; end one;
library ieee; use ieee.std_logic_1164.all; entity nand_4 is
(1)完成各种元件的设计。 (2)元件声明。 (3)通过元件例化语句调用这些元件, 产生需要的设计电路。
元件声明语句的格式
COMPONENT 元件名 [GENERIC <参数说明>;] PORT <端口说明>;
END COMPONENT;
元件例化语句的格式
元件例化就是将元件的引脚与调用该元件 的端口的引脚相关联。关联方法有位置关 联,名字关联,混合关联。
用将元件声明放在程序包里的设计方法设计4输入的与非 与非门,详见演示实例mynand_4.qpf。 (1)在QuartusII 的根目录下新建工程mynand_4. (2)编辑VHDL源程序文件 nand_2.vhd,mypkg.vhd,mynand_4.vhd. nand_2.vhd用来描述2输入与非门。 mypkg.vhd用来进行元件声明。 mynand_4.vhd实现元件例化。
u1:nand_2 port map(a,b,y1);--元件例化 u2:nand_2 port map(c,d,y2); u3:nand_2 port map(y1,y2,y); end one;
例1:利用2输入与非门元件,设计4输入的与 非与非电路。
方法2:将元件声明放在程序包里进行说明

VHDL基本语句用法

VHDL基本语句用法

10.2.4 元件例化语句
COMPONENT 元件名 IS 1)格式: GENERIC (类属表); -- 元件定义(说明)语句 PORT (端口名表); END COMPONENT 文件名;
例化名 :元件名 PORT MAP( [端口名 =>] 连接端口名,...) ; - - - - 元件例化(调用)语句。 (1) 元件声明语句用于调用已生成的元件,这些元件可能在库中, 也可能是预先编写的元件实体描述.; (2) 元件语句可以在ARCHITECTURE,PACKAGE和BLOCK的说明部分.
--输入初始值 ----当sel=0时选中 当sel为1或3时选中 当sel为2、4、5、6或7时选中 当sel为8~15中任一值时选中
CASE 语句病句举例
【例10.2】
10.1.4 LOOP语句
1 、单个LOOP语句 格式: [ LOOP标号:] LOOP 顺序语句 END LOOP [ LOOP标号 ]; 2、FOR_LOOP语句 格式:
第10章
VHDL基本语句
一:主要内容:VHDL基本语句讲解 ① 顺序语句 ② 并行语句 二:重点掌握:常用VHDL基本语句及应用
10.1 顺序语句
10.1.1 赋值语句
信号赋值语句
变量赋值语句 • 变量赋值语句:
•信号代入语句:
格式: 目的信号变量<=信号变量表达式 例: a<=b;
格式: 目的变量:=表达式 例: c:=a+d
IF 条件 THEN … END IF; 10.1.3 CASE语句
1) CASE语句的结构:
CASE 表达式 IS When 选择值 => 顺序语句; When 选择值 => 顺序语句; ... 【WHEN OTHERS =>】; END CASE ;

vhdl循环语句

vhdl循环语句

vhdl循环语句VHDL循环语句是在数字电路设计中非常重要的一部分,它可以用来实现很多常见的功能,比如计数器、数据移位等。

在本文中,我们将介绍VHDL中的10种循环语句,包括for循环、while循环、repeat循环等等。

1. for循环for循环是VHDL中最常见的循环语句之一,它的语法格式如下:for i in range loopstatement;end loop;其中range可以是任何一个范围,比如:for i in 0 to 10 loopstatement;end loop;这个循环将会执行11次,从0到10。

在for循环中,i是一个临时变量,它在每次循环中都会被赋上新的值。

2. while循环while循环是另外一个常见的循环语句,它的语法格式如下:while condition loopstatement;end loop;其中condition是一个逻辑表达式,只有在条件为真的情况下,循环才会继续执行。

当条件为假时,循环将会退出。

3. repeat循环repeat循环是一个比较少用的循环语句,它的语法格式如下:repeatstatement;until condition;其中condition是一个逻辑表达式,只有在条件为真的情况下,循环才会退出。

和while循环类似,repeat循环也是先执行一次循环体,然后再判断条件是否为真。

4. loop循环loop循环是一个比较通用的循环语句,它的语法格式如下:loopstatement;end loop;这个循环将会无限循环下去,直到遇到break语句或者其他的退出循环的语句为止。

5. foreach循环foreach循环是一个比较新的循环语句,它的语法格式如下:foreach element in collection loopstatement;end loop;其中collection可以是任何一个集合,比如一个数组或者一个列表。

EDA技术与VHDL课后答案(第3版)潘松 黄继业

EDA技术与VHDL课后答案(第3版)潘松 黄继业
LIBRARY IEEE ;
USE IEEE.STD_LOGIC_1164.ALL ;
ENTITY 8f_suber IS
PORT ( x0,x1,x2,x3,x4,x5,x6,x7 : IN STD_LOGIC ;
y0,y1,y2,y3,y4,y5,y6,y7 : IN STD_LOGIC ;
sub_in : IN STD_LOGIC ;
ELSIF u2_y<= u2_b ;
ELSE u2_y<= NULL ;
END IF ;
END PROCESS p_ MUX21A_u2 ;
u1_s<= s0 ; u1_a<= a2 ; u1_b<= a3 ;
tmp<= u1_y ;
u2_s<=s1 ; u2_a<= a1 ; u2_b<= tmp;
diff=>diff2 ) ;
u3 : f_suber PORT MAP (x=>x3, y=>y3, sub_in=>c, sub_out=>d,
diff=>diff3 ) ;
u4 : f_suber PORT MAP (x=>x4, y=>y4, sub_in=>d, sub_out=>e,
diff=>diff4 ) ;
sub_in x y
sub_out
diffr
0
x
0
y
0
f_suber
sub_in x y
sub_out
diffr
1
x
1
y
1
f_suber
sub_in x y
sub_out
diffr

vhdl语句

vhdl语句

vhdl语句
VHDL是一种硬件描述语言,用于描述数字电路和系统的行为和结构。

以下是VHDL中的一些基本语句:
1.实体(Entity):用于声明一个电路或系统的接口,包括输入、输
出和输入/输出端口。

2.结构体(Architecture):用于描述电路或系统的实现,包括元件的
连接和行为描述。

3.信号赋值语句:用于在进程中给信号赋值,例如“a <= b;”。

4.条件赋值语句:用于根据条件给信号赋值,例如“IF condition THEN
a <=
b ELSE a <=
c END IF;”。

5.选择信号赋值语句:用于根据选择信号的值给信号赋值,例如
“SELECT CASE a WHEN value1 THEN b WHEN value2 THEN c WHEN OTHERS THEN d END CASE;”。

6.进程语句:用于描述电路或系统的行为,包括顺序执行和并行执
行。

7.元件例化语句:用于实例化一个元件,并将其连接到其他元件上。

8.生成语句:用于生成多个相同类型的元件实例。

9.子程序调用语句:用于调用一个子程序。

10.顺序语句:在仿真意义上具有一定顺序性,并不意味着这些语句
对于的硬件结构也有相同的顺序性。

所有门电路是并行地工作,并没有先后之分。

11.并行语句:在仿真运行中总处于两种状态:执行或者挂起。

当执
行到wait语句时,运行程序将被挂起,直到满足此语句设置的结束挂起条件后,将重新开始执行进程中的程序。

以上只是VHDL中的一些基本语句,实际上VHDL还支持更多的高级功能和描述方式。

vhdl if else语句

vhdl if else语句

vhdl if else语句
VHDL
(VeryHigh-SpeedIntegratedCircuitHardwareDescriptionLanguag e)是一种硬件描述语言,它可以用来描述数字电路的行为。

if-else 语句是VHDL中常用的条件语句。

它用于根据一个条件是否成立来执
行不同的操作,语法如下:
if condition_1 then
--执行操作1
elsif condition_2 then
--执行操作2
else
--执行操作3
end if;
其中,condition_1是一个布尔表达式,如果它的值为TRUE,就执行第一个操作;如果值为FALSE,则继续判断condition_2,如果
它的值为TRUE,则执行第二个操作;如果condition_2的值也为FALSE,则执行第三个操作。

在VHDL中,if-else语句也可以嵌套使用,以实现更复杂的条
件判断。

在使用if-else语句时,需要注意以下几点:
1. 条件表达式必须是布尔型的,即只能取TRUE或FALSE两个值。

2. 在每个条件分支中,必须有且仅有一个操作被执行。

3. else语句是可选的,如果没有else语句,则当所有条件都
不成立时,不会执行任何操作。

4. 在VHDL中,if-else语句可以与选择语句(case语句)结合使用,以实现更灵活的条件判断。

总之,if-else语句是VHDL中常用的条件语句,用于根据一个条件是否成立来执行不同的操作。

要使用if-else语句,需要熟悉它的语法和注意事项。

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

【例3-32】 】
LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY coder IS PORT ( din : IN STD_LOGIC_VECTOR(0 TO 7); output : OUT STD_LOGIC_VECTOR(0 TO 2) END coder; ARCHITECTURE behav OF coder IS SIGNAL SINT : STD_LOGIC_VECTOR(4 DOWNTO 0); BEGIN PROCESS (din) BEGIN IF (din(7)='0') THEN ELSIF (din(6)='0') THEN ELSIF (din(5)='0') THEN ELSIF (din(4)='0') THEN ELSIF (din(3)='0') THEN ELSIF (din(2)='0') THEN ELSIF (din(1)='0') THEN output <= "000" ; output <= "100" ; output <= "010" ; output <= "110" ; output <= "001" ; output <= "101" ; output <= "011" ; ELSE END IF ; END PROCESS ; END behav; output <= "111" ; );
【例4】 】 K1:IF (A>B) THEN OUTPUT<= ‘1’; END IF K1;
【例5】 IF语句完成的一个具有2输入与门功能的函数定义。 】 FUNCTION AND_FUNC(X,Y:IN BIT) RETURN BIT IS BEGIN IF X=‘1’ AND Y=‘1’ THEN RETURN ‘1’; ELSE RETURN ‘0’; END IF; END AND_FUNC;
4)
格式
IF
条件1 THEN 条件1 顺序语句1 顺序语句1; 条件2 ELSIF 条件2 THEN 顺序语句2 顺序语句2; …… 条件n ELSIF 条件n THEN 顺序语句n; 顺序语句n; ELSE 顺序语句n+1; 顺序语句n+1; IF; END IF;
注意
这类语句可以实现不同类型电路的描述。 这类语句可以实现不同类型电路的描述。 其任一分支顺序语句的执行条件是以上各分支 条件相与, 条件相与,即语句中顺序语句的执行条件具有 向上相与的功能。 向上相与的功能。
【例9】 用CASE语句描述4选1多路选择器。 】 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY MUX41 IS PORT(S1,S2: IN STD_LOGIC; A,B,C,D:IN STD_LOGIC; Z: OUT STD_LOGIC); END ENTITY MUX41; ARCHITECTURE ART OF MUX41 IS SIGNAL S :STD_LOGIC_VECTOR(1 DOWNTO 0);
PROCESS(A,B,C)IS VARIABLE N: BOOLEAN; BEGIN IF A THEN N:=B; ELSE N:=C; END IF; OUTPUT <=N; END PROCESS, END ARCHITECTURE ART;
例6对应的硬件电路如图所示。
C
A B
O述
表3-2 8线-3线优先编码器真值表 线 线优先编码器真值表 输 din0 din1 din2 din3 x x x x x x x 0 x x x x x x 0 1 x x x x x 0 1 1 x x x x 0 1 1 1 入 din4 din5 din6 din7 x x x 0 1 1 1 1 x x 0 1 1 1 1 1 x 0 1 1 1 1 1 1 0 1 1 1 1 1 1 1 输 出
2.赋值目标 . 赋值语句中的赋值目标有四种类型。 1) 标识符赋值目标及数组元素赋值目标 标识符赋值目标是以简单的标识符作为被赋值的信号或变 量名。
格式
数组类信号或变量名(下标名)
2) 段下标元素赋值目标及集合块赋值目标
格式
数组类信号或变量名(下标1 TO/DOWNTO 下标2) 括号中的两个下标必须用具体数值表示,并且其数值范围必
须在所定义的数组下标范围内,两个下标的排序方向要符合方向 关键词TO或DOWNTO。
【例2】 】 VARIABLE A,B:STD_LOGIC_VECTOR (1 TO 4); A (1 TO 2) := "10" ; -- 等效于A(1):=‘1’, A(2):=‘0’
A (4 DOWNTO 1) :="1011";
(3=> E, 4=>F, 2 =>G(1),1=>G(2) ):= H;--名字关联方式赋值 :
转向控制语句
7.1.2 IF语句 IF语句 IF语句是VHDL语言中最常见﹑ IF语句是VHDL语言中最常见﹑最基础的语 语句是VHDL语言中最常见 IF语句有四种形式 语句有四种形式。 句。IF语句有四种形式。
【例6】 】 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY EXAMPLE IS PORT (A,B,C: IN BOOLEAN; OUTPUT:OUT BOOLEAN); END EXAMPLE ; ARCHITECTURE ART OF EXAMPLE IS BEGIN
格式
1) IF
条件 THEN 顺序语句; 顺序语句; IF; END IF;
注意
这是一种不完整的IF语句,通常用于 这是一种不完整的IF语句, IF语句 产生时序电路。 产生时序电路。
格式
2) IF
条件 THEN 顺序语句1 顺序语句1; ELSE 顺序语句2 顺序语句2; IF; END IF;
SVEC(4) <= V1; SVEC(5) <= V2; SVEC(6) <= S1; SVEC(7) <= S2; END PROCESS;
--将V1在上面的赋值0,赋给SVEC(4) --将V2在上面的赋值0,赋给SVEC(5) --将 S1在上面的赋值1,赋给SVEC(6) --将S2在上面的赋值0,赋给SVEC(7)
7.1 顺序语句
顺序语句包括: 顺序语句包括: 1、赋值语句 2、流程控制语句 3、等待语句 4、子程序调用语句 5、返回语句 6、空操作语句
7.1.1 赋值语句 赋值语句的功能就是将一个值或一个表达式的运算结果传 递给某一数据对象,如信号或变量,或由此组成的数组。 VHDL设计实体内的数据传递以及对端口界面外部数据的读写 都必须通过赋值语句的运行来实现。
EDA技术与 EDA技术与VHDL 技术与VHDL 第7 章 VHDL语句 VHDL语句
7.1 顺序语句
顺序语句用来定义进程、 顺序语句用来定义进程、过程或函数 的行为。 的行为。 顺序语句完全按照程序中出现的顺序执 按照程序中 顺序语句完全按照程序中出现的顺序执 各条语句, 行各条语句,在结构层次中前面语句的执行 结果可能直接影响后面语句的结果, 结果可能直接影响后面语句的结果,而并行 语句中仅仅执行被激活的语句, 语句中仅仅执行被激活的语句,而不是所有 的语句. 的语句.
【例1】 】
SIGNAL S1,S2:STD_LOGIC; SIGNAL SVEC :STD_LOGIC_VECTOR(0 TO 7); ... PROCESS(S1,S2) VARIABLE V1,V2:STD_LOGIC; BEGIN V1 := ‘1’; --立即将V1置位为1 V2 := ‘1’; --立即将V2置位为1 S1 <= ‘1’; --S1被赋值为1 S2 <= ‘1’; --由于在本进程中,这里的S2不是最后一个赋值语句故
SVEC(0) <= V1; SVEC(1) <= V2; SVEC(2) <= S1; SVEC(3) <= S2; V1 := ‘0’; V2 := ‘0’; S2 <= ‘0’;
--将V1在上面的赋值1,赋给SVEC(0) --将V2在上面的赋值1,赋给SVEC(1) --将S1在上面的赋值1,赋给SVEC(2) --将最下面的赋予S2的值‘0’,赋给SVEC(3) --将V1置入新值0 --将V2置入新值0 --由于这是S2最后一次赋值,赋值有效, --此‘0’将上面准备赋入的‘1’覆盖掉
【例3】 】 SIGNAL A,B, C, D :STD_LOGIC: SIGNAL S: STD_LOGIC_VECTOR( 1 TO 4) ... VARIABLE E, F :STD_LOGIC; VARIABLE G :STD_LOGIC_VECTOR(1 TO 2 ); VARIABLE H :STD_LOGIC_VECTOR(1 TO 4 ); S <= (‘0’,‘1’,‘0’,‘0’) ; (A, B, C, D) <= S ; ... --位置关联方式赋值 --其他语句
例 6的硬件实现电路
P1 P2 S B C A MUX21 MUX21 B B A A Z S
图3.7 双2选1多路选择器电路
【例7】 】
SIGNAL A,B,C,P1,P2,Z: BIT; ... IF (P1=‘1’) THEN Z<=A; ELSIF (P2=‘0’) THEN Z<=B; ELSE Z<=C; END IF; --满足此语句的执行条件是(P1=‘0’)AND (P2=‘1’) --满足此语句的执行条件是(P1=‘0’)AND (P2=‘0’) --满足此语句的执行条件是(P1=‘1’)
相关文档
最新文档