版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第六讲 VHDL硬件描述语言_4,教学课时:2学时 教学内容: VHDL语句 (1)元件例化语句(1学时) (2)生成语句(1学时),元件例化语句,元件例化就是将预先设计好的设计实体定义为一个元件,然后利用映射语句将此元件与另一个设计实体中的指定端口相连,从而进行层次化设计。元件例化是使VHDL设计实体构成“自上而下”或“自下而上”层次化设计的一种重要途径。,元件例化语句分为元件声明和元件例化两部分。 用元件例化方式设计电路的方法是: (1)完成各种元件的设计。 (2)元件声明。 (3)通过元件例化语句调用这些元件,产生需要的设计电路。,元件声明语句的格式,COMPONENT 元件名 GENE
2、RIC ; PORT ; END COMPONENT;,元件例化语句的格式,元件例化就是将元件的引脚与调用该元件的端口的引脚相关联。关联方法有位置关联,名字关联,混合关联。 (1)位置关联方式 例化名:元件名 port map(信号1,信号2,.); (2)名字关联方式 例化名:元件名 port map(信号关联式1,信号关联式2,.); 信号关联式形如:a=a1,b=b1,意思是将元件的引脚a与调用该元件的端口a1相关联。这种情况下,位置可以是任意的。 (3)混合关联方式 将上述两种相结合,即为混合关联方式。,元件例化举例,例1:利用2输入与非门元件,设计4输入的与非与非电路。 方法一:在调
3、用文件里声明元件,它放在结构体的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
4、 one;,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);-元件例化
5、u2:nand_2 port map(c,d,y2); u3:nand_2 port map(y1,y2,y); end one;,例1:利用2输入与非门元件,设计4输入的与非与非电路。 方法2:将元件声明放在程序包里进行说明 第一步:设计2输入与非门,其VHDL源程序为nand_2.vhd; 第二步:元件声明,放在程序包里,其VHDL源程序为mypkg.vhd; 第三步:元件例化,其VHDL源程序为mynand_4.vhd;,程序包(p228),在设计实体中声明的数据类型、数据对象只能用于本实体和结构体内部,不能被其他实体和结构体使用,就像高级语言中的局部变量一样。为了使数据类型、元件等能被
6、多个设计实体调用或共享,VHDL提供了程序包的机制。程序包就像是公用的工具箱,各个设计实体都可使用其中定义的工具。,程序包的格式,package 程序包名 is 程序包头说明部分 end 程序包名; package body 程序包名 is 程序包体说明部分及包体内容 end 程序包名;,如何打开程序包? 用语句use work.程序包名.all;打开程序包。 其中,work库是用户设计的现行工作库,用于存放自己设计的工程项目。在QuartusII 的根目录下为设计建立一个工程目录(即文件夹),VHDL综合器将此目录默认为work库。但work不是设计项目的目录名,而是一个逻辑名。VHDL标准
7、规定work库总是可见的,因此,在程序设计时不需要明确指定。,用将元件声明放在程序包里的设计方法设计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实现元件例化。,library ieee; use ieee.std_logic_1164.all; entity nand_2 is port(a,b:in std_l
8、ogic; 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;,library ieee; use ieee.std
9、_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;,思考题,用一位D触发器,利用元件例
10、化语句实现4位移位寄存器。 思路: (1)设计一位D触发器的源程序文件shift_reg1.vhd。 (2)用元件例化实现4位移位寄存器文件shift_reg4.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(
11、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;,1位D触发器的VHDL程序文件: library ieee; use ieee.st
12、d_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 clkevent and clk=1 then Q=D; end if; end process; end one;,生成语句 生成语句(GENERATE)是一种可以建立重复结构或者是在多个模块的表示形式之间进行选择的语句。由于生成语句可以用来产生多个相同
13、的结构,因此使用生成语句就可以避免多段相同结构的VHDL程序的重复书写(相当于复制)。 生成语句有两种形式:FOR- GENERATE模式和IF- GENERATE模式。 FOR- GENERATE 模式的生成语句 FOR- GENERATE 模式生成语句的书写格式为: 标号:FOR 循环变量 IN 离散范围 GENERATE ; END GENERATE 标号;,其中循环变量的值在每次的循环中都将发生变化;离散范围用来指定循环变量的取值范围,循环变量的取值将从取值范围最左边的值开始并且递增到取值范围最右边的值,实际上也就限制了循环的次数;循环变量每取一个值就要执行一次GENERATE语句体中
14、的并行处理语句;最后FOR- GENERATE模式生成语句以保留字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 t
15、wo 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;,1位D触发器的VHDL程序文件: library ieee;
16、 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 clkevent and clk=1 then Q=D; end if; end process; end one;,例: FOR- GENERATE模式生成语句应用.用1位D触发器设计4位移位寄存器。,可以看出用FOR- GENE
17、RATE模式生成语句替代思考题中的四条元件例化语句,使VHDL程序变的更加简洁明了。,IF- GENERATE模式生成语句 IF- GENERATE模式生成语句的书写格式如下: 标号:IF 条件 GENERATE ; END GENERATE 标号;,思考题,设计一位二进制全加器,然后利用for-generate生成语句实现4位二进制全加器,并仿真验证设计结果。,library ieee; use ieee.std_logic_1164.all; entity adder_1 is port(a,b:in std_logic; cin:in std_logic; cout:out std_lo
18、gic; s:out std_logic); end adder_1; architecture one of adder_1 is signal temp:std_logic_vector(2 downto 0); begin process(a,b,cin) begin temp=a,一位二进制全加器的VHDL代码,library ieee; use ieee.std_logic_1164.all; entity adder_4 is port(a,b:in std_logic_vector(3 downto 0); cin:in std_logic; cout:out std_logic; sum:out std_logic_vector(3 downto 0); end entity; architecture one of adder_4 is component adder_1 port(a,b:in std_logic; cin:in std_logic; cout:out std_logic; s:out std_logic); end component; signal qout:std_logic_vector(
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 咳嗽咳痰护理评估的标准
- 新型职业者劳动合同范本下载
- 2026年劳动合同解除与赔偿标准全解读
- 2026年国际贸易合同风险防范指南
- 2025年下半年军队文职公共课-基础知识(马克思主义理论)-考前密训3课件(11.11)
- 2026年党支部思想政治工作报告分析(2篇)
- 医疗护理文件书写的职业道德
- 宝宝饮食与家庭习惯
- 外科护理课件制作中的品牌管理
- 护理服务:护理团队建设与激励
- 地质科普知识讲座
- 地理科学的发展及其对人类社会的贡献
- GB/T 43683.1-2024水轮发电机组安装程序与公差导则第1部分:总则
- 2024年江苏南京紫金投资集团有限责任公司招聘笔试参考题库含答案解析
- 物料降本规划方案
- Python经济大数据分析 课件 第7章 Python应用航空公司客户价值分析
- 云南德福环保有限公司2000t-a含油硅藻土处理和综合利用工程 环评报告
- 【实用资料】马克思主义基本原理绪论PPT
- 安全检查流程图
- GB/T 1921-2004工业蒸汽锅炉参数系列
- 基于web计算机应用竞赛管理系统论文
评论
0/150
提交评论