fpga/cpld开发...

72
FPGA/CPLD 开发 简明教程 GW48 -CK 型 EDA 实验开发系统使用说明 杭州康芯电子有限公司 0571-88212487 www .electron-rnd.com

Upload: others

Post on 31-May-2020

22 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: FPGA/CPLD开发 简明教程bbs.sciencenet.cn/bbs/upload/14290FPGACPLD开发简明教程.pdf第一节 gw48-ck教学实验系统原理与 ... 第五节 abel-hdl 程序设计技巧 第六章

FPGA/CPLD 开发

简明教程 含 GW48-CK 型 EDA 实验开发系统使用说明

杭州康芯电子有限公司0571-88212487

www.electron-rnd.com

Page 2: FPGA/CPLD开发 简明教程bbs.sciencenet.cn/bbs/upload/14290FPGACPLD开发简明教程.pdf第一节 gw48-ck教学实验系统原理与 ... 第五节 abel-hdl 程序设计技巧 第六章

- 1 -

目 录

第一章 GW48-CK 系统使用说明

第一节 GW48-CK教学实验系统原理与

使用介绍

第二节 实验电路结构图

第三节 GW48 系统结构图信号名与芯片

引脚对照表

第二章 GWDVP 电子设计开发板

使用说明

第三章 ispLSI1032 结构介绍

第四章 EDA 软件安装

第五章 ABEL-HDL 基本元素与

语言结构

第一节 ABEL-HDL 基本元素

第二节 ABEL-HDL 基本语言结构

第三节 ABEL-HDL 基本语句用法

第四节 常用指示字

第五节 ABEL-HDL 程序设计技巧

第六章 ABEL-HDL 设计实例

6-1 四位双向三态缓冲器

6-2 四位加/减法可控计数器

6-3 四位比较器

6-4 七位序列检测器

6-5 五位可变模计数器

6-6 五功能逻辑笔

第七章 ispEXPERT/SYNARIO

编译控制方法

第一节 ABEL-HDL 属性设置控制方法

第二节 Synario 原理图逻辑属性设置

第三节 Synario 逻辑适配属性设置方法

第四节 ispLSI 优化设计向导

第五节 ABEL-HDL 设计的点扩展

第八章 在系统编程下载方式

第九章 ispEXPERT/SYNARIO 结构

概述

第十章 ispEXPERT 应用向导

第十一章 数字系统设计示例

11-1 英语字母显示电路

11-2 8 位加法器

11-3 8 位乘法器

11-4 序列检测器

11-5 正负脉宽数控调制信号发生器

第十二章 EDA/VHDL 实验

培训讲义

第十三章 GWDD6-C 型通用编

程下载器使用说明

Page 3: FPGA/CPLD开发 简明教程bbs.sciencenet.cn/bbs/upload/14290FPGACPLD开发简明教程.pdf第一节 gw48-ck教学实验系统原理与 ... 第五节 abel-hdl 程序设计技巧 第六章

第一章 GW48-CK 系统使用说明

第一节 GW48-CK 教学实验系统原理与使用介绍

一 GW48-CK 系统使用注意事项

a 闲置不用 GW48-CK EDA 系统时 关闭电源 拔下电源插头

b EDA 软件安装方法可参见光盘中相应目录中的中文 README.TXT 详细使用方法

可参阅本书或 VHDL 实用教程 中的相关章节

c 在实验中 当选中某种模式后 要按一下复位键 以使系统正式进入该模式工作

d 换目标芯片时要特别注意 不要插反或插错 也不要带电插拔 确信插对后才能开

电源 其它接插口都可带电插拔

e 若进行 DAC0832 接口实验 需自行提供-/+12V 电源 接入时 请特别注意极性

f 系统板上的空插座是为单片机 AT89C2051 准备的 除非进行单片机与 FPGA/CPLD 的接

口实验和开发 平时在此座上不允许插有任何器件 以免与系统上的其它电路发生冲突 单

片机与系统的连接情况可参阅以下的附图 2-13 该单片机和相应的编程器需自备或另购

g 对 CPLD 如 1032E/1048C 95108 或 7128S 等 下载时 最好将系统的电路 模式

切换到 b 以便使工作电压尽可能接近 5V

j: 最好通过对PC 机的 CMOS的设置 将打印机口的输入输出模式改成 EPP 模式

二 系统工作原理

附图 1-1A 为 GW48-CK 型 EDA 实验开发系统的板面结构图 附图 1-2 为其功能结构模块

图 图中所示的各主要功能

模块对应于附图 1-1A 的器

件位置恰好处于目标芯片适

配座 B2 的下方 由一微控

制器担任 其各模块的功能

分述如下 这部分内容可选

看或不看

1) BL1 实验或开发

所需的各类基本信号发生模

块 其中包括最多至 8 通道

的单次脉冲信号发生器 高

低电平信号发生器 BCD 码

或 16 进制码 8421 码 信

号发生器 所有这些

信号的发生主要由

BL6 主控单元产生

并受控于系统板上的

8个控制键

2) BL5

CPLD/FPGA 输出信息

显示模块 其中包括

直通非译码显示 BCD

七段译码显示 16 进制全码七段译码显示 两组 8 位发光管显示 16 进制输入信号显示指

附图 1-1B GW48 系统目标板插座引脚信号图

附表 1-1 在线编程坐各引脚与不同 PLD 公司器件编程下载接口说明

PLD 公司 LATTICE ALTERA/ATMEL XILINX VANTIS

编程座

引脚

IspLSI CPLD FPGA CPLD FPGA CPLD

TCK (1) SCLK TCK DCLK TCK CCLK TCK

TDO (3) MODE TDO

CONF_DONE TDO DONE TMS

TMS (5) ISPEN TMS nCONFIG TMS /PROGRAM ENABLE

nSTA (7) SDO nSTATUS TDO

TDI (9) SDI TDI DATA0 TDI DIN TDI

SEL0 GND VCC VCC GND GND VCC

SEL1 GND VCC VCC VC VCC GND

Page 4: FPGA/CPLD开发 简明教程bbs.sciencenet.cn/bbs/upload/14290FPGACPLD开发简明教程.pdf第一节 gw48-ck教学实验系统原理与 ... 第五节 abel-hdl 程序设计技巧 第六章

- 1 -

示 声响信号指示等

同样 所有这些显示形

式及形式的变换皆由

BL6 转换和独立控制

3 在 BL6 的监控

程序中安排了多达 12

种形式各异的信息矢量

分布 即 电路重构软

配置 由此可见 虽

然 GW48 系统从硬件结

构上看 是一个完全固

定下来的实验系统 但

其功能结构却等同于 12套实验接口迥异的实验系统 参见第二节

4) BL3 此模块主要是由一目标芯片适配座以及上面的 CPLD/FPGA 目标芯片和编程下

载电路构成 通过更换目标板 就能对多种目标芯片进行实验

5) BL6 使 GW48 系统的应用结构灵活多变 实际应用中 该模块自动读取 BL7 的选择

信息 以确定信息矢量分布 实验前 可根据实验类型 以及所需的 CPLD/FPGA 目标芯片

的 I/O 接口位置 从 14 张实验电路结构图 第二节 中找到相适应的实验系统功能结构

并将该图的编号键入 BL7 系统即刻进入了所需要的接口和实验模式

三 GW48-CK系统主板结构与使用方法

附图 1-1A 为 GW48-CK 型 EDA 实验开发系统的主板结构图 该系统的实验电路结构是可

控的 即可通过控制接口键 SW9 使之改变连接方式以适应不同的实验需要 因而 从物理

结构上看 实验板的电路结构是固定的 但其内部的信息流在主控器的控制下 电路结构将

发生变化 这种 电路重构软配置 设计方案的目的有 3个 1.适应更多的实验与开发项目

2. 适应更多的 PLD 公司的器件 3. 适应更多的不同封装的 FPGA 和 CPLD 器件 系统板面主

要部件及其使用方法说明如下 请参看附图 1-1A

1) SW9 按动该键能使实验板产生 12 种不同的实验电路结构 这些结构如第二节的

14 张实验电路结构图所示 例如选择了 NO.3 图 须按动系统板上的 SW9 键 直至数码

管 SWG9 显示 3 于是系统即进入了 NO.3 图所示的实验电路结构

2) B2 这是一块插于主系统板上的目标芯片适配座 对于不同的目标芯片可配不同

的适配座 可用的目标芯片包括目前世界上最大的六家 FPGA/CPLD 厂商几乎所有 CPLD 和

FPGA 第三节的表中已列出多种芯片对系统板引脚的对应关系 以利在实验时经常查用

3) J3B/J3A 如果仅是作为教学实验之用 系统板上的目标芯片适配座无须拔下 但

如果要进行应用系统开发 产品开发 电子设计竞赛等开发实践活动 在系统板上完成初步

仿真设计后 就有必要将连有目标芯片的适配座拔下插在自己的应用系统上 如 GWDVP板

进行调试测试 为了避免由于需要更新设计程序和编程下载而反复插拔目标芯片适配座

GW48 系统设置了一对在线编程下载接口座 J3A 和 J3B 此接口插座可适用于不同的

FPGA/CPLD 注意 1 此接口仅适用于 5V 工作电源的 FPGA 和 CPLD 2 5V 工作电源

必须由被下载系统提供 的配置和编程下载 对于低压 FPGA/CPLD 如 EP1K30/50/100

EPF10K30E 等 都是 2.5V 器件 下载接口座必须是另一座 ByteBlasterMV

(4)混合工作电压使用 对于低压 FPGA/CPLD 目标器件 在 GW48 系统上的设计方法

与使用方法完全与 5V器件一致 只是要对主板的跳线作一选择

跳线 JV2对芯核电压 2.5V或 1.8V作选择

接口方

式与接

口信息

矢量总

控制模

实验信号

源发生模

ispLSI

实验与接

口方式选

择器

接口信息

矢量转换

模块

ispLSI输出显

示模块

接口信息

矢量转换

模块

信息矢量通

接口控制信

信号显示方式控

BL6

BL1BL2 BL3 BL4 BL5

BL7

I/O接口信息交换通

信号源选择控

Page 5: FPGA/CPLD开发 简明教程bbs.sciencenet.cn/bbs/upload/14290FPGACPLD开发简明教程.pdf第一节 gw48-ck教学实验系统原理与 ... 第五节 abel-hdl 程序设计技巧 第六章

- 2 -

跳线 JVCC 对芯片 I/O 电压 3.3V(VCCIO)或 5V VCC 作选择 对 5V 器件 必须

选 VCC 例如 若系统上插的目标器件是 EP1K30/50/100或 EPF10K30E/50E等 要

求将主板上的跳线座 JVCC 短路帽插向 VCCIO 一端 将跳线座 JV2 短路帽插向

+2.5V 一端 如果是 5V器件 跳线应插向 VCC

5) J2 此接口通过下载线与微机的打印机口相连 来自 PC 机的下载控制信号和

散 热 器

B2适 配 座

目 标芯 片

J3B在 线下载 口

模拟

接口

接口

电路

切换

数码

8数

码7

数码

6数

码5

数码

4数

码3

数码

2数

码1

在 线下载 通讯接 口

单片

机接

口器

电源输入 PS/2接 口

D/A信

号输

A/D

信号

输入

A/D

信号

输入

超高速

串行

A/D座

高速

串行

A/D座

AD

C08

09

并行

模数

转换

器件

DA

C08

32

AD

1674

/AD

574

并行

模数

转换

器件

并行

数模

转换

器件

系统复位

时钟

发生

电路

接口

电路

视频

接口

电路

串行

EE

P R

OM接

口VGA

视 频 接 口

RS-232

串行 接 口

频率

0832工作电源

AS

IC

KO

NX

IN

模式

选择

VR

1

JMCU

J5

高频 时钟 源

50M晶 振

J4

FUSE

在线下载

接口

JVCC

JS6

JS5

JV2

RS

-232

J11

J10 串

行D

/A座

串行

A/D

JAV

8031

ADC08031 TLV1572

JTL

JSL DA

CC

AD

CC

TLC549 TLC5620

24CXX

93CXX

目 标板插座 1

目 标板插座 2

ByteBlasterMV

ByteBlaster

J7

J1

发光管

CON22

CON11

CP

LD/F

PG

A

目标

芯片

ED

A实

验开发

键1

D9

键2

D1

0

键3

D1

1

键4

D1

2

键8

D1

6

键7

D1

5

键6

D1

4

键5

D1

3

扬声

SWG9

模式

指示

SW

9S

W1

0

-12V

GND

+12V

时钟

频率

选择

S1

J2

J8J6

K1

+5V

GND电源输出

电源开关

C38

IN0

IN1

AO

UT

AIN

1

AIN

0

JP1A

JP1B

JP1C

中 频 组高频 组低频 组

B8

B4

B3

VG

A

Clock0

JP2

D8

D7

D6

D5

D4

D3

D1

D2

附图 1-1A GW48-CK 实验开发系统的板面结构图

Page 6: FPGA/CPLD开发 简明教程bbs.sciencenet.cn/bbs/upload/14290FPGACPLD开发简明教程.pdf第一节 gw48-ck教学实验系统原理与 ... 第五节 abel-hdl 程序设计技巧 第六章

- 3 -

CPLD/FPGA 的目标码将通过 J2 口 完成对 B2 上的目标芯片的编程下载 编程电路模块能自

动识别不同的 CPLD/FPGA芯片 并作出相应的下载适配操作

6) 键 1~键 8 为实验信号控制键 它在每一张电路图中的功能及其与主系统的连接

方式随 SW9的模式选择而变 使用中需参照第二节中的电路图

7) 数码管 1~8/发光管 D1~D16 它们的连线形式也需参照第二节的电路图

8) JP1A/JP1B/JP1C 为时钟频率选择模块 通过短路帽的不同接插方式 使目标芯

片获得不同的时钟频率信号 对于 JP1C 同时只能插一个短路帽 以便选择输向 CLOCK0

的一种频率 由于 CLOCK0 可选的频率比较多 所以比较适合于目标芯片对信号频率或周期

测量等设计项目的信号输入端 JP1B 分三个频率源组 即如系统板所示的 高频组 中

频组 和 低频组 它们分别对应三组时钟输入端 例如 将三个短路帽分别插于 JP1B 座

的 2Hz 1024Hz 和 12MHz 而另三个短路帽分别插于 JP1A 座的 CLOCK4 CLOCK7 和 CLOCK8

这时 输向目标芯片的三个引脚 CLOCK4 CLOCK7 和 CLOCK8 分别获得上述三个信号频率

需要特别注意的是 每一组频率源及其对应时钟输入端 分别只能插一个短路帽 也就是说

通过 JP1A/B 的组合频率选择 最多只能提供三个时钟频率

9) S1 目标芯片的声讯输出 可以通过在 JP1B 最上端是否插短路帽来选择是否将喇

叭接到目标芯片的 SPEAKER 口上 即 PIO50 通过此口可以进行奏乐或了解信号的频率

10) J7 为 PS/2 接口 通过此接口 可以将 PC 机的键盘或鼠标与 GW48 系统的目标

芯片相连 从而完成 PS/2通信与控制方面的接口实验 连接方式参见电路结构 NO.5B

11 J6 为 VGA视频接口 通过它可完成目标芯片对 VGA 显示器的控制

(12) 单片机接口器件 它与目标板的连接方式也已标于主系统板上 连接方式可参见

第 2节的 实验电路结构 NO.5B 注意 平时不能插单片机 以防冲突

13) J8 为 RS-232 串行通讯接口 此接口电路是为单片机与 PC 机通讯准备的 由此

可以使 PC 机 单片机 FPGA/CPLD 三者实现双向通信 当目标板上 FPGA/CPLD 器件需要直

接与 PC 机进行串行通讯时 可参见实验电路结构图 NO.5B 将标有 JMCU 处的两个插座

的短路帽同时向右插 以使单片机的 P3.0 和 P3.1 分别与目标芯片的 PIO31 和 PIO30 相接

而当需要使 PC 机的 RS232 串行接口与单片机的 P3.0 和 P3.1 口相接时 则应将标有 JMCU

处的两个插座的短路帽同时向左插 平时不用时也应保持这个位置

14) AOUT/JP2 利用此电路模块 可以完成 FPGA/CPLD 目标芯片与 D/A 转换器的接口

实验或相应的开发 它们之间的连接方式可参阅第二节的 实验电路结构 NO.5C D/A

的模拟信号的输出接口是 AOUT JP2 为转换方式和输出方式选择座 如系统板于 JP2 处

所示 1 当短路 D/A 锁存 时 则 D/A 的信号 WR 将受 PIO36 信号的控制 完成数据锁存

的输入方式 2 当短路 D/A 直通 则 D/A 的信号 WR 不受 PIO36 信号的控制 数据将直

通输入 3 当短路 0 to +5 时 D/A的模拟输出幅度处于 0至+12V 间 4 当短路 -5 to

+5 时 D/A 的模拟输出幅度处于-12V 至+12V 间 5 当分别短路 滤波 0 与 滤波 1

时 D/A 的模拟输出将获得不同程度的滤波效果 另外须注意 进行 D/A 接口实验时 需

要接上正负 12 伏工作电源 插座在主板的左上角 请注意极性

15) ADC0809/AIN0/AIN1 外界模拟信号可以分别通过系统板左下侧的两个输入端

AIN0 和 AIN1 进入 A/D 转换器 ADC0809 的输入通道 IN0 和 IN1 ADC0809 与目标芯片

直接相连 通过适当设计 目标芯片可以完成对ADC0809 的工作方式确定 输入端口选择

数据采集与处理等所有控制工作,并可通过系统板提供的译码显示电路 将测得的结果显示

出来 此项实验首先需参阅第二节的 实验电路结构 NO.5A 有关 0809 与目标芯片的接口

方式 同时了解系统板上的接插方法以及有关 0809 工作时序和引脚信号功能方面的资料

注意 不用 0809时 需将左下角JP2 的 A/D 禁止 用短路帽短接

16) JP2 左下角座 若将插座JP2的 A/D使能 短路 A/D禁止 开路 则 将ENABLE(9)

Page 7: FPGA/CPLD开发 简明教程bbs.sciencenet.cn/bbs/upload/14290FPGACPLD开发简明教程.pdf第一节 gw48-ck教学实验系统原理与 ... 第五节 abel-hdl 程序设计技巧 第六章

- 4 -

与 PIO35相接 若使 A/D使能 开路 A/D 禁止 短路 则使 ENABLE(9)ß0 表示禁止 0809

工作 使它的所有输出端为高阻态 若将插座 JP2 的 转换结束 短路 则使 EOC(7)ßPIO36

由此可使目标芯片对 ADC0809 的转换状态进行测控

17) VR1/AIN1 VR1 电位器 通过它可以产生 0V~+5V 幅度可调的电压 其输入口是

0809 的 IN1 与外接口 AIN1 相连 但当 AIN1 插入外输入插头时 VR1 将与 IN1 自动断开

若利用 VR1产生被测电压 则需使 0809的 25 脚置高电平 即选择 IN1 通道

18) AD574A 就一般的工业应用来说 AD574A 属高速高精度 A/D 器件 应用十分广

泛 系统所附的 AD574A 插座已接成双极性输入方式 信号输入口是 AIN0 AD574A 内置 10V

精密参考电压源 输入采样电压范围是 -10V~+10V 精度 12 位 最高位是符号位 转换速

度 20us AD574 或 10us AD1674 接线方式如下表所示

附表 1-1 GW48-C 系统上 AD574/1674 引脚端口与目标器件引脚连接对照表

AD574 端口 DB0 DB1 DB2 DB3 DB4 DB5 DB6 DB7 DB8

目标芯片引脚 PIO16 PIO17 PIO18 PIO19 PIO20 PIO21 PIO22 PIO23 PIO40

AD574 端口 DB9 DB10 DB11 12/8 CS A0 R/C CE STATUS

目标芯片引脚 PIO41 PIO42 PIO43 PIO34 PIO37 PIO36 PIO35 VCC/GND PIO33

使用时 需将系统板上的两个 3针座 J10/J11 短路帽靠右插 以使 PIO33 与 STATUS PIN28

及 AD574 的 CE PIN6 与 VCC 相接 注意 1 使用 AD574 时要接正负 12V 电压 2 不用 AD574

时应将 J10/J11 的短路帽都靠左插

19) AIN0 的特殊用法 系统板上设置了一个比较器电路 主要以 LM311 组成 若与 D/A

电路相结合 可以将目标器件设计成逐次比较型A/D 变换器的控制器件

20)SW10 系统复位键 此键是系统板上负责监控的微处理器的复位控制键 同时也

与接口单片机 AT89C2051的复位端相连 因此 可兼作单片机的复位键

(21)JS5/JS6 系统板硬件升级备用跳线插座 当需要硬件升级时 有关商家会通知接

插方式和使用方法

22) J4 电源输出插座 输出极性如图1-1A 所标 供实验之用

(23) CON1/2 目标芯片适配座 B2 的插座 在目标板的下方 两条插座的 80 个插针的

连接信号如附图 1-1B 所示 此图为用户对此实验开发系统作二次开发提供了条件 此二座

的位置设置方式和各端口的信号定义方式与综合电子设计竞赛开发板 GWDVP 完全兼容

举例说明 若通过键 SW9 选中了 实验电路结构图 NO.1 这时的 GW48 系统板所具有

的接口方式变为 FPGA/CPLD 端口 PI/O31~28 27~24 23~20 和 19~16 共 4 组 4 位二进

制 I/O 端口分别通过一个全译码型的 7段译码器输向系统板的 7段数码显示器 这样 如果

有数据从上述任一组四位输出 就能在数码显示器上显示出相应的数值 其数值对应范围为

FPGA/CPLD 输出 0000 0001 0010 … 1100 1101 1110 1111

数 码 管 显 示 0 1 2 … C D E F

端口 I/O32~39 分别与 8 个发光二极管 D8~D1 相连 可作输出显示 高电平亮 还可分

别通过键 8 和键 7 发出高低电平输出信号进入端口 I/049 和 48 键控输出的高低电平由

键前方的发光二极管 D16 和 D15 显示 高电平输出为亮 此外 可通过按动键 4 至键 1 分

别向 FPGA/CPLD 的 PIO0~PIO15 输入 4位 16进制码 每按一次键将递增 1 其序列为 1 2 …9

A …F 注意 对于不同的目标芯片 其引脚的 I/O 标号数一般是同 GW48 系统接口电路的

PIO 标号是一致的 但具体引脚号是不同的 而在逻辑设计中引脚的锁定数必须是该芯片的

具体的引脚号

(24) GW48-CK 系统板上接口器件 座 和跳线使用方法见第 8页

第二节 实验电路结构图

1 实验电路信号资源符号图说明

Page 8: FPGA/CPLD开发 简明教程bbs.sciencenet.cn/bbs/upload/14290FPGACPLD开发简明教程.pdf第一节 gw48-ck教学实验系统原理与 ... 第五节 abel-hdl 程序设计技巧 第六章

- 5 -

结合附图 2-1 以下对实验电路结构图中出现的信号资源符号功能作出一些说明

(1 附图 2-1a 是 16 进制 7 段全译码器 它有 7 位输出 分别接 7 段数码管的 7 个显示

输入端 a b c d e f 和 g 它的输入端为 D C B A D 为最高位 A 为最低位 例

如 若所标输入的口线为PIO19~16 表示 PIO19 接 D 18 接 C 17 接 B 16接 A

(2 附图 2-1b是高低电平发生器 每按键一次 输出电平由高到低 或由低到高变化一

次 且输出为高电平时 所按键对应的发光管变亮 反之不亮

(3 附图 2-1c 是 16 进制码 8421 码 发生器 由对应的键控制输出 4 位 2 进制构成的

1 位 16 进制码 数的范围是 0000~1111 即^H0 至^HF 每按键一次 输出递增 1 输出进

入目标芯片的 4位 2进制数将显示在该键对应的数码管上

(4 直接与 7段数码管相连的连接方式的设置是为了便于对 7段显示译码器的设计学习

以图 NO.2为例 如图所标 PIO46-PIO40 接 g f e d c b a 表示 PIO46 PIO45..PIO40

分别与数码管的 7段输入 g f e d c b a 相接

(5 附图 2-1d是单次脉冲发生器 每按一次键 输出一个脉冲 与此键对应的发光管也

会闪亮一次 时间 20ms

(6 实 验 电 路 结 构 图

NO.5 NO.5A NO.5B NO.5C

和 NO.5D 是同一种电路结构

只不过是为了清晰起见 将不

同的接口方式分别画出而已 由此可见 它们的接线有一些是重合的 因此只能分别进行实

验 而实验电路结构图模式都选 5

7 附图 2-1e是琴键式信号发生器 当按下键时 输出为高电平 对应的发光管发亮

当松开键时 输出为高电平 此键的功能可用于手动控制脉冲的宽度 具有琴键式信号发生

器的实验结构图是NO.3

2 各实验电路结构图特点与适用范围简述

1 结构图 NO.0 目标芯片的 PIO19 至 PIO44 共 8 组 4 位 2 进制码输出 经 7 段译码

器可显示于实验系统上的8个数码管 键 1和键 2可分别输出 2个四位 2进制码 一方面这

四位码输入目标芯片的 PIO11~PIO8和 PIO15~PIO12 另一方面 可以观察发光管 D1 至

D8 来了解输入的数值 例如 当键 1控制输入 PIO11~PIO8 的数为^HA 时 则发光管 D4 和 D2

亮 D3 和 D1 灭 电路的键 8 至键 3 分别控制一个高低电平信号发生器向目标芯片的 PIO7

至 PIO2 输入高电平或低电平 扬声器接在 SPEAKER 上 具体接在哪一引脚要看目标芯片

的类型 这需要查附录 3 如目标芯片为FLEX10K10 则扬声器接在 3 引脚上 目标芯片

的时时钟输入未在图上标出 也需查阅附录 3 例如 目标芯片为 XC95108 则输入此芯片

的时钟信号有 CLOCK0 至 CLOCK10 共 11 个可选的输入端 对应的引脚为 65 至 80 具体的

输入频率 可参阅附录 1的第三节 此电路可用于设计频率计 周期计 计数器等

(2 结构图 NO.1 适用于作加法器 减法器 比较器或乘法器 如欲设计加法器 可利

用键 4 和键 3 输入 8 位加数 键 2 和键 1 输入 8 位被加数 输入的加数和被加数将显示于

键对应的数码管 4-1 相加的和显示于数码管 6和 5 可令键 8控制此加法器的最低位进位

(3 结构图 NO.2 可用于作 VGA 视频接口逻辑设计 或使用 4 个数码管 8-数码管 5 作 7

段显示译码方面的实验

(4 结构图 NO.3 特点是有 8个琴键式键控发生器 可用于设计八音琴等电路系统

附图 2-1 实验电路信号资源符号图

Page 9: FPGA/CPLD开发 简明教程bbs.sciencenet.cn/bbs/upload/14290FPGACPLD开发简明教程.pdf第一节 gw48-ck教学实验系统原理与 ... 第五节 abel-hdl 程序设计技巧 第六章

- 6 -

HEX

PIO2PIO3PIO4PIO5PIO7 PIO6

D1D2D3D4D5D6D7D8

D16 D15 D14 D13 D12 D11

数码1数码2数码3数码4数码5数码6数码7数码8

NO.0

SP

EA

KE

R

扬声器

实验电路结构图

译码器 译码器 译码器 译码器 译码器 译码器 译码器 译码器

FPGA/CPLD

PIO15-PIO12

PIO11-PIO8

PIO7--PIO2

HEX

键1键2键3键4键5键6键7键8

PIO47-PIO44PIO43-PIO40PIO39-PIO36PIO35-PIO32PIO31-PIO28PIO27-PIO24PIO23-PIO20PIO19-PIO16

目标芯片

附图 2-2 实验电路结构图 NO.0

附图 2-3 实验电路结构图 NO.1

Page 10: FPGA/CPLD开发 简明教程bbs.sciencenet.cn/bbs/upload/14290FPGACPLD开发简明教程.pdf第一节 gw48-ck教学实验系统原理与 ... 第五节 abel-hdl 程序设计技巧 第六章

- 7 -

附图 2-4 实验电路结构图 NO.2

实 验 电路结 构图

NO.3

译 码 器译 码 器译 码 器译 码 器译 码 器译 码 器译 码 器译 码 器

D9D16 D15 D14 D13 D12 D11 D10

D8 D7 D6 D5 D4 D3 D2 D1

PIO8PIO9PIO10PIO11PIO12PIO13PIO14PIO15

SP

EA

KE

R

扬声器12345678

目 标芯 片FPGA/CPLD

PIO0PIO1PIO2PIO3PIO4PIO5PIO6PIO7

键 1键 2键 3键 4键 5键 6键 7键 8

PIO15-PIO8

PIO47-PIO44PIO43-PIO40PIO39-PIO36PIO35-PIO32PIO31-PIO28PIO27-PIO24PIO23-PIO20PIO19-PIO16

附图 2-5 实验电路结构图 NO.3

Page 11: FPGA/CPLD开发 简明教程bbs.sciencenet.cn/bbs/upload/14290FPGACPLD开发简明教程.pdf第一节 gw48-ck教学实验系统原理与 ... 第五节 abel-hdl 程序设计技巧 第六章

- 8 -

附图 2-6 实验电路结构图 NO.4

D1

PIO8

D2D3D4D5D6D7D8

PIO9PIO10PIO11PIO12PIO15 PIO14 PIO13

实验电路结构图

NO.5

SP

EA

KE

R

扬声器

FPGA/CPLD目标芯片

12345678

D16 D15 D14 D13 D12 D11 D10 D9

PIO47-PIO44PIO43-PIO40PIO39-PIO36PIO35-PIO32PIO31-PIO28PIO27-PIO24PIO23-PIO20PIO19-PIO16

译码器译码器 译码器译码器 译码器译码器 译码器译码器

PIO15-PIO8

单脉冲单脉冲单脉冲

PIO0PIO1PIO2PIO3PIO4PIO5PIO6PIO7

键1键2键3键4键5键6键7键8

附图 2-7 实验电路结构图 NO.5

Page 12: FPGA/CPLD开发 简明教程bbs.sciencenet.cn/bbs/upload/14290FPGACPLD开发简明教程.pdf第一节 gw48-ck教学实验系统原理与 ... 第五节 abel-hdl 程序设计技巧 第六章

- 9 -

附图 2-8 实验电路结构图 NO.6

D16 D15 D14 D13 D12 D11 D9

D8

PIO47

D7

PIO46

D6

PIO45

D5

PIO44

D4

PIO43

D3

PIO42

D2

PIO41 PIO40

D1

NO.7实验电路结构图

SP

EA

KE

R

扬声器

FPGA/CPLD目标芯片

12345678

PIO0PIO2PIO3PIO4PIO5PIO6PIO7

单脉冲单脉冲单脉冲

键1键2键3键4键5键6键7键8

PIO47-PIO40

PIO39-PIO36PIO35-PIO32PIO31-PIO28PIO27-PIO24PIO23-PIO20PIO19-PIO16

译码器 译码器译码器 译码器 译码器译码器

附图 2-9 实验电路结构图 NO.7

Page 13: FPGA/CPLD开发 简明教程bbs.sciencenet.cn/bbs/upload/14290FPGACPLD开发简明教程.pdf第一节 gw48-ck教学实验系统原理与 ... 第五节 abel-hdl 程序设计技巧 第六章

- 10 -

附图 2-10 实验电路结构图 NO.8

附图 2-11 实验电路结构图 NO.9

Page 14: FPGA/CPLD开发 简明教程bbs.sciencenet.cn/bbs/upload/14290FPGACPLD开发简明教程.pdf第一节 gw48-ck教学实验系统原理与 ... 第五节 abel-hdl 程序设计技巧 第六章

- 11 -

实验

电路

结构

图 N

O.5

A

D16

D15

D14

D13

D12

D11

D10

D9

D8

D7

D6

D5

D4

D3

D2

D1

PIO

8

JP2(

1/2,

3/4)

JP2(

5/6)

PIO

8SPEAKER

目标

芯片

FP

GA

/CP

LD

(23)

(24)

12 16

2726

10C

LOC

K75

0KH

ZA

750K

HZ

A

FIT

102

C30

103

C29

DA

-5--

+5

DA

0--+

5

PIO

38P

IO37

PIO

35

CO

MM

DA

WR

CO

MP

AD

EO

C

AD

EN

JP2

2018161412108642

191715131197531

02

1

VR

1

10K

VC

C

+5V

AIN

0

AIN

1

ref(

-)re

f(+

)

IN-1

IN-0

69

2225

7

1714158

18192021

EU

1

AD

C08

09

PIO

16P

IO17

PIO

18P

IO19

PIO

20P

IO21

PIO

22P

IO23

PIO

32

PIO

33P

IO35

PIO

34

msb

2-1

2-2

2-3

2-4

2-5

2-6

2-7

lsb2

-8

EO

C

AD

D-A

AD

D-B

AD

D-C

ALE

EN

AB

LE

ST

AR

T

扬声

PIO

39-P

IO36

PIO

43-P

IO40

PIO

47-P

IO44

12

34

56

78

数码

数码

数码

数码

数码

数码

数码

数码

译码

器译

码器

译码

单脉

冲单

脉冲

单脉

PIO

0P

IO1

PIO

2P

IO3

PIO

4P

IO5

PIO

6P

IO7

PIO

15P

IO14

PIO

13P

IO12

PIO

11P

IO10

PIO

9P

IO8

键1

键2

键3

键4

键5

键6

键7

键8

附图 2-12 实验电路结构图 NO.5A

Page 15: FPGA/CPLD开发 简明教程bbs.sciencenet.cn/bbs/upload/14290FPGACPLD开发简明教程.pdf第一节 gw48-ck教学实验系统原理与 ... 第五节 abel-hdl 程序设计技巧 第六章

- 12 -

D8

D7

D6

D5

D4

D3

D2

D1

译码

器译

码器

译码

器 D16

D15

D14

D13

D12

D11

D10

D9

实验

电路

结构

图 N

O.5

B

VC

C

目标芯片

FP

GA

/CP

LD

串行通讯接口

接口电路

J7

54 1 3P

IO4

5P

IO4

6P

S/2接口

单片机接口电路

23

5

接P

C机

RS

-232

B4

12M

HZ

A

键复位

PIO

11

PIO

12

PIO

13

PIO

14

SPEAKER

AT

89C

2051

EU

3

P3

4P

33

P3

2X

1X

2P

31

P3

0

P3

5

RS

T

GN

DP

37

P1

0P

11

P1

2P

13

P1

4P

15

P1

6P

17

VC

C123456789

10

11

12

13

14

15

16

17

18

19

20

PIO

15

PIO

24

PIO

25

PIO

26

PIO

27

PIO

28

PIO

29

PIO

30

PIO

31

扬声器

PIO

39

-PIO

36

PIO

43

-PIO

40

PIO

47

-PIO

44

12

34

56

78

数码

数码

数码

数码

数码

数码

数码

数码

单脉

冲单

脉冲

单脉

PIO

0P

IO1

PIO

2P

IO3

PIO

4P

IO5

PIO

6P

IO7

PIO

15

PIO

14

PIO

13

PIO

12

PIO

11

PIO

10

PIO

9P

IO8

键1

键2

键3

键4

键5

键6

键7

键8

附图 2-13 实验电路结构图 NO.5B

附图 2-14 实验电路结构图 NO.B

Page 16: FPGA/CPLD开发 简明教程bbs.sciencenet.cn/bbs/upload/14290FPGACPLD开发简明教程.pdf第一节 gw48-ck教学实验系统原理与 ... 第五节 abel-hdl 程序设计技巧 第六章

- 13 -

D16

D15

D14

D13

D12

D11

D10

D9

D1

PIO

8

D2

PIO

9

D3

PIO

10

D4

PIO

11

D5

PIO

12

D6

PIO

13

D7

PIO

14

D8

PIO

15

译码

器译

码器

译码

实验电路结构图

NO

.5C

FP

GA

/CP

LD

JP2

51pF

C27

JP2(

CO

MP

)

CO

MP

PIO

37

LM31

1

VC

C

10K

-12

+12 48

2 3

TL0

82/1

AIN

0

AO

UT

5.1K

102

103

+5

10K

5.1K 5.

1KR72

76 5

TL0

82/2

8 4

1

+12

-12

DA

0--+

5

DA

-5--

+5

滤波

0滤

波1

FIT

CO

MM

EU

2D

AC

0832

1 18 17 103

JP2(

9,10

)

PIO

38D

AW

R

2W

R1

FB

9

3211

IOU

T1

IOU

T2

12

/CS

WR

2X

FE

RA

GN

DD

GN

D

VR

EF

8

VC

C20

+5

VC

C

D0

D1

D2

D3

D4

D5

D6

D7

7 6 5 416 15 14 13

PIO

24P

IO25

PIO

26P

IO27

PIO

28P

IO29

PIO

30P

IO31

PIO

43-P

IO40

PIO

35-P

IO32

PIO

23-P

IO20

PIO

19-P

IO16

目标

芯片

PIO

47-P

IO44

译码

器译

码器

PIO

15-P

IO8

12

34

56

78

数码

数码

数码

数码

数码

数码

数码

数码

单脉

冲单

脉冲

单脉

PIO

0P

IO1

PIO

2P

IO3

PIO

4P

IO5

PIO

6P

IO7

键1

键2

键3

键4

键5

键6

键7

键8

附图 2-15 实验电路结构图 NO.5C

Page 17: FPGA/CPLD开发 简明教程bbs.sciencenet.cn/bbs/upload/14290FPGACPLD开发简明教程.pdf第一节 gw48-ck教学实验系统原理与 ... 第五节 abel-hdl 程序设计技巧 第六章

- 14 -

DA

CC

1K

REFS

1K

REFS

NO.5D

PIO34

PIO27

SDA

SCL

TEST

NC

NC

NC

PIO19

PIO17

PIO34

PIO27

GND

NC

NC

DOUT

DIN

SK

CS

24CXX93CXX

VCC8

7

6

54

3

2

1VCC

GND

VCC8

7

6

54

3

2

1 VCC

TLC549 VCC

PIO30

PIO29

8

7

6

54

3

2

1

PIO28

CS

DOUT

I/OCK

VCC

GND

REF-

AIN

REF+

JSL

14

13

12

11

10

9

87

6

5

PIO26

PIO24

PIO25

PIO31

VCC

LOAD

DACD

DACC

DACB

DACA

LDAC

CLK

DATA

REFD

REFC

REFB

REFA

TLC5620

GND

VCC

REFSS

VCC

REFS

JTL

JAV

PIO19

PIO18TLV1572

PIO17

SCLK

VCC

FS

DO

AIN

GND

VREF PIO34CS 8

7

6

54

3

2

1VCC

4

3

2

1

REFSSREFIN

CLK

VCC

PIO17

PIO34

PIO19

8031VIN-

VIN+

CS8

7

6

54

3

2

1

DOUT

GND

ADC08031 VCC

ADCC

D1

PIO8

D2D3D4D5D6D7D8

PIO9PIO10PIO11PIO12PIO15 PIO14 PIO13

实 验 电路结 构图

SP

EA

KE

R

扬声 器

FPGA/CPLD目 标芯 片

12345678

D16 D15 D14 D13 D12 D11 D10 D9

PIO47-PIO44PIO43-PIO40PIO39-PIO36PIO35-PIO32PIO31-PIO28PIO27-PIO24PIO23-PIO20PIO19-PIO16

译 码器译 码器 译 码器译 码器 译 码器译 码器 译 码器译 码器

PIO15-PIO8

单脉冲单脉冲单脉冲

PIO0PIO1PIO2PIO3PIO4PIO5PIO6PIO7

键 1键 2键 3键 4键 5键 6键 7键 8

附图 2-16 实验电路结构图 NO.5D

第三节 GW48-CK 系统结构图信号名与芯片引脚对照表

Page 18: FPGA/CPLD开发 简明教程bbs.sciencenet.cn/bbs/upload/14290FPGACPLD开发简明教程.pdf第一节 gw48-ck教学实验系统原理与 ... 第五节 abel-hdl 程序设计技巧 第六章

- 15 -

ispLSI 1032E

-PLCC84

ispLSI1048E

-PQFP128

FLEX EPF10K10

-PLCC84

XCS05/XCS10

-PLCC84

EPM7128S-PL84

EPM7160S-PL84

结构图

上的信

号名引脚

引脚名

引脚号 引脚名

引脚号 引脚名

引 脚

引脚名

引 脚

引脚名

PIO0 26 I/O0 21 I/O0 5 I/O0 3 I/O0 4 I/O0

PIO1 27 I/O1 22 I/O1 6 I/O1 4 I/O1 5 I/O1

PIO2 28 I/O2 23 I/O2 7 I/O2 5 I/O2 6 I/O2

PIO3 29 I/O3 24 I/O3 8 I/O3 6 I/O3 8 I/O3

PIO4 30 I/O4 25 I/O4 9 I/O4 7 I/O4 9 I/O4

PIO5 31 I/O5 26 I/O5 10 I/O5 8 I/O5 10 I/O5

PIO6 32 I/O6 27 I/O6 11 I/O6 9 I/O6 11 I/O6

PIO7 33 I/O7 28 I/O7 16 I/O7 10 I/O7 12 I/O7

PIO8 34 I/O8 29 I/O8 17 I/O8 13 I/O8 15 I/O8

PIO9 35 I/O9 30 I/O9 18 I/O9 14 I/O9 16 I/O9

PIO10 36 I/O10 31 I/O10 19 I/O10 15 I/O10 17 I/O10

PIO11 37 I/O11 32 I/O11 21 I/O11 16 I/O11 18 I/O11

PIO12 38 I/O12 34 I/O12 22 I/O12 17 I/O12 20 I/O12

PIO13 39 I/O13 35 I/O13 23 I/O13 18 I/O13 21 I/O13

PIO14 40 I/O14 36 I/O14 24 I/O14 19 I/O14 22 I/O14

PIO15 41 I/O15 37 I/O15 25 I/O15 20 I/O15 24 I/O15

PIO16 45 I/O16 38 I/O16 27 I/O16 23 I/O16 25 I/O16

PIO17 46 I/O17 39 I/O17 28 I/O17 24 I/O17 27 I/O17

PIO18 47 I/O18 40 I/O18 29 I/O18 25 I/O18 28 I/O18

PIO19 48 I/O19 41 I/O19 30 I/O19 26 I/O19 29 I/O19

PIO20 49 I/O20 42 I/O20 35 I/O20 27 I/O20 30 I/O20

PIO21 50 I/O21 43 I/O21 36 I/O21 28 I/O21 31 I/O21

PIO22 51 I/O22 44 I/O22 37 I/O22 29 I/O22 33 I/O22

PIO23 52 I/O23 45 I/O23 38 I/O23 35 I/O23 34 I/O23

PIO24 53 I/O24 52 I/O24 39 I/O24 36 I/O24 35 I/O24

PIO25 54 I/O25 53 I/O25 47 I/O25 37 I/O25 36 I/O25

PIO26 55 I/O26 54 I/O26 48 I/O26 38 I/O26 37 I/O26

PIO27 56 I/O27 55 I/O27 49 I/O27 39 I/O27 39 I/O27

PIO28 57 I/O28 56 I/O28 50 I/O28 40 I/O28 40 I/O28

PIO29 58 I/O29 57 I/O29 51 I/O29 41 I/O29 41 I/O29

PIO30 59 I/O30 58 I/O30 52 I/O30 44 I/O30 44 I/O30

PIO31 60 I/O31 59 I/O31 53 I/O31 45 I/O31 45 I/O31

PIO32 68 I/O32 60 I/O32 54 I/O32 46 I/O32 46 I/O32

PIO33 69 I/O33 61 I/O33 58 I/O33 47 I/O33 48 I/O33

PIO34 70 I/O34 62 I/O34 59 I/O34 48 I/O34 49 I/O34

PIO35 71 I/O35 63 I/O35 60 I/O35 49 I/O35 50 I/O35

PIO36 72 I/O36 66 I/O36 61 I/O36 50 I/O36 51 I/O36

PIO37 73 I/O37 67 I/O37 62 I/O37 51 I/O37 52 I/O37

PIO38 74 I/O38 68 I/O38 64 I/O38 56 I/O38 54 I/O38

PIO39 75 I/O39 69 I/O39 65 I/O39 57 I/O39 55 I/O39

PIO40 76 I/O40 70 I/O40 66 I/O40 58 I/O40 56 I/O40

PIO41 77 I/O41 71 I/O41 67 I/O41 59 I/O41 57 I/O41

PIO42 78 I/O42 72 I/O42 70 I/O42 60 I/O42 58 I/O42

PIO43 79 I/O43 73 I/O43 71 I/O43 61 I/O43 60 I/O43

PIO44 80 I/O44 74 I/O44 72 I/O44 62 I/O44 61 I/O44

PIO45 81 I/O45 75 I/O45 73 I/O45 65 I/O45 63 I/O45

PIO46 82 I/O46 76 I/O46 78 I/O46 66 I/O46 64 I/O46

PIO47 83 I/O47 77 I/O47 79 I/O47 67 I/O47 65 I/O47

PIO48 3 I/O48 85 I/O48 80 I/O48 68 I/O48 67 I/O48

PIO49 4 I/O49 86 I/O49 81 I/O49 69 I/O49 68 I/O49

SPKER 5 I/O50 87 I/O50 3 CLRn 70 I/O50 81 I/O59

CLOCK0 6 I/O51 88 I/O51 2 IN1 72 I/O52

Page 19: FPGA/CPLD开发 简明教程bbs.sciencenet.cn/bbs/upload/14290FPGACPLD开发简明教程.pdf第一节 gw48-ck教学实验系统原理与 ... 第五节 abel-hdl 程序设计技巧 第六章

- 16 -

ispLSI 1032E

-PLCC84

ispLSI1048E

-PLCC84

FLEX EPF10K10

-PLCC84

XCS05/XCS10

-PLCC84

EPM7128S-PL84

EPM7160S-PL84

结构图

上的信

号名引 脚

引脚名

引 脚

引脚名

引 脚

引脚名

引 脚

引脚名

引 脚

引脚名

CLOCK0 6 I/O51 88 I/O51 2 IN1 72 I/O52

CLOCK1 66 Y1 83 Y1 42 IN2 77 I/O53 69 I/O50

CLOCK2 7 I/O52 89 I/O52 43 GCK2 78 I/O54 70 I/O51

CLOCK3 8 I/O53 90 I/O53 44 IN3 79 I/O55 73 I/O52

CLOCK4 9 I/O54 91 I/O54 80 I/O56 74 I/O53

CLOCK5 63 Y2 80 Y2 83 OE 81 I/O57 75 I/O54

CLOCK6 10 I/O55 92 I/O55 82 I/O58 76 I/O55

CLOCK7 11 I/O56 93 I/O56 79 I/O57

CLOCK8 62 Y3 79 Y3 84 IN4 83 I/O59 80 I/O58

CLOCK9 12 I/O57 94 I/O57 1 GCK1 84 I/O60 83 IN1CLOCK10 13 I/O58 95 I/O58 2 IN4

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

XCS30

144-PIN TQFP

XC95108

XC9572

-PLCC84

EP1K100

EPF10K30E/50E

208-PIN P/RQFP

FLEX10K20

EP1K30/50

144-PIN TQFP

ispLSI 3256/A

-PQFP160

结构图

上的信

号名 引 脚

引脚名

引 脚

引脚名

引 脚

引脚名

引 脚

引脚名

引 脚

引脚名

PIO0 138 I/O0 1 I/O0 7 I/O 8 I/O0 2 I/O0

PIO1 139 I/O1 2 I/O1 8 I/O 9 I/O1 3 I/O1

PIO2 140 I/O2 3 I/O2 9 I/O 10 I/O2 4 I/O2

PIO3 141 I/O3 4 I/O3 11 I/O 12 I/O3 5 I/O3

PIO4 142 I/O4 5 I/O4 12 I/O 13 I/O4 6 I/O4

PIO5 3 I/O5 6 I/O5 13 I/O 17 I/O5 7 I/O5

PIO6 4 I/O6 7 I/O6 14 I/O 18 I/O6 8 I/O6

PIO7 5 I/O7 9 I/O7 15 I/O 19 I/O7 9 I/O7

PIO8 9 I/O8 10 I/O8 17 I/O 20 I/O8 11 I/O8

PIO9 10 I/O9 11 I/O9 18 I/O 21 I/O9 13 I/O9

PIO10 12 I/O10 12 I/O10 24 I/O 22 I/O10 14 I/O10

PIO11 13 I/O11 13 I/O11 25 I/O 23 I/O11 15 I/O11

PIO12 14 I/O12 14 I/O12 26 I/O 26 I/O12 16 I/O12

PIO13 15 I/O13 15 I/O13 27 I/O 27 I/O13 17 I/O13

PIO14 16 I/O14 17 I/O14 28 I/O 28 I/O14 25 I/O14

PIO15 19 I/O15 18 I/O15 29 I/O 29 I/O15 26 I/O15

PIO16 20 I/O16 19 I/O16 30 I/O 30 I/O16 28 I/O16

PIO17 21 I/O17 20 I/O17 31 I/O 31 I/O17 29 I/O17

PIO18 22 I/O18 21 I/O18 36 I/O 32 I/O18 30 I/O18

PIO19 23 I/O19 23 I/O19 37 I/O 33 I/O19 32 I/O19

PIO20 24 I/O20 24 I/O20 38 I/O 36 I/O20 33 I/O20

PIO21 25 I/O21 25 I/O21 39 I/O 37 I/O21 34 I/O21

PIO22 26 I/O22 26 I/O22 40 I/O 38 I/O22 35 I/O22

PIO23 28 I/O23 31 I/O23 41 I/O 39 I/O23 36 I/O23

PIO24 29 I/O24 32 I/O24 44 I/O 41 I/O24 37 I/O24

PIO25 30 I/O25 33 I/O25 45 I/O 42 I/O25 38 I/O25

PIO26 75 I/O26 34 I/O26 113 I/O 65 I/O26 82 I/O26

PIO27 77 I/O27 35 I/O27 114 I/O 67 I/O27 83 I/O27

PIO28 78 I/O28 36 I/O28 115 I/O 68 I/O28 84 I/O28

PIO29 79 I/O29 37 I/O29 116 I/O 69 I/O29 85 I/O29

PIO30 80 I/O30 39 I/O30 119 I/O 70 I/O30 86 I/O30

PIO31 82 I/O31 40 I/O31 120 I/O 72 I/O31 87 I/O31

PIO32 83 I/O32 41 I/O32 121 I/O 73 I/O32 88 I/O32

PIO33 84 I/O33 43 I/O33 122 I/O 78 I/O33 89 I/O33

Page 20: FPGA/CPLD开发 简明教程bbs.sciencenet.cn/bbs/upload/14290FPGACPLD开发简明教程.pdf第一节 gw48-ck教学实验系统原理与 ... 第五节 abel-hdl 程序设计技巧 第六章

- 17 -

XCS30

144-PIN TQFP

XC95108

XC9572

-PLCC84

EP1K100

EPF10K30E/50E

208-PIN P/RQFP

FLEX10K20

EP1K30/50

144-PIN TQFP

ispLSI 3256/A

-PQFP160

结构图

上的信

号名 引 脚

引脚名

引 脚

引脚名

引 脚

引脚名

引 脚

引脚名

引 脚

引脚名

PIO34 85 I/O34 44 I/O34 125 I/O 79 I/O34 90 I/O34

PIO35 86 I/O35 45 I/O35 126 I/O 80 I/O35 92 I/O35

PIO36 87 I/O36 46 I/O36 127 I/O 81 I/O36 93 I/O36

PIO37 88 I/O37 47 I/O37 128 I/O 82 I/O37 94 I/O37

PIO38 89 I/O38 48 I/O38 131 I/O 83 I/O38 95 I/O38

PIO39 92 I/O39 50 I/O39 132 I/O 86 I/O39 96 I/O39

PIO40 93 I/O40 51 I/O40 133 I/O 87 I/O40 105 I/O40

PIO41 94 I/O41 52 I/O41 134 I/O 88 I/O41 106 I/O41

PIO42 95 I/O42 53 I/O42 135 I/O 89 I/O42 108 I/O42

PIO43 96 I/O43 54 I/O43 136 I/O 90 I/O43 109 I/O43

PIO44 97 I/O44 55 I/O44 139 I/O 91 I/O44 110 I/O44

PIO45 98 I/O45 56 I/O45 140 I/O 92 I/O45 112 I/O45

PIO46 99 I/O46 57 I/O46 141 I/O 95 I/O46 113 I/O46

PIO47 101 I/O47 58 I/O47 142 I/O 96 I/O47 114 I/O47

PIO48 102 I/O48 61 I/O48 143 I/O 97 I/O48 115 I/O48

PIO49 103 I/O49 62 I/O49 144 I/O 98 I/O49 116 I/O49SPEAKER 104 I/O 63 I/O50 148 I/O 99 I/O50 117 I/O50

CLOCK0 111 65 I/O51 182 I/O 54 INPUT1 118 I/O

CLOCK1 113 66 I/O52 183 I/O 55 GCLOK1 119 I/O

CLOCK2 114 67 I/O53 184 I/O 124 INPUT3 120 I/O

CLOCK3 106 68 I/O54 149 I/O 100 I/O51 121 I/O

CLOCK4 112 69 I/O55 150 I/O 101 I/O52 103 Y2

CLOCK5 115 70 I/O56 157 I/O 102 I/O53 122 I/O

CLOCK6 116 71 I/O57 170 I/O 117 I/O61 123 I/O

CLOCK7 76 72 I/O58 112 I/O 118 I/O62 102 Y3

CLOCK8 117 75 I/O60 111 I/O 56 INPUT2 124 I/O

CLOCK9 119 79 I/O63 104 I/O 125 GCLOK2 126 I/OCLOCK10 2 103 I/O 119 I/O63 101 Y4

下文接第二节

(5 结构图 NO.4 适合于设计移位寄存器 环形计数器等 电路特点是 当在所设计

的逻辑中有串行 2进制数从 PIO10 输出时 若利用键 7作为串行输出时钟信号 则 PIO10 的

串行输出数码可以在发光管 D8 至 D1 上逐位显示出来 这能很直观地看到串出的数值

(6 结构图 NO.5 特点有 3个单次脉冲发生器

(7 结构图 NO.6 此电路与 NO.2 相似 但增加了两个 4 位 2 进制数发生器 数值分别

输入目标芯片的 PIO7~PIO4 和 PIO3~PIO0 例如 当按键 2 时 输入 PIO7~PIO4 的数值将

显示于对应的数码管 2 以便了解输入的数值

(8 结构图 NO.7 此电路适合于设计时钟 定时器 秒表等 因为可利用键 8 和键 5 分

别控制时钟的清零和设置时间的使能 利用键 7 5 和 1 进行时 分 秒的设置

(9 结构图 NO.8 此电路适用于作并进/串出或串进/并出等工作方式的寄存器 序列检

测器 密码锁等逻辑设计 它的特点是利用键 2 键 1 能序置 8 位 2 进制数 而键 6 能发出

串行输入脉冲 每按键一次 即发一个单脉冲 则此 8位序置数的高位在前 向 PIO10 串行

输入一位 同时能从 D8至 D1 的发光管上看到串形左移的数据 十分形象直观

(10 结构图 NO.9 若欲验证交通灯控制等类似的逻辑电路 可选此电路结构

(11 结构图 NO.5A 此电路即为 NO.5 可用于完成 A/D 转换方面的实验

(12 结构图 NO.5B 此电路可用于单片机接口逻辑方面的设计 以及 PS/2 键盘接口方

面的逻辑设计 平时不要把单片机接上 以防口线冲突

Page 21: FPGA/CPLD开发 简明教程bbs.sciencenet.cn/bbs/upload/14290FPGACPLD开发简明教程.pdf第一节 gw48-ck教学实验系统原理与 ... 第五节 abel-hdl 程序设计技巧 第六章

- 18 -

(13 结构图 NO.5C 可用于 D/A 转换接口实验和比较器 LM311 的控制实验

(14 结构图 NO.5D 可用于串行 A/D D/A 及 EEPROM 的接口实验 在系统板上 图中所

列的 6类器件只提供了对应的接口座 用户可根据具体使用的需要 自行购买插入 但必须

注意 这六种器件以及系统板上的 0809 在与目标 FPGA/CPLD 的接口上有复用 因此不能将

他们同时都插在系统板上 应根据需要和接线情况分别插上需要的 A/D 和 D/A 芯片对 详细

情况可参阅结构图NO.5A和 NO.5D

可利用的接口器件有以下 6类 他们与系统板上的 FPGA/CPLD 的接口如附图 2-16 所示

1 93CXX 系列串行 EEPROM

2 24CXX 系列串行 EEPROM

3 TLC549 串行 A/D器件 两针座 ADCC 一端接地 另一端接此器件的模拟输入 AIN

其参考电压输入由跳线座 JSL 控制 短接 REFI 获得 VCC 的分压 约 2.5V 若短接

REFO 则由外部获得参考电压 此电压输入端是六针座 DACC 的 REFIN 端 注意

此端口也是 TLC5620 的外部参考电压输入端

4 高速串行 A/D 器件 ADC08031 三针座 8031 的一端接地 另两端分别接差分模拟

信号输入 VIN+ 和 VIN- 其参考信号电压输入由三针跳线座 JTL 分别可选 2.5V 和

VCC 注意 此跳线座也决定 TLV1572 的参考电压输入

5 超高速串行 A/D器件 TLV1572 其模拟信号输入端为 JAV

6 串行 D/A 器件 TLC5620 其 4 通道模拟信号输出端为 DACC 参考信号与 TLC549

相同

上述各器件的使用方法 工作时序和购买途径可参阅光盘中相关资料和网站

WWW.P8S.COM

(15 当系统上的 模式指示 数码管显示 A 时 系统将变成一台频率计 数码管 8

将显示 F 数码 6 至 数码 1 显示频率值 最低位单位是 Hz 测频输入端为系统板

右下角的 JP1B 插座

第二章 GWDVP 开发板使用介绍

一 GWDVP 板含

1 单片机系统 通过改变 FPGA/CPLD 中的逻辑结构和跳线 可使它们与 ROM/RAM

构成单片机总线工作系统 单片机最小系统 单片机独立工作系统 此工作方式最为灵活

如与 A/D 结合可构成类似于 DMA 的高速数据采集系统

2 显示系统 它们由 8 个数码显示器和 8 个发光管构成的具有独立电源驱动的串行静

态显示系统 静态显示系统的优点是 显示亮度度好 显示稳定 占用单片机端口少 P3.0

和 P3.1---此 2 口都为输入方式 可复用 且竞赛项目通常无 RS232 通信 单片机编程方便

中断控制设计方便 编程控制简单 增加数码管的软硬件更改也十分简单 特别是 串行静

态显示系统很容易构成具有独立电源驱动的系统 这对提高主系统的工作稳定性 减少干扰

及系统中的 A/D 和 D/A 的工作精度尤为重要

3 ROM/RAM 系统 通过 GWDVP 板上的跳线设置和 4053 构成的电子开关系统 可

构成不同的工作方式 如 单片机最小系统存储方式 DMA 方式 硬件高速计算方式 波

形发生数据存储器等 又由于 ROM/RAM 座是与系统中的 FPGA/CPLD 直接相接的 所以

此座可根据需要插不同型号和容量的存储器 如 27C512 27E512 27C256 27C128 27C64

28C64 28E64 6264 62256 等

4 通用 FPGA/CPLD 接插系统 这是 GWDVP 板最具特点的结构 它由 48 脚双排座

Page 22: FPGA/CPLD开发 简明教程bbs.sciencenet.cn/bbs/upload/14290FPGACPLD开发简明教程.pdf第一节 gw48-ck教学实验系统原理与 ... 第五节 abel-hdl 程序设计技巧 第六章

- 19 -

构成 它将 GWDVP 系统构成了一个有机整体 其上可插含有不同型号 不同公司 不同

逻辑容量和不同封装 FPGA/CPLD 的目标板 见彩页表 1 如 ispLSI1032 ispLSI1048

ispLSI3256 EPM7128S EPF10K10 EPF10K20 EPF10K30 EPF6016 XCS10 XC95108

等等 这样就不会出现逻辑资源不够用的尴尬局面了 FPGA/CPLD 接插系统的物理结构

每一引脚的命名定义 其上的 FPGA/CPLD 目标芯片的引脚锁定查表方法 在系统下载方法

等都与 GW48-CK 型 EDA 系统完全兼容 会用 GW48-CK 即会用 GWDVP 对 GWDVP 上

的 FPGA/CPLD 下载 可通过 GW48-CK 上的在线下载口 用配置的 10 芯下载线进行在系

统下载 而不必拔下 GWDVP 上的目标芯片

其上的 FPGA/CPLD 的时钟信号源由两个 12MHz 和 50MHz 它们确保了 FPGA/CPLD

优秀的高速性能的有效发挥 用户可根据需要设置

5 A/D 转换系统 该系统由两片 ADC0832 构成 一片用作模拟信号或波形输出 另

一片用于对第一片的参考电压进行实时数控 从而可自动控制模拟信号的输出幅度 又由于

此系统是与 ROM/RAM 直接相接 因而可以实现高速模拟信号输出

此系统还接有一个二阶有源滤波电路 一个一阶有源滤波电路 及一个 8 阶可数控的滤

波电容网络开关系统 从而可使输出波形在不同频率条件下都有良好的波形和幅频特性

6 D/A 转换系统 由 AD574 或 AD674 或 AD1674 构成 接成双极性输入方式 输

入信号-10V 至 +10V 精度 12 位 最高位为符号位 内置+10V 精密参考电压 最大转换

速度 1 次/10uS LM356构成阻抗变换电路 4052 构成信号多路切换电路 由于与 FPGA/CPLD

直接相接 故可进行高速采样

7 串行 EEPROM 由 93C46 构成 与单片机直接相接 这是智能化仪表十分常用

的电路结构

8 键控系统 GWDVP 板上已安排了 8 个键 可按逐次查询方式编程控制 如果要

增加键 可在所给的 8 芯插座上插 16 键的插口 可按阵列扫描方式编程控制

二 GWDVP 板使用注意

GWDVP 板使用和焊接前 应仔细参阅它的原理图和 PCB 板图 GWDVP1.PCB/S01

1 兼容性 开发中 GWDVP 板必须与 GW48-CK 系统配合使用 这表现在

1 必须利用 GW48-CK 提供的 10 芯在系统下载接口和通信线进行下载

2 GWDVP 板与 GW48-CK 上的 FPGA/CPLD 目标芯片板相互间完全兼容 因此可以

使用 GW48-CK 系统所有可配的目标芯片 所以在利用 GWDVP 板开发时 就没有了逻辑

资源不够用的担心 也没有对使用 FPGA/CPLD 型号和生产厂家的限制 这正是 GWDVP

板的最大特点

3 GWDVP 板的 FPGA/CPLD 目标芯片板上的引脚定义和使用情况与 GW48-CK 相同

都必须参考本教程第一章第 3 节的列表 即会用 GW48-CK 就会用 GWDVP 板

2 原理图和元件参数 GWDVP 的详细电路结构和板上的电阻电容硬件参数可参阅

所配光盘中的 GWDVP 目录内 PCB 版图 DOS3.1 版 PROTEL GWDVP1.PCB 和原理

图 GWDVP1.S01 电阻 电容的标值以原理图中的的标值为准 如 C39=560P

注意 如果要使 GWDVP 板上的单片机与 EPROM 27C512 连成总线工作方式 如果

发现原理图上的单片机的时钟锁存信号脚 ALE 单片机第 30 脚 空着 需要在 GWDVP 板

上用连线将此脚 ALE 连接到 FPGA/CPLD 的 CLOCK5 6 或 7 见 GWDVP 板 CON2

插座旁的 CK3 座 如果不作总线工作方式 不必焊接此线

该目录中还有与 GWDVP 系统相配的单片机子程序 GWDVP.ASM 加 减 乘 除

开方计算 数码显示 键盘控制 BCD 码到 2 进制码转换 2 进制码到 BCD 码转换等子程

序 设计示例等 注意 单片机的堆栈必须设在 60H 方法可参考 GWDVP1.ASM

使用方法如下

Page 23: FPGA/CPLD开发 简明教程bbs.sciencenet.cn/bbs/upload/14290FPGACPLD开发简明教程.pdf第一节 gw48-ck教学实验系统原理与 ... 第五节 abel-hdl 程序设计技巧 第六章

- 20 -

1 显示子程序 程序名 DIRR0 使用方法见 5

2 键盘子程序 程序名 KKEYI 每调用一次 则对 P1 口上的 8 个见扫描检测一

次 如果无按键信号 将不跳出此子程序 直到测到有按键信号为止 返回的数据在 ACC

中 ACC 中的数与 P1 口的某一端口序号一样 如 ACC=3 即表示 P1.3 上有按键信号

3 数码管熄灭子程序 程序名 NL0

4 单片机测频率子程序 程序名 PROSD 每调用一次 即对单片机 P3.5 口上的

信号频率测试一次 测频范围 1Hz —500KHz 测出的频率显示在数码管上 最低一位 左

第 7 个 的单位是 Hz

5 除法子程序 程序名 DIVD1 即 2N 字节 2 进制 的数除以 1N 字节的数 被

除数字节数放在 30H 单元中 除数字节数放在 31H 单元中 例如 N=3 则 6 个字节的被除

数分别放在 4AH 4BH 4CH 4DH 4EH 4FH 单元中 而 3 个字节的除数分别放在

5DH 5EH 5FH 单元中 计算后的商放在 4DH 4EH 4FH 单元中 高位都放在

左面

6 无符号加法子程序 程序名 ADDMB

7 N 字节乘 M 字节乘法子程序 程序名 MULNM

8 2 进制码至 BCD 码转换子程序 程序名 HEXBCD2

9 快速乘法子程序 程序名 MULT3

10 N 字节压缩 BCD 码至 M 字节 2 进制码转换子程序 程序名 BCDHEX1

11 带符号原码加法子程序 程序名 ADDS1

12 开方子程序 程序名 SQR1

13 串行 EEPROM93C46 读数子程序 程序名 SEPRD 16 位读数方式 先将数据

地址 00H-3FH 放在 22H 单元中 再调用子程序 LCALL SEPRD 读出的数放在 21H

和 20H 单元中 高位在前

14 串行 EEPROM93C46 写数子程序 写数顺序 先调用写允许子程序 LCALL

EABLE 再将 8 位地址数 XXH 待写入的高 8 位字节和低 8 位字节分别放在 22H 21H

和 20H 单元中 然后调用写子程序 LCALL SEPWR 最后调用写禁止子程序 LCALL

DISLE

3 焊接注意 元件必须分焊在板的正 有字的一面 反两面 焊接顺序是 先焊正

面的所有元件 或元件 IC 插座 但是 AD574J 即 IC5 的座要待反面的 S10 10V 插

座焊好后再焊 插座 跳线座 电源座 晶振等 然后在反面焊两个 40PIN 用于插 7 个数

码管的 DIP IC 座 此两座就焊在 IC81 —IC86 的反面 在上面可插 7 个共阴的数码管 在方

面看 7 个数码管要紧靠 IC 座的右边插入 小数点朝 8 个键

在反面还要焊另一个用作指示的数码管 9 个键 其中一个复位键 8 个小发光管 负

极朝右 两个与 AD574 相配用于调零和调满度的 100 欧姆的精密电位器 3296 以及其

它一些插座

必要时 即有可能对外扩展时 跳线插座 NC2 JK1 JK0 NC1 JK2 JK3

CK3 和 IC5 旁的 12 针 PT 座都相当焊在反面

由于已在内部相连 两个 DISPLAY 座可以不焊不连

4 电源 主系统电源座在板正面的右下角 POWER 插座处 电源输入为 GND

+5V -12V +12V 正负 12V 是给 A/D D/A 系统提供的 另一电源座在板正面的左上角

RS1 是+5V 电源 是显示系统的工作电源 如果用户对显示系统的干扰不在乎 可不

用此电源 这时可将此座旁的两个焊点短接 此两焊点旁标有 VCC

为了提高 GWDVP 板的工作性能 可以用同一个变压器提供电源 但初级绕组最好分

成 3 组 分别为 3 组相应的直流整流电路提供电流 第一组输出+5V 电压 为主系统提供

Page 24: FPGA/CPLD开发 简明教程bbs.sciencenet.cn/bbs/upload/14290FPGACPLD开发简明教程.pdf第一节 gw48-ck教学实验系统原理与 ... 第五节 abel-hdl 程序设计技巧 第六章

- 21 -

工作电源 第二组也输出+5V 电压 为显示系统提供工作电源 第三组输出-12V 和+12V 电

压 为 A/D 和 D/A 系统提供工作电源 这 3 组电源须共地

5 显示 显示系统由 9 个 74HC164 也可用 74LS164 但亮度稍差 构成串行静态

显示电路 前 8 个负责 8 个数码管的显示 最高位的 74HC164 负责 8 个发光管的显示 此

串行显示系统的数据口 DATA 接单片机的 P3.0 CLOCK 接 P3.1 显示子程序名为 DIRR0

GWDVP 板反面的显示器自左至右 8 个数码管和 8 个发光管在单片机内的显示缓冲寄存器

依次为 16H 15H 14H 13H 12H 11H 10H 17H 18H 小数点的缓冲寄存器是 0AH

其中某一位为 1 时 对应的数码管的小数点发亮 如当 0AH 的最低位为 1 时 10H 对应的

数码管的小数点发亮

6 键盘 板的反面可焊 9 个键 最右的是复位键 8 个键与单片机的 P1 口接成查询

电路方式 因此 P1 口还可作输出复用 如果 8 个键不够 用户可在 P1 口插座 P1 上并

接上阵列方式的 16 键键盘 这时板上的 8 个键自动失效

7 EEPROM 93C46 这是串行存储器 片选脚由单片机的 P3.2 担任 如果不用 93C46

此端口可作他用 它的读写子程序可参阅程序 GWDVP.ASM

8 跳线座 如板上所示 两组跳线座 NC2 JK1 JK0 和 NC1 JK3 JK2 当

断开或短接时 将实现下表所示功能

NC2 JK1 JK0 NC1 JK3 JK2 功 能

开路 开路 由于 JK3 端口直接与 FPGA\CPLD 相接 所以可利用此 8 位口

对外通信或控制 此时 IC10 将失去可控的参考电压

开路 短接 此为完整的 D/A 工作方式 IC2 可作波形数据存储器 IC3 可作

IC2 的参考电压控制器 电压范围是 0V ~ -10V

短接 开路 通过在 FPGA/CPLD 中作适当设计 可构成与 ROM/RAM 总线

通信方式的单片机最小系统 或 ROM 硬件计算电路系统

9 多路通道 根据原理图 GWDVP 板上的 FPGA/CPLD 的 PIO8-PIO15 共 8 个端口

是通过 3 个多路开关 4053 分别同单片机的 P2 口和 AD574 的低 8 位数据口相接 控制开关

是单片机的 P3.4 口 当 P3.4

为低电平时 PIO8-PIO15 与单

片机的 P2.0-P2.7 相接 当 P3.4

为高电平时 PIO8-PIO15 与

AD574 的低 8 位数据口 DB0-

DB7 相接 另外注意 此 P3.4

同 时 又 与 FPGA/CPLD 的

CLOCK3 相接 设计中 为

FPGA/CPLD 芯片中的逻辑提

供必要的信号

10 AD574 A/D 转换

系统 该系统有两个 3296 型

精密电位器 可调满度和调

零 必须焊在板的反面 AD574

的工作方式可参阅 VHDL

实用教程 的第 13 章 它的

输入端接有 LM356 作阻抗变

换用 信号可由此芯片的第 3

脚引入 电压范围 -10V 到

+10V 但若需对多路信号采

CON2

FPGA/CPLD

GWDVP

CD4053

CD4053

CD4053

CD4052

CD4051

356

356

356

356

356

93

C4

6

AT

89C

51

DA

C0

83

2D

AC

08

32

12MHZ

50MHz

P3.1P3.0

27C512/62256 AD574J

CON1

KEY8KEY7KEY6KEY5KEY4KEY3KEY2KEY1D8

D7

D6

D5

D4

D3

D2

D1

图 电子设计竞赛开发板 GWDVP

Page 25: FPGA/CPLD开发 简明教程bbs.sciencenet.cn/bbs/upload/14290FPGACPLD开发简明教程.pdf第一节 gw48-ck教学实验系统原理与 ... 第五节 abel-hdl 程序设计技巧 第六章

- 22 -

集时 可从 IC15 的 P2 座上引入 多路口由单片机的 P3.3 和 3 针插座 CK2 控制 当

右插时 4052 的 B 端接地 A 端仅由 P3.3 而向左插时 A B 端分别由 P3.3 和 P3.5 控制

需要注意的是 这时输入信号的电压范围是-6V 到+6V

此外 从板正面看 IC15 的 AD574 座中有两个插座 10V S10 当将前者短路时

A B 点短路 10V 标准参考电压将进入 AD574 的待测模拟信号输入端 结合电位器

MDU2 用于满度校正 后者的 C D 端短路 则可结合电位器 MDU1 用于零校正 正常

对外测试时 需将 D E 端短路 此 2 插座应焊在反面

11 时钟信号 如原理图所示 FPGA/CPLD 有两个可选的时钟信号源 12MHz 和

50MHz 他们可分别由跳线座 CK 和 CK1 前者可通过跳线选择 12MHz 进入 CLOCK0

或 CLOCK1 后者可通过跳线选择 50MHz 进入 CLOCK2 或 CLOCK4 另外 单片机的工

作晶振必须 12MHz 否则不能用测频子程序

CK3 各端口由用户自行确定使用形式 如可将 ALE 与 CLOCK5 相接 即可

使单片机与板上的 FPGA/CPLD 以总线方式通信 可使用 MOVX 指令

12 注意 1 可通过跳线选择使 P3.5 进入 CLOCK8 或 CLOCK9

13 注意 2 板正面右下侧的 OUTPUT 和 GND 两对孔是用于焊模拟信号输出

挂钩的 用示波器可从这里看到输出的波形

14 演示程序操作 演示程序操作顺序如下

1 光盘中的 GWDVP1.ASM 用 ASM51B.EXE 编译 再将编译所得的文件 GWDVP1.OBJ

编程进单片机 AT89C51/52 中 将单片机插上后 再将光盘中 GWDVP1\ISPAD1\SINAD

中的 ispEXPERT 文件 COPY 到硬盘上 用 ispEXPERT 编译后 将 JED 文件用 GW48-CK

系统下载到适配板上的 ispLSJ1032E 中 再将此板插到 GWDVP 板上 注意正反方向 最后

加上电源

2 加上电源后 可以看到右数第 2 键出现 P

3 按左数第 2 键 应显示 Good 字样 表明 板上的 93C46 工作正常 芯片没有

问题 否则 将显示 bad 字样 这是 93C46 测试键

4 按最右面的复位键 再按左数第 1 键 是利用 AD574 测试显示的功能键

5 按复位键 再按左数第 7 键 每按一次 数码增加 1 此数表明输出正弦信号频率

的频段 数越大 频率越高 然后按左数第 6 键 即可从示波器上看到输出的正弦波形 每

按此键一次 频率提高一点 如果要换输出频道 可再按左数第 7 键 之后按左数第 6 键

即可看到频率的提高 此时 若按左数第 4 键 片刻后 即显示此刻输出的信号的频率 最

低位是 Hz 数

6 按复位键 再按左数第 3 键 即选择扫频的速度 每按键一次 速度提高一点 然

后按左数第 5 键或第 8 键 即有扫频信号输出

以上仅为演示操作 难免可能出问题 若硬件电路没有问题 关键在于用户自己的设

计如何

第三章 第四章请见光盘 PDF 重要文件

第五章 ABEL-HDL 基本元素与语言结构

第一节 ABEL-HDL 基本元素

5-1-1 可用的 ASCII 字符

ABEL-HDL 中可用的合法的 ASCII 字符为所有的大写 小写字母及一般键盘使用的大

Page 26: FPGA/CPLD开发 简明教程bbs.sciencenet.cn/bbs/upload/14290FPGACPLD开发简明教程.pdf第一节 gw48-ck教学实验系统原理与 ... 第五节 abel-hdl 程序设计技巧 第六章

- 23 -

部分字符

A z 小写字母 A Z 大写字母 0 9 数字

Space 空格 () . [ ] 等

5-1-2. 数据

ABEL-HDL 中所有数值在计算机中都是以 32 位的形式存储 数可用五种形式表示 其

中最常用的四种表示形式如下

二进制 ^B1011 (= ^D11) 八进制 ^O17 (= ^D15)

十进制 ^D9038 (= ^D9038) 十六进制 ^HF0D5 (= ^D61653)

若一个数值前没有数制符号 则认为它使用的是隐含数制 一般情况隐含数制为十进制

数也可用字符串来表示 其实际值是先把每个字母换成 ASCII 码 然后连结在一起构成数

in 'a' 等价于 in ^h61 in 'abc' 等价于 in ^h616263

5-1-3. 特殊常量

ABEL-HDL 专用常量称为特殊常量 特

殊常量可用于赋值 真值表与测试向量中

ABEL 的特殊常量如表 5-1 所示 特殊常量可

用大写或小写字母输入 输入时必须如表所

示 在字母两边带圆点

5-1-4. 字符串

字符串是用单引号括号起来的 ASCII 码

字符序列 字符串可用于标题语句 模块语

句等 若要在字符串中使用单引号 或反斜线 \ 则需在前面加一反斜线 \ 如

'It\'s an example' 实际是 'It's an esample '

5-1-5. 标识符

标识符用来标识器件 管脚或节点 集合 输入输出信号 常量 变量等 标识符必须

遵从以下规则

* 标识符由字母 数字和下划线组成 最长为 31 字符

* 标识符必须以字母或下划线开头

* 标识符中字母有大小写之分 如 out, OUT, ouT 为不同标识符(关键词的大小写

无此约束) 以下为代表不同意义的合法标识符

INPUT1 input1 _OUT CLK clock_d .

5-1-6. 保留标识符(关键字)

关键字是 ABEL-HDL 的保留标识符(在 SYNARIO 的 ABEL-WIN 的 EDITOR 中关键字

会自动变成蓝色) 它具有特定的功能,不能用来给器件 管脚 信号命名 使用中要特别注

意 下面是 ABEL-HDL 的关键字

CASE DEVICE ELSE ENABLE END END CASE EQUATUINS FLAG FUSES GOTO IF IN

ISTYPE LIBRARY MARCO MODULE NODE PIN STATE STATE- DIAGRAM TEST_VECTORS,

THEN TITLE TRUTH_TABLE WHEN WITH, INTERFACE, PROPERTY, STATE_REGISTER, SYNC_RESET,

TRACE, ENDCASE, ENDWITH, DECLARATION, EXTERNAL, FUNCTIONAL_BLOCK .

关键字可用大写 小写或混合字体输入 代表的意义不变

5-1-7. 注释

为了使所编的 ABEL 程序

容易看懂 应加以必要的注释说

明 注释说明可以双引号”开始 也可以双斜杠//开始(在 SYNARIO 的 ABEL-WIN 的 EDITOR

特殊常量符号 常量值功能说明 .C. 时钟输入(电平按低高低变化) .K. 时钟输入(电平按高低高变化) .X. 任意值 .Z. 高阻态 .P. 寄存器预装载 .F. 浮动输入或输出信号 .D. 时钟下沿(H-L 转换) .U. 时钟上沿(L-H 转换)

表 5-1 特殊常量

DVCE DEVICE ‘P16V8C’ ; “ DECLARE DVCE TO BE 16V8

DVCE DEVICE ‘P16V8C’ ; // DECLARE DVCE TO BE 16V8

Page 27: FPGA/CPLD开发 简明教程bbs.sciencenet.cn/bbs/upload/14290FPGACPLD开发简明教程.pdf第一节 gw48-ck教学实验系统原理与 ... 第五节 abel-hdl 程序设计技巧 第六章

- 24 -

中被注释的内容会自动变成绿色) 右边两例的注释效果是一样的

5-1-8. 运算符

ABEL-HDL 有四类运算符 逻辑运算符 算术运算符 关系运算符和赋值运算符 下

面逐个介绍它们的符号及使用规则

1 逻辑运算符: 逻辑与 , 如 A&B 逻辑或 , 如 A#B 逻辑非 , 如 !A

异或 , 如 A$B ! 同或 , 如 A!$B

算术运算符: 补码 如-A 减号 如 A-B

加号 如 A+B * 乘号 如 A*B

/ 除号 如 A/B 取模 如 A%B

<< 左移 如 A<<B A 值左移 B 位 >> 右移 如 A>>B A 值右移 B 位

注意 1 减号的用法不同时 意义也不同 当在一个数前时 表示对这个数取二进

制补码 当在两个数之间时表示两个数相减

2 除法是无符号整数除法 结果是整数 余数可通过取模得到

3 移位运算是逻辑无符号移位 移位运算时用 0 来补缺位

3 逻辑关系运算符:= 等于 , 如 = != 不等于 , 如 != >= 大于等于 , 如 >=

大于 , 如 > 小于 , 如 < <= 小于等于 , 如 <=

关于运算的结果是逻辑真(=1)或逻辑假(=0) 在计算机中逻辑真以 -1 表示 即 32 位

全置 1 逻辑假以 0 表示 即 32 位全置 0

所有的关系运算都是无符号的 如(2= =3)=0 ; (3<5)=0 ; 又如 表达式 -1 2 的值

为真 因为-1 的补码大于 2

4 赋值运算符

赋值运算符是一类用于布尔方程的特殊运算符 不能用于表达式 有两种赋值运算符,

即 和 := 表示非时钟赋值 也称立即赋值 是组合逻辑方式赋值 := 表

示时钟赋值 即在有关的时钟脉冲作用下才进行赋值 如 F := D&F 表示当前 F 的值等于

在此一个时钟前的 F 值与 D 的相与值 又如 A:= D$(B= =C) 表示 一个时钟后 如果 B=C

则 A = !D 若 B 不等于 C 则 A=D

5-1-9. 表达式

表达式是标识符和运算符的结合 除赋值运算符外 所有的逻辑运算符 算术运算符

关系运算符都可以用于表达式中

例 = = 2*4/3 &

表达式中运算符之间存在一定的优先级 优先级最高的是单目运算符 和 其

次是逻辑运算符 算术运算符 关系运算符 可用圆括号 改变表达式中运算符之间的优

先级

5-1-10 逻辑方程

逻辑方程表示输入信号和输出信号之间的逻辑关系

如 c = a & b & c & d , out := in 等 方程使用前面介绍的赋值运算符 和 :=

ABEL-HDL 的方程接受 when then else 等语句 如

when (select = = 0) then out = in0 ; when (select= =1) then

out = in1

若一个标识符出现在多个方程的左边 则该标识符的值为这些

表达式的或值 如右式所示

5-1-11 集合(数组)

out = a out = b out = c

等价于 out = a # b # c

Page 28: FPGA/CPLD开发 简明教程bbs.sciencenet.cn/bbs/upload/14290FPGACPLD开发简明教程.pdf第一节 gw48-ck教学实验系统原理与 ... 第五节 abel-hdl 程序设计技巧 第六章

- 25 -

集合是作为一个整体来进行运算的一组信号或常量 对集

合的任何运算其实都是对其中每一个元素进行的 集合将一组

信号用一个名字来表示 从而简化了 ABEL 的逻辑设计和测

试向量的描述

1 集合的表示

集合用中括号括起来 集合的元素用 或 .. 分隔 如右式所示

2 集合的赋值

可用数值或数值集合对集合赋值 如

IN [1 0 0] 或 IN 5 而[A1, A2, A3] = 2 等效于 A1=0 A2=1 A3=0

用于集合赋值或比较的数要转换成二进制形式 并遵从下列规则

A 如果该二进制数的有效位多于集合中的元素个数 要从左边用 0 补齐缺少的位

B 如果该二进制数的有效位少于集合中的元素个数 要从左边用 0 补齐缺少的位

例如 右边两式的赋值是等效的

3 集合的运算

除了移位运算符外 其它运算符都适用 于集合 参与运算的集合

元素必须相等 注意 若集合中同时含有组合输出和寄存器输出的元素时 不能将该集合

放在方程左侧 因为所用赋值运算无论是 还是 := 都是对集合中所有元素进行

赋值 这样总有一部分元素与赋值类型不符

5-1-12.块

块的定义文本必须放在大括号{ }中 它可被用在状态图 逻辑方程 宏 或标识符中

它可以只占一行 也可跨越数行 如

{THIS IS A BLOCK} {A = B#C D = [0,1]+[1,0] A = B $ C }

块的使用能使逻辑描述简洁明了 请比较以下数组逻辑表述

例 5-1 未用块

WHEN (M == S) THEN OT1 := IN1 ; ELSE WHEN (M==T) THEN OT1 := IN2;

WHEN (M == S) THEN OT2 := 1 ; ELSE WHEN (M==T) THEN OT3 := 1 ;

用块

WHEN (M == S) THEN {OT1 := IN1 ; OT2 := 1 ;}

ELSE WHEN (M == T) THEN {OT1 := IN2 ; OT3 := 1 ;}

例 5-2 未用块:

IF (HOLD) THEN S1 WITH O1 := O1.FB ; O2 := O2.FB ; ENDWITH

ELSE S2 ;

用块

IF (HOLD) THEN S1 WITH {O1 := O1.FB ; O2 := O2.FB ;} ELSE S2 ;

例 5-3 未用块:

IF (H & !RST) THEN S1 ; IF (H & ERR) THEN S2 ; IF (!H ) THEN S3 ;

用块:

IF (H ) THEN { IF (!RST) THEN S1 ; IF (ERR) THEN S2 ;} ELSE S3

第二节 ABEL-HDL 基本语言结构

上节介绍了 ABEL 语言元素 语言元素必须按一定的语言结构才能描述输出信号的逻

辑关系 本节介绍 ABEL 设计描述的完整结构

ABEL-HDL 源文件包含数个独立的模块 每一模块包含一个完整的逻辑电路描述 多

个这样的模块可以合成一个 ABEL 源文件 并能进行同时编译

IN [A B C D E F]

OUT [Y0 Y1 Y2 Y3]

上式可写作 OUT = [Y0..Y3] ;

AA = [0, C1, C2, Q15 .. Q0]

[c d] = ^B01

[c d]= ^B1

Page 29: FPGA/CPLD开发 简明教程bbs.sciencenet.cn/bbs/upload/14290FPGACPLD开发简明教程.pdf第一节 gw48-ck教学实验系统原理与 ... 第五节 abel-hdl 程序设计技巧 第六章

- 26 -

5-2-1 基本结构

ABEL-HDL 源文件包含数个独立的模块 每一模块包含一个完整的逻辑电路描述 多

个这样的模块可以合成一个 ABEL 源文件 并能进行同时编译

一个模块的 ABEL 源文件典型结构层次如右所

下面为一多路选择的源文件清单 此例主要用于

ABEL3.0 中

例 5-4

module mux1 flag ' -r3 '

title ' 12to4 multiplexer '

U1 device 'P16V8C' ;

a0..a3 b0..b3 s1 s0 pin 1 2 3 4

5 6 7 8 9 11

y0..y3 c0 c1 c2 c3 pin 12 13 14

15 16 17 18 19

H=[1 1 1 1] L=[0 0 0 0]

X=[.x. .x. .x. .x.] sel=[s1 s0]

y=[y3..y0] a=[a3..a0] b=[b3..b0]

c=[c3..c0]

equations

when (sel= =0 ) then y = a when (sel= =1) then y = b ;

when (sel= =2) then y = c when (sel= =3) then y = c ;

test_vectors ([sel a b c ] > y )

[0 1 X X ] > 1 ;

[0 10 H L ] > 10 ;

[0 5 H L] > 5 ;

[1 H 3 H] > 3 ;

end mux1

5-2-2 基本语法规则

A 每行最长不得超过 131 字符

B 每条语句可分多行写 以分号 结束

C 关键字 标识符及数字之间必须用至少一个空格隔开

以前述多路选择器源程序为例 简要说明基本语法规则

1 module mux12to4 这条语句为模块定义语句 定义一名为 mux12ot4 的模块 关键词

module 是必须的 它定义一个模块的开始 一个文件至少包括一个模块 一个模块必需

以 module 开始 结束时必须用相应的 END 语句 每一模块又包含完整的逻辑设计所需

的定义段 方程 真值表 状态图及仿真向量表

2 flag ' -r3 ' 为标志语句 -r3 表示三级化简 flag 提供了定义语言处理程序命令参数

的又一种方法 这些参数可以影响源文件的处理方式 最常用的有 -r t 等 -r 表示化简

级别 这些标志语句在 ispEXPERT/SYNARIO 的 ABEL-WIN 源文件中是不必要的 因为

SYNARIO 的编译器将根据特定的菜单选择进行自动化简

3 Title ' 12to4 multipexer ' 这条语句为标题语句 title 语句用于赋予模块一个标题 标

题必须用单引号括起来 标题可用于标记一些用户信息并作为下载文件的一部分下载到器件

中 这条语句并不是必须的

Module module_name Flag ‘ 标志语句’

// 一个模块的开始

Title ‘ 标题语句’

Declarations // 定义段

MacroDefinitions // 宏定义段

DeviceDefinitions // 器件定义段

PinandnodeAssignments // 管脚及节点定义段

ArrtibuteDeclaration // 属性定义

ConstantDeclaretion // 常量定义

BooleanEquations // 布尔方程

Truthtables // 真值表

StateDiagrams //状态图

FuseDeclarations // 熔丝状态定义段

TestVectors // 测试向量段

Endm__name // 一个模块结束

Page 30: FPGA/CPLD开发 简明教程bbs.sciencenet.cn/bbs/upload/14290FPGACPLD开发简明教程.pdf第一节 gw48-ck教学实验系统原理与 ... 第五节 abel-hdl 程序设计技巧 第六章

- 27 -

4 U1 device ' P16R8C ' ; 这条语句为器件定义语句 U1 为器件名 P16V8C 为实际

器件 device 为定义器件关键字 编译通过后生成的熔丝图文件的文件名将为 U1. JED .

关键字 device 的用法 器件名 device 实际器件

所谓的实际器件必须是 ABEL 所支持的器件 实际器件必须用单引号括起来 编译后

将生成文件为 “器件名.jed ” 的下载文件 EXPERT/SYNARIO 的 ABEL-WIN 源文件中是不

必如此定义器件的

5 语句 a0..a3 b0..b3 s1 s0 pin 1 2 3 4 5 6 7 8 9 11

y0..y3 c0 c1 c2 c3 pin 12 13 14 15 16 17 18 19

为管脚定义语句 管脚定义语句用于为每一信号分配一管脚 使信号与实际器件管脚联系起

来 . pin 管脚定义语句的完整格式是

[ ! ]信号名[ ,[ ! ] 信号名 ] ... pin 管脚号[ = '属性' ] [管脚号[ = '属性 ']...

其中 [ ]中的内容为可选顶 ' ! ' 表示低电平有效 相当于对信号取反 在定义脚的同

时也可以定义管脚的属性 管脚属性也可由 istype 语句定义 下面将介绍 ISTYPE 语句的

用法

istype 语句用于定义管脚属性 其用法如下

信号名 [ 信号名 ] istype '属性 [ 属性 ] '

语句中合法的属性是

pos 正极性 reg_d D 型寄存器 neg 负极性

reg_t T 型寄存器 eqn 通过布尔方程选择节点 reg_jk jk 型寄存器

com 组合信号 reg_jkd JK/D 可控寄存器 reg 寄存器信号

feed-reg 寄存器反馈 feed-or 或门反馈 pin 通过管脚造择节点 share 共享积项

这些属性的含义如下

pos neg 分别表示相应的输入或输出信号的极性为正或负 器件的编程须反映这一状

态 并且与这些信号有关的方程都按其极性进行优化

reg neg 分别表示相应的输入或输出信号为寄器型 信号的改变 前者由时钟控制 后

者不用时钟控制

reg_ (寄存器类型)表示信号为相应的寄存器类型

latch 这一属性只有输入信号才有 它表示相应的输入信号为锁存器输入 锁存器有使

能控制线 如果使能线为高电平 则锁存器的输入信号可以传送到输出端 如果使能线为低

电平 则输出端保持不变

feed-pin feed-reg 和 feed-or 是反馈语句 说明反馈信号分别来自管脚输出 内部寄

存器输出 或门输出 反馈属性只对输出信号有效 任何时候只能有一个反馈属性有效

pin eqn fuse 为节点属性 分别表示单熔丝节点 管脚控制节点 阵列控制节点

6 语句 H = [1 1 1 1] L = [0 0 0 0] X = [.x. .x. .x. .x.]

sel = [s1 s0] y = [y3..y0] a = [a3..a0] b = [b3..b0] c = [c3..c0] 是常量定义语句 当

程序中需要多次使用同一定值时 可以定义一常量表示这一定值 适当的使用常量可增强程

序的可读性 是一种良好的程序设计风格

7 equations 这条语句为方程语句 equations 是关键字 方

程语句表示与某一器件有关的一组方程的开始 方程可用布尔

代数的形式 也可用高级语言的形式来描述器件的逻辑功能

一个逻辑设计模块中的各种逻辑描述可以由一个或多个逻辑描

述 关 键 词 引 导 这 些 关 键 词 是 EQUATIONS

TRUTH_TABLES FUSES STATE_DIAGRAMS 和

XOR_FACTORS

test_vectors

( [ sel a b c ] y )

[ 0 1 X X ] 1

[ 0 10 H L ] 0

[ 0 5 H L ] 5

[ 3 H H 0 ] 0

Page 31: FPGA/CPLD开发 简明教程bbs.sciencenet.cn/bbs/upload/14290FPGACPLD开发简明教程.pdf第一节 gw48-ck教学实验系统原理与 ... 第五节 abel-hdl 程序设计技巧 第六章

- 28 -

8 语句段

为测试向量表 测试向量表用具体的输入向量形式定义了一个逻辑器件应具备的逻辑功能

测试向量用于对器件的内部模式进行仿真 并测试编程后的器件功能 各个测试向量都包含

一个表头格式及向量本身 表头格式用来定义测试向量表的开始 并说明向量的排列 向量

表示了器件应具有的逻辑功能 测试向量格式类似于真值表 但两者是的区别的

真值表中每个输入信号必须遍历所有的状态组合 从而全面描输入输出信号之间的逻辑关

系 而测试向量不同 它可以任意选择输入信号的几个典型状态 以检测输出 在一个模块

中,测试向量表并不是必须的 特别是在 ispEXPERT\SYNARIO 平台上 已设置了更先进的

逻辑模拟方法 后面将详细介绍

9 语句 end mux1 是模块结束语句 与 module 语句相对应 表示一个模块的结束

第 三 节 ABEL-HDL 基本语句用法

5-3-1 Module

Module 语句标志一个设计模块的开始 它必须与 END 语句同用

5-3-2 Title

格式 Title 'string '

title 可在文件开头引导一段文字字符串说明 最长为 324 个字

5-3-3 Declarations

关键词 Declarations 可在 ABEL-HDL源文件中的任何地方定义数组芯片引脚或常数等

在紧接着 Module或 title 语句之下的各种定义 可略去此关键词 例如例 5-5

5-3-4 Equations

Equations 语句标志一组逻辑方程的开始 逻

辑方程包括组合 时序方程 可以是普通的 Boolean

方程 扩展形式的 Boolean 方程或用 When-then-

else 等语句的高级语句方程 每一方程结束必须

用分号

5-3-5 Device

Device 语句用于定义所有芯片的名称 以及

源文件编译后所产生的 JEDEC 文件的名称

例如 ACE DEVICE 'P16V8R '

表示源文件的设计适配对象为 GAL16V8 或

ATF16V8 或 PALCE16V8 等 文件编译适配后 若

能通过 将产生该器件的熔丝图文件 ACE.JED

对于在 Synario 软件的设计 Device 语句可以不用 因为器件的定义和选定由窗口项目选

择的方式确定了

5-3-6 Istype

Istype 语句用于定义器件引脚或内部结点信号的属性 明确定义引脚属性有助于编译

软件的正确操作与设计 Istype 语法格式是

信号名称 1 信号名称 2 ...... PIN 或 NODE ISTYPE ' 属性 1 属性 2 ...... '

例如

P1 P2 P3 PIN ISTYPE 'INVER ,REG_D ' ;

RST PIN ISTYPE 'COM ' ;

D3 D2 D1 D0 P32 P31 PIN 23 24 25 26 58 59 //输入引脚定义和锁定

O3..O0 W3 W4 PIN 45 46 47 48 3 4 ISTYPE REG //输入引脚定义和锁定

例 5-5

Module exam

XOT device ' P16V8C ' ; // 以上已隐含了 Declarations 关键词

A B PIN 1 2

Out1 PIN 15 istype 'com';

Equations

Out1 = A & B ;

Declarations // 此处必须有此关键词

C D E F PIN 3 ,4 ,5 ,6;

Out2 PIN 16 istype 'com ';

Teml = C & D ; Tem2 = E & F ;

Equations

Out2 = Teml # Tem2 ;

end

Page 32: FPGA/CPLD开发 简明教程bbs.sciencenet.cn/bbs/upload/14290FPGACPLD开发简明教程.pdf第一节 gw48-ck教学实验系统原理与 ... 第五节 abel-hdl 程序设计技巧 第六章

- 29 -

表示 P1 P2 P3 皆为 D 触发器输出引脚 且为反相输出 RST 是组合逻辑方式输出

D3 D2 D1 D0 P32 P31 皆为输入引脚定义 O3..O0 W3 W4 皆为时序逻辑输出引脚定

义 以下为部分引脚信号属性关键词

1 'COM ' 组合逻辑方式输出

2 'REG' 寄存器时序逻辑方式输出

3 'Buffer' 在触发器与实际输出引脚间没有反相器的目标器件

4 'Invert' 与'Buffer'相反 目标器件是在触发器与实际输出引脚间有反相器的器件

5 ' reg_d ' ' reg_g' ' reg_jk ' ' reg_sr ' ' reg_t ' 分别为 D 触发器

具有门控时钟的 D触发器 JK 触发器 SR 触发器和 T触发器

6 'Xor ' 在目标器件中的异或门

7 'retain' 不作输出化简 保留剩余乘积项

8 'pos' 正逻辑输出

9 'neg' 负逻辑输出

10 'collapse' 'keep' : 它们的作用恰好相反 分别表示除去或保留所定义的信号 这

两个属性的定义与否要视实际的逻辑设计需要而定 如果不作定义 编译程序将按照自己的

优化方式进行优化 但并非是最好的 例如

编译程序将按照 b 的结点属性除去此结点信号

b 构成如下方程 从而简化了方程

a = c & d & e ;

如果原方程为 a = b # e b = c # d 则'collapse'

属性将使原逻辑复杂化 因为最后产生的方程 a = c #

d # e 成为有 3项乘积项的方程

5-3-7 PIN

关键词 PIN 用来定义目标器件的输入输出引脚信号 对于 ABEL3.0 软件 要写明器件

的引脚号 如 CLK OE A B PIN 1 11 2 3 对于 Synario 软件 如在源文件的

最高层原理图中已定义了器件引脚号 则在 ABEL-HDL 文件中不必写明引脚号

5-3-8 Node

关键词 Node 的定义与 PIN 几乎一样 但 Node 只是在器件的内部 其信号并不引出

所以肯定没有引脚号 但 Node 的定义有时有其特殊作用 它可以作为一个信号中转站 从

而可以简化逻辑 将大块逻辑变成小块逻辑 因为 在逻辑设计中 把逻辑分成小块的优化

效率比较高 且更容易适配 对于加法器 比较器及宽位多路通道的逻辑设计尤为明显

5-3-9 State_diagram

状态机逻辑描述引导词 使用格式

对时序电路还可以用状态图进行逻辑设计 利用状态图设

计 可以实现复杂的时序逻辑 State_diagram 语句用于开始

描述不同逻辑状态的转变的条件方式和过程 状态图的运行结构可由如下不同语句形式来完

1 GOTO 语句 为无条件状态转移语句

例 STATE S0 GOTO S1

即到达状态 SO 时 下一个时钟后 将无条件转向状态

S1

2 CASE 语句 可用于列出互为排斥的转移条件

例 5-6说明当信号 sel 为 0 时 下一时钟仍在原状态

当信号 sel 为 1 时 下一时钟后转向状态 S1 CASE 的状态条件是互为排斥的 即不可能同

module max

a , c , d , e PIN ; 定义输入引脚

b Node istype 'collapse ';

equations

a = b & e ; b = c & d ;

end

State_diagram 状态变量

各种状态方程

例 5-6

STATE S0 CASE (sel==0) : S0;

(sel==1) : S1;

ENDCASE

Page 33: FPGA/CPLD开发 简明教程bbs.sciencenet.cn/bbs/upload/14290FPGACPLD开发简明教程.pdf第一节 gw48-ck教学实验系统原理与 ... 第五节 abel-hdl 程序设计技巧 第六章

- 30 -

时满足两种状态条件

3 IF-THEN-ELSE 语句

此语句描述互为排斥的转移条件 例

STATE S0 IF ( address > ^HE100 ) THEN S1 ELSE S2

也可以用宏块来表示 IF-THEN-ELSE 语句 例

IF Hold Then State1 with { Q1:= Q1.fb ; Q2:= Q2.fb ;} ELSE State2 ;

4 Sync_Reset 和 Async_ Reset 语句

此二语句用于规定状态机的同步复位操作 例如 可以规定当 RST 输入为真时,状态

机必须进行异步复位至初始状态 START, 可表达成

Async_Reset Start : RST ;

5-3-10 Truth_table

Truth_table 是真值表逻辑描述引导关键词 是

另一种用 ABEL-HDL 描述逻辑设计的方法 可用于逻

辑方程状态图来表达 真值表是利用一系列输入与输

出列表的方式来完成逻辑描述的 在表中所有的值都

是常数 或已定义了数值 或是一些特殊常数

如.X. .Z. .C. 等 每一行以分号结尾 表头描

述须定义输入输出名 下例的真值表描述了一个具有

四种状态和一个输出的状态机 用 A 和 B 形成的数

组描述当前的状态 下一状态是由具有时序特性的 C

和 D 构成的数组表示 E表示具有组合属性的输出:

真值表的逻辑描述方式与普通的方程描述方式相

同 同样可进行点扩展等操作

例 5-7/5-8 两个例子在功能上是相同的

真值表可用于组合和时序电路 其真值表表头向量

语法如下

TRUTH_TABEL [ IN 器件名]( 输入向 输出向量 ) 或

TRUTH_TABEL [ IN 器件名]( 输入向量 : 输出向量) 或

TRUTH_TABEL [ IN 器件名]( 输入向量 :

寄存器输出 输出向量 )

其中

1 输入向量和输出向量是逻辑关系中输入和输出

信号

2 寄存器输出是指信号寄存后输出

3 ->表示输入与输出关系为组合型

4 :>表示输入与输出关系为时序型

注意 真值表中使用的所有信号必须为数值常量 已定义过的常量 或特殊常量 输入

输出向量必须用中括号[ ]括起来 真值表中的每一行必须以分号结尾

5-3-11 If-Then-Else

使用格式 IF 条件描述 Then 下一状态 Else 下一状态

注意 状态 描述中必须有下一状态的变量描述 同时也可根据需要加入带 with 关

键词的转移方程 注意 If-Then-Else 结构只能用于状态机描述 而 When-Then-Else 可用

于方程描述

例 5-7

TRUTH_TABLE [A B] > [C D]à E

0 > 1 à 1

1 > 2 à 0

2 > 3 à 1

3 > 0 à 1

此描述等同于

[0 0] > [0 1] à 1

[0 1] > [1 0] à 0

[1 0] > [1 1] à 1

[1 1] > [0 0] à 1

例 5-8

equations

q : = a & Load # !q.Fb & !Load ;

例 5-9

truth_table([a,q.Fb ,Load] : > q)

[ 0 , 0 , 0 ] : > 1 ;

[ 0 , 1 , 0 ] : > 0 ;

[ 1 , 0 , 0 ] : > 1 ;

[ 1 , 1 , 0 ] : > 0 ;

[ 0 , 0 , 1 ] : > 0 ;

[ 1 , 0 , 1 ] : > 1 ;

[ 0 , 1 , 1 ] : > 0 ;

[ 1 , 1 , 1 ] : > 1 ;

Page 34: FPGA/CPLD开发 简明教程bbs.sciencenet.cn/bbs/upload/14290FPGACPLD开发简明教程.pdf第一节 gw48-ck教学实验系统原理与 ... 第五节 abel-hdl 程序设计技巧 第六章

- 31 -

If-Then-Else 的运行方式是这样的 首先计算 If 后的逻辑表达 如果为真 1 状态

机则转向 Then 指向的状态 如果结果为伪 0

则转向 Else 指向的状态 Else语句并不是必须

If-Then-Else 语句还能与 Goto Case 和 With

关键词同用 例 5-10/11/12是一组示例

5-3-12 GOTO

GOTO 语句只能用于状态图描述中 为状态

无条件转移语句 必要时可跟 With-ENDWith 转

移态方程

5-3-13 Case

CASE 选择语句的表达式

状态表达式 表达式 状态表达式

ENDCASE

状态表达式 定义下一状态 后面可跟

WITH_ENDWITH 语句 如果 CASE 语句中某

一表达式为真 则该表达式后的状态表达定义的

状态即为状态机的下一状态 应当注意 如果

CASE 语句中没有表达取真值 则状态机无法定

义下一状态 它相应的操作与所用器件有关 因

此 CASE 语句中的表达式应包括有可能的条

件 任何时刻 只能有一个表达式的条件为真

如果在一个 CASE 语句中有两个或更多的表达

式为真 则结果方程无法定义 例如 CASE

in = =0 : 1 in = = 1 : 2 in= = 2 : 3 in= = 3 :

0

5-3-14 When-Then-Else

此语句仅能用于逻辑方程描述

例 5-13 When ( Mode == S ) Then { OUTD := SIN ; TVAD := 1 ; } Else

When (Mode == T) Then { OUTD :=TIN ; TVAD := 1 ;}

5-3-15 With

With 语句主要用于状态图逻辑描述中 在描述时序输出的输出行为时 With 语句是十

分有用的 这是由于仅用当前状态表述的时序输出将滞后一个时钟周期

例 5-14 State S0 : IF ( rst ) Then S9 with

{ Er : = 1 ; Ea : = add ; } Then S2 else S0 ;

例 5-15

State 5 : IF ( a == 1 ) Then 1 with { x : = 1 ; y : = 0 ; }

else 2 with { x : = 0 ; y : = 1 ; }

5-3-16 Functional_block

在上下层 ABEL-HDL源文件连接中 可用语句 Functional-block 说明低级模块 使得低

一级模块的信号能与高一级模块的信号相连 共有三种连线方式

1 输入 2 输出 3 双向连接

1 输入 instance.port = input

2 输出 output = instance.port

3 双向连接 instance0.port = instance1.port

例 5-10

State S0 :

If (address < ^H0400 ) Then S0

else If (address < ^HE100) Then S2

else S1 ;

例 5-11

If ( A == B ) Then 2 ;

//如果 A等于 B转到状态 2

If ( X-Y ) Then j else k ;

//如果 X-Y 不为 0则转向 j 否则转向 k状态

If A Then b # c ;

//如果 A不为 0则转向 b # c 状态

例 5-12

State S0 :

CASE ( sel == 1 ) :

If (add == ^H0100 ) Then S16

else If (add > ^H0100) Then S17

else S0 ;

( sel == 2 ) : S2

( sel == 3) : If (add <= ^HE100)

Then If ( reset ) Then

S3 else S0 ;

ELSE S17 ;

( sel = = 0 ) : S0 ;

ENDCASE ;

Page 35: FPGA/CPLD开发 简明教程bbs.sciencenet.cn/bbs/upload/14290FPGACPLD开发简明教程.pdf第一节 gw48-ck教学实验系统原理与 ... 第五节 abel-hdl 程序设计技巧 第六章

- 32 -

例 5-16

module counter ;

Cnt4 interface ( ce , ar , clk , [q0..q3 ] ) ;// Cnt 4 的上层端口定义

CNT0..CNT3 functional_block cnt4 ; // cnt4 的 4个 instances

Clk , AR , CE pin ;

Q0 .. Q3 pin ;

equations

CNT0.[ clk , ar , ce ] = [ CLK , AR , CE ] ;

CNT0.[ q0 .. q3 ] = [Q0 .. Q3 ] ;

end

5-3-17 Fuses

Fuses 语句能很精确定义目标器件中任何熔点的状态 连接 0 或断开 1

例 5-17 Fuses

3552 = 1 [ 3478 ... 3491 ] = ^HFF ;

利用 Fuses 可以电子标签 ES 的形式来标记用户信息 即用 fuses 熔丝状态定义语句对其编

程 fuses 语句的用法

fuses [ IN 器件名 ]

熔丝号 熔丝值

fuses 语句用来定义指定熔丝的状态 对每一熔丝来说 只有两种状态 1 表示熔丝保

留 0 表示熔丝烧断 若熔丝号为集合 则熔丝值可为任意数 它首先扩展为二进制数 并

根据其中熔丝的个数 将熔丝值由左边补 0 或截去左边多余的数 例如

fuses [ 2056 .. 2087 ] ' V 4/0 ' fuses [ 2088 .. 2119 ] ' 1999 '

此语句就是利用 ES 来标记用户信息 应说明的是 GAL16V8 的 ES 的熔丝号是从 2058 开始

的 64 位 GAL20V8 的 ES 的熔丝号是从 2568 开始的 64 位 此语句只能用于 GAL 设计

5-3-18 Interface

用于说明上层或下层源文件模块的界面端口情况

例 5-18 module top ;

cnt 4 intenface ( ce ,ar ,clk → [ q3 .. q0 ])

例 5-19 module cnt 4 intenface ( ce = 1, ar = 0 ,clk → [ q3 .. q0 ]) ;

5-3-19 Library

使用格式 Library 'name' ;

Library 语言的应用将使所指定的文件被插入

ABEL-HDL 源文件中 插入位置是 Library 语言开始

处 Library 指定的文件应有 .inc 的扩展名 如果

无此文件 编译器将搜索abel5lib.inc 库

5-3-20 Macro

Macro 可定一个宏模块 一旦定义了一个宏 则

能在源文件的任意地方应用 但只能被用于已定义了

的模块中 宏定义与方程定义是有一定区别的 如例

5-20

5-3-21 Xor_Factors

Xor_Factors 语句可以在一定条件下将以与 或乘积形式的 Boolean 方程简化成变量

间具有异或关系的方程 从而大大简化了方程 提高了资源的利用率

5-4-22 State_register :

例 5-20

Module macr

Mac device ‘ p16v8 ’ ;

A,B,C pin 1,2,3 ;

X1,X2,X3 pin 14,15,16 istype‘com’ ;

Y1 macro {B # C}; Y2 = B # C ;

Equations

X1 = A & Y1 ; X2 = A & (Y1);

X3 = A & Y2 ;

END

Page 36: FPGA/CPLD开发 简明教程bbs.sciencenet.cn/bbs/upload/14290FPGACPLD开发简明教程.pdf第一节 gw48-ck教学实验系统原理与 ... 第五节 abel-hdl 程序设计技巧 第六章

- 33 -

对于符号化的状态图 State_register 语句可用于定义符号状态机的名字 由编译器

自动决定构成状态机的触发器数目和编码类型 这有助于优化状态机结构 提高资源的利用

率 例 5-21

module SM

a , b , clock pin ; // 输入

a_rst , s_rst pin ; // 复位输入

x , y pin istype 'com' ; // 简单组合输出

sreg State - register ; // 状态机定义

S0 .. S3 State ; // 状态定义

equations

sreg . clk = clock ;

State_diagram sreg

State S0 : goto S1 with { x = a & b ; y = 0 ;}

State S1 : if ( a & b ) then S2 with { x = 0 ; y = 1 ;}

State S2 : x = a & b ; y = 1 ; if (a) then S1 else S2 ;

State S3 : goto S0 with { x = 1 ; y = 0 ;}

Async_reset S0 : a_rst ; " 异步复位

Sync_reset S0 : s_rst ; " 同步复位

end

当 a_rst = 1 时 将异步复位到起始态 S0 ; 当 s_rst = 1 时 将同步复位到起始态 S0

它们的基本语句如5-4-23 所述

5-3-23 Async_reset Sync_reset :

在符号化状态描述中 语句 Async_reset 和 Sync_reset 用状态符号规定状态机的同步或

异步复位 例 5-22 :

Async_reset START RST Sync_reset START RST

5-3-24 with_endwith

with_endwith 转移语句状态表达式

with(方程)

[方程]

endwith

with_endwith 语句表示状态发生转移时相应的输出 例如

CASE A B GOTO 4 WITH OUT_1 1 OUT_2 0 ENDWITH

表示当 A B 时 转移到状态 4 同时输出 OUT_1 1 OUT_2 0

第 四 节 常用指示字

指示字在源文件中的作用是指导编译程序在某一指定范围内如何对源文件的内容加以处

理 根据源文件中设置的不同指示字 编译程序有条件地对源文件的某些逻辑操作进行处理

在 ABEL-HDL 设计中 指示字并非是必须的 ABEL-HDL 的指示字比较多 这里只能作小部分

介绍 有兴趣的读者可以参阅有关资料

5-4-1 @carry

算术函数位宽控制指示字 此指示字特别适用于组合逻辑的加法器及比较器 计数器等

设计 它能将大的逻辑块化作小逻辑块 以节省芯片资源

Page 37: FPGA/CPLD开发 简明教程bbs.sciencenet.cn/bbs/upload/14290FPGACPLD开发简明教程.pdf第一节 gw48-ck教学实验系统原理与 ... 第五节 abel-hdl 程序设计技巧 第六章

- 34 -

例如 一个 8 位 2 进制加法器 语句 @carry 2

可以将 8位加法器分成 4个 2位加法器 并指示编译程

序产生中间进位节点 这将有效地减少逻辑的复杂度

若选 @carry 1 则将 8位加法器分成 8个 1位加法器

成为一个全串行进位加法器

5-4-2 @Repeat

@Repert 可使宏块重复几次

例如 @repeat 5 { K } 表示将 K K K K K 写入源文件中 在大的真值

表中 此语句是十分有用的

5-4-3 @include

@include 指示字可以将设定文件中的内容放入

ABEL-HDL 源文件中 例如右图

5-4-4 @if

@if 指示字将根据条件包括或排除某种逻

辑表达

例如 @if A > 17 { C = D $ F }

5-4-5 @ essage

此指示字可以字符串的形式将指定的信息

送向屏幕 可以用此指示字了解编译器的每一

步编译与工作情况 这对调试复杂的文件十分

有用

例如 @message 'Includes completed

'

5-4-6 @ Dcstate

当运用@ Dcstate 后 所有未定状态都将

作为无关输出 使用中必须将@dcset 或 'dc'

属性联用

5-4-7 @ Dcset

对于组合逻辑 使用@Dcset 或 Istype

'dc '后将确定已定义有用输出组合以外的信

号为无关信号 从而可以简化和优化逻辑

请看例 5-24

此例的真值表最多可以有 16 种组合 但

所需的逻辑只用了三种 其余 13 种为无用逻

辑 所以就能设置为无关状态 在引脚属性上

用'dc’ 或@ Dcset 就能大为简化逻辑 减

少逻辑的乘积项

第 五 节 ABEL HDL 程序设计技巧

5-5-1 运用节点建立中间信号

中间信号主要指定义节点上的组合逻辑信号 这种中间信号的设置能有效地减少乘积

项 简化逻辑表达式 从而减少适配器的工作量和运行时间 增加适配成功率 同时减少芯

片资源占用率 请看以例 5-25/26 的比较

虽然以上两例的逻辑功能是一样的 但例 5-25没有中间变量 编译中必须产生两次 A & B &

例 5-23

@carry 1

[s8..s0] = [0,a7..a0]+[0,b7..b0]

@include 'maros.abl'

@include '\\incs\\macros.inc'

Dos 路径需要双斜杠

例 5-24

module AD

A3 .. A0 pin ;

B3 .. B0 pin istype 'dc ,com ' ;

truth_table ( [A3 .. A0 ] → [B3 .. B0 ] )

[ 0 , 0 , 0 , 0 ] → [ 0 , 0 , 0 , 1 ] ;

[ 0 , 1 , 1 , 1 ] → [ 1 , 1 , 0 , 0 ] ;

[ 1 , 0 , 0 , 1 ] → [ 0 , 1 , 1 , 1 ] ;

end

例 5-25

A , B , C , D , E PIN ;

X , Y PIN Istype 'com ' ;

equations

X = ( A & B & C ) # ( B $ C ) ;

Y = ( A & D ) # ( A & E ) # ( A & B & C ) ;

例 5-26

A , B , C , D , E PIN ;

X , Y PIN Istype ' com ' ;

M Node Istype ' com ' ;

equations

M = A & B & C ; //中间变量

X = M # ( B $ C ) ;

Y = ( A & D ) # ( A & E ) # M ;

Page 38: FPGA/CPLD开发 简明教程bbs.sciencenet.cn/bbs/upload/14290FPGACPLD开发简明教程.pdf第一节 gw48-ck教学实验系统原理与 ... 第五节 abel-hdl 程序设计技巧 第六章

- 35 -

C 的逻辑结构 而例 5-26 用了中间变量 逻辑结构大简化 在大系统设计中适时使用中间

变量是非常重要的 能使优化与适配器作出更有效的设计方案 使设计逻辑关系更明确 更

节省资源

例如 If ( input == cod ) ...的描述能产生

一个乘积项 如果输入是8位宽数 则增加到 8个乘

积项 又如果此表达使用 10 次 则所编译产生的逻

辑量要花很长的时间编译和花费很大资源去适配 而

且甚至会导致适配失败 但如果引入中间变量就能很

好地解决这个问题 例 5-26

5-5-2 减少相临状态变化量

对所设计的状态机 如果并不在意每一状态具体

构成 则可以通过适当的安排定义 使每一相临状态

的转变只有一位发生变化 这样 也能有效地减少系

统的译码逻辑量 达到简化逻辑的目的

请比较右边两种不同状态机的定义

不难得出 简化逻辑状态定义中的每一相临状态仅有一位变化

5-5-3 使用标识符表示状态

一个状态机有不同的状态 每一状态描述了状态机

在此点处的输出和状态转移情况 一般地 每一状态都

有一个名称 而状态机的运行就是以其不同状态的转移

来描述的 但在真实的器件中 这种状态机运行的依存

者是预设的足够数量的触发器 每一触发器当前状态位

的组合构成了任一确定的状态 所以 所谓状态 实际

上是各个触发器的状态组合

5-5-4 无用状态处理

如果所设的状态机有一个特定的起始状态 必须

定义触发器在上电成其他非正常情况下 即未处于已定

义的状态中 必须保证能在下一时钟脉冲后回到起始

状态 在状态机设计中不能留有不确定状态和死胡同状

5-5-5 运用异或功能简化逻辑

尽可能地运用异或算符或在其中隐含异或功能 这

样可以有效简化逻辑结构 减少乘积项

5-5-6 输出极性控制

由于大部分的PLD 器件的输出端都有一个异或门 所以对输出的极性控制十分方便 无

需增加任何其他逻辑就能容易地改变输出的极性 利用这一特点也能简化逻辑 下例中 OUT1

的正极性输出逻辑有四个乘积项 而负逻辑输出只有二个乘积项 显然有了很大的简化

1 OUT1 = A & C # ( A & D ) # ( B & C ) # ( B & D ) ;

2 !OUT1 = !A & !B # ( !C & !D ) ;

5-5-7 用 istype 来控制输出极性

在 ABEL-HDL中 有两种方式可以来控制极性

适当的极性控制对逻辑都有一定优化作用

1 istype 'neg' 对电路作负极性输出优化 对于真值表或状态图中未指定的逻辑状

态定义为 0

codel node istype 'com' ;

equations

codel = ( input == cod ) ;

If codel .... ; //中间变量是 codel

状态 常规状态定义 简化逻辑状态定义

S0 0 0 0 0

S1 0 1 0 1

S2 1 0 1 1

S3 1 1 1 0

例 5-27

module Y

Q1 pin istype ' com , xor ' ;

a , b , c pin ;

equations

Q1 = a $ b & c ;

end

例 5-28

module Z

q3,q2,q1,q0 pin istype'reg,xor';

clock pin ;

count = [ q3 .. q0 ] ;

equations

count.clk = clock;

count := count.FB + 1 ;

end

1 用 istype 'neg' 或 'pos',或 'dc '

2 用 istype 'invert ',或 'buffer'

Page 39: FPGA/CPLD开发 简明教程bbs.sciencenet.cn/bbs/upload/14290FPGACPLD开发简明教程.pdf第一节 gw48-ck教学实验系统原理与 ... 第五节 abel-hdl 程序设计技巧 第六章

- 36 -

2 istype 'pos' 与 'neg' 相反 它定义为 1

3 istype 'dc' 它具

有更好的优化功能 它将

定义无关状态'dc'

5-5-8 运用低电平输

出有效定义

如果逻辑设计的输出定

义为低电平有效 则最节省

逻辑资源的方法是采用如下

定义

!Q0 pin istype

'reg' ;

5-5-9 结 点 排 除

( Collaps )

对于组合逻辑结点 编

译软件将其列为缺省排除之

列 一个结点究竟是排除还是保留 可以在 ABEL-HDL 中通过定义信号属性来确定

istype 'keep' 表示保留此结点; istype 'collapse ' 表示除去此结点

结点排除的好处是 为组合逻辑提供多层次优化 具有算术或比较器的电路通常会产

生大量的乘积项 这种现象对 PLD 器件的配置是十分不利的 编译程序通过结点排除和产生

多层次逻辑 从而简化了整个逻辑 当然 有的情况下 结点排除反倒起到了相反的作用

这时 可以定义结点保留 Keep

第六/七章请见光盘 PDF 重要文件 第八章 第九章 略

第十章 ispEXPERT 应用向导 详细请见光盘 PDF 重要文件

本章以循序渐进的方式向读者介绍应用 EDA 工具 ispEXPERT,设计基于 ispLSI 的逻

辑系统的详细步骤和设计方法

十进制计数设计

下面我们以建立一个

十进制计数器为例 详细

讲述 Expert 的使用方法

首 先 是 在 您 的

WINDOWS98 上正确安

装 ispExpert 软件

10-1-1 创建新项目

和器件选定

1) 启动 Expert

在Windows98下 选Lattice Semiconductor项的ispExpert System 单击后即进入ispExpert

图 10-1S ispSYNARIO 工程管理窗

图 10-1E ispEXPERT 工程管理窗

Page 40: FPGA/CPLD开发 简明教程bbs.sciencenet.cn/bbs/upload/14290FPGACPLD开发简明教程.pdf第一节 gw48-ck教学实验系统原理与 ... 第五节 abel-hdl 程序设计技巧 第六章

- 37 -

System Project Navigator(图 10-1E)) 如果将一项数字系统设计比喻为一个工程项目

(PROJECT) 那么 此窗口的左半窗口列出的文件项目是整个工程的各项源文件 它们标示

着工程各层次的结构 此窗口称为源文件窗 其中的文件根据在此逻辑设计工程中的层次

依次从上向下排列 而且 文件的位置越偏右 其逻辑层次越低 而右半窗口所列的项目分

别对应左边选中的某一源文件的处理过程与结果 即当鼠标点中左窗某一文件时 右窗即显

示该文件的所有处理过程与结果 以及处理报告

2) 对于任何一个新的设计项目 最好为它开辟一个单独的目录 现在请选择上排的菜

单选项 单击 File 菜单下的 New Project... 弹出 Create New Project 对话框(图 10-2E)

鼠标左键单击按钮 建立目录 在对话框的提示栏中键入 USER 并选择 OK 这样

就在 D 盘的根目 录下建立了一个 USER 目录 当然您也可以在其它目录下建

此其它名字的目录 如 D:\ISPDEMO\ WORK 等 注意 在商业版的 ispExpert 中,可以在

Project type 选项中选择其他语言输入方式 如 VHDL 或 VERILOG-HDL 文本输入方式

3) 再键入项目名 COUNT10.SYN 以取代原来默认的 New.syn 并点击 打开 键 这

样 你就进入了工程项目管理器 现可以在左边窗口看到虚设源文件和器件 Unitiled 和

ispXXXX 现需给项目命名

和选定项目落实的具体的目标

器件

4) 双击左栏的 Untitled

在 Title 文本对话框中键入

COUNT PROJECT(也可取其

它的名字) 并选择 OK 然

后开始选择目标器件

这要根据您的 EDA 实验

开发系统上的芯片型号而定

这里假设您拥有的芯片是

ispLSI1032E 先双击左栏的

器件名 弹出 Choose Device

对话框(如图 10-3E) 可在器件系列窗Device

family 窗口中选择 ispLSI 1000(1000 系

列) 再在 Device 窗口中选择具体的器件

ispLSI1032E-70LJ84 并选择 OK

10-1-2 原理图输入法项目设计

现在开始具体设计 这里首先介绍自上

而下的逻辑设计方法 那就是首先建立最顶

层逻辑描述源文件 如果已对利用 EDA 工

具进行数字系统设计已经比较有经验了 同

时考虑到设计文件的可移植性 则可自始至

终只使用文本型的 ABEL-HDL 来描述您的

整个设计 如果是刚接触此软件 或是为了

教学着想 那么 我们建议您的设计的最顶

层源文件最好使用原理图来描述 这样可以

使逻辑设计更直观 更好懂 因而也更容易

讲解 现在 首先是建立工程设计的总体原理图 即顶层源文件 主要步骤如下

1) 选择总菜单 Source 项下的 New...选项 此时将出现 New Source 对话框(图 10-4)

图 10-2E EXPERT 建立新工程窗

图 10-3E EXPERT 元件选择窗

Page 41: FPGA/CPLD开发 简明教程bbs.sciencenet.cn/bbs/upload/14290FPGACPLD开发简明教程.pdf第一节 gw48-ck教学实验系统原理与 ... 第五节 abel-hdl 程序设计技巧 第六章

- 38 -

选择其中的 Schematic(原理图) 并选择 OK 接着您可在随后跳出的对话框的 文件名(N)

项下键入原理图名 COUNT.SCH 并选择 保

存 即进入原理图编辑窗 图 10-5

2) 点击右上角的小方框 将图放大至全

屏幕 再根据需要 先点击选择横档上的带有

+或 - 的按钮 再移到编辑窗上点击 对原理

图编辑窗进行放大或缩小 然后设定工程设计

纸(SHEET)的大小 以利能容下比较大的设计

项目 首先选择上排菜单 File 的 Sheets...

项 此时 将跳出 Sheets 对话框 点击 Resize

按钮 出现 Resize Sheet 窗下将列出多项不

同 Sheet的可选尺寸 点击一

合适尺寸 再点 OK 即可 为

了改善 Sheet 的视觉效果 可

点击顶栏的 Options 项 选

Preferences...) 项 在跳出

的 对 话 框 中 选 Display

Grid) 再选 OK

3) 下面的工作是在原

理图编辑器的 Sheet 中添加必

要的器件 请先选择 Add 菜

单下的 New Block Symbol 选

项 将出现 New Block Symbol

对话框(图 10-6) 在 Block Name 栏中输

入CNT10, 再用Tab键或鼠标切换至 Input

Pins 栏 输入这个十进制计数器所需的输

入引脚名(此名可任取) 如 EN CLR

CLK 接着用 Tab 键切换至 Output Pins

栏 输入所需的输出引脚 CAO Q3

Q2 Q1 Q0 再按 Run 按纽 器件即

出现在光标上 将它放在合适的位置 单

击左键 图中即出

现该计数器

4) 添加连

线 选择 Add 菜

单中的 Wire 项

单击左键便定义了

连线的始端 将光

标移至线的另一

端 单击左键便可

定义这根线 在连

完一根线之后 单

击右键就可以结束

图 10-4 新文件属性选择

图 10-5 原理图编辑窗

图 10-6 自定义元件模块引脚输入

图 10-7 在原理图上加输入/输出引脚符号

Page 42: FPGA/CPLD开发 简明教程bbs.sciencenet.cn/bbs/upload/14290FPGACPLD开发简明教程.pdf第一节 gw48-ck教学实验系统原理与 ... 第五节 abel-hdl 程序设计技巧 第六章

- 39 -

这一连线 开始下一根线 依次为此计数器的每一引脚拉出一段引线

5) 添加其它器件 选择 Add 菜单下的 Symbol...,将出现一对话框(图 10-7) 在此对话

框中将列出已设置好的 并具有特定逻辑功能的基本逻辑器件 1 选项 MISC 中列的内

容是设计图纸的项目表 2 选项为一位加法器库 3 选项 GATES.LIB 为组合逻辑基本门

库 4 选项 IOPADS.LIB 为各类输入输出接口库 5 选项 MUXES.LIB 为各类多路选择器

库 6 选项 REGS.LIB 为各类基本触发器库 7 选项[Local]为自己设计的本工程中的各种

逻辑器件库等等 本工程选择 IOPADS.LIB 然后选择库中的 G_INPUT 将光标移至原理

图 G_INPUT 器件就会出现在光标上 将其放在 CLK 的连线上 接着选择 G_OUTPUT

将其与各输出引脚的连线相连(图 10-7) 从 EN 端拉出一根向上的连线 从 CLR 拉出一根

向下的连线

这时 如果想对所画的图作一些修改 可在 Edit 菜单项目中寻找修改工具 如要删除

可选 Delete 再用鼠标点击所要删除的内容即可 但若想挽回已删除的内容 可选 Edit 下

的 Undo 若想移动图上的器件 可选 Move 再去点击需要移动的器件 这时若想旋转此

器件 可按键 Ctrl 的同时 按键 R 即可 若想整块搬移 可在选了 Edit 的 Move 后 用鼠

标点住待搬运块上的一点 然后按住向斜角方向拖动 到位后 松开鼠标即可移动此块 再

点击后即可定位

6) 为信号命名 选择 Add 菜单下的 Net Name 项 这时在图的最下方出现命令 Net

Name-Enter Name = 在此键入 VCC 并按回车键 VCC 即出现在光标处 将十字光标的中

心点移至从 EN 拉出的向上的连线头上 点击鼠标即可 就意味着 EN 固定连接到高电平上

了 用同样的方法将 GND 加到 CLR 的连线上 则 CLR 的末端就出现了向下的三角 表示

CLR 固定接到低电平上 注意 这里设置的信号 EN(使能)和 CLR(清零)在此电路上并没有

用上 完全可以不设置

7) 为了完成这个设计 仍如上那样选择 Add 菜单下的 Net Name 项 屏幕底下状态栏

将要给出提示输入连线名 可先输入 CK 并敲回车键 连线名会粘在鼠标的光标上 将光

标移至 CLK 的 IOPAD 器件连线的末端 也即 G_INPUT 的最左端 按住左键 并向左端拖

动鼠标 待拉出一段连线后 松开左键 这时在放置连线名称的同时 画出一根输入连线

然后重复上述步骤 直至加上全部的输出信号 COUT QQ3 QQ2 QQ1 QQ0

注意 在输入

信号名时 最好使信

号名与引脚名保持一

致 因为个别版本的

软件要求信号名与引

脚名保持一致

8) 现在选择 Add

菜单下的 I/O Marker

项 这将出现一个对

话框 选 Input 再

将鼠标的光标移至输

入信号 CK 的连线末

端(位于连线和连线

名之间) 并单击左键 这时会出现一个输入 I/O Mark 框 标记里面是连线名 现在再回到

I/O MAR...对话框中选择 Output 然后分别单击输出线端 使之加上一个输出 I/O Marker

至此 原理图就基本完成了 它应该如图 10-8 所示 现在存盘 选择 File 菜单下的 Save 选

图 10-8 已完成的原理图 引脚号已锁定

Page 43: FPGA/CPLD开发 简明教程bbs.sciencenet.cn/bbs/upload/14290FPGACPLD开发简明教程.pdf第一节 gw48-ck教学实验系统原理与 ... 第五节 abel-hdl 程序设计技巧 第六章

- 40 -

9) 定义器件的引脚属性(Attributes) 可以为任何一个元件符号或连线定义属性 在这个

例子中 可以为输出端口符号添加引脚锁定 Lock 的属性 即确定此项设计在真实器件中的

引脚号 请注意 引脚的属性实际上是加到 I/OPad 符号上的(即在原理图编辑中添加到图中

的 G_INPUT 和 G_OUPUT 上) 而不是在 I/O Marker 上 也就是说 I/O Marker 在原理图中

虽足以表示一个输入输出引脚 但它只是逻辑上的引脚 不能代表 ISP 器件的物理引脚 如

果一个引脚要被定义成 ISP 器件的实际引脚 则必须用 I/O Pad

引脚号锁定方法 先在菜单条上选择 Edit 项 然后选择 Attribute 再选 Symbol

Attribute 项 此时可单击需要定义属性的输出 I/OPad(如 CK) 对话框里会出现一系列可

供选择的属性 如‘35’(请在本刊中查阅有关 ispLSI 器件的引脚标号和功能 不同的器件

其各引脚的标号定义和功能都是不一样的) 单击需要改变的 I/O Pad 如此重复 最后各

引脚设置将如图 10-8 所示 注意 图 10-8 中的引脚号是 ispLSI1016 器件的 如果目标器

件是 ispLSI1032E 则必须根据 GW48 系统使用说明 以确定引脚号 最后关闭 Symbol

Attribute Editor 窗 并选择 File 菜单下的 Save 选项存盘

10) 检查原理图 此项工作并非是必须的 选择 DRC 菜单下的 Consistency Check 项

将会跳出一对当前原理图检查的错误报告 Error Report 窗口 此项检查仅对原理图的绘制

规范性进行检查 对其逻辑功能不作判断

11) 增加文字说明 此项工作并非是必须的 选择 Add 菜单下的 Symbol... 选 MISC

在其菜单下选 Dataio 项 再将鼠标移至此窗口外 并于任何位置点击 这时在图的右下角

出现了一个说明图标 可以在上注明所需要的信息 方法是 选择 Add 菜单下的 Text 这

时在原理图的最下边出现一行文字 Text-Enter Text = 可利用键盘输入需要的文字 再按

回车键 并利用鼠标把此文字放在需要的位置 如果要写中文 可按住 Ctrl 键的同时按横

档键 关闭 CapsLock 键 就能用拼音方式输入中文了 最后存盘退出

12) 这里介绍一些原理图编辑窗的其它功能 初学者可以跳过去

A. Add 菜单下的 Arc Circle Line Rectangle Text 功能项都可对您的设计进行

附加的图线或文字说明 它们没有任何电路特性 文字的大小或排法可选菜单 Options 的

Graphic Options 再设定其 Text Font 或 Text Size 和 Vertical Text(文字纵向排列)

即可 B. Add 菜单的 Bus Tap可用于总线式连接 具有总线结构的元件设计是这样的 Add

菜单项的 New Block Symbol 在 Inputs 或 Outputs 栏中写入的信号名应以诸如

“ =Q[3:0]=,CAO,”方式 C. 如果已提供的原理图的所有尺寸都没有合适的 您可以自定义

首先回到 Synario/Expert 的 Project Navigato 工程项目主管理器界面 选 Options 的 All

Schematic项 在 INI editor 窗中 选Controls项的 Sheet Sizes窗 在此窗中您可以自定义“Sheet”

的大小 然后再回到原理图编辑窗中去设置图面的大小 D 如果您希望将原理图上的有关

内容复制到 Word 文本中去 您可以利用菜单 Edit 的 Copy Image 项对所要复制的图上内容

进行 点-拖-拉-放的办法制造一个块(在图上看不到此块) 这时 此块的内容就进到 Windows

的剪贴板上了 于是 您就可以将它粘到您的 Word 文件中了

10-1-3 元件的 ABEL-HDL 语言描述

从原理图编辑退出后 你可以看到 COUNT10.SCH 下的 CNT10 前面有一个红‘?’ 表示

还未对新加的 CNT10 器件进行逻辑功能描述 下面我们来对它进行 ABEL-HDL 描述

1) 双击CNT10 将出现如图 10-4的New Source对话框 选择其中的ABEL-HDL Module

项 并选择 OK 此时将出现 New ABEL-HDL Source 对话框 请在 Module 栏中输入 CNT10

在 File 栏中输入存盘的文件名 它可以是一个任意的名字 但为统一起见 一般与器件同

名 即也输入 CNT10 并选择 OK 这样就进入了以 CNT10 为 Module 名的 ABEL 编辑器

2) 现可在此 Text Editor 编辑窗中用 ABEL 语言来描述以上原理图中的 10 进制计数器

的逻辑功能了(ABEL 的语法格式可参照本书的有关章节) 程序的具体内容如下

Page 44: FPGA/CPLD开发 简明教程bbs.sciencenet.cn/bbs/upload/14290FPGACPLD开发简明教程.pdf第一节 gw48-ck教学实验系统原理与 ... 第五节 abel-hdl 程序设计技巧 第六章

- 41 -

MODULE CNT10 EN CLK CLR PIN // 输入信号 在此信号 EN和 CLR未用上. CAO PIN ISTYPE ‘COM’ // 组合逻辑方式输出

Q3 . . Q0 PIN ISTYPE ‘REG’ // 时序逻辑方式输出. COUNT = [Q3..Q0] // 数组定义---DECLARATIONS EQUATIONS COUNT.CLK = CLK // 同步时钟

CAO = Q0 & !Q1 & !Q2 & Q3 // 进位输出 WHEN (COUNT >= 9 ) THEN COUNT : = 0 ELSE COUNT : = COUNT.FB + 1 END

如果在别的目录内已有类似的 ABEL-HDL 文件*.abl 可以直接将它插入 方法是 在

此窗中选择 File 菜单下的 Insert 项 点击后 在出现的 Insert File 窗中选定的目录内找到需

要插入的*.abl 文件 插入后稍加修改就可以了 这样既节省了时间 又减少了文件输入出

错的机会 在文件中不必写明芯片的引脚序号 因为已在顶层原理图中输入了 如果顶层文

件是文本方式的 ABEL 文件 则应该将目标芯片的引脚名写在文件中 例如 目标芯片已

选为 ispLSI1032E-70LJ84 将以上文件写为含有引脚锁定信息的顶层文件如下所示 MODULE CNT10 EN CLK CLR PIN 32 33 35 // 输入信号 在此信号 EN和 CLR未用上. CAO PIN 34 ISTYPE ‘COM’ ; // 组合逻辑方式输出

Q3..Q0 PIN 83 82 81 80 ISTYPE ‘REG’ // 时序逻辑方式输出. COUNT = [Q3..Q0] // 数组定义---DECLARATIONS EQUATIONS COUNT.CLK = CLK // 同步时钟

CAO = Q0 & !Q1 & !Q2 & Q3 // 进位输出

WHEN (COUNT >= 9 ) THEN COUNT : = 0 ELSE COUNT : = COUNT.FB + 1 END

最后 文件输入后存盘退出

3) 以上程序的倒数第二句若改成 COUNT := (COUNT.FB + 1)&(COUNT < 9 ) 其逻辑

功能不变 若要将此一位十进制计数器连成多位 最好将语句 CAO = ...改为 !CAO=...

为什么?请在详细仿真后作出判断

10-1-4 逻辑设计的编译与仿真测试

1) 建立仿真测试向量(Simulation Test Vectors) 在项目管理器的主窗口下(图 10-10)

先用鼠标将光标条移至左栏的器件选项 (即移至 ispLSI1032E-70LJ84) 然后选择 Source 菜

单下的 New 选项 在 New Source

对话框中选择 ABEL Test Vectors

并选择 OK 此时弹出 New File 对

话框 键入 COUNT 并选择 OK

这样就进入了测试向量文本输入编

辑器 在此编辑器中可输入对以上

已进行逻辑描述的十进制计数器的

逻辑功能进行模拟测试的测试文

件 利用模拟测试 可以在一定程

度上了解逻辑设计功能的正确性

以利于及时改进 当然 对所设计

的逻辑电路功能的最可靠和最后的

验证测试必须在实验开发板上进行

硬件测试 2) 输入下列测试

向量测试文本如右

图 10-11S SYNARIO模拟波形观察窗

Page 45: FPGA/CPLD开发 简明教程bbs.sciencenet.cn/bbs/upload/14290FPGACPLD开发简明教程.pdf第一节 gw48-ck教学实验系统原理与 ... 第五节 abel-hdl 程序设计技巧 第六章

- 42 -

完成后 选择 File 菜单下的 Save 保存 再选择 File 菜单下的 Exit 退出

3) 测试向量文件书写要点

A 测试向量文件格式与 ABEL-HDL 的*.abl

文件格式基本相似 但要求要宽松的多

B 输入输出信号符号必须是原理图器件上的

I/O Marker内标的 Net Name

C 测试文本中不必列出所有的输入输出信号

名 也不必注明每一信号的输入输出属性

D 利用 .X. 可代表所有的输出信号 .C.表示一个时钟脉冲

E @REPEAT 36 表示其后大括号中的内容被重复书写 36 次 注意其分号放在大括号

F 一个总的

逻辑设计工程项目

只允许有一个测试

向 量 文 件

*.abv 它只对总

的逻辑系统进行模

拟测试 如果只想得到其中某一层次的元件的模拟波形 有两种方法可以用

1 在原理图中对此器件的待测引脚加 Net Name 和 I/O Marker 这样就能在功能模拟

波形显示窗中找到这个引脚的信号

2 专门为此器件建立一个工程

文件 以利进行单独测试

4) 编译原理图和测试向量 现在

已此设计建立好了所需的源文件 下一

步是执行每一个源文件所对应的处理过

程 现从主项目管理器中选择不同的源

文件(包括原理图 ABEL 语言描述

向量测试文件)分别进行编译 现可以

在窗口的 Processes for Current

Source 栏中看到对应的 Compile

项 选择该选项 就可以看

到对应的处理过程

5) 如果需要对原理

图进行处理 其过程是 先

用鼠标左键单击右窗的

count(count.sch)项

使其变深色 此时右边

Processes for Current

Source 栏 中 会 出 现

Reduce Schematic

Logic 选项 双击该选项

就可以看到该工作过程 如

果所设计的原理图没有问

MODULE CNT10

CK COUT QQ3..QQ0 PIN ;

OUT1 = [COUT QQ3..QQ0] ;

TEST_VECTORS ( CK > [ OUT1])

@REPEAT 36 { .C. > [.X.] ; }

END

图 10-11E EXPERT 模拟波形观察控制面板

图 10-12S SYNARIO软件的计数器工作波形

图 10-12E EXPERT 软件的计数器工作波形观察窗

Page 46: FPGA/CPLD开发 简明教程bbs.sciencenet.cn/bbs/upload/14290FPGACPLD开发简明教程.pdf第一节 gw48-ck教学实验系统原理与 ... 第五节 abel-hdl 程序设计技巧 第六章

- 43 -

题 编译结束后会出现两个绿色的勾

6) 同样方法 可以继续对 CNT10.ABL 进行处理 过程是 先用鼠标左键单击右窗的

cnt10(cnt10.abl)项 使其变深色 此时右边栏中会出现 Reduce Logic 等选项 双击该选项

如果 cnt10.abl 的文本设计没有问题 编译结束后也会出现两个绿色的勾

7) 当完成测试向量的输入后 可以对设计方案进行测试 Expert 提供功能或时序仿真

可以通过编写测试向波形 波形仿真后观察输出波形 以判断设计上逻辑是否正确 其步骤

是 首先建立测量文件 输入所需要的测试向量 这一步上面已经完成了 在进行波形仿

真时

8)

在 项 目 管 理 器

(ispExpert System

Project Navigator)

下 用鼠标左键单击

count.abv 此时右

边即出现 Compile

Test Vectors 等与

count.abv 相关的

处理项目 请双击

Compile Test

Vectors 如果向

量测试的编译成功,

Compile Test

Vectors 出现一个

绿色的勾 否则如

果向量 测试的

编 译 出 错 ,

Compile Test

Vectors 会出现一

个红色的叉 可针

对 编 译 报 告

automake.log

的提示进行修改

直到编译成功 再

双击 Functiona Simulation 或 Timing Simulation 并等待它完成 如无问题 将出现仿

真器控制面板(如图 10-11E) 单击 Window 菜单下的 Waveform wiever 将弹出 Waveform

Viewer 窗口 如图 10-12E

10). 选择 Edit 菜单下的 Show 选项 将跳出 Show Waveforms 窗口 在 Nets 窗栏中选

择您所要观察的波形信号名 比如用鼠标左键单击 CK 然后选择 Show 你就可以在屏幕上

看到 CK 波形项了 同样的方法可以得到QQ0 QQ1 QQ2 QQ3 及 COUT 等信号的波形项(图

10-12E) 如果感到这样观察波形不够直观 可以用鼠标左键单击 Show Waveform 窗口的

Bus>> 按钮 这时此窗口会向右扩展一页 您先点击 Nets 栏下的 QQ0 再点击右边的 Add

Net(s)键 这样 QQ0 就会出现在右栏的 Bus Members 窗中 同样方法分别将 QQ1 QQ2 QQ3

送入右栏中 为了观察方便 压住鼠标左键从 QQ0 的上面向下拖 直至将 QQ0 至 QQ3 拖成深

图 10-13E EXPERT软件仿真波形

图 10-14E EXPERT 步进仿真控制面板

Page 47: FPGA/CPLD开发 简明教程bbs.sciencenet.cn/bbs/upload/14290FPGACPLD开发简明教程.pdf第一节 gw48-ck教学实验系统原理与 ... 第五节 abel-hdl 程序设计技巧 第六章

- 44 -

色 选定 QQ0 QQ1 QQ2 QQ3 接着点击下方的 Reverse 按钮 这时 QQ0 至 QQ3 的排列就

会相反 再点击 Save Bus 最后点击左栏的 Show 键 此时 就可在波形窗中看到将 QQ3 QQ2

QQ1 QQ0 四个信号合在一起的总线(Bus)方式表示的波形 这种方式观察波形对多路数据信

号的观察十分有用 如果还想观察第二条 Bus 可先点击 New Bus 键 再

对关心的信号重复上面的操作即可 最后关闭 Show Waveform 窗,单击仿真器控制面板 图

10-11E 中的 Run按钮 Waveform Viewer 窗口中各选定信号的波形(如图 10-13E)

11) 现在让我们来仔细观察这个10进制计数器的工作波形 请点击View菜单下的Zoom

In(放大波形图 Zoom Out 为缩小波形图) 再连续点击波形图 直至能看清波形图上的$Bus1

线中的 0,1,2,3,...为止 从波形可以看出 我们的设计是正确的 选择 File 菜单下的 Save

选项 存好波形文件后关闭波形观察窗

12) 在 Expert 的仿真器控制面板 如图 10-11E 中,还有一些其它的功能,下面简介

步进仿真功能和仿真报表

A 步进仿真功能 单击仿真器控制面板上的 Debug>>按钮 仿真器控制面板会向下

扩展一窗口(如图 10-14E),选定 Available Signals 栏中您要单步仿真的信号(如 COUT 单

击 Monitor 按钮

将 信 号 加 到

Signal States 栏

下 同样的方法可

以将其它信号加进

来 在 Step

Interval 编辑框

中输入步进时间间

隔 按一下 Step

按钮 时间将向后

推一个步进时间间

隔 在 Time 编辑

框中显示当前时

间 在 Signal

States 栏中的信

号前将显示当前信号值 单击 File 菜单里的 Reset 将复位 当前时间回到 0

B 仿真报表 单击仿真器控制面板上 Reports 菜单下的 Trace Report 项,在 Report

viewer 将列出测试向量文件的仿真结果 如图 10-15E 还有一种产生仿真报表的操作 单

击仿真器控制面板上 Reports 菜单下的 Tabular Output 项将出现 Tabular Output 框 如

图 10-17E 在 Available Signals 栏下先中您要列入报表的信号 如 CK 然后 单击 Add

按钮 将该信号加到 Output Signals 栏下 如要该信号与下一个信号用空格隔开 可单击

Blank 按钮 同样的方法将将其它需要的信号加入 在 Report interval 栏中 选 On Change

单击 Generate 按钮 将产生仿真报表 如图 10-16E

10-1-5 逻辑工程设计的适配

所谓适配就是将以上完成的逻辑设计针对已选定的器件 在适配软件的帮助下 形成能

装进芯片的熔丝图文件(*.jed) 在此 就是将设计项目适配到 isp1032 中去 这是一个将

逻辑设计转化成为适合于具体的isp 器件的设计的过程 通过适配 将生成标准的 JED 熔丝

图文件 以供 烧录 到具体的芯片中之用 需要明白的是 前面各部分设计的“通过”并不

能保证其适配也能“通过” 因为以上的所有操作都是与具体器件无关的 不涉及具体器件

图 10-17E Tabular Output 框

Page 48: FPGA/CPLD开发 简明教程bbs.sciencenet.cn/bbs/upload/14290FPGACPLD开发简明教程.pdf第一节 gw48-ck教学实验系统原理与 ... 第五节 abel-hdl 程序设计技巧 第六章

- 45 -

1) 双 击 Fit

Design 这将使项目

管理器完成对源文件

的编译 然后连接所

有源文件 最后再进

行逻辑分割 将所有

设计的逻辑进行适配

或者说映射到所选择

的 PLD 器件中去

适配结束后 如果不

通过 在有关项目上

会出现红色的叉 并

弹出 automake.log 报

告 请仔细研读报告 找出问题所在 重新进行适配运行 直至成功 当然 如果有 Warnings

出现 就会出现黄色的惊叹号 这也算成功 但您也不妨看一下此 Log 报告 了解一下 warnings

的产生原因

4) 当上述步骤完成后 你不妨双击 ispDS+ Fitter Report 查看一下有关的设计报告和统

计数据 以便详细

了解此设计在芯片

中的适配情况 了

解芯片的逻辑资源

和布线资源的占用

情况 了解各输入

输出引脚的锁定位

置和引脚属性确

定 了解 warnings

的产生原因 了解

ISP 下载设定及加

密的设定情况等

等 通过研读此报

告 不断对各项适配设置进行修改尝试 以达到不断提高和纯熟您的 EDA 水平和优化您的

设计项目的目的 至此 通过以上步骤 就完成了一次完整的设计

10-1-6 编程下载

一项成功的逻辑设计必须能经得起硬件芯片运行实践的检验 这是获得 EDA 实际经验

的必经之途 专业的 EDA 实验开发系统为此提供了良好的实践环境 EDA 工程技术的运用

与纯软件工程的最大不同之处就在于此 在一般的EDA工程中 设计项目的最终归宿是CPLD

或 FPGA 器件 是一个实际的电路系统 或是一个电子产品 在此 编程下载就是将自己

完成的逻辑设计 烧录 到具体的器件中去

1 按照 EDA 实验开发系统使用说明 接好工作电源 用专用的 ISP 下载线连接好微机

和 EDA 实验开发系统

2 用鼠标双击项目管理器右栏最下一行的 isp Download System 编程下载项目 此时弹

出一窗口 LSC ISP Daisy Chain Download Version 5.1.2

3 将鼠标移至 Configuration 上点击 并选 Scan Board(扫描搜索电路板) 或直接点击

横档上的小方钮 Scan 按纽 如果电路板连接无误 这时应当出现电路板上链接在一起的

图 10-18 ISP菊花链编程下载窗

图 10-19 选定 JED 下载文件

Page 49: FPGA/CPLD开发 简明教程bbs.sciencenet.cn/bbs/upload/14290FPGACPLD开发简明教程.pdf第一节 gw48-ck教学实验系统原理与 ... 第五节 abel-hdl 程序设计技巧 第六章

- 46 -

ISP 器件的型号 具体窗口如图 10-18

4 单击 Browse 按纽 将弹出如下对话框(图 10-19) 选择在上面设计中生成的 JED 文

件 count10.jed 并按 OK(或确定)退出 此时 点击 Command 菜单项目下的 Run Operation

或直接点击横档上的小方钮(上面有一个跑步的小人) 下载软件就会将 JED 文件以串行方式

烧写到 ISP 器件中去 如果下载成功 会出现 PASS 字样 至此 可以在 EDA 实验开发

系统上对设计进行最后的硬件测试了 测试方法须按照第二章的 EDA 实验开发系统使用说

明进行

10-1-7 GW48 系统的编程下载测试

如果已配备了 ispLSI1032E 的 GW48 实验开发系统 对于 GW48 系统使用说明 请阅

读第 1 章 需要对以上的设计作一些小的改进才能进行下载测试 方法如下

1 先回到 Project Navigator 主项目管理器 双击左栏的 count.sch 以激活原理图编辑器

修改 CNT10 计数器的锁定引脚数值 以适应 isp1032E 芯片的需要 在此可以参照 GW48 系

统的 实验结构图NO.5 附图2-7 再参看第一章第 3节附表关于 1032E的 IO引脚与GW48

系统 PIO 的对应关系 您会发现 1032E 的 IO 引脚与 GW48 系统 PIO 的标号几乎是一至的

但其它芯片就不这样了 将此计数器的 CK QQ0 QQ1 QQ2 QQ3 和 COUT 分别锁定

在引脚 33(IO7 80(IO44) 81(IO45) 82(IO46) 83(IO47)和 34(IO8)

2 在主项目管理器窗口中双击右栏的 Fit Design 对此芯片进行编译(注意 可对选

中 Fit Design 下的 Properties 各项进行设置 当然也可只选默认值 按键 Defaults)

3 若编译通过 就进行下载 下载方法与上面完全一样 下载成功后既可进行硬件测

试 先通过 GW48 板上的“模式选择”健进行模式选择 在此选“5” 即使 GW48 系统的电路

结构变成 实验电路结构图 NO.5 所示的电路连接形式 此时 实验板上的“键 8”变成了

一个单脉冲发生器的按键 每按一次键 将对实验板上的 ISP1032 的 IO7 口输入一个脉冲

这样就可以对 1032E 中已设计好的计数器进行加 1 操作 其加 1 后的 4 位 2 进制计数(BCD

码)器通过实验板上的 7 段译码器显示在数码管“数码 8”上 若连续按键“键 8” “数码 8”上

的数就会递增 同时请注意发光管“D1”将显示计数器的进位 当计到 9 时会发亮(进位输出)

4 如果愿意 可以退出下载窗口后 对 cnt10.abl 文件进行修改 将原来的 10 进制改

成 8 进制或 16 进制计数器 同时还可改变进位的方式 或在原理图中将多个计数器链接后

形成一多位十进制计数器 然后编译后再重复前面的操作 或在实验板上进行实验 看结果

有何变化

第十一章 数字系统设计示例 用 XCOPY 命令将光盘上 目录为 ISPDEMO 的实验示例复制到计算机的硬盘上

以下即为若干个完整的 ISPLSI 设计示例 演示前应完成如下步骤 1 将下载通讯线的一头

接微机的并行通讯口 另一端接 GW48 EDA 实验\开发系统 2 接上直流稳压电源 若显

示不正常 应立即关电 检查无误后再接电 3 进入 WINDOWS 打开 EXPERT 窗口 并

打开指定的目录下的示例文件 通过观察各个设计文件了解该项设计的逻辑功能和引脚情

况 4 打开 DOWNLOAD 下载窗口 将该项设计的 JED 文件下载于 GW48 系统 5 根据

所需的实验结构代码 设置好 GW48 上的实验结构模式 6 重新打开 EXPERT 窗口 一边

观察该项设计的原理图 一边根据示例 在 GW48 系统上进行相应的实验

另建一子目录 将此十六例用 XCOPY 命令复制到此目录 然后在每一原示例的基础上

根据习题要求加以改进 最后 在实验板上演示出每一项实验

11-1 英语字母显示电路

此显示器是以状态图的方式设计的时序电路 对于每一时钟脉冲 将改变一种状态

Page 50: FPGA/CPLD开发 简明教程bbs.sciencenet.cn/bbs/upload/14290FPGACPLD开发简明教程.pdf第一节 gw48-ck教学实验系统原理与 ... 第五节 abel-hdl 程序设计技巧 第六章

- 47 -

利用每一状态 7 个位的输出组合 形成对应于仿造 26 个英语字母字形在数码管上的 7 段显

示符 其逻辑图如图 11-1 所示

需要特别说明的是 为了便于阐述在 EDA 实验系统上进行逻辑功能的硬件验证 以后

的各设计项目逻辑图中的

引 脚 锁 定 大 多 基 于

ISPLSI1032E 的引脚编

号 并在编号前加 P

如图 13-1 中的 P51 表

示 1032E的第 I/O22的 51

脚 请参阅第一章第 3

节 如果实验用的目标

芯片是其它芯片 例如是

XCS05 则可通过查阅第

一章第 3 节 得到对应于 P51 的引脚号为 29 脚 PIO22 程序 11-1 为该项设计的逻辑

描述

硬件逻辑验证操作方法 选 ISPDEMO 目录中的 ABCD 向目标芯片下载适配后的

逻辑设计文件 选择实验电路结构 NO.6 由键 7 每输入一个高低电平(脉冲) 则由数码 5

显示一个随脉冲递增的英语字母 a b c … … y z a b 键 8 是复位键 高电平 D15

亮 电路系统复位 系统回到初始状态 低电平时允许计数脉冲进入 请注意 由实验电路

结构 NO.6 附图 2-8 可见 由于 I/O22--I/O16 是与数码管的 a b c d e f g 七段码

并接的 所以与 I/O22--I/O16 相接的发光管也将作相应的显示 如 数码 5 显示 C 时

则发光管显示 ^HB9程序 11-1

MODULE ABCCNT CLK PIN; G, F, E, D, C, B, A PIN ISTYPE 'REG' ;EQUATIONS COUNT.CLK = CLK ; STATE_DIAGRAM [ G, F, E, D, C, B, A ] STATE ^B0000000 : GOTO ^B1110111 ; STATE ^B1111111 : GOTO ^B1110111; STATE ^B1110111 : GOTO ^B1111100 ; STATE ^B1111100 : GOTO ^B0111001; STATE ^B0111001 : GOTO ^B1011110 ; STATE ^B1011110 : GOTO ^B1111011; STATE ^B1111011 : GOTO ^B1110001 ; STATE ^B1110001 : GOTO ^B1101111; STATE ^B1101111 : GOTO ^B1110110 ; STATE ^B1110110 : GOTO ^B0000110; STATE ^B0000110 : GOTO ^B0001110 ; STATE ^B0001110 : GOTO ^B1110101; STATE ^B1110101 : GOTO ^B0111000 ; STATE ^B0111000 : GOTO ^B0110111; STATE ^B0110111 : GOTO ^B1010100 ; STATE ^B1010100 : GOTO ^B0111111; STATE ^B0111111 : GOTO ^B1110011 ; STATE ^B1110011 : GOTO ^B1100111; STATE ^B1100111 : GOTO ^B1010000 ; STATE ^B1010000 : GOTO ^B1101101; STATE ^B1101101 : GOTO ^B1111000 ; STATE ^B1111000 : GOTO ^B0111110; STATE ^B0111110 : GOTO ^B0011100 ; STATE ^B0011100 : GOTO ^B1111110; STATE ^B1111110 : GOTO ^B1100100 ; STATE ^B1100100 : GOTO ^B1101110; STATE ^B1101110 : GOTO ^B1011011 ; STATE ^B1011011 : GOTO ^B1110111;END

11-2 8 位加法器

图 11-2 所示的逻辑电路是由两个并行进位 4 位加法器级联而成的 8 位 2 进制加法器

其中的 4 位二进制加法器的逻辑描述如下

程序 11-2MODULE ADD6 A4..A1, B4..B1 , C0 PIN; C1 , S4..S1 PIN ISTYPE 'COM '; AA = [ 0,A4..A1] ; BB = [ 0,B4..B1] ;

图 11-1 英语字母显示器逻辑图

Page 51: FPGA/CPLD开发 简明教程bbs.sciencenet.cn/bbs/upload/14290FPGACPLD开发简明教程.pdf第一节 gw48-ck教学实验系统原理与 ... 第五节 abel-hdl 程序设计技巧 第六章

- 48 -

CC = [ 0, 0, 0, 0, 0 ] ; SS = [C1, S4..S1] ;EQUATIONS SS = AA + BB + CC ;END

硬件逻辑验证操作方法 选

ISPDEMO 目录中的 ADDC 向目

标芯片下载适配后的逻辑设计文件

选择实验电路结构 NO.1 由第一章

第二节的实验电路结构 NO. 1 和图

11-2 的引脚锁定情况可知 此加法

器的 4 位被加数 A 和加数 B 值分别

由键 2 与键 1 键 4 与键 3 输入 计

算结果将显示于数码 6 高 4 位 和

数码 5 低 4 位 溢出进位为 I/O39

CC1 当进未时 结果显示于 D8 发光管 键 8 可控制加法器的最低位进位输入 CC0

即高电平时 CC0=1

11-3 8 位乘法器

I_43

EA

LCLO

KE

NC

CLK

I_42

SHIFTL

B1B2B3B4B5B6B7B8

CLKLOAD

Q1

Q10Q11Q12Q13Q14Q15Q16

Q2Q3Q4Q5Q6Q7Q8Q9

I_376

I_394

I_40

SHIFT

A1A2A3A4A5A6A7A8

CLKLOAD

QQ

I_38

ANDLAND

BB1

BB10BB11BB12BB13BB14BB15BB16

BB2BB3BB4BB5BB6BB7BB8BB9

O1

O10O11O12O13O14O15O16

O2O3O4O5O6O7O8O9

I_3

LATCH16

CLKCLR

D1

D10D11D12D13D14D15D16

D2D3D4D5D6D7D8D9

Q1

Q10Q11Q12Q13Q14Q15Q16

Q2Q3Q4Q5Q6Q7Q8Q9

I_41

ADD

A1

A10A11A12A13A14A15A16

A2A3A4A5A6A7A8A9

B1

B10B11B12B13B14B15B16

B2B3B4B5B6B7B8B9 S1

S10S11S12S13S14S15S16

S2S3S4S5S6S7S8S9

P41P40P39P38P37P36P35P34

ENABLE

P60P59

CLOKKP58P57P56P55P54P53P52P51P50P33P49

P32P48

P31 P47P30

P46P29

P45P28P27P26

16位锁存器

实验电路结构NO.1

16位乘积输出

16位加法器

右移串行输出

8位右移寄存器8位被乘数

运算时锺输入

16位左移寄存器

8位乘数

控制器

乘法运算

CLK0

I/O49

运算开始数据加载

图 11-3 8 位乘法器逻辑图

硬件逻辑验证操作方法 选 ISPDEMO 目录中的 MULTI 向目标芯片下载适配后的

逻辑设计文件 选择实验电路结构 NO.1 1 键 2 和键 1 分别输入乘数的高 4 位和低四位(输

入值显示于数码 2 和数码 1) 2 键 4 和键 3 分别输入被乘数的高 4 位和低四位(输入值显

示于数码 4 和数码 3) 3 乘法操作时钟信号输入 ISP1031E 的 CLK0(PIN 6) 如分别选择

1HZ 16HZ 和 16384HZ 进行运算测试 此频率决定乘法运算的速度 4 键 8 输入高电平

图 11-2 8位加法器逻辑图

Page 52: FPGA/CPLD开发 简明教程bbs.sciencenet.cn/bbs/upload/14290FPGACPLD开发简明教程.pdf第一节 gw48-ck教学实验系统原理与 ... 第五节 abel-hdl 程序设计技巧 第六章

- 49 -

时 乘积锁存器清零 乘数和被乘数值加载 低电平时开始作乘法操作 8 个脉冲后乘法结

束 乘积显示于数码 8 7 6

5 高位在左 乘法器中各元

件的 ABEL 描述由读者完成.

11-4 序列检测器

序列检测器可用于检测一

组或多组由二进制码组成的脉

冲序列信号 这在数字通讯领

域有广泛的应用 当序列检测

器连续收到一组串行二进制码

后 如果这组码与检测器中预

先设置的码相同 则输出 1

否则输出 0 由于这种检测的

关键在于正确码的收到必须是

连续的 这就要求检测器必须

记住前一次的正确码 直到在

连续的检测中所收到的每一位

码都与预置数的对应码相同

在检测过程中 任何一位不相

等 都将回到初始状态 重新

开始检测 有鉴于此 利用

Moore 状态机方式来设计序列检测器的逻辑最为方便 如图 11-4 所示 当一串待检测的串

行数据进入检测器后 若此数在每一位的连续检测中都与预置的密码数相同 则输出 A

否则仍然输出 B 逻辑描述如下

程序 11-4MODULE CHK title 'SERIAL NUMBER CHECKER' DIN,CLK,CLR ,D7..D0 PIN ; Q3,Q2,Q1,Q0 NODE ISTYPE 'REG'; AB3..AB0 PIN ISTYPE 'COM' ; SS = [Q3,Q2,Q1,Q0] ; AB = [AB3..AB0] ; EQUATIONS SS.CLK = CLK ; SS.CLR= CLR ; STATE_DIAGRAM SS STATE 0 : AB=^HB ; IF (DIN == D7) THEN 1 ELSE 0 ; STATE 1 : AB=^HB ; IF (DIN == D6) THEN 2 ELSE 0 ; STATE 2 : AB=^HB ; IF (DIN == D5) THEN 3 ELSE 0 ; STATE 3 : AB=^HB ; IF (DIN == D4) THEN 4 ELSE 0 ; STATE 4 : AB=^HB ; IF (DIN == D3) THEN 5 ELSE 0 ; STATE 5 : AB=^HB ; IF (DIN == D2) THEN 6 ELSE 0 ; STATE 6 : AB=^HB ; IF (DIN == D1) THEN 7 ELSE 0 ; STATE 7 : AB=^HB ; IF (DIN == D0) THEN 8 ELSE 0 ; STATE 8 : AB=^HA ; IF (DIN == 0) THEN 9 ELSE 0 ; STATE 9 : AB=^HA ; GOTO 0 ; STATE 10 : AB=^HB ; GOTO 0 ; STATE 11 : AB=^HB ; GOTO 0 ; STATE 12 : AB=^HB ; GOTO 0 ; STATE 13 : AB=^HB ; GOTO 0 ; STATE 14 : AB=^HB ; GOTO 0 ; STATE 15 : AB=^HB ; GOTO 0 ;END

硬件逻辑验证操作方法 选 ISPDEMO 目录中的 SCHEK1 向目标芯片下载适配后

的逻辑设计文件 选择实验电路结构 NO.8 1 用键 2 和键 1 键输入 2 位 16 进制待测序列

数 2 利用键 4 和键 3 输入 2 位 16 进制预置码 3 按键 8 高电平初始化清零 低电

图 11-4 8 位序列检测器逻辑图

图 1-5a 脉宽数控调制信号发生器逻辑图

Page 53: FPGA/CPLD开发 简明教程bbs.sciencenet.cn/bbs/upload/14290FPGACPLD开发简明教程.pdf第一节 gw48-ck教学实验系统原理与 ... 第五节 abel-hdl 程序设计技巧 第六章

- 50 -

平清零结束 平时数码 7 应显 “ B ” 4 按键 6(CLK) 8 次 这时若串行输入的 8 位 2

进制序列码与预置码相同 则数码 7 应从原来的 B 变成 A 表示序列检测正确

11-5 正负脉宽数控调制信号发生器

如图 11-5a 所示 此信号发生器是由两个完全相同的可自加载加法计数器组成的 它的

输出信号的高低电平脉宽可分别由两组 8 位预置数进行控制

自加载加法计数器则是由初始值可预置的加法计数器构成 如果将其计数溢出作为信号

输出 则有数控分频器的功能 但如果将其溢出信号作为本计数器的初始预置值加载信号

LD 则可构成计数初始值自加载方式的加法计数器 图中的 D 触发器的一个重要功能

就是均匀输出信号的占空比 这对驱动实际的电动机十分重要

图 11-5a 中的硬件 CNT10 的逻辑描述如下

程序 11-5MODULE CNT10 CLK1, LD, D7..D0 PIN; CAO PIN ISTYPE 'COM'; Q7..Q0 NODE ISTYPE 'REG'; COUNT = [ Q7..Q0 ] ; DD = [ D7..D0 ] ;EQUATIONS COUNT.CLK = CLK1 ; COUNT := (COUNT.FB + 1) & !LD # LD & DD ; CAO = (COUNT == ^HFF) ;END

硬件逻辑验证操作方法 选 ISPDEMO 目录中的 DIVF2 向目标芯片下载适配后的

逻辑设计文件 选择实验电路结构 NO.1 通过键 2 和键 1 输入高电平脉宽控制预置数(显示

于数码 2 和 1) 2 由键 4 和键 3 输入低电平脉宽控制预置数(显示于数码 4 和 3) 待分频

频率 F=12MHZ 6MHZ 或 3MHZ 通过短路帽输入 CLK9(12)口 频率输出 I/O32(68)

可利用示波器从此处观察波形的变化 当输出端选为 I/O50 5 CLK9 选 3MHZ 时 可在

小扬声器中听到尖锐的声音

实验习题: 结合以上示例及图 11-5b 的实验习题逻辑描述和逻辑图 完成习题

A 画出 CLK CAO HALFFOUT 的信号

波形 并说明其逻辑功能

B 当 CLK 的频率改变时 信号 HALF 和

FOUT 之间有何变化关系

C 满足 HALF 为 1 的逻辑实质是什么

HALF 信号有何功能

D 从示波器上观察输出信号 FOUT 并比

较 D 触发器的清零端 C 接 HALF 或不接 HALF

信号时 FOUT 的变化情况

E 这是一个颇有实用价值的逻辑模块 请

利用它完成一项实用的电子设计 实验习题逻辑描述:程序 11-6

MODULE CNT10 CLK1 , LD , D7..D0 PIN; CAO , HALF PIN ISTYPE 'COM'; Q7..Q0 NODE ISTYPE 'REG'; COUNT = [Q7..Q0] ; DD = [D7..D0] ;EQUATIONS

COUNT.CLK = CLK1 ; COUNT := (COUNT.FB + 1) & !LD # LD & DD ; CAO = (COUNT == ^HFF) ; HALF = ( COUNT == [1, D7, D6, D5, D4, D3,D2,D1] ) ;END

图 11-5b 实验习题逻辑图

Page 54: FPGA/CPLD开发 简明教程bbs.sciencenet.cn/bbs/upload/14290FPGACPLD开发简明教程.pdf第一节 gw48-ck教学实验系统原理与 ... 第五节 abel-hdl 程序设计技巧 第六章

- 51 -

EDA/VHDL 实验培训讲义§ 2.1 用 VHDL 设计多路选择器和锁存器

1 2 选 1 多路选择器设计

图 2-1 是一个 2 选 1的多路选择器逻辑图 a和 b 分别是两个数据输入端的端口名 s 为

通道选择控制信号输入端的

端口名 y 为输出端的端口

其逻辑功能可表述为

若 s 0 则 y a 若 s 1 则

y b

此选择器的功能可作如下的

VHDL描述,

这是一个完整的 2 选 1 多

路选择器的 VHDL 文件 VHDL 编译器和综合器可以独立

地对它进行编译和综合 对于综合后得到的标准格式网表

文件 如 EDIF 文件 可用于通过针对特定的目标芯片

如 ALTERA 公司的某一器件 EPM7128S 进行适配 由此

可获得对应的仿真文件和编程下载文件 前者可用于对程序 2-1 的设计进行仿真测试 以便

了解其逻辑功能是否满足原设计的要求 而后者是对器件 EPM7128S 的编程文件 可用于

实现硬件功能和完成硬件测试 HARDWARE DEBUG 即可利用某个 EDA 平台 例如

MUX+PLUSII(详细使用方法可参考第 12 章) 将此 VHDL 文件进行编译 综合等处理 然

后将 mux21 的 4 个引脚信号 a b s y 锁定于某个具体的目标芯片引脚上 再进行映射

适配 即利用计算机 在 MUX+PLUSII 的帮助下 将程序 2-1 的文件综合后得到的网表文

件 配置进该选定的 FPGA或 CPLD器件中 最后将所得的配置文件编程下载进这一芯片中

这时芯片就有了如程序 2-1所描述的 2选 1逻辑器件 mux21的功能 如果对这片赋予了 2

选 1 逻辑功能的器件进行实际的测试 即为硬件仿真 集成电路厂商能够很容易地将符合

工业标准的 VHDL 所描述的逻辑设计文件综合成可映射于半导体门阵列的网表文件 但是

如果仅仅准备将此芯片直接用于产品的电路板上 这个测试过程只能称为硬件调试

从上例文件的描述层次上来看 选择器整体设计的 VHDL描述使用了三个层次

(1) 库(LIBRARY)说明

它包含了描述器件的输入 输出端口数据类型 即端口信号的取值类型或范围 中将

要用到的 IEEE的标准库中的 STD_LOGIC_1164程序包

明确地指定和严格地定义端口信号的取值类型是 VHDL 的重要特点 此所谓强类型语

言 这是学习 VHDL特别应当注意的地方

(2) 实体(ENTITY)说明

实体的电路意义相当于器件 在电路原理图上相当于元件符号 实体是一个完整的

独立的语言模块 它描述了 mux21接口信息 定义了器件 mux21端口引脚 a b s y的

输入输出性质和数据类型 它利用 PORT 语句说明了 mux21 的外部引脚的工作方式 所以

PORT 所描述的就相当于电路器件的外部引脚 IN 对端口引脚 a 和 b 作了信号流向的方向

程序 2-1 LIBRARY IEEE;IEEE库使用说明 USE IEEE.STD_LOGIC_1164.ALL;

ENTITY mux21 IS器件 mux21的外部 PORT ( a b : IN STD_LOGIC;接口信号说明 PORT s : IN STD_LOGIC;相当于器件的引脚 y : OUT STD_LOGIC );这一部分称为实体 END ENTITY mux21;

器件 mux21的内部 ARCHITECTURE one OF mux21 IS工作逻辑描述 即 BEGIN为实体描述的器件 y <= a WHEN s = '0' ELSE功能结构 称为结 b WHEN s = '1' ;构体 END ARCHITECTURE one;

图 2-1 2 选 1选择器 mux21

Page 55: FPGA/CPLD开发 简明教程bbs.sciencenet.cn/bbs/upload/14290FPGACPLD开发简明教程.pdf第一节 gw48-ck教学实验系统原理与 ... 第五节 abel-hdl 程序设计技巧 第六章

- 52 -

说明 它规定了信号必须由外部通过端口引脚 a b流进所描述的器件内部 而 OUT则规定

了器件内部的信号需通过端口引脚 y 向外输出 同时指明了端口 a b s 和 y 信号的数据

类型是符合 IEEE 库中 STD_LOGIC_1164 程序包中的标准数据位 STD_LOGIC 中所定义

的数据类型

(3) 结构体(ARCHITECTURE)说明

这一层次描述了 mux21 内部的逻辑功

能 在电路上相当于器件的内部电路结

构 此例的逻辑描述十分简洁 它并没

有将选择器内部逻辑门的连接方式表达

出来 而是将此选择器看成一个黑盒

以类似于计算机高级语言的表达方式描

述了它的外部逻辑行为 符号 <=

是信号赋值符 是信号传递的意思 y

<= a 表示将 a 获得的信号赋给(传

入)y输出端 这是一个单向过程

需要指出的是 程序 2-1 中 实体和

结 构 体 分 别 是 以 END ENTITY

mux21 和 END ARCHITECTURE

one 语句结尾的 这是符合 VHDL 新

版本 IEEE STD 1076_1993 的语法

要求的 若根据 VHDL’87版本 IEEE

STD 1076_1987 的语法要求 这两

条结尾语句只需写成 END mux21

和 END one 但考虑到目前绝大多

数常用的 EDA 工具中的 VHDL 综合器

仍以支持 VHDL'87 版本所有语法规则

为主 且许多最新的 VHDL 方面的资

料 仍然使用 VHDL’87版本语言规则

因此 出于实用的目的 对于以后出现

的示例 不再特意指出 VHDL 两种版本的语法差

异处

一个可综合的 VHDL 描述的最小和最基本的

逻辑结构中 IEEE 标准库说明 实体和结构体

是最基本的和不可缺少的三个部分 其它的结构

层次可根据需要选用 程序 2-1 作为一个完整

的 VHDL 描述既可以作为一个独立的功能器件使

程序 2-3 --或门逻辑描述LIBRARY IEEE ;USE IEEE.STD_LOGIC_1164.ALL;ENTITY or22 IS PORT (a,b :IN STD_LOGIC; c : OUT STD_LOGIC );END ENTITY or22

ARCHITECTURE fu1 OF or22 IS BEGIN c <= a OR b ; END ARCHITECTURE fu1; --半加器描述 LIBRARY IEEE; 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 <= (a OR b)AND(a NAND b); co <= NOT( a NAND b); END ARCHITECTURE fh1; --1位二进制全加器顶层设计描述 LIBRARY IEEE; 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 or22明 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 : or22 PORT MAP(a =>d b =>f c =>cout); END ARCHITECTURE fd1 ;

程序 2-2

LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY Latch IS PORT D : IN STD_LOGIC; ENA : IN STD_LOGIC; Q : OUT STD_LOGIC ); END ENTITY Latch ARCHITECTURE one OF Latch IS SIGNAL sig_save : STD_LOGIC; BEGIN PROCESS (D, ENA) BEGIN

IF ENA = '1' THEN sig_save <= D ; END IF ; Q <= sig_save ;

END PROCESS ; END ARCHITECTURE one;

Page 56: FPGA/CPLD开发 简明教程bbs.sciencenet.cn/bbs/upload/14290FPGACPLD开发简明教程.pdf第一节 gw48-ck教学实验系统原理与 ... 第五节 abel-hdl 程序设计技巧 第六章

- 53 -

用和保存 也能被其它的由 VHDL 描述的逻辑电路所调用 成为其中的一个功能部件 在本

章 2.2 和 2.3 节中将很清楚地看到如何利用 VHDL 完成多器件调用来实现具有更强功能的

逻辑电路的设计

从程序 2-1 可以清晰地看出 一个完整的 VHDL 描述是以对一个功能元件的完整描述

为基础的 因此元件是 VHDL 的特定概念 也是 VHDL 的鲜明特色 把握了元件的结构和功

能的完整描述 就把握了 VHDL 的基本结构 由于元件本身具有层次性 即任一元件既可以

是单一功能的简单元件 也可以是由许多元件组合而成的 具有更复杂功能的元件 乃至一

个电路系统 但从基本结构上看 都能用程序 2-1 给出的 3 个部分来描述 这种元件概念

的直观性是其它 HDL 所无法比拟的 它为自顶向下或自下向上灵活的设计流程奠定了坚实

的基础

2 锁存器设计

与多路选择器不同 锁存器的工作状态必须用时序逻辑来描述 以下将举例说明一个

简单时序逻辑电路 1 位锁存器的 VHDL 设计描述 图 2-2 是一个锁存器的原理图 其中

锁存器的引脚 D 是数据输入端口 ENA 是数据锁存使能控制端口 当 ENA 为高电平时 允

许数据锁入 低电平时禁止数据锁入 Q 为数据输出端口 程序

2-2是此锁存器的 VHDL描述

与程序 2-1 相比 在 1 位锁存器的设计文件中增加了两个部分

的内容

(1) 增加了一条信号赋值语句 SIGNAL

由 信 号 赋 值 语 句 SIGNAL 定 义 了 一 个 信 号 变 量

sig_save 它的功能是存储来自外部信号 D 的被锁存的数据位 显然 经综合后将由一个

硬件时序器件来完成这一任务

(2) 使用了一个进程语句结构 PROCESS (D, ENA)àEND PROCESS

这个语句从系统仿真的角度看 是为此语句结构的行为仿真设定了两个敏感量 D 和 ENA

以利于逻辑顺序的测定 但从系统综合结果的角度看 必须引入锁存器才能完成这个时序逻

辑过程(VHDL综合器根据语句自动判别 并完成寄存器的引入)

进程结构中的逻辑描述表明 如果使能控制信号 ENA 为高电平 则将数据输入端 D 的最新

值传入信号变量 sig_save 然后通过 sig_save 将此值传给信号输出端 Q 反之 若使

能控制信号 ENA为低电平 则将 sig_save上的原值传给信号输出端 Q 即保留原值不变

程序中的 IF_THEN 语句结构所给出的描述方式 是令 VHDL 综合器引入时序元件的常

用方法 其特点是当 IF引导的逻辑表达式满足条件时 作数据传入操作 sig_save <= D

而当不满足条件时 不作任何描述即以 END IF 结束 IF_THEN语句

通常 PROCESS 进程语句用在行为描述方式中 VHDL 的建模方法称为描述风格 VHDL 有

三种基本描述风格 行为描述风格 结构描述风格和数据流描述风格

程序行 PROCESS(D ENA) 中的(D ENA)称为敏感信号表 这说明信号 D 和 ENA 中的

任何一个信号发生变化时 都将引起本进程的执行(在系统的行为仿真中) 因此 如果一

个结构体只有一个进程(没有其它并行语句) 则所有的输入信号通常都要列入敏感信号表

中 否则信号可能被 VHDL模拟器忽略

比较程序 2-1 和 2-2 不难发现 VHDL 的另一重要特点 即 VHDL 描述与电路器件的硬件

特性无关 程序 2-1 和 2-2 的描述中不包含任何类似于 ABEL 中 COM REG 等有关

组合或时序逻辑的指示词 也没有关于时钟信号线连接方式的描述

图 2-2 1位锁存器

Page 57: FPGA/CPLD开发 简明教程bbs.sciencenet.cn/bbs/upload/14290FPGACPLD开发简明教程.pdf第一节 gw48-ck教学实验系统原理与 ... 第五节 abel-hdl 程序设计技巧 第六章

- 54 -

§ 2.2 用 VHDL 设计全加器

全加器可以由两个 1 位的

半加器构成 而 1 位半加器可

以由如图 2-3 所示的门电路构

1 位半加器的端口信号 a 和 b

分别是两位相加的二进制输入

信号 so 是相加和的输出信

号 co 是进位输出信号 左边的门电路结构构成了右边的半加器 h_adder 而在硬件上可以

利用半加器构成如

图 2-4 所示的全加

器 当然还可以将

一组这样的全加器

级联起来构成一个

串行进位的加法

器 图 2-4 中 全

加器 f_adder 内部

的功能结构是由 3

个逻辑器件构成

的 即由两个半加器 u1 u2 和一个或门 u3 连接而成 例 2-3 是利用 VHDL 对图 2-4 中全加

器的逻辑原理图的完整描述 可以在任何一个支持 VHDL 的 EDA 平台上进行编译 综合

时序仿真 直至编程配置于选定的目标器件中

对于对数综合器来说,程序 2-3 所列的全部程序可以同时输入相应的 EDA 软件进行编译

也能以单独的元件模块分别进行编辑 文件存档 编译和综合 程序 2-3 中共有 3 个独立

的 VHDL 设计模块 即 2 个元件模块和一个顶层设计模块 f_adder 存档的文件名最好

与对应的 VHDL 程序的实体一致 如可分别将它们取名为 or2.vhd h_adder.vhd 和

f_adder.vhd 程序 2-3的解析如下

(1) 作为文件说明部分 由双横线 -- 引导了一段注释语句 在 VHDL 程序的任何

一行中 双横线 -- 后的文字都不参加编译和综合

(2) 实体 or2 语句段定义了或门 or2 的引脚信号 a b (输入)和 c (输出) 其结构

体语句段描述了输入与输出信号间的逻辑关系 即将输入信号 a b 相或后传给输出信

号端 c 由此实体和结构体描述了一个完整的或门元件 这一描述可以进行独立编译

独立综合与存档 或被其它的电路系统所调用

(3) 实体 h_adder 和结构体 fh1 描述了一个如图 2-3 所示的半加器 由其结构体的描述

可以看到 它是由一个与非门 一个非门 一个或门和一个与门连接而成的 其逻辑关系来

自于半加器真值表(表 2-1) 在 VHDL中 逻辑算符 NAND NOT OR和 AND分别代表 与

非 非 或 和 与 四种逻辑运算关系

(4) 在全加器接口逻辑 即顶层文件的 VHDL 描述中 根据图 2-4 右侧的 1 位二进全加器

f_adder的原理图 其实体定义了引脚的端口信号属性和数据类型 其中 ain 和 bin

分别为两个输入的相加位 cin 为低位进位输入 cout 为进位输出 sum 为 1 位和输

出 结构体 fd1 的功能是利用 COMPONENT 和 COMPONENT 例化语句将上面由两个实

体 or2 和 h_adder 描述的独立器件 按照图 2-4 全加器内部逻辑原理图中的接线方

图 2-3 1 位半加器逻辑原理图

图 2-4 1位全加器逻辑原理图

Page 58: FPGA/CPLD开发 简明教程bbs.sciencenet.cn/bbs/upload/14290FPGACPLD开发简明教程.pdf第一节 gw48-ck教学实验系统原理与 ... 第五节 abel-hdl 程序设计技巧 第六章

- 55 -

式连接起来 全加器的逻辑功能如表 2-2 所示

(5) 在结构体 fd1 中 COMPONENTàEND COMPONENT 语句结构对所要调用的或门

和半加器两个元件作了声明(Component Declaration) 并由 SIGNAL 语句定义了三个

信号 d e 和 f 作为中间信号转存点 以利于几个器件间的信号连接 接下去的 PORT

MAP( ) 语句称为元件例化语句(Component Instantiation) 所谓例化 在电路

板上 相当于往上装配元器件 在逻辑原理图上 相当于从元件库中取了一个元件符号放在

电路原理图上 并对此符号的各引脚进行连线 例化也可理解为元件映射或元件连接 MAP

是映射的意思 例如 由 u2 指示的语句表示将实体 h_adder描述的元件的引脚信号 a

b co和 so分别连向外部信号 e cin f和 sum 符号 => 表示信号连接

(6) 由例 2-3 可见 实体 f_adder 引导的逻辑描述也是由三个主要部分构成的

即库 实体和结构体 从表面上看来 库的部分仅包含了一个 IEEE 标准库和打开的

IEEE.STD_LOGIC_1164.ALL 程序包 但实际上 从结构体的描述中可以看出 对

外部的逻辑有调用的操作 这类似于对库或程序包中的内容作了调用 因此 库结构

部分还应将上面的或门和半加器的 VHDL 描述包括进去 作为工作库中的两个待调用

的元件 由此可见 库结构也是 VHDL 程序的

重要组成部分

读者不难从以上各例看出 一个相对完整的

VHDL程序具有如图 2-5所示的比较固定的结构

即首先是各类库及其程序包的使用声明 包括未以

显式表达的工作库 WORK 库的使用声明 然后是实

体描述 在这个实体中 含有一个或一个以上的结构体 而在每一个结构体中可以含有一个

或多个进程 当然还可以是其它语句结构 例如其它形式的并行语句结构 最后是配置说明

语句结构 这个语句结构在以上给出的示例中没有出现 配置说明主要用于以层次化的方式

对特定的设计实体进行元件例化 或是为实体选定某个特定的结构体 一个相对完整的 VHDL

程序设计构建称为设计实体

§ 2.3 用原理图方式设计半加器

1 为此半加器的设计建立一工作目录 如 D:\ADDER

2 打开 MAX+PLUSII 软件 选菜单 File → New 在 File Type 窗中选 Graphic editor

File → OK

3 点鼠标右键 在跳出的窗中选 Enter Symbol 项 准备通过此窗口输入所需的元件

双击文件库 Symbol Libraries 中的 d:\ maxplu2\max2lib\prim,在 Symbol Files 窗中选

与门 and2 并双击 此时与门将进入图形编辑窗中 以同样方法 将或门 or2 与非门 NAND2

和非门 not 调进图形编辑窗 再将它们连接成图 2-3 电路形式

4 如以上 3 的方法 选 Enter Symbol

窗 再用键盘在 Enter Symbol 窗的 Symbol

Name 中输入 input 再点击 OK 将获得一

个输入引脚 以同样方法 获得另一输入引脚

5 用以上 4 的方法 输入 output 得

到输出引脚

6 将它们如图 2-3 连接起来 并在左上

输入脚的 PIN-NAME 双击使其变黑色 用

键盘输入 a 以同样方法在另三个引脚上输

表 2-1 半加器 H_ADDER逻辑功能真值表

a b so co 0 0 0 0 0 1 1 0 1 0 1 0 1 1 0 1

图 12-17 New对话框

Page 59: FPGA/CPLD开发 简明教程bbs.sciencenet.cn/bbs/upload/14290FPGACPLD开发简明教程.pdf第一节 gw48-ck教学实验系统原理与 ... 第五节 abel-hdl 程序设计技巧 第六章

- 56 -

入 b co 和 so

7 存盘 点击 File → Save

As 选出刚才为自己的工程建立

的目录 D \ADDER 将已设计好的

图文件取名为 adder.gdf 并存在此

目录内

8 先点主窗口左角的菜单项

MAX+PLUSΠ 中的 Compiler 项 以

便对已设计好的半加器进行综合 在

跳出 的 Compiler 窗口中 还要做

三件事才能进行正式编译综合

1 首先将此项设计设定为工

程文件 选 File → Project → Name

在跳出 Project Name 窗中找到 D:\ADDER

目录 在 File 小窗中双击 adder.gdf 文件

此时即选定此文件为本次设计的工程文件

即顶层文件

2 选芯片 选主窗口上端的

Assign --> Device 项 在窗口中

先选 Flex10k 系列

再 在 下 方 选

EPF10KLC84-3 即选择

了半加器将在此芯片中实

现 选 OK 回到主窗口

然后点击 Compiler 窗下

的 Start 开始首次编

译 以便将所选芯片的引

脚信息进入设计文件中

若在编译中出现一些文

字 可选 Processing

项中的 Fitter Settings

在跳出的窗中 关闭 Use

Quartus Fitter... 项 点

OK 再点 Start 重新

进行一次编译 如果不出

现 则不必作此操作

图 12-18 保存 Cnt4.vhd

图 12-19 询问是否改变当前的工程为 Cnt4.vhd

程序 12-3 LIBRARY IEEE ; USE IEEE.STD_LOGIC_1164.ALL ; ENTITY DecL7S IS PORT ( A : IN STD_LOGIC_VECTOR(3 DOWNTO 0) ; LED7S : OUT STD_LOGIC_VECTOR(7 DOWNTO 0) ) ; END ; ARCHITECTURE one OF DecL7S IS BEGIN PROCESS( A ) BEGIN CASE A(3 DOWNTO 0) IS WHEN "0000" => LED7S <= "00111111" ; -- X 3F à0 WHEN "0001" => LED7S <= "00000110" ; -- X 06 à1 WHEN "0010" => LED7S <= "01011011" ; -- X 5B à2 WHEN "0011" => LED7S <= "01001111" ; -- X 4F à3 WHEN "0100" => LED7S <= "01100110" ; -- X 66 à4 WHEN "0101" => LED7S <= "01101101" ; -- X 6D à5 WHEN "0110" => LED7S <= "01111101" ; -- X 7D à6 WHEN "0111" => LED7S <= "00000111" ; -- X 07 à7 WHEN "1000" => LED7S <= "01111111" ; -- X 7F à8 WHEN "1001" => LED7S <= "01101111" ; -- X 6F à9 WHEN "1010" => LED7S <= "01110111" ; -- X 77 à10 WHEN "1011" => LED7S <= "01111100" ; -- X 7C à11 WHEN "1100" => LED7S <= "00111001" ; -- X 39 à12 WHEN "1101" => LED7S <= "01011110" ; -- X 5E à13 WHEN "1110" => LED7S <= "01111001" ; -- X 79 à14 WHEN "1111" => LED7S <= "01110001" ; -- X 71 à15 WHEN OTHERS => NULL ; END CASE ; END PROCESS ; END ;

Page 60: FPGA/CPLD开发 简明教程bbs.sciencenet.cn/bbs/upload/14290FPGACPLD开发简明教程.pdf第一节 gw48-ck教学实验系统原理与 ... 第五节 abel-hdl 程序设计技巧 第六章

- 57 -

3 确定半加器将在此芯片中的具体

引脚 同上 在 Assign 中选 Pin / Location

/ Chip 项 在跳出的窗口中的 Node Name

项中输入引脚名 a 这时 Pin Type 项会

出现 Input 指示字 表明 a 的引脚性质

是输入 否则将不出现此字 此时在 PIN

项内输入 5 引脚名 再点击右下方的 Add

项 此引脚即设定好了 以同样方法分别设

引脚 b co so 的引脚名为 6 17 18 再

点击上方的 OK 此 4 个引脚的选择方法是

根据 EDA 技术简明教程 第 10 页的实验

电路模式 NO.5 以及第 16 页的表格获得的

12 正式编译综合 到此为止 可在主窗口中进行正式编译综合了 点击 Start 进行

编译

13 仿真测试 以下是对设计的半加器的逻辑功能进行仿真的步骤

1 点 File → New → 选 Waveform Editor file 点 OK 把跳出的波形编辑

窗屏幕放大

2 选 Node 项中的 Enter Nodes from SMF 在跳出的窗中点 List 将列出半

加器的所有信号引脚名 a b co so 再点击符号 ⇒ 然后点击 OK 就可以看到它们

都已进入波形编辑窗了

3 点左侧的 号几下 使图形缩小 再用鼠标在 b 一行中拖动 成黑条

再点击左列的 1 表示输入为高电平 同样 在 a 行中也随机拖一些高电平和低电平

4 存盘 点 File → Save 将此波形文件以 adder.scf 名存在自己的目录 D:\ADDER

5 开始仿真运算 选 MAX+PLUSΠ 项中的 Simulator 点击此窗的 Start

再点 OK 进入波形窗中 就能看到此半加器的输入与输出波形了 并能了解它们的延时

情况

14 编程下载和硬件测试

1 选 " MAX+PLUSΠ " 项中的 Programmer 项 将跳出编程器窗 Programmer

选 Options 项中的 Hardware Setup 在此窗的下拉窗中选 ByteBlaster (MV) 项 点

击 OK 即可

2 将实验板连接好 接好电源 点 Configure 即进行编程下载

3 选实验电路模式 NO.5 此时 键 1 的输出代表加数 a 键 2 的输出代表加

数 b 进位输出 co 由数码管 D1 的显示表示 加和输出 so 由数码管 D2 的显示表示

Altera MAX+plus II VHDL 使用向导MAX+plus II 界面友好 使用便捷 被誉为业界最易用易学的 EDA 软件 MAX+plus II 支

持原理图 VHDL 和 Verilog 语言文本文件 以及波形与 EDIF 等格式的文件作为设计输

入 并支持这些文件的任意混合设计 MAX+plusII 具有门级仿真器 可以进行功能仿真

和时序仿真 能够产生精确的仿真结果 在适配之后 MAX+plusII 生成供时序仿真用的

EDIF VHDL和 Verilog三种不同格式的网表文件

MAX+plusII支持主流的第三方 EDA工具 如 Synopsys Cadence Synplicity

Mentor Viewlogic Exemplar 和 Model Technology 等 MAX+plusII 支持除

APEX20K系列之外的所有 Altera FPGA/CPLD大规模逻辑器件

程序 12-2 LIBRARY IEEE ; USE IEEE.STD_LOGIC_1164.ALL ; ENTITY CNT4 IS PORT ( CLK : IN STD_LOGIC ; Q : BUFFER INTEGER RANGE 0 TO 15); END ; ARCHITECTURE one OF CNT4 IS BEGIN PROCESS (CLK) BEGIN IF CLK'EVENT AND CLK = '1'THEN Q <= Q + 1 ; END IF; END PROCESS ; END ;

Page 61: FPGA/CPLD开发 简明教程bbs.sciencenet.cn/bbs/upload/14290FPGACPLD开发简明教程.pdf第一节 gw48-ck教学实验系统原理与 ... 第五节 abel-hdl 程序设计技巧 第六章

- 58 -

1 创建源程序 Cnt4.vhd

程序 12-5 程序的 Cnt4.vhd 是 4 位二进制

计数器的 VHDL 源程序 选择菜单 Fileà New 出现如图 12-17所示的对话框

在框中选中 Text Editor file 按 OK按钮 即选中了文本编辑方式 在出现的

Untitled - TextEditor 文本编辑窗

口中输入以下程序

输入完毕后 选择

菜单 FileàSave 即

出现如图 12-18所示的对

话 框 首 先 在

Directories 目录

框中选择存放本文件的目

录 D:\MAXVS\GUIDE

然后在 File Name 框中输入文件名

Cnt4.vhd 然后按 OK 按钮 即把

输入的文件放在目录 D:\MAXVS\GUIDE

中了

请注意 文件的后缀将决定使用的

语言形式 在 MAX+plusII 中 后缀

为.VHD表示 VHDL文件 后缀为.TDF

表示 AHDL 文件 后缀为.V 表示

Verilog文件

文件存盘后

为了能在图形编辑

器中调用 Cnt4

需要为 Cnt4 创建

一个元件图形符

号 选 择 菜 单

File à

Create

Default

Symbol

MAX+plusII 出

现如图 12-19 所

示的对话框 询问

是否将当前工程设

为 Cnt4 可按下

确定 按钮 这

时 MAX+plusII

调 出 编 译 器 对

图 12-20 元件符号创建成功

图 12-21 顶层设计原理图

表 12-2

CLK PIN 23 à PIO13 à 键 8LED7S7 PIN 38 à PIO23 à D8LED7S6 PIN 78 à PIO46 à g段LED7S5 PIN 73 à PIO45 à f段LED7S4 PIN 72 à PIO44 à e段LED7S3 PIN 71 à PIO43 à d段LED7S2 PIN 70 à PIO42 à c段LED7S1 PIN 67 à PIO41 à b段LED7S0 PIN 66 à PIO40 à a段

图 12-23 工程项目编译综合器

Page 62: FPGA/CPLD开发 简明教程bbs.sciencenet.cn/bbs/upload/14290FPGACPLD开发简明教程.pdf第一节 gw48-ck教学实验系统原理与 ... 第五节 abel-hdl 程序设计技巧 第六章

- 59 -

Cnt4.vhd进行编译 编译后生成 Cnt4的图形符号 如果源程序有错 要对源程序进行修

改 重复上面的步骤 直到此元件符号创建成功 成功后出现如图 12-20 所示的对话框

退出编译器 再退出编辑器 回到主窗口

2 创建源程序 Decl7s.vhd

Decl7s.vhd 完成 7 段显示译码

器的功能 用来将 4 位二进制数译码

为驱动 7 段数码管的显示信号

Decl7s.vhd 及其元件符号的创建过

程同上 即重复以上 1.创建源程序

Cnt4.vhd 的全过程即可 文件放在

同一目录 D:\MAXVS\GUIDE 内 其源

程序如上

3 创建源文件 TOP.GDF

TOP.GDF 是本项示例的最顶层的

图形设计文件 调用了前面 1 2 段创

建的两个功能元件 将 Cnt4.vhd 和

Decl7s.vhd 两个模块组装起来 成

为一个完整的设计

选择菜单 FileàNew 在如图

12-17所示的对话框中选择 Graphic

Editor File 按 OK 按钮 即

出现图形编辑器窗口 Graphic Editor 现按照以下给出的方法在 Graphic Editor

中绘出如图 12-21所示的原理图

(1) 往图中添加元件

先在图形编辑器 原理图编辑器 Graphic Editor 中的任何位置双击鼠标 将出现

如图 12-22所示的 Enter Symbol对话框 通过鼠标选择一个元件符号 或直接在 Symbol

Name 框中输入元件符号名 已设计的元件符号名与原 VHDL 文件名相同 按 OK 按

钮 选中的元件符号立即出现在图形编辑器中的双击鼠标的位置上 如果在调出的元件上双

击鼠标 就能看到元件内部的逻辑结构或逻辑描述

现在 Symbol Files 窗中已有两个元件符号 Cnt4和 Decl7s 如果没有 可用鼠

标双击 Symbol Libraries 窗口内的 d:\maxvs\guide 目录即可 因为刚才输入并

编译过的两个 VHDL 文件都在此目录中 即为刚才输入的两个 VHDL 文件所对应的元件符

号 元件名与对应的 VHDL 文件名是一样的 用鼠标选择其中一个元件 再选 OK 此元件

即进入原理图编辑

器 然后重复此过

程 将第二个元件调

入原理图编辑器 用

鼠标按在元件上拖

动 即可移动元件

并如图 12-21 所

示 排好它们的位

图 12-22 输入元件

图 12-24 设置了时钟信号的波形编辑器

Page 63: FPGA/CPLD开发 简明教程bbs.sciencenet.cn/bbs/upload/14290FPGACPLD开发简明教程.pdf第一节 gw48-ck教学实验系统原理与 ... 第五节 abel-hdl 程序设计技巧 第六章

- 60 -

接着可为元件 Cnt4 和 Decl7s 接上输入输出接口 输入输出接口符号名为 INPUT

和 OUTPUT 在库 prim 中 即在如图 12-22所示的 e:\maxplus2\max2lib\prim

的目录内 双击它 即刻在 Symbol Files 子窗口中出现许多元件符号 选择 INPUT

和 OUTPUT 元件进入原理图编辑器 当然也可以直接在 Symbol Name 文本框中输

入 INPUT 或 OUTPUT MAX+plusII 会自动搜索所有的库 找到 INPUT 和 OUTPUT

元件符号

(2) 在符号之间进行连线

先按如图 12-21 的方式 放好

输入/输出元件符号 再将鼠标

箭头移到符号的输入/输出引脚

上 鼠标箭头形状会变成

字形 然后可以按着鼠标左键并

拖动鼠标 绘出一条线 松开鼠

标按键完成一次操作 将鼠标箭

头放在连线的一端 鼠标光标也

会变成 字 此时可以接着

画这条线 细线表示单根线 粗

线表示总线 它的根数可从元件

符号的标示上看出 例如如图

12-21 所示的 LED7S[7..0]表示有 8 根信号线 通过选择可以改变连线的性质 方法是

先点击该线 使其变红 然后选顶行的选项 Options à Line Style 即可在弹出

的窗口中选所需的线段

(3) 设置输入/输出引脚名

在 INPUT 或 OUTPUT 符号的引

脚上双击鼠标左键 可以在端口

上输入新的引脚名 TOP.GDF

中只有一个输入引脚 CLK 及

8 位 总 线 输 出 引 脚

LED7S[7..0] 按 如 图

12-21 的方式分别输入端口符号 LED7S[7..0]在 VHDL 中是一个数组 表示由信号

LED7S7 LED7S0 组成的总线信号 这里 例如分量 LED7S7 是 AHDL 的表示方法 它对

应 VHDL 的 LED7S 7 实际

上这里有 8 个输出引脚 完成的

顶层原理图设计如图 12-21 所

示 最后选择 FileàSave 菜单

将 此 顶 层 原 理 图 文 件 取 名 为

TOP.GDF 或其它名字,并写入

File Name 中 存入同一目

录中

4 编译 TOP.GDF

在编译 TOP.GDF 之前 需要

设置此文件为顶层文件 最上层文

件 或称工程文件 Project 选择菜单 FileàProjectàSet Project to Current

图 12-25 往波形编辑中添加信号结点

图 12-26 设置时钟信号

图 12-27 仿真参数设置与仿真启动窗

Page 64: FPGA/CPLD开发 简明教程bbs.sciencenet.cn/bbs/upload/14290FPGACPLD开发简明教程.pdf第一节 gw48-ck教学实验系统原理与 ... 第五节 abel-hdl 程序设计技巧 第六章

- 61 -

File 当前的工程即被设为 TOP 此名在最初是任选的 然后选择用于编程的目标芯片

选择菜单 AssignàDevice 在弹出的对话框中的 Device Family 下拉栏中选择

FLEX10K 然后在 Devices 列表框中选择芯片型号 EPF10K10LC84-3 参考附录 2

按 OK

注意 在确定引脚锁定前 必须先编译

一次 方法是选菜单 MAX+plus II à

Compiler 菜单 此时将出现如图 12-

23 所示的界面 按 START 键 运行编

译器 以便编译器将对应的引脚信息调出

接着是具体确定引脚 选择菜单 Assign

à Pin/Location/Chip 弹出一个

对话框来设置引脚 在 Node Name 右

边的文本框中输

入引脚名 注

意 引脚必须一

个一个地确定

在 Pin: 右

边的下拉栏中选

择芯片引脚号

然 后 按 下

Add 按钮

就会在下面的子

窗口中出现引脚

设定说明句 当

前的一个引脚设置即加到了列表中 如果是总线形式的引脚名 也应当分别写出总线中的每

个信号 例如 LED7S[7..0]就应当分别写成 LED7S7 LED7S6 LED7S0 共 8 个引脚

名 引脚号设定可按照表 12-2的方式来定义

全部设定结束后 按 OK 键 假定最后将设计下载进 GW48 系统 并选择附录 1 的

实验电路结构图 NO.6 设定 CLK 信号由 键 8 产生 即每按两次键 产生一完整的计数

脉冲 LED7S7 输出接数码 D8 LED7S6 LED7S0 分别接 PIO46 PIO40 它们分别

接数码管的 7个段

最后开始编译和综合 如前那样,选择 MAX+plus II à Compiler 菜单 在此

可运行编译器 此编译器将一次性完成编译 综合 优化 逻辑分割和适配 布线等操作

出现如图 12-23所示的界面 现在首先设定 VHDL版本 选择如图 12-23所示界面上方的

InterfacesàVHDL Netlist Reader Settings 在弹出的窗口中选 VHDL’87

这样 编译器将支持 87版本的 VHDL语言

下面进行综合器的有关优化设置 先选 Assign à Global Project Logic

Synthesis 进入此窗后 在右侧的小窗口 Optimize 中将 滑块 放在适当位置

越靠左 Area 综合后的芯片资源利用率越高 靠右 Speed 则是对运行速度进行优

化 但以耗用芯片资源为代价 若为 CPLD 目标器件 要对窗口中间的 MAX Device

Synthesis Options 作相应的选择 然后按键 Define Synthesis Style 选

综合方式 Style 为 Normal Minimization 可选 Full Slow Slew Rate

可根据需要选 若希望减少 I/O 输出口的信号噪声 可选此项 但这是以牺牲信号速度为

图 12-28 仿真计算结束对话框

图 12-29 TOP仿真结果

Page 65: FPGA/CPLD开发 简明教程bbs.sciencenet.cn/bbs/upload/14290FPGACPLD开发简明教程.pdf第一节 gw48-ck教学实验系统原理与 ... 第五节 abel-hdl 程序设计技巧 第六章

- 62 -

代价的 对于 7128S 可选 XOR Synthesis 这对于某些组合逻辑有很好的优化功

能 选好后 点击 OK 关闭此窗 然后通过 Assign à Global Project Device

Options 窗口 选定是否加密芯片 选 Security Bit 加密 并选 Enable JTAG

Suport 以便能利用 JTAG方式对目标器件进行编程下载 最后按 OK 关闭此窗口

最后在 Compiler 窗口中按下 Start 按钮 启动编译过程 直到编译结束 如果

源程序有错误 用鼠标双击红色的错误信息即可返回图形或文本编辑器进行修改 然后再次

编译 直到通过 通过后双击 Fitter 下的 rpt 标记 即可进入适配报告 以便了

解适配情况 然后了解引脚的确定情况是否与以上设置一致 关闭编辑器

5 仿真顶层设计 TOP

MAX+plusII 支持功能仿真和时

序仿真两种仿真形式 功能仿真用于大

型设计编译适配之前的仿真 而时序仿

真则是在编译适配生成时序信息文件之

后进行的仿真 仿真首先要建立波形文

件 选择菜单 File à New 在

出 现 的 New 对 话 框 中 选 择

Waveform Editor file 如图

12-17 所示 按 OK 后将出现波形

编辑器窗口编 如图 12-24 所示 再

选择菜单 Node à Enter Nodes

from SNF 出现如图 12-25 所示

的选择信号结点对话框 按右上侧的 List 按钮 左边的列表框将立即列出所有可以选

择的信号结点 其中有单信号形式的 也有总线形式的 然后按右侧的 => 按钮 将左

边列表框的结点全部选中到右边的列表框 按 OK 按钮 选中的信号将出现在波形编辑

器中 其中有输入信号 CLK 7 段译码器输出信号 LED7S[7..0]以及 位二进制计数缓冲

信号输出 |Cnt4:1| Q 最后通过菜单 File à Save 在弹出的窗口中将波形文件

存在以上的同一目录中 文件取名为 top.scf 以上出现的 SNF 是仿真外表文件 只有在

编译综合后才会产生

首先设置 CLK时钟信号 用鼠标点 CLK信号的 Value区域 可以将 CLK选中 这时

CLK的波形区域全部变成黑色 按集成环境窗左边上的时钟按钮 倒数第 4个 出

现如图 12-25所示的对话框 用于设置时钟信号 在本例中只需按下 OK 键 如果要改

变时钟信号的周期 需要通过 OPTIONS 菜单的 Grid Size 选择窗的选择和图 12-

26窗来设定 最后回到集成环境图 12-24 按集成环境右边的按钮 可以缩小波形显示

以便在仿真时能够浏览波形全貌 接下去是运行仿真器 Simulator 选择菜单

MAX+plusII 按钮即可 已选了时钟周期为 200ns 按下 Simulator 子窗口 如

图 12-27所示 中的 Start 按钮 即刻进行仿真运算 注意 在启动仿真时 波形

文件必须已经具备有效的文件名 即必须已经存盘 仿真运算结束后出现如图 12-28所示的对话框 对话框中显示 0 errors 0 warnings 表示仿真运算结束 时序

仿真波形结果如图 12-29所示 观察波形后 可以确认设计正确

如果希望在不改变输入时钟信号周期的条件下 延长仿真时间 可以作一些设置

在如图 12-29的波形编辑窗口打开的情况下 选择 File à End Time 在弹出

的窗口中设置仿真结束时间 例如 5 s 按 OK按钮后 选择菜单 MAX+plusIIà

Simulator 在 Simulator子窗口的 End Time 处也设 5 s 然后启动仿真操

图 12-30 编程器子窗口

Page 66: FPGA/CPLD开发 简明教程bbs.sciencenet.cn/bbs/upload/14290FPGACPLD开发简明教程.pdf第一节 gw48-ck教学实验系统原理与 ... 第五节 abel-hdl 程序设计技巧 第六章

- 63 -

作 结束后可观察仿真波形 如果在一开始没有打开波形观察窗 可选 FileàOpen 这

时将弹出一名为 Open 的窗口 可在此窗的 Waveform Editor Files 处点击

并在 Files 窗中弹出的波形文件名 top.scf上双击 即可进入波形观察窗

注意 波形观察窗左排按钮是用于设置输入信号的 十分方便 使用时先用鼠标在输

入波形上拖一需要改变的黑色区域 然后点左排按钮 其中 0 1 X Z INV

G 分别表示低电平 高电平 任意 高阻态 反相和总线数据设置

6 将设计文件 TOP 编程下载到芯片中去

用鼠标双击编译器

窗口 图 12-23

中的图标 或者

选 择 MAX+plusII à

Programmer菜单 可调出编程器

Programmer窗口(图 12-30)在将设计文件编程配

置 对此 FPGA 下载

称为配置 进硬件芯

片前 需连接好硬件

测试系统 如果实验

系统是 GW48 编程

配置和硬件测试方法

可参阅附录 1

本 例 使 用

FLEX10K 系列中的

10K10 器件 一切连接就绪后 方可按下编程器窗口中的 Configure 按钮 若一切无

误 即可将所设计的内容下载到 10K10 芯片中 下载成功后将在一弹出的小窗中显示

Configuration Complete 接下去就可以在实验系统上进行实验验证 按 模式选

择键 使 模式指示 显示 6 表明此时实验系统已进入第 6种电路结构 然后按动 键

8 每按两次 一次高电平 一次低电平 在 数码 8 上显示的数将递增 1 从 0 F

循环显示 所有结果与仿真的情况完全一致 至此 表明计数器和 7 段译码器设计都是成

功的 读者可以利用例化语句设计一 VHDL 文本文件 取代上面的 GDF 图型文件 作为此

项设计的顶层文件 工程文件

注意 图 12-30 中 对 FPGA 器件的下载按钮是 Configure 而目标器件若选为

CPLD 如 EPM7128S 时 下载的按钮则是 Program 这时 Configure 变为灰色

如果希望改变某引脚 如欲将 CLK改接为 42脚 可以这样操作 参阅附录 1/2 注意 10K10

的 42 脚对应实验系统的 Clock1 标于板的右下角处 如果接此引脚 时钟信号将自动

进入计数器 可将短路帽接于 Clock1 处 另一短路帽可分别选 8Hz 4Hz 2Hz 1Hz

输入频率 然后选 File à Open 在 Open 窗中点击 Graphic Editor 双击

弹 出 的 原 理 图 文 件 top.gdf 进 入 原 理 图 编 辑 器 选 菜 单 Assign à

Pin/Location/Pin 在左下栏中点击需要改变引脚的项目 如 CLK 然后在 Pin 的

下拉菜单中选定引脚号 如 42 按键 Change à OK 即完成 再选 MAX+plusII

à Compiler à Start 开始编译综合 最后进行下载测试

程序 13-6 文件名 ADDER4B.vhdLIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY ADDER4B IS PORT ( CIN : IN STD_LOGIC ; A : IN STD_LOGIC_VECTOR(3 DOWNTO 0); B : IN STD_LOGIC_VECTOR(3 DOWNTO 0) ; S : OUT STD_LOGIC_VECTOR(3 DOWNTO 0) ; COUT : OUT STD_LOGIC );END ADDER4B ;ARCHITECTURE behav OF ADDER4B ISSIGNAL SINT : STD_LOGIC_VECTOR(4 DOWNTO 0) ;

SIGNAL AA,BB : STD_LOGIC_VECTOR(4 DOWNTO 0) ;BEGIN

AA<='0'&A ; BB<='0'&B ;

SINT <= AA + BB + CIN ; S <= SINT(3 DOWNTO 0) ;

COUT <= SINT(4) ;END behav ;

Page 67: FPGA/CPLD开发 简明教程bbs.sciencenet.cn/bbs/upload/14290FPGACPLD开发简明教程.pdf第一节 gw48-ck教学实验系统原理与 ... 第五节 abel-hdl 程序设计技巧 第六章

- 64 -

另请注意 如果

在安装 MAX+plus II

软件之后第一次调用编

程器子窗口 则

MAX+plusII将弹出

对话框选择编程器型

号 以便调用正确的编

程器驱动程序 如果用

FLEX或 ISP型 MAX

系列器件 通常选择

ByteBlaster 编

程器

ByteBlaster 实

际上是指连接在并行打

印口使用的下载电缆

编程器型号的选择方法

是启动

Programmer 选

菜单 Options à

Hardware

Setup 在 Hardware

Type下拉栏中选

ByteBlaster 按

OK 即可

§ 13.5 8 位硬件加法器设计

加法器是数字系统中的基本逻辑器件 例如 为了节省逻辑资源 减法器和硬件乘法

器都可由加法器来构成 宽位的加法器的设计是十分耗费硬件资源的 因此在实际的设计和

相关系统的开发中需要注意资源的利用率和进位速度两方面的问题 对此 首先应选择较适

合组合逻辑设计的器件作为最终的目标器件 如 CPLD 其次在加法器的逻辑结构的设计上

在芯片资源的利用率和加法器的速度两方面权衡得失 探寻最佳选择 即选择最佳的并行进

位最小加法单元的宽度 显然 这种选择与目标器件的时延特性有直接关系 以下是一个简

单的设计示例

多位加法器的构成有两种方式 并行进位和串行进位方式 并行进位加法器设有并行

进位产生逻辑 运算速度较快 串行进位方式是将全加器级联构成多位加法器 并行进位加

法器通常比串行级联加法器占用更多的资源 随着位数的增加 相同位数的并行加法器与串

行加法器的资源占用差距快速增大 一般 4 位二进制并行加法器和串行级联加法器占用几

乎相同的资源 这样 多位数加法器由 4位二进制并行加法器级联构成是较好的折中选择

本实验示例中的 8 位二进制并行加法器即是由两个 4 位二进制并行加法器级联而成的

图 13-4 所示的逻辑电路是由两个并行进位 4 位加法器级联而成的 8 位二进制加法器 其

中的 4位二进制加法器的 VHDL逻辑描述如下

由两个 4位二进制并行加法器级联而成的 8位二进制加法器逻辑描述如下

GW48-CK 实验步骤 选实验电路结构图 NO.1 根据此电路图和附录 1 确定引脚的锁定方

式 如可取 A[7..0]接 PIO7 PIO0; B[7..0]接 PIO15 PIO8; S[7..0]接 PIO23 PIO16 此加法

程序 13-7 文件名 ADDER8B.vhdLIBRARY IEEE ;USE IEEE.STD_LOGIC_1164.ALL ;USE IEEE.STD_LOGIC_UNSIGNED.ALL ;

ENTITY ADDER8B IS PORT ( CIN : IN STD_LOGIC ; A : IN STD_LOGIC_VECTOR(7 DOWNTO 0) ; B : IN STD_LOGIC_VECTOR(7 DOWNTO 0) ; S : OUT STD_LOGIC_VECTOR(7 DOWNTO 0) ; COUT : OUT STD_LOGIC );END ADDER8B ;ARCHITECTURE struc OF ADDER8B ISCOMPONENT ADDER4B --对要调用的元件 ADDER4B的端口进行定义

PORT ( CIN : IN STD_LOGIC; A : IN STD_LOGIC_VECTOR(3 DOWNTO 0) ; B : IN STD_LOGIC_VECTOR(3 DOWNTO 0) ; S : OUT STD_LOGIC_VECTOR(3 DOWNTO 0) ; COUT : OUT STD_LOGIC ) ;END COMPONENT ; SIGNAL CARRY_OUT: STD_LOGIC;--设置 4位加法器进位标志

BEGIN U1 : ADDER4B-- 例化 安装 一个 4位二进制加法器 U1 PORT MAP(CIN=>CIN, A=>A(3 DOWNTO 0),B=>B(3 DOWNTO 0),S=>S(3 DOWNTO 0), COUT=>CARRY_OUT ) ; U2 : ADDER4B -- 例化 安装 另一个 4位二进制加法器 U2 PORT MAP(CIN=>CARRY_OUT, A=>A(7 DOWNTO 4), B=>B(7 DOWNTO 4),S=>S(7 DOWNTO 4),COUT=>COUT);END struc ;

Page 68: FPGA/CPLD开发 简明教程bbs.sciencenet.cn/bbs/upload/14290FPGACPLD开发简明教程.pdf第一节 gw48-ck教学实验系统原理与 ... 第五节 abel-hdl 程序设计技巧 第六章

- 65 -

器的 8 位被加数 A 和加数 B 分别由键 2 与键 1 键 4 与键 3 输入 计算结果将显示于数码

管 6 高 4 位 和数码管 5 低 4 位 溢出进位由 PIO39 输出 当有进位时 结果显示于

发光管 D8 键 8 可控制加法器的最低位进位输入 CIN 可由 PIO49 输入

注 以上为 VHDL实用教程 一书的节选内容

购买 GW48-CK型 EDA系统配套教材 VHDL实用教程 联系方法

E-mail [email protected] 电 话 028 3203189 H 028 3251067-8999 O联系人 张 琴 地 址 成都电子科技大学出版社 610054

I/O21

I/O20

I/O22

I/O23

I/O24

I/O38

I/O37I/O36I/O35I/O34I/O33

nTRST

I/O32

I/O19I/O18I/O17I/O16

I/O15I/O14I/O13 VCCINT

DE

V_O

E

DE

V_C

LRn

GC

LCK

1IN

1

IN4

TMS

TDO

TDI

I/O6/

DA

TA

1I/O

5/D

AT

A2

I/O4/

DA

TA

3I/O

3/D

AT

A4

I/O2/

DA

TA

5I/O

1/D

AT

A6

I/O0/

DA

TA

7

I/O45/CLKUSR

TC

K

I/O47

/CS

I/O46

/nC

S

I/O49

/nR

SI/

O48

/nW

S

nCE

OC

ON

F_D

ON

E

nSTATUSMSEL1MSEL0

DATA0DCLKnCE

I/O7I/O8I/O9

I/O10

I/O11I/O12

nCO

NF

IG

IN2

GC

LK2

IN3

GN

DIN

TI/O

25I/O

26I/O

27I/O

28I/O

29I/O

30I/O

31

I/O39I/O40I/O41GNDINTINIT_DONEI/O42/RDYnBSYI/O43I/O44

GN

DIN

T

VC

CIN

T

VC

CIN

T

GN

DIN

TV

CC

INT

VC

CIN

T

GNDINT

VCCINT

ALTERA

顶面图

EPF10K10LC84

FLEX

84-PIN PLCC 封装

7473727170696867666564636261605958575655

54535251504948474645444342414039383736353433

323130292827262524232221

121314151617181920

11 10 9 8 7 6 5 4 3 2 1 84 83 82 81 80 79 78 77 76 75

ALTERA EPF10K10-PC84顶视引脚图

B[7..0]

B[7..4]

A[7..4]

S[7..4]

A[7..0]

A[3..0]

B[3..0]

S[3..0]

S[7..0]

CIN

A[3..0]

B[3..0]

S[3..0]

COUT

ADDER4BB[7..0]

COUT

CIN

A[7..0]

CIN

A[3..0]

B[3..0]

S[3..0]

COUT

ADDER4B

S[7..0]

图 13-4 8位加法器电路原理图

Page 69: FPGA/CPLD开发 简明教程bbs.sciencenet.cn/bbs/upload/14290FPGACPLD开发简明教程.pdf第一节 gw48-ck教学实验系统原理与 ... 第五节 abel-hdl 程序设计技巧 第六章

- 66 -

RDYnBSY ALTERA

144-PIN TQFP

77

EPF10K30A

69

68

67

66

"CL

OC

K2

"IN

PU

T3

INP

UT

4

I/O

94

I/O

95

GC

LO

CK

2

I/O

60

"CL

OC

K1

"

"CL

OC

K8

"INP

UT

1

INP

UT

2

GC

LO

CK

1

"CL

OK

0"

93

92

91

90

89

88

87

86

85

84

83

82

I/O81

I/O80

I/O79

31

30

29

28

27

26

70

71

72

73

74

"CL

OC

K1

0"

"CL

OC

K7

"

"CL

OC

K6

"

65

64

63

61

62

VC

CIO

GN

DIO

VC

CIO

GN

DIN

T

GN

DIN

T

VC

CIN

T

VC

CIN

T

GN

DIO

VC

CIO

GN

DIO

I/O

78

I/O

77

I/O

76

I/O

75

I/O

59

I/O

58

I/O

57

I/O

56

I/O

55

I/O

54

"CLOCK5"

"CLOCK4"

"CLOCK3"

"CL

OC

K9

"

"SPKER"

53

52

51

50

49

48

47

46

45

44

43

42

41

40

39

38

37

36

35

34

33

32

25

24

23

22

21

20

19

18

17

16

15

14

13

12

11

10

9

8

7

6

5

4

3

2

1

0

EPF10K20

Total User I/O

I/O

I/O

I/O

I/O

I/O

I/O

I/O

I/O

I/O

I/O

I/O

I/O

I/O

I/O

I/O

I/O

I/O

I/O

I/O

I/O

I/O

I/O

I/O

I/O

I/O

I/O

I/O

I/O

I/O

I/O

I/O

I/O

I/O

I/O

I/O

I/O

I/O

I/O

I/O

I/O

I/O

I/O

I/O

I/O

I/O

I/O

I/O

I/O

I/O

I/O

I/O

I/O

I/O

I/O

I/O

I/O

I/O

I/O

I/O

I/O

I/O

I/O

I/O

I/O

I/O

I/O

I/O

I/O

I/O

I/O

I/O

GN

DIO

GN

DIO

GNDIO

GNDIO

GN

DIN

T

GNDINT

GNDINT

VC

CIO

VC

CIO

VCCIO

VCCIO

VC

CIN

T

VCCINT

VCCINT

VCCINT

DE

V_

OE

DE

V_

CL

Rn

TMS

DATA0

DA

TA

1

DA

TA

2

DA

TA

3

DA

TA

4

DA

TA

5

TDI

nR

S

nW

S

CS

nC

S

DA

TA

7

DA

TA

6

nCE

DCLK

nCONFIGnSTATUS

MSEL1

MSEL0

I/O

I/O

I/O

I/O

GNDINT

GNDIO

INIT_DONE

I/O

I/O

I/O

I/O

I/O

CLKUSR

VCCINT

VCCIO

TDO

nCEO

CONF_DONE

TCK

14

4

14

3

14

2

14

1

14

0

13

9

13

8

13

7

13

6

13

5

13

4

13

3

13

2

13

1

13

0

12

9

12

8

12

7

12

6

12

5

12

4

12

3

12

2

12

1

12

0

11

9

11

8

11

7

11

6

11

5

11

4

11

3

11

2

11

1

11

0

10

9

108

107

106

105

104

103

102

101

100

99

98

97

96

95

94

93

92

91

90

89

88

87

86

85

84

83

82

81

80

79

78

76

75

74

73

727170696867666564636261605958575655545352515049484746454443424140393837

36

35

34

33

32

31

30

29

28

27

26

25

24

23

22

21

20

19

18

17

16

15

14

13

12

11

10

9

8

7

6

5

4

3

2

1

上图与 144 脚的 EP1K30/50 的 I/O引脚兼容

I/O

I/O

I/O

I/O

I/O

I/O

GN

D

VC

C

I/O

I/O

I/O

I/O/G

TS

1

I/O/G

TS

2

I/O

/GC

K1

I/O

/GC

K2

I/O/GSR

VC

C

I/O

I/O

I/O

I/O

I/O

I/O

I/O

I/O

I/O

I/O

I/O

I/O

VCC

GND

TDO

I/OTCK

TMS

TDI

XC9536PC44

XILINX

39

38

37

36

35

34

33

32

31

30

292827262524232221201918

17

16

15

14

13

12

11

10

9

8

74041424344123456

I/O

I/O

I/O

I/O

GND

I/O

I/O

I/OGCK3 LATTICE

顶面图

44-PIN PLCC 封装

ispLSI2032/E

PLSI1016/EispLSI1016/E

I/O2

I/O1

I/O0

SDI/IN0

ISPEN

VCC

Y0

I/O31

I/O30

I/O3

I/O4

I/O5

I/O6

I/O7

GN

D

SD

O/IN

1

I/O8

I/O9

I/O10

I/O11

I/O12

I/O13

I/O14

SCLK/Y2

VCC

Y1/RESET

MODE/IN2

I/O15

I/O16

I/O17

I/O18

I/O29

I/O28

I/O27

I/O26

I/O25

I/O24

IN3

GN

D

I/O23

I/O22

I/O21

I/O20

I/O19

39

38

37

36

35

34

33

32

31

30

292827262524232221201918

17

16

15

14

13

12

11

10

9

8

7

6 5 4 3 2 1 44 43 42 41 40

Page 70: FPGA/CPLD开发 简明教程bbs.sciencenet.cn/bbs/upload/14290FPGACPLD开发简明教程.pdf第一节 gw48-ck教学实验系统原理与 ... 第五节 abel-hdl 程序设计技巧 第六章

- 67 -

ATMEL

顶面 图

84-PIN PLCC 封装

ATF1508AS

EPM7160SEPM7128SEPM7096SEPM7064S

ALTERA

I/O63I/O62

I/O61I/O60TDO

I/O

59

I/O

58

I/O

57

I/O

56

I/O

55

I/O

54

I/O53I/O52

I/O51I/O50I/O49I/O48

IO47I/O46I/O45TCKI/O44I/O43

I/O42I/O41I/O40

I/O38I/O39

I/O

37

I/O

36

I/O

35

I/O

34

I/O

33

I/O

32

I/O

31

I/O

30

I/O

29

I/O

28

I/O

27

I/O

26

I/O

25

I/O

24

I/O

23

I/O

22

I/O21I/O20I/O19I/O18I/O17

I/O16I/O15TMSI/O14I/O13I/O12

I/O11I/O10I/O9I/O8TDI

Note: Pin 6,39,46 and 79 are no-connect pins

I/O7

I/O

6I/

O5

I/O

4I/

O3

I/O

2I/

O1

I/O

0

IN4

/OE

2/G

CL

K2

IN3

/GC

LR

nIN

2/O

E1

IN1

/GC

LK

1

VCCIO

VCCIO

VC

CIO

VC

CIN

T

VCCIO

VC

CIO

VC

CIO

VC

CIN

Ton EPM7096S and EPM7160S

GND

GND

GN

D

GN

D

GND

GND

GN

D

GN

D

7473727170696867666564636261605958575655

54535251504948474645444342414039383736353433

323130292827262524232221

121314151617181920

11 10 9 8 7 6 5 4 3 2 1 84 83 82 81 80 79 78 77 76 75

I/O24I/O23

I/O22I/O21I/O20I/O19

I/O18I/O17I/O16I/O15I/O14

I/O11

I/O13I/O12

I/O10/GCK3

I/O9

I/O8/

GC

K2

I/O7/

GC

K1

I/O6

I/O5

I/O4

I/O3

I/O2

I/O1

I/O0

I/O69

I/O67

I/O66

I/O65

I/O64

I/O63

I/O62

/GT

S2

I/O60

I/O61

/GT

S1

I/O59/GSR

I/O58I/O57I/O56I/O55I/O54I/O53I/O52I/O51

I/O50I/O49I/O48

I/O47I/O46I/O45I/O44I/O43

I/O42

I/O41

I/O40

I/O39

I/O38

I/O37

I/O36

I/O35

I/O34

I/O33

I/O32

I/O31

I/O30

I/O29

I/O28

I/O27

I/O26

I/O25

XC95108PC84XC9572PC84

84-PIN PLCC 封装

顶面图

XILINX

GN

D

VC

CIN

TG

ND

GN

D

VC

CIN

T

GNDGND

GND

VCCIOVCCIO

VCCINT

TMS

TDOTDI

TCK

7473727170696867666564636261605958575655

54535251504948474645444342414039383736353433

323130292827262524232221

121314151617181920

11 10 9 8 7 6 5 4 3 2 1 84 83 82 81 80 79 78 77 76 75

第十三章 GWDD6-C 型通用编程下载器使用说明

GWDD6-C 是 FPGA/CPLD 通用编程器 它可用于对 Lattice Xilinx Altera Vantis

Page 71: FPGA/CPLD开发 简明教程bbs.sciencenet.cn/bbs/upload/14290FPGACPLD开发简明教程.pdf第一节 gw48-ck教学实验系统原理与 ... 第五节 abel-hdl 程序设计技巧 第六章

- 68 -

等多家著名 PLD 公司几乎所有在系统编程或现场配置的 CPLD 和 FPGA 器件进行在系统编程

或现场配置编程 此编程器结构紧凑 工作可靠 为国内首创 与进口的单目标 仅能对单

一公司的 FPGA/CPLD 器件系列编程 下载适配器相比 允许有更长的通信线长度和更好的配

置稳定性

GWDD6-C 编程器套件使

用注意

1 GWDD6-C 的一端由一 25

芯通讯线与计算机的并行通讯口

相接 另一端是一 10 针插口

通过此插口 可以与实验开发用

的 FPGA/CPLD 目标芯片的下载端

相 接 在 此 可 以 与 所 配 的

ispLSI1023E 适配板上的 10 针

下载口相接 当然也可以与康芯

公 司 提 供 的 其 它 型 号 的

FPGA/CPLD 适配板相接

2 电 源 +5V 可 以 从

GWDD6-C 板上的电源端口输

入 也可以从目标板 适配板或

自己的应用系统 上输入 但一

般 目标板上已有电源 则

GWDD6C 板上可不接电源 直接接上 10 芯线即可 而若 GWDD6C 上已有+5V 电源 则目

标板上可以不接电源 最好不要在两个系统上同时插上电源

3 如果用户使用的是现成提供的实验开发目标板 如所配的 GWL1032 板上 则用所配的

10 芯下载通讯线直接插入对应接口即可进行编程操作

4 如果用户使用自己的目标芯片开发板 或在自己的电路系统板上有 CPLD/FPGA 器件

则建议用户在布 PCB 板时为主板上的 CPLD/FPGA器件设置一个在线编程下载口 此口引脚方

式可参照附图 1-1B 中的 下载接口 1 的信号定位方式 其中的 SEL1 和 SEL0 引脚

电平的设置方式可根据板上的器件的 PLD公司 并参阅附表 1-1 列出的接线方式 自行配接

如芯片的厂商是 XILINX 公司 则要求 SEL1 接高电平 SEL0 接低电平 这样就可将 GWDD6C

的 10 芯编程线直接插在用户自己的系统板上设置的下载口 进行在系统编程下载了

5 所配的 GWL1032 板上的两排 40 针座的引脚情况可参阅附图 1-1B 中的 CON1 和

CON2 而此两座上各型号对应芯片上具体引脚情况又必须查阅本书第一章第三节 GW48

系统结构图信号名与芯片引脚对照表 如 CON1 上的 PIO14 与板上的第 40 脚相接

6 ispLSI1032E 的开发软件是 ispEXPERT SYSTEM 安装方法参见光盘目录 EXPERT7

中的 README1.TXT 软件的使用方法参见本书第十章 相关的 ABEL 语言语法格式与设计方

法可参见本书的第五 第六章 更详细的内容可参见光盘中的 PDF 重要文件

7 由于 GWDD6-C 具有通用性 因此可用于其它适配板 用户购买的适配板配有其它 PLD

公司的器件 如 ALTERA的 EPM7128S 或 XILINX的 XC95108 则必须使用对应公司提供的 EDA

开发硬件 如 ALTERA 的 MAX+PLUSII XILINX 的 FOUNDATION 等 这些软件可以向相应的代

理商 如 INSIGHT公司 购买 售价约在 4000元至 80000 元/套不等 这些软件的使用方法

可参阅本书第十二章 或 VHDL实用教程 一书

联系电话 0571-88212487 0571-85525171

E-Mail [email protected] 传真 0571-88212487

I/O39

I/O40

I/O41

I/O42

I/O43

I/O44

I/O45

I/O46

I/O47

GN

DIN

6I/O

48I/O

49I/O

50I/O

51I/O

52I/O

53I/O

54I/O

55I/O

56

LATTICE

顶面图

84-PIN PLCC 封装

PLSI1032/E

ispLSI1032/E

IN7I/O63

I/O59I/O58I/O57

I/O62I/O61I/O60

Y0VCCGND

ISPENRESETSDI/IN0

I/O0I/O1I/O2I/O3I/O4I/O5I/O6

I/O8

I/O9

I/O7

I/O10

I/O11

I/O12

I/O13

I/O14

I/O15

MO

DE

/IN1

GN

DS

DO

/IN2

I/O16

I/O17

I/O18

I/O19

I/O20

I/O21

I/O22

I/O23

I/O24

I/O25I/O26I/O27I/O28I/O29I/O30

IN3/SCLKI/O31

Y3Y2GNDVCCY1IN4

IN5

I/O32I/O33I/O34I/O35I/O36I/O37I/O3874

73727170696867666564636261605958575655

54535251504948474645444342414039383736353433

323130292827262524232221

121314151617181920

11 10 9 8 7 6 5 4 3 2 1 84 83 82 81 80 79 78 77 76 75

Page 72: FPGA/CPLD开发 简明教程bbs.sciencenet.cn/bbs/upload/14290FPGACPLD开发简明教程.pdf第一节 gw48-ck教学实验系统原理与 ... 第五节 abel-hdl 程序设计技巧 第六章

- 69 -