您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 酒店餐饮 > 基于VHDL的8255并行接口电路设计
接口技术课程设计报告题目:并行接口电路8255的设计学院:学号:姓名:同组人:完成日期:中国计量学院现代科技学院一、需求分析1.Intel8255芯片是配合Inter微处理器而设计的通用可编程并行I/O接口器件它能把外围设备连到微型计算机总线上通用性强,使用灵活可以用程序来设置和改变芯片的工作方式。是一种典型的可编程并行接口芯片。8255共有三种模式:基本的输入/输出(方式0)、有选通的输入/输出(方式l)和双向总线输入/输出(方式2)。2.VHDL的由来VHDL是VeryHighSpeedIntegratedCircuitHardwareDescriptionLanguage的缩写,意思是非常高速集成电路的硬件描述语言,是HDL的一种,诞生于1982年。1987年底,VHDL被IEEE和美国国防部确认为标准硬件描述语言。自IEEE公布了VHDL的标准版本,IEEE-107687版)之后,各EDA公司相继推出了自己的VHDL设计环境,或宣布自己的设计工具可以和VHDL接口。此后VHDL在电子设计领域得到了广泛的接受,并逐步取代了原有的非标准的硬件描述语言。1993年IEEE对VHDL进行了修订从更高的抽象层次和系统描述能力上扩展VHDL的内容,公布了新版本的VHDLIEEE标准的1076-1993版本93版VHDL和Verilog作为IEEE的工业标准硬件描述语言EDA公司的支持在电子工程领域已成为事实上的通用硬件描述语言。这是一项诞生与由美国国防部所支持的研究计划,目的是为了把电子电路的设计意义以文字或文件的方式保存下来以便他人能轻易地了解电路的设计意义。由于VHDL电路描述语言所能涵盖的范围很广,从ASIC的设计到PCB系统的设计,VHDL电路描述语言都能派上用场,所以VHDL语言毫无疑问地成为硬件设计工程师的必备工具。二、结构设计1.系统整体方案为了使设计的程序不太复杂用于可编程并行接口的‘0’工作模式3.28255内部结构图可知3种逻辑电路构成和三态缓冲器。2.各模块的设计与实现可编程8255并行接口的各模块由6个进程描述它们别是读写的进程和形成pa、pb、pc三态输出的三个进程。下面对该构造体详细说明。a)构造体中各信号定义1)内部总线在构造体中定义了两条内部总线interal_bus_out和internal_bus_in8位.2)锁存器和寄存器输出构造体中信号pa_latch,pb_latch和pc_latch是8255模块中A口、B口及C口锁存器的输出。信号ctrreg是方式控制寄存器的输出.b)写进程8255模块在方式0下写进程的流程图如图5.1所示。写的进程最前面是将写8255位控制字时使用。这里的标志寄存器采用的是变量ctrregf号量。当复位信号有效时(reset='1'),对8255芯片进行初始化。前面提到8255模块复.值为9BH,其它均设置为0。c)读进程(cs=‘0’)和读信号有效(rd=‘0)A口或B口或C设计中所有端口输入的信号都是不锁存的。三、系统工作原理描述1.8255芯片引脚图内部框图数据总线缓冲器读/写控制逻辑A组端口A(8)A组端口C上半部(4)B组端口C下半部(4)B组端口B(8)A组控制B组控制8位内部数据总线内部逻辑外设接口DBRDWRA0A1RESETCSI/OPA7~PA0I/OPC7~PC4I/OPC3~PC0I/OPB7~PB0CPU接口2.8255工作方式四、外接口定义1.I/O接口的作用主机与外界交换信息的中间电路称为输入/输出(I/O)。主机与外界的信息交换是通过输入/输出设备进行的。比如常规的外设有键盘、显示器、打印机、扫描仪、磁盘机、鼠标器等,它们相对于高速的中央处理器来说,速度要慢得多。此外,不同外设的信号形式、数据格式也各不相同。因此,外部设备不能与CPU直接相连,需要通过相应的电路来完成它们之间的速度匹配、信号转换,并完成某些控制功能。把介于主机和外设之间电路称为I/O接口电路,简称I/O接口,如图示,2.接口的种类:1、并行接口打印机、绘图仪等;2、串行接口调制解调器、网络接口等;3、脉冲/计数器(定时器)接口时钟或定时;CPUI/O接口外设4、A/D(模/数)、D/A(数/模)转换器;接口可分为:专用接口:不可编程,专用于一个目的的接口电路;通用接口:可编程,通过编程可以实现多种功能和目的的接口电路;(3)微机外设对接口的要求:1、速度2、数据位数3、是否可编程,通用还是专用(4)I/O端口的编址微型计算机系统中I/O端口编址方式有两种:I/O端口与内存单元统一编址和I/O端口与内存单元独立编址。1)I/O端口与内存单元统一编址这种编址方式是对I/O端口和存储单元按照存储单元的编址方法统一编排地址号,由I/O端口地址和存储单元地址共同构成一个统一的地址空间2).I/O端口与内存单元独立编址在这种编址方式中,建立了两个地址空间,一个为内存地址空间,一个为I/O地址空间。内存地址空间和I/O地址空间是相对独立的,通过控制总线来确定CPU到底要访问内存还是I/O端口。为确保控制总线发出正确的信号,除了要有访问内存的指令之外,系统还要提供用于CPU与I/O端口之间进行数据传输的输入/输出指令3)I/O端口的地址译码微机系统常用的I/O接口电路一般都被设计成通用的I/O接口芯片,一个接口芯片内部可以有若干可寻址的端口。因此,所有接口芯片都有片选信号线和用于片内端口寻址的地址线。例如,某接口芯片内有四个端口地址,则该芯片外就会有两根地址线五、系统详细设计代码:LIBRARYieee;USEieee.std_logic_1164.ALL;entitymode0_8255isport(reset:instd_logic;--复位信号rd:instd_logic;--读信号wr:instd_logic;--写信号cs:instd_logic;--片选信号a0:instd_logic;--选择端口a1:instd_logic;--选择端口pa:inoutstd_logic_vector(7downto0);--A口pb:inoutstd_logic_vector(7downto0);--B口pcl:inoutstd_logic_vector(3downto0);--C口低四位pch:inoutstd_logic_vector(3downto0);--C口高四位databus:inoutstd_logic_vector(7downto0)--与CPU数据接口);endmode0_8255;architecturemode0ofmode0_8255issignalinternal_bus_out:std_logic_vector(7downto0);--数据写入缓冲signalinternal_bus_in:std_logic_vector(7downto0);--数据读入缓冲signalst,port_no:std_logic_vector(1downto0);signalctrl_reg:std_logic_vector(7downto0);--控制寄存器signalpa_latch,pb_latch,pc_latch:std_logic_vector(7downto0);signalctrl_reg_func:std_logic;--控制寄存器的功能控制位beginport_no=a1&a0;--选择端口号A口B口C口或控制寄存器st=ctrl_reg(3)&ctrl_reg(0);--C口高四位8位read:process(rd,cs)--读进程beginif(cs='0'andrd='0')thenif(port_no=00andctrl_reg(4)='1')theninternal_bus_in=pa;--将A口数据读入到8255elsif(port_no=01andctrl_reg(1)='1')theninternal_bus_in=pb;--将B口数据读入到8255elsif(port_no=10andst=01)theninternal_bus_in(3downto0)=pcl(3downto0);--C口低四位elsif(port_no=10andst=10)theninternal_bus_in(7downto4)=pch(3downto0);--C口高四位elsif(port_no=10andst=11andctrl_reg(7)='1')theninternal_bus_in(3downto0)=pcl(3downto0);internal_bus_in(7downto4)=pch(3downto0);endif;elseinternal_bus_in=ZZZZZZZZ;--高阻endif;databus=internal_bus_in;--将输入到8255的数据送往CPUendprocess;write1:process(cs,wr,reset)--写进程1beginif(reset='1')thenctrl_reg_func='0';--位操作控制位置0elsif(cs='0'andwr='0')thenctrl_reg_func=databus(7);internal_bus_out=databus;--数据写入到内部寄存器endif;endprocess;write2:process(reset,wr)--写进程2beginif(reset='1')then--异步复位pa_latch=00000000;pb_latch=00000000;pc_latch=00000000;ctrl_reg=10011011;--控制寄存器elsif(wr'eventandwr='1')thenif(ctrl_reg_func='1'andport_no=11andcs='0')thenctrl_reg=internal_bus_out;--数据送控制寄存器elsif(ctrl_reg(7)='1'andcs='0'andport_no=00)thenpa_latch=internal_bus_out;--数据送至A口锁存器elsif(ctrl_reg(7)='1'andcs='0'andport_no=01)thenpb_latch=internal_bus_out;--数据送至B口锁存器elsif(ctrl_reg(7)='1'andcs='0'andport_no=10)thenpc_latch=internal_bus_out;--数据送至C口锁存器endif;if(ctrl_reg_func='0'andcs='0'andport_no=11)thencaseinternal_bus_out(3downto0)is--位操作when0000=pc_latch(0)='0';when0010=pc_latch(1)='0';when0100=pc_latch(2)='0';when0110=pc_latch(3)='0';when1000=pc_latch(4)='0';when1010=pc_latch(5)='0';when1100=pc_latch(6)='0';when1110=pc_latch(7)='0';when0001=pc_latch(0)='1';when0011=pc_latch(1)='1';when0101=pc_latch(2)='1';when0111=pc_latch(3)='1';when1001=pc_latch(4)='1';when1011=pc_latch(5)='1';when1101=pc_latch(6)='1';when1111=pc_latch(7)='1';whenothers=null;endcase;endif;endif;endprocess;pa_out:p
本文标题:基于VHDL的8255并行接口电路设计
链接地址:https://www.777doc.com/doc-4151095 .html