第六讲 VHDL的元件例化语句

合集下载

元件例化语句

元件例化语句

元件例化语句元件例化就是引入一种连接关系,将预先设计好的设计实体定义为一个元件,然后利用特定的语句将此元件与当前的设计实体中的指定端口相连接,从而为当前设计实体引入一个新的低一级的设计层次。

在这里,当前设计实体相当于一个较大的电路系统,所定义的例化元件相当于一个要插在这个电路系统板上的芯片,而当前设计实体中指定的端口则相当于这块电路板上准备接受此芯片的一个插座。

元件例化是使VHDL 设计实体构成自上而下层次化c设计的一种重要途径。

在一个结构体中调用子程序,包括并行过程的调用非常类似于元件例化,因为通过调用,为当前系统增加了一个类似于元件的功能模块。

但这种调用是在同一层次内进行的,并没有因此而增加新的电路层次,这类似于在原电路系统增加了一个电容或一个电阻。

元件例化是可以多层次的,在一个设计实体中被调用安插的元件本身也可以是一个低层次的当前设计实体,因而可以调用其它的元件,以便构成更低层次的电路模块。

因此,元件例化就意味着在当前结构体内定义了一个新的设计层次,这个设计层次的总称叫元件,但它可以以不同的形式出现。

如上所说,这个元件可以是已设计好的一个VHDL 设计实体,可以是来自FPGA 元件库中的元件,它们可能是以别的硬件描述语言,如Verylog 设计的实体。

元件还可以是软的IP 核,或者是FPGA 中的嵌入式硬IP 核。

元件例化语句由两部分组成,前一部分是对一个现成的设计实体定义为一个元件,第二部分则是此元件与当前设计实体中的连接说明,它们的语句格式如下:(1)元件定义语语句COMPONENT 元件名GENERIC (类属表);PORT (端口名表);END COMPONENT 文件名;(2)元件例化语句例化名:元件名PORT MAP( [端口名=>] 连接端口名,...) ;CLK1HZ : IN STD_LOGIC;EN : IN STD_LOGIC;LOW : OUT STD_LOGIC_VECTOR(3 DOWNTO 0);HIGH : OUT STD_LOGIC_VECTOR(3 DOWNTO 0));END counter24;ARCHITECTURE rtl of counter24 ISSIGNAL LOW_REG : STD_LOGIC_VECTOR(3 DOWNTO 0):="0000"; SIGNAL HIGH_REG : STD_LOGIC_VECTOR(3 DOWNTO 0):="0000"; SIGNAL CLR : STD_LOGIC:='0';BEGIN--个位计数LOW_PROC:PROCESS(CLK1HZ,EN,CLR)BEGINIF rising_edge(CLK1HZ) THENIF EN = '1' THENIF LOW_REG = "1001" OR CLR = '1' THEN --23:59进位LOW_REG <= "0000";ELSE LOW_REG <= LOW_REG + '1';END IF;END IF;END IF;END PROCESS;LOW <= LOW_REG;--十位计数HIGH_PROC:PROCESS(CLK1HZ,EN,CLR)BEGINIF rising_edge(CLK1HZ) THENIF EN = '1' THENIF CLR = '1' THENHIGH_REG <= "0000";ELSIF LOW_REG = "1001" THENHIGH_REG <= HIGH_REG + '1';END IF;END IF;END IF;END PROCESS;HIGH <= HIGH_REG;CLR <= '1' WHEN LOW_REG = "0011" AND HIGH_REG = "0010" ELSE '0'; --23点以后进位END rtl;60进制BCD码计数器(2010-06-28 11:24:25)LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;ENTITY counter60 ISPORT(CLK1HZ : IN STD_LOGIC;EN : IN STD_LOGIC;ENOUT : OUT STD_LOGIC;LOW : OUT STD_LOGIC_VECTOR(3 DOWNTO 0);HIGH : OUT STD_LOGIC_VECTOR(3 DOWNTO 0));END counter60;ARCHITECTURE rtl OF counter60 ISSIGNAL LOW_REG : STD_LOGIC_VECTOR(3 DOWNTO 0):="0000"; SIGNAL HIGH_REG : STD_LOGIC_VECTOR(3 DOWNTO 0):="0000"; BEGIN--个位计数LOW_PROC:PROCESS(CLK1HZ,EN)BEGINIF rising_edge(CLK1HZ) THENIF EN ='1' THENIF LOW_REG ="1001" THENLOW_REG <= "0000";ELSE LOW_REG <= LOW_REG + '1'; --注意:不同位数可以相加END IF;END IF;END IF;END PROCESS;LOW <= LOW_REG; --将值赋给输出LOW--十位计数HIGH_PROC:PROCESS(CLK1HZ,EN)BEGINIF rising_edge(CLK1HZ) THENIF EN = '1' THENIF LOW_REG = "1001" THEN。

VHDL中元件例化语句的使用

VHDL中元件例化语句的使用
C0M P0NENT。
(2)元 件例 化 语句
例 化名 :元 件 名 PORT MAP( [端 口名 =>] 连接 端 口名 ,...) ;
元 件 例 化 语 句 ,其 中的 例 化 名 必 须是 已经 存在 的 , 它类 似 于 标在 当前 电路 设计 系 统 中的一 个插 座 名 ,而 元件 名 则是 准 备在 此插 座 上 插入 的底 层 设计 中的 元件 名 PORT MAP是 端 口映射 ,或 端 口 连接 的意 思 ,其 中 的“端 口名 ”是在 元件 定 义语 句 中 的端 口名表 中 己 定 义好 的 元件 端 口的 名字 ,或 者 说是 顶层 文 件 中待 连接 的 各个 元件 本 身 的端 口名 。“连 接 端 口名 ”则是 顶 层系 统 中准 备 与接 入 的元 件 的 端 口相 连 的通信 线名 ,相 当于插 座上各插 针的 引脚 名 。元 件例化 就是 讲元 件的 引脚与 调用该 元件 的端 口的引脚相 关联 ,该关联 有三种 表达 方式 ,一是端 口名关 联法 也称 端 口名 映射 法 。形式 :例 化名 : 元件 名 PORT MAP(信号 关联式 1,信号关 联式2,…);信号 关联式 形如 : b=>b1,意思是将元 件的 引脚b与调用该 元件 的端 [Slbl相关 联 ,符号“=>” 为连接 符 号 。这 时 ,端 口名 与 连接 端 口名 的对 应 形式 在PORT MAP 句 中 的位置 可 以是 任 意 的 。二 是 位置 关 联法 。所 谓 位置 关 联 ,就是 以位置 的对 应 关系 连 接相 应 的端 口。形 式 :例 化 名 :元 件 名 PORT MAP(信号 l,信 号2, …);使 用 这种 方 式 ,端 口名 和关 联 连接 符 号 都 可省 去 ,在PORT MAP子 句 中要 求连 接端 口的信 号排 列 方 式与 所 需例 化 的 元件 端 口定 义 的端 口名 相对 应 。三 是 混合 关联 法 , 即端 口 名 映射 法与 位置 关 联法 相结 合使 用 的方 法 。

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”。

元器件例化语句

元器件例化语句

元器件例化语句1. 元器件例化语句就像是魔法咒语一样,能让电路设计变得超简单!比如说,我要设计一个计数器电路,使用D触发器的例化语句,就像把一个个小魔法零件组装起来,“DFF_inst : DFF port map ( clk => clk, d => data, q => count );”,看,一个简单的计数器就有雏形啦。

2. 元器件例化语句啊,那可是电路世界里的万能钥匙。

就像你玩积木,每个不同形状的积木(元器件)都有它特定的拼接方式(例化语句)。

像在做一个简单的数字时钟电路时,用七段数码管的例化语句“SEG_DISP_inst : SEG_DISP port map ( num => time_val, seg =>seg_out );”,就如同把代表时间的数字准确地放在了该放的位置。

3. 元器件例化语句,你可别小瞧它,这可是电路设计师的秘密武器呢。

想象一下,你是个大厨,元器件是食材,例化语句就是你独特的烹饪手法。

例如我在构建一个音频放大电路,三极管的例化语句“TRANS_inst : TRANS port map ( base => input_signal, collector => output_signal );”就像恰到好处地调味,让声音放大得恰到好处。

4. 嘿,元器件例化语句真的很有趣!它就像给每个电子元器件安排一个专属座位一样。

我做一个LED闪烁电路的时候,LED的例化语句“LED_inst : LED port map ( anode => power, cathode => control_signal );”就像告诉LED,你就坐这儿,然后按照我的规则闪起来。

5. 元器件例化语句简直就是电路里的“排兵布阵”之法。

你看,在设计一个逻辑门电路的时候,与门的例化语句“AND_GATE_inst :AND_GATE port map ( input1 => a, input2 => b, output => result );”,这就如同在战场上把士兵(输入信号)安排到正确的位置(与门的输入端口),然后得到预期的战斗结果(输出信号)。

VHDL基本语句

VHDL基本语句
表达式可以是一个整数或枚举类型的值或数组 选择值有四种表达方式: ● 单个数值 , 如 :6 ● 数值选择范围, 如: (2 TO 4)表示取值为2,3,4。 ● 并列数值 如: 3 5 表示取值为3或着5 ● 混合方式 以上三种方式的混合

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的基本描述语句第六七八九十一二讲

VHDL的基本描述语句第六七八九十一二讲

END CASE;
选择值可以有四种不同的表达方式:
多条件选择值的一般表达式为:
单个普通数值,如6。 数值选择范围,如(2 TO 4),表示取值为
选择值 [ |选择值 ]
2、3或4。 并列数值,如35,表示取值为3或者5。
混合方式,以上三种方式的混合。
Case 语句的选择项必须是一个静态值! --example of a legal case statement
A modulo-16 counter
entity counter is port ( clk : in bit; count : out natural );
end entity counter; -------------------------------------------------architecture behavior of counter is begin
end entity thermostat; -------------------------------------------------architecture example of thermostat is begin
controller : process (desired_temp, actual_temp) is begin
3.4 VHDL的基本描述语句
3.4.1 顺序语句
一、顺序赋值语句 二、IF 语句 三、CASE语句 四、LOOP语句 五、NEXT语句 六、EXIT语句
七、WAIT语句 八、子程序调用语句 九、返回语句(RETURN) 十、空操作语句(NULL) 十一、断言(ASSERT)语句 十二、REPORT语句
【例】 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL;

VHDL并行语句

过程调用的实质内容要先装入程序包中(Package):
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课件


格式4: ---优先条件列举IF语句
IF 条件句1 THEN
顺序语句1;
ELSIF 条件句2 THEN
顺序语句2;
… ELSE
顺序语句n; END IF;
注意!
在PROCESS中“IF” 语句可嵌套使用, 在IF语句中可再调用另一个“IF”语句。
2021/6/16
13
6.6.2 VHDL顺序语句
2. IF语句
2021/6/16
11
6.6.2 VHDL顺序语句
2. IF语句
格式3:多重IF嵌套语句 IF 条件语句1 THEN
顺序语句1; IF 条件语句2 THEN
顺序语句2; ELSE
顺序语句3; END IF; ELSE 顺序语句4 END IF;
2021/6/16
12
6.6.2 VHDL顺序语句 2. IF语句
END;
ARCHITECTURE behav OF alu_ab IS
CONSTANT plus:STD_LOGIC_VECTOR (1 DOWNTO 0):= b “ 00 ” ; CONSTANT minus:STD_LOGIC_VECTOR (1 DOWNTO 0):= b “ 01 ” ; CONSTANT and_ab:STD_LOGIC_VECTOR (1 DOWNTO 0):= b " 10 " ;
a,b,c,d:IN STD_LOGIC; z:OUT STD_LOGIC); END;
2021/6/16
a

b

c
选 择
z
d

s1 s2
4选1数据选择器的功能
s1s2 z 00 a 01 b 10 c 11 d

VHDL语言教程ppt课件

信号赋值语句: 目标信号名 <= 表达式;
x<=9; Z<=x after 5 ns; -- 在5ns后将x的值赋予z
9
3.1.2 数据类型
➢ VHDL的预定义数据类型 在VHDL标准程序包STANDARD中定义好,实际使用过程中,已
自动包含进VHDL源文件中,不需要通过USE语句显式调用。
布尔:(Boolean)
来,区分大小写;
VARIABLE string_var: STRING (1 TO 7);
string_var:=“A B C D” ;
-- 通常用“”引起来,区分大小写;
整数:(Integer)
取值范围 -(231-1) ~(231-1),可用32位有符号的二进制数表示
variable a:integer range -63 to 63
在条件语句中,必须要全面考虑Std_Logic的所有可能取值情况,否则综 合器可能会插入不希望的锁存器。
13
➢ 用户自定义
TYPE 数据类型名 IS 数据类型定义 OF 基本数据类型 或 TYPE 数据类型名 IS 数据类型定义
数组:type value_type is array (127 downto 0) of integer; type matrix_type is array (0 to 15, 0 to 31) of std_logic;
L: Weak 0
H: Weak 1
—:Don’t care
标准逻辑位矢量( Std_Logic_vector)
基于Std_Logic类型的数组;
使用Std_Logic和 Std_Logic_Vector要调用IEEE库中的Std_Logic_1164 程序包;就综合而言,能够在数字器件中实现的是“-、0、1、Z”四种状态。

VHDL语言教程

SIGNAL a:Bit_Vector(0 TO 7); SI精G选N版课A件Lppta:Bit_Vector ( 7 DOWNTO 0) 10
字符:(Character)
TYPE CHARACTER IS (NUL, SOH,STX, …, ‘ ’, ‘!’,…); --通常用‘’引起
字符串:(String)
精选版课件ppt
14
3.1.3 数据类型转换
VHDL为强定义类型语言,不同类型的数据不能进行运算和直接赋值。 类型标记法
Variable A: integer; Variable B: real; A= integer (B); B=real (A);
函数法
Conv_interger (A);--由std_logic转换为integer型,在std_logic_unsigned包。
上升沿:Clock’ EVENT AND Clock=‘1’
’range:生成一个限制性数组对象的范围
’range: “0 to n” ;
’reverse_range:“n downto 0”
’left:生成数据类型或数据子类型的左边界值; ’right , ’high, ’low, ’length
常用的HDL语言:VHDL 、Verilog HDL
精选版课件ppt
2
VHDL 概述:
VHDL VHSIC
VHSIC Hardwarter Description Language Very High speed integrated circuit
➢ VHDL是美国国防部在20世纪80年代初为实现其高速集成电路 硬件VHSIC计划提出的描述语言;
常数转换法 / 常量转换法
Type conv_table is array(std_logic) of bit;
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

用将元件声明放在程序包里的设计方法设计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)元件声明。 (3)通过元件例化语句调用这些元件, 产生需要的设计电路。
元件声明语句的格式
COMPONENT 元件名 [GENERIC <参数说明 ;] 参数说明>; 参数说明 PORT <端口说明 ; 端口说明>; 端口说明 END COMPONENT; ;
package 程序包名 is 程序包头说明部分 end 程序包名; package body 程序包名 is 程序包体说明部分及包体内容 end 程序包名;
如何打开程序包? 用语句use work.程序包名.all;打开程序包。 其中,work库是用户设计的现行工作库,用 于存放自己设计的工程项目。在QuartusII 的根目录下为设计建立一个工程目录(即文 件夹),VHDL综合器将此目录默认为work 库。但work不是设计项目的目录名,而是一 个逻辑名。VHDL标准规定work库总是可见 的,因此,在程序设计时不需要明确指定。
元件例化语句的格式
元件例化就是将元件的引脚与调用该元件 的端口的引脚相关联。关联方法有位置关 联,名字关联,混合关联。
(1)位置关联方式 ) 例化名: map(信号 信号1,信号2, 例化名:元件名 port map(信号1,信号2,.....); (2)名字关联方式 ) 例化名:元件名 port map(信号关联式 ,信号关联式2,.....); 例化名: 信号关联式1,信号关联式 , 信号关联式 信号关联式形如: 意思是将元件的引脚a与调用该元 信号关联式形如:a=>a1,b=>b1,意思是将元件的引脚 与调用该元 意思是将元件的引脚 件的端口a1相关联 这种情况下,位置可以是任意的。 相关联。 件的端口 相关联。这种情况下,位置可以是任意的。 (3)混合关联方式 ) 将上述两种相结合,即为混合关联方式。 将上述两种相结合,即为混合关联方式。
生成的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;
生成语句
生成语句( 生成语句(GENERATE)是一种可以建立重复结构或者是在多个模块 ) 的表示形式之间进行选择的语句。 的表示形式之间进行选择的语句。由于生成语句可以用来产生多个相 同的结构,因此使用生成语句就可以避免多段相同结构的VHDL程序 同的结构, 因此使用生成语句就可以避免多段相同结构的 程序 的重复书写(相当于‘复制’ 的重复书写(相当于‘复制’)。 生成语句有两种形式: 模式和IF- GENERATE模式。 模式。 生成语句有两种形式:FOR- GENERATE模式和 模式和 模式 FOR- GENERATE 模式的生成语句 FOR- GENERATE 模式生成语句的书写格式为: 模式生成语句的书写格式为: [标号:]FOR 循环变量 IN 离散范围 GENERATE 标号: 标号 <并行处理语句 ; 并行处理语句>; 并行处理语句 END GENERArary 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;
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; library ieee; use ieee.std_logic_1164.all; package mypkg is component nand_2 port(a,b:in std_logic; y:out std_logic);--元件声明 元件声明 end component; end mypkg;
程序包(p228)
在设计实体中声明的数据类型、数据对象 只能用于本实体和结构体内部,不能被 其他实体和结构体使用,就像高级语言 中的局部变量一样。为了使数据类型、 元件等能被多个设计实体调用或共享, VHDL提供了程序包的机制。程序包就像 是公用的工具箱,各个设计实体都可使 用其中定义的工具。
程序包的格式
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;
思考题
用一位D触发器,利用元件例化语句实现 位移位寄存器 位移位寄存器。 用一位 触发器,利用元件例化语句实现4位移位寄存器。 触发器 思路: 思路: 触发器的源程序文件shift_reg1.vhd。 (1)设计一位 触发器的源程序文件 )设计一位D触发器的源程序文件 。 (2)用元件例化实现4位移位寄存器文件 )用元件例化实现 位移位寄存器文件shift_reg4.vhd。 。 位移位寄存器文件
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;
其中循环变量的值在每次的循环中都将发生变化; 其中循环变量的值在每次的循环中都将发生变化;离散范 围用来指定循环变量的取值范围, 围用来指定循环变量的取值范围,循环变量的取值将从取值 范围最左边的值开始并且递增到取值范围最右边的值, 范围最左边的值开始并且递增到取值范围最右边的值,实际 上也就限制了循环的次数; 上也就限制了循环的次数;循环变量每取一个值就要执行一 语句体中的并行处理语句; 次GENERATE语句体中的并行处理语句;最后 语句体中的并行处理语句 最后FORGENERATE模式生成语句以保留字 模式生成语句以保留字END GENERATE [标 模式生成语句以保留字 标 语句的循环。 号:];来结束 ;来结束GENERATE语句的循环。 语句的循环 生成语句的典型应用是存储器阵列和寄存器。 生成语句的典型应用是存储器阵列和寄存器。下面以四位 移位寄存器为例,说明FOR- GENERATE模式生成语句的优 移位寄存器为例,说明 模式生成语句的优 点和使用方法。 点和使用方法。
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;
相关文档
最新文档