收藏 分享(赏)

第四章 VHDL设计初步.ppt

上传人:杨桃文库 文档编号:8899698 上传时间:2019-07-16 格式:PPT 页数:46 大小:833.50KB
下载 相关 举报
第四章 VHDL设计初步.ppt_第1页
第1页 / 共46页
第四章 VHDL设计初步.ppt_第2页
第2页 / 共46页
第四章 VHDL设计初步.ppt_第3页
第3页 / 共46页
第四章 VHDL设计初步.ppt_第4页
第4页 / 共46页
第四章 VHDL设计初步.ppt_第5页
第5页 / 共46页
点击查看更多>>
资源描述

1、第四章 VHDL设计初步,EDA,VHDL (Very High Speed Integrated Circuit Hardware Description Language),意为超高速集成电路硬件描述语言。由美国国防部7080年代组织研制开发,1985年完成第一版, 1987年成为IEEE Std1076-1987。美国国防部规定所有官方的ASIC设计都必须用VHDL为设计描述语言,此后渐渐成为工业标准为大家接受。1993年修改成IEEE Std1164-1993。1995年,中国国家技术监督局组织编撰并出版CAD通用技术规范,推荐VHDL语言作为我国电子设计自动化硬件描述语言的国家标准。

2、,VHDL的由来,4.1 概述,一些语法约定, 可选内容 大小写不敏感 - 后面为注释 层次缩进 源文件名必须与实体名一致,4.2 VHDL语言的基本单元及其构成,4.2.1 2选1多路选择器的VHDL描述,LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL;ENTITY mux21 ISPORT(a,b,s: IN BIT;q: OUT BIT); END mux21;ARCHITECTURE connect OF mux21 IS BEGINq=a WHEN s=0 ELSEb; END connect;,设计一个2选1多路通道,程序包,实体,结构体,信号传

3、输符号,4.2.2 VHDL程序的基本结构,1、ENTITY(实体)是VHDL设计中最基本的组成部分之一,它类似于原理图中的一个部件符号,它并不描述设计的具体功能,只定义了该设计所需的全部输入/输出信号。,实体的格式如下:ENTITY 实体名 IS GENERIC(常数名: 数据类型 :=设定值 );PORT(列出设计的所有输入/输出信号);END 实体名;,VHDL结构要点,实际上是器件名,最好用相应功能来确定,如counter4b,adder8b。注意不能用prim等库的元件的名字。,规定实体的内部特性参数,如端口大小,子元件数目,定时特性等。,端口说明格式为:PORT(端口名:端口模式

4、数据类型);,VHDL结构要点,IN OUT INOUT BUFFER,端口模式:用来说明数据、信号通过该端口的方向。 (1)IN 信号进入实体; (2)OUT 信号离开实体,不能在内部反馈使用; (3)INOUT 信号是双向的,既可进入也可离开实体; (4)BUFFER 信号输出到实体外部,但同时也可在 实体内部反馈,允许内部引用该端口的信号。,注意简单地说 = 或 : = In端口out端口 = 或 : = buffer端口 = 或 : = buffer端口,VHDL结构要点,In 信号只能被引用,不能被赋值 out 信号只能被赋值,不能被引用 buffer 信号可以被引用,也可以被赋值,

5、2、Arcthitecture(结构体)格式:Arcthitecture 结构体名 of 实体名 is 说明语句 内部信号、常数、元件、数据类型、函数等的定义begin 功能描述语句end 结构体名;,VHDL结构要点,并行语句或顺序语句或它们的混合。,描述器件内部逻辑功能或电路结构。,VHDL结构要点,说明语句说明功能描述中用到的信号(SIGNAL)数据类型(TYPE)常数(CONSTANT)元件(COMPONENT)函数(FUNCTION)过程(PROCEDURE),VHDL结构要点,功能描述:块语句、进程语句、信号赋值语句、子程序调用语句、元件例化语句 多个语句可以是并行执行的,也可顺序

6、执行,取决于所使用的语句类型: 块语句:多个并行语句构成的模块 进程语句:顺序语句模块 信号赋值语句:向信号或端口赋值 子程序调用语句:调用一个已设计好子程序。 元件例化语句:调用元件,并将元件拼接为电路模块,VHDL结构要点,ENTITY mux21a ISPORT (a,b: IN BIT;s: IN BIT;q: OUT BIT); END ENTITY mux21a; ARCHITECTURE one OF mux21a ISBEGINq=a WHEN s=0 ELSE b; END ARCHITECTURE one;,WHEN_ELSE并行赋值语句,赋值语句,条件判断表达式,ARCH

7、ITECTURE one OF mux21a ISSIGNAL d,e: BIT; BEGINd= a AND (NOT s);e= b AND s; q= d OR e; END ARCHITECTURE one;,逻辑操作符: BIT,BOOLEAN,STD_LOGIC,ARCHITECTURE one OF mux21a ISBEGINq=(a AND (NOT s) OR (b AND s) ; END ARCHITECTURE one;,ARCHITECTURE one OF mux21a ISBEGINPROCESS (a,b,s)BEGINIF s=0 THENq=a;ELSEq

8、= b;END IF;END PROCESS; END ARCHITECTURE one;,PROCESS引导的语句为进程语句,所有顺序语句都必须放在进程语句中,PROCESS语句的敏感信号表,IF_THEN_ELSE顺序语句,4.3 VHDL文本输入设计方法初步,FileNew,FileSave,VHDL文件 .vhd AHDL文件 .tdf Verilog文件 .v,技巧:从保存路径直接新建一个文件夹,将当前设计指定为工程,然后选择器件、分配引脚,File-Project-Set Project to Current File,排错,有两种定位错误的方法,第1步、单击Error行,使之反色

9、显示 第2步、单击Locate按钮,直接双击Error行,常见错误,标点错误 将设计文件放于根目录下,没有放在工作库下 文件后缀.vhd设成.tdf 设计文件名和实体名不一致 底层设计没有运行create default include file命令 ,仿真下载,时序仿真和功能仿真的意义 时序仿真就是接近真实器件运行特性的时序仿真, 仿 文件中已包含了器件硬件特性参数,因而仿真精度高。 但时序仿真的仿真文件必须来自针对具体器件的综合 器与适配器。 功能仿真是直接对VHDL、原理图描述或其它描述形式 的逻辑功能进行测试模拟,以了解其实现的功能是否 满足原设计要求的过程。仿真过程不涉及任何具体器

10、件的硬件特性。,仿照第三章的内容进行仿真和下载,LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY DFF1 IS PORT (clk:IN STD_LOGIC;d:IN STD_LOGIC;q:OUT STD_LOGIC);END DFF1 ;,ddf1,打开IEEE库,STD_LOGIC:标准逻辑位 在综合器中,STD_LOGIC被看作有9种值,如-、X、0、1和Z等 而BIT只能取0和1,程序包,4.4 VHDL 程序设计举例,例41 D触发器,ARCHITECTURE bhv OF DFF1 ISSIGNAL q1:STD_LOGIC;

11、BEGINPROCESS(clk)BEGINIF clkEVENT AND CLK=1 THENq1=D;END IF;q=q1;END PROCESS; END bhv;,引进内部节点信号,进程语句及敏感信号,检测clk上升沿,将数据输出端口,不完整条件语句,顺序 语句,边沿型触发器的时序波形,LIBRARY IEEE; USE IEEE. STD_LOGIC _1164.all; ENTITY test1 IS port (clk, d : IN STD_LOGIC;q : OUT STD_LOGIC); END test1; ARCHITECTURE test1_body OFtest1

12、 IS BEGIN PROCESS (clk) BEGINIF rising_edge(clk) THENq = d;END IF; END PROCESS; END test1_body;,测定上升沿的函数,clk必须是STD_LOGIC,例41基本语法小结, 定义信号 SIGNAL: SIGNAL A1 : STD_LOGIC;, 信号属性函数 EVENT, PROCESS语句结构: 顺序语句,行为描述语句, 敏感信号表,PROCESS语句特点, 时序电路:不完整条件语句产生时序电路, 时钟上升沿测试语句结构:CLKEVENT AND CLK = 1 ,RISING_EDGE(),例42

13、一位全加器,半加器真值表,方法一:根据电路原理图,LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY h_adder1 IS PORT (a,b:IN STD_LOGIC;co,so:OUT STD_LOGIC); END h_adder1; ARCHITECTURE fh1 OF h_adder1 IS BEGINso=NOT(a XOR (NOT b);co=a AND b; END fh1;,并行赋值语句,方法二:根据真值表, ARCHITECTURE fh2 OF h_adder2 IS SIGNAL sel:STD_LOGIC_VECT

14、OR(1 DOWNTO 0);BEGINselsosososoNULL;END CASE;END PROCESS; END fh2;,并置操作符,完整条件语句,全加器,或门描述 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY or2a IS PORT (a,b:IN STD_LOGIC;c:OUT STD_LOGIC); END or2a; ARCHITECTURE one OF or2a IS BEGINc=a OR b; END one;,全加器,LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENT

15、ITY f_adder IS PORT (ain,bin,cin:IN STD_LOGIC;cout,sum :OUT STD_LOGIC);END ENTITY f_adder; ARCHITECTURE fd1 OF f_adder ISCOMPONENT h_adder1PORT(a,b: IN STD_LOGIC;co,so:OUT STD_LOGIC);END COMPONENT;COMPONENT or2aPORT(a,b: IN STD_LOGIC;c:OUT STD_LOGIC);END COMPONENT;,SIGNAL d,e,f:STD_LOGIC; BEGINu1: h

16、_adder1 PORT MAP (ain,bin,d,e) ; u2: h_adder1 PORT MAP (e,cin,f,sum) ; u3: or2a PORT MAP (d,f,cout); END fd1;,d,e,f,例42基本语法小结,CASE语句:表达真值表 CASEIS WHEN; END CASE;,标准逻辑矢量数据类型:STD_LOGIC_VECTOR,B:OUT STD_LOGIC_VECTOR(7 DOWNTO 0); SIGNAL A: STD_LOGIC_VECTOR(1 TO 4); B=“01100010”; -B(6)=? B(4 DOWNTO 1 )=“

17、1101”; -B(3)=? A(1 TO 4 )=“1101”; -A(3)=? B(7 DOWNTO 4 )=A; -B(6)=A(?),元件例化语句COMPONENT 元件名PORT(端口名表);END COMPONENT;例化名:元件名 PORT MAP(端口名连接端口名,);,并置操作符:“ & ”a = 1 0 b(1) e(2)IF a d = “10100011” THEN,LIBRARY IEEE; USE IEEE.std_logic_1164.all; ENTITY cnt4_1 ISPORT(clk:IN BIT;q:BUFFER INTEGER RANGE 15 DO

18、WNTO 0); END cnt4_1; ARCHITECTURE behave OF cnt4_1 IS BEGINPROCESS(clk)BEGINIF clkEVENT AND clk=1 THENq=q+1;END IF;END PROCESS; END behave;,取整数数据类型,为什么?,整数取值范围,端口信号模式取 BUFFER,为什么?,注意整数和位的不同表达方式!,例43 四位加法计数器, 定输出信号数据类型为整数类型: INTEGER,必须定义整数取值范围, RANGE 15 DOWNTO 0, 端口信号模式取缓冲型: BUFFER, 整数和位的表达方式:1 + 5 ;

19、 1;“1011”, 加减算术符的适用范围:整数Q = Q + 1 ;,例43基本语法小结,如何进行四位加法计数器的设计?, 计数器由组合电路模块和时序电路模块构成:加1组合电路、锁存器;计数时钟其实是锁存信号, BUFFER并非是一种特殊的硬件端口结构,只是一种功能描述,作为内部输出信号可以反馈到实体内部。, 注意BUFFER与INOUT 不同。,4位锁存器,组合电路加1器,锁存信号,输出反馈,综合后的计数器电路RTL图,LIBRARY IEEE; USE IEEE.std_logic_1164.all; USE IEEE.STD_LOGIC_UNSIGNED.ALL; Entity cnt

20、4_2 is port (clk: in std_logic;q : out std_logic_vector(3 downto 0); end cnt4_2; architecture test1_body of cnt4_2 IS signal q1:std_logic_vector(3 downto 0); begin process (clk) beginif clkevent AND clk=1 thenq1 = q1+1;end if; q=q1; end process; end test1_body;,STD_LOGIC_UNSIGNED库里的操作符为重载函数,解决了“+”只能对相同数据类型操作数进行运算的缺点,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 高等教育 > 大学课件

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报