微处理器接口芯片设计实例_第1页
微处理器接口芯片设计实例_第2页
微处理器接口芯片设计实例_第3页
微处理器接口芯片设计实例_第4页
微处理器接口芯片设计实例_第5页
已阅读5页,还剩64页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

微处理器接口芯片设计实例12.1可编程并行接口芯片设计实例12.2SCI串行接口芯片设计实例习题与思考题

12.1可编程并行接口芯片设计实例

凡是学习过微型计算机原理的读者都知道,8255是典型的可编程并行接口芯片,它广泛地应用于各种接口电路中。为使设计的程序不过于复杂,这里所设计的芯片仅适用于8255的“0”型工作方式,即基本的输入/输出方式。

A0~A1——端口地址选择信号线。8255有4个端口:其中3个为输入/输出口,1个为控制寄存器端口。具体规定如下:

A1A0 选择端口

00 A口

01 B口

10 C口

11 控制寄存器

通常A0、A1与CPU的地址总线A0和A1相连接。

RESET——复位信号输入,高电平有效。复位后,8255的A口、B口、C口均被定义为输入。

PA0~PA7、PB0~PB7、PC0~PC7——3个输入/输出端口的引脚,其输入/输出方向由软件来设定。

图12-18255的引脚图

2.内部结构

8255的内部结构框图如图12-2所示。

从图12-2中可以看到,左边的信号与CPU总线相连,而右边的信号则与外设相连。A、B、C口的输出均有锁存能力,而输入都没有锁存能力(这一点与原8255芯片略有区别)。

为了控制方便,将8255的3个口分成A、B两组。其中,A组包括A口的8条线PA0~PA7和C口的高4位PC4~PC7;B组包括B口的8条线PB0~PB7和C口的低4位PC0~PC3。A组和B组都分别由软件编程来加以控制。

图12-2

8255的内部结构框图

12.1.2

8255的工作方式及其控制字

8255有3种工作方式:方式0、方式1和方式2。前面已经提到,为简化设计这里只设定为方式0。

1.8255的方式0

在此方式下,A口的8条线、B口的8条线、C口的高4位对应的4条线和C口低4位对应的4条线可分别定义为输入或输出。因为上述4部分的输入或输出是可以互相独立来定义的,故它们的输入/输出组合有16种。另外,在方式0的情况下,C口还具有按位置位和复位的能力,这一点将在后述的控制字中详述。

2.控制字

8255具有很强大的功能,其不同功能的实现是通过对控制器写不同控制字来实现的。8255有两种控制字:方式控制字和C口位操作控制字。

1)方式控制字

8255的方式控制字的格式如图12-3所示。方式控制字的标志是控制字的最高位为“1”,即图中的b7位为“1”。

图12-3

8255的方式控制字的格式

如果现在设定A口为输入口,B口为输出口,C口的低4位为输入,C口的高4位为输出,那么控制字的格式应为

控制字的值为91H,那么将该控制字写向控制寄存器,就会使8255处于所设定的工作方式。

2) C口位操作控制字

C口位操作控制字的格式如图12-4所示。

图12-4

C口位操作控制字的格式

该控制字和方式控制字的区别在于:控制字的最高位(b7位)为“0”,用此位作为软开关可将控制字写入不同的控制寄存器。例如,当PC口作为输出口时,用如下控制字:

其值为0DH。将此值送控制寄存器地址就可以使PC6置“1”。

12.1.3

8255的结构设计

由图12-2所示的8255内部结构框图可知,该芯片应由3种逻辑电路构成:锁存器、组合逻辑电路和三态缓冲器。

1.锁存器

锁存器用于锁存数据。在8255的结构中应定义7个锁存器,它们是:

pa_latch——A口输出锁存器,8位;

pb_latch——B口输出锁存器,8位;

pcl_latch——C口低4位输出锁存器;

pch_latch——C口高4位输出锁存器;

ctrreg——方式控制字寄存器;

bctrreg——C口位控制字寄存器,4位;

ctrregF——选择标志寄存器,1位。

当该标志寄存器为“1”时,数据存入方式控制字寄存器;当它为“0”时,数据的低4位存入C口控制字寄存器。

2.三态缓冲器

在8255芯片中数据线D0~D7和端口PA、PB、PC都可以是双向的。因此,在设计该部分逻辑与外部接口时,必须是三态的,即这些引脚都应为三态双向引脚。

3.组合逻辑电路

除上述两类电路外,余下的基本上是选择电路或译码电路。

12.1.48255芯片的VHDL描述

由于该VHDL描述的程序模块将在MAX + plusⅡ的工具上进行编译、综合和仿真,因此程序中应采用RTL描述方式。

【例12-1】8255芯片的VHDL描述程序。

本程序清单的前4条说明语句用于所引用的IEEE库。接着8行是8255的实体描述,其中输入/输出引脚与8255定义相同。在这里只是将PC口的8条线分成高4位和低4位而已。由于pa、pb、pc和d都是双向的,因此在这里也定义成双向。

8255的构造体由5个进程构成,它们是读进程、写进程和形成pa、pb、pc三态输出的三个进程。下面对构造体中的有关问题作一说明。

1.构造体中各信号的定义和说明

1)内部总线

在构造体中定义了两条内部总线internal_bus_in和internal_bus_out,所有8位数据的输入或输出在8255芯片内部都是通过这两条总线实现的。

2)锁存器和寄存器输出

构造体中信号pa_latch、pb_latch及pc_latch是8255芯片中A口、B口及C口锁存器的输出。信号ctrreg是方式控制寄存器的输出。

其他信号是为了内部连接而引入的,请读者自行理解。

2.写进程

8255在方式0下写进程的流程图如图12-5所示。

在写进程最前面是将写8255时的最高数据位送标志寄存器保存,以便以后在判别是方式控制字还是位控制字时使用。这里的标志寄存器采用的是变量ctrregF,而没有采用信号量。

当复位信号有效(reset = 1)时,对8255芯片进行初始化。前面提到8255芯片复位后所有端口都处于输入方式,故方式控制寄存器初始化值应为9BH,其他均设置为“0”。

图12-5写进程的流程图

如果是写状态,则根据数据线D0~D7送来的不同数据及地址线A0~A1的不同状态,将数据写入控制寄存器或pa、pb、pc各输出锁存器。程序中的CASE语句用来实现C口的位控功能。当写控制寄存器的控制字为位控字(b7 = 0)时,b3~b0的值就写入位控寄存器。位控寄存器的输出经译码使C口的某一位置位或复位。

这里的位控寄存器bctrreg_v定义成一个变量。将其定义成信号量是否可以?会出现什么结果呢?请读者自行思考。

3.读进程

读进程的程序如例12-1所示。其工作过程是当选片信号有效(CS

= 0)和读信号有效(RD=0)时,从A口、B口或C口读入外部设备提供的数据。注意,在本设计中所有端口输入都是不锁存的。

由于读进程程序比较简单,因此这里不再用流程图说明。要注意的是,该读进程还描述了最终送数据总线D0~D7的数据是通过三态缓冲器来实现的。

12.1.58255芯片VHDL描述模块的仿真

前面详细解释了8255芯片的VHDL描述程序的各组成部分。为了证明该程序模块的正确性,我们用MAX+pulsⅡ的仿真器进行了实际仿真,其仿真波形如图12-6所示。

图12-6

8255芯片VHDL模块的仿真波形

图12-6中,开始reset施加高电平(“1”),使8255芯片复位,所有端口都处于输入方式。接着向方式控制寄存器写控制字90H,使得A口变为输入口,B口、C口变为输出口。然后向控制寄存器写0FH数据,从仿真波形中可以看到,写完后pch输出变为8H。0FH是位控控制字,它使C口的最高位置“1”。将数据总线D0~D7的值改为FFH,再将该数据写入C口,在写操作完成后C口变为FFH。下面再向控制寄存器写位控控制字02H。该字表明要将pc1位清零。在写操作完成后,pc1变为DH,表明pc1位已清零。

再改变A口的输入数据值,使其成为66H,读A口就从A口得到66H值并从D0~D7输出。改变D0~D7数据上的值,使其成为99H,并将该值写向B口,那么在该写操作完成后,在B口输出端即得到99H输出值。

由上述分析可知,该8255芯片的VHDL描述模块的仿真结果是正确的,完全符合8255方式0的输入/输出功能。

12.2

SCI串行接口芯片设计实例

目前最常见的串行接口芯片有8251和8250,同样为了简化设计,这里只举一个固定信号格式的串行接口芯片SCI的设计。

TXD——串行发送数据输出;

rdFULL——接收寄存器“满”信号输出;

tdEMPTY——发送寄存器“空”信号输出;

D0~D7——数据总线输入/输出端。

注意:D0~D7是双向三态输入/输出端。

2.内部结构

SCI芯片的内部结构如图12-8所示。它由状态发生器、串并变换器、并串变换器、锁存器和三态缓冲器组成。由图12-8可知,该SCI芯片的功能和性能是固定的,而不是程序可编的。

图12-8

SCI芯片的内部结构框图

12.2.2串行数据传送的格式与同步控制机构

1.串行数据传送的格式

SCI芯片以固定的串行数据传送格式来传送数据。传送一个数据或一个字符共需10位,即1位启动位、8位数据位或1个字符、1个校验位、1个停止位。为了能对位进行正确的操作,选取的每位数据位应包含4个时钟(CLK)周期。为了得到串行数据传送的波特率(例如9600b/s),外部时钟应选取为38.4 kHz。

2.串行数据传送的控制机构

在异步串行数据传送时,由于没有专门提供同步信号,因此只能从所传送的信号中提取同步信息,例如数据的启动位就为SCI的串并变换提供启动信号。

1)串行数据接收的同步控制

在串行数据接收的同步控制器中设置了一个6位的计数器,高4位为sh_r,低2位为sl_r。利用该计数器的计数状态可实现串行数据接收的同步控制。计数器的状态与串行数据接收、发送过程的波形关系如图12-9所示。

图12-9计数器的状态与串行数据接收、发送过程的波形关系

从图12-9中可以看到,在RXD端的启动位未到达以前,sh_r和sl_r都保持为“0”。当同步控制机构检测到启动位以后,就立即将sh_r置为7H(0111B),sl_r置为0(00B)。此后计数器启动,对CLK进行计数。当计数到sh_r = FH,sl_r = 3H时,一个数据接收过程结束,计数器又处于0状态,等待下一个启动位的到来。根据此接收一个数据的过程即可画出其状态转移图如图12-10所示

图12-10接收一个数据的状态转移图

从图12-10中可以看到,sh_r从0H到6H的值都处于空闲状态,只有出现启动位后sh_r才跳到7H状态,此后每4个时钟周期转移一个状态(即接收1位数据),直到sh_r为FH,

8位数据结束为止。

2)串行数据发送的同步控制

串行数据发送的同步控制与串行数据接收的同步控制类同,所不同的是启动发送数据的条件不是启动信号,而是“空”信号tdEMPTY。当发送锁存器din_latch空时,tdEMPTY = 1;当CPU向发送锁存器写入一个发送数据以后,tdEMPTY = '0'。该信号变为“0”,将启动发送计数器,在CLK的同步下使sh_t置为7H,sl_t置为0H。在CLK时钟驱动下,sh_t从7H到FH逐个进行计数,完成一个数据的发送过程。发送一个数据的状态转移图请读者自行画出。

12.2.3SCI芯片的VHDL描述

【例12-2】SCI芯片的VHDL描述程序。

程序清单的前4条语句用于所引用的IEEE库,后续的5行语句是对SCI的实体进行描述,对输入/输出引脚的定义与图12-7所示的相同。需要指出的是,D0~D7是三态双向数据总线。

1.构造体上各信号的定义与说明

1)计数器输出

在SCI芯片描述程序中定义了两个计数器输出。其中一个是发送计数器输出scit,另一个是接收计数器输出scir。另外,还将scit输出分为高4位输出sh_t和低2位输出sl_t。同理,scir输出分为sh_r和sl_r两个输出。

2)移位寄存器输出

接收串行数据的移位寄存器输出定义为d_fb。在一个数据接收结束后,它输出的就是一个完整的8位数据值。

3)锁存器输出

SCI芯片有两个锁存器do_latch和din_latch。其中,do_latch锁存移位寄存器输出的数据,而din_latch则锁存要发送的数据。

4)标志寄存器输出

为了实现与计算机的读/写同步,这里设置了两条状态线rdFULL_s和tdEMPTY_s。当接收数据装入do_latch时,rdFULL_s变为“1”;当计算机读走该数据时,则置“0”。当计算机写入一个发送数据至din_latch时,tdEMPTY_s变为“0”;当一个数据发送完毕时,则置“1”。txdF和rxdF是发送和接收过程的中间标志。

2.内部各进程的描述

第1个进程是对rdFULL标志进行置“0”、置“1”操作和在串行数据接收结束时将接收数据送给do_latch锁存器输出的进程。当接收结束时,移位寄存器d_fb将数据送入do_latch,同时将标志信号rdFULL_s置“1”,向计算机表示数据已准备好,可以来读取。当rd = 0且cs = 0时,表示计算机读接收数据,此时使rdFULL_s变为“0”,表明数据已读走,为下一次读作准备。

第2个进程是写数据进程,计算机将数据总线上的一个数据写入发送寄存器din_latch。

第3个进程是对标志rxdF进行操作的进程。当rxd = ‘0’,表明启动位到来时,rxdF置“1”;当一个数据接收完毕时,将其置“0”。

第4个进程是对txdF和tdEMPTY_s进行置“0”、置“1”操作的进程。当写发送寄存器时txdF和tdEMPTY_s置“0”,而一个数据发送结束时,它们都被置“1”。

第5个进程是读进程,当rd = 0和cs = 0时,变换好的数据从接收锁存器do_latch输出到数据总线data上。

第6个进程是数据接收控制进程,当数据接收端rxd出现低电平,一个数据启动位到来时,接收控制计数器scir将其置为“011100”(28),即sh_r = 0111(7),一个接收计数周期开始。当计数到63时(sh_r = 1111,sl_r = 11),scir清零并等待下一个启动位的到来。

第7个进程是数据发送控制进程,其原理同数据接收进程。所不同的是,当CPU写一个数据到发送寄存器din_latch时,其控制计数器scit开始一个发送的计数周期;当一个数据发送结束,即scit计数到63后,就清“0”,等待下一个发送数据到来。

第8个进程是接收数据移位控制进程,进行数据的串并变换。

第9个进程是发送数据的并串变换进程。

12.2.4

SCI芯片VHDL描述模块的仿真

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论