VHDL_intro (2)_第1页
VHDL_intro (2)_第2页
VHDL_intro (2)_第3页
VHDL_intro (2)_第4页
VHDL_intro (2)_第5页
已阅读5页,还剩82页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、VHDL 入门入门VHDL :设计单元n实体u用来定义电路模型的外观图,亦即符号n构造体u用来定义电路模型的功能,亦即电路图n配置u用来联系构造体和实体n包u可以由VHDL电路模型引用的信息的汇集,亦即库实体声明n相当于:符号n 可由字母/数字构成u注意:某些VHDL的仿真器和综合器要求应与实体的相同n类属声明u用来将静态信息传入电路模型中u某些VHDL的仿真器和综合器在类属的使用上会有一些限制n端口声明u用来描述输入、输出,亦即引脚entity is类属声明类属声明端口声明端口声明end ; -(1076-1987 版版)end entity ; -(1076-1993版版)n常用的对象u常

2、量u变量u信号n声明过的对象方可使用n对象声明: 对象名 : := ; u:对某个对象可做些什么u对象名 :标识符u :方向u :对象中可以容纳什么u:对象的初值VHDL :对象 Generic ( constant tplh , tphl : time := 5 ns; - 注:注:constant 已被设定,并非必须已被设定,并非必须 tphz, tplz : time := 3 ns; default_value : integer := 1; cnt_dir : string := “up” ); entity is 端口声明端口声明end ; -(1076-1987 版版)实体 :类

3、属(Generic)声明n新的数值在编译的过程中可以被传递n在仿真/综合的过程中类属是只读的end entity ; -(1076-1993 版版)entity is - 类属声明类属声明end ; -(1076-1987 版版)实体 :端口声明n端口信号的模式:uin (输入)uout (输出)uinout (双向)ubuffer (带内部反馈的输出)end entity ; -( 1076-1993 版版) Port ( signal clk : in bit; - 注:注:signal 已被设定,并非必需已被设定,并非必需 d : in bit; q : out bit := 0 );构

4、造体n构造体的关键点u相当于:电路u描述模型的功能和时序u必须与一个 ENTITY相关联uENTITY 可以有多个构造体u构造体语句并行执行(进程,Processes)u构造体风格l行为:设计怎样工作RTL:按寄存器关系描述设计功能:非时序l结构:网表门/元件级l混合:上述的混合构造体ARCHITECTURE OF IS - 构造体声明段 (所列并非全部)signal temp : integer := 1; - 信号声明, :=1 为默认值选项constant load : boolean := true ; - 常数声明type states is ( S1, S2, S3, S4 ) ;

5、 - 类型声明- 元件声明- 子类型声明- 属性声明- 属性说明- 子程序声明- 子程序体BEGIN进程语句并行过程调用并行信号赋值元件例示语句生成语句END ; - (1076-1987 版)END ARCHITECTURE ; - (1076-1993 版)VHDL :Entity - ArchitectureVHDL :基本建模结构entity example_1 is Port(a,b,c : in bit; y : out bit);end example_1;architecture simp of example_1 is signal N1 : bit;begin N1 = a

6、 or b; y = N1 and not c;end simp;配置n用于产生模型内的关联u关联一个实体和构造体u关联一个元件和一个 Entity-Architecture 对n广泛地用于仿真环境u提供一个灵活和快捷的途径对设计进行取舍n在综合环境中不支持或受限制configuration of is for end for;end; -(1076-1987版版)end configuration ; -(1076-1993 版版)Putting it all togetherENTITY cmpl_sig ISPORT ( a, b, sel : IN bit; x, y, z : OUT

7、 bit );END cmpl_sig;ARCHITECTURE logic OF cmpl_sig ISBEGIN - simple signal assignment x = (a AND NOT sel) OR (b AND sel); - conditional signal assignment y = a WHEN sel=0 ELSE b; - selected signal assignment WITH sel SELECTz = a WHEN 0, b WHEN 1, 0 WHEN OTHERS;END logic;CONFIGURATION cmpl_sig_conf O

8、F cmpl_sig IS FOR logic END FOR;END cmpl_sig_conf;包n包是一种在整个模型中存储和使用信息的简便方法nVHDL有两个内建的包uStandarduTEXTIO库n库包含了包或包的汇集n资源库uStandard 包uIEEE 开发的包u在设计中引用的设计单元的任何一个库n工作库u设计单元被编译放进该库中库/包的引用n所有的包必须被编译n隐含的库uWorkuSTDlStandard 包 注:在这些包中的项无须引用,它们是隐含的nLIBRARY子句u指定可引用的库名u库名是路径/目录的符号化名字,由编译器定义nUSE子句u指定在Library子句已经指定

9、过的库中的包和对象Example :库/包的引用nLIBRARY ,;u名字是符号化的并且是由编译器定义的 注:WORK和STD无须指定nUSE 库名.包名.对象;uALL 是保留字n首先放置Library/Use子句将允许其后所有的设计单元访问entity example_1 is Port(a,b,c : in std_logic; y : out std_logic);end example_1;architecture simp of example_1 is signal N1 : bit;begin N1 = a or b; y = N1 and not c;end simp;li

10、brary ieee;use ieee.std_logic_1164.all;库nLIBRARY STD ;u包含下列包:lstandard ( 类型: Bit, Boolean, Integer, Real, 及 Time. 支持这些类型的所有运算符函数)ltextio (文件操作)u隐含的库 (内建)l 在VHDL设计中无须引用在 Standard 包中定义的类型n BIT类型 2 逻辑值系统 (0, 1) signal a_temp : bit; BIT_VECTOR: bit 的数组 signal temp_a : bit_vector(3 downto 0); signal temp

11、_b : bit_vector(0 to 3) ;n BOOLEAN类型 (false, true)n Integer 十进制正、负整数值 signal int_tmp1 : integer; - 32bit数数 signal int_tmp2 : integer range 0 to 255; -8bit数数 注:在Standard包中还有其它类型library std;use std.standard.all;- 隐含的隐含的std库无需指定库无需指定- 内建的内建的standard包无需引用包无需引用Example :使用 bit 类型entity example_1 is Port(a

12、,b,c : in bit; y : out bit);end example_1;architecture simp of example_1 is signal N1 : bit;begin N1 = a or b; y = N1 and not c;end simp;库nLIBRARY IEEE;u包含下列包:lstd_logic_1164 (std_logic 类型及相关函数)lstd_logic_arith (算术函数)lstd_logic_signed (带符号算术函数)lstd_logic_unsigned (无符号算术函数)std_logic_1164 包中定义的类型n 类型

13、STD_LOGIC 9 逻辑值系统 (U, X, 0, 1, Z, W, L, H, -) W, L, H 弱值 (综合不支持) X 用于未知 Z (not z) 用于三态 - 无关 决断类型:支持信号有多驱动n 类型 STD_ULOGIC 同样是 9 逻辑值系统 非决断类型:不支持多信号驱动。会发生错误Example :使用 std_logic 类型nstd_logic、std_logic_vector等数据类型及其相关的函数在程序包std_logic_1164中定义。n这个包由IEEE定义,它所在的设计库的库名就叫做IEEE。n如果要使用std_logic_1164中的数据类型(建议用这些

14、数据类型),则在每个实体前必须包含下列语句行:Library ieee;Use ieee.std_logic_1164.all;entity example_1 is Port(a,b,c : in std_logic; y : out std_logic);end example_1;architecture simp of example_1 is signal N1 : std_logic;begin N1 = a or b; y = N1 and not c;end simp;library ieee;use ieee.std_logic_1164.all;用户定义的用户定义的 库库/

15、包包n 用户定义的包可以与设计放在同一个目录LIBRARY WORK; -选项USE WORK.all;n 也可以放在不同的目录LIBRARY ;USE .all;VHDL构造体建模的基本要素构造体建模的基本要素内容提要内容提要n 理解信号的概念和用法 信号赋值 并行信号赋值语句 信号延时n 进程 隐含的 显式的n 理解变量的概念和用法n 顺序语句 If 语句 Case 语句 循环语句信号信号n 信号代表在进程(功能块)之间通讯的物理互联(连线)n 信号可以在包包、实体实体和构造体构造体中声明SIGNAL : 类型 ; 功能块:组合逻辑(signals)功能块:寄存器(signals)进程进程

16、信号信号信号信号信号信号信号信号对信号进行赋值对信号进行赋值SIGNAL temp : STD_LOGIC_VECTOR (7 downto 0);n 全部位:temp = “10101010”;temp = x “AA” ; (1076-1993)n 一位:temp(7) = 1;n 位片:temp (7 downto 4) = “1010”;n 一位:单引号 ( )n 多位:双引号 ( “ )信号用作内部连接信号用作内部连接LIBRARY ieee;USE ieee.std_logic_1164.all;ENTITY simp ISPORT(r, t, g, h : IN STD_LOGI

17、C; qb : OUT STD_LOGIC);END simp;ARCHITECTURE logic OF simp ISSIGNAL qa : STD_LOGIC;BEGIN qa = r or t; qb = (qa and not(g xor h);END logic; SIGNAL qa : STD_LOGIC; r、t、g、h 和 qb 为信号 (默认) qa 是一个隐埋的信号,需要声明构造体内部信号声明 qa = r or t; qb = (qa and not(g xor h);信号赋值n 信号赋值由 = 表示n 信号赋值有一个综合到硬件的隐含隐含进程(功能)信号赋值 = 隐含的

18、进程并行信号赋值n 三种并行信号赋值: 简单信号赋值 条件信号赋值 选择信号赋值 简单信号赋值简单信号赋值n 格式: = ;n 例子: 圆括号 ( ) :给出运算顺序n VHDL运算符用于描述进程隐含的进程qa = r or t ;qb = (qa and not(g xor h);VHDL 运算符运算符运算符类型运算符类型运算符运算符 名名/ /符号符号逻辑Not and or nand nor xor xnor(1)关系= /= =加减+ - &符号+ -乘除* / mod rem杂散* abs(1) 仅 VHDL 93 支持VHDL 运算符运算符n VHDL 算术和布尔函数仅对(

19、 Standard 包定义的)内建数据类型定义 算术运算符 +、-、= 仅对INTEGER类型定义 布尔运算符比如 AND、OR、NOT仅对BIT类型定义n 回忆:VHDL隐含的库(内建) Library STD 在 Standard 包中定义的类型 BIT, BOOLEAN, INTEGER注:这个包中的项目不需要引用,它们是隐含的 算术运算符 +、-、= 仅对INTEGER类型定义 布尔运算符比如 AND、OR、NOT仅对BIT类型定义算术函数ENTITY opr ISPORT ( a : IN INTEGER RANGE 0 TO 16;b : IN INTEGER RANGE 0 TO

20、 16;sum : OUT INTEGER RANGE 0 TO 32);END opr;ARCHITECTURE example OF opr ISBEGINadder_body:PROCESS (a, b)BEGINsum = a + b;END PROCESS adder_body;END example; 注:库 STD 和包 Standard 不需要引用VHDL 编译器能够理解该运算符,因为算术运算符是为内建的数据类型 INTEGER定义的PORT ( a : IN INTEGER RANGE 0 TO 15;b : IN INTEGER RANGE 0 TO 15;sum : OU

21、T INTEGER RANGE 0 TO 31);sum = a + b;运算符重载n 怎样与其它数据类型一同使用算术和布尔函数?n 运算符通过定义一个名字与运算符本身相同的函数重载 因为运算符和函数的名字是相同的,函数名必须用双引号括起来,以区别于真实的VHDL运算符 该函数通常在一个包中声明,这样对任何设计它都是完全可见的 运算符重载运算符重载 - 对其它数据类型定义算术和布尔函数运算符重载 函数/包n 定义运算符重载函数的包可以在 LIBRARY IEEE 中找到n 例如,包 std_logic_unsigned 定义了下列这些函数:package std_logic_unsigned

22、isfunction +(L: STD_LOGIC_VECTOR; R: STD_LOGIC_VECTOR) return STD_LOGIC_VECTOR;function +(L: STD_LOGIC_VECTOR; R: INTEGER) return STD_LOGIC_VECTOR;function +(L: INTEGER; R: STD_LOGIC_VECTOR) return STD_LOGIC_VECTOR;function +(L: STD_LOGIC_VECTOR; R: STD_LOGIC) return STD_LOGIC_VECTOR;function +(L: S

23、TD_LOGIC; R: STD_LOGIC_VECTOR) return STD_LOGIC_VECTOR;function -(L: STD_LOGIC_VECTOR; R: STD_LOGIC_VECTOR) return STD_LOGIC_VECTOR;function -(L: STD_LOGIC_VECTOR; R: INTEGER) return STD_LOGIC_VECTOR;function -(L: INTEGER; R: STD_LOGIC_VECTOR) return STD_LOGIC_VECTOR;function -(L: STD_LOGIC_VECTOR;

24、R: STD_LOGIC) return STD_LOGIC_VECTOR;function -(L: STD_LOGIC; R: STD_LOGIC_VECTOR) return STD_LOGIC_VECTOR;运算符重载的使用LIBRARY ieee;USE ieee.std_logic_1164.all;USE ieee.std_logic_unsigned.all;PORT ( a : IN STD_LOGIC_VECTOR (3 downto 0);b : IN STD_LOGIC_VECTOR (3 downto 0);sum : OUT STD_LOGIC_VECTOR (4

25、downto 0);sum = a + b;在设计文件的开头部分包括这些语句允许对非内建的数据类型进行运算ENTITY overload ISEND overload;ARCHITECTURE example OF overload ISBEGINadder_body:PROCESS (a, b)BEGINEND PROCESS adder_body;END example;并行信号赋值n 三种并行信号赋值: 简单信号赋值 条件信号赋值 选择信号赋值 条件信号赋值条件信号赋值n 格式:n 举例: = when else when else: when else;q = a WHEN sela

26、= 1 ELSEb WHEN selb = 1 ELSEc;隐含的进程并行信号赋值n 三种并行信号赋值: 简单信号赋值 条件信号赋值 选择信号赋值 选择信号赋值选择信号赋值n 格式:n 举例:with select = when , when ,: when others;WITH sel SELECT q = a WHEN “00”,b WHEN “01”,c WHEN “10”,d WHEN OTHERS;隐含的进程选择信号赋值n 所有所有可能的条件都必须考虑n WHEN OTHERS 子句评估没有明确表述的其它所有可能的条件 见下页见下页选择信号赋值sel 的数据类型为STD_LOGIC

27、 对于 STD_LOGIC数据类型,值是什么? 答案: 0, 1, X 和 Z 等 那么,WHEN OTHERS子句是必不可少的吗? 答案: YESLIBRARY ieee;USE ieee.std_logic_1164.all;ENTITY cmpl_sig ISPORT ( a, b, sel : IN STD_LOGIC;z : OUT STD_LOGIC;END cmpl_sig;ARCHITECTURE logic OF cmpl_sig ISBEGINEND logic;- selected signal assignmentWITH sel SELECTz =a WHEN 0,b

28、 WHEN 1, 0 WHEN OTHERS;VHDL模型模型 并行信号赋值并行信号赋值- simple signal assignmentx = (a AND NOT sel) OR (b AND sel);- conditional signal assignmenty = a WHEN sel=0 ELSE b;- selected signal assignmentWITH sel SELECTz =a WHEN 0,b WHEN 1,0 WHEN OTHERS;LIBRARY ieee;USE ieee.std_logic_1164.all;ENTITY cmpl_sig ISPOR

29、T (a, b, sel : IN STD_LOGIC;x, y, z : OUT STD_LOGIC:=0 );END cmpl_sig;ARCHITECTURE logic OF cmpl_sig ISBEGINEND logic; 信号赋值并行地执行,因而这些语句的排列顺序不影响结果显式的进程语句显式的进程语句n 进程可以考虑成 隐含的进程 显式的进程n 隐含的进程 包括并行信号赋值语句 包括元件语句 进程的敏感量在表达式中n 显式进程 为并行语句 仅由顺序语句组成- 显式的进程语句PROCESS (敏感量列表)常数声明类型声明变量声明BEGIN- 顺序语句 #1;- - 顺序语句 #N

30、 ;END PROCESS;进程语句的执行进程语句的执行n 进程语句无限地执行直至被一个WAIT语句或敏感量列表中断 敏感量列表隐含一个位于进程末尾的WAIT语句 进程可以有多个WAIT语句 进程不可以同时有敏感量列表和WAIT语句 注:逻辑综合可能会忽略 WAIT 和 敏感量列表PROCESS (a,b)BEGIN- 顺序语句END PROCESS;PROCESSBEGIN- 顺序语句WAIT ON (a,b) ;END PROCESS;多进程n一个构造体可以有多个进程语句n每个进程间并行地执行n然而,在进程内部,语句顺序地执行VHDL 模型 多进程构造体if_label: PROCESS(

31、a, b, c, d, sel)BEGINIF sel=00 THENy = a;ELSIF sel=01 THENy = b;ELSIF sel=10 THENy = c;ELSEy z z z z z = 0;END CASE;END PROCESS case_label;END logic; 进程语句并行地执行,因此语句排列的顺序不影响结果 在进程内部,语句按顺序执行信号赋值也可以是进程内部的语句信号赋值 延迟n 信号赋值可以是进程内部的语句,也可是外部的(前面所讲的三种并行信号赋值)n 信号赋值有延迟 两种类型的延迟 惯性延迟(默认的) 持续时间短于传播延迟的脉冲不会被传送 传输延迟

32、任何脉冲都被传送,不论多短 在VHDL中还有一些例外,这里不讨论VHDL 仿真nEvent 值的一次改变:从0到1,或者从X到1,等等n 仿真周期 Event控制的 Delta 进程执行阶段 信号刷新阶段n何时结束一个仿真周期并开始下一个仿真周期 当:当: 所有进程都执行了所有进程都执行了 信号被刷新信号被刷新n 信号在进程结束时得到刷新信号初始化信号初始化执行执行所有的所有的进程进程等待等待Event时间推进时间推进执行执行敏感的敏感的进程进程信号刷新信号刷新(Delta)No Event?YesNo初始化初始化阶段阶段仿真仿真阶段阶段等价的功能process1: PROCESS(a, b)

33、 BEGINc = a and b;END PROCESS process1;process2: PROCESS(c) BEGINy = c;END PROCESS process2;c = a and b;y = c;LIBRARY ieee;USE ieee.std_logic_1164.all;ENTITY simp ISPORT(a, b : IN STD_LOGIC:=0;y : OUT STD_LOGIC:=0);END simp;ARCHITECTURE logic OF simp ISSIGNAL c : STD_LOGIC;BEGINEND logic; c 和 y 在一个仿

34、真周期内的进程结束时并行地得到执行和刷新LIBRARY ieee;USE ieee.std_logic_1164.all;ENTITY simp_prc ISPORT(a,b : IN STD_LOGIC:=0;y : OUT STD_LOGIC:=0);END simp_prc;ARCHITECTURE logic OF simp_prc ISSIGNAL c : STD_LOGIC;BEGINEND logic;等价的功能?c = a and b;y = c;c = a and b;y = c;LIBRARY ieee;USE ieee.std_logic_1164.all;ENTITY

35、simp ISPORT(a, b : IN STD_LOGIC;y : OUT STD_LOGIC);END simp;ARCHITECTURE logic OF simp ISSIGNAL c : STD_LOGIC;BEGINEND logic; c也应该放进敏感信号列表PROCESS(a, b)LIBRARY ieee;USE ieee.std_logic_1164.all;ENTITY simp_prc ISPORT(a,b : IN STD_LOGIC:=0;y : OUT STD_LOGIC);END simp_prc;ARCHITECTURE logic OF simp_prc

36、ISSIGNAL c : STD_LOGIC;BEGINBEGINEND PROCESS;END logic;变量声明n 变量在进程内部声明n 变量由 := 表达n 变量声明VARIABLE : := ;VARIABLE temp : STD_LOGIC_VECTOR (7 downto 0);n 变量赋值立即刷新 不会发生延迟临时容器没有延迟没有延迟赋值给变量VARIABLE temp : STD_LOGIC_VECTOR (7 downto 0);n 全部位:temp := “10101010”;temp := x “AA” ; (1076-1993)n 一位:temp(7) := 1;n

37、 位片:temp (7 downto 4) := “1010”;n 一位:单引号 ( )n 多位:双引号 ( “ )变量赋值LIBRARY ieee;USE ieee.std_logic_1164.all;ENTITY var ISPORT (a, b : IN STD_LOGIC;y : OUT STD_LOGIC);END var;ARCHITECTURE logic OF var ISBEGINPROCESS (a, b)VARIABLE c : STD_LOGIC;BEGINc := a AND b;y = c;END PROCESS;END logic;VARIABLE c : ST

38、D_LOGIC; c := a AND b; y q q = i1;END CASE; val := 0;END PROCESS;END logic;Val 是一个变量,对其赋值时将立即被刷新因此,刷新了的 val 值可用于 CASE语句VARIABLE val : INTEGER RANGE 0 TO 1;val := val;val := val + 1;CASE val IS信号与变量的范围ARCHITECTURElabel1: PROCESSVARIABLE 声明label2: PROCESSVARIABLE声明SIGNAL 声明:在进程语句外部声明在进程语句外部声明(对所有进程语句全

39、局可见)在进程语句内部声明在进程语句内部声明(对此进程语句本地可见)小结 信号 vs. 变量信号信号 ( = )变量变量 ( := )赋值赋值赋值对象 = 赋值赋值对象 := 赋值功效功效代表电路的内部互连代表本地的存储范围范围全局范围(在进程间通讯)本地范围(在进程内部)行为行为在进程语句结束时刷新(新值不可用)立即刷新(新值可用)顺序语句n 顺序语句 IF-THEN 语句 CASE 语句 LOOP 语句If-Then 语句n 格式:n 例子:IF THEN顺序语句ELSIF THEN顺序语句:ELSE顺序语句END IF;IF sela=1 THENq = a;ELSIF selb=1 T

40、HENq = b;ELSEq = c;END IF;PROCESS(sela, selb, a, b, c)BEGINEND PROCESS;If-Then 语句n条件从上到下按顺序评估 靠前优先n第一个为真的条件导致相应的语句序列被执行n如果全部的条件都为伪,那么就执行与 “ELSE” 子句相关的语句序列If-Then 语句n 类似于条件信号赋值隐含的进程隐含的进程显式的进程显式的进程q =a WHEN sela = 1 ELSEb WHEN selb = 1 ELSEc;IF sela=1 THENq = a;ELSIF selb=1 THENq = b;ELSEq = c;END IF;

41、PROCESS(sela, selb, a, b, c)BEGINEND PROCESS;Case 语句n 格式:n 例子:CASE 表达式 ISWHEN =顺序语句WHEN =顺序语句:WHEN OTHERS = - (选项)顺序语句END CASE;CASE sel ISWHEN “00” = q q q q = d;END CASE;PROCESS(sel, a, b, c, d)BEGINEND PROCESS;Case 语句n条件被同时评估 没有优先顺序n所有所有可能的条件必须被包括nWHEN OTHERS 子句评估没有明确规定的所有其它可能的条件Case 语句n 类似于选择信号赋值

42、隐含的进程隐含的进程显式的进程显式的进程WITH sel SELECTq q q q q = d;END CASE;PROCESS(sel, a, b, c, d)BEGINEND PROCESS;循环n 无限循环 无限地循环,除非存在 EXIT 语句n While 循环 条件测试至结束循环n FOR 循环 叠代循环循环标号LOOP- 顺序语句EXIT 循环标号;END LOOP;WHILE LOOP- 顺序语句END LOOP;FOR IN LOOP- 顺序语句END LOOP;FOR 循环,使用变量:4-bit 左移器LIBRARY ieee;USE ieee.std_logic_1164

43、.all;USE ieee.std_logic_unsigned.all;ENTITY shift4 ISPORT ( shft_lft : in std_logic;d_in : in std_logic_vector(3 downto 0);q_out : out std_logic_vector(7 downto 0);END shift4;接下页接下页FOR 循环,使用变量:4-bit 左移器ARCHITECTURE logic OF shift4 ISBEGINPROCESS(d_in, shft_lft)BEGINIF shft_lft = 1 THENshft_var(3 dow

44、nto 0) := “0000”;ELSEshft_var := shft_var;END IF;END PROCESS;END logic;变量声明变量初始化左移允许i 是 FOR LOOP 的指针不允许声明左移4位低位补零不移动在进程结束前,变量对信号的赋值将综合成硬件VARIABLE shft_var : std_logic_vector(7 DOWNTO 0);shft_var(7 downto 4) := 0000;shft_var(3 downto 0) := d_in;FOR i IN 7 DOWNTO 4 LOOPshft_var(i) := shft_var(i-4);END

45、 LOOP;q_out = shft_var;VHDL理解理解 VHDL以及逻辑综合以及逻辑综合VHDL模型 - RTL建模nRTL 典型的行为建模,隐含或推断硬件n电路的功能和少许结构n为了综合的目的,也为了仿真效果:效果:回顾 - RTL综合两种类型的进程n组合进程组合进程 对组合逻辑中使用的所有输入敏感 例例PROCESS(a, b, sel)n时序进程时序进程 对一个时钟或/和控制信号敏感 例例敏感列表包含组合逻辑中使用的所有输入敏感列表不包括 d输入,只包括时钟或/和控制信号PROCESS(a, b, sel)PROCESS(clk, clr)组合进程两个输入都包含在敏感表中labe

46、l_1:PROCESS (a, b)ELSE 子句评估没有明确规定的所有其它可能的情况完全定义的组合进程完全定义的组合进程:输出信号在每次执行进程时必须赋一次值y = a;y = 0;LIBRARY ieee;USE ieee.std_logic_1164.ALL;ENTITY com_p ISPORT ( a : IN std_logic;b : IN std_logic;y : OUT std_logic );END com_p;ARCHITECTURE behavior OF com_p ISBEGINBEGINIF b = 1 THENELSEEND IF;END PROCESS;EN

47、D behavior;I86I83PLLFDIVI82WATCHDOGI78GCNTDI79GCNTBI74SCANI80FCNTBI56CLKGENI54FCNTDI81I22LEDSELI24BCD2LEDI87I25I26mo3:0ma3:0mc3:0mb3:0I75FDIVI84*I16*I18*I17*I77*I20*I88*I89*I85*I62*I63*I64*I65*I66*I67*I68*I69*I11*I13*I12*I4*I5*I6*I7*I8*I9*I10*I3*aybup组合进程?如果 b = 0 ,如何? 隐含存储隐含存储IF b = 1 THEN y = a;EN

48、D IF;不完全定义的组合进程推断出锁存器DEQI86I83PLLFDIVI82WATCHDOGI78GCNTDI79GCNTBI74SCANI80FCNTBI56CLKGENI54FCNTDI81I22LEDSELI24BCD2LEDI87I25I26mo3:0ma3:0mc3:0mb3:0I75FDIVI84*I16*I18*I17*I77*I20*I88*I89*I85*I62*I63*I64*I65*I66*I67*I68*I69*I11*I13*I12*I4*I5*I6*I7*I8*I9*I10*I3*ayb透明的锁存器LIBRARY ieee;USE ieee.std_logic_

49、1164.ALL;ENTITY com_p ISPORT (a : IN std_logic;b : IN std_logic;y : OUT std_logic );END com_p;ARCHITECTURE behavior OF com_p ISBEGINlabel_1: PROCESS (a, b)BEGINEND PROCESS;END behavior;锁存器如果 en = 0 ,如何? 隐含存储隐含存储推断出锁存器IF en = 1 THEN q = data;END IF;透明的锁存器DEQI86I83PLLFDIVI82WATCHDOGI78GCNTDI79GCNTBI74

50、SCANI80FCNTBI56CLKGENI54FCNTDI81I22LEDSELI24BCD2LEDI87I25I26mo3:0ma3:0mc3:0mb3:0I75FDIVI84*I16*I18*I17*I77*I20*I88*I89*I85*I62*I63*I64*I65*I66*I67*I68*I69*I11*I13*I12*I4*I5*I6*I7*I8*I9*I10*I3*dataqen两个输入都包含在敏感表中label_1: PROCESS (data, en)LIBRARY ieee;USE ieee.std_logic_1164.ALL;ENTITY latch ISPORT (

51、data : IN std_logic; en : IN std_logic; q : OUT std_logic );END latch;ARCHITECTURE behavior OF latch ISBEGINBEGINEND PROCESS;END behavior;锁存器?如果 en = 0 ,如何? 隐含存储隐含存储推断出寄存器IF en = 1 THEN q = data;END IF;不透明的寄存器敏感表中只包含输入enlabel_1: PROCESS (en)LIBRARY ieee;USE ieee.std_logic_1164.ALL;ENTITY latch ISPOR

52、T (data : IN std_logic; en : IN std_logic; q : OUT std_logic );END latch;ARCHITECTURE behavior OF latch ISBEGINBEGINEND PROCESS;END behavior;DQI86I83PLLFDIVI82WATCHDOGI78GCNTDI79GCNTBI74SCANI80FCNTBI56CLKGENI54FCNTDI81I22LEDSELI24BCD2LEDI87I25I26mo3:0ma3:0mc3:0mb3:0I75FDIVI84*I16*I18*I17*I77*I20*I88

53、*I89*I85*I62*I63*I64*I65*I66*I67*I68*I69*I11*I13*I12*I4*I5*I6*I7*I8*I9*I10*I3*dataqenupDFF触发器 - clk=1clk = 1意味着是上升沿触发的IF clk = 1 THEN q = d;END IF;寄存器敏感表中只包含触发信号,在本例中,即clklabel_1: PROCESS (clk)LIBRARY ieee;USE ieee.std_logic_1164.ALL;ENTITY dff ISPORT ( d : IN std_logic;clk : IN std_logic; q : OUT s

54、td_logic );END dff;ARCHITECTURE behavior OF dff ISBEGINBEGINEND PROCESS;END behavior;DQI86I83PLLFDIVI82WATCHDOGI78GCNTDI79GCNTBI74SCANI80FCNTBI56CLKGENI54FCNTDI81I22LEDSELI24BCD2LEDI87I25I26mo3:0ma3:0mc3:0mb3:0I75FDIVI84*I16*I18*I17*I77*I20*I88*I89*I85*I62*I63*I64*I65*I66*I67*I68*I69*I11*I13*I12*I4*

55、I5*I6*I7*I8*I9*I10*I3*dqclkupD触发器 - 使用WAIT语句wait until 其行为类似于敏感表WAIT UNTIL clk = 1;寄存器注意:这里没有敏感表label_1: PROCESSDQI86I83PLLFDIVI82WATCHDOGI78GCNTDI79GCNTBI74SCANI80FCNTBI56CLKGENI54FCNTDI81I22LEDSELI24BCD2LEDI87I25I26mo3:0ma3:0mc3:0mb3:0I75FDIVI84*I16*I18*I17*I77*I20*I88*I89*I85*I62*I63*I64*I65*I66*

56、I67*I68*I69*I11*I13*I12*I4*I5*I6*I7*I8*I9*I10*I3*dqclkupLIBRARY ieee;USE ieee.std_logic_1164.ALL;ENTITY wait_dff ISPORT ( d : IN std_logic;clk : IN std_logic; q : OUT std_logic );END wait_dff;ARCHITECTURE behavior OF wait_dff ISBEGINBEGINq = d;END PROCESS;END behavior;D触发器 - clkevent and clk=1 clkev

57、ent and clk=1 clk 为信号名(任意名) event是一个VHDL属性,用于说明信号值需要有一个改变 clk=1 意味着是上升沿触发的IF clkevent AND clk = 1 THEN寄存器DQI86I83PLLFDIVI82WATCHDOGI78GCNTDI79GCNTBI74SCANI80FCNTBI56CLKGENI54FCNTDI81I22LEDSELI24BCD2LEDI87I25I26mo3:0ma3:0mc3:0mb3:0I75FDIVI84*I16*I18*I17*I77*I20*I88*I89*I85*I62*I63*I64*I65*I66*I67*I68

58、*I69*I11*I13*I12*I4*I5*I6*I7*I8*I9*I10*I3*dqclkupLIBRARY ieee;USE ieee.std_logic_1164.ALL;ENTITY dff_a ISPORT ( d : IN std_logic;clk : IN std_logic; q : OUT std_logic );END dff_a;ARCHITECTURE behavior OF dff_a ISBEGINlabel_1: PROCESS (clk)BEGINq = d;END IF;END PROCESS;END behavior;D触发器 - rising_edge

59、 rising_edge IEEE 的函数,在程序包 std_logic_1164 中定义 规定信号值必须必须是0到1 X, Z到1的转变是不允许的IF rising_edge(clk) THEN寄存器DQI86I83PLLFDIVI82WATCHDOGI78GCNTDI79GCNTBI74SCANI80FCNTBI56CLKGENI54FCNTDI81I22LEDSELI24BCD2LEDI87I25I26mo3:0ma3:0mc3:0mb3:0I75FDIVI84*I16*I18*I17*I77*I20*I88*I89*I85*I62*I63*I64*I65*I66*I67*I68*I69

60、*I11*I13*I12*I4*I5*I6*I7*I8*I9*I10*I3*dqclkupLIBRARY ieee;USE ieee.std_logic_1164.ALL;ENTITY dff_b ISPORT ( d : IN std_logic;clk : IN std_logic; q : OUT std_logic );END dff_b;ARCHITECTURE behavior OF dff_b ISBEGINlabel_1: PROCESS (clk)BEGINq = d;END IF;END PROCESS;END behavior;带有异步清零的D触发器 这里是怎样为寄存器实现异步控

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论