EDA实验讲义 GK PK

You might also like

Download as doc, pdf, or txt
Download as doc, pdf, or txt
You are on page 1of 72

EDA技术实验讲义

( 含 GW48 系 列 实 验 开 发 系 统 详 细 使 用 说 明 )

杭州康芯电子有限公司
www.kx-soc.com
目 录
第 一 章 GW48 EDA 系 统 使 用 说 明
第一节 GW48 教学实验系统原理与使用介绍

第二节 实验电路结构图

第三节 GW48CK/GK EDA 系统和GWDVP-B 应用板

第 二 章 GWAK30+/50+适 配 板 使 用 说 明
第 三 章 GW48 系 统 专 用 配 套 之 GWDVP-B 电 子 设 计 应 用
板 使 用 说 明
第 四 章 FPGA/CPLD结 构
第 五 章 原 理 图 输 入 设 计 方 法
第 六 章 VHDL 设 计 初 步
第一节 2 选1 多路选择器的VHDL 描述

第二节 寄存器描述及其VHDL 语言现象

第三节 VHDL 文本输入设计方法初步

【实验1 】 1 位全加器VHDL 文本输入设计


【实验2 】 2 选1 多路选择器VHDL 设计
【实验3 】 8 位硬件加法器VHDL 设计
【实验4 】 含异步清0 和同步时钟使能的4 位加法计数器
【实验5 】 7 段数码显示译码器设计
【实验6 】 数控分频器的设计
【实验7 】 用状态机实现序列检测器的设计
【实验8 】 用状态机对ADC0809的采样控制电路实现
【实验9 】 波形发生与扫频信号发生器电路设计
第 七 章 GWCNF 型 FPGA 掉 电 保 护 配 置 器 应 用
第 八 章 GW48-PK 系 统 LCD 液 晶 屏 使 用 方 法

杭 州 康 芯 电 子 有 限 公 司 : 电 话 : 0571-88212487 ; E-Mail :
span88@mail.hz.zj.cn

2
第一章 GW48 SOC/EDA系统使用说明
第 一 节 GW48 教 学 实 验 系 统 原 理 与 使 用 介 绍
一 、 GW48 系 统 使 用 注 意 事 项
a :闲置不用GW48 EDA/SOC 系统时,关闭电源,拔下电源插头!!!
b :EDA软件安装方法可参见光盘中相应目录中的中文README.TXT ;详细使用方法可参阅本
书或《EDA 技术实用教程》、或《VHDL实用教程》中的相关章节。
c :在实验中,当选中某种模式后,要按一下右侧的复位键,以使系统进入该结构模式工作。
d :换目标芯片时要特别注意,不要插反或插错,也不要带电插拔,确信插对后才能开电源。其
它接口都可带电插拔(当适配板上的10芯座处于左上角时,为正确位置)。
e :对工作电源为5V的CPLD(如1032E/1048C 、95108 或7128S 等)下载时。最好将系统的电路
“模式”切换到“ b” ,以便使工作电压尽可能接近5V。
g: GW48 详细使用方法可参见《EDA 技术实用教程》配套教学软件*.ppt 。
h:主板左侧3 个开关默认向下,但靠右的开关必须打向上(DLOAD ),才能下载。
i:跳线座“SPS” 默认向下短路(PIO48 );右侧开关默认向下(TO MCU )。
j:左下角拨码开关除第4 档“DS8 使能”向下拨(8 数码管显示使能)外,其余皆默认向上拨。
二 、 GW48 系 统 主 板 结 构 与 使 用 方 法
附图1-1A 为GW48-CK 型EDA 实验
开发系统的主板结构图( GW48-GK/PK
型未画出,具体结构说明应该参考实
物主板),该系统的实验电路结构是
可控的。即可通过控制接口键SW9 ,
使之改变连接方式以适应不同的实验
需要。因而,从物理结构上看,实验
板的电路结构是固定的,但其内部的
信息流在主控器的控制下,电路结构
将发生变化。这种“多任务重配置”
设计方案的目的有3 个:1.适应更多
的实验与开发项目;2. 适应更多的
PLD 公司的器件;3. 适应更多的不
同封装的FPGA 和CPLD 器件。系统板面
主要部件及其使用方法说明如下(请
参 看 相 应 的 实 验 板 板 面 和 附 图 1- 附图 1-1B、GW48-GK/PK 系统目标板插座引脚信号图
1A)。
以下是对GW48系统主板功能块的注释,但请注意,有的功能块仅GW48-GK 获GW48-PK 系统存在:
(1 ) SW9 :按动该键能使实验板产生12种不同的实验电路结构。这些结构如第二节的 13
附表 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 CONF_DONE TDO DONE TMS
TDO
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* VCC* VCC* GND

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


3
“3” ,于是系统即进入了NO.3 图所示的实验电路结构。
(2 ) B2 :这是一块插于主系统板上的目标芯片适配座。对于不同的目标芯片可配不同的适配
座。可用的目标芯片包括目前

4
5
C38
É¢ÈÈÆ÷
ÊýÂë8 ÊýÂë7 ÊýÂë6 ÊýÂë5 ÊýÂë4 ÊýÂë3 ÊýÂë2 ÊýÂë1

FUSE

µçÔ´¿ª¹Ø
50M¾§Õñ
K1
D8 D7 D6 D5 D4 D3 D2 D1
S1

ÑïÉùÆ÷
¼ì²âµçÔ´
½Ó¿Ú ƵÂʼÆ
µç·

ByteBlaster

ByteBlasterMV
1 2
ÔÚÏßÏÂÔؽӿÚ

B2
Clock0

ģʽָʾ EDAʵÑ鿪·¢

ÊÊÅä×ù

J3B
Êó±ê½Ó¿Ú Ä¿±êоƬ
Ä¿±êоƬ
µÍƵ×éÖÐƵ×é¸ßƵ×é

ÔÚÏßÏÂÔØ¿Ú

PS/2½Ó¿Ú
Ä¿±ê°å²å×ù2

SWG9
VGA

CPLD/FPGA JP1A JP1B JP1C


ʱÖÓƵÂÊÑ¡Ôñ
ÊÓƵ½Ó¿Ú
J8

B3

ÏÔʾ¿ØÖÆÆ÷¼þ2
ÏÔʾ¿ØÖÆÆ÷¼þ1
VGA

Ä¿±ê°å²å×ù1 CON1
CON2

ÊÓƵ½Ó¿Úµç·
KONXIN
ÔÚϵͳ

J2
ASIC
ÅäÖÃ/ÏÂÔØ B4
RS-232
Ä£¿é ½Ó¿Úµç·

ÔÚÏßÏÂÔØͨѶ½Ó¿Ú
VR1

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

AIN0 ¼üA B8
A/DÐźÅÊäÈë
Ä£Äâ½Ó¿Ú ¼üB ʱÖÓ·¢Éúµç·
UART½Ó¿Ú

ϵͳ¸´Î»

µ¥Æ¬»ú½Ó¿ÚÆ÷¼þ
AIN1 µçλÆ÷
ģʽÅäÖüü
JP2 Êýģת»»Æ÷¼þ
Ä£Êýת»»Æ÷¼þ

A/DÐźÅÊäÈë
D16 D15 D14 D13 D12 D11 D10 D9 5V ,+/-12V
AOUT ½Ó¿Úµç·Çл»×ù
D/AÐźÅÊä³ö
3.3V, 2.5V
1.8V
¼ü8 ¼ü7 ¼ü6 ¼ü5 ¼ü4 ¼ü3 ¼ü2 ¼ü1
µçѹԴģ¿é
世界上最大的六家FPGA/CPLD 厂商几乎所有CPLD、FPGA和所有ispPAC 等模拟EDA 器件 。第三节的
表中已列出多种芯片对系统板引脚的对应关系,以利在实验时经常查用。
(3 ) J3B/J3A :如果仅是作为教学实验之用,系统板上的目标芯片适配座无须拔下,但如
果要进行应用系统开发、产品开发、电子设计竞赛等开发实践活动,在系统板上完成初步仿真设计
后,就有必要将连有目标芯片的适配座拔下插在自己的应用系统上(如GWDVP 板)进行调试测试。
为了避免由于需要更新设计程序和编程下载而反复插拔目标芯片适配座,GW48 系统设置了一对在
线编程下载接口座:J3A 和J3B 。此接口插座可适用于不同的FPGA/CPLD (注意,1 、此接口仅
适用于5V 工作电源的FPGA 和CPLD ;2 、5V 工作电源必须由被下载系统提供)的配置和编程
下载。 对于低压FPGA/CPLD ,(如EP1K30/50/100 、EPF10K30E 等,都是2.5V 器件),下载
接 口 座 必 须 是 另 一 座 : ByteBlasterMV 。 注 意 , 对 于 GW48-GK/PK , 只 有 一 个 下 载 座 :
ByteBlasterMV ,是通用的。
(4) 混合工作电压使用:对于低压FPGA/CPLD 目标器件,在GW48 系统上的设计方法与使
用方法完全与5V 器件一致,只是要对主板的跳线作一选择(对GW48-GK/PK 系统不用跳线):
JVCC/VS2 :跳线JVCC (GW48—GK/PK 型标为“VS2” )对芯片I/O 电压3.3V(VCCIO) 或
5V ( VCC ) 作 选 择 , 对 5V 器 件 , 必 须 选 “ 5.0V” 。 例 如 , 若 系 统 上 插 的 目 标 器 件 是
EP1K30/50/100 或 EPF10K30E/50E 等 , 要 求 将 主 板 上 的 跳 线 座 “ JVCC” 短 路 帽 插 向
“3.3V” 一端;将跳线座“ JV2” 短路帽插向“ +2.5V” 一端(如果是 5V 器件,跳线应插向
“5.0V” )。
(5 )并行下载口 :此接口通过下载线与微机的打印机口相连。来自PC机的下载控制信号和
CPLD/FPGA 的目标码将通过此口,完成对目标芯片的编程下载。编程电路模块能自动识别不同的
CPLD/FPGA 芯片,并作出相应的下载适配操作。
(6 )键1~ 键8 :为实验信号控制键,此8 个键受“多任务重配置”电路控制,它在每一张
电路图中的功能及其与主系统的连接方式随SW9 的模式选择而变,使用中需参照第二节中的电路图。
(7 )键9~ 键12 :实验信号控制键(仅GW48—GK/PK 型含此键)此4 个键不受“多任务重配
置”电路控制,使用方法参考“实验电路结构 NO.5” 。
(8 ) 数码管1~8/ 发光管D1~D16 :也受“多任务重配置”电路控制,它们的连线形式也
需参照第二节的电路图。
(9 ) 数码管9~14/ 发光管D17~D22 :不受“多任务重配置”电路控制(仅GW48—GK/PK 型
含此发光管),它们的连线形式和使用方法参考“实验电路结构 NO.5” 。
(10)“时钟频率选择”P1A/JP1B/JP1C :为时钟频率选择模块。通过短路帽的不同接插方式,
使目标芯片获得不同的时钟频率信号。对于“CLOCK0”JP1C ,同时只能插一个短路帽,以便选择输
向“CLOCK0” 的一种频率:
信号频率范围: 1Hz – 50MHz (对GW48-CK 系统)
信号频率范围: 0.5Hz – 50MHz (对GW48-GK 系统)
信号频率范围: 0.5Hz – 100MHz (对GW48-PK 系统),
由于CLOCK0 可选的频率比较多,所以比较适合于目标芯片对信号频率或周期测量等设计项目的
信号输入端。JP1B分三个频率源组,即如系统板所示的“高频组”、“中频组”和“低频组”。它
们分别对应三组时钟输入端。例如,将三个短路帽分别插于JP1B座的2Hz 、1024Hz 和12MHz ;而另
三 个 短 路 帽 分 别 插 于 JP1A 座 的 CLOCK4 、 CLOCK7 和 CLOCK8 , 这 时 , 输 向 目 标 芯 片 的 三 个 引 脚 :
CLOCK4 、CLOCK7 和CLOCK8 分别获得上述三个信号频率。需要特别注意的是,每一组频率源及其对应
时钟输入端,分别只能插一个短路帽。也就是说,通过JP1A/B 的组合频率选择,最多只能提供三个
时钟频率。
注意,对于GW48-GK/PK 系统,时钟选择比较简单:每一频率组仅接一个频率输入口,如低频端
的4 个频率通过短路帽,可选的时钟输入口仅为CLOCK2 ,因此对于GW48-GK/PK ,总共只有4 个时钟
可同时输入FPGA:CLOCK0 、CLOCK2 、CLOCK5 、CLOCK9 。
(11)扬声器S1:目标芯片的声讯输出,与目标芯片的“SPEAKER” 端相接,即PIO50 。通过
此口可以进行奏乐或了解信号的频率。
6
(12) PS/2接口:通过此接口,可以将PC机的键盘和/ 或鼠标与GW48系统的目标芯片相连,
从 而 完 成 PS/2 通 信 与 控 制 方 面 的 接 口 实 验 , GW48-GK/PK 含 另 一 PS/2 接 口 , 参 见 实 验 电 路 结 构
NO.5。
(13)VGA 视频接口:通过它可完成目标芯片对VGA 显示器的控制。
(14) 单片机接口器件:它与目标板的连接方式也已标于主系统板上:连接方式可参见附图2-
13。
注意1 ,对于GW48-GK/PK 系统,实验板左侧有一开关,向上拨,将RS232 通信口直接与FPGA的
PIO31 和PIO30 相接;向下拨则与89C51 单片机的P30 和P31 端口相接。于是通过此开关可以进行
不同的通信实验,详细连接方式可参见附图2-13。平时此开关向下打,不要影响FPGA的工作。
注意2 ,由附图2-13可知,单片机89C51 的P3和P1口是与FPGA的PIO66-PIO79 相接的,而这些
端口又与6 数码管扫描显示电路连在一起的,所以当要进行6 数码管扫描显示实验时,必须拔去右
侧的单片机,并安实验电路结构 NO.5,将拨码开关3 ,拨为使能,这时LCD 停止工作。
(15) RS-232 串行通讯接口:此接口电路是为单片机与PC机通讯准备的,由此可以使PC机、
单片机、FPGA/CPLD 三者实现双向通信。当目标板上FPGA/CPLD 器件需要直接与PC机进行串行通讯
时,可参见附图2-13,和实验电路结构图NO.5,将实验板右侧的开关向上打“TO FPGA” ,从而使
目 标 芯 片 的 PIO31 和 PIO30 与 RS232 口 相 接 , 即 使 RS232 的 通 信 接 口 直 接 与 目 标 器 件 FPGA 的
PIO30/PIO31 相接。而当需要使PC机的RS232 串行接口与单片机的P3.0和P3.1口相接时,则应将开
关向下打“TO MCU” 既可(平时不用时也应保持在个位置)。
(16) “AOUT” D/A 转换 :利用此电路模块(实验板左下侧),可以完成FPGA/CPLD 目标
芯片与D/A 转换器的接口实验或相应的开发。它们之间的连接方式可参阅“实验电路结构 NO.5”
:D/A 的模拟信号的输出接口是“ AOUT” ,示波器可挂接左下角的两个连接端。当使能拨码开关
8 :“滤波1” 时,D/A 的模拟输出将获得不同程度的滤波效果 。
注意,进行D/A 接口实验时,需打开左侧第2 个开关,获得+/-12 伏电源,实验结束后关上此电源。
( 17 ) “ AIN0”/“AIN1” : 外 界 模 拟 信 号 可 以 分 别 通 过 系 统 板 左 下 侧 的 两 个 输 入 端
“AIN0” 和“AIN1” 进入A/D 转换器ADC0809 的输入通道IN0 和IN1 ,ADC0809 与目标芯片直接相
连。通过适当设计,目标芯片可以完成对ADC0809 的工作方式确定、输入端口选择、数据采集与处
理等所有控制工作, 并可通过系统板提供的译码显示电路,将测得的结果显示出来。此项实验首先
需参阅第二节的“实验电路结构NO.5” 有关0809与目标芯片的接口方式,同时了解系统板上的接插
方法以及有关0809工作时序和引脚信号功能方面的资料。
注意:不用0809时,需将左下角的拨码开关的“A/D 使能”和“转换结束”打为禁止:向上拨,
以避免与其他电路冲突。
ADC0809 A/D 转换实验接插方法(如实验电路结构 NO.5图所示):
1 . 左下角拨码开关的“A/D 使能”和“转换结束”打为使能:向下拨,即将ENABLE(9)
与PIO35 相接;若向上拨则禁止,即则使ENABLE(9)0 ,表示禁止0809工作,使它的所有输出端为
高阻态。
2 . 左 下 角 拨 码 开 关 的 “ 转 换 结 束 ” 使 能 , 则 使 EOC(7)PIO36 , 由 此 可 使 目 标 芯 片 对
ADC0809 的转换状态进行测控。
(18) VR1/“AIN1” :VR1 电位器,通过它可以产生0V~+5V 幅度可调的电压。其输入口是
0809的IN1 (与外接口AIN1相连,但当AIN1插入外输入插头时,VR1 将与IN1 自动断开)。若利用
VR1 产 生 被 测 电 压 , 则 需 使 0809 的 第 25 脚 置 高 电 平 , 即 选 择 IN1 通 道 , 参 考 “ 实 验 电 路 结 构
NO.5” 。
(19) AIN0的特殊用法 :系统板上设置了一个比较器电路,主要以LM311 组成。若与D/A
电 路 相 结 合 , 可 以 将 目 标 器 件 设 计 成 逐 次 比 较 型 A/D 变 换 器 的 控 制 器 件 参 考 “ 实 验 电 路 结 构
NO.5” 。
(20) 系统复位键:此键是系统板上负责监控的微处理器的复位控制键,同时也与接口单片
机的复位端相连。因此兼作单片机的复位键。
(21) 下载控制开关 :在系统板的左侧第3 个开关。当需要对实验板上的目标芯片下载时必
7
须将开关向上打(即“DLOAD” );而当向下打(LOCK)时,将关闭下载口,这时可以将下载并行
线拔下而作它用(这时已经下载进FPGA的文件不会由于下载口线的电平变动而丢失);例如拔下的
25芯下载线可以与GWAK30+ 适配板上的并行接口相接,以完成类似逻辑分析仪方面的实验。
(22) 跳线座SPS :短接“T_F” 可以使用在系统频率计。频率输入端在主板右侧标有“频率
计”处。模式选择为“ A” 。短接“PIO48” 时,信号PIO48 可用,如实验电路结构图NO.1 中的
PIO48 。平时应该短路“PIO48”
(23) 目标芯片万能适配座CON1/2 :在目标板的下方有两条80个插针插座(GW48-CK 系统),
其连接信号如附图1-1B所示,此图为用户对此实验开发系统作二次开发提供了条件。此二座的位置
设置方式和各端口的信号定义方式与综合电子设计竞赛开发板GWDVP-B 完全兼容!!!
对于GW48-GK/PK 系统,此适配座在原来的基础上增加了20个插针,功能大为增强。增加的20
插针信号与目标芯片的连接方式可参考“实验电路结构NO.5” 和附图2-13。
(24)拨码开关 :拨码开关的详细用法可参考实验电路结构 NO.5图和附图2-13。
(25)ispPAC 下载板 :对于GW48-GK 系统,其右上角有一块ispPAC 模拟EDA 器件下载板,可
用于模拟EDA 实验中对ispPAC10/20/80 等器件编程下载用,详细方法请看光盘中《ENA 技术实用教
程》配套教学软件实验演示部分:“模拟EDA 实验演示”的POWER POINT 。
(26)拨8X8 数码点阵 :在右上角的模拟EDA 器件下载板上还附有一块数码点阵显示块,是
通用供阳方式,需要16根接插线和两根电源线连接。详细方法请看“实验演示”的POWER POINT 。
(27) 使用举例: 若 通 过 键 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” 标号是一致的
(这就是引脚标准化),但具体引脚号是不同的,而在逻辑设计中引脚的锁定数必须是该芯片的具
体的引脚号。具体对应情况需要参考第3 节的引脚对照表。

第二节 实验电路结构图
1. 实 验 电 路 信 号 资 源 符 号 图 说 明
结合附图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 相接。

8
(5 )附图2-1d是单次脉冲发生器。每按一次键,输出一个脉冲,与此键对应的发光管也会闪亮
一次,时间20ms。

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

(6 )附图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。具体的输入频率,可参考主板频率选择模
块。此电路可用于设计频率计,周期计,计数器等等。
(2) 结构图NO.1:适用于作加法器、减法器、比较器或乘法器等。例如,加法器设计,可利用
键4 和键3 输入8 位加数;键2 和键1 输入8 位被加数,输入的加数和被加数将显示于键对应的数
码管4-1 ,相加的和显示于数码管6 和5 ;可令键8 控制此加法器的最低位进位。
(3) 结构图NO.2:可用于作VGA 视频接口逻辑设计,或使用数码管8 至数码管5 共4 个数码管
作7 段显示译码方面的实验;而数码管4 至数码管1 ,4 个数码管可作译码后显示,键1 和键2 可
输入高低电平。
(4) 结构图NO.3 :特点是有8 个琴键式键控发生器,可用于设计八音琴等电路系统。也可以产
生时间长度可控的单次脉冲。该电路结构同结构图NO.0 一样,有8 个译码输出显示的数码管,以
显示目标芯片的32位输出信号,且8 个发光管也能显示目标器件的8 位输出信号。
(5 )结构图NO.4:适合于设计移位寄存器、环形计数器等。电路特点是,当在所设计的逻辑中
有串行2 进制数从PIO10 输出时,若利用键7 作为串行输出时钟信号,则PIO10 的串行输出数码可
以在发光管D8至D1上逐位显示出来,这能很直观地看到串出的数值。
(6) 结构图NO.5:此电路结构比较复杂,有较强的功能,主要用于目标器件与外界电路的接口
设计实验。该电路主要含以9 大模块:
1.普通内部逻辑设计模块。在图的左下角。此模块与以上几个电路使用方法相同,例如同结
构图NO.3 的唯一区别是8 个键控信号不再是琴键式电平输出,而是高低电平方式向目标芯片输入
(即乒乓开关)。此电路结构可完成许多常规的实验项目。
2.RAM/ROM 接口。在图左上角,此接口对应于主板上,有2 个32脚的DIP 座,在上面可以插
RAM ,也可插ROM (仅GW48-GK/PK 系统包含此接口)例如:
RAM :628128 ;ROM :27C010 、27C020 、27C040 、27C080 、29C010 、29C020 、29C040 等。
此32脚座的各引脚与目标器件的连接方式示于图上,是用标准引脚名标注的,如PIO48 (第
1 脚)、PIO10 (第2 脚)等等。注意,RAM/ROM 的使能由拨码开关“1” 控制。
对于不同的RAM 或ROM ,其各引脚的功能定义不尽一致,即,不一定兼容,因此在使用前应
该查阅相关的资料,但在结构图的上方也列出了部分引脚情况,以资参考。
3 . VGA 视 频 接 口 。 在 图 右 上 角 , 它 与 目 标 器 件 有 5 个 连 接 信 号 :
PIO40 、 41 、 42 、 43 、 44 , 通 过 查 表 ( 第 3 节 的 引 脚 对 照 表 ) , 可 的 对 应 于 EPF10K20-144 或
EP1K30/50-144 的5 个引脚号分别是:87、88、89、90、91。

9
4 .PS/2键盘接口。在图右上侧。它与目标器件有2 个连接信号:PIO45 、46。
5 .A/D 转换接口。在图左侧中。图中给出了ADC0809 与目标器件连接的电路图。使用注意
事项可参照上节。有关FPGA/CPLD 与ADC0809 接口方面的实验示例在本实验讲义中已经给出(实验
12)。
6 .D/A 转换接口。在图右下侧。图中给出了DAC0832 与目标器件连接的电路图。使用注意
事 项 可 参 照 上 节 。 有 关 FPGA/CPLD 与 0832 接 口 方 面 的 实 验 示 例 在 本 实 验 讲 义 中 已 经 给 出 ( 实 验
16)。
7 . LM311 接 口 。 注 意 , 此 接 口 电 路 包 含 在 以 上 的 D/A 接 口 电 路 中 , 可 用 于 完 成 使 用
DAC0832 与比较器LM311 共同实现A/D 转换的控制实验。比较器的输出可通过主板左下侧的跳线选
择“比较器”,使之与目标器件的PIO37 相连。以便用目标器件接收311 的输出信号。
注意,有关D/A 和311 方面的实验都必须打开+/-12V 电压源,实验结束后关闭此电源。
8 .单片机接口。根据此图和附图2-13,给出了单片机与目标器及LCD 显示屏的连接电路图。
9 .RS232 通信接口。
注意,结构图NO.5中并不是所有电路模块都可以同时使用,这是因为各模块与目标器件的IO
接口有重合。仔细观察可以发现:
1 .当使用RAM/ROM 时,数码管3 、4 、5 、6 、7 、8 共6 各数码管不能同时使用,这时,
如果有必要使用更多的显示,必须使用以下介绍的扫描显示电路。
但 RAM/ROM 可 以 与 D/A 转 换 同 时 使 用 , 尽 管 他 们 的 数 据 口
(PIO24 、25、26、27、28、29、30、31)是重合的。这时如果希望将RAM/ROM 中的数据输入D/A
器件中,可设定目标器件的PIO24 、25、26、27、28、29、30、31端口为高阻态;而如果希望用目
标器件FPGA直接控制D/A 器件,可通过拨码开关禁止RAM/ROM 数据口。
RAM/ROM 能与VGA 同时使用,但不能与PS/2同时使用,这时可以使用以下介绍的PS/2接口。
2 . A/D 不能与RAM/ROM 同时使用,由于他们有部分端口重合,若使用RAM/ROM ,必须禁
止ADC0809 ,而当使用ADC0809 时,应该禁止RAM/ROM ,如果希望A/D 和RAM/ROM 同时使
用以实现诸如高速采样方面的功能,必须使用含有高速A/D 器件的适配板,如GWAK30+ 等
型号的适配板。
3 . RAM/ROM 不能与311 同时使用,因为在端口PIO37 上,两者重合。
(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) 当系统上的“模式指示”数码管显示“A” 时,系统将变成一台频率计,数码管8 将显示
“F” ,“数码6” 至“数码1” 显示频率值,最低位单位是Hz。测频输入端为系统板右下侧的插
座。
(13) 实验电路结构图COM :此图的所有电路仅GW48-GK/PK 系统拥有,即以上所述的所有电路结
构(除RAM/ROM 模块),包括“实验电路结构NO.0” 至“实验电路结构NO.B” 共11套电路结构模式
为GW48-CK 和GW48-GK/PK 两种系统共同拥有(兼容),我们把他们称为通用电路结构。在原来的11
套电路结构模式中的每一套结构图中增加附图2-13所示的“实验电路结构图COM” 。
例如,在GW48-GK 系统中,当“模式键”选择“5” 时,电路结构将进入附图2-7 所示的实
验电路结构图NO.5外,还应该加入“实验电路结构图COM” 。这样以来,在每一电路模式中就能比
原来实现更多的实验项目。
10
“实验电路结构图COM” 包含的电路模块有:
1 . PS/2键盘接口。注意,在通用电路结构中,还有一个用于鼠标的PS/2接口。
2 . 4 键直接输入接口。原来的键1 至键8 是由“多任务重配置”电路结构控制的,所以
键的输入信号没有抖动问题,不需要在目标芯片的电路设计中加入消抖动电路,这样,能
简化设计,迅速入门。所以设计者如果希望完成键的消抖动电路设计,可利用此图的键9
至键12。当然也可以利用此4 键完成其他方面的设计。注意,此4 键为上拉键,按下后为
低电平。
3 . I 平方C 串行总线存储器件接口。该接口器件用24C01 担任,这是一种十分常用的串
行E 平方ROM 器件。
4 . USB 接口。此接口是SLAVE 接口。
5 . 扫描显示电路。这是一个6 数码管(共阴数码管)的扫描显示电路。段信号为7 个数
码段加一个小数点段,共8 位,分别由PIO60 、61、62、63、64、65、66、67通过同相驱
动后输入;而位信号由外部的6 个反相驱动器驱动后输入数码管的共阴端。
6 . 实验电路结构图COM” 中各标准信号(PIOX )对应的器件的引脚名,必须查附表1-
2 ,而不是查第3 节的通用的引脚对照表。附表1-2 仅适用于GW48-GK/PK 系统:
7 发光管插线接口。在主板的右上方有6 个发光管(共阳连接),以供必要时用接插线与目标
器件连接显示。由于显示控制信号的频率比较低,所以目标器件可以直接通过连接线向此发光管输
出。
实 验 电 路 结 构 图
ÊýÂë8 ÊýÂë7 ÊýÂë6 ÊýÂë5 ÊýÂë4 ÊýÂë3 ÊýÂë2 ÊýÂë1

ÑïÉùÆ÷

ÒëÂëÆ÷ÒëÂëÆ÷ÒëÂëÆ÷ÒëÂëÆ÷ÒëÂëÆ÷ÒëÂëÆ÷ÒëÂëÆ÷ÒëÂëÆ÷

SPEAKER
PIO19-PIO16
PIO23-PIO20
PIO27-PIO24
PIO31-PIO28
PIO35-PIO32
PIO39-PIO36
PIO43-PIO40
PIO47-PIO44
D8 D7 D6 D5 D4 D3 D2 D1
FPGA/CPLD
Ä¿±êоƬ

PIO7--PIO2
PIO7 PIO6 PIO5 PIO4 PIO3 PIO2
PIO11-PIO8
PIO15-PIO12
D16 D15 D14 D13 D12 D11

HEX HEX
ʵÑéµç·½á¹¹Í¼
NO.0
¼ü8 ¼ü7 ¼ü6 ¼ü5 ¼ü4 ¼ü3 ¼ü2 ¼ü1

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

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

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

12
8 7 6 5 4 3 2 1
ÑïÉùÆ÷

ÒëÂëÆ÷ÒëÂëÆ÷ÒëÂëÆ÷ÒëÂëÆ÷ÒëÂëÆ÷ÒëÂëÆ÷ÒëÂëÆ÷ÒëÂëÆ÷

SPEAKER
PIO19-PIO16
PIO23-PIO20
PIO27-PIO24
PIO31-PIO28
PIO35-PIO32
PIO39-PIO36
PIO43-PIO40
PIO47-PIO44
D8 D7 D6 D5 D4 D3 D2 D1
FPGA/CPLD
Ä¿±êоƬ
PIO15 PIO14 PIO13 PIO12 PIO11 PIO10 PIO9 PIO8
PIO15-PIO8
PIO7
PIO6
PIO5
PIO4
PIO3
PIO2
PIO1
D9
D16 D15 D14 D13 D12 D11 D10 PIO0

ʵÑéµç·½á¹¹Í¼
¼ü8 ¼ü7 ¼ü6 ¼ü5 ¼ü4 ¼ü3 ¼ü2 ¼ü1
NO.3

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

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

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

14
628128(PIN30->VCC,PIN3->A14,PIN29->WE)
PIO48 1 A18/A19 VCC 32 VCC 29C040(PIN31->WE,PIN1->A18,
PIO10 2 A16 A18/A15/WE 31 PIO9 PIN30->A17,PIN3->A15,PIN29->A14)
PIO47 3 A14(A15) A17/VCC 30 PIO49 27040(PIN31->A18,PIN30->A17,
PIO14 4 A12 WR/A14 29 PIO46 PIN3->A15,PIN29->A14)
PIO39 5 A7 6264 A13 28 PIO45 27020(PIN30->A17,PIN3->A15, PIN29->A14)
PIO38 6 A6 62256 A8 27 PIO11 27010(PIN30->VCC,PIN3->A15, P29->A14)
PIO37 7 A5 628128 A9 26 PIO12
PIO36 8 A4 2764 A11 25 PIO13 ×ó²àµÄRAM/ROMÊÇPIO62
PIO35 9 A3 27256 OE 24 PIO62/PIO8 ÓÒ²àµÄRAM/ROMÊÇPIO8
PIO34 10 A2 27512 A10 23 PIO15 VCC
PIO33 11 A1 27010 CS1 22
RAM/ROMʹÄÜ
PIO32 12 A0 27020 D7 21 PIO31 GND
PIO24 13 D0 27040 D6 20 PIO30
PIO25 14 D1 27080 D5 19 PIO29 8 7 6 5 4 3 2 1
PIO26 15 D2 D4 18 PIO28
16 17 ²¦Â뿪¹Ø
GND GND RAM/ROM D3 PIO27 ON

ROMʹÄÜ
5thʹÄÜ
Â˲¨1
A/DʹÄÜ
ת»»½áÊø

DS8ʹÄÜ
DS6ʹÄÜ
±È½ÏÆ÷
£¨²¦Âë1£º¡°ROMʹÄÜ ON¡±¼´½«CS1½ÓµØ£©
VCC
AIN1

²¦Âë1£ºÁ½¸öROM/RAMʹÄÜ£¬¼´ËüÃǵÄCS1½ÓµØ
2

10K
AIN0
750KHZA

+5V

²¦Âë2£ºÄ¬ÈÏ¹Ø±Õ ÏòÉϲ¦£¬Óɳ§¼Ò֪ͨÉý¼¶
1
26
27

VR1
²¦Âë3£º6ÊýÂë¹ÜÏÔʾ¿ª¹Ø£¬Ä¬ÈϹرÕ
10

12
16

²¦Âë4£º8ÊýÂë¹ÜÏÔʾ¿ª¹Ø£¬Ä¬ÈÏ´ò¿ª
CLOCK

IN-0
IN-1

ref(+)
ref(-)

²¦Âë5£ºÓ¦ÓÃLM311ʹÄÜ£¬¼ûÏÂͼ
ADC0809
EU1

²¦Âë6£ºADC0809ת»»½áÊøʹÄÜ£¬¼û×óͼ
ADD-B (24)
ADD-C (23)

ENABLE

²¦Âë7£ºADC0809ʹÄÜ£¬Ä¬ÈϹرգ¬¼û×óͼ
msb2-1

START
ADD-A
lsb2-8
EOC

ALE

VCC ²¦Âë8£ºDAC0832Êä³öÂ˲¨Ê¹ÄÜ
2-2
2-3
2-4
2-5
2-6
2-7

6 R76 200
21
20
19
18

15
14
17

25

22
8

9
6

J6 1
7 R£¨PIO40£©
J7 8 VGA 2 R77 200
4 G£¨PIO41£©
²¦Âë6

4 ÊÓƵ½Ó¿Ú
PIO46 5 PS/2½Ó¿Ú 3 R78 200
5 B£¨PIO42£©
PIO45 1
²¦Âë7

10 13
3 HS£¨PIO43£©
PIO23
PIO22
PIO21
PIO20
PIO19
PIO18
PIO17
PIO16

PIO32

PIO33
PIO35

PIO34

14
PIO8

VS£¨PIO44£©
GND

8 7 6 5 4 3 2 1
ÑïÉùÆ÷ £¨²¦Âë8£º¡°Â˲¨1 ON¡±¼´Á¬½ÓÂ˲¨µçÈÝ£©
Â˲¨1
103
7.2K
SPEAKER

ÒëÂëÆ÷ÒëÂëÆ÷ÒëÂëÆ÷ÒëÂëÆ÷ÒëÂëÆ÷ÒëÂëÆ÷ÒëÂëÆ÷ÒëÂëÆ÷ COMM 6 AOUT


PIO19-PIO16 7
PIO23-PIO20 5
TL082/2
PIO27-PIO24
PIO31-PIO28
PIO35-PIO32
PIO39-PIO36 R72 VCC
PIO43-PIO40 5.1K AIN0
PIO47-PIO44
2 +12
WR1
D8 D7 D6 D5 D4 D3 D2 D1
FPGA/CPLD DAC0832
9 51pFC27
Ä¿±êоƬ EU2 FB
PIO15 PIO14 PIO13 PIO12 PIO11 PIO10 PIO9 PIO8
8 10K
PIO15-PIO8 11 2
IOUT1
1
PIO7
12 3 +12
PIO6 IOUT2
PIO5 1 4
PIO24 7 D0 /CS 8
PIO4 18 2
PIO25 6 D1 WR2 TL082/1
PIO3 17
PIO26 5 D2 XFER
PIO2 3 3
PIO27 4 D3 A GND
PIO1 10
D16 D15 D14 D13 D12 D11 D10 D9 PIO28 16 D4 D GND LM311 4
PIO0
PIO29 15 D5 -12 -12
8
PIO30 14 D6 VREF
20
PIO31 13 D7 VCC
COMP
ʵÑéµç·½á¹¹Í¼ +5 VCC
PIO37
¼ü8 ¼ü7 ¼ü6 ¼ü5 ¼ü4 ¼ü3 ¼ü2 ¼ü1 NO.5 £¨²¦Âë5£º¡°±È½ÏÆ÷ON¡±¼´
Á¬½ÓPIO37ÓëCOMP£©
附 图 2-7 实 验 电 路 结 构 图 NO.5

15
8 7 6 5 4 3 2 1
ÑïÉùÆ÷

SPEAKER
ÒëÂëÆ÷ÒëÂëÆ÷ ÒëÂëÆ÷ÒëÂëÆ÷ ÒëÂëÆ÷ÒëÂëÆ÷
PIO19-PIO16
PIO23-PIO20
PIO27-PIO24
PIO31-PIO28
PIO35-PIO32
PIO39-PIO36
D8 D7 D6 D5 D4 D3 D2 D1
FPGA/CPLD
PIO47 PIO46 PIO45 PIO44 PIO43 PIO42 PIO41 PIO40 Ä¿±êоƬ
PIO47-PIO40
PIO7
PIO6
PIO5
PIO4
PIO3
PIO2
PIO0
D16 D15 D14 D13 D12 D11 D9

µ¥Âö³å µ¥Âö³å µ¥Âö³å


ʵÑéµç·½á¹¹Í¼
¼ü8 ¼ü7 ¼ü6 ¼ü5 ¼ü4 ¼ü3 ¼ü2 ¼ü1 NO.7

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

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

Òý½Å¶ÔÕÕ±í
PIO60 PIO61 PIO62 PIO63 PIO64 PIO65 PIO66 PIO67 PIO76 PIO77
P137 P138 P140 P141 P142 P143 P144 P7 P11 P14

PIO68 PIO69 PIO70 PIO71 PIO72 PIO73 PIO74 PIO75 PIO78 PIO79
P119 P118 P117 P116 P114 P113 P112 P111 P110 P109
I42
a ÊýÂë9 ÊýÂë10 ÊýÂë11 ÊýÂë12 ÊýÂë13 ÊýÂë14
PIO68 I41 GND USB
PIO69 I40 b 8 8 8 8 8 8
D+£¨PIO65£©
PIO70 I39 c D-£¨PIO64£©
d SLAVE
PIO71 I38 VCC
PIO72 I37 e
VCC
I34

I33

I32

I31

I30

I29
PIO73 I36 f
PIO74 I35 g
PIO76

PIO77

PIO78

PIO79

PIO66

PIO67
J7
PIO75 h 4
PIO46 5 PS/2½Ó¿Ú
PIO45 1
6¹²ÒõÊýÂë¹Ü VCC
3
10K X 4 24C01 GND
¼ü10 ¼ü9 ¼ü11 ¼ü12 1 8 VCC
2 7
PIO63 PIO62 3 6 SCL£¨PIO64£©
PIO60 PIO61 4 5 SDA£¨PIO65£©

VCC GND
VCC
6
5 PIO76
4
PS/2 3
2 D22 D21 D20 D19 D18 D17
1 PIO77

GND
¸´Î»
¼ü
PIO68 1 40 VCC
20
PIO69 2 39 P00
19
½ÓPC»ú
PIO70 3 38 P01
18
PIO71 4 37 P02
17
´®ÐÐͨѶ½Ó¿Ú
PIO72 5 36 P03
5 3 2 P24 16 LCD
PIO73 6 35 P04
P23 15 Òº¾§ÏÔʾÆÁ
PIO74 7 34 P05
P07 14
PIO75 8 33 P06
AT89C51

P06 13
B4 RESET 9 32 P07
P05 12
P30 10 31 EA
P04 11
RS-232
P31 11 30 ALE
P03 10
½Ó¿Úµç·
PIO78 12 29 PSEN
P02 9
PIO79 13 28 P27
P01 8
TO MCU

PIO76 14 27 P26
P00 7
PIO77 15 26 P25
P20 6
O O PIO67 16 25 P24
P21 5
PIO66 17 24 P23
P22 4
X2 18 23
TO FPGA

P22
O O 3
PIO31 X1 19 22 P21
VCC 2
PIO30 GND 20 21 P20
GND 1
Ñ¡Ôñ¿ª¹Ø

17
附 图 2-13 实 验 电 路 结 构 图 COM

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

18
第 三 节 GW48CK/GK/PK 系 统 (万能接插口与结构图信号/ 与芯片引脚对照表
ispLSI ispLSI1048E FLEX XCS05/XCS10 EPM7128S-PL84
结 构 1032E -PQFP128 EPF10K10 -PLCC84 EPM7160S-PL84
图 上 -PLCC84 -PLCC84
的 信 引 引 脚 引 引 脚 引 引 脚 引 引 引 引 脚
号名 脚 名称 脚 名称 脚 名称 脚 脚 脚 名称
号 号 号 号 名 号

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/ 17 I/O10
O10
PIO11 37 I/O11 32 I/O11 21 I/O11 16 I/ 18 I/O11
O11
PIO12 38 I/O12 34 I/O12 22 I/O12 17 I/ 20 I/O12
O12
PIO13 39 I/O13 35 I/O13 23 I/O13 18 I/ 21 I/O13
O13
PIO14 40 I/O14 36 I/O14 24 I/O14 19 I/ 22 I/O14
O14
PIO15 41 I/O15 37 I/O15 25 I/O15 20 I/ 24 I/O15
O15
PIO16 45 I/O16 38 I/O16 27 I/O16 23 I/ 25 I/O16
O16
PIO17 46 I/O17 39 I/O17 28 I/O17 24 I/ 27 I/O17
O17
PIO18 47 I/O18 40 I/O18 29 I/O18 25 I/ 28 I/O18
O18
PIO19 48 I/O19 41 I/O19 30 I/O19 26 I/ 29 I/O19
O19
PIO20 49 I/O20 42 I/O20 35 I/O20 27 I/ 30 I/O20
O20
PIO21 50 I/O21 43 I/O21 36 I/O21 28 I/ 31 I/O21
O21
PIO22 51 I/O22 44 I/O22 37 I/O22 29 I/ 33 I/O22
O22
PIO23 52 I/O23 45 I/O23 38 I/O23 35 I/ 34 I/O23

19
O23
PIO24 53 I/O24 52 I/O24 39 I/O24 36 I/ 35 I/O24
O24
PIO25 54 I/O25 53 I/O25 47 I/O25 37 I/ 36 I/O25
O25
PIO26 55 I/O26 54 I/O26 48 I/O26 38 I/ 37 I/O26
O26
PIO27 56 I/O27 55 I/O27 49 I/O27 39 I/ 39 I/O27
O27
PIO28 57 I/O28 56 I/O28 50 I/O28 40 I/ 40 I/O28
O28
PIO29 58 I/O29 57 I/O29 51 I/O29 41 I/ 41 I/O29
O29
PIO30 59 I/O30 58 I/O30 52 I/O30 44 I/ 44 I/O30
O30
PIO31 60 I/O31 59 I/O31 53 I/O31 45 I/ 45 I/O31
O31
PIO32 68 I/O32 60 I/O32 54 I/O32 46 I/ 46 I/O32
O32
PIO33 69 I/O33 61 I/O33 58 I/O33 47 I/ 48 I/O33
O33
PIO34 70 I/O34 62 I/O34 59 I/O34 48 I/ 49 I/O34
O34
PIO35 71 I/O35 63 I/O35 60 I/O35 49 I/ 50 I/O35
O35
PIO36 72 I/O36 66 I/O36 61 I/O36 50 I/ 51 I/O36
O36
PIO37 73 I/O37 67 I/O37 62 I/O37 51 I/ 52 I/O37
O37
PIO38 74 I/O38 68 I/O38 64 I/O38 56 I/ 54 I/O38
O38
PIO39 75 I/O39 69 I/O39 65 I/O39 57 I/ 55 I/O39
O39
PIO40 76 I/O40 70 I/O40 66 I/O40 58 I/ 56 I/O40
O40
PIO41 77 I/O41 71 I/O41 67 I/O41 59 I/ 57 I/O41
O41
PIO42 78 I/O42 72 I/O42 70 I/O42 60 I/ 58 I/O42
O42
PIO43 79 I/O43 73 I/O43 71 I/O43 61 I/ 60 I/O43
O43
PIO44 80 I/O44 74 I/O44 72 I/O44 62 I/ 61 I/O44
O44
PIO45 81 I/O45 75 I/O45 73 I/O45 65 I/ 63 I/O45
O45
PIO46 82 I/O46 76 I/O46 78 I/O46 66 I/ 64 I/O46

20
O46
PIO47 83 I/O47 77 I/O47 79 I/O47 67 I/ 65 I/O47
O47
PIO48 3 I/O48 85 I/O48 80 I/O48 68 I/ 67 I/O48
O48
PIO49 4 I/O49 86 I/O49 81 I/O49 69 I/ 68 I/O49
O49
SPKER 5 I/O50 87 I/O50 3 CLRn 70 I/ 81 I/O50
O50
CLOCK 6 I/O51 88 I/O51 2 IN1 72 I/
0 O52

ispLSI 1032E ispLSI1048E FLEX XCS05/XCS10 EPM7128S-PL84


结 构 -PLCC84 -PLCC84 EPF10K10 -PLCC84 EPM7160S-PL84
图 上 -PLCC84
的 信 引 引 引 引 脚 引 引 脚 引 引 引 引 脚
号名 脚 脚 脚 名称 脚 名称 脚 脚 脚 名称
号 名 号 号 号 名 号
称 称
CLOCK 6 I/ 88 I/O51 2 IN1 72 I/ 2 IN4
0 O51 O52
CLOCK 66 Y1 83 Y1 42 IN2 77 I/ 69 I/O50
1 O53
CLOCK 7 I/ 89 I/O52 43 GCK2 78 I/ 70 I/O51
2 O52 O54
CLOCK 8 I/ 90 I/O53 44 IN3 79 I/ 73 I/O52
3 O53 O55
CLOCK 9 I/ 91 I/O54 80 I/ 74 I/O53
4 O54 O56
CLOCK 63 Y2 80 Y2 83 OE 81 I/ 75 I/O54
5 O57
CLOCK 10 I/ 92 I/O55 82 I/ 76 I/O55
6 O55 O58
CLOCK 11 I/ 93 I/O56 79 I/O57
7 O56
CLOCK 62 Y3 79 Y3 84 IN4 83 I/ 80 I/O58
8 O59
CLOCK 12 I/ 94 I/O57 1 GCK1 84 I/ 83 IN1
9 O57 O60
CLOCK1 13 I/ 95 I/O58
0 O58
***************************************************
XCS30 XC95108 EP1K100 FLEX10K20 ispLSI 3256/A
结 构 144-PIN XC9572 EPF10K30E/ EP1K30/50 -PQFP160
图 上 TQFP -PLCC84 50E 144-PIN TQFP
的 信 208-PIN

21
号名 P/RQFP
引 引 引 引 脚 引 引 脚 引 引 引 引 脚
脚 脚 脚 名称 脚 名称 脚 脚 脚 名称
号 名 号 号 号 名 号
称 称
PIO0 13 I/O0 1 I/O0 7 I/O 8 I/O0 2 I/O0
8
PIO1 13 I/O1 2 I/O1 8 I/O 9 I/O1 3 I/O1
9
PIO2 14 I/O2 3 I/O2 9 I/O 10 I/O2 4 I/O2
0
PIO3 14 I/O3 4 I/O3 11 I/O 12 I/O3 5 I/O3
1
PIO4 14 I/O4 5 I/O4 12 I/O 13 I/O4 6 I/O4
2
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/ 12 I/O10 24 I/O 22 I/ 14 I/O10
O10 O10
PIO11 13 I/ 13 I/O11 25 I/O 23 I/ 15 I/O11
O11 O11
PIO12 14 I/ 14 I/O12 26 I/O 26 I/ 16 I/O12
O12 O12
PIO13 15 I/ 15 I/O13 27 I/O 27 I/ 17 I/O13
O13 O13
PIO14 16 I/ 17 I/O14 28 I/O 28 I/ 25 I/O14
O14 O14
PIO15 19 I/ 18 I/O15 29 I/O 29 I/ 26 I/O15
O15 O15
PIO16 20 I/ 19 I/O16 30 I/O 30 I/ 28 I/O16
O16 O16
PIO17 21 I/ 20 I/O17 31 I/O 31 I/ 29 I/O17
O17 O17
PIO18 22 I/ 21 I/O18 36 I/O 32 I/ 30 I/O18
O18 O18
PIO19 23 I/ 23 I/O19 37 I/O 33 I/ 32 I/O19
O19 O19
PIO20 24 I/ 24 I/O20 38 I/O 36 I/ 33 I/O20
O20 O20
PIO21 25 I/ 25 I/O21 39 I/O 37 I/ 34 I/O21
O21 O21
PIO22 26 I/ 26 I/O22 40 I/O 38 I/ 35 I/O22
O22 O22

22
PIO23 28 I/ 31 I/O23 41 I/O 39 I/ 36 I/O23
O23 O23
PIO24 29 I/ 32 I/O24 44 I/O 41 I/ 37 I/O24
O24 O24
PIO25 30 I/ 33 I/O25 45 I/O 42 I/ 38 I/O25
O25 O25
PIO26 75 I/ 34 I/O26 113 I/O 65 I/ 82 I/O26
O26 O26
PIO27 77 I/ 35 I/O27 114 I/O 67 I/ 83 I/O27
O27 O27
PIO28 78 I/ 36 I/O28 115 I/O 68 I/ 84 I/O28
O28 O28
PIO29 79 I/ 37 I/O29 116 I/O 69 I/ 85 I/O29
O29 O29
PIO30 80 I/ 39 I/O30 119 I/O 70 I/ 86 I/O30
O30 O30
PIO31 82 I/ 40 I/O31 120 I/O 72 I/ 87 I/O31
O31 O31
PIO32 83 I/ 41 I/O32 121 I/O 73 I/ 88 I/O32
O32 O32
PIO33 84 I/ 43 I/O33 122 I/O 78 I/ 89 I/O33
O33 O33
XCS30 XC95108 EP1K100 FLEX10K20 ispLSI 3256/A
结 构 144-PIN XC9572 EPF10K30E/ EP1K30/50 -PQFP160
图 上 TQFP -PLCC84 50E 144-PIN TQFP
的 信 208-PIN
号名 P/RQFP
引 引 引 引 脚 引 引 脚 引 引 引 引 脚
脚 脚 脚 名称 脚 名称 脚 脚 脚 名称
号 名 号 号 号 名 号
称 称
PIO34 85 I/ 44 I/O34 125 I/O 79 I/ 90 I/O34
O34 O34
PIO35 86 I/ 45 I/O35 126 I/O 80 I/ 92 I/O35
O35 O35
PIO36 87 I/ 46 I/O36 127 I/O 81 I/ 93 I/O36
O36 O36
PIO37 88 I/ 47 I/O37 128 I/O 82 I/ 94 I/O37
O37 O37
PIO38 89 I/ 48 I/O38 131 I/O 83 I/ 95 I/O38
O38 O38
PIO39 92 I/ 50 I/O39 132 I/O 86 I/ 96 I/O39
O39 O39
PIO40 93 I/ 51 I/O40 133 I/O 87 I/ 105 I/O40
O40 O40
PIO41 94 I/ 52 I/O41 134 I/O 88 I/ 106 I/O41

23
O41 O41
PIO42 95 I/ 53 I/O42 135 I/O 89 I/ 108 I/O42
O42 O42
PIO43 96 I/ 54 I/O43 136 I/O 90 I/ 109 I/O43
O43 O43
PIO44 97 I/ 55 I/O44 139 I/O 91 I/ 110 I/O44
O44 O44
PIO45 98 I/ 56 I/O45 140 I/O 92 I/ 112 I/O45
O45 O45
PIO46 99 I/ 57 I/O46 141 I/O 95 I/ 113 I/O46
O46 O46
PIO47 10 I/ 58 I/O47 142 I/O 96 I/ 114 I/O47
1 O47 O47
PIO48 10 I/ 61 I/O48 143 I/O 97 I/ 115 I/O48
2 O48 O48
PIO49 10 I/ 62 I/O49 144 I/O 98 I/ 116 I/O49
3 O49 O49
SPEAKE 10 I/O 63 I/O50 148 I/O 99 I/ 117 I/O50
R 4 O50
CLOCK 11 65 I/O51 182 I/O 54 INPU 118 I/O
0 1 T1
CLOCK 11 66 I/O52 183 I/O 55 GCLO 119 I/O
1 3 K1
CLOCK 11 67 I/O53 184 I/O 12 INPU 120 I/O
2 4 4 T3
CLOCK 10 68 I/O54 149 I/O 10 I/ 121 I/O
3 6 0 O51
CLOCK 11 69 I/O55 150 I/O 10 I/ 103 Y2
4 2 1 O52
CLOCK 11 70 I/O56 157 I/O 10 I/ 122 I/O
5 5 2 O53
CLOCK 11 71 I/O57 170 I/O 11 I/ 123 I/O
6 6 7 O61
CLOCK 76 72 I/O58 112 I/O 11 I/ 102 Y3
7 8 O62
CLOCK 11 75 I/O60 111 I/O 56 INPU 124 I/O
8 7 T2
CLOCK 11 79 I/O63 104 I/O 12 GCLO 126 I/O
9 9 5 K2
CLOCK1 2 103 I/O 11 I/ 101 Y4
0 9 O63

24
注,对于GWAK30+/50+ 适配板的时钟引脚应该查下章的“ 时 钟 连 接 表 1”
第 二 章 GWAK30+/50+ 适 配 板 使 用 说 明
GW48-GK/PK 主系统推荐的超强功能适配板是GWAK30+ ,结合主系统,该适配板可以完成
多相设计项目,例如: 1 、简单数字信号处理项目的设计;2 、数字锁相环;3 、数字震荡器;
4 、频率合成器;5 、扫频信号源;6 、VGA 显示图象电路;7 、图象处理模块;8 、高速采样
模块电路,如存储示波器;9 、部分通信原
理方面的设计实验等。

附图 2-1 GWAK30+/50+上高速 A/D 电路图

GWAK30+ 适配板使用注意事项:
1 、该适配板上的FPGA 的引脚锁定和定义方法与其他目标器件一样,都必须查 第一章第
3 节的引脚表,惟独不同的是,时钟输入的引必须查以下的“时钟连接表”。
2 、高速A/D5510 的连线情况如附图2-1 所示,其模拟信号输入端有两个:一个是孔形座,
另一是针形座,其中:“A_INPUT”模拟信号输入端;“A_GND” 是模拟地。插座“SL” 是参
考电压选择座,选“SL_VCC” ,表示以主板VCC电压作为参考电压;选“SL_REF” ,则以外部
参考电压为A/D 的参考电压,而外部参考电压必须来自“REF_V” 。
3 、如附图 2-2 所示, GWAK30+ 板上有一
74HC245 ,其输出端口恰好与主板上的 RAM/ROM
的数据口相接,是用来进行逻辑数据采集的。例如
可用来设计逻辑分析仪,可利用目标器件的第100
脚,即“P100” 接受触发信号,当对外部逻辑信号
采样时,首先使能 74HC245 ,即使“ENABL” 端
短 路 , 即 使 其 /E ( 245 的 第 19 脚 ) 与 目 标 器 件 的
102 脚相接,并为低电平,使 FPGA 能控制信号采
样 ; 然 后 令 74HC245 令 目 标 芯 片 的 第
41、42、65、67、68、69、70、72脚为高阻态或输
入 状 态 , 这 样 一 来 , 通 过 FPGA 扫 变 主 板 上 的
RAM 的地址,外部逻辑信号即可进入 RAM 中,
采样结束后,可使第102 脚为高电平,然后通过第
41、42、65、67、68、69、70、72脚将RAM 中的
数据读出,经由适配板上的并行口传输给PC 机。
必 须 注 意 , 平 时 “ ENA” 座 的 短 路 帽 必 须 接
在“CLOSE”端。
4 、如附图2-2 所示,适配板上还有一个可 附图 2-2 GWAK30+/50+上并行口和缓冲电路
供与PC 机通信的并行口。此口可以利用 FPGA 的
并行下载通信线来与PC 机通信。方法是当把设计好的文件下载(配置)进FPGA 后,将左侧的开
关打到“LOCK” ,然后拔下下载线,插到适配板的并行口上,即可进行相关的实验了。
时钟连接表1
CLK0 CLK2 CLK5 CLK9
P126 P54 P56 P124

25
第三章 GW48 系 统 专 用 配 套 之 GWDVP-B 电 子 设 计 应
用 板 使 用 说 明
(其它信息请参考POWER POINT 文件GWDVPB 说明.ppt )
一 、 GWDVP 板 含 :
(1 )单片机系统:通过改变FPGA/CPLD 中的逻辑结构和跳线,可使它们与ROM/RAM 构成单
片机总线工作系统(单片机最小系统,使用8031器件)、单片机独立工作系统(此工作方式最为灵
活,如与A/D 结合可构成类似于DMA 的高速数据采集系统,使用89C51 等器件)。
(2 )显示系统:它们由8 个数码显示器和8 个发光管构成的串行静态显示系统。静态显示系统
的优点是,显示亮度度好;显示稳定;占用单片机端口少(P3.0 和P3.1--- 此2 口都为输入方式,可
复用,且竞赛项目通常无RS232 通信);单片机编程方便,中断控制设计方便,编程控制简单,增
加数码管的软硬件更改也十分简单;(注意,如果外接A/D ,D/A 系统,必须提供单独电源,不要
用GWDVP 系统的电源,以免显示系统干扰A/D 和D/A 的工作精度)。
(3 )ROM/RAM 系统:GWDVP 板上的FPGA/CPLD 和RAM/ROM 可构成不同的工作方式,如:
单片机最 小系统 存 储方式、 DMA 方式、硬件 高 速 计 算方式、波形发生数 据存 储 器等; 又由 于
ROM/RAM 座是与系统中的FPGA/CPLD 直接相接的,所以此座可根据需要插不同型号和容量的存
储器(如27C512 、27E512、27C256 、27C128 、27C64 、28C64 、28E64 、6264、62256 等)。
(4 )通用FPGA/CPLD 接插系统:这是GWDVP 板最具特点的结构,它由48脚双排座构成(如
附图1-1B所示)、它将GWDVP 系统构成了一个有机整体,其上可插含有不同型号,不同公司、不
同 逻 辑 容 量 和 不 同 封 装 FPGA/CPLD 的 目 标 板 , 如
ispLSI1032 、ispLSI1048 、ispLSI3256 、EPM7128S 、EPF10K10 、EPF10K20 、EP1K30 、EPF
6016、XCS10 、XC95108 等等,这样就不会出现逻辑资源不够用的尴尬局面了。FPGA/CPLD 接插
系统的物理结构、每一引脚的命名定义、其上的FPGA/CPLD 目标芯片的引脚锁定查表方法,以及
在系统下载方法等都与 GW48 系列EDA系统完全兼容,会用 GW48 系统即会使用GWDVP 。 对
GWDVP 上的FPGA/CPLD 下载,可通过GW48 系统上的在线下载口,用配置的10芯下载线进行在
系统下载,而不必拔下GWDVP 上的目标芯片。
其上的FPGA/CPLD 的时钟信号源由50MHz有源时钟源提供,它们确保了FPGA/CPLD 优秀的高
速性能的有效发挥。
(5 )A/D 和D/A 转换系统:A/D 和D/A 转换系统必须由用户外接,连接端口可以是单片机的
P1 和P3 口(参见图2 ),也可以直接与板上的FPGA/CPLD 相接,以便提高工作速度,外界端
口如图3-1 所示:PIO16 至PIO25 、CLOCK5 、CLOCK6 、CLOCK7 等。
适配板芯片上器件引脚查阅方法:例如,芯片是EPM7128S ,图3-1 所示板上接插座上的PIO17
对应的芯片引脚是27脚,CLOCK6 对应的是76脚(请查阅表2 )
(6 )串行EEPROM :由93C46 构成,与单片机直接相接,这是智能化仪表常用的电路结构。
(7 )键控系统:GWDVP 板上已安排了8 个键,可按逐次查询方式编程控制(连接方式如
图3-2 ,键盘子程序等诸多子程序可参见单片机文件GWDVP.ASM );如果要增加键,可在所给的
8 芯插座上插16键的插口,可按阵列扫描方式编程控制;
(8 )混合电压源:含3.3V 和2.5V 电压,可为混合电压的FPGA 使用。3.3V 和2.5V 电压
在接插座上的位置如附图1-1B所示。
三 、 GWDVP 板 使 用 注 意
(1 )、兼容性:开发中,GWDVP 板须与GW48 系统或GWDD6-C 编程器配合使用,这表现在:
1 、须利用GW48 提供的10芯在系统下载接口和通信线进行下载;
2 、 GWDVP 板 与 GW48 系 统 上 的 FPGA/CPLD 目 标 芯 片 板 相 互 间 完 全 兼 容 , 因 此 可 以 使 用
GW48 系统所有可配的目标芯片,所以在利用GWDVP 板开发时,就没有了逻辑资源不够用的担心,
也没有对使用FPGA/CPLD 型号和生产厂家的限制,这正是GWDVP 板的最大特点!

26
3 、GWDVP 板的FPGA/CPLD 目标芯片板上的引脚
定义和使用情况与GW48-CK/ES 相同,都必须参考本教

µçÔ´

¼ü1

¼ü5
GND
+5V

RST
程 第 一 章 第 3 节 的 列 表 , 显 然 , 会 用 GW48 就 会 用
GWDVP 板。

¼ü2

¼ü6
LED8
LED1
LED2
LED3
LED4
LED5
LED6
LED7
ÊýÂë8

¼ü3

¼ü7
¼ü4

¼ü8
ÊýÂë1

P1.0
P1.1
P1.2
P1.3
P1.4
P1.5
P1.6
P1.7
P3.0
P3.1
P3.2
P3.3
P3.4
P3.5
P3.6
P3.7
ÊýÂë2
VCC
GND
PIO25

ÊýÂë3
PIO24
PIO23
PIO22
PIO21 PR3
PIO20
PIO19

ÊýÂë4
PIO18
PIO17
PIO16

PIO27
ÏòÉϲå

ÊýÂë5
PIO26
PIO29
PIO28
PIO31 PR1

EPM7128S-PC84
PIO30
PIO33

ÊýÂë6
PIO32
GND

GND
CLOCK7
CK3
ÊýÂë7
CLOCK6
CLOCK5
ALE

CLOCK2
50MHz CK1
¿Õλ CLOCK4
CLOCK8
SC P3.5
CLOCK9

µç×ÓÉè¼Æ¾ºÈü¿ª·¢°å
图 3-1、GWDVP 板正面示意图
注意:如果要使GWDVP 板上的单片机与RAM/ROM 连成总线工作方式,需要将板上的 FPGA/CP
LD 某一引脚(如CLOCK5 、PIO16 等)与单片机的“ALE” 连接,然后在GWDVPB 的适配板中
的CPLD/FPGA 中设计一个类似于74LS373 的地址锁存器及数据双向端口即可。
(2 )、单片机子程序使用方法:
配 附 的 光 盘 中 的 “ GWDVPB” 目 录 中 有 与 GWDVP 系 统 相 配 的 单 片 机 子 程 序 文 件
(GWDVPA.ASM ),此文件中有加、1 、减法、2 、乘法、3 、除法、4 、开方计算、5 、数码
显示、6 、键盘控制、7 、BCD码到2 进制码转换、8 、2 进制码到BCD码转换等子程序以及设计
示例等。注意,程序中单片机的堆栈设在“60H” ,方法可参考“GWDVPA.ASM” 。使用方法如
下:
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 个 字 节的 被除 数分别 放在

27
( 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 )、电源:主系统电源为+5V 。为提高性能,GWDVP 板外接电路系统,必须单独给电。
(4 )、显示:显示系统由9 个74LS164 构成串行静态显示电路,前8 个负责8 个数码管的显示;
最 高 位 的 74LS164 负 责 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 P3.0
P3.1
个键自动
失效。
´®ÐÐÏÔʾ
AT89C51/52 8·¢¹â¹Ü

P0

FPGA/CPLD
16
P2 GWA7128
µ¥Æ¬»ú GW-DSP/E2
SC RAM/ROM
8
CLOCK9
P3.5
CLOCK9
CLOCK4

CLOCK2

P32 CK1
CS
P11
P12
DO 93C46 50MHz
P13
DI ¾§Õñ
SCLK

RST ¼ü ¼ü ¼ü ¼ü ¼ü ¼ü ¼ü ¼ü

P1.0 P1.1 P1.2 P1.3 P1.4 P1.5 P1.6 P1.7

GWDVP-Bµç×ÓÉè¼Æ¿ª·¢°åµç·¿òͼ
图 3-2
( 7 ) 、 可 插 EEPROM 93C46 : 这 是 串 行 存 储 器 , 片 选 脚 由 单 片 机 的 P3.2 担 任 , 如 果 不 用

28
93C46 ,此端口可作他用,它的读写子程序可参阅程序GWDVPA.ASM 。
(8 )、 跳线 座: 如图 2 所 示, 两组跳线 座“ SC” 和“ CK1” , 前者 选择 单 片机的 P3.5 接
FPGA/CPLD 的clock8 或clock9 端;后者选择50MHz时钟信号接FPGA/CPLD 的clock2 或clock4 端。
(9 )、显示电源选择跳线座:3 针“MV17” 用语8 个数码显示的电源来自外部电源还是内部
主系统电源。若接有A/D 和D/A ,对精度要求比较高的电路,建议用单独的电源为数码显示提供电
源,这时可以跳线短路“OUTS” ,然后外部电源接在旁边的2 芯座上。但如果短路“INP” ,则
显示使用主系统电源。
四 、 GWDVP-B 板 示 例 : 等 精 度 频 率 计 演 示 操 作 :
1 、光盘中目录“GWDVPB” 的GWDVPB.BIN 文件可编程进单片机AT89C51/52中,将单片机
插上后,再将光盘中的GWDVPB.POF 文件用MAX+PLUSII 下载到GWDVPB 板上的EPM7128S 芯
片中去(用GW48 系统或GWDD6-C ,也可下载进入EPF10K10/20 )。

RP1
SPK A0 10 11 D0 PIO27 P10 VCC
PIO48 A1 9 12 D1 PIO26 P11 P00 PIO0
PIO49 A2 8 13 D2 PIO29 P12 P01 PIO1
PIO46 A3 7 15 D3 PIO28 P13 P02 PIO2
PIO47 A4 6 16 D4 PIO31 P14 P03 PIO3
PIO44 A5 5 17 D5 PIO30 P15 P04 PIO4 GND
PIO45 A6 4 18 D6 PIO33 P16 P05 PIO5 CLOCK7
PIO42 A7 3 19 D7 PIO32 P17 P06 PIO6 CLOCK6
PIO43 A8 25 RST P07 PIO7 CLOCK5
PIO40 A9 24 P30 EA VCC
ALE
PIO41 A10 21 P31 ALE
PIO38 A11 23 20 CE P32 PSEN
PIO39 A12 2 22 OE PIO35 P33 P27 PIO8
PIO36 A13 26 P34 P26 PIO9
PIO37 A14 27 P35 P25 PIO10
PIO34 A15 1 P36 P24 PIO11
P37 P23 PIO12
RAM/ROM X2
X1
P22
P21
PIO13
PIO14
27C512/256/64 GND P20 PIO15

6264/62256
28C64 AT89C51/52
µ¥Æ¬»ú¼°RAM/ROMÓëÊÊÅä°åÉÏ
FPGA/CPLDÒý½ÅÁ¬½Óͼ
图 3-3
2 、加上电源后,(按复位键)可以看到数码1 显示“P” 。 注意电源极性!
3 、自测:用所配的接插线一端接在GWDVPB 板标出的“PIO16” 上,此引脚为待测频率输入
端口。将另一端接“PIO25” 端(此为某一频率输出端)
4 、按键1 ,应该显示“381.4697” ,表明测得频率为381.4697Hz ( 此频率为50MHz的2 的16次
方分频值) ;
键1 是测频键;
5、按键2 ,应该显示“A 50.0”,表明测得占空比为50.0 % ;
键2 是测占空比键;
6 、按键3 ,应该显示“1310.72” ,表明测得脉宽为1310.72 微秒 ;
键3 是测脉宽键;
(精度为7 位有效值! ):
注意: 当出现两个小数点时,小数点标明的数是MHz单位
7 、按键7 ,应该显示“Good 7” ,表明板上的93C46 工作正常,芯片没有问题,否则,
将显示“bad” 字样。此键是93C46 测试键(如果插有93C46 )。
注意:
1 、GWDVPB 板上的PR1 接插座上标出的各端口的PIO 值,应该以图3-1 所示的数为准!
如“PR1” 座上“GND” 旁边的信号应该是“PIO25” 。
2 、如果要对外测频(TTL 电平),应该接上地线,与外部待测系统共地。

29
第 四 章 FPGA/CPLD 结 构 (有关内容请参阅《EDA 技术实用教程》)

第 五 章 原 理 图 输 入 设 计 方 法 (参见《 EDA技术实用教
程》)

第 6章 VHDL 设 计 初 步

第一节 2 选1 多路选择器的VHDL 描述
例6-1 是2 选1 多
路选择器的 VHDL 完整
描述,即可以直接综合
出实现相应功能的逻辑
电路及其功能器件。图 图 6-1 mux21a 实体 图 6-2 mux21a 结构体
6-1 是此描述对应的逻
辑图或者器件图,图中,
a 和b 分别是两个数据输入端的端口名, s 为通道选择控制 【例6-1】
信号输入端的端口名,y 为输出端的端口名。“mux21a” ENTITY mux21a IS
PORT ( a, b : IN BIT;
是此器件的名称,这类似于“74LS138”、“CD4013” 等 s : IN BIT;
器件的名称。电路图图6-2 是例6-1 综合后获得的电路,因 y : OUT BIT );
END ENTITY mux21a;
而可以认为是多路选择器“mux21a” 内部电路结构。
由例6-1 可见,此电路的VHDL 描述由两大部分组成: ARCHITECTURE one OF mux21a IS
BEGIN
1 、 由 关 键 词 ENTITY 引 导 , 以 END ENTITY y <= a WHEN s='0' ELSE
mux21a 结尾的语句部分,称为实体。实体描述电路器件的 b ;
END ARCHITECTURE one ;
外部情况及各信号端口的基本性质。图6-1 可以认为是实体
的图形表达。
【例 6-2】 【例 6-4】
ENTITY mux21a IS ENTITY mux21a IS
PORT ( a, b : IN BIT; PORT ( a, b : IN BIT;
s : IN BIT; s : IN BIT;
y : OUT BIT ); y : OUT BIT );
END ENTITY mux21a; END ENTITY mux21a;

ARCHITECTURE one OF mux21a IS ARCHITECTURE one OF mux21a IS


SIGNAL d,e : BIT; BEGIN
BEGIN IF s = '0' THEN
d <= a AND (NOT S) ; y <= a ; ELSE
e <= b AND s ; y <= b ;
y <= d OR e ; END IF;
END ARCHITECTURE one ; END PROCESS;
【例 6-3】 END ARCHITECTURE one ;
. . .
ARCHITECTURE one OF mux21a IS
BEGIN
y<=(a AND(NOT s)) OR (b AND s);
END ARCHITECTURE one ;

30
2 、由关键词 ARCHITECTURE 引导,以 END ARCHITECTURE one 结尾的语句部分,称为结构体。结
构体描述电路器件的内部逻辑功能或电路结构。图6-2 是此结构体的原理图表达。
在VHDL 结构体中用于描述逻辑功能和电路结构的语句分为顺序语句和并行语句两部分,顺序
语句的执行方式十分类似于普通软件语言的程序执行方式,都是按照语句的前后排列方式顺序执行
的。而在结构体中的并行语句,无论有多少行,都是同时执行的,与语句的前后次序无关。
例6-1 中的逻辑描述是用一句WHEN_ELSE 结构的并行语句表达的。它的含义是,当满足条件
s='0' ,即s 为低电平时a 输入端的信号传送至y ,否则,即s 为高电平时,b 输入端的信号
传送至y 。
也可以用其他的语句形式来描述以上相同的逻辑行为。例6-2 和例6-3 中的功能描述语句都是
并行语句,是用布尔方程的表达式来描述的。其中的“AND” 、“OR” 、“NOT” 分别是逻辑与、
或、非的意思。 例6-4 则给出了用顺序语句IF_THEN_ELSE 表达的功能描述。
以上4 例用不同的语句表达方式描述了相同的逻辑功能,都能被综合成图6-2 的电路结构。
其电路 功能可以 从 图 6-3 的时序波形中 看出 ,分别 向 a 和 b 端 输入 两个 不同信号的频 率 fa 和
fb (fa > fb ),当s 为高电平时,y 输出fb ,而当s 为低电平时,y 输出fa 。显然,图
6-3 的波型证实了VHDL 逻辑设计的正确性。
需 要 指 出 的 是 , 以 上 各 例 的 实 体 和 结 构 体 分 别 是 以 “ END ENTITY xxx” 和 “ END
ARCHITECTURE xx ” 语句结尾的,这是符合VHDL 的IEEE STD 1076_1993 版的语法要求的。
若根据VHDL’87 版本,IEEE STD 1076_1987 的语法要求,这两条结尾语句只需写成“END
;”和“END xx” 。但考虑到目前绝大多数常用的EDA 工具中的VHDL 综合器都兼容两种VHDL
版本的语法规则,且许多最新的VHDL 方面的资料,仍然使用VHDL’87 版本语言规则。因此,出
于实用的目的,对于以后出现的示例,不再特意指出VHDL 两种版本的语法差异处。但对于不同的
EDA 工具,仍需根据设计程序不同的VHDL 版本表述,在综合前作相应的设置。
6.1.1 VHDL 语 言 现 象 说 明
这里将对例6-1/2/3/4 中出现的语言现象作出说明和归纳:
1 、实体表达

图 6-3 mux21a 功能时序波形

VHDL 完整的,可综合的程序结构,必须完整地表达出一片专用集成电路ASIC 器件的端口结构和


电路功能用,无论是一片74LS138 还是一片CPU ,都必须包含实体和结构体两个最基本的语言结
构,这里将含有完整程序结构(包含实体和结构体)的VHDL 表述称为设计实体。如前所述,实体
描述的是电路器件的端口构成和信号属性,它的最简表式如下:
或: 【例 6-5】
ENTITY
【例 6-6】e_name IS
上 PORT ( p_name : port_m 下
data_type;
ENTITY e_name IS
两 . . .
PORT ( p_name :
port_m data_type; 种
p_namei :
port_mi data_type );
表 . . .
END ENTITY e_name; 式
p_namei :
port_mi data_type );
的 END e_name; 唯
一 区
别是IEEE93/87 标准不同。前者为IEEE93 标准、而后者是IEEE87 ,一般VHDL 综合器都兼容
两种不同标准。上式中ENTITY 、IS 、PORT 和END ENTITY 都是描述实体的关键词,在实体描
述中必须包含这些关键词,编辑中,关键词不分大写和小写。
2 、实体名

31
例6-5/6-6 中的e_name 是实体名,具体取名由设计者自定。由于实体名实际上表达的是
该设计电路的器件名,所以最好根据相应电路的功能来确定,如4 位二进制计数器,实体名可取为
counter4b ;8 位二进制加法器,实体名可取为adder8b 等等。需要特别注意的是,一般不应
用 数 字 或 中 文 定 义 实 体 名 , 也 不 应 用 与 EDA 工 具 库 中 已 定 义 好 的 元 件 名 作 为 实 体 名 , 如
or2 、latch 等,也不能用数字带头的实体名,如74LSX 。
3 、PORT 语句和端口信号名
描述电路的端口及其端口信号,必须用端口语句PORT ()引导,并在语句结尾处加分号" ;" 。
例6-5/6-6 中的p_name 是端口信号名,也由设计者自己确定,如例7-1 中的端口信号名分别是
a 、b 、s 和y 。
4 、端口模式
例 6-5/6-6 中 的 port_m 表 达 端 口 模 式 , 可 综 合 的 端 口 模 式 有 4 种 , 它 们 分 别 是
“IN” 、“OUT” 、“INOUT” 和“BUFFER” ,用于定义端口上数据的流动方向和方式:
IN :IN 定义的通道为单向只读模式,规定数据只能通过此端口被读入实体中。
OUT :OUT 定义的通道为单向输出模式,规定数据只能通过此端口从实体向外流出,或者说
可以将实体中的数据向此端口赋值。
INOUT :INOUT 定义的通道确定为输入输出双向端口,即从端口的内部看,可以对此端口
进行赋值,也可以通过此端口读入外部的数据信息;而从端口的外部看,信号既可以从此端口流出,
也可以向此端口输入信号,如RAM 的数据端口,单片机的I/O 口。在实际电路描述中,INOUT 模式
的正确使用还应该考虑其它因素,详细情况将在后文介绍。
BUFFER :BUFFER 的功能与INOUT 类似,区别在于当需要输入数据时,只允许内部回读输
出的信号, 即允许反馈。如计数器的设计,可将计数器输出的计数信号回读,以作下一计数值的初
值。与INOUT 模式相比,BUFFER 回读(输入)的信号不是由外部输入的,而是由内部产生,向外
输出的信号。BUFFER 的使用示例将在下章介绍。
在例6-1 中,a 、b 、s 的端口模式都定义为IN ,y 的端口模式定义为OUT ;
5 、数据类型BIT
例6-5/6-6 中的data_type 是数据类型名。例6-1 中,端口信号a 、b 、s 和y 的数据
类型都定义为BIT 。 VHDL 作为一种强类型语言,任何一种数据对象(信号、变量、常数)必须
严格限定其取值范围,即对其传输或存储的数据类型作明确的界定。这对于大规模电路描述的排错
是十分有益的。在VHDL 中,预先定义好的数据类型有多种,如整数数据类型INTEGER 、布尔数
据类型BOOLEAN 、标准逻辑位数据类型STD_LOGIC 和位数据类型BIT 等。
BIT 数据类型的信号规定的取值范围是逻辑位'1' 和'0' 。在VHDL 中,逻辑位0 和1 的表
达必须加单引号' ' ,否则VHDL 综合器将0 和1 解释为整数数据类型INTEGER 。
BIT 数据类型可以参与逻辑运算或算术运算,其结果仍是位的数据类型。VHDL 综合器用一
个二进制位表示BIT 。将例7-1 中的端口信号a 、b 、s 和y 的数据类型都定义为 BIT ,即表示
a 、b 、s 和y 的取值范围,或者说是数据变化范围被限定在逻辑位'1' 和'0' 之间。
BIT 数 据 类 型 的 定 义 或 者 说 是 解 释 包 含 在 VHDL 标 准 程 序 包 STANDARD 中 , 而 程 序 包
STANDARD 包含于VHDL 标准库STD 中。
6 、结构体表达
结构体的一般表达如以下例6-7/6-8 所示:
【例 6-7】 或: 【例 6-8】
ARCHITECTURE arch_name OF e_name ARCHITECTURE arch_name OF e_name
IS 和例 IS
(说明语句) 6- (说明语句)
BEGIN BEGIN
(功能描述语句) (功能描述语句)
END ARCHITECTURE arch_name ; END arch_name ;
5/6-6 一样,上下两种表式的唯一区别是IEEE93/87 标准不同。前者为IEEE93 标准、而后者是

32
IEEE87 。上式中ARCHITECTURE 、OF 、IS 、BEGIN 和END ARCHITECTURE 都是描述结构体
的关键词,在描述中必须包含,arch_name 是结构体名。
(说明语句)包括在结构体中需要说明和定义的数据对象、数据类型、元件调用声明等等。
(说明语句)并非是必须的,(功能描述语句)则不同,结构体中必须给出相应的电路功能描述语
句,可以是并行语句,顺序语句或它们的混合。
一般地,一个可综合的,完整的VHDL 程序有比较固定的结构。设计实体中,一般首先出现
的是各类库及其程序包的使用声明,包括未以显式表达的工作库WORK 库的使用声明,然后是实体
描述,然后是结构体描述,而在结构体中可以含有不同的逻辑表达语句结构。这里对一个相对完整
的VHDL 程序设计构建称为设计实体。
7 、信号传输(赋值)符号和数据比较符号
例6-1 中的表达式y<=a 表示输入端口a 的数据向输出端口y 传输;但也可以解释为信号a
向信号y 赋值。在VHDL 仿真中赋值操作y<=a 并非立即发生的,而是要经历一个模拟器的最小分
辨时间  后,才将 a 的值赋予 y 。在此不妨将  看成是实际电路存在的固有延时量 。
VHDL 要求赋值符“<=” 两边的信号的数据类型必须一致。
例6-1 中,条件判断语句WHEN_ELSE 通过测定表式 s='0' 的比较结果,以确定由哪一端口
向y 赋值。条件语句WHEN_ELSE 的判定依据是表式s='0' 输出的结果。表式中的等号“=” 没有
赋值的含义,只是一种数据比较符号。其表式输出结果的数据类型是布尔数据类型BOOLEAN ,它
的取值分别是:
true (真) 和 false (伪)
即当s 为高电平时,表式“s='0'” 输出“false” ; 当s 为低电平时,表式“s ='0'” 输出
“true” 。在VHDL 综合器或仿真器中分别用'1' 和'0' 表达true 和false 。
布尔数据不是数值,只能用于逻辑操作或条件判断。
用于条件语句的判断表式可以是一个值,也可以是更复杂的逻辑或运算表达式,如:
IF a THEN .. -- 注意,a 的数据类型必须是
boolean
IF (s1='0' )AND (s2='1' )OR(c<b+1) THEN ..
8 、逻辑操作符AND 、OR 、NOT
例6-2 中出现的文字AND 、OR 和NOT 是逻辑操作符号。VHDL 共有七种基本逻辑操作符,
它们是AND( 与) 、OR( 或) 、NAND( 与非) 、NOR( 或非) 、XOR( 异或) 、XNOR (同或)和
NOT( 取反) 。信号在这些操作符的作用下,可构成组合电路。逻辑操作符所要求的操作数( 操作
对象) 的数据类型有三种,即BIT 、BOOLEAN 和STD_LOGIC 。
与其它硬件描述语言用符号表达逻辑操作符不同,VHDL 中直接用对应的英语文字表达逻辑
操作符号,这更明确显示了VHDL 作为硬件行为描述语言的特征。
9 、IF_THEN 条件语句
例6-4 利用IF_THEN_ELSE 表达的VHDL 顺序语句的方式,描述了同一多路选择器的电路行
为。例6-4 结构体中的IF 语句的执行顺序类似于软件语言,首先判断如果 s 为低电平,则执行
y<=a 语句,否则(当s 为高电平),则执行语句y<=b 。
由此可见VHDL 的顺序语句同样能描述并行运行的组合电路。
IF 语句必须以语句“END IF ;”结束。
10 、WHEN_ELSE 条件信号赋值语句
例6-1 中出现的是条件信号赋值语句,这是一种并行赋值语句,其表达方式如下:
赋值目标 <= 表达式 WHEN 赋值条件 ELSE
表达式 WHEN 赋值条件 ELSE
...

33
表达式 ;
在结构体中的条件信号赋值语句的功能与在进程中的IF 语句相同,在执行条件信号语句时,
每一“赋值条件”是按书写的先后关系逐项测定的,一旦发现(赋值条件= TRUE ),立即将“表达
式”的值赋给“赋值目标”信号。另外应注意,由于条件测试的顺序性,条件信号赋值语句中的第
一子句具有最高赋值优先级,第二句其次,如此类推。例如在以下程序中,如果当p1 和p2 同时
为'1' 时,z 获得的赋值是a 而不可能是b 。
z <= a WHEN p1 = '1' ELSE
b WHEN p2 = '1' ELSE
c ;
11 、PROCESS 进程语句和顺序语句
从 例 6-4 可 见 , 顺 序 语 句 “ IF_THEN_ELSE_END IF;” 是 放 在 由 “ PROCESS.. END
PROCESS”引导的语句中的,由PROCESS 引导的语句称为进程语句。在VHDL 中,所有合法的顺
序描述的语句都必须放在进程语句中(并非所有语句都能放在进程语句中)。
PROCESS 旁的(a ,b ,s )称为进程的敏感信号表,通常要求将进程中所有的输入信号都
放在敏感信号表中。例如,例6-4 中的输入信号是a ,b 和s ,所以将它们全部列入敏感信号表中。
由于PROCESS 语句的执行依赖于敏感信号的变化,当某一敏感信号(如a )从原来的'1' 跳变
到'0' ,或者从原来的'0' 跳变到'1' 时,就将启动此进程语句,而在执行一遍整个进程的顺序语
句后,便进入等待状态,直到下一次敏感信号表中某一信号的跳变才再次进入“启动- 运行”状态。
在一个结构体中可以包含任意个进程语句,所有的进程语句都是并行语句,而由任一进程
PROCESS 引导的语句结构属于顺序语句。
12 、文件取名和存盘
在文件存盘前,任一VHDL 设计程序(代码)都必须给予一正确的文件名。一般地,文件名
可以由设计者任意给定,但具体取名最好与文件实体名相同;文件后缀扩展名必须是“.VHD” ,
如 ADDER_F.VHD 。但考虑到某些EDA 软件的限制和VHDL 程序的特点,即在元件(例化语句中
的被调用文件)调用中,其元件名与文件名是等同的,因此建议,程序的存盘的文件名应该与该程
序的实体名一致,如例6-1 的文件名应该是:
mux21a.vhd 文件名不分大小写

图 6-4 D 触发器
第 二 节 寄 存 器 描 述 及 其 VHDL语 言 现 象
与 其 它 硬 件 描 述 语 言 相 比 , 在 时 序 电 路 的 描 述 上 , VHDL 具 有 许 多 独 特 之 处 , 最 明 显 的 是
VHDL 主要通过对时序器件功能和逻辑行为的描述,而非结构上的描述即能由计算机综合出符合要
求的时序电路,从而充分体现了VHDL 电路系统行为描述的
【例6-9】
强大功能。 LIBRARY IEEE ;
6.2.1 D 触发器的VHDL 描述 USE IEEE.STD_LOGIC_1164.ALL ;

最简单并最具代表性的时序电路是 D 触发器,它是现 ENTITY DFF1 IS


PORT (CLK : IN STD_LOGIC ;
代可编程ASIC 设计中最基本的时序元件和底层元件。D 触 D : IN STD_LOGIC ;
发器的描述包含了VHDL 对时序电路的最基本和典型的表达 Q : OUT
STD_LOGIC );
方式,同时也包含了VHDL 中许多最具特色的语言现象。例
END ;
6-9 是对D 触发器元件图 6-4 的VHDL 描述。与例 6-4 相比,
从VHDL 的语言现象上看,例6-9 的描述多了4 个部分: ARCHITECTURE bhv OF DFF1 IS
BEGIN
1 、由LIBRARY 引导的库的说明部分; PROCESS (CLK)
BEGIN
34 IF CLK'EVENT AND CLK =
'1'
THEN Q <= D ;
END IF;
END PROCESS ;
END bhv;
2 、使用了另一种数据类型 STD_LOGIC ;
3 、定义了一个内部节点信号 SIGNAL;
4 、使用了一种新的条件判断表式。
从除此之外,虽然例6-4 描述的是组合电路,而例6-9 描述的是时序电路,如果不详细分析
其中的表述含义,二例在语句结构和语言应用上没有明显的差异,也不存在如其它硬件描述语言
(如ABEL 、AHDL )那样用于表示时序和组合逻辑的特征语句,更没有与特定的软件或硬件相关
的特征属性语句。这充分表明了VHDL 电路描述与设计平台和硬件实现对象无关性的优秀特点。
6.2.2 D 触发器VHDL 描述的语言现象说明
以下对例6-9 中出现的新的语句语言现象作出说明:
1 、标准逻辑位数据类型STD_LOGIC
从 例 6-9 可 见 , D 触 发 器 的 3 个 信 号 端 口 CLK 、 D 和 Q 的 数 据 类 型 都 被 定 义 为
STD_LOGIC 。就数字系统设计来说,类型STD_LOGIC 比BIT 包含的内容丰富和完整的多。试比
较STD_LOGIC 和BIT 两种数据类型的程序包定义表式(其中TYPE 是数据类型定义语句):
BIT 数据类型定义:TYPE BIT IS ('0' ,'1' );
STD_LOGIC 数据类型定义:TYPE STD_LOGIC IS ('U' ,'X' ,'0' ,'1' ,'Z' ,
'W' ,'L' ,'H' ,'-') ;
以 上 定 义 的 9 种 数 据 的 含 义 是 : 'U' : 未 初 始 化 的 ; 'X' : 强 未 知 的 ; '0' : 强 逻 辑
0 ; '1' : 强 逻 辑 1 ; 'Z' : 高 阻 态 ; 'W' : 弱 未 知 的 ; 'L' : 弱 逻 辑 0 ; 'H' : 弱 逻 辑
1 ;'-' :忽略 。它 们较完 整地概 括了 数 字 系统中 所 有可能的数 据表 现形式。 所 以 例 6-9 中的
CLK 、D 和Q 的比例6-1 中的a 、b 、s 具有更宽的取值范围,从而实际电路有更好的适应性。
在仿真和综合中,将信号或其它数据对象定义为STD_LOGIC 数据类型是非常重要的,它可
以使设计者精确地模拟一些未知的和具有高阻态的线路情况。对于综合器,高阻态'Z' 和'-' 忽略
态(有的综合器对'X' )可用于三态的描述。但就目前的综合器而言,STD_LOGIC 型数据能够在
数字器件中实现的只有其中的四种值,即'X'( 或' - ')、'0' 、'1' 和'Z' 。
2 、设计库和标准程序包
如上所述,定义数据类型BIT 的函数包含于标准库STD 的STANDARD 标准程序包中。一般地,为了
使用BIT 数据类型,应该在如例6-1 的程序上面增加如下两句说明语句:
LIBRARY STD ;
USE.STD.STANDARD.ALL ;
第一句中的LIBRARY 是关键词,LIBRARY STD 表示打开STD 库;第二句的USE 和ALL 是关
键词,USE.STD.STANDARD.ALL 表示允许使用STD 库中STANDARD 程序包中的所有内容,如类型
定 义 、 函 数 、 过 程 、 常 量 等 。 另 一 方 面 , 要 求 VHDL 设 计 文 件 存 盘 在 某 一 文 件 夹 中 , 如 D:\
MYFILE 中,并被指定为工程PROJECT 的文件所在的目录,VHDL 工具将此路径指定的文件夹默
认为工作库(WORK LIBRARY ),在VHDL 程序前面还应该增加“LIBRARY WORK ;”语句,
VHDL 工 具 才 能 调 用 相 关 的 元 件 和 程 序 包 。 但 是 , 由 于 VHDL 标 准 中 规 定 标 准 库 STD 和 工 作 库
WORK 都是默认打开的,因此应该象例6-1 那样,不必将上述库和程序包的使用语句以显式表达在
VHDL 程序中。除非如例6-9 那样,需要使用一些特殊的程序包。
使用库和程序包的一般定义表式是:
LIBRARY < 设计库名> ;
USE.< 设计库名>.< 程序包名>.ALL ;
STD_LOGIC 的类型定义在被称为STD_LOGIC_1164 的程序包中,此包由IEEE 定义,而且
此程序包所在的程序库的库名也称IEEE 。由于IEEE 库不属于VHDL 标准库,所以在使用其库中
内容前,必须事先给予声明。例6-9 最上的两句语句: 【例 6-10】
LIBRARY IEEE ; ARCHITECTURE bhv OF DFF1 IS
BEGIN
PROCESS (CLK)
35 BEGIN
IF CLK'EVENT AND CLK = '1'
THEN Q <= D ;
END IF;
END PROCESS ;
END ;
USE IEEE.STD_LOGIC_1164.ALL ;
正是出于需要定义端口信号的数据类型为STD_LOGIC (当然也可以定义为BIT 类型或其它
数据类型,但一般应用中推荐定义STD_LOGIC 类型)。
3 、SIGNAL 信号定义和数据对象
例6-9 中的语句“ SIGNAL Q1 : STD_LOGIC;” 表示在描述的器件DFF1 内部定义标识符Q1
的数据对象为信号SIGNAL ,其数据类型为STD_LOGIC 。由于Q1 被定义为器件的内部接点信号,
数据的进出不象端口信号那样受限制,所以不必定义其端口模式(如IN 、OUT 等)。定义Q1 的
目的是为了在今后更大的电路设计中使用由此引入的时序电路的信号,这是一种常用的时序电路设
计的方式。但是单就例6-9 的一个D 触发器的描述,不作Q1 的定义,其结构体如例6-10 那样,
同样能综合出相同的结果。
语句“ SIGNAL Q1 : STD_LOGIC;” 中的SIGNAL 是定义某标识符为信号的关键词。在VHDL
中,数据对象(Data Objects) 类似于一种容器,它接受不同数据类型的赋值。数据对象有三类,
即信号(SIGNAL) 、变量(VARIABLE) 和常量(CONSTANT) ,关于数据对象的详细解释将在后文中
给出。VHDL 中,被定义的标识符必须确定为某类数据对象,同时还必须被定义为某种数据类型,
如例6-9 中的Q1 ,对它规定的数据对象是信号,数据类型是 STD_LOGIC (规定Q1 的取值范
围), 前者 规 定了 Q1 的行 为方式和 功能特 点 ,后 者限 定了 Q1 的 取值 范围 。根 据 VHDL 规定 ,
Q1 作为信号,它可以如同一根连线那样在整个结构体中传递信息,也可以根据程序的功能描述构
成一个时序元件;但Q1 传递或存储的数据的类型只能包含在 STD_LOGIC 的定义中。需要注意的是,
语句“ SIGNAL Q1 : STD_LOGIC;” 仅规定了Q1 的属性特征,而其功能定位,需要由结构体中的语
句描述具体确定。如果将Q1 比喻为一瓶葡萄酒,则其特定形状的酒瓶就是其数据对象,瓶中的葡
萄酒而非其它酒就是其数据类型,而这瓶酒的功能只能由拥有这酒的人确定,即结构体中的具体描
述。
4 、上升沿检测表式和信号属性函数EVENT
例6-9 中的条件语句的判断表式“CLK'EVENT AND CLK = '1'” 是用于检测时钟信号
CLK 的上升沿的,即如果检测到CLK 的上升沿,此表达式将输出“true” 。
关键词EVENT 是信号属性,VHDL 通过以下表式来测定该信号的跳变边沿:
< 信号名>'EVENT
短语“clock’EVENT” 就是对clock 标识符的信号在当前的一个极小的时间段  内发生
事件的情况进行检测。所谓发生事件,就是clock 的电平发生变化,从一种电平方式转变到另一种
电平方式。
如 果
clock 的
数据类型
定 义 为

图 6-5 例 6-11 的电路图

STD_LOGIC ,则在  时间段内,clock 从其数据类型允许的9 种值中的任何一个值向另一值


跳变,如由'0' 变成'1' 、由'1' 变成'0' 或由'Z' 变成'0' ,都认为发生了事件,于是此表式将
输出一个布尔值 TRUE ,否则为 FALSE 。
如果将以上短语“clock’EVENT” 改成语句“clock ’EVENT AND clock='1'” ,

36
【例6-11】 则一旦“clock’EVENT” 在  时间内测得clock 有
ENTITY COMP_BAD IS
一个跳变,而小时间段  之后又测得 clock 为高电
PORT( a1 : IN BIT;
b1 : IN BIT;
q1 : OUT BIT );
END ;
ARCHITECTURE one OF COMP_BAD IS
BEGIN
图 6-6 例 6-12 的电路图
PROCESS (a1,b1)
BEGIN
IF a1 > b1 THEN q1 <= '1' ; 平'1' ,从而满足此语句右侧的“clock='1' ” 的条件,
ELSIF a1 < b1 THEN q1 <= '0' ;
END IF; 而两者相与(AND )后返回TRUE ,由此便可以从当前的
END PROCESS ; “clock='1'” 推断在此前的  时间段内,clock
END ;
【例 6-12】 必为0 (假设clock 的数据类型为BIT )。因此,以上的
ENTITY COMP_GOOD IS 表达式可以用来对信号clock 的上升沿进行检测。
PORT(a1 : IN BIT;
b1 : IN BIT; 5 、不完整条件语句与时序电路
q1 : OUT BIT ); 现在来分析例6-9 中对D 触发器功能的描述:
END ;
ARCHITECTURE one OF COMP_GOOD 首先当时钟信号CLK 发生变化时,PROCESS 语句
IS 被 启 动 , IF 语 句 将 测 定 条 件 表 式 “ CLK'EVENT AND
BEGIN
PROCESS (a1,b1) CLK = '1'” 是 否 满 足 条 件 ( 即 CLK 的 上 升 沿 是 否 到
BEGIN 来),如果为“true” ,则执行语句 Q1<=D ,即将D
IF a1 > b1 THEN q1 <=1';
ELSE q1 <= '0' ; 的数据向内部信号 Q1 赋值,并结束 IF 语句,最后将
END IF; Q1 的值向端口信号Q 输出,即执行 Q<=Q1 。
END PROCESS ;
END ; 如果CLK 没有发生变化,或是非上升沿方式的变化,
IF 语句都不满足条件,即条件表式给出“false” ,于
是将跳过赋值表式Q1<=D 结束IF 语句的执行。由于在此IF 语句中没有利用ELSE 明确指出当
IF 语句不满足条件时作何操作。显然这是一种不完整的条件语句(即在条件语句中,没有将所有
可能发生的条件给出对应的处理方式),对于这种语言现象,VHDL 综合器将“理解”为当不满足
条件时,不能执行语句 Q1<=D ,即应保持Q1 的原值不变。这就意味着必须引进时序元件来保存
Q1 中的原值,直到满足IF 语句的判断条件后才能更新Q1 中的值。
利用这种不完整的条件语句的描述引进寄存器元件,从而构成时序电路的方式是VHDL 描述
时 序 电 路 最 重 要 的 途 径 。 通 常 , 完 整 的 条 件 语 句 只 能 构 成 组 合 逻 辑 电 路 , 如 例 6-4 中 ,
IF_THEN_ELSE 语句指明了s 为'1' 和'0' 全部可能的条件下的赋值操作,从而产生了多路选择器
组合电路模块。
然而必须注意的是,虽然在构成时序电路方面,不完整的条件语句具有独特的功能,但在利
用条件语句进行纯组合电路设计时,如果没有充分考虑电路中所有可能出现的问题,即没有列全所
有的条件,将导致不完整的条件语句的描述,从而产生设计者不希望的组合与时序电路的混合体。
在此,不妨比较例6-11 和例6-12 的综合结果。
可以认为例6-11的原意是要设计一个纯组合电路的比较器,但是由于在条件语句中漏掉了给出
当 a1=b1 时q1 作何操作的表述,结果导致了一个不完整的条件语句。VHDL 综合器将对例6-11
的条件表述解释为:当条件 a1=b1 时对q1 不作任何赋值操作,即在此情况下保持q1 的原值,这
意味着必须为q1 配置一个寄存器,以便保存它的原值。图6-5 的电路图即为例6-11 的综合结果。
不难发现综合器已为比较结果配置了一个寄存器。通常在仿真时,对这类电路的测试,很难发现在
电路中已被插入了不必要的时序元件,但却浪费了逻辑资源,降低了电路的工作速度,影响了电路
的可靠性。因此,设计者应该尽量避免此类电路的出现。
例6-12 是对例6-11 的改进,其中的“ELSE q1<='0' ” 语句即已包括了当a1 小于等于b1情况下,
q1的赋值要求,从而能产生图6-6 所示的简洁的组合电路。
第 三 节 VHDL文 本 输 入 设 计 方 法 初 步
虽然本节介绍的是基于MAX+plusII 的文本输入设计方法,但其基本设计流程是具有一般性,
37
因 而 , 设 计 的 基 本 方 法 也 完 全 适 合 于 其 它 EDA 工 具 软 件 。 作 为 实 验 准 备 , 本 节 将 介 绍 利 用
MAX+plusII 进行VHDL 文本输入设计的基本方法和流程。
6.3.1 编辑输入并存盘VHDL 原文件
首先应该建立好工作库目录,以便设计工程项目的存储。作为示例,在此设立目录为: E:\
muxfile ,作为工作库。以便将设计过程中的相关文件存储在此。任何一项设计都是一项工程
(Project ),都必须首先为此工程建立一个放置与此工程相关的所有文件的文件夹,此文件夹将
被EDA 软件默认为工作库(Work Library )。一般不同的设计项目最好放在不同的文件夹中,注
意,一个设计项目可以包含多个设计文件,如频率计。

图 6-12 进 入 Max+plusII , 建 立 一 个 新 的 设 计 文 件

可利用WINDOWS 资源管理器,新建一个文件夹。假设本项设计的文件夹取名为muxfile ,在
E 盘中,路径为:E:\ muxfile 注意,文件夹不能用中文。接下去是打开MAX+plusII , 选择
菜 单 “ File”“New…” , 出 现 如 图 6-12 所 示 的 对 话 框 , 在 框 中 选 中 “ Text Editor
file” ,按“OK” 按钮,即选中了文本编辑方式。在出现的“ Untitled - Text Editor”
文本编辑窗( 图6-13) 中键入图6-13 所示的VHDL 程序(2 选1 多路选择器),输入完毕后,选
择 菜 单 “ FileSave” , 即 出 现 如 图 6-13 所 示 的 “ Save As” 对 话 框 。 首 先 在
“Directories”目录框中选择自己已建立好的存放本文件的目录E:\MUXFILE (用鼠标双击此目
录,使其打开),然后在“File Name” 框中键入文件名MUX21A.VHD ,按“OK” 按钮,即把输
入的文件放在目录E:\MUXFILE 中了。
注意, VHDL 程序文本存盘的文件名必须与文件的实体名一致,如MUX21A.VHD 。
另应注意,文件的后缀将决定使用的语言形式,在MAX+plusII 中,后缀为.VHD 表示VHDL
文件;后缀为.TDF 表示AHDL 文件 ;后缀为.V 表示Verilog 文件。如果后缀正确,存盘后
对应该语言的文件中的主要关键词都会改变颜色。
6.3.2 将当前设计设定为工程
为 了 使 Max+plusII 能 对 输 入 的 设 计 项 目 按 设 计 者 的 要 求 进 行 各 项 处 理 , 在 编 译 / 综 合
MUX21A.VHD 之前,需要设置此文件为顶层文件(最上层文件),或称工程文件:Project ,或
者说将此项设计设置成工程。
选择菜单“File”Project“Set Project to Current File” ,当前的设计工程即
被指定为MUX21A 。也可以通过选“ File”“Project”“Name” ,在跳出的“ Project
Name” 窗中指定E:\MUXFILE 下的MUX21A.VHD 为当前的工程。设定后可以看见MAX+plusII 主
窗左上方(图6-14 )的工程项目路径指向为:“e:\muxfile\mux21a” 。这个路径指向很重要!
如果设计项目由多个设计文件组成,则应该将它们的主文件,即顶层文件设置成Project 。如果
要对其中某一底层文件进行单独编译、仿真和测试,也必须首先将其设置成Projcet 。

38
图 6-13 在 文 本 编 辑 窗 中 输 入 VHDL文 件 并 存 盘

图 6-14 设定当前文件为工程
为了获得与目标器件对应的,精确的时序仿真文件,在对文件编译前必须选定最后实现本设计项目
的目标器件,在Max+plusII 环境中主要选Altera 公司的FPGA 或CPLD 。在设定工程文件后,
应该选择用于编程的目标芯片:选择菜单“Assign”“Device…” ,在弹出的对话框中的
“Device Family” 下拉栏中,例如选择FLEX10K ,此窗口( 图 6-15) 的Device Family 是
器件序列栏,应该首先在此拦中选定目标器件对应的序列名,如EPM7128S 对应的是MAX7000S 系
列;ACEX1K 对应的是ACEX 系列等。为了选择EP1K30TC144-3 器件,应将此栏下方标有Show
only Fastest Speed Grades 的勾消去,以便显示出所有速度级别的器件。完成器件选择后,
按OK 键。

图 6-15 设定当前文件为工程
在设计中,设定某项VHDL 设计为工程应该注意以下3 方面的问题:
39
1 、如果设计项目由多个 VHDL 文件组成,如本章给出的全加器,应先对各低层次文件(元
件),如或门或半加器分别进行编辑、设置成工程、编译、综合、乃至仿真测试并存盘后以备后用。
2 、最后将定顶层文件(存在同一目录中)设置为工程,统一处理,这时顶层文件能根据例化
语句自动调用底层设计文件。
3 、在设定顶层文件为工程后,底层设计文件原来设定的元件型号和引脚锁定信息自动失效。
元件型号的选定和引脚锁定情况始终以工程文件(顶层文件)的设定为准。同样,仿真结果也是针
对工程文件的。所以在对最后的顶层文件处理时,仍然应该对它重新设定元件型号和引脚锁定(引
脚锁定只有在最后硬件测试时才是必须的)。如果需要对特定的底层文件(元件)进行仿真,只能
将某底层文件(元件)暂时设定为工程,进行功能测试或时序仿真。
6.3.3 选择VHDL 文本编译版本号和排错
选菜单“MAX+plus II”“Compiler” 菜单(图6-16 ),

图 6-16 设 定 VHDL编 译 版 本 号

图 6-17 设 定 VHDL编 译 版 本 号
出现编译窗图6-16 )后,需要根据自己输入的VHDL 文本格式选择VHDL 文本编译版本号。
选 择 如 图 6-17 所 示 界 面 上 方 的 “ Interfaces”“VHDL Netlist Reader
Settings” ,在弹出的窗口中选“ VHDL’1987” 或“VHDL’1993” 。这样,编译器将支持
87 或 93 版 本 的 VHDL 语 言 。 这 里 , 文 件 MUX21A.VHD 属 于 93 版 本 的 表 述 。 由 于 综 合 器 的
VHDL’1993 版本兼容VHDL’1987 版本的表述,所以如果设计文件含有 VHDL’1987 或混合表
述,都应该选择“VHDL’1993” 项。
在 按 “ START” 键 运 行 编 译 前 , 还 需 要 作 一 件 事 , 即 在 进 入 编 辑 窗 ( 图 6-16 ) , 选 择
Processing 项,选“Fitter Setting”,进入如图6-18 的窗口,消去最上的“ Use Quartus
Fitter…” 的勾。

40
图 6-18 消 去 “ Use Quartus Fitter…” 项
最后按“START” 键,运行编译器。
如图6-13所示,MUX21A.VHD 文件中的实体结束语句没有加分号“;”,在编译时出现了如图6-
19所示的出错信息指示。有时尽管只有1 、2 个小错,但却会出现大量的出错信息,确定错误所在
的最好办法是找到最上一排错误信息指示,用鼠标点成黑色,然后点击如图6-19所示窗口左下方的
“Locate” 错误定位钮,就能发现在出现文本编译窗中闪动的光标附近找到错误所在。纠正后再次
编译,直至排除所有错误。
注意闪动的光标指示错误所在只是相对的,有的错误比较复杂,很难用此定位。

图 6-19 确定设计文件中的错误
VHDL文本编辑中还可能出现许多其它错误,如:
1 、错将设计文件存入了根目录,并将其设定成工程,由于没有了工作库,报错信息如下:
Error :Can't open VHDL "WORK"
2 、错将设计文件的后缀写成.tdf 而非.vhd ,在设定工程后编译时,报错信息如下:
Error :Line1 ,File e:\muxfile\mux21a.tdf: TDF syntax error: ...
3 、未将设计文件名存为其实体名,如错写为muxa.vhd ,设定工程编译时,报错信息如下:
Error :Line1 ,...VHDL Design File "muxa.vhd" must contain ...
6.3.4 时序仿真
接下来应该测试设计项目的正确性,即逻辑仿真,具体步骤如下:
1 、建立波形文件。为此设计建立一个波形测试文件。根据图6-12 选择File 项及其New ,
再选择New 窗中的Waveform Editer.. 项,打开波形编辑窗。
2 、输入信号节点。在图6-20 所示的波形编辑窗的上方选择Node 项,在下拉菜单中
选择输入信号节点项Enter Nodes from SNF 。在弹出的窗口(图6-21 )中首先点击List 键,
这时左窗口将列出该项设计所以信号节点。由于设计者有时只需要观察其中部分信号的波形,因此
要利用中间的“=>” 键将需要观察的信号选到右栏中,然后点击OK 键即可将测试信号
s(I) 、b(I) 、a(I) 和y(O) 输入仿真波形编辑窗。。

41
图 6-20从 SNF 文 件 中 输 入 设 计 文 件 的 信 号 节 点

图 6-21 列出并选择需要观察的信号节点

图 6-22 在 Options 选 项 中 消 去 网 格 对 齐 Snap to Grid 的 选 择 ( 消 去 勾 )


3 、设置波形参量。图6-22 所示的波形编辑窗中已经调入了半加器的所有节点信号,在为编
辑窗的半加器输入信号a 和b 设定必要的测试电平之前,首先设定相关的仿真参数。如图6-22 所
示, 在Options 选项中消去网格对齐Snap to Grid 的选择(消去勾),以便能够任意设置输
入电平位置,或设置输入时钟信号的周期。
4 、如图6-23 ,6-24 所示,设定仿真时间宽度。选择File 项及其End time 选项,在
End time 选择窗中选择适当的仿真时间域,如可选80us (80 微秒),以便有足够长的观察时
间。
5 、加上输入信号。图6-25 显示了波形编辑窗各按钮的功能。

42
图 6-23 设定仿真时间宽度

图 6-24 设定仿真时间宽度

图 6-25 为输入信号设定必要的测试电平或数据

图 6-26 为输入信号设定必要的输入信号

图 6-27 mux21a 仿 真 波 形
在图6-26 仿真波形中,多路选择器mux21a 的输入端口a 和b 分别输入时钟周期为400ns
43
和1.2us 的时变信号。由图可见,当控制端s 为高电平时,y 的输出为b 的低频率信号,而当s 为
低电平时,y 的输出为a 的高频率信号。
注意,仿真波形文件的建立,一定要十分注意仿真时间区域的设定,以及时钟信号的周期设
置,否则即使设计正确也无法获得正确的仿真结果。如图6-26 所示,设定了比较合理的仿真时间
区域和信号频率。
即仿真时间区域不能太小,仿真频率不能太高,即信号周期不能小到与器件的延时相比拟。

图 6-28 仿 真 波 形 文 件 存 盘 图
6-29 运 行 仿 真 器

6 、波形文件存盘。选择File 项及其Save as 选项,按OK 键即可。存盘窗(图6-28 )


中的波形文件名是默认的(这里是mux21a.scf ),所以直接存盘即可。
7 、运行仿真器。选择MAX+plusII 项及其中的仿真器Simulator 选项,点击跳出的仿真器
窗口(图6-29 )中的Start 键。图6-27 是仿真运算完成后的时序波形。注意,刚进入图6-27
的窗口时,应该将最下方的滑标拖向最左侧,以便可观察到初始波形。
8 、观察分析波形。还可以进一步了解信号的延时情况。图6-27 右侧的竖线是测试参考线,
它与鼠标箭头间的时间差显示在窗口上方的Interval 小窗中。由图可见输入与输出波形间有一个
小的延时量。

图 6-30 打 开 延 时 时 序 分 析 窗
6.3.5 硬件测试
为在实验系统上验证设计的正确性,完成硬件测试。如果目标器件是EP1K30 ,建议选择实
验电路模式5 ,用键1 (PIO0 )控制通道选择信号s ;a 和b 分别接clock5 和clock0 ;输出信号
y 接扬声器spker 。通过短路帽选择clock0 接256Hz 信号,clock5 接1024Hz 信号。
现在根据以上确定的实验模式锁定多路选择器在目标芯片中的具体引脚:首先通过选择
“MAX+plus II”“Compiler” 菜单,进入编辑窗,然后在“Assign” 项中选“Pin / Location /
Chip” 选项,在跳出的窗口中的Node Name 项中输入引脚a ,这时“Pin Type” 项会出现“Input”

44
指示字,表明 a 的引脚性质是输入,否则将不出现此字。此时在“PIN” 项内输入“126” 引脚
名,再点击右下方的 Add 项,此引脚即设定好了;以同样方法分别锁定引脚 b 、s 、y (图6-
31),再点击上方的OK 。此4 个引脚的选择方法是根据附录实验电路模式“NO.5” 设定的。
关闭“Pin / Location / Chip”窗后,应点击编辑窗的“Start” ,将引脚信息编辑进去。
编程下载和硬件测试的步骤如下:
(1 )选 " MAX+PLUS " 项中的“Programmer” 项,跳出Programmer 窗后,选Options 项中
的硬件设置项“Hardware Setup” ,在此窗的下拉窗中选“ByteBlaster (MV)” 项,点击OK 即可。
(2 )将实验板连接好,接好电源,点“Configure” ,即进行编程下载。
( 3 ) 选 实 验 电 路 模 式 “ NO.5” 后 , 用 短 路 帽 设 定 clock5 和 clock0 的 频 率 分 别 为 256Hz 和
1024Hz 。当用键1 输入高电平时,扬声器发出256Hz 低频声,当用键1 输入低电平时,扬声器发
出1024Hz 高频声。当然也可以用示波器观察输出信号。

图6-31 引脚锁定

图 6-32 设 置 编 程 下 载 方 式
下载方式设定:
选择MAX+plusII 项及其中的编程器Programmer 选项,跳出如图6-32 左侧所示的编程器
窗口,然后选择Options 项的Hardware Setup 硬件设置选项,其窗口如图6-32 左侧所示。在
其下拉菜单中选ByteBlaster (MV )编程方式。此编程方式对应计算机的并行口下载通道,
“ MV” 是 混 合 电 压 的 意 思 , 主 要 指 对 ALTERA 的 各 类 芯 核 电 压 ( 如 5V 、 3.3V 、 2.5V 与
45
1.8V 等)的FPGA/CPLD 都能由此下载。此项设置只在初次装软件后第一次编程前进行,设置确
定后就不必重复此设置了。

图 6-33 向 目 标 器 件 下 载 配 置 文 件

下载:
如图6-33 ,点击Configure 键,向EPF10K10 下载配置文件,如果连线无误,应出现图6-33 报
告配置完成的信息提示。
到此为止,完整的设计流程已经结束。VHDL 文本输入的设计可参考这一流程。
6.3.6 设计流程归纳
图6-34 所示的是利用MAX+plusII进行设计的一般流程,因此对原理图输入设计和文本方式的硬件
描述语言设计输入都能适用。

图 6-34 MAX+plusII 一 般 设 计 流 程

6.3.7 MAX+plusII 在Windows 2000 上的安装设置


在 windows 98h , MAX+plusII 一 旦 安 装 完 毕 , 经 过 设 置 即 可 使 用 硬 件 下 载 功 能 。 在 windows 2000 上
的 安 装 , 除 了 安 装 软 件 外 , 为 使 用 ByteBlasterMV 下 载 功 能 , 还 必 须 安 装 硬 件 驱 动 ( drivers ) , 以 支
持 MAX+plusII 对 PC机 并 行 口 的 操 作 。 具 体 安 装 步 骤 如 下 :
( 1 ) 首 先 安 装 MAX+plusII ; ( 2 ) 选 择 ( “ 开 始 ” → “ 设 置 ” → “ 控 制 面 板 ” ) ; ( 3 ) 双
击“游戏选项”,然后选择“添加”→“添加其他”→“从磁盘安装”命令,再单击“浏览”浏览
驱 动 所 在 目 录 : MAX+plusII 的 安 装 目 录 \drivers\win2000 ; ( 4 ) 选 择 win2000.inf ,单击确定;
(5 )在“数字签名未找到”对话框中,选择是;(6 )在“选择一个设备驱动程序”窗口中,选
择 Altera ByteBlaster ,并单击“下一步”;(7 )在接下去的“数字签名未找到”对话框中,仍选择
“是”;(8 )安装完成,依提示,重新启动计算机
在 WINXP/WINNT 操 作 环 境 下 , 若 要 使 用 下 载 ( Download ) 功 能 , 同 样 要 安 装 驱 动 , 安 装 方 法
可 参 考 在 Windows 2000上 的 安 装 方 法 进 行 , 在 此 不 再 赘 述 。

实 验
(以下实验项目选自《EDA 技术使用教程》,更多更详细的实验内容请参考该书)

46
【实验1 】1 位全加器VHDL 文本输入设计:
--或门逻辑描述
LIBRARY IEEE ;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY or2a IS
PORT (a, b :IN STD_LOGIC;
c : OUT STD_LOGIC
);
END ENTITY or2a;
ARCHITECTURE one OF or2a IS
BEGIN
c <= a OR b ;
END ARCHITECTURE fu1;

--半加器描述
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY adder IS
PORT (a, b : IN STD_LOGIC;
co, so : OUT STD_LOGIC);
END ENTITY adder;
ARCHITECTURE fh1 OF adder is
BEGIN
so <= NOT(a XOR (NOT b)) ;
co <= a AND b ;
END ARCHITECTURE fh1;
--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 or2a
PORT (a , b : IN STD_LOGIC;
c : OUT STD_LOGIC);
END COMPONENT ;
SIGNAL d, e , f : STD_LOGIC;
BEGIN
u1 : h_adder PORT MAP(a=>ain , b=>bin,
co=>d , so=>e);
u2 : h_adder PORT MAP(a=>e , b=>cin,
co=>f , so=>sum);
u3 : or2a PORT MAP(a=>d ,
b=>f, c=>cout);
END ARCHITECTURE fd1 ;
【实验2 】2 选1 多路选择器VHDL 设计: 设计与实验方法参考第6 章第4 节。
【实验3 】8 位硬件加法器VHDL设计
设计程序如下:

47
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY ADDER8 IS
PORT ( CIN : IN STD_LOGIC;
A, B : IN STD_LOGIC_VECTOR(7 DOWNTO 0);
S : OUT STD_LOGIC_VECTOR(7 DOWNTO 0);
COUT : OUT STD_LOGIC );
END ADDER8;
ARCHITECTURE behav OF ADDER8 IS
SIGNAL SINT : STD_LOGIC_VECTOR(8 DOWNTO 0);
BEGIN
SINT <= ('0'& A) + B + CIN ;
S <= SINT(7 DOWNTO 0); COUT <= SINT(8);
END behav;

实验要求:给出此项设计的仿真波形,测试加法器的延时,选择实验电路NO.1 验证此加法
器的功能。
【实验4 】含异步清0 和同步时钟使能的4 位加法计数器
1 、实验目的:学习时序电路的设计、仿真和硬件测试,进一步熟悉VHDL 设计技术。

实验图1 含计数使能、异步复位和计数值并行预置功能4 位加法计数器

2 、实验原理:实验图1 是一含计数使能、异步复位和计数值并行预置功能4 位加法计数器,


例1 是其VHDL 描述。由 实 验 图 1 所示,图中间是4 位锁存器;rst是异步清信号,高电平有效;
clk 是锁存信号;D[3..0] 是4 位数据输入端。当ENA为'1' 时,多路选择器将加1 器的输出值加载于
锁存器的数据端;当ENA为'0' 时将"0000" 加载于锁存器。
3 、实验内容1 :按照本章第4 节的步骤,在MAX+plusII 上对例1 进行编辑、编译、综合、适
配、仿真。说明例中各语句的作用,详细描述示例的功能特点,给出其所有信号的时序仿真波形。

【例1 】
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY CNT4B IS
PORT (CLK : IN STD_LOGIC;
RST : IN STD_LOGIC;
ENA : IN STD_LOGIC;
OUTY : OUT STD_LOGIC_VECTOR(3 DOWNTO
0);
COUT : OUT STD_LOGIC );

48

实验图 2 共阴数码管及其电路
END CNT4B;
ARCHITECTURE behav OF CNT4B IS
SIGNAL CQI : STD_LOGIC_VECTOR(3 DOWNTO 0);
BEGIN
P_REG: PROCESS(CLK, RST, ENA)
BEGIN
IF RST = '1' THEN CQI <= "0000";
ELSIF CLK'EVENT AND CLK = '1' THEN
IF ENA = '1' THEN CQI <= CQI + 1;
END IF;
END IF;
OUTY <= CQI ;
END PROCESS P_REG ; -- 进 位 输 出
COUT<=CQI(0) AND CQI(1) AND CQI(2) AND CQI(3);
END behav;
4 、实验内容2 :引脚锁定以及硬件下载测试。
若 目 标 器 件 是 EPF10K10 , 建 议 选 实 验 电 路 模 式 5 , 用 键 8 ( PIO7 ) 控 制 RST ; 用 键
7 (PIO6 )控制ENA;计数溢出COUT 接发光管D8 (PIO15 );OUTY 是计数输出,接数码
1 (PIO19-PIO16 ,低位靠右);时钟CLK接clock2 (引脚号为43),通过短路帽选择4Hz 信号。
引脚锁定窗后进行编译、下载和硬件测试实验。将实验过程和实验结果写进实验报告。
6 、思考题1 :在例1 中是否可以不定义信号 CQI ,而直接用输出端口信号完成加法运算,即
: OUTY <= OUTY + 1 ?
7 、思考题2 :修改例1 ,用进程语句和IF 语句实现进位信号的检出。
8 、将例1 中的语句“COUT<=CQI(0) AND CQI(1) AND CQI(2) AND CQI(3)” 逻辑用
进程和IF 语句来表达。
9 、实验报告:实验项目原理、设计过程、编译仿真波形和分析结果,附加内容实验情况,以及
它们的硬件测试实验结果写进实验报告。
【实验5 】7 段数码显示译码器设计
1 、实验目的:学习7 段数码显示译码器设计、多层次设计方法、和总线数据输入方式的仿真。
2 、实验原理:7 段数码是纯组合电路,通常的小规模专用IC ,如74 或4000 系列的器件
只能作十进制BCD 码译码,然而数字系统中的数据处理和运算都是 2 进制的,所以输出表达都是
16 进制的,为了满足16 进制数的译码显示,最方便的方法就是利用VHDL 译码程序在FPGA 或
CPLD 中实现。本项实验 很 容 易 实现 这一目的。 例 2 作为 7 段 BCD码译码器的设计,输 出信号
LED7S 的 7 位 分 别 接 如 实 验 图 2 数 码 管 的 7 个 段 , 高 位 在 左 , 低 位 在 右 。 例 如 当 LED7S 输 出 为
"1101101" 时 , 数 码 管 的 7 个 段 : g 、 f 、 e 、 d 、 c 、 b 、 a 分 别 接
1 、1 、0 、1 、1 、0 、1 ,接有高电平的段发亮,于是数码管显示“5” 。
3 、实验内容1 :说明例2 中各语句的含义,以及该例的整体功能。在MAX+plusII 上对以下
该例进行编辑、编译、综合、适配、仿真,给出其所有信号的时序仿真波形(提示:用输入总线的
方式给出输入信号仿真数据)。
【例2 】
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(6 DOWNTO 0) ) ;
END ;

49
ARCHITECTURE one OF DecL7S IS
BEGIN
PROCESS( A )
BEGIN
CASE A(3 DOWNTO 0) IS
WHEN "0000" => LED7S <= "0111111" ; -- X“3F”0
WHEN "0001" => LED7S <= "0000110" ; -- X“06”1
WHEN "0010" => LED7S <= "1011011" ; -- X“5B”2
WHEN "0011" => LED7S <= "1001111" ; -- X“4F”3
WHEN "0100" => LED7S <= "1100110" ; -- X“66”4
WHEN "0101" => LED7S <= "1101101" ; -- X“6D”5
WHEN "0110" => LED7S <= "1111101" ; -- X“7D”6
WHEN "0111" => LED7S <= "0000111" ; -- X“07”7
WHEN "1000" => LED7S <= "1111111" ; -- X“7F”8
WHEN "1001" => LED7S <= "1101111" ; -- X“6F”9
WHEN "1010" => LED7S <= "1110111" ; -- X“77”10
WHEN "1011" => LED7S <= "1111100" ; -- X“7C”11
WHEN "1100" => LED7S <= "0111001" ; -- X“39”12
WHEN "1101" => LED7S <= "1011110" ; -- X“5E”13
WHEN "1110" => LED7S <= "1111001" ; -- X“79”14
WHEN "1111" => LED7S <= "1110001" ; -- X“71”15
WHEN OTHERS => NULL ;
END CASE ;
END PROCESS ;
END ;
3 、实验内容2 :引脚锁定以及硬件下载测试。建议选实验电路模式6 ,用数码8 显示译码输出
(PIO46--PIO40 ),键8 、键7 、键6 、键5 四位控制输入,硬件验证译码器的工作性能。
4 、思考题:讨论语句WHEN OTHERS=>NULL 的作用。对于不同的VHDL 综合器,此句是否具有
相同含义和功能?

实验图3 计数器和译码器连接电路的顶层文件原理图
5 、附加实验内容:用VHDL 例化语句(参考实验2 )按实验图3 的方式,以例1 和例2 为底层
元件,完成顶层文件设计,并重复以上实验过程。注意实验图3 中的tmp 是4 位总线,led 是7 位
总线。对于引脚锁定和实验,建议仍选实验电路模式6 ,用数码8 显示译码输出,用键3 作为时钟
输入(每按2 次键为1 个时钟脉冲),或直接时钟信号clock0 。(答案见最后一页)。
6 、实验报告:根据以上的实验内容写出实验报告,包括程序设计、软件编译、仿真分析、硬件
测试和详细实验过程;设计原程序,程序分析报告、仿真波形图及其分析报告。
【实验6 】数控分频器的设计
1 、实验目的:学习数控分频器的设计、分析和测试方法。
2 、实验原理:数控分频器的功能就是当在输入端给定不同输入数据时,将对输入的时钟信号
有不同的分频比,例3 的数控分频器就是用计数值可并行预置的加法计数器设计完成的,方法是将

50
计数溢出位与预置数加载输入信号相接即可。
3 、实验内容1 :根据实验图3 的波形提示,分析例3 中的各语句功能、设计原理、逻辑功能,
并详述进程P_REG和P_DIV 的作用。

实 验 图 3 当 给 出 不 同 输 入 值 D 时 , FOUT 输 出 不 同 频 率 ( CLK 周 期 =50ns )


4 、实验内容2 :输入不同的CLK时钟频率和预置值D ,给出如例3 的时序波形。
5 、实验内容3 :在实验系统上硬件验证例3 的功能。如果目标器件是EPF10K10 ,建议选实验
电路模式1 ,键2 / 键1 (PIO7-PIO0 )负责输入8 位预置数D ;CLK 由clock0 输入,频率可选
65536Hz 或更高(确保分频后落在音频范围);输出FOUT 接扬声器(SPKER)。编译下载后进行
硬件测试:改变键2 / 键1 的输入值,可听到不同音调的声音。
6 、实验报告:根据以上的要求,将实验项目分析设计,仿真和测试写入实验报告。
【例3 】
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY PULSE IS
PORT ( CLK : IN STD_LOGIC;
D : IN STD_LOGIC_VECTOR(7 DOWNTO 0);
FOUT : OUT STD_LOGIC );
END;
ARCHITECTURE one OF PULSE IS
SIGNAL FULL : STD_LOGIC;
BEGIN
P_REG: PROCESS(CLK)
VARIABLE CNT8 : STD_LOGIC_VECTOR(7 DOWNTO 0);
BEGIN
IF CLK'EVENT AND CLK = '1' THEN
IF CNT8 = "11111111" THEN
CNT8 := D; -- 当 CNT8计 数 计 满 时 , 输 入 数 据 D 被 同 步 预 置 给 计 数 器
CNT8
FULL <= '1'; -- 同 时 使 溢 出 标 志 信 号 FULL输 出 为 高 电 平
ELSE CNT8 := CNT8 + 1; -- 否 则 继 续 作 加 1 计 数
FULL <= '0'; -- 且 输 出 溢 出 标 志 信 号 FULL为 低 电 平
END IF;
END IF;
END PROCESS P_REG ;
P_DIV: PROCESS(FULL)
VARIABLE CNT2 : STD_LOGIC;
BEGIN
IF FULL'EVENT AND FULL = '1'
THEN CNT2 := NOT CNT2;-- 如 果 溢 出 标 志 信 号 FULL为 高 电 平 , D 触 发 器 输 出 取 反
IF CNT2 = '1' THEN FOUT <= '1';

51
ELSE FOUT <= '0';
END IF;
END IF;
END PROCESS P_DIV ;
END;

【实验7 】用状态机实现序列检测器的设计
1 、实验目的:用状态机实现序列检测器的设计,并对其进行仿真和硬件测试。
2 、实验原理:序列检测器可用于检测一组或多组由二进制码组成的脉冲序列信号,当序列检
测器连续收到一组串行二进制码后,如果这组码与检测器中预先设置的码相同,则输出1 ,否则输
出0 。由于这种检测的关键在于正确码的收到必须是连续的,这就要求检测器必须记住前一次的正
确码及正确序列,直到在连续的检测中所收到的每一位码都与预置数的对应码相同。在检测过程中,
任何一位不相等都将回到初始状态重新开始检测。例4 描述的电路完成对序列数"11100101" 的。
当这一串序列数高位在前(左移)串行进入检测器后,若此数与预置的密码数相同,则输出
“A” ,否则仍然输出“B” 。
【例4 】
LIBRARY IEEE ;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY SCHK IS
PORT( DIN , CLK , CLR : IN STD_LOGIC ; -- 串 行 输 入 数 据 位 / 工 作 时 钟 / 复 位 信 号
AB : OUT STD_LOGIC_VECTOR(3 DOWNTO 0)); --检 测 结 果 输 出
END SCHK;
ARCHITECTURE behav OF SCHK IS
SIGNAL Q : INTEGER RANGE 0 TO 8 ;
SIGNAL D : STD_LOGIC_VECTOR(7 DOWNTO 0); --8 位待检测预置数
BEGIN
D <= "11100101 " ; --8 位 待 检 测 预 置 数
PROCESS( CLK, CLR )
BEGIN
IF CLR = '1' THEN Q <= 0 ;
ELSIF CLK'EVENT AND CLK='1' THEN -- 时钟到来时,判断并处理当前输入的位
CASE Q IS
WHEN 0=> IF DIN = D(7) THEN Q <= 1 ; ELSE Q <= 0 ; END IF ;
WHEN 1=> IF DIN = D(6) THEN Q <= 2 ; ELSE Q <= 0 ; END IF ;
WHEN 2=> IF DIN = D(5) THEN Q <= 3 ; ELSE Q <= 0 ; END IF ;
WHEN 3=> IF DIN = D(4) THEN Q <= 4 ; ELSE Q <= 0 ; END IF ;
WHEN 4=> IF DIN = D(3) THEN Q <= 5 ; ELSE Q <= 0 ; END IF ;
WHEN 5=> IF DIN = D(2) THEN Q <= 6 ; ELSE Q <= 0 ; END IF ;
WHEN 6=> IF DIN = D(1) THEN Q <= 7 ; ELSE Q <= 0 ; END IF ;
WHEN 7=> IF DIN = D(0) THEN Q <= 8 ; ELSE Q <= 0 ; END IF ;
WHEN OTHERS => Q <= 0 ;
END CASE ;
END IF ;
END PROCESS ;
PROCESS( Q ) -- 检 测 结 果 判 断 输 出
BEGIN
IF Q = 8 THEN AB <= "1010" ; -- 序列数检测正确,输出 “ A”

52
ELSE AB <= "1011" ; -- 序列数检测错误,输出 “ B”
END IF ;
END PROCESS ;
END behav ;
提 示 : 若 对 于 D <= "11100101 " , 电 路 需 记 忆 : 初 始 状 态 、 1 、 11 、 111 、 1110
、11100 、111001 、1110010 、11100101 共9 种状态。
3 、实验内容1 :说明例4 的代码表达的是什么类型的状态机,它的优点是什么?详述其功能和
对序列数检测的逻辑过程;根据例4 写出由两个主控进程构成的相同功能的符号化moore 型有限状
态机,画出状态图,并给出其仿真测试波形;
利用MAX+plusII 对例4 进行文本编辑输入、仿真测试并给出仿真波形,了解控制信号的时序。
最后进行引脚锁定并完成硬件测试实验。
建议用键7 (PIO11 )控制复位信号CLR ;键6 (PIO9 )控制状态机工作时钟CLK;待检测串
行序列数输入DIN 接PIO10 (左移,最高位在前);指示输出AB 接PIO39 ~PIO36 (显示于数码
管6 )。下载后,1 、按实验板“系统复位”键; 2 、用键2 和键1 输入2 位十六进制待测序列
数 "11100101 " ;3 、按键7 复位(平时数码6 指示显“B” );4 、按键6(CLK) 8 次,这时若串
行输入的8 位二进制序列码(显示于数码2/1 和发光管D8 ~D0 )与预置码 "11100101 " 相同,则
数码6 应从原来的B 变成A ,表示序列检测正确,否则仍为B 。
6 、实验报告:根据以上的实验内容写出实验报告,包括设计原理、程序设计、程序分析、仿真
分析、硬件测试和详细实验过程。
【实验8 】用状态机对ADC0809 的采样控制电路实现
1 、实验目的:学习用状态机对A/D 转换器ADC0809 的采样控制电路的实现。
2 、实验原理:ADC0809 是CMOS的8 位A/D 转换器,片内有8 路模拟开关,可控制8 个模拟量
中的一个进入转换器中。ADC0809 的分辨率为8 位,转换时间约100us ,含锁存控制的8 路多路开
关,输出有三态缓冲器控制,单5V电源供电。
主要控制信号说明:如实验图4 所示,START 是转换启动信号,高电平有效;ALE 是3 位通道
选择地址(ADDC、ADDB、ADDA)信号的锁存信号。当模拟量送至某一输入端(如IN1 或IN2 等),
由3 位地址信号选择,而地址信号由ALE 锁存;EOC 是转换情况状态信号(类似于AD574 的
STATUS ),当启动转换约100us 后,EOC 产生一个负脉冲,以示转换结束;在EOC 的上升沿后,若
使输出使能信号OE为高电平,则控制打开三态缓冲器,把转换好的8 位数据结果输至数据总线。至
此ADC0809 的一次转换结束了。
【例5 】
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY ADCINT IS
PORT ( D : IN STD_LOGIC_VECTOR(7 DOWNTO 0); --0809的 8 位 转 换 数 据 输 出
CLK ,EOC : IN STD_LOGIC; --CLK 是 转 换 工 作 时 钟
LOCK1, ALE, START, OE, ADDA : OUT STD_LOGIC;
Q : OUT STD_LOGIC_VECTOR(7 DOWNTO 0) );
END ADCINT;
ARCHITECTURE behav OF ADCINT IS
TYPE states IS (st0, st1, st2, st3,st4,st5,st6) ; -- 定 义 各 状 态 子 类 型
SIGNAL current_state, next_state: states :=st0 ;
SIGNAL REGL : STD_LOGIC_VECTOR(7 DOWNTO 0);
SIGNAL LOCK : STD_LOGIC; -- 转 换 后 数 据 输 出 锁 存 时 钟 信 号
BEGIN
ADDA <= '1'; LOCK1 <=LOCK;

53
PRO: PROCESS(current_state,EOC) BEGIN -- 规 定 各 状 态 转 换 方 式
CASE current_state IS
WHEN st0 => ALE<='0';START<='0';OE<='0';LOCK<='0' ;next_state <= st1;
WHEN st1 => ALE<='1';START<='0';OE<='0';LOCK<='0' ;next_state <= st2;
WHEN st2 => ALE<='0';START<='1';OE<='0';LOCK<='0' ;next_state <= st3;
WHEN st3 => ALE<='0';START<='0';OE<='0';LOCK<='0';
IF (EOC='1') THEN next_state <= st3; -- 测 试 EOC 的 下 降 沿
ELSE next_state <= st4;
END IF ;
WHEN st4=> ALE<='0';START<='0';OE<='0';LOCK<='0';
IF (EOC='0') THEN next_state <= st4; -- 测 试 EOC 的 上 升 沿 , =1表 明 转 换 结 束
ELSE next_state <= st5; -- 继 续 等 待
END IF ;
WHEN st5=> ALE<='0';START<='0';OE<='1';LOCK<='0';next_state <= st6;
WHEN st6=> ALE<='0';START<='0';OE<='1';LOCK<='1';next_state <= st0;
WHEN OTHERS => ALE<='0';START<='0';OE<='0';LOCK<='0';next_state <= st0;
END CASE ;
END PROCESS PRO ;
PROCESS (CLK)
BEGIN
IF ( CLK'EVENT AND CLK='1') THEN
current_state <= next_state; -- 在时钟上升沿,转换至下一状态
END IF;
END PROCESS; -- 由 信 号 current_state 将 当 前 状 态 值 带 出 此 进 程 , 进 入 进 程 PRO
PROCESS (LOCK) -- 此 进 程 中 , 在 LOCK的 上 升 沿 , 将 转 换 好 的 数 据 锁 入
BEGIN
IF LOCK='1' AND LOCK'EVENT THEN REGL <= D ;
END IF;
END PROCESS ;
Q <= REGL;
END behav;

实 验 图 4 ADC0809 工 作 时 序
2 、实验内容:利用MAX+plusII 对例5 进行文本编辑输入和仿真测试;给出仿真波形。最后进
行引脚锁定并进行测试,硬件验证例5 电路对ADC0809 的控制功能。
测 试 步 骤 : 根 据 附 图 2-7 , 建 议 引 脚 锁 定 为 : START 接 PIO34 , OE 接 PIO35 , EOC 接
PIO8 , ALE 接 PIO33 , 状 态 机 时 钟 CLK 接 clock0 ( PIN2 , 可 选 “ 65536Hz” 或 更 高 ) ,
ADDA 接PIO32 (ADDB 和ADDC 都接GND ),ADC0809 的8 位输出数据线接PIO23 ~PIO16 ,
锁存输出Q 显示于数码8/ 数码7 (PIO47 ~PIO40 ),
设目标器件是EPF10K10 ,建议选择实验电路结构图NO.5 (即结构图NO.5 ,附图2-7 ,由该

54
图可见,ADC0809 的转换时钟CLK 已经事先接有750KHz 的频率),拨码开关选择“转换结束”
和“A/D 使能”。下载目标文件后,可用螺丝刀旋转实验系统左下角的电位器,以便为ADC0809提
供变化的待测模拟信号,这时数码管8 和7 将显示ADC0809采样输出并被锁存的数字值(16进制)。
3 、思考题:在不改变原代码功能的条件下将例5 表达成用状态码直接输出型的状态机。
4 、实验报告:根据以上的实验要求、实验内容和实验思考题写出实验报告。
【实验9 】 波形发生与扫频信号发生器电路设计
1 、实验目的:学习用VHDL设计波形发生器和扫频信号发生器,掌握FPGA对D/A 的接口和控制
技术,学会LPM_ROM 在波形发生器设计中的实用方法。
2 、实验原理:如实验图5 所示,完整的波形发生器由4 部分组成:
 FPGA 中的波形发生器控制电路,它通过外来控制信号和高速时钟信号,向波形数据ROM 发出
地址信号,输出波形的频率由发出的地址信号的速度决定;当以固定频率扫描输出地址时,模拟输
出波形是固定频率,而当以周期性时变方式扫描输出地址时,则模拟输出波形为扫频信号。
 波形数据ROM 中存有发生器的波形数据,如正弦波或三角波数据。当接受来自FPGA的地址信
号后,将从数据线输出相应的波形数据,地址变化得越快,则输出数据的速度越快,从而使D/A 输
出的模拟信号的变化速度越快。波形数据ROM 可以由多种方式实现,如在FPGA外面外接普通ROM ;
由逻辑方式在FPGA中实现(如例6 );或由FPGA中的EAB 模块担当,如利用LPM_ROM 实现。相比之
下,第1 种方式的容量最大,但速度最慢;,第2 种方式容量最小,但速度最最快;第3 种方式则
兼顾了两方面的因素;
 D/A 转换器负责将ROM 输出的数据转换成模拟信号,经滤波电路后输出。输出波形的频率上
限与D/A 器件的转换速度有重要关系,本例采用DAC0832 器件。
DAC0832 是8 位D/A 转换器,转换周期为1µs ,其引脚信号以及与FPGA 目标器件典型的接
口 方 式 如 附 图 2-7 所 示 。 其 参 考 电 压 与 + 5V 工 作 电 压 相 接 ( 实 用 电 路 应 接 精 密 基 准 电 压 ) 。
DAC0832 的引脚功能简述如下:
 ILE (PIN 19 ):数据锁存允许信号,高电平有效,系统板上已直接连在+5V 上。
 WR1 、WR2 (PIN 2 、18 ):写信号1 、2 ,低电平有效。
 XFER(PIN 17) :数据传送控制信号,低电平有效。
 VREF (PIN 8 ):基准电压,可正可负, - 10V ~+10V 。
 RFB (PIN 9 ):反馈电阻端。
 IOUT1/ IOUT2 (PIN 11 、12 ):电流输出1 和2 。D/A 转换量是以电流形式输出的,
所以必须如实验结构图NO.5 所示的连接方式将电流信号变为电压信号。
 AGND/DGND (PIN 3 、10 ):模拟地与数字地。在高速情况下,此二地的连接线必须尽
可能短,且系统的单点接地点须接在此连线的某一点上。
例6 中的正弦波波型数据由64 个点构成,此数据经DAC0832 ,并经滤波器后,可在示波器
上观察到光滑的正弦波( 若接精密基准电压,可得到更为清晰的正弦波形) 。
3 、实验内容1 :根据示例例6 ,及以上的设计原理,完成波形发生器和扫频信号源的设计,
仿真测试及实验系统上的硬件测试。
硬件实验中注意DAC0832及滤波电路须接+/-12V 电压。然后将实验系统左下角选择插针处用短路
帽短路“D/A 直通”,而“滤波1” ,“滤波0” 处通过短路或不接短路帽达到不同的滤波方式。
将示波器的地与EDA实验系统的地相接,信号端与“AOUT” 信号输出端相接;建议CLK接
clock0 ,由此50MHz频率,此频率扫描波形数据;CLK1 接clock5 ,由此接“1024Hz”,此频率决
定扫频速度;选电路模式1 ;KK 接键8 ,当为高电平时,正弦波点频输出,11位输入数据DATA
由键3 、键2 和键1 控制,信号源的输出频率由此3 键输入的12位二进制数决定,数值越大,输出
频率越高;“FD0” 时为最高频率;键8 低电平时,正弦波扫频输出,扫频速度由clock5 的频率决
定。输向0832的8 位数据由DD 输出。

55
实验图5 波形发生器电路系统结构图
4 、实验内容2 :在例6 中插如一个LPM_ROM ,将原例中的波形数据放在内部ROM 中。必要时
增加波形点数,以利低频输出时,仍保持良好波形。波形数据可由其它方式自动生成,然后重复以
上的测试和硬件实验。
5 、实验思考题:如果CLK 的输入频率是50MHz ,ROM 中一个周期的正弦波数据是128 个,要
求输出的正弦波频率不低于150KHz ,DAC0832 是否能适应此项工作?为什么?
6 、实验报告:作出本项实验设计的完整电路图,详细说明其工作原理,叙述例6 的工作原
理,以及基于LPM_ROM 的VHDL电路设计的详细内容和测试、实验内容。
【例6 】
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY DAC IS
PORT ( CLK,CLK1,KK : IN STD_LOGIC;
DATA : IN STD_LOGIC_VECTOR(11 DOWNTO 0);
DD : OUT INTEGER RANGE 255 DOWNTO 0 );
END;
ARCHITECTURE DACC OF DAC IS
SIGNAL Q : INTEGER RANGE 63 DOWNTO 0 ;
SIGNAL D : INTEGER RANGE 255 DOWNTO 0 ;
SIGNAL FSS : STD_LOGIC ;
SIGNAL COUNT12,DATA2,DATA1 : STD_LOGIC_VECTOR(11 DOWNTO 0) ;
BEGIN
PROCESS(FSS)
BEGIN
IF (FSS'EVENT AND FSS = '1') THEN Q <= Q + 1;
END IF;
END PROCESS;
PROCESS(Q)
BEGIN
CASE Q IS
WHEN 00=> D<=255; WHEN 01=> D<=254; WHEN 02=> D<=252; WHEN 03=> D<=249;
WHEN 04=> D<=245; WHEN 05=> D<=239; WHEN 06=> D<=233; WHEN 07=> D<=225;
WHEN 08=> D<=217; WHEN 09=> D<=207; WHEN 10=> D<=197; WHEN 11=> D<=186;
WHEN 12=> D<=174; WHEN 13=> D<=162; WHEN 14=> D<=150; WHEN 15=> D<=137;
WHEN 16=> D<=124; WHEN 17=> D<=112; WHEN 18=> D<= 99; WHEN 19=> D<= 87;
WHEN 20=> D<= 75; WHEN 21=> D<= 64; WHEN 22=> D<= 53; WHEN 23=> D<= 43;
WHEN 24=> D<= 34; WHEN 25=> D<= 26; WHEN 26=> D<= 19; WHEN 27=> D<= 13;
WHEN 28=> D<= 8; WHEN 29=> D<= 4; WHEN 30=> D<= 1; WHEN 31=> D<= 0;
WHEN 32=> D<= 0; WHEN 33=> D<= 1; WHEN 34=> D<= 4; WHEN 35=> D<= 8;
WHEN 36=> D<= 13; WHEN 37=> D<= 19; WHEN 38=> D<= 26; WHEN 39=> D<= 34;

56
WHEN 40=> D<= 43; WHEN 41=> D<= 53; WHEN 42=> D<= 64; WHEN 43=> D<= 75;
WHEN 44=> D<= 87; WHEN 45=> D<= 99; WHEN 46=> D<=112; WHEN 47=> D<=124;
WHEN 48=> D<=137; WHEN 49=> D<=150; WHEN 50=> D<=162; WHEN 51=> D<=174;
WHEN 52=> D<=186; WHEN 53=> D<=197; WHEN 54=> D<=207; WHEN 55=> D<=217;
WHEN 56=> D<=225; WHEN 57=> D<=233; WHEN 58=> D<=239; WHEN 59=> D<=245;
WHEN 60=> D<=249; WHEN 61=> D<=252; WHEN 62=> D<=254; WHEN 63=> D<=255;
WHEN OTHERS => NULL ;
END CASE;
END PROCESS;
DD <= D ;
PROCESS(CLK, DATA)
BEGIN
IF CLK'EVENT AND CLK = '1' THEN
IF COUNT12 = "111111100000" THEN COUNT12 <= DATA1; FSS <= '1';
ELSE COUNT12 <= COUNT12 + 1; FSS <= '0';
END IF;
END IF;
END PROCESS;
DATA1 <= DATA WHEN KK = '1' ELSE
DATA2 WHEN KK = '0' ELSE DATA2 ;
PROCESS(CLK1)
BEGIN
IF (CLK1'EVENT AND CLK1 = '1') THEN DATA2 <= DATA2 + 1;
END IF;
END PROCESS;
END;

【实验5 】答案:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY TOP_PRJ IS
PORT (CLKK,RSTT,ENAA : IN STD_LOGIC;
COUTT : OUT STD_LOGIC;
OUTYY : OUT STD_LOGIC_VECTOR(6 DOWNTO 0));
END ENTITY TOP_PRJ;
ARCHITECTURE fd1 OF TOP_PRJ IS
COMPONENT CNT4B
PORT (CLK : IN STD_LOGIC;
RST : IN STD_LOGIC;
ENA : IN STD_LOGIC;
OUTY : OUT STD_LOGIC_VECTOR(3 DOWNTO 0);
COUT : OUT STD_LOGIC );
END COMPONENT;
COMPONENT DECL7S
PORT ( A : IN STD_LOGIC_VECTOR(3 DOWNTO 0) ;
LED7S : OUT STD_LOGIC_VECTOR(6 DOWNTO 0) ) ;
END COMPONENT;

57
SIGNAL AB : STD_LOGIC_VECTOR(3 DOWNTO 0) ;
BEGIN
u1 : CNT4B PORT MAP(CLK=>CLKK,RST=>RSTT,ENA=>ENAA,OUTY=>AB,COUT=>COUTT);
u2 : DECL7S PORT MAP(A=>AB, LED7S=>OUTYY);
END ARCHITECTURE fd1;;

顶 层 电 路 TOP_PRJ.VHD

GND
I/O56
I/O55
I/O54
I/O53
I/O52
I/O51
I/O50
I/O49
I/O48

I/O47
I/O46
I/O45
I/O44
I/O43
I/O42
I/O41
I/O40
I/O39
IN6

IN5
10

84
83
82
81
80
79
78
77
76
75
11

9
8
7
6
5
4
3
2
1
I/O57 12 74 I/O38
I/O58 13 73 I/O37
I/O59 14 72 I/O36
I/O60 15
I/O61 16 LATTICE 71
70
I/O35
I/O34
I/O62 17 69 I/O33
ispLSI1032/E
I/O63 18 68 I/O32
IN7 19 PLSI1032/E 67 IN4
Y0 20 66 Y1
84-PIN PLCC ·â×°
VCC 21 65 VCC
GND 22 ¶¥Ãæͼ 64 GND
ISPEN 23 63 Y2
RESET 24 62 Y3
SDI/IN0 25 61 IN3/SCLK
I/O0 26 60 I/O31
I/O1 27 59 I/O30
I/O2 28 58 I/O29
I/O3 29 57 I/O28
I/O4 30 56 I/O27
I/O5 31 55 I/O26
I/O6 32 I/O25
54
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
GND
I/O10
I/O11
I/O12
I/O13
I/O14
I/O15

I/O16
I/O17
I/O18
I/O19
I/O20
I/O21
I/O22
I/O23
I/O24
MODE/IN1

SDO/IN2
I/O7
I/O8
I/O9

58
CONF_DONE
I/O6/DATA1
I/O5/DATA2
I/O4/DATA3
I/O3/DATA4
I/O2/DATA5
I/O1/DATA6
I/O0/DATA7

DEV_CLRn

I/O48/nWS
I/O49/nRS

I/O46/nCS
GCLCK1

DEV_OE

I/O47/CS
VCCINT

GNDINT

nCEO
TCK
IN1

IN4
10

84
83
82
81
80
79
78
77
76
75
11

9
8
7
6
5
4
3
2
1
DATA0 12 74 TDO
DCLK 13 73 I/O45/CLKUSR
nCE 14 72 I/O44
TDI 15 ALTERA 71 I/O43
I/O7 16 70 I/O42/RDYnBSY
I/O8 17 FLEX 69 INIT_DONE
I/O9 18 68 GNDINT
I/O10 19 EPF10K10LC84 67 I/O41
VCCINT 20 66 I/O40
84-PIN PLCC ·â×°
I/O11 21 65 I/O39
I/O12 22 64 I/O38
¶¥Ãæͼ
I/O13 23 63 VCCINT
I/O14 24 62 I/O37
I/O15 25 61 I/O36
GNDINT 26 60 I/O35
I/O16 27 59 I/O34
I/O17 28 58 I/O33
I/O18 29 57 TMS
I/O19 30 56 nTRST
MSEL0 31 55 nSTATUS
MSEL1 32 I/O32
54
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
nCONFIG
VCCINT

GCLK2
I/O20
I/O21
I/O22
I/O23
I/O24

I/O25
I/O26
I/O27
I/O28
I/O29
I/O30
I/O31
IN2

IN3
VCCINT
GNDINT

VCCINT
GNDINT

GCLOCK2"CLOCK9"
INPUT3"CLOCK2"

I/O 63"CLOCK10"
DEV_CLRnI/O94

I/O 62"CLOCK7"
I/O 61"CLOCK6"
DEV_OE I/O95

DATA7I/O60

DATA6I/O59
DATA5I/O58
DATA4I/O57
DATA3I/O56
DATA2I/O55
DATA1I/O54
nCS I/O78
CS I/O77
nWSI/O76
nRS I/O75

GNDINT

VCCINT
INPUT4
GNDIO

GNDIO
VCCIO

VCCIO
I/O 74

I/O 73
I/O 72
I/O 71
I/O 70

I/O 69
I/O 68
I/O 67
I/O 66

I/O 65
I/O 64
144
143
142
141
140
139
138
137
136
135
134
133
132
131
130
129
128
127
126
125
124
123
122
121
120
119
118
117
116
115
114
113
112
111
110
109
1 TCK DATA0 108
2 CONF_DONE DCLK 107
3 nCEO nCE 106
4 TDO TDI 105
5 VCCIO GNDIO 104
6 VCCINT GNDINT 103
7 CLKUSR I/O79 "CLOCK5" Total User I/O I/O53 102
8 I/O0 "CLOCK4" I/O52 101
9 I/O1 "CLOCK3" I/O51 100
10 I/O2 "SPKER" I/O50 99
11 RDYnBSY I/O80 I/O49 98
12 I/O3 ALTERA I/O48 97
13 I/O4 EPF10K20 I/O47 96
14 INIT_DONE I/O81 I/O46 95
EPF10K30A
15 GNDIO VCCIO 94
16 GNDINT 144-PIN TQFP VCCINT 93
17 I/O5 I/O45 92
18 I/O6 I/O44 91
19 I/O7 I/O43 90
20 I/O8 I/O42 89
21 I/O9 I/O41 88
22 I/O10 I/O40 87
23 I/O11 I/O39 86
24 VCCIO GNDIO 85
25 VCCINT GNDINT 84
26 I/O12 I/O38 83
27 I/O13 I/O37 82
28 I/O14 I/O36 81
29 I/O15 I/O35 80
30 I/O16 I/O34 79
31 I/O17 I/O33 78
32 I/O18 MSEL0 77
33 I/O19 MSEL1 76
34 TMS VCCINT 75
35 nSTATUS nCONFIG 74
36 I/O20 I/O32 73
37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72
"CLOCK1"GCLOCK1

GNDINT
GNDINT
VCCINT
VCCINT
"CLOK0"INPUT1

"CLOCK8"INPUT2
GNDIO

GNDIO

GNDIO
VCCIO

VCCIO

VCCIO
I/O 21
I/O 22
I/O 23

I/O 24
I/O 25
I/O 82
I/O 83

I/O 84
I/O 85
I/O 86
I/O 87

I/O 88

I/O 89
I/O 90

I/O 91
I/O 92
I/O 93
I/O 26

I/O 27
I/O 28
I/O 29
I/O 30

I/O 31

注意: 144 脚 的 TQ 型 器 件 的 I/O 引 脚 、 INPUT 引 脚 和 编 程 引 脚 与 此 图 是 完 全 兼 容 的 , 如 :

59
EPF10K20-TQ144 与 EP1K30TQ144 、 EP1K50TQ144 是 兼 容 的 , 故 引 脚 锁 定 的 位 置 是 相 同 的 。 PIOx 引 脚
名与引脚号对照以查表为准。

第 七 章 GWCNF 型 FPGA 掉 电 保 护 配 置 器 应 用
1 、 FPGA 配 置 文 件 格 式 与 编 程 方 法
FPGA 的下载文件有多种格式,如*.pof、*.sof 、*.hex 等,GWCNF 上的ROM 中的配置文件
的 格 式 是 *.hex 格 式 。 可 利 用 普 通 编 程 器 将 *.hex 文 件 烧 写 进 ROM 中 。 如 果 利 用 SUPER-
PRO 型编程器,向缓冲区调*.hex 文件时应该选择“INTEL” 格式。
2 、 GWCNF 上 的 ROM
GWCNF 上可选用几乎任何形式的ROM ,包括27C 系列、28C 系列、29C 系列等28脚或
32脚封装的EPROM 或EEPROM 或FLASHI ROM 等。因此如果选用大的ROM ,可以同时放置
多个配置文件,从而可以实现“多任务重配置”功能。
例如,GWCNF 上若配有2 片W27C020(含2M 字节),则通常每片中最多可以放置4 个
对FPGA 的配置文件,两片共8 个。实际编程方法是每64K 字节放一个HEX文件,4 个文件所
处 的 地 址 分 别 为 : a 、 00000H-0FFFFH ; b 、 10000H-1FFFFH ; c 、 20000H-2FFFFH ;
d 、30000H-3FFFFH 。
对于含有4M 的27C040 、29C040 、27C4001 等,其地址分配也是一样,但其最后一个
64K 的地址区为:70000H-7FFFFH 。
如果希望将多个配置文件编程进ROM 中,烧写时一定要正确选择编程器的缓冲区地址和
被编程芯片的首末地址。例如欲将某HEX文件烧进30000H-3FFFFH 地址区,必须选择缓冲区的
首地址为:00000 ;末地址为:0FFFF ;而芯片的首地址为:30000 ;末地址为3FFFF 。
3 、 GWCNF 板 上 跳 线 接 插 方 法
GWCNF 板上有许多跳线,以适应不同的应用切换:
序 名 称 功能与用法

1 J7 短 路 帽 选 插 “ L33V” 对 低 压 FPGA 进 行 配 置 , 包 括 对 3.3V 、 2.5V 、 1.8V 芯 核
电 压 的 FPGA 进 行 配 置 ( 注 意 低 压 必 须 来 自 FPGA );短路帽选
插 “ H5V” 对 5V工 作 电 压 FPGA 配置。
2 J6 短 路 帽 选 插 “ INH” , 禁 止 PORT1 口 , 只 能 使 用 PORT2 口 对 5V的 FPGA 进行
配 置 ; 若 短 路 帽 选 插 “ ENA” , 则 禁 止 PORT2 口 , 这 时 PORT1 口 能 对 任 何 工
作 电 压 的 FPGA 配置。
3 PORT2 设 立 PORT2 口 的 好 处 是 可 以 直 接 通 过 该 口 从 被 配 置 的 FPGA 获得工作电源,
而 不 必 从 “ POWER” 端 口 上 另 接 电 源 , 但 PORT2 口 只 能 对 5V工 作 电 压 的 FPGA
配置。
4 PORT1 该 编 程 配 置 口 是 一 通 用 下 载 口 , 可 对 任 意 工 作 电 压 的 FPGA 进行配置,缺点
是 必 须 通 过 “ POWER” 插 口 为 GWCNF板 外 加 5V工 作 电 源 。
3 J9 短 路 帽 选 插 “ S” 对 小 于 等 于 10K30 的 FPGA 配 置 ; 短 路 帽 选 插 “ L” 对 大
于 10K30 的 FPGA 配 置 。 注 意 , 无 论 所 插 的 ROM 为 多 大 , 每 个 ROM 只 能 放 置
一 个 HEX 配 置 文 件 。
4 J5 短 路 帽 选 插 “ ROM2” 则 选 择 左 侧 ROM 中 的 文 件 进 行 配 置 ; 短 路 帽 选
插 “ ROM1” 则 选 择 右 侧 ROM 中 的 文 件 进 行 配 置 , 若 拔 去 短 路 帽 , 则 可 通 过 J1
由外部控制选择。
5 J11 当 ROM 为 华 邦 公 司 29C 系 列 ( 或 AD18地 址 信 号 设 置 于 芯 片 第 1 脚 的 ROM ) ,
短 路 帽 必 须 选 插 “ W29” ; 而 其 他 ROM ( 所 有 将 AD18地 址 信 号 设 置 于 芯 片 第
31 脚 的 ROM ) 则 短 路 帽 选 插 “ W27” 。
6 J4 ROM 为 28 脚 双 列 直 插 器 件 , 短 路 帽 选 插 “ 28P” ; 32 脚 的 器 件 , 短 路 帽 选

60
插 “ 32P” 。
芯片向底插入对齐。
7 J2 有 三 排 3 针 座 , 若 将 3 短 路 帽 都 插 于 左 侧 “ MCU-CNTRL” , 则 ROM 中 的 配 置
文 件 的 选 择 由 GWCNF板 上 的 单 片 机 和 键 B 决 定 ( 如 果 ROM 中 含 有 多 个 配 置 文
件 ) ; 但 若 将 3 短 路 帽 都 插 于 右 侧 “ OUD-CNTRL” , 则 ROM 中 的 配 置 文 件 的
选 择 由 J3 跳 线 选 择 或 由 用 户 自 己 的 单 片 机 电 路 通 过 J1 口 上 的 8 针 进 行 外 部 控
制 ( 这 时 J3 和 J5 上 的 短 路 帽 都 需 拔 除 ) 。
8 J3 当 J2 选 择 “ “ OUD-CNTRL” 时 , 通 过 J3 短 路 帽 的 8 种 不 同 插 法 可 分 别 将 ROM
中 对 应 的 配 置 文 件 下 载 进 FPGA 中 。 例 如 , 设 GWCNF上 有 ROM 27C4001 , 若
希 望 将 地 址 为 : 40000-4FFFF 区 域 的 配 置 文 件 下 载 进 FPGA 中 , 则 可 对 J3 的 3
个 插 座 从 上 至 下 选 插 “ 0” 、 “ 0” 、 “ 1” , 然 后 按 一 下 复 位 键 键 A , 此
区 域 的 文 件 即 刻 下 载 进 FPGA 中了。但也可以通过打开电源开关直接配置编
程。
9 J1 若 用 户 希 望 利 用 自 己 的 单 片 机 电 路 控 制 GWCNF板 , 以 便 实 现 “ 多 任 务 重 配
置 ” 功 能 , 可 通 过 J1 口 上 的 8 针 进 行 外 部 控 制 ( 这 时 J3 和 J5 上 的 短 路 帽 都 需
拔 除 ) , 这 样 最 多 可 以 有 16 种 选 择 , 即 可 以 只 用 一 片 FPGA 发 挥 16 片 FPGA
的功能!
12 POWER 5V工 作 电 源 座
13 键A 复 位 键 , 每 按 一 次 键 , 将 对 FPGA 配置一次。但也可以通过打开电源开关直
接配置编程。
14 键B 若 将 3 短 路 帽 都 插 于 左 侧 “ MCU-CNTRL” , 则 ROM 中 的 配 置 文 件 的 选 择 由
GWCNF板 上 的 单 片 机 和 键 B 决 定 , 有 键 B 控 制 发 光 管 A 、 B 、 C , 以 选 择 配
置文件的地址。
15 发光管 如果编程配置正确,此3 个发光管会连续闪动,这时可以连续按动键B 选择
A 、B 配置文件。A 为高位,C 为低位。若通过键B 选择A 亮、B 亮、C 不亮,即
、C 选 择 了 “ 110” , 即 6 , 这 时 若 按 动 键 A 复 位 , 则 将 ROM 中 60000-6FFFF 区 域
的 配 置 文 件 下 载 进 FPGA 中了。

第 八 章 GW48-PK 系 统 LCD 液 晶 屏 使 用 方 法
第 一 节 GDM12864A LCM 图 形 液 晶 显 示 模 块 的 电 路 特

一、GDM12864A 的电特性
配置于GW48-PK 系统的LCD GDM12864A 是带显示存储器的图形液晶显示列驱动控制器。它的特
点是内置64×64 位的显示存储器,显示屏上各像素点的显示状态与显示存储器的各位数据—一对应,
显示存储器的数据直接作为图形显示的驱动信号。显示数据为“1” ,相应的像素点显示;显示数
据为“0“ ,相应的像素点就不显示。同时GDM12864A 配备了一套显示存储器的管理电路和与计算
机接口电路,允许计算机直接访问显示存储器,也就是说GDM12864A 可以直接与计算机的总线连接。
GDM12864A 的主要特性为:
· 拥有64×64 位(512 字节)的显示存储器,其数据直接作为显示驱动信号。
·8 位并行数据接口,适配M6800 系列时序。
·64 路列驱动输出。

61
· 简单的操作指令 显示开关设置,显示起始行设置,地址指针设置和数据读/写等指令。
· 低功耗,在显示期间功耗最大为2mW。
·宽电压工作 Vcc=2.7V ~5.5V Vee=OV ~-10V

二、模块特性
GDM12864A 的接口电路定义如下表所示。
序号 符号 电平 状 功能

1 GND 0V - 电源地
2 Vcc 5.0V - 逻辑电源正
3 V0 0 ~- - 液晶显示驱动电源
5V
4 D/I H/L 输 寄存器选择信号

7 R/W H/L 输 读/写选择信号

8 E H/L 输 使能信号

7 DB0 H/L 三 数据总线(最低位)

8 DB1 H/L 三 数据总线

9 DB2 H/L 三 数据总线

62
10 DB3 H/L 三 数据总线

11 DB4 H/L 三 数据总线

12 DB5 H/L 三 数据总线

13 DB6 H/L 三 数据总线

14 DB7 H/L 三 数据总线(最高位)

15 CS2 H 输 片 选 2 ( 高 电 平 有
入 效)
16 CS1 H 输 片 选 1 ( 高 电 平 有
入 效)
17 /RES L 输 复位信号(低电平有
入 效)
18 VEE - 输 LCD 驱 动 负 电 压

19 A 4.2V 输 背光电源(+ )

20 K 0V - 背光电源(- )
GDM12864A 接口信号中的两个片选信号的组合定义见下表。
CS CS GDM12864A
1 2
0 0 禁止使用
0 1 左区
1 0 右区
1 1 未选
三、 GDM12864A 的操作时序图

63
第 二 节 GDM12864A 图 形 液 晶 显 示 模 块 的 软 件 特 性

了解GDM12864A 图形液晶显示模块的电路特性后,要使用GDM12864A 图形液晶显示模块还需要


熟悉其软件特性,即GDM12864A 的指令功能,才能很好地应用图形液晶显示模块。GDM12864A 的指
令功能非常简单,指令一览表如下表所示。
GDM12864A 指令表
指令名称 控制信号 控制代码
D/I R/W D7 D6 D5 D4 D3 D2 D1 D0
显示开头设置 0 0 0 0 1 1 1 1 1 D
显示起始行设置 0 0 1 1 L5 L4 L3 L2 L1 L0
页面地址设置 0 0 1 0 1 1 1 P2 P1 P0
列地址设置 0 0 0 1 C5 C4 C3 C2 C1 C0
读取状态字 0 1 BUSY 0 ON/OFF REST 0 0 0 0
写显示数据 1 0 数 据
读显示数据 1 1 数 据
GDM12864A 一共有七条指令,从作用上可分为两类。第一条和第二条指令为显示状态设置类;
其余指令为数据读/写操作指令。下面详细解释各个指令的功能:
HD61202 操作流程图
● 读状态字(Status Read )
RS R/W DB7 DB7 DB5 DB4 DB3 DB2 DB1 DB0
0 1 BUS O ON / RESET 0 0 0 0
Y OFF
状态字是计算机了解GDM12864A 当前状态的唯一的信息渠道。状态
字为一个字节,其中仅有3 位有效位,它们是:
BUSY 表示当前 GDM12864A 接口控制电路运行状态。 BUSY=1 表
示 GDM12864A 正在处理计算机发来的指令或数据。此时接口电路被封
锁,不能接 受除 读 状态 字 以 外的 任何 操 作。 BUSY = 0 表示 GDM12864A
接口控制电路已处于“准备好”状态,等待计算机的访问。
ON /OFF 表示当前的显示状态。 ON/OFF=l 表示关显示状态,ON/
OFF=0 表示开显示状态。
RESET 表示当前 GDM12864A 的工作状态,即反映RST 端的电平
状 态 。 当 RST 为 低 电 平 状 态 时 , GDM12864A 处 于 复 位 工 作 状 态 ,
RESET=1 。 当 RST 为 高 电 平 状 态 时 , GDM12864A 为 正 常 工 作 状 态 ,
RESET=0 。
在指令设置和数据读写时要注意状态字中的BUSY 标志。只有在BUSY=0 时,计算机对GDM12864A
的 操 作 才 能 有 效 。 因 此 计 算 机 在 每 次 对 GDM12864A 操 作 之 前 , 都 要 读 出 状 态 字 判 断 BUSY 是 否 为
“0” 。若不为“0” ,则计算机需要等待,直至 BUSY=0 为止。
● 显示开关设置(Display on /off )
RS R/W DB7 DB7 DB5 DB4 DB3 DB2 DB1 DB0
0 O 1 1 1 1 1 D
该指令设置显示开/关触发器的状态,由此控制显示数据锁存器的工作方式,从而控制显示屏
上的显示状态。D 位为显示开/关的控制位。当D=1 为开显示设置,显示数据锁存器正常工作,显
示屏上呈现所需的显示效果。此时在状态字中 ON/OFF=0 。当 D=0 为关显示设置,显示数据锁
存器被置零,显示屏呈不显示状态,但显示存储器并没有被破坏,在状态字中 ON/OFF =1 。
● 显示起始行设置(Display Start Line )
RS R/W DB7 DB7 DB5 DB4 DB3 DB2 DB1 DB0

64
0 0 1 1 显 示 起 始 行 ( 0~63 )
该指令设置了显示起始行寄存器的内容。HD612O2U 有64行显示的管理能力,该指令中 L5~
LO为显示起始行的地址,取值在O ~3FH (1 ~64行)范围内,它规定了显示屏上最顶一行所对应
的显示存储器的行地址。如果定时间隔地,等间距地修改(如加一或减一)显示起始行寄存器的内
容,则显示屏将呈现显示内容向上或向下平滑滚动的显示效果。
● 页面地址设置[Set Page (X address )]
RS R/W DB7 DB7 DB5 DB4 DB3 DB2 DB1 DB0
0 0 1 0 1 1 1 Page(0~7)
该指令设置了页面地址—X 地址寄存器的内容。GDM12864A 将显示存储器分成8 页,指令代码
中P2~PO就是要确定当前所要选择的页面地址,取值范围为0 ~7H,代表第l ~8 页。该指令规定
了以后的读/写操作将在哪一个页面上进行。
● 列地址设置(Set Y address )
RS R/W DB7 DB7 DB5 DB4 DB3 DB2 DB1 DB0
0 1 Y address(0~63)
该指令设置了Y 地址计数器的内容,C5~CO=O ~3FH (1 ~64)代表某一页面上的某一单元
地址,随后的一次读或写数据将在这个单元上进行。Y 地址计数器具有自动加一功能,在每一次读
/写数据后它将自动加一,所以在连续进行读/写数据时,Y 地址计数器不必每次都设置一次。
页面地址的设置和列地址的设置将显示存储器单元唯一地确定下来,为后来的显示数据的读/
写作了地址的选通。
● 写显示数据(Write Display Data )
RS R/W DB7 DB7 DB5 DB4 DB3 DB2 DB1 DB0
显 示 数 据
该操作将 8 位数据写入先前已确定的显示存储器的单元内。操作完成后列地址计数器自动加一。

● 读显示数据(Read Display Data )


RS R/W DB7 DB7 DB5 DB4 DB3 DB2 DB1 DB0
显 示 数 据
该操作将GDM12864A 接口部的输出寄存器内容读出,然后列地址计数器自动加一。
DDRAM 地址表
CS1=1 CS2=1
Y= 0 1 。 62 63 0 1 。 62 63 行
。 。 号
。 。
DB DB DB DB0 DB0 DB0 DB0 DB DB DB 0
0 0 0 ↓ ↓ ↓ ↓ 0 0 0 ↓
X=0
↓ ↓ ↓ DB7 DB7 DB7 DB7 ↓ ↓ 7
DB DB DB DB DB DB

7 7 7 7 7 7
DB DB DB DB0 DB0 DB0 DB0 DB DB DB 8
X=7
0 0 0 ↓ ↓ ↓ ↓ 0 0 0 ↓
↓ ↓ ↓ DB7 DB7 DB7 DB7 ↓ ↓ ↓ 55
DB DB DB DB DB DB
7 7 7 7 7 7
DB DB DB DB0 DB0 DB0 DB0 DB DB DB 56
0 0 0 ↓ ↓ ↓ ↓ 0 0 0 ↓
↓ ↓ ↓ DB7 DB7 DB7 DB7 ↓ ↓ ↓ 63

65
DB DB DB DB DB DB
7 7 7 7 7 7
第 三 节 GDM12864A图 形 液 晶 显 示 模 块 的 接 口 技 术
由于 GDM12864A 组成的驱动控制系统的接口时序适配 M6800 系列的读/写时序,所以在与
Intel8080 时序的计算机连接时需要有时序的转换。现以国内常用的8051系列单片机8031为例,说
明GDM12864A 模块接口技术。
内置GDM12864A 图形液晶显示模块与计算机的连接方式有两种,一种为直接访问方式,一种为
间接控制方式。
一、直接访问方式
直接访问方式就是将液晶显示模块的接口作为存储器或 I /O 设备直接挂在计算机总线上,
计算机以访问存储器或 I
/O 设备的方式操作液晶
显示模块的工作。直接访
问方式的接口实用电路如
下图所示。在图中,计算
机 8031 通 过 高 位 地 址 A11
控 制 CS2 ; A10 控 制
CS1 ;以选

接访问方式的实用电路图
通液晶显示屏上各区的控
制 器 GDM12864A ; 同 时
8031 用 地 址 A9 作 为 R / W
信号控制数据总线的数据
流 向 ; 用 地 址 A8 作 为 D /
I 信号控制寄存器的选择;E 信号由8031的读信号RD和写信号WR合成产生。从而实现计算机对内置
GDM12864A 图形液晶显示模块的电路连接。电位器用于显示对比度的调节。

二、间接控制方式
间接控制方式是计算机通
过自身的或系统中的并行接口
与液晶显示模块连接,如
8031的P1和P3口, 8255或
Z80 -PIO 等并行接口芯片以
及像74LS373 类的锁存器等。
计算机通过对这些接口的操作,
以达到对液晶显示模块的控制。
这种方式的特点是电路简单,
控制时序由软件实现,可以实
现高速计算机与液晶显示模块
的接口。实用电路图如下图所
示。在图中电路中以 8031的P1口作为数据口,P2.4为CSA , P2.3为CSB , P2.2为D /
I ,P2.1为R/W 和P2.0为E 等信号。电位器用于显示对比度的调节。
间接控制方式的实用电路
GDM12864A 驱动子程序如下:
CSA EQU P2.4 ;片选 CSA

66
CSB EQU P2.3 ; 片 选 CSB
D/I EQU P2.2 ;寄存器选择信号
R/ W EQU P2.1 ;读/写选择信号
E EQU P2.0 ;使能信号
1 .左区驱动子程序(GDM12864A 的左区)
(1 )写指令代码子程序
PRMO : CLR CS2 ;片选设置为“ 01”
SETB CS1 ;
CLR D/ I ; D / I=0
SETB R/ W ; R / W=1
PRM01 : MOV P1 , # OFFH ; P1 口 置 ” 1”
SETB E ; E=1
MOV A, P0 ;读状态字
CLR E ; E=0
JB ACC.7 , PRM01 ; 判 “ 忙 ” 标 志 为 “ 0” 否 , 否 再 读
CLR R/ W ; R / W=0
MOV P1 , COM ;写指令代码
SETB E ; E=1
CLR E ; E=0
RET
(2 )写显示数据子程序
PRM1 : CLR CS2 ;片选设置为“ 01”
SETB CS1 ;
CLR D/ I ; D / I=0
SETB R/ W ; R / W=1
PRMll : MOV P0 , # OFFH ; P1 口 置 “ 1”
SETB E ; E=1
MOV A, P0 ;读状态字
CLR E ; E=0
JB ACC.7 , PRM11 ; 判 “ 忙 ” 标 志 为 “ 0” 否 , 否 再 读
SETB D/ I ; D / I=1
CLR R/ W ; R / W=0
MOV P0 , DAT ;写数据
SETB E ; E=1
CLR E ; E=0
RET
(3 )读显示数据子程序
PRM2 : CLR CS2 ;片选设置为“ 01”
SETB CS1 ;
CLR D/ I ; D/I=0
SETB R/ W ; R / W=1
PRM21: MOV P0 , # OFFH ; P1 口 置 “ 1”
SETB E ; E=1
MOV A, P0 ;读状态字
CLR E ; E=0
JB ACC.7 , PRM21 ; 判 “ 忙 ” 标 志 为 “ 0” 否 , 否 再 读
SETB D/ I ; D / I=1

67
MOV P0 , # OFFH ; P1 口 置 “ 0”
SETB E ; E=1
MOV DAT , P0 ;读数据
CLR E ; E=0
RET
3 .右区驱动子程序(GDM12864A 的右区)
(l )写指令代码子程序(右)
PRRO : SETB CS2 ;片选设置为“ 10”
CLR CS1 ;
CLR D/ I ; D / I=0
SETB R/ W ; R / W=1
PRR01 : MOV P0 , # OFFH ; P1 口 置 “ 1”
SETB E ; E=1
MOV A, P0 ;读状态字
CLR E ; E=0
JB ACC . 7 , PRR01 ;判“忙”标志为“ 0” 否 , 否 再 读
CLR R/ W ; R / W=0
MOV P0 , COM ;写指令代码
SETB E ; E=1
CLR E ; E=0
RET
(2 )写显示数据子程序(右)
PRR1: SETB CS2 ;片选设置为“ 10”
CLR CS1 ;
CLR D/ I ; D / I=0
SETB R/ W ; R / W=1
PRRll : MOV P0 , # OFFH ; P1 口 置 “ 1”
SETB E ; E=1
MOV A, P0 ;读状态字
CLR E ; E=0
JB ACC . 7 , PRRll ;判“忙”标志为“ 0” 否 , 否 再 读
SETB D/ I ; D / I=1
CLR R/ W ; R / W=0
MOV P0 , DAT ;写数据
SETB E ; E=1
CLR E ; E=0
RET
(3 )读显示数据子程序(右)
PRR2 : SETB CS2 ;片选设置为“ 10”
CLR CS1 ;
CLR D/ I ; D / I=0
SETB R/ W ; R / W=1
PRR21 : MOV P0 , # OFFH ; P1 口 置 “ l”
SETB E ; E=1
MOV A, P0 ;读状态字
CLR E ; E=0
JB ACC . 7 , PRR21 ;判“忙”标志为“ 0” 否 , 否 再 读

68
SETB D/ I ; D/I=1
MOV P0 , # OFFH ; P1 口 置 “ 0”
SETB E ; E=1
MOV DAT , P1 ;读数据
CLR E ; E=0
RET
在GDM12864A 的应用时,显示屏被分为左右两个区,驱动子程序分别为上述的左区和右区的驱
动子程序。
例 中文字符写入子程序
汉字显示是国内应用图形液晶显示模块的目的之一。由于GDM12864A 显示存储器的特性,所以
不能将计 算机 内的 汉字库 提出直 接使用, 需要将其 旋转 90 度 后 再写 入。 这 里使用 提 取 汉 字软件
PICKHZB .EXE ,将所采的汉字从计算机内汉字库提取并旋转90度后生成专用的用户字库。其生成
字库的格式是按列排列,每两个字节为一列,一个汉字占32字节。程序清单如下:
CS1 EQU P2.3H ;端口定义
CS2 EQU P2.4H
DI EQU P2.2H
RW EQU P2.1H
E EQU P2.0H
X EQU 20H
Y EQU 21H
ZC EQU 22H
LFT EQU 7FH
ORG 0H
AJMP START
ORG 30H
START: MOV 20H,#3EH ; 关 显 示 设 置
ACALL WI
INC 20H ;开显示设置
ACALL WI
MOV 20H,#0C0H ; 设 置 显 示 起 始 行 为 第 一 行
ACALL WI
MOV X,#0 ;设置 X 为第1 页
MOV Y,#0 ; 列 计 数 器 Y=0
CLR LFT ; LCD 屏 幕 ( 左 )
MOV DPTR,#HANG ;杭
ACALL HZ_1
MOV Y,#1
MOV DPTR,#ZHOU ;州
ACALL HZ_1
MOV Y,#2
MOV DPTR,#KANG ;康
ACALL HZ_1
MOV Y,#3
MOV DPTR,#XIN ; 芯
ACALL HZ_1
MOV Y,#0 ; 列 计 数 器 Y=0
SETB LFT ; LCD 屏 幕 ( 右 )

69
MOV DPTR,#DIAN ;电
ACALL HZ_1
MOV Y,#1
MOV DPTR,#ZI ; 子
ACALL HZ_1
MOV Y,#2
MOV DPTR,#GONG ;公
ACALL HZ_1
MOV Y,#3
MOV DPTR,#SI ; 司
ACALL HZ_1
SJMP $
;以下程序显示一个汉字
HZ_1: MOV ZC,#0
MOV A,#0B8H ; X addr 页 面 地 址 暂 存 器 设 置
ACALL HZ_3
MOV ZC,#1
MOV A,#0B9H
HZ_3: ADD A,X ;
MOV 20H,A
ACALL WI
MOV A,Y
SWAP A
ADD A,#40H ;设置列计数器 Y
MOV 20H,A
ACALL WI
HZ_0: MOV R2,#16 ;取汉字字模
HZ_2: MOV A,ZC
MOVC A,@A+DPTR
MOV 20H,A
MOV A,ZC
ADD A,#2
MOV ZC,A
JB LFT,HZ_5
ACALL WD1
SJMP HZ_6
HZ_5: ACALL WD2
HZ_6: DJNZ R2,HZ_2
RET
RDY : CLR DI ;读状态标志
CLR RW
SETB E
MOV A , P0 ; 读 LCD 状 态
CLR E
JB ACC.7,RDY ; 检 测 BUSY 位
RET
WI: SETB CS1 ;写控制指令

70
SETB CS2
LCALL RDY ; 检 测 BUSY 位
CLR DI
CLR RW
MOV P0,20H ; 向 LCD 写 数 据
SETB E ; 使 能 信 号 E=1
CLR E ; 使 能 信 号 E=0
CLR CS1
CLR CS2
RET
WD1: SETB CS1 ;写显示数据(左)
LCALL RDY ; 检 测 BUSY 位
SETB DI
CLR RW
MOV P0,20H ;输 出 数 据
SETB E
CLR E
CLR CS1
RET
WD2: SETB CS2 ;写显示数据(右)
LCALL RDY
SETB DI
CLR RW
MOV P0,20H ;输出数据
SETB E ; 使 能 信 号 E=1
CLR E ; 使 能 信 号 E=0
CLR CS2
RET
;汉字点阵“杭州康芯电子有限公司”
hang: DB 08H,04H,10H,03H,0D0H,00H,0FFH,0FFH
DB 90H,80H,10H,41H,08H,20H,0C8H,1FH
DB 49H,00H,4EH,00H,48H,00H,0E8H,3FH
DB 4CH,40H,08H,40H,00H,70H,00H,00H
ZHOU: DB 80H,00H,70H,40H,00H,30H,0FFH,0FH
DB 00H,00H,10H,00H,60H,00H,00H,00H
DB 0FEH,3FH,00H,00H,10H,00H,60H,00H
DB 00H,00H,0FFH,0FFH,00H,00H,00H,00H
KANG: DB 00H,40H,00H,30H,0FCH,0FH,44H,40H
DB 54H,23H,54H,15H,54H,49H,55H,18H
DB 0FEH,7FH,54H,05H,54H,09H,54H,11H
DB 0F4H,29H,46H,64H,44H,20H,00H,00H
XIN: DB 04H,08H,04H,07H,04H,00H,04H,3FH
DB 1FH,40H,04H,40H,44H,40H,84H,40H
DB 04H,43H,04H,40H,1FH,40H,04H,40H
DB 04H,70H,06H,01H,04H,0EH,00H,00H
DIAN: DB 00H,00H,0F8H,07H,48H,02H,48H,02H
DB 48H,02H,48H,02H,0FFH,3FH,48H,42H

71
DB 48H,42H,48H,42H,48H,42H,0FCH,47H
DB 08H,40H,00H,70H,00H,00H,00H,00H
ZI: DB 80H,00H,80H,00H,82H,00H,82H,00H
DB 82H,00H,82H,40H,82H,80H,0E2H,7FH
DB 0A2H,00H,92H,00H,8AH,00H,86H,00H
DB 80H,00H,0C0H,00H,80H,00H,00H,00H
YOU: DB 04H,04H,04H,02H,04H,01H,84H,00H
DB 0E4H,0FFH,3CH,09H,27H,09H,24H,09H
DB 42H,09H,42H,49H,24H,89H,0F4H,7FH
DB 42H,00H,06H,00H,04H,00H,00H,00H
XIAN: DB 00H,00H,7FH,0FFH,02H,08H,22H,10H
DB 0DAH,08H,06H,07H,00H,00H,0FEH,0FFH
DB 92H,24H,92H,42H,92H,42H,92H,14H
DB 0FFH,22H,02H,61H,00H,20H,00H,00H
GONG: DB 00H,01H,00H,01H,80H,00H,40H,30H
DB 30H,28H,0CH,42H,00H,23H,0C0H,20H
DB 06H,20H,18H,28H,20H,30H,40H,60H
DB 80H,00H,80H,01H,80H,00H,00H,00H
SI: DB 10H,00H,10H,00H,92H,3FH,92H,10H
DB 92H,10H,92H,10H,92H,10H,92H,10H
DB 0D2H,3FH,9AH,00H,12H,40H,02H,80H
DB 0FFH,7FH,02H,00H,00H,00H,00H,00H

72

You might also like