第 3 章 vhdl 硬件描述语言 ( 一 )

45
YANGTZE NORMAL UNIVERSITY 第 3 第 VHDL 第第第第第第 ( )

Upload: king

Post on 13-Jan-2016

107 views

Category:

Documents


1 download

DESCRIPTION

第 3 章 VHDL 硬件描述语言 ( 一 ). VHDL:V ery high speed integrated H ardware D escription L anguage Why does VHDL counts? VHDL is what you write is what functional you get - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: 第 3 章  VHDL 硬件描述语言 ( 一 )

YANGTZE NORMAL UNIVERSITY

第 3 章 VHDL硬件描述语言( 一 )

Page 2: 第 3 章  VHDL 硬件描述语言 ( 一 )

YANGTZE NORMAL UNIVERSITY

VHDL:Very high speed integrated Hardware Description Language

Why does VHDL counts? VHDL is what you write is what functional you get

“ tell me how your circuit should behave and the VHDL compiler will give you the hardware that does the job”,but the designer can not control how the circuit implement;

VHDL is a portable language because the same code can be applied to Device manufactured by Company A or Company B ;

Easy to Modify.

Graphic is what you draw is what you get“ tell me what hardware you want and I will give it to

you”

Page 3: 第 3 章  VHDL 硬件描述语言 ( 一 )

YANGTZE NORMAL UNIVERSITY

Such as Multiplexer, Latch Adder Counter

and more…

Let’s get started with some examples

Page 4: 第 3 章  VHDL 硬件描述语言 ( 一 )

YANGTZE NORMAL UNIVERSITY

【例 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 <= a WHEN s = '0' ELSE b ;END ARCHITECTURE one ;

3.1.1 2 选 1 多路选择器的 VHDL描述

3.1 多路选择器 VHDL 描述

图 3-1 mux21a 实体

图 3-2 mux21a 结构体

实体

结构体

Page 5: 第 3 章  VHDL 硬件描述语言 ( 一 )

YANGTZE NORMAL UNIVERSITY

3.1.1 2 选 1 多路选择器的 VHDL 描述【例 3-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 AND s ;y <= d OR e ; END ARCHITECTURE one ;

【例 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 ;

Page 6: 第 3 章  VHDL 硬件描述语言 ( 一 )

YANGTZE NORMAL UNIVERSITY

3.1.1 2 选 1 多路选择器的 VHDL 描述

图 3-3 mux21a 功能时序波形

Page 7: 第 3 章  VHDL 硬件描述语言 ( 一 )

YANGTZE NORMAL UNIVERSITY

3.1.2 VHDL 相关语句说明

1. 实体表达 【例 3-3】ENTITY e_name IS PORT ( p_name : port_m data_type; ... p_namei : port_mi data_type );END ENTITY e_name;

或:

【例 3-6】ENTITY e_name IS PORT ( p_name : port_m data_type; ... p_namei : port_mi data_type );END e_name;

Page 8: 第 3 章  VHDL 硬件描述语言 ( 一 )

YANGTZE NORMAL UNIVERSITY

3.1.2 VHDL 相关语句说明

2. 实体名 :如用 counter4b,adder8b。不用or2,and2等。3. PORT语句和端口信号名4. 端口模式

INOUT INOUT BUFFER

5. 数据类型 BIT(如 INTEGER BOOLEAN STD_LOGIC BIT等)

Page 9: 第 3 章  VHDL 硬件描述语言 ( 一 )

YANGTZE NORMAL UNIVERSITY

3.1.2 VHDL 相关语句说明

6. 结构体表达 【例 3-7】ARCHITECTURE arch_name OF e_name IS ( 说明语句 )BEGIN ( 功能描述语句 )END ARCHITECTURE arch_name ;或:【例 3-8】ARCHITECTURE arch_name OF e_name IS ( 说明语句 )BEGIN ( 功能描述语句 )END arch_name ;

上下两式的区别是 IEEE93/87 标准不同。前者为IEEE VHDL’93 标准、后者是 IEEE VHDL’87 标准。

Page 10: 第 3 章  VHDL 硬件描述语言 ( 一 )

YANGTZE NORMAL UNIVERSITY

7. 信号传输 (赋值 )符号和数据比较符号

3.1.2 VHDL 相关语句说明

【例 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 <= a WHEN s = '0' ELSE b ;END ARCHITECTURE one ;

s = ‘0’ 中“ =” 没有赋值的含义,只是一种数据比较符号。 boolean 类型,取值分别是: true和false 。

Page 11: 第 3 章  VHDL 硬件描述语言 ( 一 )

YANGTZE NORMAL UNIVERSITY

3.1.2 VHDL 相关语句说明

8. 逻辑操作符AND、 OR、 NOT9. IF_THEN条件语句

【例 3-4】 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 ;

Page 12: 第 3 章  VHDL 硬件描述语言 ( 一 )

YANGTZE NORMAL UNIVERSITY

3.1.2 VHDL 相关语句说明

10. WHEN_ELSE条件信号赋值语句

赋值目标 <= 表达式 WHEN 赋值条件 ELSE 表达式 WHEN 赋值条件 ELSE ... 表达式 ;

Z <= a WHEN p1 = ‘1’ ELSE b WHEN p2 = ‘1’ ELSE c ;

Page 13: 第 3 章  VHDL 硬件描述语言 ( 一 )

YANGTZE NORMAL UNIVERSITY

11. PROCESS进程语句和顺序语句

12. 文件取名和存盘

3.1.2 VHDL 相关语句说明

【例 3-4】 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 ;

Page 14: 第 3 章  VHDL 硬件描述语言 ( 一 )

YANGTZE NORMAL UNIVERSITY

3.1.3 VHDL 设计的基本概念和语句小节

数据类型数据类型 信号赋值符信号赋值符 条件比较符条件比较符 延时 延时

实体实体 结构体结构体 端口定义端口定义 端口模式端口模式

逻辑操作符逻辑操作符 IF条件语句IF条件语句 并行条件语句并行条件语句 进程语句进程语句

顺序语句顺序语句 并行语句并行语句 文件取名文件取名 文件存盘文件存盘

Page 15: 第 3 章  VHDL 硬件描述语言 ( 一 )

YANGTZE NORMAL UNIVERSITY3.2 寄存器描述及其 VHDL 语言现象3.2.1 D 触发器的 VHDL 描述

【例 3-9】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) BEGIN IF CLK'EVENT AND CLK = '1' THEN Q1 <= D ; END IF; Q <= Q1 ; -- 将内部的暂存数据向端口输出 END PROCESS ; END bhv;

D 触发器

Page 16: 第 3 章  VHDL 硬件描述语言 ( 一 )

YANGTZE NORMAL UNIVERSITY比较用 3 种不同语句的 D 触发器 VHDL 程

序Entity test1 isport (clk, d : in bit; q : out bit);end test1;architecture body of test1 issignal q1 : bit ;beginprocess (clk)begin if clk='1' AND clk’last_value='0' then q1 <= d; end if; q <= q1 ;end process;end test1_body;

LIBRARY IEEE;USE IEEE.std_logic_1164.all;Entity test1 isport (clk, d : in bit; q : out bit);end test1;architecture body of test1 isbeginprocess (clk,d)begin if rising_edge(clk) then q <= d; end if;end process;end test1_body;

Entity test1 isport (clk : in bit; d : in bit; q : out bit);end test1;architecture body of test1 issignal q1 : bit ;beginprocess (clk, d)begin if (clk = ‘1’) then q1 <= d; end if; q <= q1 ;end process;end body;

Entity test1 isport (clk : in bit; d : in bit; q : out bit);end test1;architecture body of test1 issignal q1 : bit ;beginprocess (clk)begin if (clk = ‘1’) then q1 <= d; end if; q <= q1 ;end process;end body;

Page 17: 第 3 章  VHDL 硬件描述语言 ( 一 )

YANGTZE NORMAL UNIVERSITY

How Many Registers?ENTITY reg1 IS

PORT ( d : in BIT;clk : in BIT;q : out BIT);

END reg1;

ARCHITECTURE reg1 OF reg1 ISSIGNAL a, b : BIT;BEGIN

PROCESS (clk)BEGINIF clk='1' AND clk’event THEN

a <= d;b <= a;q <= b;

END IF;END PROCESS;

END reg1;

Page 18: 第 3 章  VHDL 硬件描述语言 ( 一 )

YANGTZE NORMAL UNIVERSITY

Page 19: 第 3 章  VHDL 硬件描述语言 ( 一 )

YANGTZE NORMAL UNIVERSITY

How Many Registers?ENTITY reg1 IS

PORT ( d : in BIT;clk : in BIT;q : out BIT);

END reg1;

ARCHITECTURE reg1 OF reg1 ISBEGIN

PROCESS (clk)VARIABLE a, b : BIT;BEGINIF clk='1' AND clk’event THEN

a := d;b := a;q <= b;

END IF;END PROCESS;

END reg1;

Page 20: 第 3 章  VHDL 硬件描述语言 ( 一 )

YANGTZE NORMAL UNIVERSITY用 VHDL 设计 4 位计数器

A

B

0

10

1

0 1

0

1

取整数数据类型,为什么?取整数数据类型,为什么?

整数取值范围整数取值范围

端口信号模式取BUFFER ,为什么?

端口信号模式取BUFFER ,为什么?

注意整数和位的不同表达方式!注意整数和位的不同表达方式!

Page 21: 第 3 章  VHDL 硬件描述语言 ( 一 )

YANGTZE NORMAL UNIVERSITY修改后的程序

运算符加载

注意,信号端口模式和数据类型的改变!

注意,信号端口模式和数据类型的改变!

注意,引进内部信号矢量!

注意,引进内部信号矢量!

Page 22: 第 3 章  VHDL 硬件描述语言 ( 一 )

YANGTZE NORMAL UNIVERSITY

4 位锁存器组合电路加 1 器

锁存信号

输出反馈

Page 23: 第 3 章  VHDL 硬件描述语言 ( 一 )

YANGTZE NORMAL UNIVERSITY用 VHDL 设计 7 段 16 进制译码器

用 CASE 语句完成真值表的功能

向 7 段数码管输出信号,最高位控制小数点

Page 24: 第 3 章  VHDL 硬件描述语言 ( 一 )

YANGTZE NORMAL UNIVERSITY

注意,此语句必须加入注意,此语句必须加入

4 位加法计数器

4 位加法计数器

7 段译码器7 段译码器

8 位总线输出8 位总线输出信号输出

信号输出

Page 25: 第 3 章  VHDL 硬件描述语言 ( 一 )

YANGTZE NORMAL UNIVERSITY

3.2.2 D 触发器 VHDL 描述的语言现象说明

1. 标准逻辑位数据类型 STD_LOGIC

BIT 数 据 类 型 定 义 : TYPE BIT IS('0','1');

STD_LOGIC 数据类型定义:TYPE STD_LOGIC IS ('U','X','0','1','Z','W','L','H','-');

STD_LOGIC 所定义的 9 种数据的含义是:

‘U’ 表示未初始化的; ‘ X’ 表示强未知的; ‘ 0’ 表示强逻辑0; ‘ 1’ 表示强逻辑 1; ‘ Z’ 表示高阻态; ‘ W’ 表示弱未知的; ‘ L’ 表示弱逻辑 0; ‘ H’ 表示弱逻辑 1; ‘ -’ 表示忽略。

Page 26: 第 3 章  VHDL 硬件描述语言 ( 一 )

YANGTZE NORMAL UNIVERSITY

3.2.2 D 触发器 VHDL 描述的语言现象说明

2. 设计库和标准程序包

3. SIGNAL信号定义和数据对象 【例 3-10】

ARCHITECTURE bhv OF DFF1 IS BEGIN PROCESS (CLK) BEGIN IF CLK'EVENT AND CLK = '1' THEN Q <= D ; END IF; END PROCESS ;END ;

使用库和程序包的一般定义表式是: LIBRARY <设计库名 >; USE < 设计库名 >.< 程序包名 >.ALL ;

SIGNAL Q1 : STD_LOGIC

Page 27: 第 3 章  VHDL 硬件描述语言 ( 一 )

YANGTZE NORMAL UNIVERSITY

3.2.2 D 触发器 VHDL 描述的语言现象说明

4. 上升沿检测表式和信号属性函数 EVENT

关键词 EVENT 是信号属性, VHDL 通过以下表式来测定某信号的跳变边沿: <信号名 >'EVENT

CLK'EVENT AND CLK = '1'

短语“ CLK’EVENT ” 就是对 CLK 标识符的信号在当前的一个极小的时间段 δ 内发生事件的情况进行检测。

Page 28: 第 3 章  VHDL 硬件描述语言 ( 一 )

YANGTZE NORMAL UNIVERSITY

3. 不完整条件语句与时序电路

【例 3-11】ENTITY COMP_BAD IS PORT( a1 : IN BIT; 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 <= '0' ;-- 未提及当 a1=b1 时, q1 作何操

作END IF; END PROCESS ;END ;

3.2.2 D 触发器 VHDL 描述的语言现象说明

Page 29: 第 3 章  VHDL 硬件描述语言 ( 一 )

YANGTZE NORMAL UNIVERSITY

3. 不完整条件语句与时序电路

图 3-3 例 3-11 的电路图

Page 30: 第 3 章  VHDL 硬件描述语言 ( 一 )

YANGTZE NORMAL UNIVERSITY3. 不完整条件语句与时序电路

【例 3-12】ENTITY COMP_GOOD IS PORT(a1 : IN BIT; b1 : IN BIT; q1 : OUT BIT ); END ; ARCHITECTURE one OF COMP_GOOD IS BEGIN PROCESS (a1,b1) BEGIN IF a1 > b1 THEN q1 <= '1' ; ELSE q1 <= '0' ; END IF; END PROCESS ; END

图 3-6 例 3-12 的电路图

Page 31: 第 3 章  VHDL 硬件描述语言 ( 一 )

YANGTZE NORMAL UNIVERSITY

3.2.4 异步时序电路设计 【例 3-19】

... ARCHITECTURE bhv OF MULTI_DFF IS SIGNAL Q1,Q2 : STD_LOGIC; BEGINPRO1: PROCESS (CLK) BEGIN IF CLK'EVENT AND CLK='1' THEN Q1 <= NOT (Q2 OR A); END IF; END PROCESS ;PRO2:PROCESS (Q1) BEGIN IF Q1'EVENT AND Q1='1' THEN Q2 <= D; END IF; QQ <= Q2 ; END PROCESS ;

图 3-9 例 3-19 综合的电路

Page 32: 第 3 章  VHDL 硬件描述语言 ( 一 )

YANGTZE NORMAL UNIVERSITY

3.2.3 VHDL 设计基本概念和语言现象小节

数据类型数据类型

数据对象数据对象 信号属性信号属性

时钟检测时钟检测

VHDL库VHDL库 程序包程序包

时序电路时序电路 异步时序异步时序

Page 33: 第 3 章  VHDL 硬件描述语言 ( 一 )

YANGTZE NORMAL UNIVERSITY

3.3 1 位二进制全加器的 VHDL 设计

图 3-10 半加器 h_adder 电路图

图 3-11 全加器 f_adder 电路图

Page 34: 第 3 章  VHDL 硬件描述语言 ( 一 )

YANGTZE NORMAL UNIVERSITY

Page 35: 第 3 章  VHDL 硬件描述语言 ( 一 )

YANGTZE NORMAL UNIVERSITY3.3.1 半加器描述和 CASE 语句

a b so co0 0 0 00 1 1 01 0 1 01 1 0 1

表 3-1 半加器 h_adder 逻辑功能真值表

1. CASE语句

CASE 语句的一般表式是:

CASE <表达式 > ISWhen < 选择值或标识符 > => < 顺序语句 >; ... ; < 顺序语句 > ;When < 选择值或标识符 > => < 顺序语句 >; ... ; < 顺序语句 > ;...END CASE ;

Page 36: 第 3 章  VHDL 硬件描述语言 ( 一 )

YANGTZE NORMAL UNIVERSITY

2. 标准逻辑矢量数据类型 STD_LOGIC_VECTOR

3.3.1 半加器描述和 CASE 语句

在使用 STD_LOGIC_VECTOR 中,必须注明其数组宽度,即位宽,如: B : OUT STD_LOGIC_VECTOR(7 DOWNTO 0) ;或 SIGNAL A : STD_LOGIC_VECTOR(1 TO 4)

STD_LOGIC_VECTOR 类型与 STD_LOGIC 一样,都定义在STD_LOGIC_1164 程序包中,但后者属于标准位类型,而前者被定义为标准一维数组。数组中的每一个元素的数据类型都是标准逻辑位 STD_LOGIC。

B <= “01100010”; --B(7) 为‘ 0’B(4 DOWNTO 1) <= “1101”; --B(4) 为“ 1”B(7 DOWNTO 4) <= A; --B(6) 等于 A(2)

Page 37: 第 3 章  VHDL 硬件描述语言 ( 一 )

YANGTZE NORMAL UNIVERSITY

3. 并置操作符

以下是一些并置操作示例:

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 条件句中可以使用并置符

3.3.1 半加器描述和 CASE 语句

Page 38: 第 3 章  VHDL 硬件描述语言 ( 一 )

YANGTZE NORMAL UNIVERSITY3.3.1 半加器描述和 CASE 语句

【例 3-20 】 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 <= a OR b ; END ARCHITECTURE fu1;

【例 3-21】LIBRARY IEEE; -- 半加器描述 (1)USE IEEE.STD_LOGIC_1164.ALL; ENTITY adder IS PORT (a, b : IN STD_LOGIC; co, so : OUT STD_LOGIC); END ENTITY adder; ARCHITECTURE fh1 OF adder is BEGIN so <= NOT(a XOR (NOT b)) ; co <= a AND b ; END ARCHITECTURE fh1;

Page 39: 第 3 章  VHDL 硬件描述语言 ( 一 )

YANGTZE NORMAL UNIVERSITY【例 3-22】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_LOGIC_VECTOR(1 DOWNTO 0) ;BEGIN abc <= a & b ; PROCESS(abc) BEGIN CASE abc IS WHEN "00" => so<='0'; co<='0' ; WHEN "01" => so<='1'; co<='0' ; WHEN "10" => so<='1'; co<='0' ; WHEN "11" => so<='0'; co<='1' ; WHEN OTHERS => NULL ; END CASE; END PROCESS;END ARCHITECTURE fh1 ;

Page 40: 第 3 章  VHDL 硬件描述语言 ( 一 )

YANGTZE NORMAL UNIVERSITY【例 3-23 】... -- 半加器描述 (3) SIGNAL abc,cso : STD_LOGIC_VECTOR(1 DOWNTO 0 ); BEGIN abc <= a & b ; co <= cso(1) ; so <= cso(0) ; PROCESS(abc) BEGIN CASE abc IS WHEN "00" => cso<="00" ; WHEN "01" => cso<="01" ; WHEN "10" => cso<="01" ; WHEN "11" => cso<="10" ; END CASE; END PROCESS;END ARCHITECTURE fh1;

Page 41: 第 3 章  VHDL 硬件描述语言 ( 一 )

YANGTZE NORMAL UNIVERSITY【例 3-24】 LIBRARY IEEE; --1 位二进制全加器顶层设计描述 USE IEEE.STD_LOGIC_1164.ALL; ENTITY f_adder IS PORT (ain, bin, cin : IN STD_LOGIC; cout, sum : OUT STD_LOGIC ); END ENTITY f_adder; ARCHITECTURE fd1 OF f_adder IS COMPONENT h_adder PORT ( a, b : IN STD_LOGIC; co, so : OUT STD_LOGIC); END COMPONENT ; COMPONENT or2a PORT (a, b : IN STD_LOGIC; c : OUT STD_LOGIC); END COMPONENT;SIGNAL d, e, f : STD_LOGIC; BEGIN u1 : h_adder PORT MAP(a=>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;

Page 42: 第 3 章  VHDL 硬件描述语言 ( 一 )

YANGTZE NORMAL UNIVERSITY

元件例化语句由两部分组成,第一部分是对一个现成的设计实体定义为一个元件,语句的功能是对待调用的元件作出调用声明,它的最简表达式如下所示: COMPONENT 元件名 IS PORT (端口名表 ) ; END COMPONENT 文件名 ;

元件例化语句的第二部分则是此元件与当前设计实体 ( 顶层文件 )中元件间及端口的连接说明。语句的表达式如下: 例化名 : 元件名 PORT MAP( [ 端口名 =>] 连接端口名 ,...);

3.3.2 全加器描述和例化语句

Page 43: 第 3 章  VHDL 硬件描述语言 ( 一 )

YANGTZE NORMAL UNIVERSITY

习 题 3-3. 图 4-18 所示的是双 2 选 1 多路选择器构成的电路 MUXK ,对于其中 MUX21A ,当 s='0'和 '1' 时,分别有 y<='a'和 y<='b' 。试在一个结构体中用两个进程来表达此电路,每个进程中用 CASE 语句描述一个 2 选 1 多路选择器 MUX21A 。

图 4-18 双 2选 1 多路选择器

Page 44: 第 3 章  VHDL 硬件描述语言 ( 一 )

YANGTZE NORMAL UNIVERSITY

Library ieee;

use ieee.std_logic_1164.all;

entity MUXK is

port( a1,a2,a3,so,s1: in std_logic;

outy: out std_logic);

end MUXK;

architecture behavioral1 of MUXK is

signal temp: std_logic;

begin

process(a2,a3,so)

begin

case s0 is

when ‘0’ => temp<=a2;

when ‘1’ => temp<=a3;

when others=> NULL;

end case;

end process;

process(a1,temp,s1)

begin

case s1 is

when ‘0’ => outy<=a1;

when ‘1’ => outy<=temp;

when others=> NULL;

end case;

end process;

end behavioral1;

Library ieee;

use ieee.std_logic_1164.all;

entity MUXK is

port( a1,a2,a3,so,s1: in std_logic;

outy: out std_logic);

end MUXK;

architecture behavioral2 of MUXK is

signal temp: std_logic;

begin

process(a2,a3,so)

begin

if so=‘0’ then

temp<=a2;

else

temp<=a3;

end if;

end process;

process(a1,temp,s1)

begin

if s1=‘0’ then

outy<=a1;

else

outy<=temp;

end if;

end process;

end behavioral2;

Page 45: 第 3 章  VHDL 硬件描述语言 ( 一 )

YANGTZE NORMAL UNIVERSITY Library ieee; use ieee.std_logic_1164.all; entity MUXK is port( a1,a2,a3,so,s1: in std_logic; outy: out std_logic); end MUXK; architecture behavioral3 of MUXK is signal temp: std_logic; begin with s0 select temp<= a2 when ‘0’, <=a3 when ‘1’, <=‘Z’ when others; with s1 select outy<= a1 when ‘0’, <=temp when ‘1’, <=‘Z’ when

others;

end behavioral3;

Library ieee; use ieee.std_logic_1164.all; entity MUXK is port( a1,a2,a3,so,s1: in std_logic; outy: out std_logic); end MUXK; architecture behavioral4 of MUXK is signal temp: std_logic; begin temp<= a2 when s0=‘0’ else <= a3 when so=‘1’ else <=‘Z’ when others;

; temp<= a2 when s1=‘0’ else <= a3 when s1=‘1’ else <=‘Z’ when others; end behavioral4;