570 likes | 845 Views
第二章 I/O 端口地址译码技术. 前言 :对于 I/O 通道扩展电路或 I/O 接口电路的设计者来说, I/O 端口读写技术是主机与扩展电路或外设接口之间交换数据的基本方式, 端口地址译码 和 端口读写技术 的研究是计算接口技术要涉及的首要问题。 本章重点 :(1)端口的基本概念 (2)端口译码的基本方法 (3)简单的译码电路设计 (4)端口的访问控制. 2.1 I/O 端口及其编址方式. I/O 端口和 I/O 操作
E N D
第二章 I/O端口地址译码技术 • 前言:对于I/O通道扩展电路或I/O 接口电路的设计者来说,I/O端口读写技术是主机与扩展电路或外设接口之间交换数据的基本方式,端口地址译码和端口读写技术的研究是计算接口技术要涉及的首要问题。 • 本章重点:(1)端口的基本概念 (2)端口译码的基本方法 (3)简单的译码电路设计 (4)端口的访问控制
2.1 I/O端口及其编址方式 • I/O端口和I/O操作 • 端口的概念:把I/O接口电路中能被CPU直接访问的寄存器或某些特定的器件称之为端口(Port) • I/O端口的一般特性: • (1)I/O端口是CPU与I/O设备直接通信的地址 • (2)CPU可以通过这些端口发送命令、读取状态和传送数据 • (3)一个接口通常含有几个端口,比如:命令口、状态口、数据口等。有的接口包括的端口少(如8251、8259接口芯片只有两个端口);有的接口的端口多(如8237有16个端口,8255有4个端口)
I/O端口及其编址方式 • (4)对端口的操作也有所不同:有的端口只能写或只能读,有的端口既可以读也可以写。一般,一个端口只能写入或读出一种信息,也可能几种信息共用一个端口 • 比如,8255的一个命令口可以接收方式控制字和位控制字这两种命令。 • I/O操作 • 是对I/O端口进行读写操作,不是对I/O设备直接操作。如何实现对这些端口的访问,这就是所谓的I/O端口的寻址方式。
端口地址编址方式 • I/O端口编址方式有两种: • (1)一种是存储器映射方式,即把端口地址与存储器地址统一编址,所以这种编址方式也称之为统一编址方式 • (2)另一种是I/O映射方式,即把I/O端口地址与存储器地址分别进行独立的编址,也称之为独立编址。
两种编址方式的特点 • 统一编址的特点: • (1)这种编址方式是从存储空间中划出一部分地址空间分配给I/O设备,而把I/O接口中的端口作为存储器单元一样进行访问,不设置专门的I/O指令。 • (2)在统一编址方式中,可以将I/O端口看作是内存单元,从原则上说,用于内存的指令均可用于外设,这给编程者提供了方便。 • (3)缺点:由于I/O端口占用内存地址,相对减少了内存可用范围,从指令上不易区分是访问内存还是访问外设的指令。这种编址方式在68系列和65系列微机中得到广泛使用。
两种编址方式的特点 • 独立编址的特点: • (1)在这种编址方式中,内存地址空间和I/O端口地址是相对独立的。比如,在8086/8088 CPU中,其内存地址是从00000H--~FFFFFH连续的1M字节,其I/O端口的地址范围从0000H--~FFFFH它们互相独立。不会影响内存空间。 • (2)设置了专门的IN、OUT等I/O指令,且I/O指令短,CPU执行速度快。程序的可读性强。 • (3) 缺点:用于I/O端口的指令功能较弱,在I/O操作中必须通过CPU的寄存器进行中转才能完成。这种编址方式在Intel系列、Z80系列微机及大型计算机得到广泛采用。
独立编址方式的端口访问 • 汇编语言中的I/O语句 • 汇编语言中的端口输入输出语句只是80X86指令系统中的I/O指令助记符而已,它是与指令系统直接对应的,记为IN/OUT。这两条指令的语言规则为: IN 累加器, {端口地址|DX} OUT {端口地址|DX},累加器 其中累加器可以是AL或AX。当累加器是AL时,端口是8位数据传送;当累加器是AX时,端口是16位数据传送。 {端口地址|DX}中的符号“|”表示前后两者之间只能选其一。
独立编址方式的端口访问 • 寻址方式有两种: • (1)直接寻址:指令中直接访问端口地址,只能表示 0~255范围内的端口。 • (2)间接寻址:指令中的端口地址放于DX中,通过DX访问端口。可以访问端口地址大于255的端口 • 例:从300H端口读入一个字节或一个字,在发给20H端口的指令为: MOV DX,300H IN AL,DX IN AX,DX OUT 20H,AL OUT 20H,AX
C语言中的端口读写函数 • 在PC系列微机上运行的几种C语言版本,都支持端口的输入输出操作,C语言中有专门的访问端口的库函数。这些库函数实际上是调用了汇编的IN/OUT指令 • 常用到的Turbo C函数如下: • (1) inportb()(2) outportb() • (3) clrscr() (4) getch() • (5) kbhit() (6) delay() • (7) sound()…
例 利用inportb()函数从所指定的输入端口2F0H读取一个字节的数据,并显示在屏幕上。 intportb()的原型为: inportb(int port),头文件为dos.h。 main() { unsigned char c; c=inportb(0x2f0); printf("data=%0x",c); }
例 将一个字节输出到输出端口360H。 outportb()的原型: void outportb(int port, unsigned char value); 头文件为dos.h。 程序: main() { outportb(0x360,0x55); }
2.2 I/O端口地址分配 • 为什么要了解PC机的端口分配:对于接口设计者来说, 清楚系统I/O端口地址分配十分重要,因为要把新的I/O设备加入到系统中就要占据一些I/O地址空间,必须了解一些关于I/O空间的信息。如哪些端口是计算机制造厂家为今后的开发而保留的;哪些地址已分配给了别的设备,哪些端口地址是空闲的。 • PC系列微机系统支持的端口数目及占用空间:端口数为1024个;其端口地址空间是从000~3FFH,采用非完全译码,高6位地址线不考虑,因此,其有效的译码地址是地址线A0--A9。
PC系列微机系统中I/O接口分类 • 按照PC系列微机系统中I/O接口电路的复杂程度及应用形式,可以把I/O接口的硬件分为两大类: • (1)系统板上的I/O接口芯片 • 这些芯片大多都是可编程的大规模集成电路,完成相应的接口操作。如定时器/计数器、中断控制器、并行接口等。 • 在PC/AT微机中,这些接口芯片是由如8259、8237A等芯片组成。随着PLD技术的发展,目前PC机系统主板上的所有I/O接口功能,已集成在一片或几片大规模集成电路芯片中,常见的主板外围集成芯片有82380、82C26、82C391等等。
PC系列微机系统中I/O接口分类 • (2)扩展槽上的I/O接口控制卡 • 这些接口控制卡是由若干个集成电路按一定的逻辑功能组成的接口部件,如多功能卡、图形卡、串行通信卡、网络接口卡等。 • 根据上面的分类,PC系列微机把I/O端口地址空间分为两部分,即把1024个端口的前256个端口(000--0FFH)专供I/O接口芯片使用,后768个端口(100--3FFH)为I/O接口控制卡使用,如表2.1和表2.2所示。
在选定I/O端口地址时的注意点 • (1)凡是被系统配置占用了的端口地址一律不能使用。 • (2)原则上讲,未被系统占用的地址用户都可以使用,但对计算机厂家申明保留的地址,不要使用,以免发生I/O端口地址重叠和冲突造成所设计的产品与系统不兼容。 • (3)通常,用户可使用300H--31FH,这是PC系列微机留作实验卡用的。在用户可用的I/O地址范围内,为了避免与其他用户开发的接口控制卡发生地址冲突,最好采用地址开关。
2.3 I/O端口地址译码 • 当CPU执行IN或OUT指令时,CPU地址总线上输出的是16位的端口地址,控制总线上输出与I/O相关的控制信号如/IOR、/IOW、AEN信号等,数据总线上送出或读入要传送的数据。 • 问题提出:怎样利用这些信号来选通某一个端口并实现数据的传送? • 由接口来完成。即对地址信号译码,将产生的译码信号同/IOR或/IOW结合起来一同控制来选通端口,并对I/O端口进行读或写操作。并将数据从数据总线送出或读入。
I/O地址译码电路 • 译码电路中用到的信号线: • 实际上I/O地址译码电路不仅与地址信号有关,而且还与控制信号有关。是把地址和控制信号进行组合,而产生对芯片的选择信号。因此要考虑的信号线有: • (1)地址线:A0--A9 • (2)一些控制信号: • A.利用/IOR、/IOW信号控制对端口的读写。 确定CPU与I/O端口交换数据时的流向 • B.用AEN信号控制非DMA传送。
I/O地址译码电路 • C.用/IOCS16信号控制是8位还是16位的I/O端口。用于确定数据宽度 (8位/16位)。 • D.用/SBHE (或/BHE)信号控制端口奇偶地址。(偶地址通过A0选通)
I/O地址的译码方法 • I/O端口地址译码的方法灵活多样,通常可由地址信号和控制信号的不同组合来选择端口地址,与存储器的地址单元类似。 • 一般是把地址信号分为两部分: • 一部分是高位地址线与CPU或总线的控制信号组合,经过译码电路产生一个片选信号/CS,选择某个I/O接口芯片,从而实现接口芯片的片间选择。 • 另一部分是低位地址线直接连到I/O接口芯片,经过接口芯片内部的地址译码电路选择该接口电路的某个寄存器端口,即实现接口芯片的片内寻址。
I/O端口地址译码电路设计 • I/O端口地址译码分类: • 按照地址译码电路采用的元器件来分 • (1)门电路译码 • (2)译码器译码 • (3)GAL、PLD译码。 • 按照译码电路的形式来看 • (1)固定式 • (2)可选式译码。
I/O端口地址译码电路设计 • 固定式端口地址译码: • (1)用门电路进行端口地址译码 • 特点:是一种最简单最基本的端口地址译码方法,一般多采用与门、与非门、反相器及或非门等。 • 如74LS00 74LS08 、 74LS04、74LS32、74LS30等 • 例1:图2.1的译码电路是实现对2F0H端口地址的,读操作。
I/O端口地址译码电路设计 电路说明: A、AEN参加译码,对端口地址译码进行控制: 只有当AEN=0时,即不是DMA操作时译码才有效; 当AEN=1时,即是DMA操作时,使译码无效。避免了在DMA操作时,对这些I/O端口地址进行读/写操作。 B、地址信号A9A8A7A6A5A4A3A2A1A0=101111000B时,译码电路才有效。 C、对端口进行读操作,所以/IOR=0,只有/IOR=0时,译码电路才有效。
I/O端口地址译码电路设计 • 例2:同样的端口地址2F0H,实现对端口2F0H进行读和写两种操作。电路如图2.2。
I/O端口地址译码电路设计 • 电路说明: • A、电路的译码输出用/IOR和/IOW信号进行控制,以分别实现读写访问。 • B、地址信号不变,此时的一个端口地址,等效于两个端口地址。一个用于输入,一个用于输出。 • C、AEN信号的作用同例1。
I/O端口地址译码电路设计 • (2)用译码器进行端口地址译码 • 若接口电路中需要使用多个端口地址时,则采用译码器译码比较方便。译码器的型号很多:如3-8译码器74LS138,8205;4-16译码器74LS154;双2-4译码器74LS139和74LS155等。 • 以3-8译码器74LS138为例,来说明这种译码方式的特点。 • 74LS138 是14pin,DIP封装,74LS138的真值表如表2.3所示。
I/O端口地址译码电路设计 • 从表2.3可以看出: • 当满足控制电平,即把G1接高电平,/G2A和/G2B接低电平时,则输出的状态由C、B、A这三个输入信号的编码来决定. • 如:当CBA=000时,/Y0=0;当CBA=111时,/Y7=0.由此可译出8个译码选通输出信号(低电平有效),当控制条件不满足时,则输出全为1,不产生译码选通输出信号,即译码无效。
图2.3 PC/XT系统板上接口控制电路的端口地址译码
I/O端口地址译码电路设计 • PC/XT系统板上的接口控制电路的端口地址译码电路说明: • A、地址线的高5位A5--A9经过74LS138译码器,分别产生了DMAC8237、中断控制器8259、定时/计数器8253、并行接口8255等接口芯片的片选信号。 • B、地址线的低5位A0--A4作为接口芯片内部寄存器的访问地址 • 当地址是000~01XH时,便有/DMACS输出为低,选中8237,由于A0--A3已接8237,故8237的口地址是000--01FH;其他芯片的端口地址范围也容易看出,如8259的片选地址是02X~03XH,口地址范围是020--03FH。
I/O端口地址译码电路设计 • 开关式可选端口地址译码 • 如果用户要求接口卡的端口地址能适应不同的地址分配场合,或为系统以后扩充留有余地,则可以使用开关式端口地址译码。 • 特点:这种译码方式可以通过开关使接口卡的I/O端口地址根据要求加以改变而无需改正电路 • 其电路结构形式有如下几种: • (1)用比较器和地址开关进行地址译码 • 原理:在接口地址译码中,可采用比较器,将地址总线上送来的地址,或者某一地址范围与预设的地址或地址范围进行比较。若两者相等,便表示地址总线送来的端口地址即为接口地址或接口所用到的口地址范围。于是便可以启动接口执行预定的操作。
I/O端口地址译码电路设计 • 常用的比较器:有4位比较器74LS85、8位比较器74LS688 • 以74LS688为例,说明此种译码电路的特点。 • 74LS688工作原理:将输入的8位数据P0--P7与另一8位数据Q0--Q7相应进行比较 • 可比较大于、小于或等于,在地址译码中仅使用比较相等的功能,大于、小于则不用 • 如图2.4 用比较器和开关组成的可选译码电路
I/O端口地址译码电路设计 • 用比较器和开关组成的可选译码电路说明: • A.把P0--P7连接到有关的地址线和控制线;Q0--Q7连接地址开关;输出端P接到两片74LS138的控制端/G2B上;/IOR和/IOW分别接两片74LS138的/G2A端;A0、A1、A2接138的A、B、C端;A9、AEN接P6和P7. • B.根据比较器的特性,当输入端P0--P7的地址与输入端Q0--Q7的开关状态一致时,输出为低电平,使译码器进行译码,因此,使用时可预置DIP地址开关为某一值,得到一组所要求的端口地址 • C./IOR和/IOW参加译码,分别产生8个读、写端口地址。
I/O端口地址译码电路设计 • E.由电路可知:当A9=1、AEN=0时译码才有效。因为电路中设置Q6=1、Q7=0。 • (2)使用跳线的可选式译码电路 • 可以使用跳线或跳接开关,对译码器输入地址作反相或不反相的选择
2.4 GAL器件在I/O端口地址译码中的应用 • GAL器件的特点: • GAL器件是可编程逻辑器件PLD(Programmable Logic Device)的一种。 • GAL器件的特点:较高的功能集成度,可以实现组合逻辑和时序逻辑电路的多种组合;电可擦除;硬件加密;灵活的现场可编程特性;和较快的速度。 • PLD器件的种类: • GAL(Generic Array Logic) • 一片GAL的电路规模可达几百门
GAL器件在I/O端口地址译码中的应用 • EPLD/CPLD(Erasable Programmable Logic Device) • EPLD规模可达几千门 • FPGA(Field Programmable Gate Array) • FPGA的规模可高达几十--100万门 • GAL器件的开发工具和开发步骤: • 开发工具: (1)硬件工具:编程器(与EPROM编程器类似);(2)软件工具:专用的编译程序和汇编程序。一般GAL可编译的输入文件格式有:布尔方程、真值表、状态转换图。 • 以FM(FAST MAP)为例说明GAL器件的开发步骤和方法。FM是通用的汇编型软件,它可对一定格式的GAL编程输入文件(扩展名.PLD)进行汇编,
GAL器件在I/O端口地址译码中的应用 • 生成列表文件(.LST)、溶丝状态图文件(.PLT)、分布数据代码文件(.JED),然后利用编程器把分布数据写入到GAL。 • GAL器件的开发步骤和方法 • 以GAL16V8为例说明GAL的开发过程。 • 普通型器件GAL16V8的特点 • (1)GAL16V8的1--9和11引脚固定作输入使用 • 13--18也可以配置成输入引脚 • 因此输入最多可为16个。 • (2)GAL16V8最多可配置8个输出引脚。
GAL器件在I/O端口地址译码中的应用 • (3)GAL16V8的规模为64×32。 • (4)它可被配置成寄存器模式、复合模式和简单模式 • 图2.6 GAL16V8的DIP封装引脚图
GAL器件在I/O端口地址译码中的应用 • GAL开发过程: • 在用PLD器件设计逻辑电路时,可避免花费大量时间去推导、化简与转换逻辑函数;也不必费心地去考虑器件内部的逻辑关系。设计人员只要选择满足设计要求的器件就可以了,在设计中使用的软件越高级,设计过程就越简单。 • 常用的HDL语言(Hardware Description Language)有VHDL、Verilog HDL, ABEL、CUPL等 • 一般可按下列步骤进行设计: • (1)设计构思。 • 用真值表、逻辑方程和状态图这三种方法中的任一种将所要设计的问题变为设计文件
GAL器件在I/O端口地址译码中的应用 • (2)选择器件型号。 • 根据设计文件的要求,选择合适的工业器件型号 • 要考虑到输入、输出的引脚数目,是组合逻辑器件还是时序逻辑器件等。 • (3)将设计文件按照所应用的HDL语言的要求,写成源文件,然后上机编译、仿真和测试。 • (4)用编程器编程。将生成的编程文件下载到编程器,对器件编程。此处的器件是最终所使用的器件,如GAL16V8、GAL20V8、AT22V10等。
GAL器件在I/O端口地址译码中的应用 • 用逻辑方程实现设计, ABEL语言实现的源文件格式如下: GAL16V8 ;器件型号,用大写 BASIC GATES ;标题,说明GAL的应用,用 ;户自定义 XU AIQING MAR.15 1998 BITI ;设计者姓名、日期等信息 BGATES ;电子标签 C D F G M N P Q I GND ;引脚名,可占用多行, J K L R O H E B A Vcc ;一般书写时,输入和输 ; 出分开。
GAL器件在I/O端口地址译码中的应用 B=/A ;逻辑方程,可占用多行;取反 E=C*D ;与门 H=F+C ;或门 L=/I+/J+/K ;与非门 O=/M*/N ;或非门 R=P*/Q+/P*Q ;异或门 DESCRIPTION ;关键字,必须大写,不可缺 • 注意: • (1)第一行和第四行位置不可变;第2、3行由设计者自定。关键字DESCRIPTION不可缺,且一定要顶格写,即前面不留空格。
GAL器件在I/O端口地址译码中的应用 • (2)器件类型和关键字必须大写。 • (3)引脚名最多由8个字符组成,名字间可用空格、制表符、回车符隔开。不用的引脚习惯上用NC表示,地用GND表示,电源用Vcc表示。引脚名必须按引脚号顺序排列。 • (4)输入文件的核心是输入和输出信号的逻辑方程。 • 采用GAL的I/O端口地址译码电路设计 • 1.要求 • (1)利用GAL器件设计MFID多功能微机接口实验平台的I/O端口地址译码电路
GAL器件在I/O端口地址译码中的应用 • (2)其端口地址范围为300H~3FFH,分成16个段,每个段包含4个接口芯片,每个接口芯片内部拥有4个端口。 • 2. 分析 • ①地址线的分配与使用。如表2.7所示。