35
例例例例 例例例例例例 :一, X=x n-1 x n-2 …x 1 x 0 例例例例例例例例例例例Z 例例例例例 例例 X 例例例例 1 例例例 1 例 例例例 例例例 例例例例 X 例例例例 例例例例例例例例例例例例例 例例例例例例例例例例 一, 例例例 例例例例例 例 ,一 n 例例例例例例例例 例例 2 n 例例例例例例 例例例例例 例例例例例例例例例例例例例例例例 例例例例例例例 例例例 。, 2 n 例例例例 例例例例 例例例例例例例例例例 1 例例例例例例例例 例例例例例 例例例 ,, n+1 例例例 例例例例例例例例5-3 例例例例例例 VHDL 例例

例:试设计一个逻辑电路, X=x n -1 x n -2 …x 1 x 0 是该电路得串行输入信号, Z 为它的输出,表示 X 中包含的 1 个数。

  • Upload
    marlie

  • View
    98

  • Download
    0

Embed Size (px)

DESCRIPTION

输入序列 X. 含 1 统计电路. 统计结果. 5-3 硬件描述语言 VHDL. 例:试设计一个逻辑电路, X=x n -1 x n -2 …x 1 x 0 是该电路得串行输入信号, Z 为它的输出,表示 X 中包含的 1 个数。. 即:. 分析:. 对于这样一个看似十分简单的逻辑电路,却难以用状态表对它进行描述,对于这样一个 n 位的串行输入序列,将有 2 n 种不同的组合,显然不能按当前已收到的序列来规定电路的状态。如果这样规定,则需要 2 n 个状态;显然也不能按当前序列中已包含 1 的个数来规定状态,如果这样,则需要 n +1 个状态,状态表也将十分庞大。. - PowerPoint PPT Presentation

Citation preview

Page 1: 例:试设计一个逻辑电路, X=x n -1 x n -2 …x 1 x 0 是该电路得串行输入信号, Z 为它的输出,表示 X 中包含的 1 个数。

例:试设计一个逻辑电路, X=xn-1xn-2…x1x0 是该电路得串行输入信号, Z 为它的输出,表示 X 中包含的 1 个数。

含 1 统计电路 统计结果输入序列 X

对于这样一个看似十分简单的逻辑电路,却难以用状态表对它进行描述,对于这样一个 n 位的串行输入序列,将有 2n 种不同的组合,显然不能按当前已收到的序列来规定电路的状态。如果这样规定,则需要 2n 个状态;显然也不能按当前序列中已包含 1 的个数来规定状态,如果这样,则需要 n+1 个状态,状态表也将十分庞大。

5-3 硬件描述语言 VHDL

即:

分析:

Page 2: 例:试设计一个逻辑电路, X=x n -1 x n -2 …x 1 x 0 是该电路得串行输入信号, Z 为它的输出,表示 X 中包含的 1 个数。

由电路功能直接导出状态表的方法并非对所有的电路设计都是适用的,但如果从为实现上述功能必须完成的操作出发,问题就可能很容易解决。

由此可见:

(1) 该电路为统计序列中含有的“ 1” 的个数,必须包含有一个加 1 计数器。(2) 仅当输入信号为 1 时才进行加 1 计数,所以必须还应有判别操作,要做的工作就是设计判别电路和计数器,并配置相应的控制电路使它们能协调地工作,以完成预定的功能。

Page 3: 例:试设计一个逻辑电路, X=x n -1 x n -2 …x 1 x 0 是该电路得串行输入信号, Z 为它的输出,表示 X 中包含的 1 个数。

开始

Z 0 n 0

n n+1

x=1?

n=N?

Z Z+1

N

Y

N

Y

Page 4: 例:试设计一个逻辑电路, X=x n -1 x n -2 …x 1 x 0 是该电路得串行输入信号, Z 为它的输出,表示 X 中包含的 1 个数。

算法设计的思想:是把系统应实现的逻辑功能看作是应完成的某种运算或操作,若这一运算或操作十分复杂,则可以把它分解成若干个子运算或子操作系统的算法描述的特征。(1) 含有若干个子运算,实现对数据或信息的存储传输或处理。(2) 具有相应的控制程序,控制各子运算的执行顺序。在导出算法流图后,便可将电路划分成数据处理单元和控制单元。

控制器

计 A

计 B ZCP CR

CRC1

C2

Xn=N?

结束

Page 5: 例:试设计一个逻辑电路, X=x n -1 x n -2 …x 1 x 0 是该电路得串行输入信号, Z 为它的输出,表示 X 中包含的 1 个数。

硬件描述语言 VHDL 概述 : 随着超大规模集成电路工艺的发展,待设计电路的规模越来越大,传统的手工艺已无发适应设计复杂数字系统的要求。然而超大规模集成电路的发展也推动了计算机技术和数字技术的发展,使人们有可能开发出功能强大的电子设计自动化 ( 简称 EDA) 软件,从而改变了人们的设计思想和设计方法,实现设计自动化。

数字系统设计历来存在两个分支,即:系统硬件设计和系统软件设计,但是随着计算机技术的发展和硬件描述语言 HDL 的出现,使这种情况又有新的变化,数字系统的硬件结构及其行为完全可以用 HDL语言来描述和生成,这样即使是软件设计人员也同样可以方便的借助 HDL 语言,设计出符合要求的硬件系统。

Page 6: 例:试设计一个逻辑电路, X=x n -1 x n -2 …x 1 x 0 是该电路得串行输入信号, Z 为它的输出,表示 X 中包含的 1 个数。

另外也为数字系统的硬件、软件协同设计打下了良好的基础,数字系统的硬件、软件设计可以在一开始就进行通盘考虑,进行早期仿真,这就大大提高了系统设计的效率。所谓硬件描述语言:就是可以描述硬件电路的功能、信号连接关系及定时关系的语言。

Page 7: 例:试设计一个逻辑电路, X=x n -1 x n -2 …x 1 x 0 是该电路得串行输入信号, Z 为它的输出,表示 X 中包含的 1 个数。

1. 自下而上的设计方法 1. 自上而下的设计方法(核心是算法思想的设计 )

2.采用通用的逻辑元器件 2. 系统中可大量采用 ASIC芯片

3. 在系统硬件设计的后期进行仿真和调试

3. 系统采用早期仿真,降低了硬件电路设计难度

4.主要设计文件是原理图 4.主要设计文件是 HDL编写的源程序

传统的系统硬件设计方法与利用硬件描述语言(HDL) 的硬件电路设计方法的比较:

Page 8: 例:试设计一个逻辑电路, X=x n -1 x n -2 …x 1 x 0 是该电路得串行输入信号, Z 为它的输出,表示 X 中包含的 1 个数。

第三步:系统调试

从选择具体的元器件开始,并用这些元器件进行逻辑电路设计,完成系统各独立功能模块,然后再连接。

例:设计六进制计数器第一步:选择器件第二步:电路设计

S5S4

S3

S2S1S0

/0 /

0

/0

/0

/0

/0

Q3 Q2 Q1 Q3n+1 Q2

n+1 Q1

n+1 Z 0 0 0 0 0 1 0 0 0 1 0 1 0 0 0 1 0 0 1 1 0 0 1 1 1 0 0 0 1 0 0 1 0 1 0 1 0 1 0 0 0 1

Page 9: 例:试设计一个逻辑电路, X=x n -1 x n -2 …x 1 x 0 是该电路得串行输入信号, Z 为它的输出,表示 X 中包含的 1 个数。

313121

3 QQQQQQn

211231

2 QQQQQQn

11

1 QQn

13

123

QK

QQJ

12

132

QK

QQJ

1

1

1

1

K

J13QQZ

1J Q

K2

J Q

K3

J Q

K

& Z

CP

Page 10: 例:试设计一个逻辑电路, X=x n -1 x n -2 …x 1 x 0 是该电路得串行输入信号, Z 为它的输出,表示 X 中包含的 1 个数。

六进制计数器 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_ARITH.ALL;

PORT(clk,clr,en:IN STD_LOGIC; qa,qb,qc:OUT STD_LOGIC); END cnt6;

cnt6

clr

clk

qa

en 

qc

qb

ENTITY cnt6 IS

Page 11: 例:试设计一个逻辑电路, X=x n -1 x n -2 …x 1 x 0 是该电路得串行输入信号, Z 为它的输出,表示 X 中包含的 1 个数。

ARCHITECTURE rtl OF cnt6 IS SIGNAL q:STD_LOGIC_VECTOR(2 DOWNTO 0); BEGIN PROCESS(clk) VARIABLE q6:INTEGER; BEGIN IF(clk’EVENT AND clk=‘1’) THEN IF(clr=‘0’) THEN q6:=‘0’; ELSIF(en=‘1’) THEN IF(q6=5) THEN q6:=0;

Page 12: 例:试设计一个逻辑电路, X=x n -1 x n -2 …x 1 x 0 是该电路得串行输入信号, Z 为它的输出,表示 X 中包含的 1 个数。

ELSE q6:=q6+1; END IF; END IF; END IF; q<=CONV_STD_LOGIC_VECTOR(q6,3) qa<=q(0); qb<=q(1); qc<=q(2); END PROCESS; END rtl;

Page 13: 例:试设计一个逻辑电路, X=x n -1 x n -2 …x 1 x 0 是该电路得串行输入信号, Z 为它的输出,表示 X 中包含的 1 个数。

第一层:是行为描述,(较小规模系统时常常省略)实质是对整个系统的数学模型进行描述。

第二层:是 RTL(寄存器 ) 描述,要想得到硬件的具体实现,必须将行为方式描述的 VHDL 程序改写成 RTL 描述的 VHDL 程序。

第三层:是逻辑综合,将 RTL 描述的程序转换成用基本逻辑元件 (宏单元 ) 表示的文件,相当于在人工设计硬件电路时,根据系统要求画出了系统的电原理图。

Page 14: 例:试设计一个逻辑电路, X=x n -1 x n -2 …x 1 x 0 是该电路得串行输入信号, Z 为它的输出,表示 X 中包含的 1 个数。

一 . VHDL 语言描述数字系统的基本方法在电原理图中如果要描述一个”与非”,会想到两件事:

& cba

&cba

(1)确定输入输出 (2)确定功能

同理:在 VHDL 中,所有的部件 (小至一个门,大至一个 CPU芯片或整个系统 ) 都是用设计实体 (Design Entity) 来描述,设计实体是描述电路的基本方法。

描述电路的输入、输出

具体指明了对应的行为、元件及内部的连接关系,即定义具体的功能。

设计实体实体:

构造体:

Page 15: 例:试设计一个逻辑电路, X=x n -1 x n -2 …x 1 x 0 是该电路得串行输入信号, Z 为它的输出,表示 X 中包含的 1 个数。

1. 实体

ENTITY 实体名 IS [ 类属参数说明 ] [ 端口说明 ] END 实体名

*大写字母表示实体描述的框架,所用的词都是 VHDL 语言的保留用词,是不可缺少和省略的部分 ( 大小写视为一样,为区别,关键词用大写 ) 。

Page 16: 例:试设计一个逻辑电路, X=x n -1 x n -2 …x 1 x 0 是该电路得串行输入信号, Z 为它的输出,表示 X 中包含的 1 个数。

ENTITY mux2 IS GENERIC(m:TIME:=1ns); PORT(d0,d1,se1:IN BIT;

q:OUT BIT) ; END mux2

&

&1

>1d0

d1

se1

q

例: 二选一选择器电原理图

Page 17: 例:试设计一个逻辑电路, X=x n -1 x n -2 …x 1 x 0 是该电路得串行输入信号, Z 为它的输出,表示 X 中包含的 1 个数。

tmp2:=d1 AND(NOT se1);

tmp3:=tpm1 OR tmp2;

tmp<=tmp3

Q<=tmp AFTER m

END PROCESS;

END connect;

ARCHITECTURE connect OF mux2 IS SIGNAL tmp:BIT;BEGINPROCESS(d0,d1,se1)VARIABLE tmp1,tmp2,tmp3:BIT;BEGINtmp1:=d0 AND se1;

Page 18: 例:试设计一个逻辑电路, X=x n -1 x n -2 …x 1 x 0 是该电路得串行输入信号, Z 为它的输出,表示 X 中包含的 1 个数。

(1) 类属参数说明

( 必须放在端口说明之前,用于指定参数 ) GENERIC(m:TIME:=1ns) 该语句指定了构造体内m的值为 1ns,这样语句q<=tmp AFTER m;表示 tmp经 1ns才送到 q。即: GENERIC 利用类属参数为 q建立一个延迟值。(2) 端口说明

PORT(端口名 {, 端口名 }: 方向 数据类型名 端口名 {, 端口名 }: 方向 数据类型名 );

a) 端口名 :赋予每个外部引脚的名称,通常用一个或几个英文字母,或用英文字母加数字来命名之。

Page 19: 例:试设计一个逻辑电路, X=x n -1 x n -2 …x 1 x 0 是该电路得串行输入信号, Z 为它的输出,表示 X 中包含的 1 个数。

b) 端口方向 : 方向定义 含义 IN 输入 OUT 输出 (内部不可使用 ) INOUT 双向 BUFFER 输出 (内部可再使用 ) LINKAGE 不指定方向 ,无论哪

一方向都可连接

dclk

OUTq

dclk

q& BUFFER

Page 20: 例:试设计一个逻辑电路, X=x n -1 x n -2 …x 1 x 0 是该电路得串行输入信号, Z 为它的输出,表示 X 中包含的 1 个数。

c) 数据类型:

POPT(d0,d1,sel:IN BIT; q:OUT BIT;

bus:OUT BIT-VECTOR(T DOWNTO 0)

* 说明符号不同特别要注意

d0,d1,sel,q都是 BIT 类型“ 0” 或“ 1” ,

bus是 BIT-VECTOR类型,由 B7-B0 8位构成

在 VHDL中有 10 种标准数据类型,而在逻辑电路中常用到两种: BIT或 BIT-VECTOR( 一组二进制数的值 ) 。

例:

Page 21: 例:试设计一个逻辑电路, X=x n -1 x n -2 …x 1 x 0 是该电路得串行输入信号, Z 为它的输出,表示 X 中包含的 1 个数。

LIBRARY IEEE;

USE IEEE.STD-LOGIC-1164.ALL;

ENTITY mu IS

POPT(d0,d1,sel:IN STD-LOGIC;

q:OUT STD-LOGIC;

bus:OUT STD-LOGIC-VECTOR(T DOWNTO 0); END mu;STD-LOGIC 代替 BIT,类型不一样。有 9种。 BIT在 VHDL标准库中存在,不用说明, STD-LOGIC在 IEEE库的 1164集合中定义,必须加库说明和包说明语句 ( 在实体说明前 ) 。

Page 22: 例:试设计一个逻辑电路, X=x n -1 x n -2 …x 1 x 0 是该电路得串行输入信号, Z 为它的输出,表示 X 中包含的 1 个数。

ARCHITECTURE 构造体名 OF 实体名 IS [定义语句 ]内部信号 , 常数 ,数据类型 ,函数等的定义 ; BEGIN [并行处理语句 ]; END 构造体名 ; (1) 构造体名称的命名 可以由设计者自由命名 ,但大多数以行为 (behaviur)、数据流 (dateflow)、寄存器传输 (rtl)或者结构 (structural)、方程 (funct) 来命名,使得阅读者能直接进入设计者所采用的描述方式。

例: ARCHITECTURE STRUC/connect OF MUX IS 表明 connet是从属于MUX 的结构体。

2. 构造体

Page 23: 例:试设计一个逻辑电路, X=x n -1 x n -2 …x 1 x 0 是该电路得串行输入信号, Z 为它的输出,表示 X 中包含的 1 个数。

(2) 定义语句 位于 ARCHITECTURE 和 BEGIN之间,用于对构造体内部所使用的数据对象进行定义。VHDL 中由四类对象:SIGNAL( 信号 )、 VARIABLB( 变量 )、 CONSTANT(常量 )、 FILE(文件 ) 。

对象的说明格式为:对象类别 标示符表 ; 子类型标示 [:=初值 ]

数据类型 可缺省

SIGNAL clock:BIT; VARIABLE i:INTEGER:=13 CONSTANT delay:TIME:=5ns

例:

Page 24: 例:试设计一个逻辑电路, X=x n -1 x n -2 …x 1 x 0 是该电路得串行输入信号, Z 为它的输出,表示 X 中包含的 1 个数。

信号类型的对象相当于元件之间的连线,端口说明中的对象均为信号类型可不作说明,但需指明流向,而在结构体中则不需说明由内部信号流向决定。 VHDL 有很强的数据类型,但一个对象只能有一种类型,施加于该对象的操作必须与该类型匹配 (类型、位长 )

(a) 标准的数据类型 10 种整数、实数、位、位矢量、布尔量、字符、时间、错误等级、自然数、字符串。

Page 25: 例:试设计一个逻辑电路, X=x n -1 x n -2 …x 1 x 0 是该电路得串行输入信号, Z 为它的输出,表示 X 中包含的 1 个数。

(b) 用户定义的数据类型

例: TYPE week IS (sun,mon,tue,wed,thu,fri,sat);

(c) 用户定义的子类型

SUBTYPE iobus IS STD-LOGIC-VECTOR(7 DOWNTO 0);

TYPE 数据类型名 {, 数据类型名 } 数据类型定义 ,

格式:

整型、浮点型、枚举型、时间型等。

定义了一个 week 的数据类型,比使用代码0、 1 直观方便多了。

用户对已定义的数据类型,作一些范围的限制形成的一种新的数据类型 . 。格式: SUBTYPE 子类型名 IS 数据类型名 [范围 ]

例:

Page 26: 例:试设计一个逻辑电路, X=x n -1 x n -2 …x 1 x 0 是该电路得串行输入信号, Z 为它的输出,表示 X 中包含的 1 个数。

3. 运算操作符分三类 见 P278 表 5-3-1

算术运算符、关系运算符、逻辑运算符

Page 27: 例:试设计一个逻辑电路, X=x n -1 x n -2 …x 1 x 0 是该电路得串行输入信号, Z 为它的输出,表示 X 中包含的 1 个数。

二 . VHDL 语言的基本设计单元构成分五部分:库说明、集合说明、实体描述、构造体描述和配置描述。

LIBRARY IEEE; USE IEEE.STD-LOGIC-1164.ALL; ENTITY mux2 IS POPT(d0,d1,sel:IN STD-LOGIC; q:OUT STD-LOGIC); END mux2 ARCHITECTURE rtl OF mux2 IS BEGIN PROCESS(d0,d1,sel) VARIABLE tmp1,tmp2,tmp3:STD-LOGIC;

库说明 (因为使用了 IEEE库中定义的集合 ) 包集合说明STD-LOGI

C数据类型在 1164集合中定义实体说明

构造体说明

例:一个完整的设计单元构成

Page 28: 例:试设计一个逻辑电路, X=x n -1 x n -2 …x 1 x 0 是该电路得串行输入信号, Z 为它的输出,表示 X 中包含的 1 个数。

BEGIN tmp1:=d0 AND sel; tmp2:=d1 AND (NOT sel); tmp3:=tmp1 OR tmp2; END PROCESS; END trl; ARCHITECTURE rtl OF mux2 IS

END trl2; CONFIGURATION rtl-mux2 OF mux2 IS FOR trl1 END FOR;

END rtl-mux2;

…..

构造体说明

配置说明

在本例题中包含了一个实体和两个构造体,配置说明编译时应选中 rtl1构造体,如只有一个,配置说明可省。

Page 29: 例:试设计一个逻辑电路, X=x n -1 x n -2 …x 1 x 0 是该电路得串行输入信号, Z 为它的输出,表示 X 中包含的 1 个数。

1. 构造体的子结构描述 在规模较大的电路设计中,全部电路都用唯一的一个模块来描述是非常不方便的。为此,电路设计者总希望将整个电路分成若干个相对比较独立的模块来进行电路的描述。这样一个构造体可以用几个子结构,即:相对比较独立的模块来构成。VHDL 可以有三种形式的子结构描述语句BLOCK 、 PROCESS 、 SUBPROGRAMS

(a) 进程语句 PROCESS [进程标号 :] PROCESS[(敏感信号 )] [IS] < 说明区 > : 用以说明数据类型 ,子程序 ,变量 BEGIN <顺序语句 > END PROCESS[进程标号 ]

格式:

Page 30: 例:试设计一个逻辑电路, X=x n -1 x n -2 …x 1 x 0 是该电路得串行输入信号, Z 为它的输出,表示 X 中包含的 1 个数。

进程语句用于描述一个操作过程,进程内部是顺序执行的。敏感信号:对相对独立执行的并行语句进行协调,实行同步和异步操作。仅当敏感信号发生变化时,才被激活。例: P282-283

(b) 断言语句 ASSERTASSERT语句等价于一个进程语句,它不作任何操作,仅用以判断某一条件是否成立,若不成立,则报告一串信息给设计师。故称之为断言语句。

例: P284

Page 31: 例:试设计一个逻辑电路, X=x n -1 x n -2 …x 1 x 0 是该电路得串行输入信号, Z 为它的输出,表示 X 中包含的 1 个数。

2. 构造体的结构描述方式 所谓构造体的结构描述方式,就是在多层次的设计中,高层次的设计模块调用低层次的设计模块,或者直接用电路设计单元来构成一个复杂的逻辑电路的描述方式 .。

ENTITY mux2 IS PORT(d0,d1,sel:IN BIN;

q:OUT BIT);

例:&

&&

>1

U1

d1

sel

d0

U3

U2nselab

aaq

END mux2

Page 32: 例:试设计一个逻辑电路, X=x n -1 x n -2 …x 1 x 0 是该电路得串行输入信号, Z 为它的输出,表示 X 中包含的 1 个数。

ARCHITECTURE STRUCT OF mux2 IS COMPONENT and2 PORT(a,b:IN BIT;

c:OUT BIT; END COMPONENT; COMPONENT or 2 PORT (a,b:IN BIT; c:OUT BIT); END COMPONENT;

*COPONENT为实体内部元件的说明,指明了在该电路中所使用的已生成的模块,供本构造体调用。*用 PORT MAP() 语句将生成的模块端口与所设计的各模块端口联系起来*SIGNAL 为信号对象说明, aa 、 ab、 nesl为内部信号

SIGNAL aa,ab,nesl:BIT;BEGINU1:inv PORT MAP (sel,nesl);U2:and2 PORT MAP(nsel,d1,ab);U3:and3 PORT MAP(d0,sel,aa);U4:or2 PORT MAP(aa,ab,q);END struct;

Page 33: 例:试设计一个逻辑电路, X=x n -1 x n -2 …x 1 x 0 是该电路得串行输入信号, Z 为它的输出,表示 X 中包含的 1 个数。

按语句执行顺序分 :顺序描述语句

并发描述语句

例:进程语句是一个并发语句,在一个构造体内可以有几个进程语句同时存在,各进程语句是并发执行的,但是在进程内部所有的语句应是顺序描述语句。

三 . VHDL 语言的主要描述语言

顺序语句块一旦被激活,则其中的所有语句按顺序逐一被执行。并行语句的书写次序并不代表其执行的顺序,当并行语句块被激活时,将只执行被激活的语句。

Page 34: 例:试设计一个逻辑电路, X=x n -1 x n -2 …x 1 x 0 是该电路得串行输入信号, Z 为它的输出,表示 X 中包含的 1 个数。

CASE 语句 CASE 语句适用于两路或多路分支判断见: P280-P281

顺序描述语句信号代入语句 信号名 <= 表达式变量赋值语句 变量名 := 表达式

IF 语句 IF 语句为两语分支判断语句见: P280

LOOP 语句 LOOP 语句实现循环 (重复进行 )P281

NEXT 语句 在 LOOP 语句中 NEXT 语句用来 跳出本次循环,用于内部循环

EXIT 语句 结束循环状态,从 LOOP 语中跳 出,结束 LOOP 的正常执行

WAIT 语句NULL 语句 表示只占位置的一种空处理操作

Page 35: 例:试设计一个逻辑电路, X=x n -1 x n -2 …x 1 x 0 是该电路得串行输入信号, Z 为它的输出,表示 X 中包含的 1 个数。

四 . 程序包 在实体说明和结构体内部定义的数据类型,常量及子程序对其他设计实体是不可见的。为使它们对其他设计实体可见, VHDL提供了程序包机制。程序包由说明单元和包体单元构成。一般格式为:PACKAGE 程序包名 IS

< 说明单元 > END[程序包名 ]PACKAGE BODY 程序包名 IS

< 说明单元 > END[程序包名 ]例: P285 访问时只需加上 USE . 程序包名五 . 应用举例 P286-289 第 15章