VHDL设计方法.ppt

上传人:本田雅阁 文档编号:2895123 上传时间:2019-06-02 格式:PPT 页数:85 大小:410.52KB
返回 下载 相关 举报
VHDL设计方法.ppt_第1页
第1页 / 共85页
VHDL设计方法.ppt_第2页
第2页 / 共85页
VHDL设计方法.ppt_第3页
第3页 / 共85页
VHDL设计方法.ppt_第4页
第4页 / 共85页
VHDL设计方法.ppt_第5页
第5页 / 共85页
点击查看更多>>
资源描述

《VHDL设计方法.ppt》由会员分享,可在线阅读,更多相关《VHDL设计方法.ppt(85页珍藏版)》请在三一文库上搜索。

1、VHDL设计方法,用VHDL语言实现可编程数字系统设计,VHDL设计方法,VHDL概述 VHDL的设计单元 VHDL的基本语法结构,第一部分,VHDL 概述,VHDL的含义,VHSIC (Very High Speed Integrated Circuit) Hardware Description Language,VHDL历史,1982年, 诞生于美国国防部赞助的VHSIC项目 1987年底,VHDL被IEEE和美国国防部确认为标准硬件描述语言 ,即IEEE-1076(简称87版) 1993年,IEEE对VHDL进行了修订,公布了新版本的VHDL,即IEEE标准的1076-1993(116

2、4)版本 1996年,IEEE-1076.3成为VHDL综合标准,VHDL特点,与其他的硬件描述语言相比,VHDL具有更强的行为描述能力 VHDL丰富的仿真语句和库函数,使得在设计的早期就能查验设计系统的功能可行性,随时可对设计进行仿真模拟 VHDL语句的行为描述能力和程序结构决定了他具有支持大规模设计的分解和已有设计的再利用功能 对于用VHDL完成的一个确定的设计,可以利用EDA工具进行逻辑综合和优化,并自动的把VHDL描述设计转变成门级网表 VHDL对设计的描述具有相对独立性,设计者可以不懂硬件的结构,也不必管理最终设计实现的目标器件是什么,而进行独立的设计,相关术语,HDL用来建立硬件电

3、路模型的程序语言 行为描述模型 用输入/输出响应来描述器件的模型 结构描述模型 用更低层次的器件的互连来描述器 件的模型 寄存器传输级(RTL)用于综合的一种行为描述模型 综合(Synthesis)将HDL转换为电路并对该电路进行 一定的优化 RTL Synthesis 将硬件的RTL模型转化为某种优化的 特殊的门级电路来具体实现,行为描述模型,只描述电路的功能,而不是结构 不针对专门的硬件 用于综合和仿真,Input1N,Output1N,IF input1 THEN FOR j IN high DOWNTO low LOOP shift(j) := shift(j); END LOOP;

4、output1 = shift AFTER 5ns,结构描述模型,描述电路的功能和结构 调用特殊的硬件 用于综合,Input 1,Input n,Output 1,Output n,底层元件,底层元件,RTL Synthesis,Process (a, b, c, d, sel) begin case (sel) is when “00” = mux_out mux_out mux_out mux_out = d; end case;,VHDL与其他HDL比较,VHDL “告诉我你想要电路做什么,我给你提供能实现这个功能的硬件电路” Verilog 和VHDL类似 ABEL、AHDL “告诉我

5、你想要什么样的电路,我给你提供这样的电路”,典型的综合流程,典型的仿真流程,第二部分,VHDL的设计单元,VHDL的设计单元,Entity(实体) 用来说明模型的外部特征 Architecture(构造体) 用来定义模型的功能 Configuration(配置) 将实体和它的构造体联系起来 Package(程序包) 类似于库,使实体和结构体内的数据类型、常量、子程序等对于其他设计单元可见,包括包体单元和说明单元,实体说明,ENTITY IS Generic Declarations Port Declarations END ; (1076-1987 version) END ENTITY ;

6、 ( 1076-1993 version),端口说明格式 PORT(SIGNAL名字:模式子类型标志BUS:=静态表达式,) 信号模式 IN:流入端口 OUT:流出端口 INOUT:双向端口(既可流入,又可流出) BUFFER:缓冲端口(只能有一个数据源,不能同时流入又流出),实体说明举例,ENTITY Example IS Generic ( constant tplh , tphl : time := 5 ns; de_value : integer := 1; ); Port ( signal clk : in bit; flag : out bit; q : out bit_vecto

7、r(3 downto 0) ); END ENTITY Example;,构 造 体 概 述,构造体和原理图类似 用来描述实体的内部结构和逻辑功能 必须和实体(ENTITY)相联系 一个实体(ENTITY)可以有多个构造体 构造体的运行是并发的 构造体类型包括: 行为描述 结构描述 混合描述,构造体基本结构,ARCHITECTURE OF IS 说明语句 BEGIN 并行语句 END ; (1076-1987 version) END ARCHITECTURE; (1076-1993 version),实体和构造体之间的关系,Input 1,Input n,Output 1,Output n,

8、实体,A B C D Sel,MUX_Out,2,配 置,在器件和实体、构造体,实体和构造体之间建立关联 能使设计更灵活和快速 在仿真环境用的比较多综合环境中不提供或受限制,CONFIGURATION OF IS FOR END FOR; END; (1076-1987 version) END CONFIGURATION; (1076-1993 version),配 置 举 例,ENTITY cmpl_sig IS PORT ( a, b, sel : IN bit; x, y, z : OUT bit; END cmpl_sig; ARCHITECTURE logic OF cmpl_si

9、g IS BEGIN x = (a AND NOT sel) OR (b AND sel); y = a WHEN sel=0 ELSE b; WITH sel SELECT z = a WHEN 0, b WHEN 1, 0 WHEN OTHERS; END logic; CONFIGURATION cmpl_sig_conf OF cmpl_sig IS FOR logic END FOR; END cmpl_sig_conf;,A B Sel,X,A B Sel,Y,A B Sel,Z,ARCHITECTURE,ENTITY,A,B,SEL,X,Y,Z,第三部分,VHDL的基本语法结构,

10、标志符,有效字符包括: 英文字母、数字、下划线 必须是字母打头 下划线的前后都必须有字母或数字 不区分大小写,数据对象,主要包括: 常数、信号、变量、文件四类 对象说明格式: 对象类型 标志符表:类型标识:=初值,数据对象常数,指在设计中不会变的值 改善代码可读性,便于代码修改 必须在程序包、实体、构造体或进程的说明区域加以说明 一般要赋一初始值 保留字CONSTANT CONSTANT Width : Integer :=8,数据对象信号,可代表连线、内连元件、或端口 =用来给信号赋值 保留字SIGNAL SIGNAL Count: Bit_Vector(3 downto 0); IF Ri

11、sing_Edge(clk) THEN Count=Count+1; END IF;,数据对象信号,MUX,REG,SIGNAL,SIGNAL,SIGNAL,SIGNAL,PROCESS,PROCESS,可代表连线、内连元件、或端口 信号在PACKAGE、ENTITY、ARCHITECTURE中声明,信号举例,LIBRARY ieee; USE ieee.std_logic_1164.all; ENTITY simp IS PORT(a, b, c, d : IN Std_Logic; g : OUT Std_Logic); END simp; ARCHITECTURE logic OF si

12、mp IS SIGNAL e,f : Std_Logic; BEGIN e = a or b; f=not(c or d); g =e and f; END logic;,a,b,c,d,g,e,f,信号赋值,SIGNAL temp : STD_LOGIC_VECTOR (7 downto 0); 整体赋值: temp = “10101010”; temp = x”AA” ; 逐位赋值: temp(7) = 1; 多位赋值: temp (7 downto 4) = “1010”;,数据对象变量,仅用于进程和子程序 必须在进程和子程序的说明性区域说明 不能表达连线和存储元件 保留字VARIABL

13、E VARIABLE tmp : Bit; tmp:=1;,变量赋值,整体赋值: temp := “10101010”; temp := x”AA” ; (1076-1993) 逐位赋值: temp(7) := 1; 多位赋值 temp (7 downto 4) := “1010”;,信号和变量的作用范围,ARCHITECTURE,SIGNAL 描述,label1: PROCESS1,VARIABLE 描述,label2: PROCESS2,VARIABLE 描述,信号和变量的区别,数据对象文件,文件不能通过赋值来更新文件内容 一般在写测试文件时用来读取激励信号和写数据输出 保留字:FILE,

14、别 名,标志一个以存在的数据对象 引用别名等效于引用原始数据对象 给别名赋值等效于给原始数据赋值 常作为标识一组数据类型 保留字:ALIAS ALIAS Bank:Bit_Vector(3 downto 0) IS Address(27 downto 24);,数 据 类 型,标量类型 整数类型、浮点类型、枚举类型、物理类型 复合类型 数组类型、记录类型 存取类型、文件类型、子类型 包含在IEEE.STD_LOGIC_1164 中,整数类型,保留字:INTEGER 范围为-214783647到214783647(232) 需要综合时,要对范围加以限制 VARIABLE Tmp : Intege

15、r 255 To 255,浮点类型,保留字:REAL 范围为:-1.0E38到1.0E38 很多综合器不支持该类型,枚举类型,保留字:TYPE TYPE States IS (S1,S2,S3,S4) Bit和Boolean TYPE Bit IS (0,1); TYPE Boolean IS (False,True) Std_Ulogic和Std_Logic TYPE Std_Ulogic IS (U,X,0,1,Z,W,L,H,_) SUBTYPE Std_Logic IS resolved Std_Ulogic Std_Ulogic_Vector和Std_Logic_Vector,物理类

16、型,保留字:TIME TYPE TIME IS RANG 2147483647 TO 2147483647 UNITS fs; ps=1000fs; ns=1000ps; us=1000ns; ms=1000us; sec=1000ms; min=60sec; hr=60min; END UNITS;,数组类型,分一维数组和二维数组,限定性数组和非限定性数组 TYPE Bit_Vector IS ARRAY (Natural RANGE) OF Bit; TYPE Word IS ARRARY (31 downto 0) OF Bit; TYPE String IS ARRARY (Posit

17、ive RANGE) OF Character; SIGNAL address : IN Bit_Vector(15 downto 0);,记录类型,TYPE Month_Name (Jan,Fab,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec); TYPE date IS RECORD day : Integer RANGE 1 TO 31; month : Month_Name; year : Integer RANGE 0 to 3000; END RECORD; VARIABLE today : date; today : =(15, may, 199

18、5);,存取类型,类似与指针类型 保留字:LINE 一般很少用到 只有变量才可以为存取类型 VARIABLE line_buffer : Line,文件类型,保留字:TEXT 很少用到,自定义类型和子类型,保留字:TYPE和SUBTYPE 子类型一般用来对其父类型加以限制 SUBTYPE Std_Logic IS resolved Std_Ulogic,算术运算符,关系运算符,逻辑运算符,其他运算符,运算优先级,* ABS NOT * / MOD REM +正 -负 + - & SLL SLA SRL SRA ROL ROR = = AND OR NAND NOR XOR XNOR,高,低,运

19、算重载,若两信号类型不同,不能将一个信号的值赋给另一信号 数据转换必须要用运算重载 一般可用IEEE .1164中的标准重载函数实现 LIBRARY IEEE; USE IEEE_Std_Logic_1164.all; USE IEEE_Std_Logic_Arith.all; USE IEEE_Std_Logic_unsigned.all USE IEEE_Std_Logic_signed.all,并行语句,并行语句1,构造体,并行语句2,并行语句3,signal,signal,并行语句,信号赋值语句 基本信号、条件信号、选择信号赋值语句 块(Block)语句 进程(Process)语句 生

20、成(Generate)语句 元件例化语句,基本信号赋值语句,基本格式: 目标信号 = 波形 举例: a=0 AFTER 1ns b=1 AFTER 5ns,0 AFTER 10ns,条件信号赋值语句,基本格式: 目标信号= 波形1 WHEN 条件1 ELSE 波形2 WHEN 条件2 ELSE 波形n;,举例: q = a WHEN sela = 1 ELSE b WHEN selb = 1 ELSE c;,选择信号赋值语句,基本格式 WITH 表达式 SELECT 目标信号= 波形1 WHEN 选择条件1; 波形2 WHEN 选择条件2; 波形n WHEN 选择条件n;,举例 WITH se

21、l SELECT q = a WHEN “00”, b WHEN “01”, c WHEN “10”, d WHEN Others;,选择信号赋值语句,LIBRARY ieee; USE ieee.std_logic_1164.all; ENTITY cmpl_sig IS PORT ( a, b, sel : IN STD_LOGIC; z : OUT STD_LOGIC; END cmpl_sig; ARCHITECTURE logic OF cmpl_sig IS BEGIN WITH sel SELECT z = a WHEN 0, b WHEN 1, 0 WHEN OTHERS; E

22、ND logic;,Std_Logic数据类型的值包括0,1,X,Z,进程语句,VHDL中最重要的语句 进程和进程语句之间是并行关系 进程定义了一组连续执行的顺序语句 基本格式: 进程标号: PROCESS (信号敏感表) IS 说明区 BEGIN 顺序语句 END PROCESS 进程标号;,进程语句,进程的运行依赖于敏感表或WAIT参数的变化 敏感表等于在进程 的最后隐性的加了 一WAIT语句 进程可以有多个 WAIT语句 一个进程中不能既 有敏感表又有WAIT 语句,PROCESS (a,b) BEGIN -顺序语句 END PROCESS; PROCESS,BEGIN -顺序语句 WA

23、IT ON (a,b) ; END PROCESS;,进程语句,PROCESS1,PROCESSn,signal,signal,ARCHITECTURE,LIBRARY ieee; USE ieee.std_logic_1164.all; ENTITY if_case IS PORT ( a, b, c, d : IN Std_Logic; sel : IN Std_Logic_Vector(1 downto 0); y, z : OUT Std_Logic); END if_case; ARCHITECTURE logic OF if_case IS BEGIN if_label: PROC

24、ESS(a, b, c, d, sel) BEGIN IF sel=“00“ THEN y = a; ELSIF sel=“01“ THEN y = b; ELSIF sel=“10“ THEN y = c; ELSE y = d; END IF; END PROCESS if_label;,case_label: PROCESS(a, b, c, d, sel) BEGIN CASE sel IS WHEN “00“ =z z z z z = 0; END CASE; END PROCESS case_label; END logic;,进程语句举例,元件例化,Input 1,Input n

25、,Output 1,Output n,底层元件,底层元件,元件例化,元件例化需要有元件描述和配置,元件的描述和配置,元件描述:用于声明端口类型和数据类型 COMPONENT IS PORT ( : ; : ; END COMPONENT; 元件配置用于映射端口 : PORT MAP( = ; ; = ;),元件例化示例,ARCHITECTURE tolleab_arch OF tolleab IS COMPONENT tollv PORT( clk : IN Std_Logic; cross, nickel, dime, quarter : IN Std_Logic; green, red :

26、 OUT Std_Logic; sout : OUT State_Type; state_in : IN State_Type); END COMPONENT; BEGIN u1 : tollv PORT MAP ( tclk, tcross, tnickel, tdime,tquarter, tgreen, tred,tsout, tstate);,生成语句,基本格式: 生成标号:生成方案 GENRATE |生成语句| END GENRATE 生成方案有FOR和IF两种,顺序语句,变量赋值语句 信号赋值语句 IF语句 CASE语句 EXIT语句 NULL语句,LOOP语句 NEXT语句 RE

27、PORT语句 RETURN语句 WAIT语句,IF语句,基本格式: IF标号: IF 布尔表达式 THEN 顺序语句 ELSIF 布尔表达式 THEN 顺序语句; ELSE 顺序语句; END IF IF标号,示例: PROCESS(sela, selb, a, b, c) BEGIN IF selb=1 THEN q = a; ELSIF sela=1 THEN q = b; ELSE q = c; END IF; END PROCESS;,q = a WHEN sela = 1 ELSE b WHEN selb = 1 ELSE c;,CASE语句,基本格式: CASE标号: CASE 表

28、达式 IS |WHEN 表达式值=顺序语句|; WHEN Others=顺序语句; END CASECASE标号,示例: PROCESS(sel, a, b, c, d) BEGIN CASE sel IS WHEN “00” =q q q q = d; END CASE; END PROCESS;,WITH sel SELECT q = a WHEN “00”, b WHEN “01”, c WHEN “10”, d WHEN OTHERS;,LOOP语句,基本格式: LOOP标号: 重复模式 LOOP 顺序语句; END LOOP LOOP标号,WHILE LOOP 顺序语句 END LO

29、OP;,FOR IN LOOP 顺序语句 END LOOP;,LOOP标号: LOOP 顺序语句 EXIT LOOP标号 ; END LOOP;,NEXT LOOP标号 WHEN 语句,LOOP语句示例,LIBRARY ieee; USE ieee.std_logic_1164.all; USE ieee.std_logic_unsigned.all; ENTITY shift4 IS PORT ( shft_lft : in std_logic; d_in : in std_logic_vector(3 downto 0); q_out : out std_logic_vector(7 do

30、wnto 0); END shift4; ARCHITECTURE logic OF shift4 IS BEGIN PROCESS(d_in, shft_lft) VARIABLE shft_var : std_logic_vector(7 DOWNTO 0);,BEGIN shft_var(7 downto 4) := “0000“; shft_var(3 downto 0) := d_in; IF shft_lft = 1 THEN FOR i IN 7 DOWNTO 4 LOOP shft_var(i) := shft_var(i-4); END LOOP; shft_var(3 do

31、wnto 0) := “0000”; ELSE shft_var := shft_var; END IF; q_out = shft_var; END PROCESS; END logic;,组合电路举例,LIBRARY ieee; USE ieee.std_logic_1164.ALL; ENTITY latch IS PORT ( data : IN std_logic; gate : IN std_logic; q : OUT std_logic); END latch; ARCHITECTURE behavior OF latch IS BEGIN label_1: PROCESS (

32、data, gate) BEGIN IF gate = 1 THEN q = data; END IF; END PROCESS; END behavior;,时序电路举例,LIBRARY ieee; USE ieee.std_logic_1164.all; ENTITY dff_a IS PORT ( d : in std_logic; clk : in std_logic; q : out std_logic); END dff_a; ARCHITECTURE behavior OF dff_a IS BEGIN PROCESS (clk) BEGIN IF clkevent and cl

33、k = 1 THEN q = d; END IF; END PROCESS; END behavior;,时序电路举例,LIBRARY ieee; USE ieee.std_logic_1164.all; USE ieee.std_logic_unsigned.all; ENTITY dff_clr IS PORT ( clr : in bit; d, clk : in std_logic; q : out std_logic); END dff_clr; ARCHITECTURE behavior OF dff_clr IS BEGIN PROCESS(clk, clr) BEGIN IF

34、clr = 0 THEN q = 0; ELSIF rising_edge(clk) THEN q = d; END IF; END PROCESS; END behavior;,异步清零,时序电路举例,ENTITY reg1 IS PORT ( d : in BIT; clk : in BIT; q : out BIT); END reg1; ARCHITECTURE reg1 OF reg1 IS SIGNAL a, b : BIT; BEGIN PROCESS (clk) BEGIN IF rising_edge(clk) THEN a = d; b = a; q = b; END IF

35、; END PROCESS; END reg1;,时序电路举例,ENTITY reg1 IS PORT ( d : in BIT; clk : in BIT; q : out BIT); END reg1; ARCHITECTURE reg1 OF reg1 IS SIGNAL a, b : BIT; BEGIN PROCESS (clk) BEGIN IF rising_edge(clk) THEN a = d; b = a; END IF; END PROCESS; q = b; END reg1;,时序电路举例,ENTITY reg1 IS PORT ( d : in BIT; clk

36、: in BIT; q : out BIT); END reg1; ARCHITECTURE reg1 OF reg1 IS VARIABLE a, b : BIT; BEGIN PROCESS (clk) BEGIN IF rising_edge(clk) THEN a = d; b = a; q = b; END IF; END PROCESS; END reg1;,在时序电路中的变量赋值,变量在IF语句中被赋值,以用来表示随时钟的变化,不会产生触发器 变量只代表临时存储,不反映实际硬件 变量可用在表示一数据立即变化的表达式中,然后再将变量的值赋给信号,时序电路举例,ENTITY coun

37、t_a IS PORT (clk, rst, updn : in std_logic; q : out std_logic_vector(15 downto 0); END count_a; ARCHITECTURE logic OF count_a IS BEGIN PROCESS(rst, clk) VARIABLE tmp_q : std_logic_vector(15 downto 0); BEGIN IF rst = 0 THEN q = 0; ELSIF rising_edge(clk) THEN IF updn = 1 THEN tmp_q := tmp_q + 1; ELSE

38、tmp_q := tmp_q - 1; END IF; q = tmp_q; END IF; END PROCESS; END logic;,状态机设计,状态机设计,LIBRARY ieee; USE ieee.std_logic_1164.all; USE ieee.std_logic_unsigned.all; USE ieee.std_logic_arith.all; ENTITY state_m2 IS PORT(clk, reset, nw : in std_logic; sel: out std_logic_vector(1 downto 0); nxt, first: out s

39、td_logic); END state_m2; ARCHITECTURE logic OF state_m2 IS TYPE state_type IS (idle, tap1, tap2, tap3, tap4); SIGNAL filter : state_type; BEGIN PROCESS (reset, clk),状态机设计,BEGIN IF reset = 1 THEN filter IF nw = 1 THEN filter filter filter filter IF nw = 1 THEN filter = tap1; ELSE filter = idle; END I

40、F; END CASE; END IF; END process;,状态机设计,nxt = 1 WHEN filter=tap4 ELSE 0; first = 1 WHEN filter=tap1 ELSE 0; WITH filter SELECT sel = “00“ WHEN tap1, “01“ WHEN tap2, “10“ WHEN tap3, “11“ WHEN tap4, “00“ WHEN others;,状态机设计,output: PROCESS(filter) BEGIN CASE filter IS WHEN idle =nxt sel sel sel sel = “11“;nxt = 1; END CASE; END PROCESS output; END logic;,

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

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1