




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 第第3 3章章3.1 VHDL 3.1 VHDL 基本语法基本语法 3.1.1 3.1.1 组合电路描述组合电路描述图图3-1 mux21a实体实体 图图3-2 mux21a结构体结构体 3.1 VHDL 3.1 VHDL 基本语法基本语法3.1.1 3.1.1 组合电路描述组合电路描述【例【例3-1】LIBRARY IEEE ;USE IEEE.STD_LOGIC_1164.ALL ;ENTITY mux21a IS PORT ( a, b : IN BIT; s : IN BIT; y : OUT BIT );END ENTITY mux21a;ARCHITECTURE one OF m
2、ux21a IS BEGIN y = a WHEN s = 0 ELSE b ;END ARCHITECTURE one ; 3.1 VHDL 3.1 VHDL 基本语法基本语法3.1.1 3.1.1 组合电路组合电路描述描述【例【例3-2】 LIBRARY IEEE ; USE IEEE.STD_LOGIC_1164.ALL ; ENTITY mux21a IS PORT ( a, b, s: IN BIT; y : OUT BIT ); END ENTITY mux21a; ARCHITECTURE one OF mux21a IS SIGNAL d,e : BIT; BEGIN d =
3、a AND (NOT S) ; e = b AND s ; y = d OR e ; END ARCHITECTURE one ; 3.1 VHDL 3.1 VHDL 基本语法基本语法【例【例3-3】 LIBRARY IEEE ; USE IEEE.STD_LOGIC_1164.ALL ; ENTITY mux21a IS PORT ( a, b, s: IN BIT; y : OUT BIT ); END ENTITY mux21a; ARCHITECTURE one OF mux21a IS BEGIN PROCESS (a,b,s) BEGIN IF s = 0 THEN y = a ;
4、 ELSE y = b ; END IF; END PROCESS; END ARCHITECTURE one ; 3.1.1 3.1.1 组合电路组合电路描述描述3.1 VHDL 3.1 VHDL 基本语法基本语法图图3-3 mux21a功能时序波形功能时序波形 3.1.1 3.1.1 组合电路组合电路描述描述3.1 VHDL 3.1 VHDL 基本语法基本语法3.1.2 VHDL3.1.2 VHDL结构结构 【例【例3-4】ENTITY e_name IS PORT ( p_name : port_m data_type; . p_namei : port_mi data_type );E
5、ND ENTITY e_name; 1. 1. 实体表达实体表达 3.1 VHDL 3.1 VHDL 基本语法基本语法2. 2. 实体名实体名 3. 3. 端口语句和端口信号名端口语句和端口信号名 4. 4. 端口模式端口模式 “IN”、“ “OUT”、“ “INOUT”、“ “BUFFER” 5. 5. 数据类型数据类型 3.1 VHDL 3.1 VHDL 基本语法基本语法6. 6. 结构体表达结构体表达 【例【例3-53-5】ARCHITECTURE arch_name OF e_name IS 说说明明语语句句 BEGIN (功能描述功能描述语语句句)END ARCHITECTURE a
6、rch_name ; 3.1 VHDL 3.1 VHDL 基本语法基本语法7. 7. 赋值符号和数据比较符号赋值符号和数据比较符号 IF a THEN . - 注意,注意,a的数据类型必须是的数据类型必须是boolean 例:例:IF (s1=0)AND(s2=1)OR(cb+1) THEN . 8. 8. 逻辑操作符逻辑操作符 应用的数据类型:应用的数据类型:BIT、BOOLEAN、STD_LOGIC AND(与与)、OR(或或)、NAND(与非与非)、NOR(或非或非)、XOR(异或异或)、XNOR(同或同或)和和NOT(取反取反) 3.1 VHDL 3.1 VHDL 基本语法基本语法9.
7、 9. 条件语句条件语句 10. WHEN_ELSE10. WHEN_ELSE条件信号赋值语句条件信号赋值语句 赋值目标赋值目标 = = 表达式表达式 WHENWHEN 赋值条件赋值条件 ELSEELSE 表达式表达式 WHENWHEN 赋值条件赋值条件 ELSEELSE . . 表达式表达式 ; 例:例: z = a WHEN p1 = 1 ELSE b WHEN p2 = 1 ELSE c ; 3.1 VHDL 3.1 VHDL 基本语法基本语法11. 11. 进程语句和顺序语句进程语句和顺序语句 12. 12. 文件取名和存盘文件取名和存盘 进程语句:进程语句:PROCESS. END
8、PROCESS “.vhd” adder_f.vhd 3.2 3.2 时序电路描述时序电路描述 3.2.1 D 3.2.1 D 触发器触发器 【例【例3-6】 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 ; ARCHITECTURE bhv OF DFF1 IS SIGNAL Q1 : STD_LOGIC ; -类似于在芯片内部定义一个数据的暂存节点类似于在芯片内部定义一个数据的
9、暂存节点 BEGIN PROCESS (CLK,Q1) BEGIN IF CLKEVENT AND CLK = 1 THEN Q1 = D ; END IF; END PROCESS ; Q = Q1 ; -将内部的暂存数据向端口输出(双横线将内部的暂存数据向端口输出(双横线-是注释符号)是注释符号) END bhv; 图图3-4 D触发器触发器 3.2 3.2 时序电路描述时序电路描述 3.2.2 3.2.2 时序描述时序描述VHDLVHDL规则规则 1. 1. 标准逻辑位数据类型标准逻辑位数据类型 STD_LOGIC STD_LOGIC BITBIT数据类型定义:数据类型定义: TYPE
10、BIT IS(0,1); -只有两种取值只有两种取值STD_LOGICSTD_LOGIC数据类型定义:数据类型定义: TYPE STD_LOGIC IS (U,X,0,1,Z,W,L,H,-); -有有9种取值种取值 3.2 3.2 时序电路描述时序电路描述 2. 2. 设计库和标准程序包设计库和标准程序包 LIBRARY WORK ;LIBRARY STD ;USE STD.STANDARD.ALL ; LIBRARY ;USE .ALL ; LIBRARY IEEE ;USE IEEE.STD_LOGIC_1164.ALL ; 3.2 3.2 时序电路描述时序电路描述 3. 3. 信号定义
11、和数据对象信号定义和数据对象 EVENTEVENT 4. 4. 上升沿检测表式和信号属性函数上升沿检测表式和信号属性函数EVENT EVENT 3.2 3.2 时序电路描述时序电路描述 【例【例3-7】ENTITY COMP_BAD IS PORT( a1,b1 : IN BIT; q1 : OUT BIT); END ; ARCHITECTURE one OF COMP_BAD IS BEGIN PROCESS (a1,b1) BEGIN IF a1 b1 THEN q1 = 1 ; ELSIF a1 b1 THEN q1 b1 THEN q1 = 1 ; ELSE q1 = 0 ; END
12、 IF; . 3.2 3.2 时序电路描述时序电路描述 3.2.3 3.2.3 时序电路的不同表述时序电路的不同表述 【例【例3-9】.PROCESS (CLK) BEGIN IF CLKEVENT AND (CLK=1) AND (CLKLAST_VALUE=0) THEN Q = D ; -确保确保CLK的变化是一次上升沿的跳变的变化是一次上升沿的跳变 END IF; END PROCESS ;【例【例3-10】.PROCESS (CLK) BEGIN IF CLK=1 AND CLKLAST_VALUE=0 -同例同例3-9 THEN Q = D ; END IF; END PROCES
13、S ; 3.2 3.2 时序电路描述时序电路描述 【例【例3-11】LIBRARY IEEE ;USE IEEE.STD_LOGIC_1164.ALL ;ENTITY DFF3 IS PORT (CLK,D : IN STD_LOGIC ; Q : OUT STD_LOGIC ); END ; ARCHITECTURE bhv OF DFF3 IS SIGNAL Q1 : STD_LOGIC; BEGIN PROCESS (CLK) BEGIN IF rising_edge(CLK) THEN - 必须打开必须打开STD_LOGIC_1164程序包程序包 Q1 = D ; END IF; EN
14、D PROCESS ; Q = Q1 ; -在此,赋值语句可以放在进程外,作为并行赋值语句在此,赋值语句可以放在进程外,作为并行赋值语句 END ; 3.2 3.2 时序电路描述时序电路描述 3.2.3 3.2.3 实现时序电路的不同表述实现时序电路的不同表述 【例【例3-12】.PROCESS BEGIN wait until CLK = 1 ; -利用利用wait语语句句 Q = D ;END PROCESS; 3.2 3.2 时序电路描述时序电路描述 【例【例3-13】.PROCESS (CLK) BEGIN IF CLK = 1 THEN Q = D ; -利用利用进进程的程的启动启动
15、特性特性产产生生对对CLK的的边边沿沿检测检测 END IF; END PROCESS; 图图3-7 例例3-13的时序波形的时序波形 3.2 3.2 时序电路描述时序电路描述 【例【例3-143-14】.PROCESS (CLK,D) BEGIN IF CLK = 1 THEN -电平触发型寄存器电平触发型寄存器 Q = D ; END IF; END PROCESS ; 图图3-8 例例3-14的时序波形的时序波形 3.3 3.3 全加器的全加器的VHDLVHDL描述描述3.3.1 3.3.1 半加器描述半加器描述图图3-9 3-9 全加器全加器f_adderf_adder电路图及其实体模
16、块电路图及其实体模块I113aincoutcoutainbinsumcinbinsumcinf_adderor2afedu3u2u1baccosoBcosoBh_adderAh_adderA3.3 3.3 全加器的全加器的VHDLVHDL描述描述 3.3.1 3.3.1 半加器描述半加器描述图图3-10 半加器半加器h_adder电路图及其真值表电路图及其真值表 I113coasob1001010110001100cosobanotxnor2and23.3 3.3 全加器的全加器的VHDLVHDL描述描述3.3.1 3.3.1 半加器描述半加器描述【例【例3-15】LIBRARY IEEE;
17、-半加器描述半加器描述(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; ARCHITECTURE fh1 OF h_adder is BEGIN so = NOT(a XOR (NOT b) ; co = a AND b ; END ARCHITECTURE fh1; 3.3 3.3 全加器的全加器的VHDLVHDL描述描述【例【例3-16】LIBRARY IEEE;
18、 -半加器描述半加器描述(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_LOGIC_VECTOR(1 DOWNTO 0) ; -定义标准逻辑位矢量数据类型定义标准逻辑位矢量数据类型BEGIN abc so=0; co so=1; co so=1; co so=0; co NU
19、LL ; END CASE; END PROCESS; END ARCHITECTURE fh1 ; 3.3 3.3 全加器的全加器的VHDLVHDL描述描述3.3.1 3.3.1 半加器描述半加器描述【例【例3-17】 LIBRARY IEEE ; -或门逻辑描述或门逻辑描述 USE IEEE.STD_LOGIC_1164.ALL; ENTITY or2a IS PORT (a, b :IN STD_LOGIC; c : OUT STD_LOGIC ); END ENTITY or2a; ARCHITECTURE one OF or2a IS BEGIN c ain,b=bin,co=d,s
20、o=e); -例化语句例化语句 u2 : h_adder PORT MAP(a=e, b=cin, co=f,so=sum); u3 : or2a PORT MAP(a=d, b=f, c=cout); END ARCHITECTURE fd1; 3.3 3.3 全加器的全加器的VHDLVHDL描述描述3.3.2 CASE3.3.2 CASE语句语句 1. CASE语句语句 CASE ISWhen = ; . ; ;When = ; . ; ;.WHEN OTHERS = ;END CASE ; Case 语句使用注意: 1 1)选择值必须在表达式的取值范围内。)选择值必须在表达式的取值范围内
21、。 2 2)两个选择值不能重叠。)两个选择值不能重叠。 3 3)CASECASE语句执行时必须选中,且只能选中一语句执行时必须选中,且只能选中一 个选择值。个选择值。 4 4)如果没有)如果没有othersothers选择选择条件存在,则条件存在,则选择选择条条 件必须覆盖表达式所有可能的值。件必须覆盖表达式所有可能的值。 对对std_logic, std_logic_vectorstd_logic, std_logic_vector数据类型要特别注数据类型要特别注意使用意使用othersothers选择条件。选择条件。例:case 语句的误用 signal value:integer ran
22、ge 0 to 15; signal out_1 : bit ;case value is - 缺少 when条件语句end case ;case value is - 分支条件不包含2到15 when 0 = out_1 out_1 out_1 out_1 = 0 ;end case ;3.3 3.3 全加器的全加器的VHDLVHDL描述描述2. 标准逻辑矢量数据类型标准逻辑矢量数据类型 B = 01100010 ; - B(7)为为 0 B(4 DOWNTO 1) = 1101 ; - B(4)为为 1 B(7 DOWNTO 4) = A ; - B(6)等于等于 A(2) SIGNAL
23、C :BIT_VECTOR(3 DOWNTO 0); B : OUT STD_LOGIC_VECTOR(7 DOWNTO 0) ; 或或 SIGNAL A :STD_LOGIC_VECTOR(1 TO 4) 3.3 3.3 全加器的全加器的VHDLVHDL描述描述3. 并置操作符并置操作符 SIGNAL a : STD_LOGIC_VECTOR (3 DOWNTO 0) ; SIGNAL d : STD_LOGIC_VECTOR (1 DOWNTO 0) ; . a 连接端口名连接端口名,.); 例:CLKIN 4分频电路CLKOUTCLKIN 10分频电路CLKOUTDataADataBDa
24、taoutCLKOUTCLKSELCLK1CLK2p假设之前已经设计过4分频电路、10分频电路和2路复用器,它们的实体名及输入/输出端口名如下表所示:下面给出用元件例化语句实现图1电路结构的参考程序。LIBRARY IEEE;USE IEEE.Std_logic_1164.ALL;ENTITY Hierarchy_eg ISPORT( CLK: INSTD_LOGIC; sel: INSTD_LOGIC; CLKOUT: OUTSTD_LOGIC);END ;ARCHITECTURE structure OF Hierarchy_eg ISCOMPONENT Fredevider4 ISPOR
25、T(CLKIN : INSTD_LOGIC;CLKOUT : OUT STD_LOGIC);END COMPONENT Fredevider4 ;COMPONENT Fredevider10 ISPORT(CLKIN : INSTD_LOGIC;CLKOUT : OUTSTD_LOGIC);END COMPONENT Fredevider10 ;COMPONENT Mux2 ISPORT(DataA,DataB,sel: INSTD_LOGIC; Dataout : OUTSTD_LOGIC);END COMPONENT Mux2;SIGNAL CLK1,CLK2:STD_LOGIC;BEGI
26、N u1: Fredevider4 PORT MAP(CLKIN=CLK,CLKOUT=CLK1); u2: Fredevider10 PORT MAP(CLKIN=CLK,CLKOUT=CLK2); u3: Mux2 PORT MAP (DataA=CLK1,DataB=CLK2,sel=sel, Dataout=CLKOUT);END;3.4 3.4 计数器设计计数器设计 【例【例3-19】ENTITY CNT4 IS PORT ( CLK : IN BIT ; Q : BUFFER INTEGER RANGE 15 DOWNTO 0 ) ; END ; ARCHITECTURE bhv
27、OF CNT4 IS BEGIN PROCESS (CLK) BEGIN IF CLKEVENT AND CLK = 1 THEN Q = Q + 1 ; END IF; END PROCESS ;END bhv; 3.4 3.4 计数器设计计数器设计 1 1程序说明程序说明 表达式表达式Q = Q + 1Q = Q + 1的右项与左项并非处于相同的右项与左项并非处于相同的时刻内,对于时序电路,除了传输延时外,前者的时刻内,对于时序电路,除了传输延时外,前者的结果出现于当前时钟周期;后者,即左项要获得的结果出现于当前时钟周期;后者,即左项要获得当前的当前的Q + 1Q + 1,需等待下一个时钟
28、周期。,需等待下一个时钟周期。 3.4 3.4 计数器设计计数器设计 2 2数据类型说明数据类型说明 1 十进制整数十进制整数0 十进制整数十进制整数35 十进制整数十进制整数10E3 十进制整数,等于十进制整数十进制整数,等于十进制整数100016#D9# 十六进制整数,等于十六进制整数十六进制整数,等于十六进制整数D9H8#720# 八进制整数,等于八进制整数八进制整数,等于八进制整数720O2#11010010# 二进制整数,等于二进制整数二进制整数,等于二进制整数11010010B Q : BUFFER NATURAL RANGE 15 DOWNTO 0; Q : BUFFER INT
29、EGER RANGE 15 DOWNTO 0; 3.4 3.4 计数器设计计数器设计 3 3计数器的其他表述方法计数器的其他表述方法 【例【例3-20】 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_LOGIC_VECTO
30、R(3 DOWNTO 0); BEGIN 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,计数值清零,计数值清零 END IF; END IF; END IF; IF CQI = 9 THEN COUT = 1;
31、-计数大于计数大于9,输出进位信号,输出进位信号 ELSE COUT = 0; END IF; CQ = CQI; -将计数值向端口输出将计数值向端口输出 END PROCESS;END behav; 3.5 3.5 一般计数器的一般计数器的VHDLVHDL设计方法设计方法3.5.1 3.5.1 相关语法相关语法 SIGNAL d1 : STD_LOGIC_VECTOR(4 DOWNTO 0); VARIABLE a1 : STD_LOGIC_VECTOR(15 DOWNTO 0); . d1 0); a1 := (OTHERS=0) ; d1 e(3),3=e(5), OTHERS=e(1)
32、 ); f = e(1) & e(5) & e(1) & e(3) & e(1) ; 3.5 3.5 一般计数器的一般计数器的VHDLVHDL设计方法设计方法3.5.2 3.5.2 程序功能分析程序功能分析 图图3-11 例例3-21的的RTL电路(电路(Synplify综合)综合) 3.5 3.5 一般计数器的一般计数器的VHDLVHDL设计方法设计方法3.5.2 3.5.2 程序功能分析程序功能分析图图3-12 例例3-21的工作时序的工作时序 3.5 3.5 一般计数器的一般计数器的VHDLVHDL设计方法设计方法3.5.3 3.5.3 移位寄存器设计移位寄存器设计 LIBRARY IE
33、EE;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_VECTOR(7 DOWNTO 0); BEGIN IF CLKEVENT AND CLK = 1 TH
34、EN 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; 3.5 3.5 一般计数器的一般计数器的VHDLVHDL设计方法设计方法3.5.3 3.5.3 移位寄存器设计移位寄存器设计图图3-13 例例3-22的工作时序的工作时序 3.6 3.6 数据对象数据对象 3.6.1 3.6.1 常数常数 CONSTANT CON
35、STANT 常数名:数据类型常数名:数据类型 := := 表达式表达式 ; CONSTANT FBT : STD_LOGIC_VECTOR := 010110 ; - 标准位矢类型标准位矢类型 CONSTANT DATAIN : INTEGER := 15 ; - 整数类型整数类型 3.6 3.6 数据对象数据对象 3.6.2 3.6.2 变量变量 VARIABLE VARIABLE 变量名变量名 : : 数据类型数据类型 := := 初始值初始值 ; ; VARIABLE a : INTEGER RANGE 0 TO 15 ; -变量变量a定义为常数,取值范围是定义为常数,取值范围是0到到5
36、 VARIABLE d : STD_LOGIC := 1; -变量变量a定义为标准逻辑位数据类型定义为标准逻辑位数据类型,初始值是初始值是1 目标变量名目标变量名 := := 表达式表达式 ; ; VARIABLE x,y : INTEGER RANGE 15 DOWNTO 0 ; -分别定义变量分别定义变量x和和y为整数类型为整数类型VARIABLE a,b : STD_LOGIC_VECTOR(7 DOWNTO 0) ;x := 11 ; y := 2 + x ; - 运算表达式赋值,运算表达式赋值,y 也是实数变量也是实数变量a := b -b向向a赋值赋值 a(0 TO 5) := b
37、(2 TO 7) ; 3.6 3.6 数据对象数据对象 3.6.3 3.6.3 信号信号 SIGNAL SIGNAL 信号名:信号名: 数据类型数据类型 := := 初始值初始值 ; 目标信号名目标信号名 = = 表达式表达式 AFTER AFTER 时间量时间量; ; SIGNAL a,b,c,y,z: INTEGER ; .PROCESS (a,b,c)BEGIN y = a + b ; z = c a ; y = b ;END PROCESS ; 3.6 3.6 数据对象数据对象 3.6.4 3.6.4 进程中的信号赋值与变量赋值进程中的信号赋值与变量赋值 信号信号SIGNAL变量变量V
38、ARIABLE基本用法基本用法用于作为电路中的信号连线用于作为电路中的信号连线用于作为进程中局部数据存储单元用于作为进程中局部数据存储单元适用范围适用范围在整个结构体内的任何地方都能适用在整个结构体内的任何地方都能适用只能在所定义的进程中使用只能在所定义的进程中使用行为特性行为特性在进程的最后才对信号赋值在进程的最后才对信号赋值立即赋值立即赋值表表3-1 信号与变量赋值语句功能的比较信号与变量赋值语句功能的比较 3.6 3.6 数据对象数据对象 3.6.4 3.6.4 进程中的信号赋值与变量赋值进程中的信号赋值与变量赋值 【例【例3-23】 ARCHITECTURE bhv OF DFF3 I
39、S BEGIN PROCESS (CLK) VARIABLE QQ : STD_LOGIC ; BEGIN IF CLKEVENT AND CLK = 1 THEN QQ := D1 ; END IF; END PROCESS ; Q1 = QQ; END ; 3.6 3.6 数据对象数据对象 3.6.4 3.6.4 进程中的信号赋值与变量赋值进程中的信号赋值与变量赋值 【例【例3-24】ARCHITECTURE bhv OF DFF3 IS SIGNAL QQ : STD_LOGIC ; BEGIN PROCESS (CLK) BEGIN IF CLKEVENT AND CLK = 1 TH
40、EN QQ = D1 ; END IF; END PROCESS ; Q1 = QQ; END ; 3.6 3.6 数据对象数据对象 【例【例3-25】 LIBRARY IEEE ; USE IEEE.STD_LOGIC_1164.ALL ; ENTITY DFF3 IS PORT ( CLK,D1 : IN STD_LOGIC ; Q1 : OUT STD_LOGIC ) ; END ; ARCHITECTURE bhv OF DFF3 IS SIGNAL A,B : STD_LOGIC ; BEGIN PROCESS (CLK) BEGIN IF CLKEVENT AND CLK = 1
41、THEN A = D1 ; B = A ; Q1 = B ; END IF; END PROCESS ; END ; 3.6 3.6 数据对象数据对象 【例【例3-26】 LIBRARY IEEE ; USE IEEE.STD_LOGIC_1164.ALL ; ENTITY DFF3 IS PORT ( CLK,D1 : IN STD_LOGIC ; Q1 : OUT STD_LOGIC ) ; END ; ARCHITECTURE bhv OF DFF3 IS BEGIN PROCESS (CLK) VARIABLE A,B : STD_LOGIC ; BEGIN IF CLKEVENT A
42、ND CLK = 1 THEN A := D1 ; B := A ; Q1 = B ; END IF; END PROCESS ; END ; 3.6 3.6 数据对象数据对象 3.6.4 3.6.4 进程中的信号赋值与变量赋值进程中的信号赋值与变量赋值 DQDQDQDQD1Q1D1Q1CLKCLK 图图3-15 例例3-26的的RTL电路电路 图图3-16 D触发器电路触发器电路 3.6 3.6 数据对象数据对象 【例【例3-27】 SIGNAL in1,in2,e1, . : STD_LOGIC ; . PROCESS(in1,in2, . . .) VARIABLE c1,. . . :
43、 STD_LOGIC_VECTOR(3 DOWNTO 0) ; BEGIN IF in1 = 1 THEN . - 第第 1 行行 e1 = 1010 ; - 第第 2 行行 . IF in2 = 0 THEN . . . - 第第 15+n 行行 . c1 := 0011 ; - 第第 30+m 行行 . END IF; END PROCESS; muxval = 0;if (a = 1) then muxval = muxval + 1; end if;if (b = 1) then muxval q q q q null;end case;end process; END body_mu
44、x4; 【例【例3-28】LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY mux4 ISPORT (i0, i1, i2, i3, a, b : IN STD_LOGIC; q : OUT STD_LOGIC);END mux4;ARCHITECTURE body_mux4 OF mux4 ISsignal muxval : integer range 7 downto 0; BEGIN Process (i0,i1,i2,i3,a,b) beginmuxval := 0;if (a = 1) then muxval:= muxval + 1;
45、end if;if (b = 1) then muxval := muxval + 2; end if;case muxval is when 0 = q q q q null;end case;end process; END body_mux4; 【例【例3-29】LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY mux4 ISPORT (i0, i1, i2, i3, a, b : IN STD_LOGIC; q : OUT STD_LOGIC);END mux4;ARCHITECTURE body_mux4 OF mux4 IS BEGIN
46、 Process (i0,i1,i2,i3,a,b) variable muxval : integer range 7 downto 0 begin图图3-16 例例3-28的的RTL电路电路 图图3-17 例例3-29的的RTL电路电路 3.6 3.6 数据对象数据对象 3.6.4 3.6.4 进程中的信号赋值与变量赋值进程中的信号赋值与变量赋值 图图3-18 例例3-28中错误的工作时序中错误的工作时序 3.6 3.6 数据对象数据对象 3.6.4 3.6.4 进程中的信号赋值与变量赋值进程中的信号赋值与变量赋值 图图3-19 例例3-29中正确的工作时序中正确的工作时序 【例【例3-3
47、0】Library IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY SHIFT ISPORT (CLK,C0 : IN STD_LOGIC; -时钟和进位输入时钟和进位输入MD : IN STD_LOGIC_VECTOR(2 DOWNTO 0); -移位模式控制字移位模式控制字D : IN STD_LOGIC_VECTOR(7 DOWNTO 0); -待加载移位的数据待加载移位的数据QB : OUT STD_LOGIC_VECTOR(7 DOWNTO 0); -移位数据输出移位数据输出CN : OUT STD_LOGIC); -进位输出进位输出END ENTIT
48、Y;ARCHITECTURE BEHAV OF SHIFT IS SIGNAL REG : STD_LOGIC_VECTOR(7 DOWNTO 0); SIGNAL CY : STD_LOGIC ; BEGIN PROCESS (CLK,MD,C0) BEGIN IF CLKEVENT AND CLK = 1 THEN 接下页接下页 CASE MD IS WHEN 001 = REG(0) = C0 ; REG(7 DOWNTO 1) = REG(6 DOWNTO 0); CY REG(0) = REG(7); REG(7 DOWNTO 1) REG(7) = REG(0); REG(6 DO
49、WNTO 0) REG(7) = C0 ; REG(6 DOWNTO 0) = REG(7 DOWNTO 1); CY REG(7 DOWNTO 0) REG = REG ; CY = CY ; -保持保持END CASE; END IF; END PROCESS;QB(7 DOWNTO 0) = REG(7 DOWNTO 0); CN = CY; -移位后输出移位后输出END BEHAV; 3.6 3.6 数据对象数据对象 3.6.4 3.6.4 进程中的信号赋值与变量赋值进程中的信号赋值与变量赋值 图图3-20 例例3-30中带进位循环左移仿真波形(中带进位循环左移仿真波形(MD=001)
50、 3.10 3.10 双向和三态电路信号赋值双向和三态电路信号赋值 【例【例3-36】LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY tri_s IS port ( enable : IN STD_LOGIC; datain : IN STD_LOGIC_VECTOR(7 DOWNTO 0); dataout : OUT STD_LOGIC_VECTOR(7 DOWNTO 0) );END tri_s ; ARCHITECTURE bhv OF tri_s ISBEGINPROCESS (enable, datain) BEGIN IF enab
51、le = 1 THEN dataout = datain ; ELSE dataout =ZZZZZZZZ ; END IF ;END PROCESS;END bhv; 3.10.1 3.10.1 三态门设计三态门设计 3.10 3.10 双向和三态电路信号赋值双向和三态电路信号赋值 3.10.1 3.10.1 三态门设计三态门设计 图图3-21 8位位3态控制门电路态控制门电路 3.10 3.10 双向和三态电路信号赋值双向和三态电路信号赋值 【例【例3-36】Library ieee;Use ieee.std_logic_1164.all;entity tri_state isport (
52、control : in std_logic; in1: in std_logic_vector(7 downto 0); q : inout std_logic_vector(7 downto 0); x : out std_logic_vector(7 downto 0);End tri_state;Architecture body_tri of tri_state isbegin process(control,q,in1) begin if (control = 0) then x = q ; else q = in1; x=ZZZZZZZZ ; end if; end proces
53、s;end body_tri; 3.10 3.10 双向和三态电路信号赋值双向和三态电路信号赋值 【例【例3-37】(以上部分同上例以上部分同上例)process(control,q,in1)beginif (control=0) then x = q ; q = ZZZZZZZZ; else q = in1; x =ZZZZZZZZ; end if;end process;end body_tri; 3.10.2 3.10.2 双向端口设计双向端口设计 3.10 3.10 双向和三态电路信号赋值双向和三态电路信号赋值 3.10.2 3.10.2 双向端口设计双向端口设计 图图3-23 例例3
54、-36的仿真波形图的仿真波形图 3.10 3.10 双向和三态电路信号赋值双向和三态电路信号赋值 3.10.2 3.10.2 双向端口设计双向端口设计 图图3-24 例例3-37的综合结果的综合结果 3.10 3.10 双向和三态电路信号赋值双向和三态电路信号赋值 3.10.2 3.10.2 双向端口设计双向端口设计 图图3-25 例例3-37的仿真波形图的仿真波形图 3.10 3.10 双向和三态电路信号赋值双向和三态电路信号赋值 3.10.3 3.10.3 三态总线电路设计三态总线电路设计 【例【例3-38】 LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL
55、;ENTITY tristate2 IS port ( input3, input2, input1, input0 : IN STD_LOGIC_VECTOR (7 DOWNTO 0); enable : IN STD_LOGIC_VECTOR(1 DOWNTO 0); output : OUT STD_LOGIC_VECTOR (7 DOWNTO 0);END tristate2 ; ARCHITECTURE multiple_drivers OF tristate2 ISBEGINPROCESS(enable,input3, input2, input1, input0 ) BEGIN
56、IF enable = 00 THEN output = input3 ; ELSE output Z); END IF ; IF enable = 01 THEN output = input2 ; ELSE output Z); END IF ; IF enable = 10 THEN output = input1 ; ELSE output Z); END IF ; IF enable = 11 THEN output = input0 ; ELSE output Z); END IF ;END PROCESS;END multiple_drivers; 3.10 3.10 双向和三态
57、电路信号赋值双向和三态电路信号赋值 3.10.3 3.10.3 三态总线电路设计三态总线电路设计 【例【例3-39】library ieee;use ieee.std_logic_1164.all;entity tri2 isport (ctl : in std_logic_vector(1 downto 0); datain1, datain2,datain3, datain4 : in std_logic_vector(7 downto 0); q : out std_logic_vector(7 downto 0) );end tri2;architecture body_tri of
58、tri2 isbegin q Z) ; q Z) ; q Z) ; q Z) ;end body_tri; 3.10 3.10 双向和三态电路信号赋值双向和三态电路信号赋值 3.10.3 3.10.3 三态总线电路设计三态总线电路设计 图图3-26 例例3-38错误的综合结果错误的综合结果 3.10 3.10 双向和三态电路信号赋值双向和三态电路信号赋值 图图3-27 例例3-39正确的综合结果正确的综合结果 3.11 3.11 仿真仿真延时延时 3.11.1 3.11.1 固有延时固有延时 z = x XOR y AFTER 5ns ; z = x XOR y ; B = A AFTER 2
59、0ns ;-固有延时模型固有延时模型 3.11 3.11 仿真仿真延时延时 3.11.2 3.11.2 传输延时传输延时 B = TRANSPORT A AFTER 20 ns;- 传输延时模型传输延时模型 I116I117I113I118I119I120BBAA40ns302010040ns3020100图图3-28 固有延时输入输出波形固有延时输入输出波形 图图3-29 传输延时输入输出波形传输延时输入输出波形 3.11 3.11 仿真仿真延时延时 3.11.3 3.11.3 仿真仿真 VHDL仿真器和综合器将自动为系统中的信号赋值仿真器和综合器将自动为系统中的信号赋值配置一足够小而又能满
60、足逻辑排序的延时量,即仿真配置一足够小而又能满足逻辑排序的延时量,即仿真软件的最小分辩时间,这个延时量就称为仿真软件的最小分辩时间,这个延时量就称为仿真 (Simulation Delta),或称),或称 延时,从而使并行语句延时,从而使并行语句和顺序语句中的并列赋值逻辑得以正确执行。由此可和顺序语句中的并列赋值逻辑得以正确执行。由此可见,在行为仿真、功能仿真乃至综合中,引入见,在行为仿真、功能仿真乃至综合中,引入 延时延时是必需的。仿真中,是必需的。仿真中, 延时的引入由延时的引入由EDA工具自动完工具自动完成,无需设计者介入。成,无需设计者介入。 3.7 IF3.7 IF语句概述语句概述
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年劳动法知识竞赛题库(附答案)
- 部编版四年级上册语文11.《蟋蟀的住宅》同步练习(含答案)
- 上海市人民医院宫腔镜检查术操作资格分级认证
- 2025年电气试验作业(特种作业)考试题库(带答案)
- 唐山市中医院精神科安全管理考核
- 廊坊市人民医院护理操作技能培训考核
- 鄂尔多斯市人民医院内瘘血栓处理考核
- 鸡西市中医院信息化建设中长期规划编制考核
- 2025年银行从业资格考试试题含答案
- 2025年继续教育公需课必修课试题(含答案)
- 测绘设备基础知识培训课件
- 2025内蒙古国贸集团招聘11人考试模拟试题及答案解析
- 海南中考试卷历史及答案
- 2025至2030全球及中国麦芽糖醇粉行业项目调研及市场前景预测评估报告
- 蜀道集团笔试试题及答案
- 浙江精诚联盟2025-2026学年高二上学期10月联考数学(含答案)
- 医院物价员培训知识课件
- 2025年贵州省遵义市辅警考试真题及答案
- 电动葫芦安全操作培训
- 信息运维基础知识培训课件
- 防暴雪安全培训记录课件
评论
0/150
提交评论