EDA实验讲义 - 图文

更新时间:2024-03-25 17:15:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

EDA技术实验讲义

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

杭州电子工业学院

www.kx-eda.com

目 录

第一章 GW48 EDA系统使用说明

第一节 GW48教学实验系统原理与使用介绍 第二节 实验电路结构图

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

第二章 GW-DSP适配板使用说明

第三章 GW48系统专用配套之GWDVP-B电子设计应用板使用说明 第四章 (有关内容请见光盘“PDF重要文件” ) 第五章 原理图输入设计方法

第一节 1位全加器设计向导

第二节 设计有时钟使能的两位十进制计数器

第六章VHDL设计初步

第一节 2选1多路选择器的VHDL描述 第二节 寄存器描述及其VHDL语言现象 第三节 VHDL文本输入设计方法初步

【实验1】 1位全加器原理图输入设计 ; 【实验2】 1位全加器VHDL文本输入设计 【实验3】 有时钟使能的两位十进制计数器原理图输入设计 【实验4】 两位十进制频率计原理图输入设计 【实验5】 8位串入并出寄存器原理图输入设计 【实验6】 2选1多路选择器VHDL设计 【实验7】 8位硬件加法器VHDL设计

【实验8】 含异步清0和同步时钟使能的4位加法计数器 【实验9】 7段数码显示译码器设计 【实验10】 数控分频器的设计 【实验11】 4位十进制频率计设计

【实验12】 用状态机实现序列检测器的设计

【实验13】 用状态机对ADC0809的采样控制电路实现 【实验14】 含有FIFO存储器的A/D采样控制电路设计 【实验15】 硬件电子琴电路设计

【实验16】 硬件的乐曲自动演奏电路设计 【实验17】 波形发生与扫频信号发生器电路设计 【实验18】 原理图输入设计含LPM的电路 【实验19】 移位相加8位硬件乘法器电路设计 【实验【实验【实验【实验【实验

20】 FPGA、单片机及PC机接口控制电路设计 21】虚拟示波器与频谱分析电路设计 22】直接数字综合(DDS)电路设计

23】电子设计竞赛项目“等精度频率计设计” 24】 FIR数字滤波器设计

第七章GWCNF型FPGA掉电保护配置器应用

2

第一章 GW48 EDA系统使用说明

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

一、GW48系统使用注意事项

a:闲置不用GW48 EDA系统时,关闭电源,拔下电源插头!!!

b:EDA软件安装方法可参见光盘中相应目录中的中文README.TXT;详细使用方法可参阅本书或《EDA技术实用教程》、或《VHDL实用教程》中的相关章节。

c:在实验中,当选中某种模式后,要按一下右侧的复位键,以使系统进入该结构模式工作。 d:换目标芯片时要特别注意,不要插反或插错,也不要带电插拔,确信插对后才能开电源。其它接口都可带电插拔(当适配板上的10芯座处于左上角时,为正确位置)。

e:系统板上的空插座是为单片机AT89C2051准备的,除非进行单片机与FPGA/CPLD的接口实验和开发,平时在此座上不允许插有任何器件,以免与系统上的其它电路发生冲突。单片机与系统的连接情况可参阅以下的附图2-13。该单片机和相应的编程器需自备或另购。 f:对工作电源为5V的CPLD(如1032E/1048C、95108或7128S等)下载时。最好将系统的电路“模式”切换到“ b”,以便使工作电压尽可能接近5V。

g:GW48详细使用方法可参见教学软件:EDA-VHDL多媒体CAI.ppt

二、GW48系统主板结构与使用方法

附图1-1A和1-1C为GW48型EDA实验开发系统的主板结构图,该系统的实验电路结构是可控的。即可通过控制接口键SW9,使之改变连接方式以适应不同的实验需要。因而,从物理结构上看,实验板的电路结构是固定的,但其内部的信息流在主控器的控制下,电路结构将发生变化。这种“多任务重配置”设计方案的目的有3个:1.适应更多的实验与开发项目;2. 适应更多的PLD公司的器件;3. 适应更多的不同封装的FPGA和CPLD器件。系统板面主要部件及其使用方法说明如下(请参看相应的实验板板面和附图1-1A/C)。

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

以下是对GW48系统主板功能

块的注释,但请注意,有的功能块 附表1-1 在线编程坐各引脚与不同PLD公司器件编程下载接口说明 PLD公司 LATTICE ALTERA/ATMEL XILINX VANTIS 仅GW48-GK系统存在:

编程座 IspLSI CPLD FPGA CPLD FPGA CPLD (1) SW9 :按动该键能使实引脚 验板产生12种不同的实验电路结 TCK (1) SCLK TCK DCLK TCK CCLK TCK TDO (3) MODE CONF_DONTDO DONE TMS 构。这些结构如第二节的13 张实 TDO E 验电路结构图所示。例如选择了

TMS (5) ISPEN TMS nCONFIG TMS /PROGRAM ENABLE “NO.3”图,须按动系统板上的 nSTA (7) SDO nSTATUS TDO SW9键,直至数码管SWG9显示“3”, TDI (9) SDI TDI DATA0 TDI DIN TDI SEL0 GND VCC* VCC* GND GND VCC* 于是系统即进入了NO.3 图所示的

SEL1 GND VCC* VCC* VCC* VCC* GND 实验电路结构。

注:VCC旁的 * 号对混合电压FPGA/CPLD,应该是VCCIO (2) B2 :这是一块插于主系统

板上的目标芯片适配座。对于不同的目标芯片可配不同的适配座。可用的目标芯片包括目前

3

散热器C3850M晶振FUSE电源开关数码8数码7数码6数码5数码4数码3数码2数码1D8S1D7D6D5D4D3D2D1K1检测电源扬声器频率计接口ByteBlasterByteBlasterMV1在线下载接口电路2低频组中频组Clock0目标芯片适配座B2J3B4 模式指示EDA实验开发目标芯片CPLD/FPGACON2在线下载口高频组目标板插座2目标板插座1显示控制器件2显示控制器件1PS/2接口CON1在系统配置/下载模块鼠标接口KONXINSWG9 VGA视频接口JP1AJP1BJP1C时钟频率选择B3J8VGA视频接口电路B4J2在线下载通讯接口ASIC附图1-1A GW48-CK实验开发系统的板面结构图接口电路RS-232RS-232VR1UART接口AIN0键A系统复位D13D12D11D10D9数模转换器件模数转换器件单片机接口器件A/D信号输入模拟接口模式配置键D16D15D14键BB8时钟发生电路AIN1电位器A/D信号输入JP2AOUT接口电路切换座5V ,+/-12V3.3V, 2.5V1.8VD/A信号输出键8键7键6键5键4键3键2键1电压源模块 JP1AJP1BJP1C时钟频率选择100M晶振Clock0频率计J8视频接口电路B8时钟发生电路扬声器接口电路RS-232VGAS150M晶振串行总线器件B3低频组中频组高频组B4数码1数码12键A显示控制器件4系统复位数码2D22目标板插座2CON2大容量RAM/ROM数码3D11目标芯片适配座B2数码12D3数码4数码11EDA实验开发D4CPLD/FPGAD12目标芯片数码10模数转换器件数码5D13数码9D14数码6D6在线下载口D15J3B数模转换器件CON1数码9数码7D71目标板插座1显示控制器件1在线下载接口D16单片机接口器件模式配置键配置/下载在系统数码8散热器ByteBlasterMV接口电路切换座显示控制器件3模拟接口模式指示接口电路ASICSWG9KONXINFUSE键盘接口检测电源鼠标接口A/D信号输入电位器VR1A/D信号输入JP2电源开关在线下载通讯接口PS/2接口PS/2接口AOUTAIN0AIN1C38K1J2D/A信号输出键10键9ByteBlaster显示控制器件2模块键BD8键8键7键6键5D5键4键3键2D10键1D9键11D1键121.8VUSB接口视频接口UART接口电压源模块5V ,+/-12V3.3V, 2.5VVGARS-232 附图1-1C GW48-GK实验开发系统的板面结构图 世界上最大的六家FPGA/CPLD厂商几乎所有CPLD、FPGA和所有ispPAC等模拟EDA器件 。第三节的5

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

(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器件一致,只是要对主板的跳线作一选择(见GW48系统主板):

JV2:跳线JV2对FPGA/CPLD芯核电压2.5V或1.8V作选择; SEL18:此跳线仅GW48-GK系统设有。跳线SEL18选择“AH18”(对于普通GW48-GK系统);选择“BH18”(对于ASIC实验系统GW48-GK/IC)。

JVCC:跳线JVCC对芯片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 :实验信号控制键,此4个键不受“多任务重配置”电路控制,使用方法参考“实验电路结构 NO.5”。

(8) 数码管1~8/发光管D1~D16 :也受“多任务重配置”电路控制,它们的连线形式也需参照第二节的电路图。

(9) 数码管9~14/发光管D17~D22 :不受“多任务重配置”电路控制,它们的连线形式和使用方法参考“实验电路结构 NO.5”。 (10)“时钟频率选择”P1A/JP1B/JP1C :为时钟频率选择模块。通过短路帽的不同接插方式,使目标芯片获得不同的时钟频率信号。对于“CLOCK0”JP1C,同时只能插一个短路帽,以便选择输向“CLOCK0”的一种频率:

信号频率范围: 1Hz – 50MHz(对GW48-CK系统) 信号频率范围:0.5Hz – 100MHz(对GW48-GK系统),

由于CLOCK0可选的频率比较多,所以比较适合于目标芯片对信号频率或周期测量等设计项目的信号输入端。JP1B分三个频率源组,即如系统板所示的“高频组”、“中频组”和“低频组”。它们分别对应三组时钟输入端。例如,将三个短路帽分别插于JP1B座的2Hz、1024Hz和12MHz;而另三个短路帽分别插于JP1A座的CLOCK4、CLOCK7和CLOCK8,这时,输向目标芯片的三个引脚:CLOCK4、CLOCK7和CLOCK8分别获得上述三个信号频率。需要特别注意的是,每一组频率源及其对应时钟输入端,分别只能插一个短路帽。也就是说,通过JP1A/B的组合频率选择,最多只能提供三个时钟频率。 (11)扬声器S1:目标芯片的声讯输出,与目标芯片的“SPEAKER”端相接,即PIO50。通过此口可以进行奏乐或了解信号的频率。

(12) PS/2接口:通过此接口,可以将PC机的键盘和/或鼠标与GW48系统的目标芯片相连,从而完成PS/2通信与控制方面的接口实验。

(13)VGA视频接口:通过它可完成目标芯片对VGA显示器的控制。

(14) 单片机接口器件:它与目标板的连接方式也已标于主系统板上:连接方式可参见第2节的“实验电路结构 NO.5”。注意:平时不能插单片机,以防冲突。

(15) RS-232串行通讯接口:此接口电路是为单片机与PC机通讯准备的,由此可以使PC机、单

6

片机、FPGA/CPLD三者实现双向通信。当目标板上FPGA/CPLD器件需要直接与PC机进行串行通讯时,可参见实验电路结构图NO.5,将标有“JMCU”处的两个插座的短路帽同时向下插,以使单片机的P3.0和P3.1分别与目标芯片的PIO31和PIO30相接。即使RS232的通信接口直接与目标器件FPGA的PIO30/PIO31相接。

而当需要使PC机的RS232串行接口与单片机的P3.0和P3.1口相接时,则应将标有“JMCU”处的两个插座的短路帽同时向上插(平时不用时也应保持这个位置)。

(16) AOUT/JP2 D/A转换 :利用此电路模块,可以完成FPGA/CPLD目标芯片与D/A转换器的接口实验或相应的开发。它们之间的连接方式可参阅第二节的“实验电路结构 NO.5” :D/A的模拟信号的输出接口是“AOUT”。主板左下角的JP2为转换方式和输出方式选择跳线座。如系统板上所示:

1. 当短路帽插于“D/A锁存”处时,则D/A的信号WR将受PIO36信号的控制,完成数据锁存的

输入方式;

2. 当短路帽插于“D/A直通”处时,则D/A的信号WR不受PIO36信号的控制,数据将直通输入; 3. 当分别短路“滤波0”与“滤波1”时,D/A的模拟输出将获得不同程度的滤波效果 。另外

须注意,进行D/A接口实验时,需要打开右下角的+/-12伏工作电源,结束后关上此电源。

(17) ADC0809/AIN0/AIN1 :外界模拟信号可以分别通过系统板左下侧的两个输入端“AIN0”和“AIN1”进入A/D转换器ADC0809的输入通道IN0和IN1,ADC0809与目标芯片直接相连。通过适当设计,目标芯片可以完成对ADC0809的工作方式确定、输入端口选择、数据采集与处理等所有控制工作,并可通过系统板提供的译码显示电路,将测得的结果显示出来。此项实验首先需参阅第二节的“实验电路结构NO.5”有关0809与目标芯片的接口方式,同时了解系统板上的接插方法以及有关0809工作时序和引脚信号功能方面的资料。

注意:不用0809时,需将左下角JP2的“A/D禁止”用短路帽短接,以避免与其他电路冲突。 ADC0809 A/D转换实验接插方法: 1. 将插座JP2的“A/D使能”短路、“A/D禁止”开路,则 将ENABLE(9)与PIO35相接;若使“A/D

使能”开路、“A/D禁止”短路,则使ENABLE(9)?0,表示禁止0809工作,使它的所有输出端为高阻态。

2.若将插座JP2的“转换结束”短路,则使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) 系统复位键:此键是系统板上负责监控的微处理器的复位控制键,同时也与接口单片机AT89C2051的复位端相连。因此,可兼作单片机的复位键。

(21)跳线座JS5/JS6/JPS :系统板硬件升级备用跳线插座,当需要硬件升级时,有关商家会通知接插方式和使用方法,平时分别短接“COMMON”、“5-VENDORS”和“SOF”。

(22)跳线座SDIP :短接“DISPLAY”,则使主板上排的8个数码管工作;若短接“INHIBI”,关闭此8个数码管,以便降低主板的干扰,这在提高D/A、A/D或VGA实验的质量,有时是有效的。

(23)跳线座SPS :短接“T_F”可以使用在系统频率计。频率输入端在主板右侧标有“频率计”处。模式选择为“A”。短接“PIO48”时,信号PIO48可用,如实验电路结构图NO.1中的PIO48。

(24)跳线座SLRAM :接此为RAM/ROM使能跳线座。短接“RAM_en”,即RAM/ROM的片选使能,可以使用主板上的RAM/ROM;短接“RAM_no”时,RAM/ROM关闭,平时应该选择此项。

(25)跳线座SLA17 :若RAM/ROM座上的芯片是28脚(向下对齐插芯片),则短路“VCC”;

若RAM/ROM座上的芯片是32脚,则短路“A17”;

(23) 目标芯片万能适配座CON1/2 :在目标板的下方有两条80个插针插座(GW48-CK系统),其连接信号如附图1-1B所示,此图为用户对此实验开发系统作二次开发提供了条件。此二座的位置设置方式和各端口的信号定义方式与综合电子设计竞赛开发板GWDVP-B完全兼容!!!

对于GW48-GK系统,此适配座在原来的基础上增加了20个插针,功能大为增强。增加的20插

7

针信号与目标芯片的连接方式可参考“实验电路结构NO.5”和附表1-2。

(24)使用举例: 若通过键SW9选中了“实验电路结构图NO.1”,这时的GW48系统板所具有的接口方式变为:FPGA/CPLD端口PI/O31~28、27~24、23~20和19~16 ,共4组4位二进制I/O端口分别通过一个全译码型的7段译码器输向系统板的7段数码显示器。这样,如果有数据从上述任一组四位输出,就能在数码显示器上显示出相应的数值,其数值对应范围为: FPGA/CPLD输出 数 码 管 显 示 0000 0 0001 1 0010 2 … … 1100 C 1101 D 1110 E 1111 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相接。

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

(6)附图2-1e是琴键式信号发生器,当按下键时,输出为高电平,对应的发光管发亮;当松开键时,输出为高电平,此 键的功能可用于手动控制脉冲的宽度。具附图2-1 实验电路信号资源符号图 有琴键式信号发生器的实验结构图是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

8

个可选的输入端,对应的引脚为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接口。在图左上角,此接口对应于主板上,有一个32脚的DIP座,在上面可以插大部分流行的RAM或ROM器件。(仅GW48-GK系统包含此接口)例如:

RAM:628128(32PIN)、62256(28PIN)、6264(28PIN)等;

ROM:2764、27128、27256、27512、27C010、27C020、27C040、27C080; 28C64、28C256等

29C010、29C020、29C040等。

此32脚座的各引脚与目标器件的连接方式示于图上,是用标准引脚名标注的,如PIO48(第1

脚)、PIO10(第2脚)等等。注意,与此座相接的还有2个跳线座,具体使用方法参看上节。

对于不同的RAM或ROM,其各引脚的功能定义不尽一致,即不一定兼容,因此在使用前应该查

阅相关的资料,但在结构图的上方也列出了部分引脚情况,以资参考。

3.VGA视频接口。在图右上角,它与目标器件有5个连接信号:PIO40、41、42、43、44,通过查表(第3节的引脚对照表),可的对应于EPF10K20-144的5个引脚号分别是:87、88、89、90、91。

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.单片机接口。在图右中侧。图中给出了AT89C2051单片机与目标器件连接的电路图。详细使用方法可参看上节。

9.RS232通信接口。注意,此接口电路包含在以上的单片机接口电路中。注意,如图所示,如果分别短接单片机的脚2与19、脚3与18,就能使RS232接口直接与目标器件相连,以便完成目标器件与PC机的硬件RS232通信结构方面的实验,详细使用方法可参看上节。

注意,结构图NO.5中并不是所有电路模块都可以同时使用,这是因为各模块与目标器件的IO接口有重合。仔细观察可以发现:

1.当使用RAM/ROM时,数码管3、4、5、6、7、8共6各数码管不能同时使用,这时,如果有

9

必要使用更多的显示,必须使用以下介绍的扫描显示电路。

但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. 单片机不能与D/A同时使用,但D/A与A/D能同时使用。 3. A/D不能与RAM/ROM同时使用,由于他们有部分端口重合,若使用RAM/ROM,必须禁止ADC0809,

即将主板左下方的跳线口“A/D禁止”短路;而当使用ADC0809时,应该禁止RAM/ROM,即将主板上的跳线口SLRAM短路“RAM_no”。如果希望A/D和RAM/ROM同时使用以实现诸如高速采样方面的功能,必须使用含有高速A/D器件的适配板,如GW-DSP系列适配板,或GWA102AD、GWAK30AD等型号的适配板。

4. 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)结构图NO.B:此电路可用于完成扫描显示控制设计。

(12)当系统上的“模式指示”数码管显示“A”时,系统将变成一台频率计,数码管8将显示“F”,“数码6”至“数码1”显示频率值,最低位单位是Hz。测频输入端为系统板右侧的JP1B插座。 (13)实验电路结构图COM:此图的所有电路仅GW48-GK系统拥有,即以上所述的所有电路结构(除RAM/ROM模块),包括“实验电路结构NO.0”至“实验电路结构NO.B”共11套电路结构模式为GW48-CK和GW48-GK两种系统共同拥有(兼容),我们把他们称为通用电路结构。在原来的11套电路结构模式中的每一套结构图中增加附图2-13所示的“实验电路结构图COM”。

例如,在GW48-GK系统中,当“模式键”选择“5”时,电路结构将进入附图2-7所示的实验

电路结构图NO.5外,还应该加入“实验电路结构图COM”。这样以来,在每一电路模式中就能比原来实现更多的实验项目。

“实验电路结构图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个反相驱动器驱动后输入数码管的共阴端。

“实验电路结构图COM”中各标准信号(PIOX)对应的器件的引脚名,必须查附表1-2,而不是查第3节的通用的引脚对照表。附表1-2仅适用于GW48-GK系统:

10

附表1-2 FLEX10K20、EP1K30/50-144-PIN TQFP器件标准信号名与引脚号对照表 引脚名 引脚号 PIO60 144 PIO70 111 PIO61 130 PIO71 112 PIO62 131 PIO72 113 PIO63 132 PIO73 114 PIO64 133 PIO74 116 PIO65 135 PIO75 120 PIO66 136 PIO76 110 PIO67 137 PIO77 141 PIO68 109 PIO78 121 PIO69 110 PIO79 122 引脚名 引脚号 6. 6发光管插线接口。此接口是SLAVE接口。在主板的右上方有6个发光管,以供必要时用接插线与目标器件连接显示。由于显示控制信号的频率比较低,所以目标器件可以直接通过连接线向此发光管输出。 7. 20针插线接口。在主板的两侧各有一个10针的接插端口,以供直接插线连接。这两个接口对于具有80针而非100针插座的适配座特别 有用,即可以直接用线连接目标板与主板上各接口。左边的接插口各针所标的信号名对应的标准信号为: aa PIO60 bb PIO61 cc PIO62 dd PIO63 ee PIO64 ff PIO65 gg PIO66 hh PIO67 x1 PIO76 X2 PIO77 显然,以上的信号是与附图2-13的扫描电路的段信号相接的。 右边的接插口各针所标的信号名对应的标准信号为: DW1 PIO68 DW2 PIO69 DW3 PIO70 DW4 PIO71 K1 PIO72 K2 PIO73 K3 PIO74 K4 PIO75 X3 PIO78 X4 PIO79 3. 数码8 实验电路结构图 数码7数码6数码5数码4数码3数码2数码1扬声器译码器译码器译码器译码器译码器译码器译码器译码器PIO19-PIO16PIO23-PIO20PIO27-PIO24PIO31-PIO28PIO35-PIO32PIO39-PIO36PIO43-PIO40PIO47-PIO44D8D7D6D5D4D3D2D1FPGA/CPLD目标芯片PIO7D16PIO6D15PIO5D14PIO4D13PIO3D12PIO2D11HEXHEX键1PIO7--PIO2PIO11-PIO8PIO15-PIO12键8键7键6键5键4键3键2实验电路结构图NO.0SPEAKER 附图2-2 实验电路结构图NO.0 11

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

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

12

87654321??éù?÷PIO19-PIO16PIO23-PIO20PIO27-PIO24PIO31-PIO28PIO35-PIO32PIO39-PIO36PIO43-PIO40PIO47-PIO44D8PIO15D7PIO14D6PIO13D5PIO12D4PIO11D3PIO10D2PIO9D1PIO8FPGA/CPLD??±êD???PIO15-PIO8PIO7PIO6PIO5PIO4PIO3PIO2PIO1PIO0D16D15D14D13D12D11D10D9?ü8?ü7?ü6?ü5?ü4?ü3?ü2?ü1êμ?éμ??·?á11í?NO.3 附图2-5 实验电路结构图NO.3 附图2-6 实验电路结构图NO.4 SPEAKERò????÷ò????÷ò????÷ò????÷ò????÷ò????÷ò????÷ò????÷ 13 29C040(PIN31->WE,PIN1->A18,PIN30->A17,PIN3->A15,PIN29->A14)27040(PIN31->A18,PIN30->A17,PIN3->A15,PIN29->A14)27020(PIN30->A17,PIN3->A15,PIN29->A14)27010(PIN30->VCC,PIN3->A15,P29->A14)PIO48PIO10PIO47PIO14PIO39PIO38PIO37PIO36PIO35PIO34PIO33PIO32PIO24PIO25PIO26GNDVCC10KVR1PIO35PIO8PIO37C3010212345678910111213141516A18/A19VCCA16A18/A15/WEA14(A15)A17/VCCA12WR/A146264A7A1362256A6A8628128A5A92764A4A1127256A3OE27512A2A1027010A1CS127020A0D727040D0D627080D1D5D2D4GNDD3RAM/ROM32313029282726252423222120191817VCCPIO9PIO46PIO45PIO11PIO12PIO13PIO8PIO15PIO31PIO30PIO29PIO28PIO27PIO49VCCSLA17VCCSLRAM628128(PIN30->VCC,PIN3->A14,PIN29->WE)6264(PIN30->VCC,PIN29->WR)62256(PIN30->VCC,PIN3->A14,P29->WE)27512(PIN30->VCC,PIN3->A15,P29->A14)6J6178VGA24 视频接口35101314R76 200R(PIO40)R77 200R78 200G(PIO41)B(PIO42)HS(PIO43)VS(PIO44)GNDRAM_ENVCC4513J7PS/2接口串行通讯接口53212MHZAPIO11PIO12PIO13PIO14PIO15PIO24PIO25PIO26PIO27PIO28PIO29PIO30PIO31VCC1112131415161718192010P37GND9P10P358P11P347P12P336P13P32EU35P14X14P15X23P16P312P17P301VCCRSTAT89C2051接PC机msb2-12-2EU1750KHZACLOCK2-310ADC08092-42-52-62-7AIN026lsb2-8IN-0727EOCIN-1JP2(5/6)25ADD-AAIN11ADD-B(24)0ADD-C(23)222ALE+5V912ENABLEref(+)166ref(-)STARTFITPIO46PIO45GND2468101214161820C29103B4RS-232接口电路135791113151719JP2ADENADEOCCOMPCOMM212019188151417PIO23PIO22PIO21PIO20PIO19PIO18PIO17PIO16PIO32PIO33PIO35PIO34PIO8复位键单片机接口电路FITJP2(1/2,3/4)87654321扬声器滤波1滤波0JP2COMM651031027.2K7TL082/2译码器译码器译码器译码器译码器译码器译码器译码器PIO19-PIO16PIO23-PIO20PIO27-PIO24PIO31-PIO28PIO35-PIO32PIO39-PIO36PIO43-PIO40PIO47-PIO44SPEAKERAOUTR725.1K2WR1DAC08329EU2FBIOUT1IOUT2PIO24PIO25PIO26PIO27PIO28PIO29PIO30PIO31765416151413+51112+1251pFC27234TL082/123LM311-12PIO3781VCCAIN0D8PIO15D7PIO14D6PIO13D5PIO12D4PIO11D3PIO10D2PIO9D1PIO8FPGA/CPLD目标芯片PIO15-PIO8PIO7PIO6PIO5PIO4PIO3PIO2PIO1PIO010K+128D16D15D14D13D12D11D10D9键8键7键6键5键4键3键2键1实验电路结构图NO.51D0/CS18D1WR217D2XFER3D3A GND10D4D GNDD58D6VREF20D7VCCVCC4-12COMPJP2(COMP) 附图2-7 实验电路结构图NO.5 14

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

87654321扬声器译码器译码器译码器译码器译码器译码器PIO19-PIO16PIO23-PIO20PIO27-PIO24PIO31-PIO28PIO35-PIO32PIO39-PIO36D8PIO47D7PIO46D6PIO45D5PIO44D4PIO43D3PIO42D2PIO41D1PIO40FPGA/CPLD目标芯片PIO47-PIO40PIO7PIO6PIO5PIO4PIO3PIO2PIO0D16D15D14D13D12D11D9单脉冲单脉冲键8键7键6键5单脉冲键4键3键2键1实验电路结构图NO.7

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

15

SPEAKER

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

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

16

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

PIO68PIO69PIO70PIO71PIO766共阴数码管10K X 4键10键9键11键12PIO75PIO77PIO60PIO61PIO62PIO63PIO64PIO65PIO66PIO67abcdefgh数码98数码10数码11数码12数码13数码1488888GNDD+(PIO77)D-(PIO76)VCCUSBSLAVEVCC24C011234GND8765VCCSCL(PIO78)SDA(PIO79)PIO74PIO72PIO73VCC654PS/2321GNDPIO76D22PIO77D21D20D19D18D17

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

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

万能接插口与结构图信号/与芯片引脚对照表

17

ispLSI 1032E 结构图 -PLCC84 上的信引引脚号名 脚名称 号 PIO0 26 I/O0 PIO1 27 I/O1 PIO2 28 I/O2 PIO3 29 I/O3 PIO4 30 I/O4 PIO5 31 I/O5 PIO6 32 I/O6 PIO7 33 I/O7 PIO8 34 I/O8 PIO9 35 I/O9 PIO10 36 I/O10 PIO11 37 I/O11 PIO12 38 I/O12 PIO13 39 I/O13 PIO14 40 I/O14 PIO15 41 I/O15 PIO16 45 I/O16 PIO17 46 I/O17 PIO18 47 I/O18 PIO19 48 I/O19 PIO20 49 I/O20 PIO21 50 I/O21 PIO22 51 I/O22 PIO23 52 I/O23 PIO24 53 I/O24 PIO25 54 I/O25 PIO26 55 I/O26 PIO27 56 I/O27 PIO28 57 I/O28 PIO29 58 I/O29 PIO30 59 I/O30 PIO31 60 I/O31 PIO32 68 I/O32 PIO33 69 I/O33 PIO34 70 I/O34 PIO35 71 I/O35 PIO36 72 I/O36 PIO37 73 I/O37 PIO38 74 I/O38 PIO39 75 I/O39 PIO40 76 I/O40 PIO41 77 I/O41 PIO42 78 I/O42 PIO43 79 I/O43 PIO44 80 I/O44 PIO45 81 I/O45 PIO46 82 I/O46 PIO47 83 I/O47 PIO48 3 I/O48 PIO49 4 I/O49 SPKER 5 I/O50 CLOCK0 6 I/O51 ispLSI1048E -PQFP128 引脚引脚号 名称 21 22 23 24 25 26 27 28 29 30 31 32 34 35 36 37 38 39 40 41 42 43 44 45 52 53 54 55 56 57 58 59 60 61 62 63 66 67 68 69 70 71 72 73 74 75 76 77 85 86 87 88 I/O0 I/O1 I/O2 I/O3 I/O4 I/O5 I/O6 I/O7 I/O8 I/O9 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 I/O25 I/O26 I/O27 I/O28 I/O29 I/O30 I/O31 I/O32 I/O33 I/O34 I/O35 I/O36 I/O37 I/O38 I/O39 I/O40 I/O41 I/O42 I/O43 I/O44 I/O45 I/O46 I/O47 I/O48 I/O49 I/O50 I/O51 FLEX EPF10K10 -PLCC84 引脚引脚号 名称 5 6 7 8 9 10 11 16 17 18 19 21 22 23 24 25 27 28 29 30 35 36 37 38 39 47 48 49 50 51 52 53 54 58 59 60 61 62 64 65 66 67 70 71 72 73 78 79 80 81 3 2 I/O0 I/O1 I/O2 I/O3 I/O4 I/O5 I/O6 I/O7 I/O8 I/O9 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 I/O25 I/O26 I/O27 I/O28 I/O29 I/O30 I/O31 I/O32 I/O33 I/O34 I/O35 I/O36 I/O37 I/O38 I/O39 I/O40 I/O41 I/O42 I/O43 I/O44 I/O45 I/O46 I/O47 I/O48 I/O49 CLRn IN1 XCS05/XCS10 -PLCC84 引脚引脚名号 称 3 4 5 6 7 8 9 10 13 14 15 16 17 18 19 20 23 24 25 26 27 28 29 35 36 37 38 39 40 41 44 45 46 47 48 49 50 51 56 57 58 59 60 61 62 65 66 67 68 69 70 72 I/O0 I/O1 I/O2 I/O3 I/O4 I/O5 I/O6 I/O7 I/O8 I/O9 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 I/O25 I/O26 I/O27 I/O28 I/O29 I/O30 I/O31 I/O32 I/O33 I/O34 I/O35 I/O36 I/O37 I/O38 I/O39 I/O40 I/O41 I/O42 I/O43 I/O44 I/O45 I/O46 I/O47 I/O48 I/O49 I/O50 I/O52 EPM7128S-PL84 EPM7160S-PL84 引脚引脚名号 称 4 5 6 8 9 10 11 12 15 16 17 18 20 21 22 24 25 27 28 29 30 31 33 34 35 36 37 39 40 41 44 45 46 48 49 50 51 52 54 55 56 57 58 60 61 63 64 65 67 68 81 I/O0 I/O1 I/O2 I/O3 I/O4 I/O5 I/O6 I/O7 I/O8 I/O9 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 I/O25 I/O26 I/O27 I/O28 I/O29 I/O30 I/O31 I/O32 I/O33 I/O34 I/O35 I/O36 I/O37 I/O38 I/O39 I/O40 I/O41 I/O42 I/O43 I/O44 I/O45 I/O46 I/O47 I/O48 I/O49 I/O50 18

ispLSI 1032E 结构图 -PLCC84 上的信引脚引脚名号名 号 称 CLOCK0 6 I/O51 CLOCK1 66 Y1 CLOCK2 7 I/O52 CLOCK3 8 I/O53 CLOCK4 9 I/O54 CLOCK5 63 Y2 CLOCK6 10 I/O55 CLOCK7 11 I/O56 CLOCK8 62 Y3 CLOCK9 12 I/O57 CLOCK10 13 I/O58 XCS30 结构图 144-PIN 上的信TQFP 号名 引脚引脚名号 称 PIO0 138 I/O0 PIO1 139 I/O1 PIO2 140 I/O2 PIO3 141 I/O3 PIO4 142 I/O4 PIO5 3 I/O5 PIO6 4 I/O6 PIO7 5 I/O7 PIO8 9 I/O8 PIO9 10 I/O9 PIO10 12 I/O10 PIO11 13 I/O11 PIO12 14 I/O12 PIO13 15 I/O13 PIO14 16 I/O14 PIO15 19 I/O15 PIO16 20 I/O16 PIO17 21 I/O17 PIO18 22 I/O18 PIO19 23 I/O19 PIO20 24 I/O20 PIO21 25 I/O21 PIO22 26 I/O22 PIO23 28 I/O23 PIO24 29 I/O24 PIO25 30 I/O25 PIO26 75 I/O26 PIO27 77 I/O27 PIO28 78 I/O28 PIO29 79 I/O29 PIO30 80 I/O30 PIO31 82 I/O31 PIO32 83 I/O32 PIO33 84 I/O33 ispLSI1048E -PLCC84 引脚引脚名号 称 88 I/O51 83 Y1 89 I/O52 90 I/O53 91 I/O54 80 Y2 92 I/O55 93 I/O56 79 Y3 94 I/O57 95 I/O58 XC95108 XC9572 -PLCC84 引脚号 1 2 3 4 5 6 7 9 10 11 12 13 14 15 17 18 19 20 21 23 24 25 26 31 32 33 34 35 36 37 39 40 41 43 引脚名称 I/O0 I/O1 I/O2 I/O3 I/O4 I/O5 I/O6 I/O7 I/O8 I/O9 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 I/O25 I/O26 I/O27 I/O28 I/O29 I/O30 I/O31 I/O32 I/O33 FLEX EPF10K10 -PLCC84 引脚引脚名号 称 2 IN1 42 IN2 43 GCK2 44 IN3 83 OE 84 IN4 1 GCK1 XCS05/XCS10 -PLCC84 引脚引脚名号 称 72 I/O52 77 I/O53 78 I/O54 79 I/O55 80 I/O56 81 I/O57 82 I/O58 83 I/O59 84 I/O60 EPM7128S-PL84 EPM7160S-PL84 引脚引脚名号 称 69 I/O50 70 I/O51 73 I/O52 74 I/O53 75 I/O54 76 I/O55 79 I/O57 80 I/O58 83 IN1 2 IN4 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

EP1K100 FLEX10K20 ispLSI 3256/A EPF10K30E/50E EP1K30/50 -PQFP160 208-PIN 144-PIN TQFP P/RQFP 引脚引脚引脚引脚名引脚引脚名号 名称 号 称 号 称 7 I/O 8 I/O0 2 I/O0 8 I/O 9 I/O1 3 I/O1 9 I/O 10 I/O2 4 I/O2 11 I/O 12 I/O3 5 I/O3 12 I/O 13 I/O4 6 I/O4 13 I/O 17 I/O5 7 I/O5 14 I/O 18 I/O6 8 I/O6 15 I/O 19 I/O7 9 I/O7 17 I/O 20 I/O8 11 I/O8 18 I/O 21 I/O9 13 I/O9 24 I/O 22 I/O10 14 I/O10 25 I/O 23 I/O11 15 I/O11 26 I/O 26 I/O12 16 I/O12 27 I/O 27 I/O13 17 I/O13 28 I/O 28 I/O14 25 I/O14 29 I/O 29 I/O15 26 I/O15 30 I/O 30 I/O16 28 I/O16 31 I/O 31 I/O17 29 I/O17 36 I/O 32 I/O18 30 I/O18 37 I/O 33 I/O19 32 I/O19 38 I/O 36 I/O20 33 I/O20 39 I/O 37 I/O21 34 I/O21 40 I/O 38 I/O22 35 I/O22 41 I/O 39 I/O23 36 I/O23 44 I/O 41 I/O24 37 I/O24 45 I/O 42 I/O25 38 I/O25 113 I/O 65 I/O26 82 I/O26 114 I/O 67 I/O27 83 I/O27 115 I/O 68 I/O28 84 I/O28 116 I/O 69 I/O29 85 I/O29 119 I/O 70 I/O30 86 I/O30 120 I/O 72 I/O31 87 I/O31 121 I/O 73 I/O32 88 I/O32 122 I/O 78 I/O33 89 I/O33 19

XCS30 结构图 144-PIN 上的信TQFP 号名 引脚引脚名号 称 PIO34 85 I/O34 PIO35 86 I/O35 PIO36 87 I/O36 PIO37 88 I/O37 PIO38 89 I/O38 PIO39 92 I/O39 PIO40 93 I/O40 PIO41 94 I/O41 PIO42 95 I/O42 PIO43 96 I/O43 PIO44 97 I/O44 PIO45 98 I/O45 PIO46 99 I/O46 PIO47 101 I/O47 PIO48 102 I/O48 PIO49 103 I/O49 SPEAKER 104 I/O CLOCK0 111 CLOCK1 113 CLOCK2 114 CLOCK3 106 CLOCK4 112 CLOCK5 115 CLOCK6 116 CLOCK7 76 CLOCK8 117 CLOCK9 119 CLOCK10 2 XC95108 XC9572 -PLCC84 引脚号 44 45 46 47 48 50 51 52 53 54 55 56 57 58 61 62 63 65 66 67 68 69 70 71 72 75 79 引脚名称 I/O34 I/O35 I/O36 I/O37 I/O38 I/O39 I/O40 I/O41 I/O42 I/O43 I/O44 I/O45 I/O46 I/O47 I/O48 I/O49 I/O50 I/O51 I/O52 I/O53 I/O54 I/O55 I/O56 I/O57 I/O58 I/O60 I/O63 EP1K100 FLEX10K20 ispLSI 3256/A EPF10K30E/50E EP1K30/50 -PQFP160 208-PIN 144-PIN TQFP P/RQFP 引脚引脚引脚引脚名引脚引脚名号 名称 号 称 号 称 125 I/O 79 I/O34 90 I/O34 126 I/O 80 I/O35 92 I/O35 127 I/O 81 I/O36 93 I/O36 128 I/O 82 I/O37 94 I/O37 131 I/O 83 I/O38 95 I/O38 132 I/O 86 I/O39 96 I/O39 133 I/O 87 I/O40 105 I/O40 134 I/O 88 I/O41 106 I/O41 135 I/O 89 I/O42 108 I/O42 136 I/O 90 I/O43 109 I/O43 139 I/O 91 I/O44 110 I/O44 140 I/O 92 I/O45 112 I/O45 141 I/O 95 I/O46 113 I/O46 142 I/O 96 I/O47 114 I/O47 143 I/O 97 I/O48 115 I/O48 144 I/O 98 I/O49 116 I/O49 148 I/O 99 I/O50 117 I/O50 182 I/O 54 INPUT1 118 I/O 183 I/O 55 GCLOK1 119 I/O 184 I/O 124 INPUT3 120 I/O 149 I/O 100 I/O51 121 I/O 150 I/O 101 I/O52 103 Y2 157 I/O 102 I/O53 122 I/O 170 I/O 117 I/O61 123 I/O 112 I/O 118 I/O62 102 Y3 111 I/O 56 INPUT2 124 I/O 104 I/O 125 GCLOK2 126 I/O 103 I/O 119 I/O63 101 Y4

第二章 GW-DSP

适配板使用说明

GW48CK/GK EDA主系统(包括GWDVP-B板)若与GW-DSP适配板结合,可以完成多相设计

项目,例如: 1、数字信号处理项目的设计,如各种数字滤波器、FFT系统、数字调制解调器、语言/图象压缩和解压系统;2、数字锁相环;3、数字震荡器;4、频率合成器;5、扫频信号源;6、VGA显示图象电路;7、图象处理模块;8、高速采样模块电路,如存储示波器;9、单片机或普通CPU; 10、通信原理方面的设计实验等。11、DDS(直接数字合成)系统设计。 1、引脚说明

GW-DSP板上的FPGA芯片(芯片引脚图如附图2-3所示)与GW48主系统的连接关系,与普通的适配板(如型号GWA10K2、GWAK30、GWA10K1等引脚兼容)基本相同,可查阅第三节的对照表,但须注意的是,时钟接口部分必须查阅

附图2-1 GW-DSP板面结构 以下对照表:

20

GW-DSP板 CLK0 CLK2 (INPUT3) (INPUT4) 124 126 10K20/1K30/1K50时钟输入引脚对照表 CLK3 (GCLOCK2) 125 CLK4 CLK5 (I/O52) (I/O53) 101 102 CLK6 (GCLOCK1) 55 CLK9 (I/O51) 100 注1:GW48主板上原CLOCK0、CLOCK7、CLOCK8不能输入任何时钟型号,须使其端口空着。 2、GW-DSP板上插口和跳线使用说明 J1:GW-DSP板上RAM/RAM第30脚选择,当选此座上插芯片为6264、62256、628128、27512、27010时,选“VCC”;而插如附图4-2其他器件时,选“A17”。 J2:A/D器件TLC5510的模拟信号输入端,信号范围:0-5V。 J3:A/D和D/A参考电压选择跳线,当选“VCC”时,参考电压为主板工作电压;当选“REFRS”时,参考电压来自78L05稳压后的电压,但这是必须在J4上输入12V电压。 J4:+12V电源插口,为A/D、D/A提供参考电压设置的插口。 J5:D/A模拟信号输出端口。 VCCIO90(P60)GNDIO89(P59)INPUT2(P56)INPUT1(P54)IO88(P51)IO87(P49)IO86(P48)IO85(P47)IO84(P46)VCCIO83(P44)123456789101112/OEDGNDD1D2D3D4D5D6D7D8VDDDCLKDGNG24REFB23REFBS22AGND21AGND20ANA IN19VDDA18REFT17REFTS16VDDA15VDDA14VDDD13GNDGNDNCGNDGNDVCCNCVCCVCCVCCJ3+5V-REFJ2GNDIO93(P64)VCCTLC5620GND1234567GNDREFAREFBREFCREFDDATACLKVCCLDACDACADACBDACCDACDLOAD141312111098J5TLC5510AGNDIO91(P62)IO92(P63)IO82(P43) 附图2-3 A/D和D/A的引脚连接关系图 3、A/D和D/A的引脚连接说明 附图2-3所示的是A/D和D/A与FPGA的连接关系,其中“Pxx,如P63”是指FPGA的第63脚,引脚锁定时必须输入此脚号。 4、RAM/ROM引脚连接说明 附图2-2所示的是RAM/ROMPIN1IO82(P43)IO70(P135)IO69(P133)IO68(P132)IO67(P131)IO66(P130)IO95(P128)IO94(P122)IO65(P121)IO64(P120)IO63(P119)IO62(P118)IO61(P117)IO60(P116)IO59(P114)GND12345678910111213141516A19A16A14(A15)A126264A762256A6628128A52764A427256A327512A227010A127020A027040D027080D1D2GNDVCCA18/A15A17/VCCWR/A14A13A8A9A11OEA10CS1D7D6D5D4D332313029282726252423222120191817VCCIO71(P136)IO93(P64)/VCCIO72(P137)IO73(P138)IO74(P140)IO75(P141)IO76(P142)IO77(P143)IO78(P144)IO80(P11)IO54(P109)IO55(P110)IO56(P111)IO57(P112)IO58(P113)与FPGA的连接情况,其中 IOxx(Pxx)是指FPGA的引脚名和引脚号;PINxx是指RAM/ROM的引脚号。 SRAM包括:628128、62256、6264等;ROM包括:27C64、27C256、27C512、28C64、27C010、27C020、27C040、27C080等,286264(PIN30->VCC,PIN29->WR)脚的芯片插法是,都靠底端插,即62256(PIN30->VCC,PIN3->A14,PIN29->WR)与地线脚对齐,其它不变。 27512(PIN30->VCC,PIN3->A15,PIN29->A14) (3)附图2-1所示的628128(PIN30->VCC,PIN3->A14,PIN29->WR)EP1/EPC1441(在GW-DSP板上有27010(PIN30->VCC,PIN3->A15,PIN29->A14)对应的座),是为FPGA开发用的27020(PIN30->A17,PIN3->A15,PIN29->A14)27040(PIN31->A18,PIN30->A17,PIN3->A15,PIN29->A14)专用OTP型ROM配置的座,型号27080(PIN31->A18,PIN1->A19,PIN30->A17,PIN3->A15,PIN29->A14) 是EPC1或EPC1441(此芯片一般附图2-2 RAM/ROM与FPGA的引脚关系图 没有必要使用)。 另外,附图2-1的 GW-DSP板面上的10芯下载线需要与GW48系统配合使用,是个很常用的接21 口,用法可参考本章第一节。 第三章 GW48系统专用配套之 GWDVP-B电子设计应用板使用说明 (其它信息请参考POWER POINT 文件GWDVPB说明.ppt) 一、为什么要用GWDVP-B板? 一般地,竞赛中需开发的主控模块多为数字系统与模拟系统相结合的高速综合电子系统,此系统多包括单片机最小系统、基于EDA开发的FPGA或CPLD可编程高速系统、数码显示系统、键控系统、ROM/RAM存储系统、高频时钟系统、A/D转换系统和D/A转换系统等。当所有这些系统连成一协调的主控系统时,连线极为复杂、高速通道的连线技术、以及数模混合系统的抗干扰与单点接地技术要求很高,靠临时手工焊线,成功率低、可靠性差、费时费力,且技术指标难以上去,根据实际需要变更系统通道结构的灵活性也很差;特别是在竞赛中最后的设计完成前,当系统内FPGA/CPLD芯片中的逻辑资源尚缺一点即可大功告成时,则由于一时在短期内无法以更大逻辑资源的芯片更改已焊接好的FPGA或CPLD器件,而很可能导致前功尽弃、功亏一馈,令人扼腕痛惜的局面。 ?′μ?1?ü2?ü3?ü4?ü8??êy 二、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直接相接的,所以此座可根据需22 1??êyP1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.7P3.0P3.1P3.2P3.3P3.4P3.52??êy4??êyVCCGNDPIO25PIO24PIO23PIO22PIO21PIO20PIO19PIO18PIO17PIO163??êyP3.6P3.78?üPR3PIO27PIO26PIO29PIO28PIO31PIO30PIO33PIO32GNDGNDCLOCK7CLOCK6CLOCK5ALECLOCK250MHzCLOCK45??êy?òé?2?7?ü6?üLED1LED2LED3LED4LED5LED6LED7LED85?üGND+5VRSTEPM7128S-PC84PR17??êy6??êyCK3CK1????SCCLOCK8P3.5CLOCK9μ?×óéè???oèü?a·¢°? 图3-1、GWDVP板正面示意图

要插不同型号和容量的存储器(如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、EPF10K30、EPF6016、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,键盘子程序等诸多子程序可参见单片机文件GWDVPA.ASM);如果要增加键,可在所给的8芯插座上插16键的插口,可按阵列扫描方式编程控制; 三、GWDVP板使用注意

(1)、兼容性:开发中,GWDVP板须与GW48系统或GWDD6-C编程器配合使用,这表现在: 1、须利用GW48提供的10芯在系统下载接口和通信线进行下载; 2、GWDVP板与GW48系统上的FPGA/CPLD目标芯片板相互间完全兼容,因此可以使用GW48系统所有可配的目标芯片,所以在利用GWDVP板开发时,就没有了逻辑资源不够用的担心,也没有对使用FPGA/CPLD型号和生产厂家的限制,这正是GWDVP板的最大特点!

3、GWDVP板的FPGA/CPLD目标芯片板上的引脚定义和使用情况与GW48-CK/ES相同,都必须参考本教程第一章第3节的列表,显然,会用GW48就会用GWDVP板。

注意:如果要使GWDVP板上的单片机与RAM/ROM连成总线工作方式,需要将板上的FPGA/CPLD某一引脚(如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字节的数,被除数字节

23

数放在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)、电源:主系统电源为+5V。为提高性能,GWDVP板外接电路系统,必须单独给电。 (4)、显示:显示系统由9个74LS164构成串行静态显示电路,前8个负责8个数码管的显示;最高位的74LS164负责8个发光管的显示。此串行P3.0P3.1显示系统的数据口

DATA接单片机的P3.0、

′?DD??ê?CLOCK接P3.1;显示子8·¢1a1üAT89C51/52程序名为“DIRR0”,P0GWDVP板反面的显示FPGA/CPLD16器自左至右,8个数码管P2GWA7128和8个发光管在单片机μ¥???úGW-DSP/E2RAM/ROMSC8内的显示缓冲寄存器依

CLOCK9次为:16H、15H、14H、P3.5CLOCK913H、12H、11H、10H、17H、18H,小数点的缓

P32CK1冲寄存器是0AH,其中某CSP11DO93C4650MHzP12一位为1时,对应的数码DI?§??P13SCLK管的小数点发亮,如当0AH的最低位为1时,

RST?ü?ü ?ü?ü?ü?ü?ü ?ü10H对应的数码管的小

P1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.7数点发亮。

(6)、键盘:板的反

GWDVP-Bμ?×óéè???a·¢°?μ??·?òí?面有9个键,8个键与单

图3-2 片机的P1口接成查询电

路方式,因此P1口还可作输出复用。如果8个键不够,用户可在P1口插座“P1”上并接上阵列方式的16键键盘,这时板上的8个键自动失效。 (7)、可插EEPROM 93C46:这是串行存储器,片选脚由单片机的P3.2担任,如果不用93C46,此端口可作他用,它的读写子程序可参阅程序GWDVPA.ASM。 (8)、跳线座:如图2所示,两组跳线座“SC”和“CK1”,前者选择单片机的P3.5接FPGA/CPLD的clock8或clock9端;后者选择50MHz时钟信号接FPGA/CPLD的clock2或clock4端。

CLOCK4 四、GWDVP-B板示例:等精度频率计演示操作:

1、光盘中目录“GWDVPB”的GWDVPB.BIN文件可编程进单片机AT89C51/52中,将单片机

24

CLOCK2 插上后,再将光盘中的GWDVPB.POF文件用MAX+PLUSII下载到GWDVPB板上的EPM7128S芯片中去(用GW48系统或GWDD6-C,也可下载进入EPF10K10/20)。 2、加上电源后,(按复位键)可以看到数码1显示“P”。 注意电源极性! 3、自测:用所配的接插线一端接在GWDVPB板标出的“PIO16”上,此引脚为待测频率输入端口。将另一端接“PIO25”端(此为某一频率输出端) 4、按键1,应该显示“381.4697”,表明测得频率为381.4697Hz (此频率为50MHz的2的16次方分频值) ; RP1键1是测频键; SPKA01011D0PIO27P10VCCP11P00PIO0 5、按键2,应该显示“A PIO48A1912D1PIO26PIO49A2813D2PIO29P12P01PIO1P13P02PIO250.0”,表明测得占空比为PIO46A3715D3PIO28PIO47A4616D4PIO31P14P03PIO3PIO44A5517D5PIO30P15P04PIO450.0 % ; GNDPIO45A6418D6PIO33P16P05PIO5CLOCK7 键2是测占空比键; PIO42A7319D7PIO32P17P06PIO6CLOCK6PIO43A825RSTP07PIO7CLOCK5VCC 6、按键3,应该显示PIO40A924P30EAALEPIO41A1021P31ALE“1310.72”,表明测得脉宽为PIO38A112320CEP32PSENPIO39A12222OEPIO35P33P27PIO81310.72微秒 ; PIO36A1326P34P26PIO9PIO37A1427P35P25PIO10 键3是测脉宽键; PIO34A151P36P24PIO11P37P23PIO12(精度为7位有效值! ): X2P22PIO13RAM/ROMX1P21PIO14 注意: 当出现两个小数点GNDP20PIO1527C512/256/64时,小数点标明的数是MHz单6264/62256AT89C51/5228C64位 μ¥???ú?°RAM/ROMó?êê??°?é? 7、按键7,应该显示“Good 7”,表明板上的93C46工作正FPGA/CPLDòy??á??óí? 常,芯片没有问题,否则,将显图 3-3 示“bad”字样。此键是93C46测试键(如果插有93C46)。 注意: 1、GWDVPB板上的PR1接插座上标出的各端口的PIO值,应该以图3-1所示的数为准! 如“PR1”座上“GND”旁边的信号应该是“PIO25”。 2、GWDVP-B+与GWDVPB的不同仅在于适配板和芯片不同,GWDVP-B+上配置的器件是 EPF10K20-TQ144,所以对此芯片的引脚需要查下表的“FLEX10K20 EP1K30/50 144-PIN TQFP”一栏。例如SPK(SPEAKER)对应99脚,PIO16对应30脚、而CLOCK2对应126脚(GWDVP-B板当然也能配其它适配板,包括含混合电压FPGA器件的适配板,但混合电压源需由用户自行提供。) 请特别注意,对于GWDVP-B+板,所有“CLOCKx”引脚的查阅必须查表1而非表2! 3、如果要对外测频(TTL电平),应该接上地线,与外部待测系统共地。 五、GWDVP-B+板示例1:等精度频率计演示操作: 所有操作与GWDVP-B板基本一样。不同之处有如下4点: 1、此时GWDVP-B板上插的是DSP适配板(含FPGA:EPF10K20TC144芯片)。 2、等精度频率计的演示下载文件是:GWDVPB10K20.SOF。 3、由于是FPGA,若需要掉电保护,需要采取适当措施,如使用EPC1/EPC1441等。 4、由于设计程序和优化方式上略有不同(与7128S比),所能测的最高频率约小于40MHZ。 六、GWDVP-B+板示例2:扫频信号源和数控信号发生器: 1、单片机程序仍然是GWDVPB.BIN。 2、10K20中的下载文件是:GW-SCANNING.SOF。注意,下载线要跟在适配板的下载口上,不可脱离,除非有配置ROM或GWEPC-2配置器。 3、下载后,按复位键,再连续按键8,使数码8上显示“b” (显示“F”将为测频服务)。 4、将示波器的测试口分别与适配板上的插座“J5”的“DACA”和“GND”相接。 25

5、键3、2、1将控制点频输出,键3控制输出信号频率粗调、键2控制输出信号频率中调、键1控制输出信号频率细调。

6、连续按键6,可交替输出正弦波或三角波。 7、键5控制点频方式输出或者扫频方式输出。

8、连续按键4,数码1可显示相应的值,可控制扫频信号的扫变速度,数码1上的值越小,扫频速度越低,当为“0”时,扫变速度最低。

七、GWDVP-B+板示例3:简易存储示波器:

1、单片机程序仍然是GWDVPB.BIN。

2、10K20中的下载文件是:GW-RESERVING.SOF。下载线必须跟在适配板的下载口上。 3、下载后,先按复位键,再连续按键8,使数码8上显示 b(显示“F”将为测频服务)。 4、将示波器的测试口分别与适配板上的插座“J5”的“DACA”和“GND”相接。

5、将信号源的信号(数千HZ的任意波形,大于0V,小于5V)接在GWDVP-B板上的“JT”插口,地线接“AGND”,信号线接“AINPUT”。

6、按键7,可以看见数码1上连续出现“C”和“S”,“C”表示对输入的信号源的信号进行采样(CHACHING),并将采样信号存入RAM中;而当按键7,出现“S”时,系统将刚才存入RAM中的数据,通过板上的串行D/A向示波器扫描输出。

7、连续按键7,将连续完成“采样”->“扫描输出”->“采样”->“扫描输出”->“采样”->“扫描输出”的操作。注意此示例使用的是内部触发方式,如果希望外部触发,可稍作改变。

八、GWDVP-B+板:GW-DSP适配板使用说明参考第2章

第四章 (有关内容请见光盘“PDF重要文件” )

第五章 原理图输入设计方法

利用EDA工具进行原理图输入设计的优点是,设计者能利用原有的电路知识迅速入门,完成较大规模的电路系统设计,而不必具备许多诸如编程技术、硬件语言等新知识。

MAX+plusII提供了功能强大,直观便捷和操作灵活的原理图输入设计功能,同时还配备了适用于各种需要的元件库,其中包含基本逻辑元件库(如与非门、反向器、D触发器等)、宏功能元件(包含了几乎所有74系列的器件),以及功能强大,性能良好的类似于IP Core的巨功能块LPM库。但更为重要的是,MAX+plusII还提供了原理图输入多层次设计功能,使得用户能设计更大规模的电路系统,以及使用方便精度良好的时序仿真器。以传统的数字电路实验相比为例,MAX+plusII提供原理图输入设计功能具有显著的优势:

? 能进行任意层次的数字系统设计。传统的数字电路实验只能完成单一层次的设计, 使得设计者无法了解和实现多层次的硬件数字系统设计;

? 对系统中的任一层次,或任一元件的功能能进行精确的时序仿真,精度达0.1ns , 因此能发现一切对系统可能产生不良影响的竞争冒险现象;

? 通过时序仿真,能对迅速定位电路系统的错误所在,并随时纠正;

? 能对设计方案作随时更改,并储存入档设计过程中所有的电路和测试文件;

? 通过编译和编程下载,能在FPGA或CPLD上对设计项目随时进行硬件测试验证。 ? 如果使用FPGA和配置编程方式,将不会有如何器件损坏和损耗;

? 符合现代电子设计技术规范。传统的数字电路实验利用手工连线的方法完成元件连接,容易对学习者产生误导,以为只要将元件间的引脚用引线按电路图连上即可,而不必顾及引线的长短、粗细、弯曲方式、可能产生的分布电感和电容效应以及电磁兼容性等等十分重要的问题。

以下将详细介绍原理图输入设计方法,但读者应该更多地关注设计流程,因为除了最初的图形编辑输入外,其它处理流程都与文本(如VHDL文件)输入设计完全一致。

26

第一节 1位全加器设计向导

1位全加器可以如图7-11那样用两个半加器及一个或门连接而成,因此需要首先完成如图7-10所示的半加器的设计。以下将给出使用原理图输入的方法进行底层元件设计和层次化设计的完整步骤,其主要流程与数字系统设计的一般流程基本一致。事实上,除了最初的输入方法稍有不同外,应用VHDL的文本输入设计方法的流程也基本与此相同。 5.1.1 步骤1:为本项设计建立文件夹

任何一项设计都是一项工程(Project),都必须首先为此工程建立一个放置与此工程相关的所有文件的文件夹,此文件夹将被EDA软件默认为工作库(Work Library)。一般不同的设计项目最好放在不同的文件夹中,注意,一个设计项目可以包含多个设计文件,如频率计。

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

27

图5-2 元件输入选择窗

假设本项设计的文件夹取名为MY_PRJCT,在E盘中,路径为:E:\\MY_PRJCT。文件夹不能用中文。 5.1.2 步骤2:输入设计项目和存盘

1、打开Mux+plusII,选菜单 File?New(图5-1),在 弹出的File Type 窗中选原理图编辑输入项Graphic editor File,按OK后将打开原理图编辑窗。

2、在原理图编辑窗中的任何一个位置上点鼠标右键,将跳出一个选择窗,选择此窗中的输入元件项Enter Symbol,于是将跳出如图5-2所示的输入元件选择窗。

3、用鼠标双击文件库“Symbol Libraries”中的e:\\ maxplu2\\max2lib\\prim项,在Symbol Files窗中即可看到基本逻辑元件库prim中的所有元件,但也可以在Symbol Name窗中用键盘直接输入所需元件名,在按OK键,即可将元件调入原理图编辑窗中。如为了设计半加器,可参考图7-10,分别调入元件and2、not、xnor、input和output(图5-3)并连接好。然后用鼠标分别在input和output的PIN-NAME上双击使其变黑色,再用键盘分别输入各引脚名:a、b、co和so。 4、点击选项File ?“Save As”,选出刚才为自己的工程建立的目录E:\\MY_PRJCT,将已设计好的图文件取名为:h_adder.gdf (注意后缀是.gdf),并存在此目录内。

图5-3 将所需元件全部调入原理图编辑窗

注意,原理图的文件名可以用设计者认为合适的任何英文名(VHDL文本存盘名有特殊要求),如adder.gdf等。还应注意,为了将文件存入自己的E:\\MY_PRJCT目录中,必须在如图5-4的Save as窗中双击MY_PRJCT目录,使其打开,然后键入文件名,并按OK。

图5-4 连接好原理图并存盘

28

图5-5 将当前设计文件设置成工程文件

5.1.3 步骤3:将设计项目设置成工程文件(PROJECT)

为了使Max+plusII能对输入的设计项目按设计者的要求进行各项处理,必须将设计文件,如半加器h_adder.gdf,设置成Project。如果设计项目由多个设计文件组成,则应该将它们的主文件,即顶层文件设置成Project。如果要对其中某一底层文件进行单独编译、仿真和测试,也必须首先将其设置成Projcet。

图5-6 选择最后实现本项设计的目标器件

将设计项目(如h_adder.gdf)设定为工程文件设置成Project有两个途径:

1、如图5-5,选择File ? Project ? Set Project to Current File,即将当前设计文件设置成Project。选择此项后可以看到图5-5所示的窗口左上角显示出所设文件的路径。这点特别重要,此后的设计应该特别关注此路径的指向是否正确! 2、如果设计文件未打开,可如图5-5所示,选 File ? Project ? Name ,然后在跳出的Project Name窗中找到E:\\MY_PRJCT目录,在其File小窗中双击adder.gdf文件,此时即选定此文件为本次设计的工程文件(即顶层文件)了。

5.1.4 步骤4:选择目标器件并编译

为了获得与目标器件对应的,精确的时序仿真文件,在对文件编译前必须选定最后实现本设计项目的目标器件,在Max+plusII环境中主要选Altera公司的FPGA或CPLD。

首先在Assign选项的下拉菜单中选择器件选择项Device,其窗口如图5-6所 示。此窗口的Device Family图5-7 对工程文件进行编译、综合和适配等操作 是器件序列栏,应该首先在此

拦中选定目标器件对应的序列名,如EPM7128S对应的是MAX7000S系列;EPF10K10对应的是FLEX10K系列等。为了选择EPF10K10LC84-4器件,应将此栏下方标有Show only Fastest Speed Grades的勾消去,以便显示出所有速度级别的器件。完成器件选择后,按OK键。

最后启动编译器,首先选择左上角的MAX+plusII选项,在其下拉菜单中选择编译器项Compiler(图5-7),此编译器的功能包括网表文件提取、设计文件排错、逻辑综合、逻辑分配、适配(结构综合)、时序仿真文件提取和编程下载文件装配等。

点击Start,开始编译!如果发现有错,排除错误后再次编译。 5.1.5 步骤5:时序仿真

接下来应该测试设计项目的正确性,即逻辑仿真,具体步骤如下:

29

1、建立波形文件。按照以上“步骤2”,为此设计建立一个波形测试文件。选择File项及其New,

再选择图5-1右侧New窗中的Waveform Editer..项,打开波形编辑窗。 2、输入信号节点。在图5-8所示的波形编辑窗的上方选择Node项,在下拉菜单中选择输入信号节点项Nodes from SNF。在弹出的窗口(图5-9)中首先点击List键,这时左窗口将列出该项设计所以信号节点。由于设计者有时只需要观察其中部分信号的波形,因此要利用中间的“=>”键将需要观察的信号选到右栏中,然后点击OK键即可。

图5-8 从SNF文件中输入设计文件的信号节点

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

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

3、设置波形参量。图5-10所示的波形编辑窗中已经调入了半加器的所有节点信号,在为编辑窗的半加器输入信号a和b设定必要的测试电平之前,首先设定相关的仿真参数。如图5-10所示, 在Options选项中消去网格对齐Snap to Grid的选择(消去勾),以便能够任意设置输入电平位置,或设置输入时钟信号的周期。

4、如图5-11所示,设定仿真时间宽度。选择File项及其End time选项,在End time选择窗中选择适当的仿真时间域,如可选34us(34微秒),以便有足够长的观察时间。

5、加上输入信号。现在可以为输入信号a和b设定测试电平了。如图5-12标出的那样,利用必要的功能键为a和b加上适当的电平,以便仿真后能测试so和co输出信号。

30

图5-11 设定仿真时间宽度

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

图5-13 仿真波形文件存盘 图5-14 运行仿真器

31

图5-15 半加器h_adder.gdf的仿真波形

6、波形文件存盘。选择File项及其Save as选项,按OK键即可。由于图5-13所示的存盘窗中的波形文件名是默认的(这里是h_adder.scf),所以直接存盘即可。

7、运行仿真器。选择MAX+plusII项及其中的仿真器Simulator选项,点击跳出的仿真器窗口(图5-15)中的Start键。图5-15是仿真运算完成后的时序波形。注意,刚进入图5-15的窗口时,应该将最下方的滑标拖向最左侧,以便可观察到初始波形。

8、观察分析波形。对照表7-1,图5-15显示的半加器的时序波形是正确的。还可以进一步了解信号的延时情况。图5-15右侧的竖线是测试参考线,它上方标出的991.ns是此线所在的位置,它与鼠标箭头间的时间差显示在窗口上方的Interval小窗中。由图可见输入与输出波形间有一个小的延时量。

图5-16 打开延时时序分析窗

32

图5-17 半加器引脚锁定

为了精确测量半加器输入与输出波形间的延时量,可打开时序分析器,方法是选择左上角的MAX+plusII项及其中的Timing Analyzer选项,点击跳出的分析器窗口(图5-16)中的Start键,延时信息即刻显示在图表中。其中左排的列表是输入信号,上排列出输出信号,中间是对应的延时量,这个延时量是精确针对EPF10K10LC84-4器件的。

9、包装元件入库。选择File项的“Open”选项,在“Open”窗中先点击原理图编辑文件项Graphic Editor Files,选择h_adder.gdf,重新打开半加器设计文件,然后如图5-5选择File中的Create Default Symbol项,此时即将当前文件变成了一个包装好的单一元件,并被放置在工程路径指定的目录中以备后用。 5.1.6 步骤6:引脚锁定

如果以上的仿真测试正确无误,就应该将设计编程下载进选定的目标器件中,如EPF10K10,作进一步的硬件测试,以便最终了解设计项目的正确性。这就必须根据评估板、开发电路系统或EDA实验板的要求对设计项目输入输出引脚赋予确定的引脚,以便能够对其进行实测。这里假设根据实际需要,要将半加器的4引脚a、b、co和so分别与目标器件EPF10K10的第5、6、17和18脚相接,操作如下:

1、选择Assign项及其中的引脚定位Pin\\Location\\Chip选项,在跳出的窗口(图5-17)中的Node Name栏中用键盘输入半加器的端口名,如a、b等。如果输入的端口名正确,在右侧的Pin Type栏将显示该信号的属性。

33

图5-18 设置编程下载方式

2、在左侧的Pin一栏中,用键盘输入该信号对应的引脚编号,如5、6、17等,然后按下面的Add键。如图5-17所示分别将4个信号锁定在对应的引脚上,按OK键后结束。

3、特别需要注意的是,在锁定引脚后必须再通过MAX+plusII的Compiler选项,对文件从新进行编译一次,以便将引脚信息编如入下载文件中。 5.1.7 步骤7:编程下载

首先将下载线把计算机的打印机口与目标板(如开发板或实验板)连接好,打开电源:

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

图5-19 向EPF10K10下载配置文件

2、下载。如图5-19,点击Configure键,向EPF10K10下载配置文件,如果连线无误,应出现图5-19报告配置完成的信息提示。

到此为止,完整的设计流程已经结束。VHDL文本输入的设计可参考这一流程。

34

图5-20 在顶层编辑窗中调出已设计好的半加器元件

5.1.8 步骤8:设计顶层文件

可以将前面的工作看成是完成了一个底层元件的设计和功能检测,并被包装入库。现在利用已设计好的半加器,完成顶层项目全加器的设计,详细步骤可参考以上设计流程:

1、仿照前面的“步骤2”,打开一个新的原理图编辑窗,然后在图5-20所示的元件输入窗的本工程目录中找到已包装好的半加器元件h_adder,并将它调入原理图编辑窗中。这时如果对编辑窗中的半加器元件h_adder双击,即刻弹出此元件内部的原理图。

2、完成全加器原理图设计(图5-21),并以文件名f_adder.gdf存在同一目录中。 3、将当前文件设置成Project,并选择目标器件为EPF10K10LC84-4。 4、编译此顶层文件f_adder.gdf,然后建立波形仿真文件。

5、对应f_adder.gdf的波形仿真文件如图5-22所示,参考图中输入信号cin、bin和ain输入信号电平的设置,启动仿真器Simulator,观察输出波形的情况。

6、锁定引脚、编译并编程下载,硬件实测此全加器的逻辑功能。

图5-21 在顶层编辑窗中设计好全加器

图5-22 1位全加器的时序仿真波形

5.1.9 设计流程归纳

图5-23所示的是利用MAX+plusII进行设计的一般流程,因此对原理图输入设计和文本方式的硬件描述语言设计输入都能适用。

35

图5-23 MAX+plusII一般设计流程

以上的“步骤8”是一个多层次设计示例,其设计流程与图5-23所示的单一层次设计完全一样,此时低层次的设计项目只是高层项目(顶层设计)中的某个或某些元件,而当前的顶层设计项目也可成为更高层设计中的一个元件。

5.1.10 补充说明

为了使以上的各设计步骤表达得更为简洁和浅显易懂,一些需要详细说明的内容未能提及,故在此作为补充说明

详述如下:

1、图5-7编译窗各功能项目块含义如下:

? Compiler Netlist Extractor :编译器网表文件提取器,该功能块将输入的原理图文件或HDL文本文件转化成网表文件并检查其中可能的错误。该模块还负责连接顶层设计中的多层次设计文件;此外还包含一个内置的,用于接受外部标准网表文件的阅读器。

? Database Builder :基本编译文件建立器,该功能块将含有任何层次的设计网表文件转化成一个单一层次的网表文件,以便进行逻辑综合。

? Logic Synthesizer :逻辑综合器,对设计项目进行逻辑化简、逻辑优化和检查逻辑错误。综合后输出的网表文件表达了设计项目中底层逻辑元件最基本的连接方式和逻辑关系。逻辑综合器的工作方式和优化方案可以通过一些选项来实现,这将在第12中详述。

? Partitioner :逻辑分割器,如果选定的目标器件逻辑资源过小,而设计项目较大,该分割器则自动将设计项目进行分割,使得它们能够实现在多个选定的器件中。

? Fitter :适配器,适配器也称结构综合器或布线布局器。它将逻辑综合所得的网表文件,即底层逻辑元件的基本连接关系,在选定的目标器件中具体实现。对于布线布局的策略和优化方式也可以通过设置一些选项来改变和实现。 ? Timing SNF Extractor :时序仿真网表文件提取器,该功能块从适配器输出的文件中提取时序仿真网表文件,留待对设计项目进行仿真测试用。对于大的设计项目一般先进行功能仿真,方法是在Compiler窗口下选择Processing项中的Functional SNF Extractor功能仿真网表文件提取器选项。

? Assembler :装配器,该功能块将适配器输出的文件,根据不同的目标器件,不同的配置ROM产生多种格式的编程/配置文件,如用于CPLD或配置ROM用的POF编程文件(编程目标文件);用于对FPGA直接配置的SOF文件(SRAM目标文件);可用于单片机对FPGA配置的Hex文件,以及其它TTFs、Jam、JBC和JEDEC文件等。

第二节 设计有时钟使能的两位十进制计数器

频率计设计的基本步骤与上节介绍的完全一样,只是需要考虑从哪一个电路模块开始。

图5-24 用74390设计一个有时钟使能的两位十进制计数器

36

图5-25 调出元件74390 图5-26 从Help中了解74390的详细功能

1、设计电路原理图,频率计的核心元件之一是含有时钟使能及进位扩展输出的十进制计数器。为此这里拟用一个双十进制计数74390和其它一些辅助元件来完成。电路原理图应该如图5-24所示。图中,74390连接成两个独立的十进制计数器,待测频率信号clk通过一个与门进入74390的计数器1的时钟输入端1CLKA,与门的另一端由计数使能信号enb控制:当enb = '1' 时允许计数;enb = '0' 时禁止计数。计数器1的4位输出q[3]、q[2]、q[1]和q[0]并成总线表达方式即q[3..0],由图5-24左下角的OUTPUT输出端口向外输出计数值,同时由一个4输入与门和两个反相器构成进位信号进入第2个计数器的时钟输入端2CLKA。

第2个计数器的4位计数输出是q[7]、q[6]、q[5]和q[4],总线输出信号是q[7..4]。这两个计数器的总的进位信号,即可用于扩展输出的进位信号由一个6输入与门和两个反相器产生,由cout输出。clr是计数器的清零信号。

2、计数器电路实现,在此首先从实现图5-24所示的电路的绘制和测试开始,为此可以在上节的步骤2中用鼠标双击“Enter Symbol”窗中Symbol Libraries栏的e:\\maxplus2\\max2lib\\mf的宏功能元件库,于是可以在Symbol Files栏中看到绝大多数74系列的元件(图5-25)。这些器件的详细功能及其它们的逻辑真值表可以通过查阅“Help”选项来获得。为了查阅74390的功能,可如图5-26所示,在Help菜单中选Old-Style Macrofunctions项,然后选Counters项。

图5-27 两位十进制计数器工作波形

向原理图编辑窗中调入宏功能元件可以如图5-25所示,直接在上端的Symbol Name栏中键入器件的名称,如74390等,然后点击OK键即可。如果要了解74390内部的情况,可以用鼠标在其上双击。最后根据图5-24在原理图编辑窗中完成该电路的全部绘制。绘制过程中应特别注意图形设计规则中信号标号和总线的表达方式:

若将一根细线变成以粗线显示的总线,可以先将其点击使其变成红色,再选Option选项中的Line Style ;若在某线上加信号标号,也应该在该线某处点击使其变成红色,然后键入标号名称,标有相

37

同标号的线段可视作连接线段,但可不必直接连接。对于以标号方式进行总线连接可以如图5-24那样。例如一根8位的总线bus1(7..0)欲与另3根分别为1、3、4位的连线相接,它们的标号可分别表示为bus1(0),bus1(3..1),bus1(7..4)。

2、波形仿真,按照上节步骤5介绍的流程能够很容易地得到图5-24电路的仿真波形(图5-27)。由波形图5-27可见,图5-24电路的功能完全符合原设计要求:当clk输入时钟信号时,clr信号具有清0功能,当enb为高电平时允许计数,低电平时禁止计数;当低4位计数器计到9的向高4位计数器进位,另外由于图5-27中没有显示高4位计数器计到9,故看不到count的进位信号。

如果本设计电路的存盘文件名为conter8.gdf ,则按照步骤5的第9段介绍的方法,将此项设计包装成一个元件存入库中以备后用,该电路对应的元件名是conter8 。

第6章 VHDL设计初步

第一节 2选1多路选择器的VHDL描述

例6-1是2选1多路选择器的VHDL完整描述,即可以直接

综合出实现相应功能的逻辑电路及其功能器件。图6-1是此描述 【例6-1】

ENTITY mux21a IS

对应的逻辑图或者器件图,图中,a和b分别是两个数据输入端 PORT ( a, b : IN BIT; 的端口名,s为通道选择控制信号输入端的端口名,y为输出 s : IN BIT; 端的端口名。“mux21a”是此器件的名称,这类似于 y : OUT BIT );

END ENTITY mux21a;

“74LS138”、

【例6-2】

“CD4013”等器件ARCHITECTURE one OF mux21a IS ENTITY mux21a IS BEGIN

PORT ( a, b : IN BIT; 的名称。电路图图 y <= a WHEN s='0' ELSE s : IN BIT;

6-2是例6-1综合 b ; y : OUT BIT ); END ARCHITECTURE one ;

END ENTITY mux21a; 后获得的电路,因

而可以认为是多路选择器“mux21a”内部电路结构。 ARCHITECTURE one OF mux21a IS

SIGNAL d,e : BIT; 由例6-1可见,此电路的VHDL描述由两大部分组成: BEGIN

1、由关键词ENTITY 引导,以 END ENTITY mux21a d <= a AND (NOT S) ;

e <= b AND s ; 结尾的语句部分,称为实体。实体描述电路器件的外部情

y <= d OR e ;

END ARCHITECTURE one ; 【例6-3】 . . .

ARCHITECTURE one OF mux21a IS BEGIN

y<=(a AND(NOT s)) OR (b AND s); END ARCHITECTURE one ; 【例6-4】

ENTITY mux21a IS

PORT ( a, b : IN BIT; s : IN BIT; y : OUT BIT ); END ENTITY mux21a;

ARCHITECTURE one OF mux21a IS BEGIN

PROCESS (a,b,s) BEGIN

IF s = '0' THEN y <= a ; ELSE y <= b ; END IF;

END PROCESS;

END ARCHITECTURE one ;

图6-1 mux21a实体 图6-2 mux21a结构体

况及各信号端口的基本性质。图6-1可以认为是实体的图形表达。

2、由关键词ARCHITECTURE引导,以END ARCHITECTURE one结尾的语句部分,称为结构体。结构体描述电路器件的内部逻辑功能或电路结构。图6-2是此结构体的原理图表达。

在VHDL结构体中用于描述逻辑功能和电路结构的语句分为顺序语句和并行语句两部分,顺序语句的执行方式十分类似于普通软件语言的程序执行方式,都是按照语句的前后排列方式顺序执行的。而在结构体中的并行语句,

无论有多少行,都是同时执行的,与语句的前后次序无关。

例6-1中的逻辑描述是用一句WHEN_ELSE结构的并行语句表达的。它的含义是,当满足条件s='0',即s为低电平时a输入端的信号传送至y ,否则,即s为高电平时,b 输入端的信号传送至y 。

38

也可以用其他的语句形式来描述以上相同的逻辑行为。例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、实体表达

VHDL完整的,可综合的程序结构,必须完整地表达出一片专用集成电路ASIC器件的端口结构和电路功能用,无论是一片74LS138还是一片CPU,都必须包含 实体和结构体两个最基本图6-3 mux21a功能时序波形 的语言结构,这里将含有完

整程序结构(包含实体和结构体)的VHDL表述称为设计实体。如前所述,实体描述的是电路器件的端口构成和信号属性,它的最简表式如下:

【例6-5】

ENTITY e_name IS

PORT ( p_name : port_m data_type; . . .

p_namei : port_mi data_type ); END ENTITY e_name;

或:

【例6-6】

ENTITY e_name IS

PORT ( p_name : port_m data_type; . . .

p_namei : port_mi data_type ); END e_name;

上下两种表式的唯一区别是IEEE93/87标准不同。前者为IEEE93标准、而后者是IEEE87,一般VHDL综合器都兼容两种不同标准。上式中ENTITY、IS、PORT和END ENTITY都是描述实体的关键词,在实体描述中必须包含这些关键词,编辑中,关键词不分大写和小写。 2、实体名

例6-5/6-6中的e_name是实体名,具体取名由设计者自定。由于实体名实际上表达的是该设计电路的器件名,所以最好根据相应电路的功能来确定,如4位二进制计数器,实体名可取为counter4b;8位二进制加法器,实体名可取为adder8b等等。需要特别注意的是,一般不应用数字或中文定义实体名,也不应用与EDA工具库中已定义好的元件名作为实体名,如or2、latch等,也不能用数字带头的实体名,如74LSX。

39

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】

ARCHITECTURE arch_name OF e_name IS (说明语句) BEGIN

(功能描述语句)

END ARCHITECTURE arch_name ;

或: 【例6-8】

ARCHITECTURE arch_name OF e_name IS (说明语句) BEGIN

(功能描述语句) END arch_name ;

和例6-5/6-6一样,上下两种表式的唯一区别是IEEE93/87标准不同。前者为IEEE93标准、而后者是IEEE87。上式中ARCHITECTURE、OF、IS、BEGIN和END ARCHITECTURE都是描述结构体的关键词,在描述中必须包含,arch_name是结构体名。

(说明语句)包括在结构体中需要说明和定义的数据对象、数据类型、元件调用声明等等。(说明语句)并非是必须的,(功能描述语句)则不同,结构体中必须给出相应的电路功能描述语句,可以是并行语句,顺序语句或它们的混合。

一般地,一个可综合的,完整的VHDL程序有比较固定的结构。设计实体中,一般首先出现的是各类库及其程序包的使用声明,包括未以显式表达的工作库WORK库的使用声明,然后是实体描述,

40

然后是结构体描述,而在结构体中可以含有不同的逻辑表达语句结构。这里对一个相对完整的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

例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 ... 表达式 ;

在结构体中的条件信号赋值语句的功能与在进程中的IF 语句相同,在执行条件信号语句时,每一“赋值条件”是按书写的先后关系逐项测定的,一旦发现(赋值条件= TRUE),立即将“表达式”的值赋给“赋值目标”信号。另外应注意,由于条件测试的顺序性,条件信号赋值语句中的第一子句具有最高赋值优先级,第二句其次,如此类推。例如在以下程序中,如果当p1和p2同时为'1'时,z获得的赋值是a而不可能是b 。

z <= a WHEN p1 = '1' ELSE

b WHEN p2 = '1' ELSE c ;

41

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 文件名不分大小写

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

与其它硬件描述语言相比,在时序电路的描述上,VHDL具有许多独特之处,最明显的是VHDL主要通过对时序器件功能和逻辑行为的描述,而非结构上的描 述即能由计算机综合出符合要求的时序电路,从而充分体现了VHDL电路系统行

图6-4 D触发器

为描述的强大功能。

6.2.1 D触发器的VHDL描述

最简单并最具代表性的时序电路是D触发器,它是现代可编程ASIC设计中最基本的时序元件和底层元件。D触发器的描述包含了VHDL对时序电路的最基本和典型的表达方式,同时也包含了VHDL中许多最具特色的语言现象。例6-9是对D触发器元件图6-4的VHDL描述。与例6-4相比,从VHDL的语言现象上看,例6-9的描述多了4个部分: 【例6-9】 1、由LIBRARY引导的库的说明部分; LIBRARY IEEE ;

USE IEEE.STD_LOGIC_1164.ALL ; 2、使用了另一种数据类型STD_LOGIC;

3、定义了一个内部节点信号SIGNAL; ENTITY DFF1 IS

PORT (CLK : IN STD_LOGIC ; 4、使用了一种新的条件判断表式。

D : IN STD_LOGIC ;

从除此之外,虽然例6-4描述的是组合电路,而例6-9描 Q : OUT STD_LOGIC );

END ; 述的是时序电路,如果不详细分析其中的表述含义,二例在语

句结构和语言应用上没有明显的差异,也不存在如其它硬件描 ARCHITECTURE bhv OF DFF1 IS 述语言(如ABEL、AHDL)那样用于表示时序和组合逻辑的特 BEGIN

PROCESS (CLK)

征语句,更没有与特定的软件或硬件相关的特征属性语句。这 BEGIN

IF CLK'EVENT AND CLK = '1' 充分表明了VHDL电路描述与设计平台和硬件实现对象无关性

THEN Q <= D ;

的优秀特点。 END IF; 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是数据类型定义语句):

42

END PROCESS ; END bhv;

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 USE IEEE.STD_LOGIC_1164.ALL ; BEGIN 正是出于需要定义端口信号的数据类型为STD_LOGIC(当然也可以定义为BIT类型或其它数据类型,但一般应用中推荐定义STD_LOGIC类型)。 3、SIGNAL信号定义和数据对象

PROCESS (CLK)

BEGIN

IF CLK'EVENT AND CLK = '1' THEN Q <= D ; END IF;

END PROCESS ; END ;

例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

43

中的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的数据类型定义为STD_LOGIC,则在 ? 时间段内,clock从其数据类型允许的9种值中的任何一个值向另一值跳变,如由'0'变成'1'、由'1'变成'0'或由'Z'变成'0',都认为发生了事件,于是此表式将输出一个布尔值 TRUE,否则为 FALSE。

如果将以上短语“clock’EVENT” 改成语句“clock ’EVENT AND

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

clock='1'”,

则一旦“clock’EVENT” 在 ? 时间内测得clock有一个【例6-11】

ENTITY COMP_BAD IS 跳变,而小时间段 ? 之后又测得clock为高电平'1',从 PORT( a1 : IN BIT;

而满足此语句右侧的 b1 : IN BIT;

q1 : OUT BIT ); “clock='1' ”的条END ;

ARCHITECTURE one OF COMP_BAD IS 件,而两者相与(AND) BEGIN 后返回TRUE,由此便可 PROCESS (a1,b1)

以从当前的 图6-6 例6-12的电路图 BEGIN

IF a1 > b1 THEN q1 <= '1' ; “clock='1'”推断在ELSIF a1 < b1 THEN q1 <= '0' ;

此前的 ? 时间段内,clock必为0(假设clock的数据类END IF;

END PROCESS ; 型为BIT)。因此,以上的表达式可以用来对信号clock的END ;

上升沿进行检测。 现在来分析例6-9 中对D触发器功能的描述:

首先当时钟信号CLK发生变化时,PROCESS语句被启动,IF语句将测定条件表式“CLK'EVENT AND CLK = '1'”是否满足条件(即CLK的上升沿是否到来),如果为“true”,则执行语句 Q1<=D,即将D的数据向内部信号Q1赋值,并结束IF语句,最后将Q1的值向端口信号Q输出,即执行 Q<=Q1。

如果CLK没有发生变化,或是非上升沿方式的变化,IF语句都不满足条件,即条件表式给出“false”,于是将

跳过赋值表式Q1<=D 结束IF语句的执行。由于在此IF语句中没有利用ELSE明确指出当IF语句不满足条件时作何操作。显然这是一种不完整的条件语句(即在条件语句中,没有将所有可能发生的

44

【例6-12】

ENTITY COMP_GOOD IS PORT(a1 : IN BIT; b1 : IN BIT;

q1 : OUT BIT ); END ;

ARCHITECTURE one OF COMP_GOOD IS BEGIN

PROCESS (a1,b1) BEGIN

IF a1 > b1 THEN q1 <=1'; ELSE q1 <= '0' ; END IF; END PROCESS ; END ;

5、不完整条件语句与时序电路

条件给出对应的处理方式),对于这种语言现象,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的文本输入设计方法,但其基本设计流程是具有一般性,因而,设计的基本方法也完全适合于其它EDA工具软件。作为实验准备,本节将介绍利用MAX+plusII进行VHDL文本输入设计的基本方法和流程(参考图5-23)。

整个设计流程与第5章介绍的原理图输入设计方法基本相同,只是在一开始的原文件创建上稍有不同。以下拟此作简要说明。

6.3.1 编辑输入并存盘VHDL原文件

与原理图设计方法一样,首先应该建立好工作库目录,以便设计工程项目的存储。作为示例,在此设立目录为: E:\\muxfile ,作为工作库。以便将设计过程中的相关文件存储在此。

接下去是打开MAX+plusII, 选择菜单“File”?

“New?”,出现如图6-12所示的对话框,在框中选中

“Text Editor file”,按“OK”按钮,即选中了文 图6-12 建立文本编辑器对话框 本编辑方式。在出现的“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 将当前设计设定为工程

需要特别注意的是,在编译/综合MUX21A.VHD之前,需要设置此文件为顶层文件(最上层文件),或称工程文件:Project,或者说将此项设计设置成工程。

45

选择菜单“File”?Project?“Set Project to Current File”,当前的设计工程即被指定为MUX21A 。也可以通过选“File”?“Project”?“Name”,在跳出的“Project Name”窗中指定E:\\MUXFILE下的MUX21A.VHD为当前的工程。设定后可以看见MAX+plusII主窗左上方(图6-14)的工程项目路径指向为:“e:\\muxfile\\mux21a”。这个路径指向很重要!

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

图6-14 设定当前文件为工程

在设定工程文件后,应该选择用于编程的目标芯片:选择菜单“Assign”?“Device?”,在弹出的对话框中的“Device Family”下拉栏中,例如选择FLEX10K,然后在Devices列表框中选择芯片型号“EPF10K10LC84-3”,按OK。

在设定工程文件后,应该选择用于编程的目标芯片:选择菜单“Assign”?“Device?”,在弹出的对话框中的“Device Family”下拉栏中,例如选择FLEX10K,然后在“Devices”列表框中选择芯片型号“EPF10K10LC84-3”,按OK。

在设计中,设定某项VHDL设计为工程应该注意以下3方面的问题:

1、如果设计项目由多个VHDL文件组成,如本章给出的全加器,应先对各低层次文件(元件),如或门或半加器分别进行编辑、设置成工程、编译、综合、乃至仿真测试并存盘后以备后用。

2、最后将定顶层文件(存在同一目录中)设置为工程,统一处理,这时顶层文件能根据例化语句自动调用底层设计文件。

3、在设定顶层文件为工程后,底层设计文件原来设定的元件型号和引脚锁定信息自动失效。元件型号的选定和引脚锁定情况始终以工程文件(顶层文件)的设定为准。同样,仿真结果也是针对工程文件的。所以在对最后的顶层文件处理时,仍然应该对它重新设定元件型号和引脚锁定(引脚锁定只有在最后硬件测试时才是必须的)。如果需要对特定的底层文件(元件)进行仿真,只能将某底层文件(元件)暂时设定为工程,进行功能测试或时序仿真。

46

6.3.3 选择VHDL文本编译版本号和排错

选菜单“MAX+plus II”?“Compiler”菜单,出现编译窗(图6-15)后,需要根据自己输入的VHDL文本格式选择VHDL文本编译版本号。

选择如图6-15所示界面上方的“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-15 设定VHDL编译版本号

如图6-13所示,MUX21A.VHD文件中的实体结束语句没有加分号“;”,在编译时出现了如图6-16所示的出错信息指示。有时尽管只有1、2个小错,但却会出现大量的出错信息,确定错误所在的最好办法是找到最上一排错误信息指示,用鼠标点成黑色,然后点击如图6-16所示窗口左下方的“Locate”错误定位钮,就能发现在出现文本编译窗中闪动的光标附近找到错误所在。纠正后再次编译,直至排除所有错误。

注意闪动的光标指示错误所在只是相对的,有的错误比较复杂,很难用此定位。

图6-16 确定设计文件中的错误

VHDL文本编辑中还可能出现许多其它错误,如:

1、错将设计文件存入了根目录,并将其设定成工程,由于没有了工作库,报错信息如下: Error :Can't open VHDL \

2、错将设计文件的后缀写成.tdf而非.vhd,在设定工程后编译时,报错信息如下: Error :Line1,File e:\\muxfile\\mux21a.tdf: TDF syntax error: ...

3、未将设计文件名存为其实体名,如错写为muxa.vhd,设定工程编译时,报错信息如下: Error :Line1,...VHDL Design File \ 6.3.4 时序仿真

时序仿真的详细步骤必须参考以上的第五章,第一节的5.1.5步骤5。 首先选择菜单“File”?“New?”,打开图6-12所示的对话框,选择“Waveform Editor”,按“OK”按钮后进入仿真波形编辑窗。接下去选择菜单“Node”?“Enter Nodes from SNF”,

47

进入仿真文件信号接点输入窗,按右上角“List”键后,将测试信号s(I)、b(I)、a(I)和y(O)输入仿真波形编辑窗。

选择Options项,将Snap to Grid的勾去掉;选择“File”?“End Time”,设定仿真时间区域,如设30us。给出输入信号后,选择MAX+plusII菜单Simulator进行仿真运算,波形如图6-17所示。输入信号详细的加入方法参考第4章。

图6-17 mux21a仿真波形

在图6-17仿真波形中,多路选择器mux21a的输入端口a和b分别输入时钟周期为50ns和200ns的时变信号。由图可见,当控制端s为高电平时,y的输出为b的低频率信号,而当s为低电平时,y的输出为a的高频率信号。

注意,仿真波形文件的建立,一定要十分注意仿真时间区域的设定,以及时钟信号的周期设置,否则即使设计正确也无法获得正确的仿真结果。如图6-17所示,设定了比较合理的仿真时间区域和信号频率。

即仿真时间区域不能太小,仿真频率不能太高,即信号周期不能小到与器件的延时相比拟。 6.3.5 硬件测试

根据第4章介绍的方法,在实验系统上验证设计的正确性,完成硬件测试。如果目标器件是EPF10K10,建议选择实验电路模式5,用键1(PIO0,引脚号为5)控制通道选择信号s ;a和b分别接clock5(引脚号为83)和clock0(引脚号为2);输出信号y接扬声器spker(引脚号为3)。通过短路帽选择clock0接256Hz信号,clock5接1024Hz信号。

现在根据以上确定的实验模式锁定多路选择器在目标芯片中的具体引脚:首先通过选择“MAX+plus II”?“Compiler”菜单,进入编辑窗,然后在“Assign”项中选“Pin / Location / Chip”选项,在跳出的窗口中的Node Name项中输入引脚a ,这时“Pin Type”项会出现“Input”指示字,表明 a 的引脚性质是输入,否则将不出现此字。此时在“PIN”项内输入“83”引脚名,再点击右下方的Add项,此引脚即设定好了;以同样方法分别设引脚 b、s、y的引脚名分别为2、5、3,再点击上方的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.3.6 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

48

2000上的安装方法进行,在此不再赘述。

实 验

【实验1】1位全加器原理图输入设计: 设计与实验方法参考第5章第1节。 【实验2】1位全加器VHDL文本输入设计:参考图5-20和5-21,利用以下3个程序。

--或门逻辑描述

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 ;

【实验3】有时钟使能的两位十进制计数器原理图输入设计

设计与实验方法参考第5章第2节。 【实验4】两位十进制频率计原理图输入设计

利用实验2的设计结果完成两位十进制频率计原理图输入设计。 根据频率计的测频原理,可以完成如图5-28所示的频率计主体结构的电路设计。该电路中,74374是8位锁存器;74248是7段BCD译码器,它的7位输出可以直接与7段共阴数码管相接,连接方式可以参考图6-21。上面的74248显示个位频率计数值,下面的显示十位频率计数值;conter8是电路图5-24构成的元件。此电路的工作波形如图5-29所示,由该波形可以清楚地了解电路的工作原理: F_IN是待测频率信号(设其频率周期为410ns);CNT_EN是对待测频率脉冲计数允许信号(设其频率周期为32us),CNT_EN高电平时允许计数,低电平时禁止计数。仿真波形显示,当CNT_EN为高电平时允许conter8对F_IN计数,低电平时conter8停止计数,由锁存信号LOCK发出的脉冲将conter8中的2个4位十进制数“39”锁存进74374中,并由74374分高低位通过总线H[6..0]和L[6..0]输给74248译码输出显示,这就是测得的频率值。“39”的7段译码值分别是“6F”和“4F”。此后由清0信号CLR对计数器conter8清0,以备下一周期计数之用。

注意,由于有锁存器74374的存在,即使在conter8被清0后,数码管仍然能稳定显示上一测频周期测得的频率值。另外,图5-28中的进位信号COUT是留待频率计扩展用的。在实际测频中,由于CNT_EN是测频控制信号,如果其频率选定为0.5Hz,则其允许计数的脉宽为1秒,这样,数码管就能直接显示F_IN的频率值了。

【实验5】8位串入并出寄存器原理图输入设计

实验内容:用74194、74273、D触发器等器件组成8位串入并出的转换电路,要求在转换过程中数据不变,只有当8位一组数据全部转换结束后,输出才变化一次。

如果使用74299、74373、D触发器和非门来完成上述功能,应该有怎样的电路?

49

图5-28 两位十进制频率计顶层设计文件

图5-29 两位十进制频率计测频仿真波形

【实验6】2选1多路选择器VHDL设计: 设计与实验方法参考第6章第4节。 【实验7】8位硬件加法器VHDL设计 设计程序如下:

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验证此加法器的功能。

【实验8】含异步清0和同步时钟使能的4位加法计数器

1、实验目的:学习时序电路的设计、仿真和硬件测试,进一步熟悉VHDL设计技术。

50

本文来源:https://www.bwwdw.com/article/cju8.html

Top