EDA 3章 VHDL基础课件_第1页
EDA 3章 VHDL基础课件_第2页
EDA 3章 VHDL基础课件_第3页
EDA 3章 VHDL基础课件_第4页
EDA 3章 VHDL基础课件_第5页
已阅读5页,还剩90页未读 继续免费阅读

下载本文档

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

文档简介

1、 第第3 3章章x康芯科技康芯科技x康芯科技康芯科技3.1 vhdl 3.1 vhdl 基本语法基本语法 3.1.1 3.1.1 组合电路描述组合电路描述图图3-1 mux21a实体实体 图图3-2 mux21a结构体结构体 x康芯科技康芯科技3.1 vhdl 3.1 vhdl 基本语法基本语法3.1.1 3.1.1 组合电路描述组合电路描述【例【例3-1】entity mux21a is port ( a, b : in bit; s : in bit; y : out bit );end entity mux21a;architecture one of mux21a is begin y

2、 = a when s = 0 else b ;end architecture one ; x康芯科技康芯科技3.1 vhdl 3.1 vhdl 基本语法基本语法3.1.1 3.1.1 组合电路组合电路描述描述【例【例3-2】 entity mux21a is port ( a, b, 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 and s ; y = d or e ; end archite

3、cture one ; x康芯科技康芯科技3.1 vhdl 3.1 vhdl 基本语法基本语法【例【例3-3】 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 ; else y = b ;end if; end process;end architecture one ; 3.1.1 3.1.1 组合电路组合电路描述描述x康芯科技康芯科技3.1

4、 vhdl 3.1 vhdl 基本语法基本语法图图3-3 mux21a功能时序波形功能时序波形 3.1.1 3.1.1 组合电路组合电路描述描述x康芯科技康芯科技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 ); end entity e_name; 1. 1. 实体表达实体表达 x康芯科技康芯科技3.1 vhdl 3.1 vhdl 基本语法基本语法2. 2. 实

5、体名实体名 3. 3. 端口语句和端口信号名端口语句和端口信号名 4. 4. 端口模式端口模式 “in”、“ “out”、“ “inout”、“ “buffer” 5. 5. 数据类型数据类型 x康芯科技康芯科技3.1 vhdl 3.1 vhdl 基本语法基本语法6. 6. 结构体表达结构体表达 【例【例3-53-5】architecture arch_name of e_name is 说说明明语语句句begin (功能描述功能描述语语句句)end architecture arch_name ; x康芯科技康芯科技3.1 vhdl 3.1 vhdl 基本语法基本语法7. 7. 赋值符号和数

6、据比较符号赋值符号和数据比较符号 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(取反取反) x康芯科技康芯科技3.1 vhdl 3.1 vhdl 基本语法基本语法9. 9. 条件语句条件语句 10. when_else10. when_else条件信号赋值语句条件信号赋值语句 赋值目标

7、赋值目标 = = 表达式表达式 when when 赋值条件赋值条件 elseelse表达式表达式 when when 赋值条件赋值条件 elseelse . . 表达式表达式 ; z = a when p1 = 1 else b when p2 = 1 else c ; x康芯科技康芯科技3.1 vhdl 3.1 vhdl 基本语法基本语法11. 11. 进程语句和顺序语句进程语句和顺序语句 12. 12. 文件取名和存盘文件取名和存盘 if_then_else_end if; process. end process “.vhd” adder_f.vhd x康芯科技康芯科技3.2 3.2

8、时序电路描述时序电路描述 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 ; -类似于在芯片内部定义一个数据的暂存节点类似于在芯片内部定义一个数据的暂存节点 begin process (clk,q1) begin if

9、clkevent and clk = 1 then q1 = d ; end if; end process ;q = q1 ; -将内部的暂存数据向端口输出(双横线将内部的暂存数据向端口输出(双横线-是注释符号)是注释符号) end bhv; 图图3-4 d触发器触发器 x康芯科技康芯科技3.2 3.2 时序电路描述时序电路描述 3.2.2 3.2.2 时序描述时序描述vhdlvhdl规则规则 1. 1. 标准逻辑位数据类型标准逻辑位数据类型 std_logic std_logic bitbit数据类型定义:数据类型定义: type bit is(0,1); -只有两种取值只有两种取值std

10、_logicstd_logic数据类型定义:数据类型定义: type std_logic is (u,x,0,1,z,w,l,h,-); -有有9种取值种取值 x康芯科技康芯科技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 ; x康芯科技康芯科技3.2 3.2 时序电路描述时序电路描述 3. 3. 信号定义和数据对象信号定义和数

11、据对象 eventevent 4. 4. 上升沿检测表式和信号属性函数上升沿检测表式和信号属性函数event event 5. 5. 不完整条件语句与时序电路不完整条件语句与时序电路 x康芯科技康芯科技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 th

12、en q1 = 1 ; else q1 = 0 ; end if; . x康芯科技康芯科技3.2 3.2 时序电路描述时序电路描述 3.2.3 3.2.3 时序电路的不同表述时序电路的不同表述 【例【例3-9】.process (clk) beginif clkevent and (clk=1) and (clklast_value=0) then q = d ; -确保确保clk的变化是一次上升沿的跳变的变化是一次上升沿的跳变 end if; end process ;【例【例3-10】.process (clk) beginif clk=1 and clklast_value=0 -同例同

13、例3-9 then q = d ; end if; end process ; x康芯科技康芯科技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) - 必须打开必须打开

14、std_logic_1164程序包程序包 then q1 = d ; end if; end process ; q = q1 ; -在此,赋值语句可以放在进程外,作为并行赋值语句在此,赋值语句可以放在进程外,作为并行赋值语句 end ; x康芯科技康芯科技3.2 3.2 时序电路描述时序电路描述 3.2.3 3.2.3 实现时序电路的不同表述实现时序电路的不同表述 【例【例3-12】.process begin wait until clk = 1 ; -利用利用wait语语句句 q = d ;end process; x康芯科技康芯科技3.2 3.2 时序电路描述时序电路描述 【例【例3-

15、13】.process (clk) begin if clk = 1 then q = d ; -利用利用进进程的程的启动启动特性特性产产生生对对clk的的边边沿沿检测检测 end if; end process 图图3-7 例例3-13的时序波形的时序波形 x康芯科技康芯科技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的时序波形的时序波形 x康芯科技康芯科技3.3 3.3

16、全加器的全加器的vhdlvhdl描述描述3.3.1 3.3.1 半加器描述半加器描述图图3-9 3-9 全加器全加器f_adderf_adder电路图及其实体模块电路图及其实体模块i113aincoutcoutainbinsumcinbinsumcinf_adderor2afedu3u2u1baccosobcosobh_adderah_adderax康芯科技康芯科技3.3 3.3 全加器的全加器的vhdlvhdl描述描述 3.3.1 3.3.1 半加器描述半加器描述图图3-10 半加器半加器h_adder电路图及其真值表电路图及其真值表 i113coasob1001010110001100co

17、sobanotxnor2and2x康芯科技康芯科技3.3 3.3 全加器的全加器的vhdlvhdl描述描述3.3.1 3.3.1 半加器描述半加器描述【例【例3-15】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; architecture fh1 of h_adder is begin so = not(a xor

18、 (not b) ; co = a and b ; end architecture fh1; x康芯科技康芯科技3.3 3.3 全加器的全加器的vhdlvhdl描述描述【例【例3-16】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 :

19、 std_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 ; x康芯科技康芯科技3.3 3.3 全加器的全加器的vhdlvhdl描述描述3.3.1 3.3.1 半加器描述半加器描述【例【例3-17】 library ieee ; -或门逻辑描述或门逻辑描述 use ieee.std_logic_1164.all; entity or2a is

20、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,so=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; x康芯科技康芯科技3.3 3.3 全加器的全加器的vhdlvhdl描述描述3.3.2 case3.3.2 case语句语

21、句 1. case语句语句 case iswhen = ; . ; ;when = ; . ; ;.when others = ;end case ; x康芯科技康芯科技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 c :bit_vector(3 downto 0); b : out std_logic_vector(7 downto

22、 0) ; 或或 signal a :std_logic_vector(1 to 4) x康芯科技康芯科技3.3 3.3 全加器的全加器的vhdlvhdl描述描述3. 并置操作符并置操作符 signal a : std_logic_vector (3 downto 0) ;signal d : std_logic_vector (1 downto 0) ;.a 连接端口名连接端口名,.); x康芯科技康芯科技3.4 3.4 计数器设计计数器设计 【例【例3-19】entity cnt4 is port ( clk : in bit ; q : buffer integer range 15 d

23、ownto 0 ) ; end ; architecture bhv of cnt4 is begin process (clk) begin if clkevent and clk = 1 then q = q + 1 ; end if; end process ;end bhv; x康芯科技康芯科技3.4 3.4 计数器设计计数器设计 1 1程序说明程序说明 表式表式q = q + 1q = q + 1的右项与左项并非处于相同的的右项与左项并非处于相同的时刻内,对于时序电路,除了传输延时外,前者的时刻内,对于时序电路,除了传输延时外,前者的结果出现于当前时钟周期;后者,即左项要获得当结果出

24、现于当前时钟周期;后者,即左项要获得当前的前的q + 1q + 1,需等待下一个时钟周期。,需等待下一个时钟周期。 x康芯科技康芯科技3.4 3.4 计数器设计计数器设计 2 2数据类型说明数据类型说明 1 十进制整数十进制整数0 十进制整数十进制整数35 十进制整数十进制整数10e3 十进制整数,等于十进制整数十进制整数,等于十进制整数100016#d9# 十六进制整数,等于十六进制整数十六进制整数,等于十六进制整数d9h8#720# 八进制整数,等于八进制整数八进制整数,等于八进制整数720o2#11010010# 二进制整数,等于二进制整数二进制整数,等于二进制整数11010010b q

25、 : buffer natural range 15 downto 0; q : buffer integer range 15 downto 0; x康芯科技康芯科技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) ) ;

26、end ; architecture bhv of cnt4 issignal q1 : std_logic_vector(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,计数

27、值清零,计数值清零 end if; end if; end if; if cqi = 9 then cout = 1; -计数大于计数大于9,输出进位信号,输出进位信号 else cout = 0; end if; cq = cqi; -将计数值向端口输出将计数值向端口输出 end process;end behav; x康芯科技康芯科技3.5 3.5 一般计数器的一般计数器的vhdlvhdl设计方法设计方法3.5.1 3.5.1 相关语法相关语法 signal d1 : std_logic_vector(4 downto 0); variable a1 : std_logic_vector(

28、15 downto 0); . d1 0); a1 := (others=0) ; d1 e(3),3=e(5), others=e(1) ); f = e(1) & e(5) & e(1) & e(3) & e(1) ; x康芯科技康芯科技3.5 3.5 一般计数器的一般计数器的vhdlvhdl设计方法设计方法3.5.2 3.5.2 程序功能分析程序功能分析 图图3-11 例例3-21的的rtl电路(电路(synplify综合)综合) x康芯科技康芯科技3.5 3.5 一般计数器的一般计数器的vhdlvhdl设计方法设计方法3.5.2 3.5.2 程序功能分析

29、程序功能分析图图3-12 例例3-21的工作时序的工作时序 x康芯科技康芯科技3.5 3.5 一般计数器的一般计数器的vhdlvhdl设计方法设计方法3.5.3 3.5.3 移位寄存器设计移位寄存器设计 【例【例3-22】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 b

30、ehav of shfrt is begin process (clk, load) variable reg8 : std_logic_vector(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; x康芯科技康芯科技3.5

31、 3.5 一般计数器的一般计数器的vhdlvhdl设计方法设计方法3.5.3 3.5.3 移位寄存器设计移位寄存器设计图图3-13 例例3-22的工作时序的工作时序 x康芯科技康芯科技3.6 3.6 数据对象数据对象 3.6.1 3.6.1 常数常数 constant constant 常数名:数据类型常数名:数据类型 := := 表达式表达式 ; constant fbt : std_logic_vector := 010110 ; - 标准位矢类型标准位矢类型 constant datain : integer := 15 ; - 整数类型整数类型 x康芯科技康芯科技3.6 3.6 数据对

32、象数据对象 3.6.2 3.6.2 变量变量 variable variable 变量名变量名 : : 数据类型数据类型 := := 初始值初始值 ; ; variable a : integer range 0 to 15 ; -变量变量a定义为常数,取值范围是定义为常数,取值范围是0到到5variable d : std_logic := 1; -变量变量a定义为标准逻辑位数据类型定义为标准逻辑位数据类型,初始值是初始值是1 目标变量名目标变量名 := := 表达式表达式 ; ; variable x,y : integer range 15 downto 0 ;-分别定义变量分别定义变量

33、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(2 to 7) ; x康芯科技康芯科技3.6 3.6 数据对象数据对象 3.6.3 3.6.3 信号信号 signal signal 信号名:信号名: 数据类型数据类型 := := 初始值初始值 ; 目标信号名目标信号名 = = 表达式表达式 after after 时间量时间量; ; signal a,b

34、,c,y,z: integer ; .process (a,b,c)begin y = a + b ; z = c a ; y = b ;end process ; x康芯科技康芯科技3.6 3.6 数据对象数据对象 3.6.4 3.6.4 进程中的信号赋值与变量赋值进程中的信号赋值与变量赋值 信号信号signal变量变量variable基本用法基本用法用于作为电路中的信号连线用于作为电路中的信号连线用于作为进程中局部数据存储单元用于作为进程中局部数据存储单元适用范围适用范围在整个结构体内的任何地方都能适用在整个结构体内的任何地方都能适用只能在所定义的进程中使用只能在所定义的进程中使用行为特性

35、行为特性在进程的最后才对信号赋值在进程的最后才对信号赋值立即赋值立即赋值表表3-1 信号与变量赋值语句功能的比较信号与变量赋值语句功能的比较 x康芯科技康芯科技3.6 3.6 数据对象数据对象 3.6.4 3.6.4 进程中的信号赋值与变量赋值进程中的信号赋值与变量赋值 【例【例3-23】 architecture bhv of dff3 is begin process (clk) variable qq : std_logic ; begin if clkevent and clk = 1 then qq := d1 ; end if; end process ; q1 = qq; end

36、 ; x康芯科技康芯科技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 then qq = d1 ; end if; end process ; q1 = qq; end ; x康芯科技康芯科技3.6 3.6 数据对象数据对象 【例【例3-25】 library ieee ; use ieee.std_logic

37、_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 then a = d1 ; b = a ; q1 = b ;end if; end process ; end ; x康芯科技康芯科技3.6 3.6 数据对象数据对象 【例【例3-26】library ieee ; us

38、e 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 and clk = 1 then a := d1 ; b := a ; q1 = b ; end if; end process ; end ; x康芯科技康芯科技3.6 3.6 数据对象数据对象 3.6.4

39、 3.6.4 进程中的信号赋值与变量赋值进程中的信号赋值与变量赋值 dqdqdqdqd1q1d1q1clkclk 图图3-15 例例3-26的的rtl电路电路 图图3-16 d触发器电路触发器电路 x康芯科技康芯科技3.6 3.6 数据对象数据对象 【例【例3-27】 signal in1,in2,e1, . : std_logic ; . process(in1,in2, . . .) variable c1,. . . : std_logic_vector(3 downto 0) ; begin if in1 = 1 then . - 第第 1 行行 e1 = 1010 ; - 第第 2

40、行行 . if in2 = 0 then . . . - 第第 15+n 行行 . c1 := 0011 ; - 第第 30+m 行行 . end if; end process; x康芯科技康芯科技【例【例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

41、downto 0;beginprocess(i0,i1,i2,i3,a,b)begin 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_mux4; x康芯科技康芯科技【例【例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_

42、logic);end mux4;architecture body_mux4 of mux4 isbeginprocess(i0,i1,i2,i3,a,b)variable muxval : integer range 7 downto 0;begin muxval := 0;if (a = 1) then muxval := muxval + 1; 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_mux

43、4; x康芯科技康芯科技图图3-16 例例3-28的的rtl电路电路 x康芯科技康芯科技图图3-17 例例3-29的的rtl电路电路 x康芯科技康芯科技3.6 3.6 数据对象数据对象 3.6.4 3.6.4 进程中的信号赋值与变量赋值进程中的信号赋值与变量赋值 图图3-18 例例3-28中错误的工作时序中错误的工作时序 x康芯科技康芯科技3.6 3.6 数据对象数据对象 3.6.4 3.6.4 进程中的信号赋值与变量赋值进程中的信号赋值与变量赋值 图图3-19 例例3-29中正确的工作时序中正确的工作时序 x康芯科技康芯科技【例【例3-30】library ieee;use ieee.std

44、_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 entity;architecture behav of shi

45、ft 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 接下页接下页 x康芯科技康芯科技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 downto 0) reg(7) = c0

46、 ; 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; x康芯科技康芯科技3.6 3.6 数据对象数据对象 3.6.4 3.6.4 进程中的信号赋值与变量赋值进程中的信号赋值与变量赋值 图图3-20 例例3-30中带进位循环左移仿真波形(中带进位循环左移仿真波形(md=001) x康芯科技康芯科

47、技3.7 if3.7 if语句概述语句概述 if 条件句条件句 then 顺序语句顺序语句 end if ; 1if 条件句条件句 then 顺序语句顺序语句elsif 条件句条件句 then顺序语句顺序语句.else 顺序语句顺序语句end if 4if 条件句条件句 then 顺序语句顺序语句 else 顺序语句顺序语句 end if ; 2if 条件句条件句 then if 条件句条件句 then . end if end if 3x康芯科技康芯科技【例【例3-31】 library ieee; use ieee.std_logic_1164.all; entity control_st

48、mts isport (a, b, c: in boolean; output: out boolean); end control_stmts; architecture example of control_stmts is begin process (a, b, c) variable n: boolean; begin if a then n := b; else n := c; end if; output = n; end process; end example; x康芯科技康芯科技【例【例3-32】library ieee;use ieee.std_logic_1164.al

49、l;entity coder is port ( din : in std_logic_vector(0 to 7); output : out std_logic_vector(0 to 2) );end coder;architecture behav of coder is signal sint : std_logic_vector(4 downto 0); begin process (din) begin if (din(7)=0) then output = 000 ; elsif (din(6)=0) then output = 100 ; elsif (din(5)=0) t

50、hen output = 010 ; elsif (din(4)=0) then output = 110 ; elsif (din(3)=0) then output = 001 ; elsif (din(2)=0) then output = 101 ; elsif (din(1)=0) then output = 011 ; else output so so so so so null ; end case; end process; x康芯科技康芯科技3.8 3.8 进程语句归纳进程语句归纳 3. 进程必须由敏感信号的变化来启动进程必须由敏感信号的变化来启动 4. 进程语句本身是并行

51、语句进程语句本身是并行语句 3.8.3 3.8.3 进程要点进程要点 5. 信号是多个进程间的通信线信号是多个进程间的通信线 6. 一个进程中只允许描述对应于一个时钟信号的同步时序逻辑一个进程中只允许描述对应于一个时钟信号的同步时序逻辑 x康芯科技康芯科技3.8 3.8 进程语句归纳进程语句归纳 【例【例3-33】entity mul isport (a, b, c, selx, sely : in bit; data_out : out bit );end mul;architecture ex of mul is signal temp : bit;beginp_a : process (

52、a, b, selx) begin if (selx = 0) then temp = a; else temp = b; end if; end process p_a;p_b: process(temp, c, sely) begin if (sely=0) then data_out = temp; else data_out = c; end if; end process p_b;end ex; x康芯科技康芯科技3.9 3.9 并行赋值语句概述并行赋值语句概述 【例【例3-34】signal seiect : integer range 15 downto 0;. . .selec

53、t = 0 when s0=0 and s1=0 else1 when s0=1 and s1=0 else2 when s0=0 and s1=1 else3 ;x = a when select=0 elseb when select=1 elsec when select=2 else d ; x康芯科技康芯科技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

54、 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 enable = 1 then dataout = datain ; else dataout =zzzzzzzz ; end if ;end process;end bhv; 3.10.1 3.10.1 三态门设计三态门设计 x康芯科技康芯科技3.10 3.10 双向和三态电路信号赋值双向和

55、三态电路信号赋值 3.10.1 3.10.1 三态门设计三态门设计 图图3-21 8位位3态控制门电路态控制门电路 x康芯科技康芯科技3.10 3.10 双向和三态电路信号赋值双向和三态电路信号赋值 【例【例3-36】library ieee;use ieee.std_logic_1164.all;entity tri_state isport (control : in std_logic; in1: in std_logic_vector(7 downto 0); q : inout std_logic_vector(7 downto 0); x : out std_logic_vecto

56、r(7 downto 0);end tri_state;architecture body_tri of tri_state isbeginprocess(control,q,in1)beginif (control = 0) then x = q ; else q = in1; x=zzzzzzzz ; end if;end process;end body_tri; 3.10.2 3.10.2 双向端口设计双向端口设计 x康芯科技康芯科技3.10 3.10 双向和三态电路信号赋值双向和三态电路信号赋值 【例【例3-37】(以上部分同上例以上部分同上例)process(control,q,i

57、n1)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 双向端口设计双向端口设计 x康芯科技康芯科技3.10 3.10 双向和三态电路信号赋值双向和三态电路信号赋值 3.10.2 3.10.2 双向端口设计双向端口设计 图图3-23 例例3-36的仿真波形图的仿真波形图 x康芯科技康芯科技3.10 3.10 双向和三态电路信号赋值双向和三态电路信号赋值 3.10.2 3.10.2 双向端口设计双向端口设计

58、 图图3-24 例例3-37的综合结果的综合结果 x康芯科技康芯科技3.10 3.10 双向和三态电路信号赋值双向和三态电路信号赋值 3.10.2 3.10.2 双向端口设计双向端口设计 图图3-25 例例3-37的仿真波形图的仿真波形图 x康芯科技康芯科技3.10 3.10 双向和三态电路信号赋值双向和三态电路信号赋值 3.10.3 3.10.3 三态总线电路设计三态总线电路设计 【例【例3-38】 library ieee;use ieee.std_logic_1164.all;entity tristate2 is port ( input3, input2, input1, input

59、0 : 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 if enable = 00 then output = input3 ; else output z); end

60、 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; x康芯科技康芯科技3.10 3.10 双向和三态电路信号赋值双向和三态电路信号赋值 3.10.3 3.10.3 三态总线电路设计三态总线电路设计 【例【例3-39】libra

温馨提示

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

评论

0/150

提交评论