第5章 VHDL并行语句
VHDL语句

VHDL的顺序语句和并行语句一、顺序语句顺序语句只能出现在进程(PROCESS)、子程序(过程(PROCEDURE)和函数(FUNCTION))中,其特点与传统的计算机编程语句类似,是按程序书写的顺序自上而下、一条一条地执行。
利用顺序语句可以描述数字逻辑系统中的组合逻辑电路和时序逻辑电路。
VHDL的顺序语句有赋值语句、流程控制语句、等待语句、子程序调用语句、返回语句、空操作语句等六类。
<1>赋值语句赋值语句的功能是将一个值或一个表达式的运算结果传递给某一个数据对象。
(1)变量赋值语句格式:目标变量名:=赋值源(表达式);例如:x:=5.0;(2)信号赋值语句格式:目标信号名<=赋值源;例如:y<=…1‟;说明:该语句若出现在进程或子程序中则是顺序语句,若出现在结构体中则是并行语句。
( 3 )数组元素赋值例如:SIGNAL a,b:STD LOGIC VECTOR(1 TO 4);a<=“1101”;a(1 TO 2)<=“10”;a(1 TO 2)<=b(2 TO 3);<2>流程控制语句通过条件控制开关决定是否执行一条或几条语句,或重复执行一条或几条语句,或跳过一条或几条语句。
流程控制语句共有5种:IF语句CASE语句LOOP语句NEXT语句EXIT语句(1)IF语句1、IF 条件句Then 顺序语句END IF ;2、IF 条件句Then 顺序语句ELSE 顺序语句END IF ;3、IF 条件句Then 顺序语句ELSIF 条件句Then 顺序语句...ELSE 顺序语句END IF4、IF 条件句ThenIF 条件句Then...END IFEND IF例子:8线-3线优先编码器的设计LIBRARY IEEE;USE IEEE.STD LOGIC 1164.ALLENTITY coder ISPORT(a:IN STD LOGIC VECTOR(0 TO 7);y:OUT STD LOGIC VECTOR(0 TO 2));END coder;ARCHITECTURE example2 OF coder ISBEGINPROCESS(a)BEGINIF (a(7)=…0‟)THEN y<=”111”;ELSIF (a(6)=‟0‟) THEN y<=”011”;ELSIF (a(5)=‟0‟) THEN y<=”101”;ELSIF (a(4)=‟0‟) THEN y<=”001”;ELSIF (a(3)=‟0‟) THEN y<=”110”;ELSIF (a(2)=‟0‟) THEN y<=”010”;ELSIF (a(1)=‟0‟) THEN y<=”100”;ELSE y<=”000”;END IF;END PROCESS;END example2;(2)CASE语句格式:CASE 表达式ISWhen 选择值=>顺序语句;When 选择值=>顺序语句;…When OTHERS =>顺序语句;END CASE;说明:“=>”不是运算符,相当“THEN”。
VHDL并行语句

PROCEDURE 过程名(参数1;参数2;) IS [声明语句;]
BEGIN [顺序处理语句;]
END 过程名;
并行过程调用:
过程名(关联参数表);
参数关联方式
位置关联方式 名字关联方式 =>
例:设有一过程PROCEDURE vect(a,b:IN BIT;
output1 <= a AND b ; output2 <= c + d ; g <= e OR f ; h <= e XOR f ; s1 <= g ; END ARCHITECTURE curt;
2、条件信号赋值语句
赋值目标 <= 表达式 WHEN 赋值条件 ELSE 表达式 WHEN 赋值条件 ELSE ... 表达式 ;
PROCESS语句在VHDL程序中,是描述硬件并行工作 行为的最常用、最基本的语句。
PROCESS 组成 PROCESS语句结构
进程说明
顺序描述语句
敏感信号参数表
信
变
进
子
顺
进
号
量
程
程
序
程
赋
赋
启
序
描
跳
值
值
动
调
述
出
语
语
语
用
语
语
句
句
句
语
句
句
句
说明
(1) 进程说明部分主要定义一些局部量,可包括数据 类型、常数、属性、子程序等。但需注意,在进程说 明部分中不允许定义信号和共享变量。
-- 指定信号
-- 指定变量
-- 过程调用
第五章(VHDL主要描述语句)

(4) CASE语句执行中必须选中,且只能选中所列条件语
句中一条。这表明CASE语句中至少要包含一个条件语句。
CASE语句常用来描写总线行为、编码器和译码器的结构。CASE语句 与IF语句功能相似但CASE语句的可读性好,非常简洁。
CASE语句的误用:
SIGNAL value : INTEGER RANGE 0 TO 15 ; SIGNAL out_1 : BIT ; CASE value IS -- 缺少 WHEN条件语句 END CASE ; -- 分支条件不包含2到15 CASE value IS WHEN 0 => out_1 <= „1‟; WHEN 1 => out_1 <=„0‟; END CASE ; -- 在5到10上发生重叠 CASE value IS WHEN 0 TO 10 => out_1 <= „1‟; WHEN 5 TO 15 => out_1 <= „0‟; END CASE ;
IF语句不仅可用于选择器设计,还可用于比较 器,译码器等进行条件控制的逻辑设计。IF语句 中至少应有一个条件句,条件句必须由布尔表达 式构成,条件表达式中能使用关系运算操作及逻 辑运算操作的组合表达式。 IF语句颠倒条件判别次序,会引起在综合时逻辑 功能的变化,即IF语句判别条件不可颠倒。 IF语句中,先处理最起始的条件;如果不满足, 再处理下一个条件。一般把条件约束最多的作为 起始条件。
例
用IF语句描述一个二位等值比较器
ARCHITECTURE a OF compare IS LIBRARY IEEE; BEGIN PROCESS(a,b) USE IEEE.STD_LOGIC_1164.ALL; BEGIN ENTITY compare IS IF(a>b) THEN eater<='1';equal<='0';less<='0'; generic(n:natural:=2); ELSIF (a=b) THEN PORT( greater<='0';equal<='1';less<='0'; ELSE a,b:IN STD_LOGIC_VECTOR(n-1 DOWNTO 0); greater<='0';equal<='0';less<='1'; greater,equal,less:OUT STD_LOGIC); END IF; END PROCESS; END; END;
5、VHDL并行语句

2、在程序包中定义函数
①程序包首:
package 程序包名 is 函数首; --数据类型、子程序、元件的声明 end 程序包名;
②程序包体:
package body 程序包名 is 函数体; end 程序包名;
3、函数的调用
格式: 数据对象<=函数名(实参1,实参2,…);
调用方式:顺序调用、并行调用。
②程序包体:
package body 程序包名 is 过程体; end 程序包名;
3、过程的调用
格式:过程名(实参1,实参2,…); 实参与形参的对象类型、数据类型要一致。 过程的调用方式:顺序调用、并行调用。
在进程中为顺序语句;在结构体中为并 行语句(并行语句的启动条件:in或inout形 参发生变化)。
例1:1位半加器的过程定义,以下为程序 包文件<pac1.vhd>:
在程序包 中定义过 程
例1:1位半加器的过程调用,以下为顶层 文件<test.vhd>:
并行调 用
例2:四输入与非门的过程定义,以下为程 序包文件(my_pac.vhd):
在程序包 中定义过 程
例2:四输入与非门的过程调用,以下为顶 层文件(test.vhd):
赋值目标必须是信号或端口。 信号赋值语句出现在结构体中,为并行语 句;出现在进程和子程序中,为顺序语句。
1、简单信号赋值语句:信号<=表达式;
执行条件:赋值符号的右边发生变化。
2、条件信号赋值语句: 信号<=值1 when 条件1 else 值2 when 条件2 else
。。。
值n when 条件n else 值n+1;
VHDL并行语句

6.1 进程语句(PROCESS)
进程语句是最主要的并行语句,它在VHDL程序设计中使用频率最高,也 是最能体现硬件描述语言特点的一条语句。进程语句的内部是是顺序语句, 而进程语句本身是一种并行语句。进程语句的综合是比较复杂的,主要涉 及这样一些问题:综合后的进程是用组合逻辑电路还是用时序逻辑电路来 实现?进程中的对象是否有必要用寄存器、触发器、锁存器或是 RAM 等 存储器件来实现。 进程语句结构中至少需要一个敏感信号量,否则除了初始化阶段,进程永
远不会被再次激活。这个敏感量一般是一个同步控制信号,同步控制信号
用在同步语句中,同步语句可以是敏感信号表、WAIT UNTIL语句或是 WAIT ON语句。
6-3 package mtype is type state_t is (s0,s1,s2,s3); end mtype; library ieee; use ieee.std_logic_1164.all; use work.mtype.all; entity s4_machine is port( clk, inc, a1,b1 :in std_logic ; rst : in boolean ; out1 : out std_logic ); end s4_machine; architecture activ of s4_machine is signal current _state , next_state :state_t ; begin sync : process (clk, rst ) if (rst ) then current_state <= s0 ;
· CONCURRENT PROCEDURE CALL
· ASSERT · GENERIC · COMPONENT_INSTANT · GENERATE
VHDL的并行语句

case语句
null语句(空语句,值保持不变)
进程语句的构成
PROCESS语句结构
进程说明 信 号 赋 值 语 句 变 量 赋 值 语 句
顺序描述语句 进 程 启 动 语 句 子 程 序 调 用 语 句 顺 序 描 述 语 句 进 程 跳 出 语 句
敏感信号参数表
Example will be more clear
c selb
q
Conditional Signal Assigments
The output get the value when the condition is true e.g. 2 to 1 multiplexer
Entity test1 is port (in1, in2, sel : in bit; d : out bit); end test1; architecture test1_body of test1 is begin d <= in1 when sel = „0‟ else in2; end test1_body;
选择信号赋值语句
基本格式 WITH 表达式 SELECT 目标信号<= 表达式1 WHEN 选择条件1, 表达式2 WHEN 选择条件2, …… 举例 表达式n WHEN 选择条件n; WITH sel SELECT
所有可能情况都要考 q <= a WHEN “00”, A 虑,但可以在最后加 B 上Others语句来处理 b WHEN “01”, C 未考虑到的情况D
常用并行语句包括:
信号赋值语句
简单信号、条件信号、选择信号赋值语句
进程(Process)语句
元件例化(Component)语句
3.4 VHDL并行语句

BEGIN
--ALU块行为描述语句
END ALU;
REG8 BLOCK SIGNALZbus : STD_LOGIC_VECTOR(31
DOWNTO 0);--定义局域量 BEGIN REG1 BLOCK SIGNAL Zbus1:STD_LOGIC_VECTOR(31
DOWNTO 0);--定义子局域量 BEGIN --REG1子块行为描述语句 END REG1
BEGIN
… END adder;
2、过程调用语句 格式:过程名(关联参数表); 例如:adder(a1,b1,sum1);
规则:(1)若过程在进程(PROCESS)中调用,则 是顺序语句;
(2)若过程调用出现在结构体(ARCHITECTURE) 或块(BLOCK)中,则属于并行语句,相当一个进 程,而且每调用一次过程,就相当插入一个元件。
USE IEEE.STD LOGIC 1164.ALL
ENTITY CPU IS
PORT(clk,RESET:IN STD LOGIC;
ADDERS:OUT STD LOGIC_VECTOR(31 DOWNTO 0);
DATA:INOUT STD LOGIC VECTOR(7 DOWNTO 0);
END CPU ;
PROCESS BEGIN WAIT UNTIL clk‘EVENT AND clk=’1’; IF (clr=’1’ OR cnt=9) THEN cnt<=0; ELSE Cnt<=cnt+1; END IF; END PROCESS;
END example5;
3.4.2 块语句
功能:将一个大系统程序分解为若干子系统(块) 编写,便于程序的编写、调试和查错。
5VHDL顺序语句与并行语句

5 VHDL顺序语句与并行语句电子信息工程学院 顺序语句与并行语句 大纲进程语句 顺序语句 并行语句22电子信息工程学院顺序语句与并行语句VHDL 程序设计约定语句结构描述中方括号“[ ]”内的内容为可选内容。
对于VHDL 的编译器和综合器来说,程序文字的大小写是不加区分的。
程序中的注释使用双横线“--”。
QuartusII 要求源程序文件的名字与实体名、工程名必须一致。
编写程序注意不要在中文输入状态下输入英文字符和符号。
为了使程序结构清晰,使用层次缩进格式书写代码。
3 电子信息工程学院 顺序语句与并行语句 概述顺序语句仅出现在进程和子程序中。
在结构体中的执行是同时进行,执行顺序与书写顺序无关。
4电子信息工程学院顺序语句与并行语句进程语句(PROCESS )● 进程本身是并行语句,但内部是顺序语句;● 进程只有在特定的时刻(敏感信号发生变化)才会被激活。
[进程标号:] PROCESS (敏感信号参数表) [声明区]; BEGIN 顺序语句END PROCESS [进程标号];在进程中起作用的局部变量一个进程可以有多个敏感信号,任一敏感信号发生变化都会激活进程进程语句定义顺序语句模块,用于将从外部获得的信号值,或内部的运算数据向其他的信号进行赋值。
5电子信息工程学院顺序语句与并行语句进程的工作原理当某个敏感信号的值发生变化时,每个进程语句立即完成进程内顺序语句所定义的功能行为。
执行过程终止顺序语句所定义的功能行为的结果可以赋值给信号,并通过信号被其他的进程读取或赋值。
6电子信息工程学院顺序语句与并行语句进程与时钟在每个上升沿启动一次进程(执行进程内所有的语句)。
上升沿描述:Clock’ EVENT AND Clock=‘1’ 下降沿描述:Clock’ EVENT AND Clock=‘0’ 上升沿描述: rising_edge (Clock) 下降沿描述: falling_edge (Clock)7 电子信息工程学院 顺序语句与并行语句 进程语句格式与结构[进程标号: ] PROCESS [ ( 敏感信号参数表 ) ] [IS] [进程说明部分] BEGIN顺序描述语句END PROCESS [进程标号];PROCESS 语句结构进程说明顺序描述语句 敏感信号参数表信号赋值语句变量赋值语句进程启动语句子程序调用语句顺序描述语句进程跳出语句8电子信息工程学院 顺序语句与并行语句 1. PROCESS 为一无限循环语句2. PROCESS 中的顺序语句具有明显的顺序/并行运行双重性3. 进程语句本身是并行语句4. 信号是多个进程间的通信线5. 一个进程中只允许描述对应于一个时钟信号的同步时序 逻辑进程要点9电子信息工程学院 顺序语句与并行语句 进程注意事项● 进程本身是并行语句,但内部为顺序语句;● 进程在敏感信号发生变化时被激活,在使用了敏感表的进程中不能含wait 语句;● 在同一进程中对同一信号多次赋值,只有最后一次生效; ● 在不同进程中,不可对同一信号进行赋值; ● 一个进程不可同时对时钟上、下沿敏感。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验与设计
5-5 VGA彩条信号显示控制电路设计
实验与设计
5-5 VGA彩条信号显示控制电路设计
实验与设计
5-5 VGA彩条信号显示控制电路设计
实验与设计
5-5 VGA彩条信号显示控制电路设计
实验与设计
5-5 VGA彩条信号显示控制电路设计
5.1.6 全加器设计与例化语句应用
5.1 并行信号赋值语句
5.1.6 全加器设计与例化语句应用
5.1 并行信号赋值语句
5.1.7 生成语句
5.1 并行信号赋值语句
5.1.7 生成语句
5.1 并行信号赋值语句
5.1.7 生成语句
5.1 并行信号赋值语句
5.1.7 生成语句
5.1.8 GENERIC参数传递映射语句及其使用方法
实验与设计
5-1.8位加法器设计实验 5-2 高速硬件除法器设计
实验与设计
5-3 移位相加型8位硬件乘法器设计
实验与设计
5-4 基于VHDL代码的频率计设计
实验与设计
5-4 基于VHDL代码的频率计设计
实验与设计
5-5 VGA彩条信号显示控制电路设计
实验与设计
5-5 VGA彩条信号显示控制电路设计
5.2 VHDL运算操作符
5.2.1 逻辑操作符
5.2 VHDL运算操作符
5.2.1 逻辑操作符
5.2 VHDL运算操作符
5.2.2 关系操作符
“ = ”(等于) “/=”(不等于) “ >”(大于) “< ”(小于) “>=”(大于等于) “<=”(小于等于)
5.2 VHDL运算操作符
5.2.3 算术操作符
1. 信号类属性
2. 数据区间类属性
5.1 并行信号赋值语句
5.1.11 信号属性及属性函数 3. 数值类属性
5.1 并行信号赋值语句
5.1.11 信号属性及属性函数 3. 数值类属性
5.1 并行信号赋值语句
5.1.11 信号属性及属性函数 4. 数组类属性'LENGTH
5. 用户定义属性
5.2 VHDL运算操作符
5.2 VHDL运算操作符
1. 求和操作符
5.2 VHDL运算操作符
1. 求和操作符
5.2 VHDL运算操作符
1. 求和操作符
5.2 VHDL运算操作符
2. 求积操作符 *(乘) /(除) MOD(取模) RED(取余)
3. 符号操作符
4. 混合操作符
5.2 VHDL运算操作符
5. 移位操作符
第5章 VHDL并行语句
5.1 并行信号赋值语句
5.1.1 简单信号赋值语句
5.1 并行信号赋值语句
5.1.2 条件信号赋值语句
5.1 并行信号赋值语句
5.1.3 选择信号赋值语句
5.1 并行信号赋值语句
5.1.4 块语句
5.1 并行信号赋值语句
5.1.5 元件例化语句
5.1 并行信号赋值语句
5.2 VHDL运算操作符
5.2.4 省略赋值操作符
5.3 keep属性应用
5.4 SignalProbe使用方法
1. 按常规流程完成设计仿真和硬件测试 2. 设置SignalProbe Pins
3. 编译SignalProbe Pins测 试信息并下载测试
习题
5-4
实验与设计
5-1.8位加法器设计实验 5-2 高速硬件除法器设计
5.1.9 数据类型定义语句 3. 枚举型数据类型定义
5.1 并行信号赋值语句
5.1.9 数据类型定义语句 4. 枚举型子类型数据类型定义
5.1.10 VHDL的存储器描述
5.1 并行信号赋值语句
5.1 并行信号赋值语句
5.1.10 VHDL的存储器描述
5.1 并行信号赋值语句
5.1.11 信号属性及属性函数
5.1 并行信号赋值语句
5.1 并行信号赋值语句Байду номын сангаас
5.1.8 GENERIC参数传递映射语句及其使用方法
5.1 并行信号赋值语句
5.1.9 数据类型定义语句 1. 限定性数组型数据类型定义
5.1 并行信号赋值语句
5.1.9 数据类型定义语句 2. 非限定性数组型数据类型定义
5.1 并行信号赋值语句
5.2.1 逻辑操作符 逻辑操作符(Logical Operator) 关系操作符(Relational Operator)
算术操作符(Arithmetic Operator)
符号操作符(Sign Operator)
重载操作符(Overloading Operator)
5.2 VHDL运算操作符
5.2.1 逻辑操作符