1
用 VHDL进行数字系统设计
> 总目录 退出
2
前言
? EDA- Electronic Design Automation(电子设计自动化)
? VHIC- Very High speed Integrated Circuit
? HDL- Hardware Description Language
? VHDL-VHIC HDL
? 电子设计自动化的关键技术
用形式化方法描述数字系统的硬件电路。
? 80年代后期美国国防部开发出 VHDL,1993年推出修订版
? Verilog HDL 1993年 与 C接近
? 95年以后国内开展这方面工作
> 总目录 退出
3
数字系统硬件设计概述
传统的硬件设计方法
? 传统的设计方法是自下而上的设计方法
? 采用通用的元器件
? 后期进行仿真,浪费大,设计周期长
? 主要设计文件是电路原理图,可读性差,文件量大
> 总目录 退出
4图 11-9 测量频率电路图
2
1
2
6
13
12
11
10
9
15
14
7
1
2
6
A
B
C
D
a
b
c
d
e
LT
B I / R B O
D 1 1
f
g
RBI
A
B
C
D
a
b
c
d
e
LT
B I / R B O
D 1 4
f
g
RBI
13
12
11
10
9
15
14
3
4
5
3
4
5
5
6
9
12
15
16
19
13
12
11
10
9
15
14
7
1
2
6
A
B
C
D
a
b
c
d
e
LT
B I / R B O
D 1 2
f
g
RBI
3
4
5
13
12
11
10
9
15
14
7
1
2
6
A
B
C
D
a
b
c
d
e
LT
B I / R B O
D 1 3
f
g
RBI
3
4
5
C L K 1
Q1
Q2
Q3
M S 2
M R 1
M R 2
C L K 0
Q0M S 1
D 1 0
11
1
C L K
Q1
Q2
Q3
Q4
Q5
Q6
Q7
D1
D2
D3
D4
D5
D6
D7
OE
Q0D0
12
9
8
11
2
5
6
9
C L K
Q1
Q2
Q3
Q4
Q5
Q6
Q7
D1
D2
D3
D4
D5
D6
D7
OE
Q0D0
12
15
16
19
3
4
7
8
13
14
17
18
3
4
7
8
13
14
17
18
D 1 9
7 4 L S 3 7 4
7 4 L S 4 8
7 4 L S 4 8
7 4 L S 4 8
7 4 L S 4 8
7 4 L S 9 0
14
1
3
C L K 1
Q1
Q2
Q3
M S 2
M R 1
M R 2
C L K 0
Q0M S 1
D9
2
7
6
12
9
8
11
12
9
8
11
14
1
3
2
7
6
14
1
3
2
7
6
7 4 L S 9 0
7 4 L S 9 0
7 4 L S 9 0
7 4 L S 3 7 4
D 2 0
1
2
3
2
CD
C L K
SD
D Q
Q
U
CC
4
5
U
CC
1
6
2
3
D 1 7, B
7 4 L S 0 8
4
5
6
D 1 5
7 4 L S 1 5 1
5
6
12
9
8
11
7 4 L S 9 0
12
9
8
11
7 4 L S 9 0
12
9
8
11
7 4 L S 9 0
14
1
3
2
7
6 12
9
8
11
C L K 1
Q1
Q2
Q3
M S 2
M R 1
M R 2
C L K 0
Q0M S 1
D7
12
9
8
11
7 4 L S 9 0
12
9
8
11
7 4 L S 9 0
12
9
8
11
7 4 L S 9 0
14
1
3
2
7
6
14
1
3
2
7
6
C L K 1
Q1
Q2
Q3
M S 2
M R 1
M R 2
C L K 0
Q0M S 1
D5
14
1
3
2
7
6
14
3
2
7
6
14
1
3
2
7
6
14
3
2
7
6
4
3
2
1
1S
0, 1 S
1 0 m S
1 m S
0, 1 m S 15
141 0 u S
13
12
I1
I2
I3
I4
I5
I6
I7
I0
E
A
B
C
Z
Z
S 0 S 1 S 2
11
10
9
7
1 4
1 M H z
2 3
U
i
D 1 6, A
7 4 L S 7 4
D 1 7, A
7 4 L S 0 8
7 4 L S 1 4
D 1 8, A
图1 1 - 9
C L K 1
Q1
Q2
Q3
M S 2
M R 1
M R 2
C L K 0
Q0M S 1
D4
U
CC
U
CC
C L K 1
Q1
Q2
Q3
M S 2
M R 1
M R 2
C L K 0
Q0M S 1
D2
C L K 1
Q1
Q2
Q3
M S 2
M R 1
M R 2
C L K 0
Q0M S 1
D3
C L K 1
Q1
Q2
Q3
M S 2
M R 1
M R 2
C L K 0
Q0M S 1
D1
1
1
C L K 1
Q1
Q2
Q3
M S 2
M R 1
M R 2
C L K 0
Q0M S 1
D8
C L K 1
Q1
Q2
Q3
M S 2
M R 1
M R 2
C L K 0
Q0M S 1
D6
> 总目录 退出
5

11-
4







> 总目录 退出
6
数字系统硬件设计概述
VHDL语言设计方法
VHDL 是硬件描述语言,是描述硬件电路的功能、信号连接关系、定时关
系的语言。
?采用自上而下的设计方法
?早期仿真,提高了资源利用率,设计周期短
?行为级仿真
?RTL级仿真
?门级仿真
?降低设计难度
?主要设计文件是程序,可读性好,文件量小,可移植性好
> 总目录 退出
7
自上至下设计系统硬件过程
规格设计 行为级描述 行为级仿真
RTL级描述
RTL级仿真
逻辑综合、优化门级仿真、检查输出门级网表
> 总目录 退出
8
数字系统硬件设计概述
?利用 VHDL语言设计电路的优点
?设计技术齐全,方法灵活
? 行为级设计----设计数学模型
? RTL级设计 ----生成电路
? 结构化设计----生成电路,与原理图设计方法相似
?描述功能强
?设计电路与工艺无关
?成果易于共享
> 总目录 退出
9
VHDL 语言描述的范畴
ASIC电路设计
局部电路的设计和仿真
系统的硬件、软件的协同设计
数字系统硬件设计概述
> 总目录 退出
10
VHDL语言的基本结构
一般的高级语言:
描述算法运算,是控制流,目的是实现过程控制。
VHDL语言:
描述具体的数字系统或数字电路的功能,目的是生成硬件电
路,采用的主要是并发语言。
> 总目录 退出
11
VHDL语言的基本结构
VHDL 语言的基本结构:
库说明+包集合+实体+构造体+(配置)
库,用来存放已经编译的实体、构造体、包集合和配置。
库一般可由用户产生或者由 ASIC芯片制造商提供。
包集合, 存放各设计模块都能共享的数据类型、常数和子程序。
实体,系统的外部接口关系。
构造体,描述系统内部的结构和行为。
配置,用于从库中选取所需的单元,来组成系统设计的不同版本。
> 总目录 退出
12
VHDL语言的基本单元
VHDL语言的基本单元
一,VHDL语言描述方法
电原理图的描述方式,其中 a,b
是输入,c是输出,C=AB。
如果用 VHDL 语言来 描述此电路:
实体描述输入、输出,
构造体描述功能。
实体+构造体=基本单元
> 总目录 退出
13
二:实体说明
ENTITY 实体名字 IS
PORT (端口名,… );
END 实体名;
说明,1:实体名可用英文字母、数字、下划线表示,名字开头
只能为英文字母,结尾不能用下划线。
2,PORT(端口名:方向 数据类型);
端口名与实体名命名规则相同。
方向,IN 表示输入
OUT 表示输出
INOUT 表示输入输出
BUFFER 表示输出端带有反馈类型。
> 总目录 退出
14
数据类型:与一般高级语言类似,有许多种,但一般常使用两种。
BIT,位
BIT_VECTOR,位矢量
表示数据总线 D0---D7的数据类型
BIT_VECTOR(7 DOWNTO 0);
> 总目录 退出
15
例,LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY and2 IS
PORT (a,b:IN BIT; c:OUT BIT);
END and2;
ARCHITECTURE rtl OF and2 IS
BEGIN
c<=a AND b;
END rtl;
大写 保留字
小写 名称
VHDL语言对大写小写无区分,
大写小写有利于阅读。
> 总目录 退出
16
上节课主要内容复习
VHDL 语言的基本结构:
库说明+包集合+实体+构造体
库,用来存放已经编译的实体、构造体、包集合和配置。
库一般可由用户产生或者由 ASIC芯片制造商提供。
包集合, 存放各设计模块都能共享的数据类型、常数和子程序。
实体,系统的外部接口关系。
构造体,描述系统内部的结构和行为。
> 总目录 退出
17
上节课主要内容复习
基本设计单元
? 实体说明:接口信号
ENTITY and2 IS
PORT( a,b,IN BIT;
c,OUT BIT)
END and2;
? 构造体:内部逻辑和时序
ARCHITECTURE rtl OF and2 IS
BEGIN
c <= a AND b;
END rtl;
> 总目录 退出
18
STD_LOGIC
STD_LOGIC_VECTOR
1993年制定出 IEEE STD1164 标准。以电路需要,该类型数据可取如下
9种不同的值。
‘ U? 初始值
‘ X? X是不定的值,强不确定
‘ 0? 强 0
?1? 强 1
?Z? 高阻
‘ W? 弱不确定
‘ L? 弱 0
?H? 弱 1
?—?不可能情况
> 总目录 退出
19
VHDL描述数字系统的基本方法
三:构造体
构造体用来描述实体的功能
ARCHITCTURE 构造体名 OF 实体名 IS
定义语句:内部信号,常数,数据类型,函数等的定义
BEGIN
并发语句
END 构造体名;
构造体的名称可由设计者命名。通常根据描述的对象把构造体命
名为 behav( behavior)行为描述,rtl寄存器传输描述,struct
( structural)结构描述。
> 总目录 退出
20> 总目录 退出
21
常数、变量、信号所描述的对象
在 VHDL 语言中,可以赋予一个值的的对象就称为客体或对象。
对象主要包括以下 3种:
信号 (SIGNAL ),对应物理意义上是实际电路连接线。
变量 (VARIABLE ),相当于暂存寄存器,变量值不是最终的结果。
常数 ( CONSTANT),如电源、地等,用来描述固定的值。
> 总目录 退出
22
常数、变量、信号所描述的对象
1、常数( CONSTANT)
格式,CONSTANT 常数名:数据类型:=表达式;
例,CONSTANT VCC,REAL:=5.0;
CONSTANT DALY:TIME:=100ns;
CONSTANT FBUS:BIT_VECTOR:=“1010,
CONSTANT G1,BIT:= ‘ 1?;
数据类型和表达式表示的数据类型应该一致。
‘ ’ 表示是位信息,而 ? ? 表示的是位矢量信息。
> 总目录 退出
23
常数、变量、信号所描述的对象
2、变量( VARIABLE)
变量是局部变量,只能在进程、过程、函数中使用和定义。
格式:
VARIABLE 变量名:数据类型 约束条件:=表达式;
例:
VARIABLE x,y:INTEGER
VARIABLE x,y:INTEGER RANGE 0 TO 255:=10
在程序中,变量的赋值是立即生效的,不能产生附加延时。
tmp1:=tmp2+tmp3 AFTER 10ns ×
> 总目录 退出
24
常数、变量、信号所描述的对象
3、信号 (SIGNAL )
信号量是全局变量,只能在构造体中定义,而不能在进程、
过程、函数中定义。
格式,SIGNAL 信号名:数据类型 约束条件:=表达式;
SIGANL ground,BIT:= ?0?;
SIGANL x,y:INTEGER RANGE 0 TO 255:=10;
> 总目录 退出
25
常数、变量、信号所描述的对象
4、信号量和变量的区别
? 信号量是全局量,而变量是局部量。
? 信号赋值用 ? <=”,而变量用 ?,= ? 。
? 信号和变量可以相互代入。
如,a 是变量,b是信号,则 a:=b;b<=a;
? 变量是立即赋值的,而信号量是在进程结束时赋值的。
> 总目录 退出
26
属性描述
描述时钟边沿的属性‘ EVENT
?EVENT属性属于信号类属性。描述信号边沿出现的时刻
如:时钟上升沿
IF(clk?EVENT AND clk=?1?)THEN
q<=d;
> 总目录 退出
27
例:设计一个 2选 1的数据选择器
> 总目录 退出
28
2选 1的数据选择器
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY mux IS
PORT (D0,D1,sel,IN BIT;
F,OUT BIT);
END mux;
ARCHITECTURE rtl OF mux IS
SIGNAL tmp1,tmp2,BIT;
BEGIN
tmp1<=D1 AND sel;
tmp2<=D0 AND (NOT sel );
F <=tmp1 OR tmp2;
END rtl;
> 总目录 退出
29
VHDL基本设计单元构成
一个完整的设计单元
LIBRARY IEEE; 库
USE IEEE.STD_LOGIC_1164.ALL; 包集合
ENTITY 实体名字 IS
PORT (端口名,… );
END 实体名;
ARCHITCTURE 构造体名 OF 实体名 IS
定义语句:信号常数,数据类型等
BEGIN
[并发语句 ]
END 构造体名;
> 总目录 退出
30
2选 1的数据选择器
ENTITY mux IS
PORT (D0,D1,sel,IN BIT;
F,OUT BIT);
END mux;
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ARCHITECTURE rtl OF mux IS
SIGNAL tmp1,tmp2,BIT;
BEGIN
tmp1<=D1 AND sel;
tmp2<=D0 AND (NOT sel );
F <=tmp1 OR tmp2;
END rtl;
> 总目录 退出
31
VHDL基本设计单元构成
一个完整的设计单元
LIBRARY IEEE; 库
USE IEEE.STD_LOGIC_1164.ALL; 包集合
ENTITY 实体名字 IS
PORT (端口名,… );
END 实体名;
ARCHITCTURE 构造体名 OF 实体名 IS
定义语句:信号常数,数据类型等
BEGIN
[并发语句 ]
END 构造体名;
> 总目录 退出
32
频率测量电路
2
1
2
6
13
12
11
10
9
15
14
7
1
2
6
A
B
C
D
a
b
c
d
e
LT
B I / R B O
D 1 1
f
g
RBI
A
B
C
D
a
b
c
d
e
LT
B I / R B O
D 1 4
f
g
RBI
13
12
11
10
9
15
14
3
4
5
3
4
5
5
6
9
12
15
16
19
13
12
11
10
9
15
14
7
1
2
6
A
B
C
D
a
b
c
d
e
LT
B I / R B O
D 1 2
f
g
RBI
3
4
5
13
12
11
10
9
15
14
7
1
2
6
A
B
C
D
a
b
c
d
e
LT
B I / R B O
D 1 3
f
g
RBI
3
4
5
C L K 1
Q1
Q2
Q3
M S 2
M R 1
M R 2
C L K 0
Q0M S 1
D 1 0
11
1
C L K
Q1
Q2
Q3
Q4
Q5
Q6
Q7
D1
D2
D3
D4
D5
D6
D7
OE
Q0D0
12
9
8
11
2
5
6
9
C L K
Q1
Q2
Q3
Q4
Q5
Q6
Q7
D1
D2
D3
D4
D5
D6
D7
OE
Q0D0
12
15
16
19
3
4
7
8
13
14
17
18
3
4
7
8
13
14
17
18
D 1 9
7 4 L S 3 7 4
7 4 L S 4 8
7 4 L S 4 8
7 4 L S 4 8
7 4 L S 4 8
7 4 L S 9 0
14
1
3
C L K 1
Q1
Q2
Q3
M S 2
M R 1
M R 2
C L K 0
Q0M S 1
D9
2
7
6
12
9
8
11
12
9
8
11
14
1
3
2
7
6
14
1
3
2
7
6
7 4 L S 9 0
7 4 L S 9 0
7 4 L S 9 0
7 4 L S 3 7 4
D 2 0
1
2
3
2
CD
C L K
SD
D Q
Q
U
CC
4
5
U
CC
1
6
2
3
D 1 7, B
7 4 L S 0 8
4
5
6
D 1 5
7 4 L S 1 5 1
5
6
12
9
8
11
7 4 L S 9 0
12
9
8
11
7 4 L S 9 0
12
9
8
11
7 4 L S 9 0
14
1
3
2
7
6 12
9
8
11
C L K 1
Q1
Q2
Q3
M S 2
M R 1
M R 2
C L K 0
Q0M S 1
D7
12
9
8
11
7 4 L S 9 0
12
9
8
11
7 4 L S 9 0
12
9
8
11
7 4 L S 9 0
14
1
3
2
7
6
14
1
3
2
7
6
C L K 1
Q1
Q2
Q3
M S 2
M R 1
M R 2
C L K 0
Q0M S 1
D5
14
1
3
2
7
6
14
3
2
7
6
14
1
3
2
7
6
14
3
2
7
6
4
3
2
1
1S
0, 1 S
1 0 m S
1 m S
0, 1 m S 15
141 0 u S
13
12
I1
I2
I3
I4
I5
I6
I7
I0
E
A
B
C
Z
Z
S 0 S 1 S 2
11
10
9
7
1 4
1 M H z
2 3
U
i
D 1 6, A
7 4 L S 7 4
D 1 7, A
7 4 L S 0 8
7 4 L S 1 4
D 1 8, A
图1 1 - 9
C L K 1
Q1
Q2
Q3
M S 2
M R 1
M R 2
C L K 0
Q0M S 1
D4
U
CC
U
CC
C L K 1
Q1
Q2
Q3
M S 2
M R 1
M R 2
C L K 0
Q0M S 1
D2
C L K 1
Q1
Q2
Q3
M S 2
M R 1
M R 2
C L K 0
Q0M S 1
D3
C L K 1
Q1
Q2
Q3
M S 2
M R 1
M R 2
C L K 0
Q0M S 1
D1
1
1
C L K 1
Q1
Q2
Q3
M S 2
M R 1
M R 2
C L K 0
Q0M S 1
D8
C L K 1
Q1
Q2
Q3
M S 2
M R 1
M R 2
C L K 0
Q0M S 1
D6
> 总目录 退出
33
频率测量电路框图
> 总目录 退出
34
构造体的子结构描述
构造体的子结构描述
三种子结构描述语句:
BLOCK 块
PROCESS 进程
SUBPROGRAM 子程序 ( PROCEDURE,FUNCTION )
> 总目录 退出
35
块( BLOCK) 语句结构描述
1 块( BLOCK) 语句结构
块结构名,BLOCK
BEGIN
并发语句;

END BLOCK 块结构名;
> 总目录 退出
36
ARCHITECTURE rtl OF mux2 IS
SINGAL tmp1,tmp2,BIT;
BEGIN
muxB,BLOCK
BEGIN
tmp1<=d1 AND sel ;
tmp2<=d0 AND (NOT sel );
F<=tmp1 OR tmp2;
END BLOCK muxB;
END rtl;
> 总目录 退出
37
块结构
ARCHITECTURE
BEGIN
black1,BLOCK
BEGIN
并发语句;

END BLOCK black1;
black2,BLOCK
BEGIN
并发语句;

END BLOCK black2;
black3,BLOCK
BEGIN
并发语句;

END BLOCK black3;
> 总目录 退出
38
进程( PROCESS)语句结构描述
2 进程( PROCESS)语句的结构
[进程名 ],PROCESS(信号 1,信号 2,… ) -- 敏感量
BEGIN
顺序语句;

END PROCESS [进程名 ];
? 进程中语句的顺序执行:
? 进程内的顺序性;
? 进程间的并发性
? 进程的启动和执行:敏感量变化启动进程执行
> 总目录 退出
39
进程间的并发性
process1 PROCESS(信号 1,信号 2,… )
BEGIN
顺序语句;

END PROCESS process1 ;
process2 PROCESS(信号 6,信号 7,… )
BEGIN
顺序语句;

END PROCESS process2 ;
F<= a OR b;
> 总目录 退出
40
进程中定义变量
ARCHITECTURE rtl OF shff1 IS
BEGIN
PROCESS(clk)
VARIABLE z:STD_LOGIC_VECTOR
(3 DOWNTO 0);
BEGIN
IF (clk?EVENT AND clk=1)THEN
z(0):=a;
z(1):= z(0);
z(2):= z(1);
z(3):= z(2);
q<= z(3);
END IF;
END PROCESS;
END rtl; > 总目录 退出
41
构造体中定义信号
ARCHITECTURE rtl OF shff IS
SIGNAL z:STD_LOGIC_VECTOR(3 DOWNTO 0);
BEGIN
PROCESS(clk)
BEGIN
IF(clk'EVENT AND clk='1')THEN
z(0)<=a;
z(1)<= z(0);
z(2)<= z(1);
z(3)<= z(2);
q<= z(3);
END IF;
END PROCESS;
END rtl;
> 总目录 退出
42
进程举例
ARCHITECTURE rtl OF shff IS
SIGNAL z:STD_LOGIC_VECTOR(3
DOWNTO 0);
BEGIN
PROCESS(clk)
BEGIN
IF(clk'EVENT AND clk='1')THEN
z(0)<=a;
z(1)<= z(0);
z(2)<= z(1);
z(3)<= z(2);
q<= z(3);
END IF;
END PROCESS;
END rtl;
ARCHITECTURE rtl OF shff1 IS
BEGIN
PROCESS(clk)
VARIABLE z:STD_LOGIC_VECTOR
(3 DOWNTO 0);
BEGIN
IF (clk?EVENT AND clk=1)THEN
z(0):=a;
z(1):= z(0);
z(2):= z(1);
z(3):= z(2);
q<= z(3);
END IF;
END PROCESS;
END rtl;
> 总目录 退出
43
D触发器的设计
ENTITY dff1 IS
PORT (clk,d,reset, IN STD_LOGIC;
q, out STD_LOGIC);
END dff1;
ARCHITECTURE rtl OF dff1 IS
BEGIN
PROCESS (clk,reset)
BEGIN
IF(reset='0') THEN
q<='0';
ELSIF (clk'EVENT AND clk='1')THEN
q<= d ;
END IF;
END PROCESS;
END rtl; > 总目录 退出
44
序列信号检测器的设计
用 T触发器构成序列信号检测器
> 总目录 退出
45
ENTITY tff2 IS
PORT (clk,x,reset, IN STD_LOGIC;
q,F, OUT STD_LOGIC );
END tff2;
ARCHITECTURE rtl OF tff2 IS
BEGIN
PROCESS (clk,reset)
BEGIN
IF(reset='0') THEN
q<='0';
ELSIF (clk'EVENT AND clk='1')THEN
q<= x xor q ;
END IF;
F<=q and x;
END rtl;
> 总目录 退出
46
小结
VHDL 语言的基本结构
库说明+包集合+实体+构造体
构造体中的子结构
BLOCK 块
PROCESS 进程
进程的定义及进程的执行
进程间并发
进程内顺序执行
> 总目录 退出
47
作业
1、用 VHDL语言设计一个一位全加器。
2、电路如图所示,用 VHDL语言描述该电路。
> 总目录 退出
48
信号 (SIGNAL ),变量 (VARIABLE ),常数 ( CONSTANT)
在 VHDL语言中信号、变量、常数都要指定数据类型。
VHDL语言定义数据类型比较严格,不同数据类型长度不同,也不
能互相代入。数据类型可以自定义,使用相对灵活。
? 标准的数据类型
? 用户定义的数据类型
> 总目录 退出
49
一、标准数据类型(自己看书)
1:整数
2:实数
3:位
4:位矢量
5:布尔量
6:字符
7:字符串
8:时间
9:错误等级
10:大于等于零的整数
> 总目录 退出
50
二:用户定义的数据类型
1:格式
TYPE 数据类型名 IS 数据类型定义
2:定义种类
枚举类型
整数
实数
数组
存取
文件
记录
时间
> 总目录 退出
51
三:数据子类型定义
1:格式
SUBTYPE 子类型名 IS 数据类型名 约束条件;
2:例子
SUBTYPE digit IS INTEGER 0 TO 9;
SUBTYPE iobus IS STD_LOGIC_VECTOR(7 DOWNTO 0);
> 总目录 退出
52
SINGAL a:STD_LOGIC_VECTOR(3 DOWNTO 0);
“1010”为 a信号上的值,则
a(3)=?1?;a(2)=?0?;a(1)=?1?;a(0)=?0?
SINGAL b:STD_LOGIC_VECTOR(0 TO 3);
“1101”为 b信号上的值,则
b(3)=?1?;b(2)=?0?;b(1)=?1?;b(0)=?1?
> 总目录 退出
53
ENTITY count6 IS
PORT(reset,clk:IN STD_LOGIC;
q:OUT STD_LOGIC_VECTOR(2 DOWNTO 0));
END count6;
ARCHITECTURE rtl OF count6 IS
BEGIN PROCESS(clk)
VARIABLE q6:INTEGER;
BEGIN
IF(reset='0')THEN
q6:=0;
ELSIF(clk'EVENT AND clk='1')THEN
IF(q6=5)THEN
q6:=0;
ELSE
q6:=q6+1;
END IF;
END IF;
q<=CONV_STD_LOGIC_VECTOR(q6,3);
END PROCESS;
END rtl; > 总目录 退出
54
VHDL语言中的运算符号
VHDL中的运算操作符有:
逻辑运算,与、或、非、与非、或非、异或
关系运算=,/=,<,>,<=,>=
算术运算 +、-,*,/,MOD,RME,**,ASB、+、-
并置运算 &
> 总目录 退出
55
例,SINGAL a:STD_LOGIC_VECTOR(3 DOWNTO 0);
SINGAL b:STD_LOGIC_VECTOR(2 DOWNTO 0);
若取 a<=“1011”,b<=“111”;VHDL语言中比较数据大小的时候
,总是从左到右比较,从而得出结果是 b>a,而这实际是不正确的
,所以在进行比较运算是数据定义类型的位数应该相同。
用并置方法可以解决此问题。
SINGAL c:STD_LOGIC_VECTOR(3 DOWNTO 0);
c<=?0?&b;=>”0111”
然后比较 a和 c即可。
&是并置运算符,将信号可以连接起来。
> 总目录 退出
56
属性描述
描述时钟边沿的属性 ‘ EVENT
?EVENT属性属于信号类属性。描述信号边沿出现的时刻
如:时钟上升沿
IF(clk?EVENT AND clk=?1?)THEN
q<=d;
> 总目录 退出
57
构造体的子结构描述
三种子结构描述语句:
BLOCK 块
PROCESS 进程
SUBPROGRAM 子程序( PROCEDURE,FUNCTION )
> 总目录 退出
58
子程序
子程序 ;主程序调用以后能将处理结果返回主程序的程序模块。
子程序有两种类型:
过程和函数
通常用来描述常用的功能比较独立的电路,过程和函数应在包集
合中定义,通常放在库的某一个包集合中。
> 总目录 退出
59
1:过程语句的定义
结构:
PROCEDURE 过程名(参数 1,参数 2,…) IS
[定义语句 ] (用来定义一些变量,常数)
BEGIN
[顺序语句 ]
END 过程名
说明:
( 1)过程需要参数,参数应该包含输入参数和输出参数。
( 2)参数通常应为信号量。
> 总目录 退出
60
例:矢量转换为整数,用过程来描述
PROCEDURE vector_to_int(z, IN STD_LIGIC_VECTOR,
x_flag, OUT BOOLEAN,
q, INOUT INTEGER) IS
BEGIN
q:=0;
x_flag:=FALSE;
FOR I IN z?RANGE LOOP
q:=q*2;
IF(Z(I)=1)THEN
q:=q+1;
ELSIF(Z(I)/=0)THEN - - 状态不定
x_flag:=TRUE;
END IF;
END LOOP;
END vector_to_int; 101
> 总目录 退出
61
2:函数语句( FUNCTION)
结构:
FUNCTION 函数名(参数 1,参数 2…)
RETURN 数据类型名 IS
[定义语句 ]
BEGIN
[顺序语句 ]
RETURN[返回变量名 ]
END 函数名
> 总目录 退出
62
例,FUNCTION max(a, STD_LOGIC_VECTOR,
b, STD_LOGIC_VECTOR)
RETURN STD_LOGIC_VECTOR IS
BEGIN
IF(a>b) THEN
tmp:=a;
ELSE
tmp:=b;
END IF
RETURN tmp;
END max;
> 总目录 退出
63
说明:
( 1)函数名后的括号中均为输入参数。
( 2) RETURN应注明返回的数据类型。
( 3)可定义变量和参数。
( 4)函数体内均为顺序语句。
( 5) RETURN后紧跟变量名。
( 6)函数在库的包集合中定义。
> 总目录 退出
64
库、包集合及配置
库的功能类似于目录
库:存放编译后的数据集合,单元,构造体,实体等,使得设计者
可以共享已经编译过的设计结果。
库的种类很多,库之间是相互独立的,不可嵌套
一、库的种类
( 1) STD库
任何包集合都可不作任何说明便可以使用。
如 VHDL标准库中定义 BIT,BIT_VECTOR等。
65
( 2) IEEE库
美国电子电器工程师协会定义的库,在使用其中的包集合
之前应先说明。
如,LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
66
(3)面向用户的 ASIC库
为了进行门级仿真,各个公司提供面向 ASIC的逻辑门库,例
设计单片机、乘法器、接口等电路时,并不需要用用户设计这些
器件,直接可调用。
> 总目录 退出
67
( 4)工作库
现行工作库,用户设计好电路经过编译后放入工作库中。
( 5)用户定义库
为了方便工作,用户自己设计的单元可以作为用户自定义库

库的使用范围:
只能作用在一个实体单元的内部,当另外的实体单元用到
时必须重新说明 。
> 总目录 退出
68
三:包集合
包集合相当于高级语言中的 INCLUDE语句。
包集合包含信号的定义、常数定义、数据类型定义、
元器件定义、函数定义、过程定义等。包集合是一个可
编译的设计单元,也是库结构中的一个层次。
1:结构
PACKAGE 包集合名 IS
[说明语句 ]
END 包集合名;
PACKAGE BODY 包集合名 IS
[语句 ]
END 包集合名;
> 总目录 退出
69
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
PACKAGE mypack IS
Subtype sbit IS STD_LOGIC;
FUNCTION max (a,b:sbit)RETURN sbit;
END mypack;
PACKAGE BODY mypack IS
FUNCTION max (a,b:sbit)RETURN sbit IS
VARIABLE tmp:STD_LOGIC;
BEGIN
IF(a>b)THEN
tmp:=a;
ELSE
tmp:=b;
END IF;
RETURN tmp;
END max;
END mypack;
> 总目录 退出
70
…..
F<=max(a,b);
…...
包集合的使用
在实体前应作具体说明,方能使用包集合。
> 总目录 退出
71
VHDL语言的构造体描述方式
VHDL中的描述方式分为:
1:行为描述方式
不能进行综合,可以仿真,对系统数学模型的描述。
2,RTL级描述
可以综合,形成综合电路。
3:结构化描述
> 总目录 退出
72
构造体的行为描述方式
一:目的和应用场合
主要目的是验证和仿真系统的数学模型。
二:特点
1,VHDL语言的所有语言都可用来描述构造体的行为描述。
2:一般该描述不能进行逻辑综合。
3:该描述更贴近于数学描述,而不贴近逻辑连接描述。
例,c<=a AND b AFTER 5 ns;(行为描述)
> 总目录 退出
73
三:行为描述的一些常用语句
1:代入语句
信号量 <=敏感量表达式;
c<=a AND b;这是一个并发语句, a 和 b都是敏感量,并
发代入语句是进程的缩写。
可写成进程为:
PROCESS(a,b)
BEGIN
c<=a AND b;
END PROCESS;
> 总目录 退出
74
2:延时语句
( 1)惯性延时
系统或器件输出信号必须要有一个时间延时,,常常表示如下

c<=a AND b AFTER 10ns;
(2) 传输延时
用来描述总线延时、连接线延时以及 ASIC芯片延时。
c<=TRANSPORT (a AND b)AFTER 5ns;
> 总目录 退出
75
构造体的 RTL描述
一:目的合应用场合
用于逻辑仿真和综合,并可以最终生成硬件电路。
二:特点
1:贴近于逻辑连接的描述。
2,RTL描述都可以综合成逻辑电路。
3,VHDL语言中有少数的语句可以进行 RTL描述。
> 总目录 退出
76
三:描述时应注意的问题
1:‘ X?状态的传递
例,PROCESS(sel)
BEGIN
IF(sel=?1?)THEN
Y<=?0?;
ELSE ELSIF(sel=?0?)
Y<=?1?; Y<=?1?;
END IF ELSE
END PROCESS Y<=?X?;
END IF
END PROCESS
> 总目录 退出
77
2:寄存器设计的限制
( 1)禁止一个进程描述一个以上的寄存器
即一个进程只能有一个寄存器时钟。
如,PROCESS(clk1,clk2)是错误的,这是由于受综合的限制。
( 2)禁止用 ELSE项来描述寄存器。
例,PROCESS(clk)
BEGIN
IF(clk?EVENT AND clk=?1?)THEN
Y<=?a?;
ELSE
Y<=?b?;
END IF
END PROCESS
(3) 进程的最后结果应代入信号量。
(4) 联系多的一些电路尽可能放在 1个进程中来描述。
> 总目录 退出
78
结构体的结构化描述方式
一:应用场合
用在将已经设计好的编译模块连接起来,以便生成新的功能模块或者系
统。
这种方法和画电路图类似,高层次的模块可调用低层次的模块。
二:结构化描述的特点
1:与硬件连接关系密切。
2:多层次描述清晰。
3:要求设计者硬件知识较多。
4:可以进行逻辑综合。
> 总目录 退出
79
三:描述方法
1:元件描述语句
需要在构造体中说明的语句。
例,COMPONENT and2
PORT (a,b:IN BIT;c:OUT BIT);
END COMPONENT;
2:元件映射语句
u0:and2 PORT MAP(x1,x2,l1);
> 总目录 退出
80
ENTITY mux2 IS
PORT(d0,d1,sel,IN STD_LOGIC;
q:OUT STD_LOGIC)
END mux2;
ARCHITECTURE rtl OF mux2 IS
COMPONENT and2
PORT(a,b:IN STD_LOGIC;
c:OUT STD_LOGIC);
END COMPONENT;
COMPONENT or2
PORT(a,b:IN STD_LOGIC;
c:OUT STD_LOGIC);
END COMPONENT;
> 总目录 退出
81
COMPONENT inv
PORT(a:IN STD_LOGIC;
b:OUT STD_LOGIC);
END COMPONENT;
SIGNAL aa,ab,nsel:STD_LOGIC(信号量无方向)
BEGIN
u1:inv PORT MAP(sel,nsel);
u2:and2 PORT MAP(d1,nsel,ab);
u3:and2 PORT MAP(d0,sel,aa);
u4:or2 PORT MAP(aa,ab,q);
END rtl;
> 总目录 退出
82
说明:
元件映射的方法有两种:
( 1)顺序映射
上例为顺序映射。
( 2)名称映射
u2:and2 PORT MAP(a=>d1;b=>nsel;c=>ab)
名称映射时顺序可以颠倒。
> 总目录 退出
83
一位加法器
> 总目录 退出
84
说明:
元件映射的方法有两种:
( 1)顺序映射
上例为顺序映射。
( 2)名称映射
u2:and2 PORT MAP(a=>d1;b=>nsel;c=>ab)
名称映射时顺序可以颠倒。
> 总目录 退出
85
说明:
元件映射的方法有两种:
( 1)顺序映射
上例为顺序映射。
( 2)名称映射
u2:and2 PORT MAP(a=>d1;b=>nsel;c=>ab)
名称映射时顺序可以颠倒。
> 总目录 退出
86
ENTITY adder IS
PORT(a,b,ci:IN STD_LOGIC;
s,co:OUT STD_LOGIC);
END adder;
ARCHITECTURE rtl OF adder IS
BEGIN
PROCESS(a,b,ci)
VARIABLE axb,ab,axbc:STD_LOGIC;
BEGIN
axb:=a XOR b ;
ab:=a AND b;
axbc:=axb AND ci ;
s<=ci XOR axb;
co<=axbc OR ab;
END PROCESS;
END rtl;
> 总目录 退出
87
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY adder4 IS
PORT(a,b,IN STD_LOGIC_VECTOR(3 DOWNTO 0);
ci:IN STD_LOGIC;
co:OUT STD_LOGIC;
s:OUT STD_LOGIC_VECTOR(3 DOWNTO 0));
END adder4;
ARCHITECTURE rtl OF adder4 IS
COMPONENT adder
PORT(a,b,ci:IN STD_LOGIC;
s,co:OUT STD_LOGIC);
END COMPONENT;
> 总目录 退出
88
SIGNAL c0,c1,c2:STD_LOGIC;
BEGIN
u0:adder PORT MAP(a(0),b(0),ci,s(0),c0);
u1:adder PORT MAP(a(1),b(1),c0,s(1),c1);
u2:adder PORT MAP(a(2),b(2),c1,s(2),c2);
u3:adder PORT MAP(a(3),b(3),c2,s(1),co);
END rtl;
> 总目录 退出
89
VHDL语言的主要描述语句
两类描述语句
1:并发语句
在构造体中使用,是 VHDL 中最基本的语句。
2:顺序语句
只能在函数、过程、进程中使用。
> 总目录 退出
90
顺序描述语句
WAIT 语句
断言语句
信号代入语句
变量赋值语句
IF语句
CASE语句
LOOP语句
NEXT语句
EXIT语句
过程调用语句
NULL语句
> 总目录 退出
91
一,WAIT语句
1:格式
WAIT,表示无限等待
WAIT ON 信号,信号变化前处于等待,变化后进程执行,结束挂起等待状态
WAIT UNTIL *条件:条件满足后,结束等待状态。
WAIT FOR 时间,时间到后,结束等待。
2:说明
可以将上述 WAIT 语句“或”起来
带 *号的 WAIT 语句可以进行逻辑综合功能,其余只能进行行为描述。
无敏感量进程是无限等待循环的进程。
> 总目录 退出
92
IF语句
IF语句
1:开关控制
IF(clk?EVENT AND clk=?1?)THEN
q<=d;
END IF;
2,2选 1控制
IF 条件
顺序语句
ELSE
顺序语句
END IF;
3:多选择控制
IF 条件 1 THEN

ELSIF 条件 2 THEN
> 总目录 退出
93
1:开关控制
IF(clk?EVENT AND clk=?1?)THEN
q<=d;
END IF;
2,2选 1控制
IF 条件
顺序语句
ELSE
顺序语句
END IF;
3:多选择控制
IF 条件 1 THEN

ELSIF 条件 2 THEN

ELSIF 条件 n THEN

ELSE

END IF
> 总目录 退出
94
例:设计一个 4选 1数据选择器
> 总目录 退出
95
ENTITY mux4 IS
PORT(
Input:IN
STD_LOGIC_VECTOR(3 DOWNTO 0);
sel:IN
STD_LOGIC_VECTOR(1DOWNTO 0);
Y:OUT
STD_LOGIC);
END mux4;
ARCHITECTURE rtl OF mux4 IS
BEGIN
PROCESS(INPUT,SEL)
BEGIN
IF(sel=?00?)THEN
Y<=input(0);
ELSIF (sel=?01?)THEN
Y<=input(1);
ELSIF(sel=?10?)THEN
Y<=input(2);
ELSE
Y<=input(3);
END IF;
END PROCESS;
END rtl;
> 总目录 退出
96
CASE 语句
CASE 语句
格式:
CASE 表达式 IS
WHEN 条件表达式 =>顺序语句;
END CASE;
> 总目录 退出
97
ARCHITECTURE rtl OF max4 IS
BEGIN
PROCESS(sel,input)
BEGIN
CASE sel IS
WHEN,00”=>Y<=input(0);
WHEN,01”=>Y<=input(1);
WHEN,10”=>Y<=input(2);
WHEN,11”=>Y<=input(3);
WHEN OTHERS=>Y<=?X?;
END CASE;
END PROCESS;
END rtl;
> 总目录 退出
98
CASE 语句和 IF 语句的区别
( 1) IF语句按条件顺序处理,而 CASE语句按条件是无顺序处理,
从而 CASE语句不能用来设计优先编码器。
( 2) CASE语句必须列出所有条件,IF语句不一定,一般来说,列
出所有条件是不大可能的,故在 CASE语句中,常常在最后又
WHEN OTHERS 语句。
> 总目录 退出
99
LOOP语句
LOOP语句用于描述迭代电路,即将相同功能的电路串连起来,通
常有两种描述方式。
1,FOR循环变量
标号,FOR 循环变量 IN 离散范围 LOOP
顺序语句
END LOOP 标号;
循环变量无须在构造体内定义,这是语法规定,常取 I.
> 总目录 退出
100
例,PROCESS(a)
VARIABLE tmp:STD_LOGIC;
BEGIN
tmp:=0;
FOR I IN 0 TO 7 LOOP
tmp:=tmp XOR a(I);
END LOOP
Y<=tmp;
END PROCESS;
> 总目录 退出
101
NEXT 语句
格式:
NEXT [标号 ][WHEN] 条件
有标号时,跳到标号处,没有标号时,跳到下一个循环。
九,EXIT 语句
EXIT [标号 ][WHEN] 条件
有标号时跳到标号处,没有标号时,跳出本次循环。
NEXT语句在 LOOP内部使用,不能从一个 LOOP跳到另外一个 LOOP
中,而 EXIT 可以跳出 LOOP循环。
> 总目录 退出
102
作业:
设计一个,3- 8” 译码电路。
> 总目录 退出
103
并发描述语句
一:进程语句( PROCESS)
其格式已经在前面讲过,在这里只介绍一些注意事项。
1:构造体内可以有多个进程并发执行,进程里可以使用构造体定义的信号
量,尽量在进程内部使用变量,然后结果通过信号量带出。
2:进程中的语句都为顺序语句。
3:进程启动的条件:
( 1)进程敏感量时,敏感量变化,进程将启动。
( 2)若无敏感量,利用 WAIT语句控制,WAIT条件满足,进程启动一次。
( 3)无敏感量,也无 WAIT语句,则此进程为无限循环进程。
4:进程之间的同步和通信是通过信号量来实现的。
5:进程只能定义常数、变量,不能定义信号量。
> 总目录 退出
104
二:并发代入语句
一个并发代入语句是一个进程的缩写。
c<=a AND b是一个并发语句,这里 a,b都是信号量,而不是变量,因为
信号量才能在构造体中使用。
一个并发语句可以写成一个进程。
如,PROCESS(a,b)
BEGIN
c<=a AND b;
END PROCESS;
> 总目录 退出
105
三:条件代入语句
实质是在进程外部实现 IF 语句的功能,解决了在构造体中不能使用 IF语
句的问题,因为 IF语句是顺序语句,而条件代入语句是并发语句。
格式:
目的信号量 <=表达式 1 WHEN 条件 1 ELSE
表达式 2 WHEN 条件 2 ELSE

ELSE
表达式 n;
> 总目录 退出
106
四:选择信号代入语句
实质是在进程外部实现 CASE语句的功能。
格式:
WITH 表达式 SELECT
目的信号 <=表达式 1 WHEN 条件 1,
表达式 2 WHEN 条件 2,

表达式 n WHEN 条件 n;
> 总目录 退出
107
五:并发过程调用
过程的调用语句可在进程中使用,也可在构造体中使用,
在构造体重调用的过程为并发过程调用。
> 总目录 退出
108
GENERATE 语句
在进程外实现 LOOP语句的功能,用来产生多个相同的结构。
1,FOR_GENERATE
标号,FOR 变量 IN 离散区间 GENERATE
并发处理语句
END GENERATE 标号;
> 总目录 退出
109
ARCHITECTURE rtl OF shff IS
COMPONENT dff
PORT(d,clk:IN STD_LOGIC;
q:OUT STD_LOGIC);
END COMPONENT;
SIGNAL z:STD_LOGIC_VECTOR(4 DOWNTO 0);
BEGIN
z(0)<=a;
g1:FOR I IN 0 TO 3 GENERATE
dffx:dff PORT MAP(z(I),clk,z(I+1));
END GENERATE;
b<=z(4);
END rtl;
> 总目录 退出
110
例不用任何器件,直接用数学方法写。
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_ARITH.ALL;
USE IEEE.STD_LOGIC_UNSIGNED;(无符号数据包)
ENTITY adder4 IS
PORT(a,b:IN STD_LOGIC_VECTOR(3 DOWNTO 0);
s:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);
c30:OUT STD_LOGIC;
c1:IN STD_LOGIC);
END adder4;
ARCHITECTURE rtl OF adder4 IS
> 总目录 退出
111
BEGIN
PROCESS(a,b.c1)
VARIABLE a_v,b_v:INTEGER RANGE 0 TO 15;
VARIABLE s_v:INTEGER RANGE 0 TO 31;
VARIABLE c1_v:INTEGER RANGE 0 TO 1;
BEGIN
IF(c1=?1?)THEN
c1_v:=1;
ELSE
c1_v:=0;
END IF;
> 总目录 退出
112
a_v:=CONV_INTEGER(a);
b_v:=CONV_INTEGER(b);
s_v:=a_v+b_v+c1_v;
IF(s_v>=16)THEN
s_v:=s_v-16;
c3_0<=?1?;
ELSE
c3_0<=?0?;
END IF
S<=CONV_STD_LOGIC_VECTOR(s_v,4);
END PROCESS;
END rtl;
> 总目录 退出
113
双向驱动器
以 74LS245为例来说明。
74LS245的真值表为:
当 E= 1时,A,B均处于三态。
当 E= 0时,DR=0,则 B=>A;
DR=1,则 A=>B;
74LS245图为:
> 总目录 退出
114
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY tri_bigate IS
PORT( dr,e:IN STD_LOGIC;
a,b:INOUT
STD_LOGIC_VECTOR(7 DOWNTO 0)) ;
END tri_bigate;
ARCHITECTURE rtl OF tri_bigate IS
BEGIN
PROCESS(a,dr,e)
BEGIN
IF(e=?0? AND dr=?1?)
b<=a;
ELSE
b<=?z?;
END IF;
END PROCESS;
PROCESS(b,dr,e)
BEGIN
IF(e=?0? AND dr=?0?)THEN
a<=b;
ELSE
a<=?z?;
END IF;
END PROCESS;
> 总目录 退出
115
时序电路设计
一:时钟信号和复位信号的描述
1:时钟信号描述
上升沿,IF(clk?EVENT AND clk=?1?)THEN
下降沿,IF(clk?EVENT AND clk=?0?)THEN
2,复位信号描述
( 1)异步复位描述
PROCESS( clk,reset)
BEGIN
IF(reset=?0?)THEN
q<=?0?;
ELSIF (clk?EVENT AND clk=?1?)THEN
q<=d;
END IF;
END PROCESS;
> 总目录 退出
116
(2):同步复位描述
PROCESS(clk)
BEGIN
IF(clk?EVENT AND clk=?1?)THEN
IF(reset=?0?)THEN
q<=?0?;
ELSE
q<=d;
END IF;
> 总目录 退出
117
使用 8位触发器构成 8位移位寄存器
ARCHITECTURE rtl OF shift8 IS
SIGNAL df0_1,…df0_7,STD_LOGIC;
BEGIN
PROCESS(clk)
BEGIN
IF(clk?EVENT AND clk=?1?)THEN
df0_1<=a;
df0_2<= df0_1;
df0_3<= df0_2;
df0_4<= df0_3;
df0_5<= df0_4;
df0_6<= df0_7;
df0_7<= df0_6;
b<= df0_7;
END IF;
END PROCESS;
> 总目录 退出
118
PROCESS(clk)
VARIABLE df0_1,…df0_7, STD_LOGIC;
BEGIN
IF(clk?EVENT AND clk=?1?)THEN
df0_7:= df0_6;
df0_6:= df0_5;
df0_5:= df0_4;
df0_4:= df0_3;
df0_3:= df0_2;
df0_2:= df0_1;
df0_1:= a;
END IF;
END PROCESS;
> 总目录 退出
119
计数器可以采用
1:结构化方法,将触发器连接起来。
2:用整数计数方法来设计计数器。
例:设计 10进制计数器。
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_ARITH;
ENTITY cont10 OF IS
PORT(reset,en,clk:IN STD_LOGIC;
carry:OUT STD_LOGIC;
q:OUT STD_LOGIC_VECTOR(3 DOWNTO 0));
END cont10;
> 总目录 退出
120
ARCHTECTURE rtl OF cont10 IS
SIGNAL q:STD_LOGIC_VECTOR(3 DOWNTO 0);
SIGNAL ca:STD_LOGIC;
BEGIN
PROCESS(clk)
VARIABLE q10:INTEGER;
BEGIN
IF(clk?EVENT AND clk=?1?)THEN
IF(reset=?1?)THEN
q10:=0;
ELSIF(en=?1?)THEN
IF(q10=9)THEN
q10:=0;
ca<=?0?;
> 总目录 退出
121
ELSIF(q10=8)THEN
q10:=q10+1;
ca<=?1?;
ELSE
q10:=q10+1;
ca<=?0?;
END IF;
END IF;
END IF;
q<=CONV_LOGIC_VECTOR(q10,4);
END PROCESS;
> 总目录 退出
122
作业;
1、设计一个 4- 2优先编码器。
2、设计两个 10进制计数器串连起来的计数器。
> 总目录 退出