VHDL第六讲_VHDL的元件例化语句
VHDL中元件例化语句的使用
(2)元 件例 化 语句
例 化名 :元 件 名 PORT MAP( [端 口名 =>] 连接 端 口名 ,...) ;
元 件 例 化 语 句 ,其 中的 例 化 名 必 须是 已经 存在 的 , 它类 似 于 标在 当前 电路 设计 系 统 中的一 个插 座 名 ,而 元件 名 则是 准 备在 此插 座 上 插入 的底 层 设计 中的 元件 名 PORT MAP是 端 口映射 ,或 端 口 连接 的意 思 ,其 中 的“端 口名 ”是在 元件 定 义语 句 中 的端 口名表 中 己 定 义好 的 元件 端 口的 名字 ,或 者 说是 顶层 文 件 中待 连接 的 各个 元件 本 身 的端 口名 。“连 接 端 口名 ”则是 顶 层系 统 中准 备 与接 入 的元 件 的 端 口相 连 的通信 线名 ,相 当于插 座上各插 针的 引脚 名 。元 件例化 就是 讲元 件的 引脚与 调用该 元件 的端 口的引脚相 关联 ,该关联 有三种 表达 方式 ,一是端 口名关 联法 也称 端 口名 映射 法 。形式 :例 化名 : 元件 名 PORT MAP(信号 关联式 1,信号关 联式2,…);信号 关联式 形如 : b=>b1,意思是将元 件的 引脚b与调用该 元件 的端 [Slbl相关 联 ,符号“=>” 为连接 符 号 。这 时 ,端 口名 与 连接 端 口名 的对 应 形式 在PORT MAP 句 中 的位置 可 以是 任 意 的 。二 是 位置 关 联法 。所 谓 位置 关 联 ,就是 以位置 的对 应 关系 连 接相 应 的端 口。形 式 :例 化 名 :元 件 名 PORT MAP(信号 l,信 号2, …);使 用 这种 方 式 ,端 口名 和关 联 连接 符 号 都 可省 去 ,在PORT MAP子 句 中要 求连 接端 口的信 号排 列 方 式与 所 需例 化 的 元件 端 口定 义 的端 口名 相对 应 。三 是 混合 关联 法 , 即端 口 名 映射 法与 位置 关 联法 相结 合使 用 的方 法 。
VHDL基本语句
例
ARCHITECTURE example OF mux4 IS BEGIN PROCESS (sel) 注 BEGIN ●CASE中的选择值必须在表达式的取值范围内; CASE sel IS WHEN 0=> q <= d0 ; ●CASE语句是无序的,所有表达式值都是并行 WHEN 1=> q <= d1 ; 处理;而IF语句是有序的,最起始、最优先 WHEN 2=> q<= d3 ; WHEN 3=> q<= d4 ; 的先处理; WHEN others => NULL; ●可以有很多分支,但OTHERS分支只能有一个, END CASE; 且只能位于最后;用来使所有选择值能涵盖表 END PROCESS; END example; 达式的所有取值,以免插入不必要的锁存器
3、用于多选控制的IF语句:
格式 IF 条件1 THEN
<顺序处理语句1>;
ELSIF 条件2 THEN <顺序处理语句2>; : ELSIF 条件n-1 THEN <顺序处理语句n-1>; ELSE <顺序处理语句n>; END IF;
P1: PROCESS (clk) BEGIN
IF (clk‘ event and clk=‗1‘ ) THEN
顺序语句
赋值语句
VHDL设计实体内的数据传递以及对端口界面外部数据的读写 都必须通过赋值语句的运行来实现。 功能是将一个值或表达式的运算结果传递给某一数据对象。 赋值语句有两种: 信号赋值语句和变量赋值语句 区别
VHDL语言的基本语法
B:二进制基数符号,表示二进制数位0或1。 二进制基数符号,表示二进制数位0 O:八进制基数符号。 八进制基数符号。 X:十六进制基数符号(0~F) 。 十六进制基数符号(0~ (0 例如: 1_1101_1110 1_1101_1110” 例如:B“1_1101_1110 --二进制数数组,位矢数组长度是9 --二进制数数组,位矢数组长度是9 二进制数数组 AD0 X“AD0” AD --十六进制数数组,位矢数组长度是12 --十六进制数数组,位矢数组长度是12 十六进制数数组
4、下标名及下标段名 下标名用于指示数组型变量或信号的某一 下标名用于指示数组型变量或信号的某一 元素, 元素,如:a(2) , b(n) 下标段名则用于指示数组型变量或信号的 下标段名则用于指示数组型变量或信号的 某一段元素,其语句格式如下: 某一段元素,其语句格式如下:
数组类型信号名或变量名(表达式 表达式2]); 数组类型信号名或变量名 表达式1 [TO/DOWNTO 表达式 ; 表达式
信号的使用和定义范围是实体、结构体和程序包 信号的使用和定义范围是实体、结构体和程序包.
在程序中: 在程序中 (1) 信号值的代入采用“<=”代入符,而且信号 信号值的代入采用“ ”代入符, 代入时可以附加延时。 代入时可以附加延时。 (2) 变量赋值时用“:=”,不可附加延时。 变量赋值时用“ ” 不可附加延时。 (3) 信号的初始赋值符号仍是“:=”。 信号的初始赋值符号仍是“ ” 例: X<=Y AFTER 10 ns; ; --X,Y都是信号,且Y的值经过 都是信号, 的值经过10ns延 , 都是信号 的值经过 延 时以后才被代入X。 时以后才被代入 。
(1) 赋值语句右方的表达式必须是一个与目标变量有相同 数据类型的数值。 数据类型的数值。 (2) 变量不能用于硬件连线和存储元件。 变量不能用于硬件连线和存储元件。 (3) 变量的适用范围仅限于定义了变量的进程或子程序中。 变量的适用范围仅限于定义了变量的进程或子程序中。 (4) 若将变量用于进程之外,必须将该值赋给一个相同的 若将变量用于进程之外, 类型的信号,即进程之间传递数据靠的是信号。 类型的信号,即进程之间传递数据靠的是信号。
30.用元件例化语句设计电路
componentfulladd
port(in1,in2,cin:instd_logic;
fsum,fcarry:outstd_logic);
end component;
begin
u1:halfadd
port map(a=>a(0),hsum=>sum(0),hcarry=>cout1,b=>b(0));
重庆科创职ቤተ መጻሕፍቲ ባይዱ学院授课方案(教案)
课名:教 师:
班级:编写时间:
课题:
用元件例化语句设计电路
授课时数
2
教学目的及要求:
1.掌握VHDL中元件例化语句的相关语法
2.会用元件例化语句设计VHDL程序并进行硬件测试
教学重点:
元件例化语句的VHDL相关语法
教学难点: 元件声明和元件例化语句的位置
教学步骤及内容 :
libraryieee;
use ieee.std_logic_1164.all;
entity add4 is
旁批栏:
port(a:instd_logic_vector(3downto0);
b:instd_logic_vector(3downto0);
sum:outstd_logic_vector(3downto0);
旁批栏:
6.引脚指定
指定输入输出对应的芯片的引脚,注意一些引脚不能用。选择菜单命令Assign | Pin/Location/Chip,将设计的4位寄存器与目标芯片(EPM7128SLC84-10)联系起来.
7.程序下载
Max+PlusII-progeammer-JTAG-Multi-DeviceJTAG chain setup-Select Programming file–找到你所要的.pof文件-add-OK
(完整word版)VHDL语言实例
VHDL语言实例例 1:设计一七段显示译码器,用它来驱动七段发光管 LED显示十六进制数字 0 到9 和字母 A 到 F。
LED显示数码管为共阳极。
LIBRARYieee;USE ieee.std_logic_1164.all;ENTITY HEX2LEDISPORT(HEX :IN std_logic_vector(3 DOWNTO0);LED : OUT std_logic_vector(6 TO0));图例 1 七段显示译码END 器实体 HEX2LED;ARCHITECTURE HEX2LED_arc OF HEX2LED ISBEGIN--HEX-TO-SEVEN-SEGMENT DECODER--SEGMENT ENCODING----------5 ||1------ <--6--4 ||2--------3WITH HEX SELECTLED<= "1111001" when "0001","0100100" when "0010","0110000" when "0011","0011001" when "0100","0010010" when "0101","0000010" when "0110","1111000" when "0111","0000000" when "1000","0010000" when "1001","0001000" when "1010","0000011" when "1011","1000110" when "1100","0100001" when "1101","0000110" when "1110","0001110" when "1111","1000000" when others;END HEX2LED_arc;例 2:设计一个八选一数据选择器1)s 是通道选择信号 ,d0,d1,d2,d3,d4,d5,d6,d7数据输入out1 是数据输出ENTITY sels ISPORT(d0,d1,d2,d3,d4,d5,d6,d7:INBIT;s :INTEGERRANGE0TO7;out1 :OUT BIT);END sels;图例 2(a)八选一数据选择器实体ARCHITECTURE sels_arc OF sels ISBEGINWITH s SELECTout1 <= d0 WHEN 0,d1 WHEN 1,d2 WHEN 2,d3 WHEN 3,d4 WHEN 4,d5 WHEN 5,d6 WHEN 6,d7 WHEN 7;END sels_arc;2)A,B,C 是通道选择信号 ,I0,I1,I2,I3,I4,I5,I6,I7数据输入Q 是数据输出LIBRARY ieee;USE ieee.std_logic_1164.all;ENTITY mux8 ISPORT(I0,I1,I2,I3,I4,I5,I6,I7,A,B,C:INstd_logic;Q :OUT std_logic);END mux8;图例2(b) 八选一数据选择器实体ARCHITECTURE mux8_arc OF mux8 ISSIGNAL sel :INTEGER;BEGINQ <= I0 AFTER 10 ns WHEN sel= 0 ELSEI1 AFTER 10 ns WHEN sel= 1 ELSEI2 AFTER 10 ns WHEN sel= 2 ELSEI3 AFTER 10 ns WHEN sel= 3 ELSEI4 AFTER 10 ns WHEN sel= 4 ELSEI5 AFTER 10 ns WHEN sel= 5 ELSEI6 AFTER 10 ns WHEN sel= 6 ELSEI7 AFTER 10 ns ;sel <= 0 WHEN A= ‘0’ AND B= ‘0’ AND C= ‘0’ ELSE1 WHEN A=‘1’ AND B= ‘0’ AND C= ‘0’ ELSE2 WHEN A=‘0’ AND B= ‘1’ AND C= ‘0’ ELSE3 WHEN A=‘1’ AND B= ‘1’ AND C= ‘0’ ELSE4 WHEN A=‘0’ AND B= ‘0’ AND C= ‘1’ ELSE5 WHEN A=‘1’ AND B= ‘0’ AND C= ‘1’ ELSE6 WHEN A=‘0’ AND B= ‘0’ AND C= ‘1’ ELSE7;END mux8_arc;例 3:设计一 D触发器d 是输入端, clk 是时钟信号控制端, q 是触发器的输出端。
VHDL语言教程
VHDL语言教程VHDL是一种硬件描述语言,用于描述数字电路和系统,并进行硬件的设计和仿真。
它被广泛应用于数字电路设计、嵌入式系统开发和可编程逻辑控制器等领域。
本教程将介绍VHDL语言的基本概念和语法,帮助您了解和学习这门强大的硬件描述语言。
一、VHDL概述VHDL是Very High Speed Integrated Circuit Hardware Description Language的缩写,意为高速集成电路硬件描述语言。
它是一种硬件描述语言,用于描述数字电路和系统。
与传统的电路设计方法相比,使用VHDL可以更加方便、高效地进行电路设计和测试。
1.VHDL的起源和发展VHDL最早由美国国防部为了解决数字电路设计复杂、效率低下的问题而研发。
后来,VHDL成为了一种IEEE标准(IEEE1076)并被广泛应用于数字电路设计和仿真。
2.VHDL的优点VHDL具有以下几个优点:-高级抽象:VHDL提供了一种高级描述电路的方法,使得设计者能够更加方便地表达复杂的电路结构和行为。
-可重用性:VHDL支持模块化设计,使得设计者可以将电路的不同部分进行抽象和封装,提高了电路的可重用性。
-高效仿真:VHDL可以进行高效的电路仿真和测试,有助于验证电路设计的正确性和可靠性。
-灵活性:VHDL可以应用于各种不同类型和规模的电路设计,从小规模的数字逻辑电路到大规模的系统级设计。
二、VHDL语法和基本概念1.VHDL的结构VHDL程序由程序单元(unit)组成,程序单元是VHDL描述的最小单元。
程序单元包括实体(entity)、结构(architecture)、过程(process)和包(package)等。
2. 实体(entity)实体是VHDL描述电路模块的一个部分,包括输入输出端口、信号声明和实体标识符等。
3. 结构(architecture)结构描述了实体的具体电路结构和行为,包括组件声明、信号赋值和行为描述等。
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基本语句用法 ppt课件
15
10.2.1 并行信号赋值语句
1. 简单信号赋值语句
格式:赋值目标 = 表达式
例: ARCHITECTURE curt OF bc1 IS SIGNAL s1, e, f, g, h : STD_LOGIC ; BEGIN output1 <= a AND b ; output2 <= c + d ; g <= e OR f ; h <= e XOR f ; s1 <= g ;
10.2.4 元件例化语句
1)格式:
COMPONENT 元件名 IS GENERIC (类属表); -- 元件定义(说明)语句
PORT (端口名表);
END COMPONENT 文件名;
例化名 :元件名 PORT MAP( [端口名 =>] 连接端口名,...) ;
2)说明:
- - - - 元件例化(调用)语句。
c;
END;
例1的逻辑电路图见 图1
2021/3/26
VHDL基本语句用法 ppt课件
18
3. 选择信号赋值语句
1)格式:
WITH 选择表达式 SELECT
赋值目标信号 <=表达式1 WHEN 选择值1 表达式2 WHEN 选择值2 ... 表达式n WHEN 选择值n;
2)举例:[例2]
[例3]
4)CASE 语句举例
2021/3/26
VHDL基本语句用法 ppt课件
4
例【 10.1】
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY mux41 IS
PORT (s4,s3, s2,s1 : IN STD_LOGIC;
VHDL语言知识学习的主要描述语句
VHDL 语言的主要描述语句按照语句的执行顺序对VHDL 语言进行分类,包含两类语句:并行描述语句该语句的执行与书写顺序无关,总是同时被执行顺序描述语句从仿真的角度,该语句是顺序执行的进程语句( PROCESS )是最典型的并行语句,一个构造体内可以有几个进程语句同时存在,而且并发执行。
但是进程内部的所有语句都是顺序语句。
一、顺序描述语句顺序描述语句只能用在进程和子程序中,它和其他高级语言一样,其语句是按照语句的出现的顺序加以执行的。
如下分别介绍有关的顺序描述语句.1. WAIT 语句进程在执行过程中总是处于两种状态:执行或挂起,进程的状态变化受等待语句的控制,当进程执行到等待语句,就被挂起,并等待再次执行进程.等待语句的格式:*WAIT 无限等待*WAIT ON 敏感信号变化*WAIT UNTIL 条件满足*WAIT FOR 时间到( 1 )WAIT ON例5-1PROCESS(a,b)BEGINy<=a AND b;END PROCESS;该例中的进程与下例中进程相同例5-1PROCESSBEGINy<=a AND b;WAIT ON a,b;END PROCESS;例5-2PROCESS(a,b)BEGINy<=a AND b;WAIT ON a,b;END PROCESS;2 )WAIT UNTIL 直到条件满足格式: WAIT UNTIL 布尔表达式当进程执行到该语句时,被挂起;若布尔表达式为真时,进程将被启动.例: WAIT UNTIL ((x*10)<100)( 3 )WAIT FOR 等到时间到格式: WAIT FOR 时间表达式当进程执行到该语句时,被挂起; 等待一定的时间后,进程将被启动.例: WAIT FOR 20 ns ;WAIT FOR (a*( b+c );(4 )多条件WAIT 语句例: WAIT ON nmi,interrupt UNTIL ((nmi=TRUE) OR (interrupt=TRUE)) FOR 5 us 该等待有三个条件:第一,信号nmi 和interrupt 任何一个有一次刷新动作第二, 信号nmi 和interrupt 任何一个为真第三, 已等待 5 us只要一个以上的条件被满足,进程就被启动.*注意:多条件等待时,表达式的值至少应包含一个信号量的值。
VHDL的主要描述语句
CASE语句。
使用CASE语句需注意以下几点:
· CASE语句中每一条语句的选择值只能出现一次,即不能有相同选择值 的条件语句出现。
· CASE 语句执行中必须选中,且只能选中所列条件语句中的一条,即 CASE语句至少包含一个条件语句。 · 除非所有条件语句中的选择值能完全覆盖CASE语句中表达式的取值, 否则最末一个条件语句中的选择必须用“OTHERS”表示,它代表已给 出的所有条件语句中未能列出的其他可能的取值。关键词OTHERS只能 出现一次,且只能作为最后一种条件取值。使用OTHERS是为了使条件 语句中的所有选择值能覆盖表达式的所有取值,以免综合过程中插入 不必要的锁存器。这一点对于定义为STD_LOGIC和STD_LOGIC_VECTOR 数据类型的值尤为重要,因为这些数据对象的取值除了1、0之外,还 可能出现输入高阻态Z,不定态X等取值。
&
减
并置
VHDL语言运算符号(二)
优先级顺序 操作符类型 操作符
+ 正负运算符 * 乘法运算符 负 乘法
功能
正
/
MOD REM ** ABS
除法
求模 取余 指数 取绝对值
NOT
取反
INDEX
数据类型及运算符
顺序语句
并行语句 其它语句
VHDL顺序语句
顺序语句是指完全按照程序中书写的顺序执行各语 句,并且在结构层次中前面的语句执行结果会直接影 响后面各语句的执行结果。顺序描述语句只能出现在 进程或子程序中,用来定义进程或子程序的算法。顺 序语句可以用来进行算术运算、逻辑运算、信号和变 量的赋值、子程序调用等,还可以进行条件控制和迭 代。 注意,这里的顺序是从仿真软件的运行和顺应VHDL语 法的编程逻辑思路而言的,其相应的硬件逻辑工作方 式未必如此。应该注意区分VHDL语言的软件行为与描 述综合后的硬件行为的差异。
VHDL数据类型vhdl语法
二、VHDL数据类型与数据对象
例如: Signal Y : Std_logic_vector(7 downto 0); Signal X : Integer range 0 to 255; Y<= CONV_STD_LOGIC_VECTOR(X,8);
二、VHDL数据类型与数据对象 CONV_INTEGER 将数据类型 UNSIGNED, SIGNED转换为 INTEGER 类型. CONV_UNSIGNED 将数据类型INTEGER, SIGNED转换为 UNSIGNED 类型. CONV_SIGNED 将数据类型INTEGER, UNSIGNED转换为 SIGNED类型. CONV_STD_LOGIC_VECTOR 将数据类型INTEGER, UNSIGNED, SIGNED, STD_LOGIC转换为STD_LOGIC_VECTOR 类型.
二、VHDL数据类型与数据对象
library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; --必需定义+ entity exam1 is port (ip : in std_logic_vector(3 downto 0); op : out std_logic_vector(3 downto 0)); end exam1; architecture m1 of exam1 is constant num : integer := 6; begin op <= ip + num; end m1;
architecture bh1 of full_bit_adder is begin y <= ((not a)and (not b)and ci) or ((not a)and (b) and (not ci)) or ((a)and (not b)and(not ci)) or ((a) and (b)and(ci)); cout <= (b and ci) or (a and ci) or (a and b); end bh1;
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语言的基本结构
实体结构
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允许包含图形符号(如回车符、换行符等),也允许包含空格符。
EDA 技术:VHDL语句总结
begin
if sel = "0001" then output <= in1(0) ; output2<=‘1’;
elsif (sel = "0010") then
output <= in1(0) xor in1(1) ; output2 <= ‘0’ ;
elsif sel = "0100" then
sel: in std_logic_vector(3 downto 0); output: out std_logic; output2: out std_logic); end ifexample1;
architecture arch of ifexample1 is
begin
process(in1, sel)
begin case (din) is when “00” => dout <=“0001” ; when “01” => dout <= “0010” ; when “10” => dout <=“0100” ; when “11” => dout <=“1000” ; end case;
end rtl ;
使用变量能获得比较好的综合结果,有利于优化, 但 需要锁存中间结果时必须使用信号。
❖ 初值(有三种形式,前两种综合忽略)
1、type states is (IDLE,S0,S1,S2); signal state:states; --信号state默认值为IDLE
2、signal Z : bit_vector(3 downto 0) :=“0000” ;
end if; end process; end rtl;
(完整word版)vhdl基本语法
VHDL 基础语法篇——VHDLVHDL硬件描述语言1。
1 VHDL概述1。
1。
1 VHDL的特点VHDL语言作为一种标准的硬件描述语言,具有结构严谨、描述能力强的特点,由于VHDL语言来源于C、Fortran等计算机高级语言,在VHDL语言中保留了部分高级语言的原语句,如if语句、子程序和函数等,便于阅读和应用。
具体特点如下:1。
支持从系统级到门级电路的描述,既支持自底向上(bottom-up)的设计也支持从顶向下(top—down)的设计,同时也支持结构、行为和数据流三种形式的混合描述。
2. VHDL的设计单元的基本组成部分是实体(entity)和结构体(architecture),实体包含设计系统单元的输入和输出端口信息,结构体描述设计单元的组成和行为,便于各模块之间数据传送.利用单元(componet)、块(block)、过程(procure)和函数(function)等语句,用结构化层次化的描述方法,使复杂电路的设计更加简便。
采用包的概念,便于标准设计文档资料的保存和广泛使用。
3. VHDL语言有常数、信号和变量三种数据对象,每一个数据对象都要指定数据类型,VHDL的数据类型丰富,有数值数据类型和逻辑数据类型,有位型和位向量型。
既支持预定义的数据类型,又支持自定义的数据类型,其定义的数据类型具有明确的物理意义,VHDL是强类型语言。
4. 数字系统有组合电路和时序电路,时序电路又分为同步和异步,电路的动作行为有并行和串行动作,VHDL语言常用语句分为并行语句和顺序语句,完全能够描述复杂的电路结构和行为状态。
1.1.2 VHDL语言的基本结构VHDL语言是数字电路的硬件描述语言,在语句结构上吸取了Fortran和C等计算机高级语言的语句,如IF语句、循环语句、函数和子程序等,只要具备高级语言的编程技能和数字逻辑电路的设计基础,就可以在较短的时间内学会VHDL语言。
但是VHDL毕竟是一种描述数字电路的工业标准语言,该种语言的标识符号、数据类型、数据对象以及描述各种电路的语句形式和程序结构等方面具有特殊的规定,如果一开始就介绍它的语法规定,会使初学者感到枯燥无味,不得要领.较好的办法是选取几个具有代表性的VHDL程序实例,先介绍整体的程序结构,再逐步介绍程序中的语法概念。
VHDL第六讲_VHDL的元件例化语句
元件例化举例
例1:利用2输入与非门元件,设计4输入的与非与非 电路。 方法一:在调用文件里声明元件,它放在结构体的 begin之前。 第一步:设计2输入与非门,其VHDL源程序为 nand_2.vhd; 第二步:元件声明及元件例化,其VHDL源程序为 nand_4.vhd;
生成的RTL视图:
library ieee; use ieee.std_logic_1164.all; entity nand_2 is 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;
程序包(p228)
在设计实体中声明的数据类型、数据对象 只能用于本实体和结构体内部,不能被 其他实体和结构体使用,就像高级语言 中的局部变量一样。为了使数据类型、 元件等能被多个设计实体调用或共享, VHDL提供了程序包的机制。程序包就像 是公用的工具箱,各个设计实体都可使 用其中定义的工具。
程序包的格式
元件例化语句的格式
元件例化就是将元件的引脚与调用该元件 的端口的引脚相关联。关联方法有位置关 联,名字关联,混合关联。
(1)位置关联方式 例化名:元件名 port map(信号1,信号2,.....); (2)名字关联方式 例化名:元件名 port map(信号关联式1,信号关联式2,.....); 信号关联式形如:a=>a1,b=>b1,意思是将元件的引脚a与调用该元 件的端口a1相关联。这种情况下,位置可以是任意的。 (3)混合关联方式 将上述两种相结合,即为混合关联方式。
VHDL中的结构设计元件例化语句
generic 语句的使用实例
16位总线反相器设计: architecture s of inv16 is component businv is generic (width:positive:=4);
元件使用语句为并行语句,只能在结构体中使 顺序关联法:port(data,en,out);
generic (参量名:参量类型; 使用语句种类最少,能够直接编译综合;
用,不能在子程序中(函数、过程、进程)使
用。
信号对应表的格式
将本元件的各端口与外部的信号接点或端口建 立连接;每个连接应该具有一个唯一的名称; 例:原来元件的端口:
entity kor4 is port (a0,a1,a2,a3: in std_logic; y: out std_logic);end kor4; architecture dat of kor4 is begin y<= a0 or a1 or a2 or a3;end dat;
VHDL中的结构设计: generate 语句
port(a, b: in std_logic;y: out std_logic); 顺序关联法:port(data,en,out); 名称关联法:port(a=>data,y=>out,b=>en);
VHDL中的结构设计的实例
质数检测器的结构设计p.284 表4-43 architecture prime1_arch of prime is signal n3_l,n2_l,n1_l:std_logic; signal n3l_n0,n3l_n2l_n1,n2l_n1_n0 ,n2_n1l_n0:std_logic; component kinv port (a: in std_logic;y: out std_logic);end component; component kand2 port (a0,a1: in std_logic;y: out std_logic);end component; component kand3 port (a0,a1,a2: in std_logic;y: out std_logic);end component; component kor4 port (a0,a1,a2,a3: in std_logic;y: out std_logic);end component;
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
FOR- GENERATE 模式的生成语句
FOR- GENERATE 模式生成语句的书写格式为: [标号:]FOR 循环变量 IN 离散范围 GENERATE <并行处理语句>; END GE的值在每次的循环中都将发生变化;离散范 围用来指定循环变量的取值范围,循环变量的取值将从取值 范围最左边的值开始并且递增到取值范围最右边的值,实际 上也就限制了循环的次数;循环变量每取一个值就要执行一 次GENERATE语句体中的并行处理语句;最后FORGENERATE模式生成语句以保留字END GENERATE [标 号:];来结束GENERATE语句的循环。 生成语句的典型应用是存储器阵列和寄存器。下面以四位 移位寄存器为例,说明FOR- GENERATE模式生成语句的优 点和使用方法。
library ieee; use ieee.std_logic_1164.all; entity shift_reg4 is port(clk:in std_logic; D:in std_logic; Q:out std_logic); end shift_reg4; architecture two of shift_reg4 is component shift_reg1 port(clk:in std_logic; D:in std_logic; Q:out std_logic); end component;--元件声明 signal y:std_logic_vector(0 to 4); begin y(0)<=D; u0:for i in 0 to 3 generate—元件生成 ux:shift_reg1 port map(clk,y(i),y(i+1)); end generate; Q<=y(4); end two;
思考题
用一位D触发器,利用元件例化语句实现4位移位寄存器。 思路: (1)设计一位D触发器的源程序文件shift_reg1.vhd。 (2)用元件例化实现4位移位寄存器文件shift_reg4.vhd。
1位D触发器的VHDL程序文件: library ieee; use ieee.std_logic_1164.all; entity shift_reg1 is port(clk:in std_logic; D:in std_logic; Q:out std_logic); end entity; architecture one of shift_reg1 is begin process(clk,D) begin if clk'event and clk='1' then Q<=D; end if; end process; end one;
程序包(p228)
在设计实体中声明的数据类型、数据对象 只能用于本实体和结构体内部,不能被 其他实体和结构体使用,就像高级语言 中的局部变量一样。为了使数据类型、 元件等能被多个设计实体调用或共享, VHDL提供了程序包的机制。程序包就像 是公用的工具箱,各个设计实体都可使 用其中定义的工具。
程序包的格式
library ieee; use ieee.std_logic_1164.all; entity nand_4 is port(a,b,c,d:in std_logic; y:out std_logic); end nand_4; architecture one of nand_4 is --元件声明 component nand_2 port(a,b:in std_logic; y:out std_logic); end component;--元件声明 signal y1,y2:std_logic; begin 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;
可以看出用FOR- GENERATE模式生成语句替代思考题中 的四条元件例化语句,使VHDL程序变的更加简洁明了。 IF- GENERATE模式生成语句
IF- GENERATE模式生成语句的书写格式如下: [标号:]IF 条件 GENERATE
<并行处理语句>;
第六讲 VHDL硬件描述语言_4
教学课时:2学时 教学内容: VHDL语句 (1)元件例化语句(1学时) (2)生成语句(1学时)
元件例化语句
元件例化就是将预先设计好的设计实体 定义为一个元件,然后利用映射语句将 此元件与另一个设计实体中的指定端口 相连,从而进行层次化设计。元件例化 是使VHDL设计实体构成“自上而下” 或“自下而上”层次化设计的一种重要 途径。
用将元件声明放在程序包里的设计方法设计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实现元件例化。
例1:利用2输入与非门元件,设计4输入的与 非与非电路。 方法2:将元件声明放在程序包里进行说明
第一步:设计2输入与非门,其VHDL源程序为 nand_2.vhd; 第二步:元件声明,放在程序包里,其VHDL源程序 为mypkg.vhd; 第三步:元件例化,其VHDL源程序为 mynand_4.vhd;
4位D触发器的VHDL程序文件:
library ieee; use ieee.std_logic_1164.all; entity shift_reg4 is port(clk:in std_logic; D:in std_logic; Q:out std_logic); end shift_reg4; architecture one of shift_reg4 is component shift_reg1 port(clk:in std_logic; D:in std_logic; Q:out std_logic); end component;--元件声明 signal Q0,Q1,Q2:std_logic; begin --元件例化 u0:shift_reg1 port map(clk,D,Q0); u1:shift_reg1 port map(clk,Q0,Q1); u2:shift_reg1 port map(clk,Q1,Q2); u3:shift_reg1 port map(clk,Q2,Q); end one;
例: FOR- GENERATE模式生成语句应用 .用1位D触发器设计4 位移位寄存器。
1位D触发器的VHDL程序文件: library ieee; use ieee.std_logic_1164.all; entity shift_reg1 is port(clk:in std_logic; D:in std_logic; Q:out std_logic); end entity; architecture one of shift_reg1 is begin process(clk,D) begin if clk'event and clk='1' then Q<=D; end if; end process; end one; 4位D触发器的VHDL程序文件:
package 程序包名 is 程序包头说明部分 end 程序包名; package body 程序包名 is 程序包体说明部分及包体内容 end 程序包名;
如何打开程序包? 用语句use work.程序包名.all;打开程序包。 其中,work库是用户设计的现行工作库,用 于存放自己设计的工程项目。在QuartusII 的根目录下为设计建立一个工程目录(即文 件夹),VHDL综合器将此目录默认为work 库。但work不是设计项目的目录名,而是一 个逻辑名。VHDL标准规定work库总是可见 的,因此,在程序设计时不需要明确指定。
元件例化举例
例1:利用2输入与非门元件,设计4输入的与非与非 电路。 方法一:在调用文件里声明元件,它放在结构体的 begin之前。 第一步:设计2输入与非门,其VHDL源程序为 nand_2.vhd; 第二步:元件声明及元件例化,其VHDL源程序为 nand_4.vhd;
生成的RTL视图:
library ieee; use ieee.std_logic_1164.all; entity nand_2 is 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;
元件例化语句的格式
元件例化就是将元件的引脚与调用该元件 的端口的引脚相关联。关联方法有位置关 联,名字关联,混合关联。
(1)位置关联方式 例化名:元件名 port map(信号1,信号2,.....); (2)名字关联方式 例化名:元件名 port map(信号关联式1,信号关联式2,.....); 信号关联式形如:a=>a1,b=>b1,意思是将元件的引脚a与调用该元 件的端口a1相关联。这种情况下,位置可以是任意的。 (3)混合关联方式 将上述两种相结合,即为混合关联方式。
元件例化语句分为元件声明和元件例化 两部分。 用元件例化方式设计电路的方法是: (1)完成各种元件的设计。 (2)元件声明。 (3)通过元件例化语句调用这些元件, 产生需要的设计电路。
元件声明语句的格式
COMPONENT 元件名 [GENERIC <参数说明>;] PORT <端口说明>; END COMPONENT;
library ieee; use ieee.std_logic_1164.all; use work.mypkg.all;--打开程序包 entity mynand_4 is port(a,b,c,d:in std_logic; y:out std_logic); end mynand_4; architecture one of mynand_4 is signal y1,y2:std_logic; begin --元件例化 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;