1、EDAEDA技术技术实用教程实用教程第第4 4章章 目目 录录4.1 多路选择器多路选择器VHDL描述;描述;4.2 寄存器描述及其寄存器描述及其VHDL语言现象;语言现象;4.3 1位二进制全加器的位二进制全加器的VHDL设计;设计;4.4 VHDL文本输入设计方法初步。文本输入设计方法初步。4.1 4.1 多路选择器多路选择器VHDLVHDL描述描述z关于关于VHDLz多路选择器多路选择器VHDL描述描述什么是什么是VHDLVHDL? Very high speed integrated Hardware Description Language (VHDL)y是是IEEE、工业标准硬件描
2、述语言工业标准硬件描述语言y用语言的方式而非图形等方式描述硬件电路用语言的方式而非图形等方式描述硬件电路x容易修改容易修改x容易保存容易保存y特别适合于设计的电路有:特别适合于设计的电路有:x复杂组合逻辑电路,如:复杂组合逻辑电路,如: 译码器、编码器、加减法器、多路选择器、地址译码器译码器、编码器、加减法器、多路选择器、地址译码器.x状态机状态机x等等等等. VHDL于于1983年由美国国防部创建,年由美国国防部创建,1987年成为国际标年成为国际标准:准:IEEE:1076。 1993年进行了修订,扩充了年进行了修订,扩充了VHDL的功的功能,成为能,成为IEEE:10761993版。版。
3、2002发布了最新版本。发布了最新版本。3个版本:个版本:87版,版,93版,版,2002版。版。 此外,此外,Verilog_HDL 也是一种通用的硬件描述语言。也是一种通用的硬件描述语言。1983年创立,年创立,1995年成为年成为IEEE标准。标准。4.14.1多路选择器的多路选择器的VHDLVHDL描述描述 多路选择器的多路选择器的VHDL描述描述 图图1 mux21a实体实体 图图2 mux21a结构体结构体 设计模块实体设计模块实体 结构体结构体多路选择器的多路选择器的VHDL描述描述 【例例1】ENTITY mux21a IS PORT ( a, b : IN BIT; s :
4、IN BIT; y : OUT BIT );END ENTITY mux21a;ARCHITECTURE one OF mux21a IS BEGIN y = a WHEN s = 0 ELSE b ;END ARCHITECTURE one ; 行为描述行为描述【例例2】 ENTITY mux21a IS PORT ( a, b : IN BIT; s : IN BIT; y : OUT BIT ); END ENTITY mux21a;ARCHITECTURE one OF mux21a IS SIGNAL d,e : BIT; BEGINd = a AND (NOT S) ;e = b
5、AND s ;y = d OR e ; END ARCHITECTURE one ; 结构描述结构描述ENTITY mux21a IS PORT ( a, b : IN BIT; s : IN BIT; y : OUT BIT ); END ENTITY mux21a;ARCHITECTURE one OF mux21a IS BEGIN y = (a AND (NOT s) OR (b AND s) ; END ARCHITECTURE one;结构描述结构描述【例例3】 ENTITY mux21a IS PORT ( a, b, s: IN BIT; y : OUT BIT );END E
6、NTITY mux21a;ARCHITECTURE one OF mux21a IS BEGIN PROCESS (a,b,s) BEGIN IF s = 0 THEN y = a ; ELSE y = b ;END IF; END PROCESS;END ARCHITECTURE one ; 行为描述行为描述图图3 mux21a功能时序波形功能时序波形 VHDL相关语句说明相关语句说明1. 1. 实体表达实体表达ENTITY e_name IS PORT ( p_name : port_m data_type; . p_namei : port_mi data_type );END ENTI
7、TY e_name;或:或:ENTITY e_name IS PORT ( p_name : port_m data_type; . p_namei : port_mi data_type );END e_name;93版版87版版实体是指设计的实体是指设计的功能模块,它描功能模块,它描述模块的名称和述模块的名称和端口信号端口信号关键词不分大小写关键词不分大小写2. 2. 实体名:实体名:即指设计的模块名称,不能使用中文、关即指设计的模块名称,不能使用中文、关键词作为实体名,开头不能使用数字。键词作为实体名,开头不能使用数字。3. PORT3. PORT语句和端口信号名语句和端口信号名4. 4
8、. 端口模式:端口模式:指端口信号的传输方向指端口信号的传输方向INOUTINOUTBUFFER5. 5. 数据类型数据类型BITBIT:只有只有2 2种取值:种取值:00和和116. 6. 结构体表达结构体表达ARCHITECTURE arch_name OF e_name IS (说明语句说明语句)BEGIN (功能描述语句功能描述语句)END ARCHITECTURE arch_name ;或:或:ARCHITECTURE arch_name OF e_name IS (说明语句说明语句)BEGIN (功能描述语句功能描述语句)END arch_name ;结构体是指模块结构体是指模块的
9、内部结构,它的内部结构,它描述模块的内部描述模块的内部结构和行为、功结构和行为、功能能93版版87版版8. 8. 逻辑操作符逻辑操作符ANDAND、OROR、NOTNOT7. 7. 信号传输信号传输( (赋值赋值) )符号和数据比较符号:符号和数据比较符号:赋值符号是赋值符号是 = = 比较符号是比较符号是 = = 布尔数据类型(布尔数据类型(BOOLEAN)BOOLEAN):指一个表达式的值指一个表达式的值,为真或者假(,为真或者假(true = 1,false = 0 ),true = 1,false = 0 ),用于逻辑操作和条件判断。用于逻辑操作和条件判断。 例:例: z = a WH
10、EN p1 = 1 ELSE b WHEN p2 = 1 ELSE c ; 优先级:前面的赋值语句优先级高优先级:前面的赋值语句优先级高9. WHEN_ELSE9. WHEN_ELSE条件信号赋值语句:条件信号赋值语句:并行赋值语句,有赋值并行赋值语句,有赋值优先级优先级赋值目标赋值目标 = 表达式表达式1 WHEN 赋值条件赋值条件 ELSE 表达式表达式2 WHEN 赋值条件赋值条件 ELSE . 表达式表达式 n;10. PROCESS10. PROCESS进程语句和顺序语句:进程语句和顺序语句:所有的顺序描述语句都所有的顺序描述语句都必须放在进程语句必须放在进程语句PROCESSPRO
11、CESS中。中。敏感表:敏感表:输入信号都必须放在敏感表中,只要一个信号发生输入信号都必须放在敏感表中,只要一个信号发生改变,进程语句就启动执行一次;改变,进程语句就启动执行一次; 一个结构体中可以包含任意多个进程语句,所有的进程一个结构体中可以包含任意多个进程语句,所有的进程语句都是并行语句,但进程内部的语句是顺序执行的。语句都是并行语句,但进程内部的语句是顺序执行的。12. 12. 文件取名和存盘文件取名和存盘 文件名应与实体名相同,扩展名为文件名应与实体名相同,扩展名为. .vhdvhd。 文件存放在工程目录中,工程目录叫做文件存放在工程目录中,工程目录叫做WORKWORK目录或者目录或
12、者WORKWORK库的目录。库的目录。11. IF_THEN11. IF_THEN条件语句:条件语句:VHDLVHDL顺序语句,可以描述组合电路顺序语句,可以描述组合电路,只能在进程语句内部使用。,只能在进程语句内部使用。VHDL设计的基本概念和语句小节设计的基本概念和语句小节数据类型信号赋值符条件比较符 延时实体结构体端口定义端口模式逻辑操作符IF条件语句并行条件语句进程语句顺序语句并行语句文件取名文件存盘4.2 寄存器描述及其HVDL现象zD触发器触发器VHDL描述描述z标准逻辑标准逻辑std_logicz库和程序包库和程序包z时钟沿检测时钟沿检测z时序电路和组合电路的时序电路和组合电路的
13、VHDL描述描述z同步电路和异步电路同步电路和异步电路寄存器描述及其寄存器描述及其VHDL语言现象语言现象D触发器的触发器的VHDL描述描述【例】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 ; D触发器触发器ARCHITECTURE bhv OF DFF1 IS SIGNAL Q1 : STD_LOGIC ; -类似于在芯片内类似于在芯片内部定义一个数据的暂存节点部定义一个数据的暂
14、存节点 BEGIN PROCESS (CLK) BEGIN IF CLKEVENT AND CLK = 1 THEN Q1 = D ; END IF; Q = Q1 ; -将内部的暂存数据向端口输将内部的暂存数据向端口输出出 END PROCESS ; END bhv;D触发器触发器VHDL描述的语言现象说明描述的语言现象说明1. 1. 标准逻辑位数据类型标准逻辑位数据类型STD_LOGICSTD_LOGICBIT数据类型定义: TYPE BIT IS(0,1);TYPE BIT IS(0,1);STD_LOGIC数据类型定义:TYPE STD_LOGIC IS (U,X,0,1,Z,W,L,
15、H,-);TYPE STD_LOGIC IS (U,X,0,1,Z,W,L,H,-);STD_LOGIC所定义的9种数据的含义是:UU表示未初始化的;表示未初始化的; XX表示强未知的;表示强未知的; 0 0表示强表示强逻辑逻辑0 0; 1 1表示强逻辑表示强逻辑1 1; ZZ表示高阻态;表示高阻态; W W 表示弱未知的;表示弱未知的; LL表示弱逻辑表示弱逻辑0 0; HH表示弱表示弱逻辑逻辑1 1; - -表示忽略。表示忽略。2. 2. 设计库和标准程序包设计库和标准程序包使用库和程序包的一般定义表式是:使用库和程序包的一般定义表式是: LIBRARY LIBRARY ; USE USE
16、 .ALL ; ALL ; 库、程序包和包内容的关系库、程序包和包内容的关系 库库/ /程序包程序包/ /包内容(指包中的所有定义,如数据类型、函数包内容(指包中的所有定义,如数据类型、函数、过程、常量等)、过程、常量等)(1 1)IEEEIEEE库:不是库:不是VHDLVHDL的系统库,使用时必须说明的系统库,使用时必须说明(2 2)STDSTD库:是库:是VHDLVHDL自带的标准库,默认打开,在程序中不自带的标准库,默认打开,在程序中不须说明。须说明。(3 3)工作库:即用户自己在设计文件中定义的一切内容,是)工作库:即用户自己在设计文件中定义的一切内容,是默认打开的,在程序中不须说明。
17、默认打开的,在程序中不须说明。3. 3. SIGNALSIGNAL信号定义和数据对象信号定义和数据对象ARCHITECTURE bhv OF DFF1 IS SIGNAL Q1 : STD_LOGIC ; BEGINEND bhv;信号信号Q1是属于数据对象(是属于数据对象(data objects)。VHDL中有中有3种数据对象:信号(种数据对象:信号(SIGNAL)、变量、变量(VARIABLE)和常量和常量(CONSTANT)。每一个数据对象都必须给它规定一种数据类型。每一个数据对象都必须给它规定一种数据类型。数据类型定义了数据对象的取值范围。如数据类型定义了数据对象的取值范围。如BIT
18、, STD_LOGIC等等4. 4. 上升沿检测表式和信号属性函数上升沿检测表式和信号属性函数EVENTEVENT 关键词EVENT是信号属性,VHDL通过以下表式来测定某信号的跳变边沿: EVENTEVENT【例5】ARCHITECTURE bhv OF DFF1 IS BEGIN PROCESS (CLK) BEGIN IF CLKEVENT AND CLK = 1 THEN Q = D ; END IF; END PROCESS ;END ;【例】【例】.PROCESS (CLK) BEGINIF CLKEVENT AND (CLK=1) AND (CLKLAST_VALUE=0) TH
19、EN Q = D ; -确保确保CLK的变化是一次上升沿的跳变的变化是一次上升沿的跳变 END IF; END PROCESS ;【例】【例】.PROCESS (CLK) BEGINIF CLK=1 AND CLKLAST_VALUE=0 -同上例同上例 THEN Q = D ; END IF; END PROCESS ;时钟沿的不同描述方式时钟沿的不同描述方式【例】【例】LIBRARY IEEE ;USE IEEE.STD_LOGIC_1164.ALL ;ENTITY DFF3 IS PORT (CLK : IN STD_LOGIC ; D : IN STD_LOGIC ; Q : OUT
20、STD_LOGIC ); END ; ARCHITECTURE bhv OF DFF3 IS SIGNAL Q1 : STD_LOGIC; BEGIN PROCESS (CLK) BEGIN IF rising_edge(CLK) - CLK的数据类型必须是的数据类型必须是STD_LOGIC THEN Q1 = D ; END IF; Q b1 THEN q1 = 1 ; ELSIF a1 b1 THEN q1 b1 THEN q1 = 1 ; ELSE q1 = 0 ; END IF; END PROCESS ; END 电路图电路图【例】. PROCESS (CLK) BEGIN IF C
21、LK = 1 时钟沿触发型寄存器时钟沿触发型寄存器 THEN Q = D ; -利用进程的启动特性产生对利用进程的启动特性产生对CLK的边的边沿检测沿检测 END IF; END PROCESS ;【例】. PROCESS (CLK,D) BEGIN IF CLK = 1 -电平触发型寄存器电平触发型寄存器 THEN Q = D ; END IF; END PROCESS ;时钟沿触发器时序波形时钟沿触发器时序波形电平触发型寄存器的时序波形电平触发型寄存器的时序波形异步时序电路设计异步时序电路设计. ARCHITECTURE bhv OF MULTI_DFF IS SIGNAL Q1,Q2 :
22、 STD_LOGIC; BEGINPRO1: PROCESS (CLK) BEGIN IF CLKEVENT AND CLK=1 THEN Q1 = NOT (Q2 OR A); END IF; END PROCESS ;PRO2:PROCESS (Q1) BEGIN IF Q1EVENT AND Q1=1 THEN Q2 = D; END IF; QQ = Q2 ; END PROCESS ; 同步电路:各个部分的电路使用相同的时钟同步电路:各个部分的电路使用相同的时钟异步电路:各个部分的电路使用不同的时钟异步电路:各个部分的电路使用不同的时钟综合的电路综合的电路VHDL设计基本概念和语言现
23、象小节设计基本概念和语言现象小节数据类型数据对象信号属性时钟检测VHDL库程序包时序电路异步时序4.3 1位二进制全加器的位二进制全加器的VHDL设计设计知识要点知识要点1、CASE语句语句表示多分支情况的选择语句,各分支无优先级。表示多分支情况的选择语句,各分支无优先级。与与IF语句的区别。语句的区别。2、元件例化语句(、元件例化语句(有有2个语句组成个语句组成)用于层次设计,即在当前设计中调用一个已经设用于层次设计,即在当前设计中调用一个已经设计好的功能模块计好的功能模块component 语句:将一个设计实体定义为一个元语句:将一个设计实体定义为一个元件件port map 语句:语句:
24、用于元件调用(端口映射)。用于元件调用(端口映射)。3、标准逻辑矢量:、标准逻辑矢量:std_logic_vector( * downto *) 或者或者 std_logic_vector( * to *)表示一维数组或者总线表示一维数组或者总线并置操作符并置操作符& 用于将单独的信号合并起来组成新的数组或者总用于将单独的信号合并起来组成新的数组或者总线线4、1位全加器的位全加器的VHDL描述描述半加器的半加器的VHDL描述描述全加器的全加器的VHDL描述(层次设计)描述(层次设计)半加器半加器h_adder电路图电路图全加器全加器f_adder电路图电路图半加器描述和半加器描述和CASE语句
25、语句absoco0000011010101101半加器半加器h_adder逻辑功能真值表逻辑功能真值表可使用可使用CASE语句描述真值表语句描述真值表1. 1. CASECASE语句语句CASE语句的一般表式是:语句的一般表式是:CASE ISWhen = ; . ; ;When = ; . ; ;.END CASE ;作用:表示多分支情况的选择语句,各分支无优先级。作用:表示多分支情况的选择语句,各分支无优先级。执行:每次启动执行:每次启动CASE语句,只选择执行其中一个分支的语句。语句,只选择执行其中一个分支的语句。注意注意:(:(1)对所有的情况都要赋值,否则会综合成锁存器。对所有的情况
26、都要赋值,否则会综合成锁存器。 (2)CASE语句只能在语句只能在process语句中使用。语句中使用。 (3)与)与IF语句的区别。语句的区别。2. 2. 标准逻辑矢量数据类型标准逻辑矢量数据类型STD_LOGIC_VECTORSTD_LOGIC_VECTOR3. 3. 并置操作符并置操作符 半加器描述和半加器描述和CASE语句语句在使用在使用STD_LOGIC_VECTOR中,必须注明其数组宽度,即位中,必须注明其数组宽度,即位宽,如:宽,如: B : OUT STD_LOGIC_VECTOR(7 DOWNTO 0) 8位数位数 或或 SIGNAL A :STD_LOGIC_VECTOR(
27、1 TO 4)4位数位数以下是一些并置操作示例:以下是一些并置操作示例:SIGNAL a : STD_LOGIC_VECTOR (3 DOWNTO 0) ;SIGNAL d : STD_LOGIC_VECTOR (1 DOWNTO 0) ; .a = 1 0 d(1) 1 ; - 元素与元素并置,元素与元素并置,并置后的数组长度为并置后的数组长度为4 .IF a d = 101011 THEN . - 在在IF条件句中可以使用并置符条件句中可以使用并置符 【例】【例】 LIBRARY IEEE ;-或门逻辑描述或门逻辑描述 USE IEEE.STD_LOGIC_1164.ALL; ENTITY
28、 or2a IS PORT (a, b :IN STD_LOGIC; c : OUT STD_LOGIC ); END ENTITY or2a; ARCHITECTURE one OF or2a IS BEGIN c = a OR b ; END ARCHITECTURE fu1;【例】【例】LIBRARY IEEE; -半加器描述半加器描述(1)USE IEEE.STD_LOGIC_1164.ALL; ENTITY h_adder IS PORT (a, b : IN STD_LOGIC; co, so : OUT STD_LOGIC); END ENTITY h_adder; ARCHIT
29、ECTURE fh1 OF h_adder is BEGIN so = NOT(a XOR (NOT b) ; co = a AND b ; END ARCHITECTURE fh1; 【例】【例】LIBRARY IEEE; -半加器描述半加器描述(2)USE IEEE.STD_LOGIC_1164.ALL; ENTITY h_adder IS PORT (a, b : IN STD_LOGIC; co, so : OUT STD_LOGIC); END ENTITY h_adder; 【例】【例】ARCHITECTURE fh1 OF h_adder is SIGNAL abc : STD_
30、LOGIC_VECTOR(1 DOWNTO 0) ;BEGIN abc so=0; co so=1; co so=1; co so=0; co NULL ; END CASE; END PROCESS;END ARCHITECTURE fh1 ;【例】 . -半加器描述半加器描述(3) SIGNAL abc,cso : STD_LOGIC_VECTOR(1 DOWNTO 0 ); BEGIN abc = a & b ; co = cso(1) ; so cso cso cso csoain,b=bin,co=d,so=e); u2 : h_adder PORT MAP(a=e, b=cin,
31、co=f,so=sum);u3 : or2a PORT MAP(a=d, b=f, c=cout); END ARCHITECTURE fd1;全加器描述和例化语句全加器描述和例化语句 元件例化语句由两部分组成,第一部分元件例化语句由两部分组成,第一部分是将一个现成的是将一个现成的设计实体定义为一个元件,语句的功能是对待调用的元件设计实体定义为一个元件,语句的功能是对待调用的元件作出调用声明作出调用声明,它的最简表达式如下所示:,它的最简表达式如下所示: COMPONENT 元件名元件名 IS PORT (端口名表端口名表) ; END COMPONENT 文件名文件名 ; 元件例化语句的第二
32、部分元件例化语句的第二部分则是此元件引脚与当前设计实体则是此元件引脚与当前设计实体(顶层文件顶层文件)中的具体信号连接起来。中的具体信号连接起来。语句的表达式如下:语句的表达式如下: 例化名例化名 : 元件名元件名 PORT MAP( 端口名端口名 = 连接端口名连接端口名,.);注意连接顺序:左边表示元件引脚名,右边表示与该引脚注意连接顺序:左边表示元件引脚名,右边表示与该引脚相连的实际信号名。相连的实际信号名。8位全加器的设计z调用方法调用方法y调用调用8次,将次,将8个个1位全加器串连起来。位全加器串连起来。y示例(课堂练习)示例(课堂练习)z知识要点知识要点y计数器:广泛用于控制。计数
33、器:广泛用于控制。y整数:整数:INTEGER, 要定义范围,便于综合器确定线宽。要定义范围,便于综合器确定线宽。x表示方法:如表示方法:如2,35,16d9#, 2#11001#等。等。x自然数和正整数。自然数和正整数。y操作符的重载函数操作符的重载函数x重载:给操作符赋予新的功能,使不同数据类型的数据可以混合重载:给操作符赋予新的功能,使不同数据类型的数据可以混合使用使用x使用重载函数:使用重载函数: USE IEEE.STD_LOGIC_UNSIGNED.ALL 4.4 4.4 计数器设计计数器设计zBUFFER模式模式y当输出的量内部需要用时,必须定义为当输出的量内部需要用时,必须定义
34、为BUFFER类型。类型。z计数器的电路结构计数器的电路结构y一个加法器一个加法器y一个锁存器一个锁存器yQ X)z十进制计数器的设计十进制计数器的设计y使能型号和复位信号使能型号和复位信号y内部变量的定义内部变量的定义y进位信号进位信号z移位寄存器的设计移位寄存器的设计y并行置位并行置位y移位寄存器的描述移位寄存器的描述y移位输出移位输出4.4 4.4 计数器设计计数器设计 【例例】ENTITY CNT4 IS PORT ( CLK : IN BIT ; Q: BUFFER INTEGER RANGE 15 DOWNTO 0); END ; ARCHITECTURE bhv OF CNT4
35、IS BEGIN PROCESS (CLK) BEGIN IF CLKEVENT AND CLK = 1 THEN Q = Q + 1 ; 两边的数据类型相同两边的数据类型相同 END IF; END PROCESS ;END bhv; 4.4 4.4 计数器设计计数器设计 4位加法计数器位加法计数器 表面上表面上BUFFERBUFFER具有双向端口具有双向端口INOUTINOUT的功能,但实际上其输入功能的功能,但实际上其输入功能是不完整的,它只能将自己输出的信号再反馈回来,并不含有是不完整的,它只能将自己输出的信号再反馈回来,并不含有ININ的功的功能。能。 表式表式Q = Q + 1Q
36、= Q + 1的右项与左项并非处于相同的时刻内,对于时的右项与左项并非处于相同的时刻内,对于时序电路,除了传输延时外,前者的结果出现于当前时钟周期;后者,序电路,除了传输延时外,前者的结果出现于当前时钟周期;后者,即左项要获得当前的即左项要获得当前的Q + 1Q + 1,需等待下一个时钟周期。需等待下一个时钟周期。 4.4 4.4 计数器设计计数器设计 整数类型整数类型 1 十进制整数十进制整数0 十进制整数十进制整数35 十进制整数十进制整数10E3 十进制整数,等于十进制整数十进制整数,等于十进制整数100016#D9# 十六进制整数,等于十六进制整数十六进制整数,等于十六进制整数D9H8
37、#720# 八进制整数,等于八进制整数八进制整数,等于八进制整数7202#11010010# 二进制整数,等于二进制整二进制整数,等于二进制整11010010B 例例 Q : BUFFER NATURAL RANGE 15 DOWNTO 0; z自然数自然数:NATURE,:NATURE,包含包含0 0和所有正整数;和所有正整数;z正整数正整数:POSITIVE:POSITIVE,不包含,不包含0 0;zINTEGER,NATURE,POSITIVEINTEGER,NATURE,POSITIVE都定义在都定义在VHDLVHDL标标准程序包准程序包STANDARDSTANDARD中,是默认打开的
38、,所中,是默认打开的,所以不需要进行库的声明语句。以不需要进行库的声明语句。4.4 4.4 计数器设计计数器设计 计数器设计的另一种表述计数器设计的另一种表述 【例例】 LIBRARY IEEE ; USE IEEE.STD_LOGIC_1164.ALL ; USE IEEE.STD_LOGIC_UNSIGNED.ALL ; ENTITY CNT4 IS PORT ( CLK : IN STD_LOGIC ; Q : OUT STD_LOGIC_VECTOR(3 DOWNTO 0) ; END ; 【例例】。ARCHITECTURE bhv OF CNT4 ISSIGNAL Q1 : STD_
39、LOGIC_VECTOR(3 DOWNTO 0); BEGIN Q1为内部信号,无传输方向限制为内部信号,无传输方向限制 PROCESS (CLK) BEGIN IF CLKEVENT AND CLK = 1 THEN Q1 = Q1 + 1 ; -右边两个不同数据类型的数相加右边两个不同数据类型的数相加 END IF; END PROCESS ; Q 0) ;-计数器复位计数器复位 ELSIF CLKEVENT AND CLK=1 THEN -检测时钟上升沿检测时钟上升沿 IF EN = 1 THEN -检测是否允许计数检测是否允许计数 IF CQI 0);-等于或者大于等于或者大于9,计,
40、计数值清零数值清零 END IF; END IF; END IF; IF CQI = “1001” THEN COUT = 1; -计数等于计数等于9,输出进,输出进位信号位信号 ELSE COUT = 0; END IF; CQ XOTHERS=X) 为了简化表达才使用短语为了简化表达才使用短语“(OTHERS=X)”(OTHERS=X)”,这是一个省略赋值这是一个省略赋值操作符,它可以在较多位的位矢量赋值中作省略化的赋值,如以操作符,它可以在较多位的位矢量赋值中作省略化的赋值,如以下语句:下语句: SIGNAL d1,d2 : STD_LOGIC_VECTOR(4 DOWNTO 0); V
41、ARIABLE a1 : STD_LOGIC_VECTOR(15 DOWNTO 0); . d1 0); d2 1,4=1,others=0); a1 := (OTHERS=0) ;则则d1 = “00000”,d1 = “00000”,d2 = “10010”d2 = “10010”a1=“000000000000000”a1=“000000000000000”省略赋值操作符(省略赋值操作符(OTHERS=X)比并置操作符比并置操作符&要简单。要简单。3.3.带有复位和时钟使能的带有复位和时钟使能的1010进制计数器进制计数器异步:异步:跟时钟信号无关,单独起作用;跟时钟信号无关,单独起作用
42、;同步:同步:跟时钟信号有关,受时钟控制,即跟时钟同步;跟时钟信号有关,受时钟控制,即跟时钟同步;异步复位:异步复位:异步复位信号变为复位电平时立即复位;异步复位信号变为复位电平时立即复位;同步复位:同步复位:复位信号变为复位电平时并不立即复位,而复位信号变为复位电平时并不立即复位,而是等到时钟沿到来时才复位。是等到时钟沿到来时才复位。4.5 4.5 一般加法计数器设计一般加法计数器设计 程序分析程序分析 RTL电路(电路(Synplify综合)综合) 4.5 4.5 一般加法计数器设计一般加法计数器设计 程序分析程序分析 工作时序工作时序 4.5 4.5 一般加法计数器设计一般加法计数器设计
43、 含并行置位的移位寄存器设计含并行置位的移位寄存器设计 【例例】LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY SHFRT IS - 8位右移寄存器位右移寄存器 PORT ( CLK,LOAD : IN STD_LOGIC; DIN : IN STD_LOGIC_VECTOR(7 DOWNTO 0); QB : OUT STD_LOGIC );END SHFRT;【例例】。ARCHITECTURE behav OF SHFRT IS BEGIN PROCESS (CLK, LOAD) VARIABLE REG8 : STD_LOGIC_VECTO
44、R(7 DOWNTO 0); BEGIN IF CLKEVENT AND CLK = 1 THEN IF LOAD = 1 THEN REG8 := DIN; -由(由(LOAD=1)装载装载新数据新数据 ELSE REG8(6 DOWNTO 0) := REG8(7 DOWNTO 1); END IF; END IF; QB = REG8(0); - 输出最低位输出最低位 END PROCESS; END behav; 含并行置位的移位寄存器设计含并行置位的移位寄存器设计 工作时序工作时序 (1 1)在第)在第一个时钟到来时,一个时钟到来时,LOADLOAD恰为高电平恰为高电平(2 2)第二
45、个时钟,以及以后的时钟信号都是移位时钟)第二个时钟,以及以后的时钟信号都是移位时钟(3 3)第二)第二个时钟后,个时钟后,QBQB输出了右移出的第输出了右移出的第2 2个位个位114.6 VHDL4.6 VHDL语句结构与语法小节语句结构与语法小节 实体:实体:以以ENTITY. . .END ENTITY e_name描述器件的端口特性。描述器件的端口特性。结构体:结构体: 以以ARCHITECTURE . END ARCHITECTURE 给出器件给出器件 的逻辑功能和行为。的逻辑功能和行为。端口定义:端口定义: 以以PORT()语句定义器件端口及其数据类型。语句定义器件端口及其数据类型。
46、端口模式:端口模式: IN、OUT、INOUT、BUFFER描述端口数据的流向特征。描述端口数据的流向特征。数据类型:数据类型: 数据对象承载数据的类别:数据对象承载数据的类别:INTEGER、BOOLEAN、STD_LOGIC、BIT、STD_LOGIC_VECTOR。信号赋值符:信号赋值符:“=”,用于信号数据的传输,仿真传输延时最短为一个,用于信号数据的传输,仿真传输延时最短为一个 。条件比较符:条件比较符: “=”,在条件语句表式中用于比较待测数据的关系。,在条件语句表式中用于比较待测数据的关系。 延时:延时: 模拟器最小分辨时间模拟器最小分辨时间 ,或称延时,或称延时 。逻辑操作符:
47、逻辑操作符: AND、OR、NOT、NAND、XOR、XNOR。IF条件语句:条件语句:IF_THEN_ELSE语句作为顺序语句。语句作为顺序语句。并行条件语句:并行条件语句:WHEN_ELSE条件信号赋值语句。条件信号赋值语句。进程语句:进程语句: 以以PROCESS .END PROCESS引导的语句结构。引导的语句结构。顺序语句:顺序语句: 由进程语句引导的,以顺序方式执行的语句。由进程语句引导的,以顺序方式执行的语句。并行语句:并行语句: 在结构体中以并行方式执行的语句。在结构体中以并行方式执行的语句。文件取名:文件取名: 建议文件名与建议文件名与VHDL设计的实体名一致,后缀是设计的
48、实体名一致,后缀是.vhd。4.6 VHDL4.6 VHDL语句结构与语法小节语句结构与语法小节 文件存盘:文件存盘: VHDL设计文件必须存于指定为工程的目录中,此目录将被设计文件必须存于指定为工程的目录中,此目录将被设定为设定为WORK库,库,WORK库的路径即为此目录的路径。库的路径即为此目录的路径。VHDL库:库:LIBRARY语句打开语句打开VHDL库:库:IEEE库、标准库库、标准库STD、工作库工作库WORK . .程 序 包 :程 序 包 : U S E 语 句 声 明 使 用 程 序 包 :语 句 声 明 使 用 程 序 包 : S T D _ L O G I C _ 1 1
49、 6 4 、STD_LOGIC_UNSIGNED、STANDARD等程序。等程序。数据对象:数据对象:信号:信号:SIGNAL,变量:变量:VERIABLE,常数:常数:CONSTANT信号属性函数:信号属性函数:信号属性函数信号属性函数EVENT、LAST_VALUE。时钟检测:时钟检测:时钟检测上升沿检测表式:时钟检测上升沿检测表式:CLKEVENT AND CLK=1、RISING_EDGE()、FALLING_EDGE()等。等。时序电路:时序电路:不完整条件语句产生时序电路:不完整条件语句产生时序电路:IF THEN END IF,IF THEN ELSIF THEN END IF真
50、值表表达:真值表表达:表达方法之一是用表达方法之一是用CASE_WHEN语句,但要注意语句,但要注意OTHERS的应用。的应用。并置操作符:并置操作符:并置操作符并置操作符 可用于合并两个或多个逻辑矢量,构建成新的可用于合并两个或多个逻辑矢量,构建成新的数组。数组。元件例化:元件例化:由元件调用声明语句由元件调用声明语句COMPONENT和映射语句和映射语句PORT MAP( )构成。构成。运算符重载概念:运算符重载概念:当进行非整数类型数据运算操作时需要调用运算符重当进行非整数类型数据运算操作时需要调用运算符重载函数,这可以打开程序包载函数,这可以打开程序包STD_LOGIC_UNSIGNE