VHDL实现单片机输出的串并转换正文.doc_第1页
VHDL实现单片机输出的串并转换正文.doc_第2页
VHDL实现单片机输出的串并转换正文.doc_第3页
VHDL实现单片机输出的串并转换正文.doc_第4页
VHDL实现单片机输出的串并转换正文.doc_第5页
已阅读5页,还剩42页未读 继续免费阅读

下载本文档

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

文档简介

第1章 绪论1.1概述 自从但单片机诞生以来,就在工业自动控制等诸多领域里发挥着巨大的作用,在传统的应用领域里,一般是用单片机配合市场上所能买到的逻辑器件完成系统的硬件设计,尽管单片机功能强大,能将许多功能的实现放在软件里,从而在较大程度上简化了系统硬件电路的设计,但是这种选择通用元件来构成硬件电路的方法并未改变。cpld器件和eda技术的出现改变了传统的设计思路,使人们可以通过设计芯片来实现不同的逻辑功能。新的设计方法能够由设计者自己定义器件的内部逻辑和管脚,将原来由电路板设计完成的大部分工作放在芯片的设计中进行。这样不仅可以通过芯片设计实现多种逻辑功能,而且由于管脚定义的灵活性,减轻了原理图和印制板设计的工作量。这一思想给电路设计带来了一次革命。 本课题就是用vhdl语言对逻辑可编程器件进行编程,实现将单片机串口输出的串行数据到8位并行数据的转换。这是一个比较新型的扩展单片机串口的方法,该在工业控制等领域都具有非常广泛的应用。1.2论文主要研究内容及方案论证现实中就有很多可以直接用来做串并转换的器件,但这些都是完成固定格式数据的转换的,这种固定格式的器件在应用时有很大局限性,cpld的引入就很好的克服了这个不足。在传统的应用时,我们经常应用移位寄存器来扩展i/o口,在传统的应用时,一般是用单片机配合市场上所能买到的逻辑器件完成系统的硬件设计,尽管单片机功能强大,能将许多功能的实现放在软件里,从而在较大程度上简化了系统硬件电路的设计,但是这种选择通用元件来构成硬件电路的方法并未改变。cpld器件和eda技术的出现改变了传统的设计思路,使人们可以通过设计芯片来实现不同的逻辑功能。新的设计方法能够由设计者自己定义器件的内部逻辑和管脚,将原来由电路板设计完成的大部分工作放在芯片的设计中进行。这样不仅可以通过芯片设计实现多种逻辑功能,而且由于管脚定义的灵活性,减轻了原理图和印制板设计的工作量。这一思想给电路设计带来了一次革命。 在单片机的使用过程中经常需要用到对i/o的扩展,单片机与外部世界的信息交换是通过i0接口电路来实现的,在传统的应用时,我们经常应用移位寄存器来扩展i/o口,但是这样有很多不方便,如果应用逻辑可编程器件来实现就会避免这些问题。 1.2.1 方案选择 单片机有两种数据传输方式,一:异步输入输出方式;二:同步输入输出方式。因此本设计有两种思路。两种方式都是可行的,而异步方式的实现可以通过降低数据的传送速率或者需要一个时钟来保持数据的同步。但这两种方法都有很大的不足,降低速率会很大的影响器件的使用领域且会增加单片机程序的复杂程度,而同步时钟的采用极大的增加器件的成本且会使器件变的更加复杂。固采用同步的传输方式,这种方式下器件不需要外界提供时钟且数据的传送速度最佳。 1.2.1 系统描述 本设计分为两个部分:硬件电路部分、系统软件部分。硬件部分主要由cpld,单片机组成。当系统运行正确时,由单片机直接控制的数码管和经由cpld转换后控制的数码管输出相同的数字。第二章 系统硬件设计2.1系统硬件子总体设计2.1.1 系统总体设计本设计分为两个部分:(1)单片机部分,用来发出固定格式的串行数据提供给epm7128slc84-15,同时将此数据送数码管显示;(2)epm7128slc84-15 部分,该部分用vhdl对epm7128slc84-15编程实现对单片机输出的串行数据转换位并行数据输出提供给另一个数码管显示输出。2.1.2系统框图图2.1 系统总框图2.1.3 系统总原理图 图2.2 系统总原理图2.2 模块电路介绍2.2.1晶振电路 在内部振荡电路中,为石英晶体时:c1,c2的取值范围为20pf40pf;为陶瓷滤波器:c1,c2的取值范围为30pf50pf。利用芯片内部的振荡器,在xtal1和xtal2两端跨接石英晶体以及两个电容,就构成了稳定的自激振荡器,它发出的脉冲直接送入内部时钟电路。因为xtal1和xtal2之间外接的是石英晶体,所以两个电容c1和c2的值均选择为30pf。c1和c2对振荡频率有微调作用,石英晶体的频率范围可以在1.224mhz之间选择。我选择了12mhz的石英晶体。 图2.3 内部振荡电路和外部时钟驱动电路2.2.2复位电路 (1)复位复位是单片机的初始化操作;单片机在启动运行时,都需要先复位,其主要功能是把pc初始化为0000h,使单片机从0000h单元开始执行程序,除了进入系统的正常初始化之外,当由于程序运行出错或者操作错误使系统处于死锁状态时,为了脱离困境,也需要按下复位键来重新启动。除pc之外,复位操作还对其他一些寄存器有影响,他们的复位状态如表2.1所示 (2)复位电路复位操作有上电自动复位和手动复位两种。上电自动复位是通过外部复位电路的电容充电来实现的。上电瞬间,rc电路充电,rst引脚端出现正脉冲。这样,只要电源vcc的上升时间不超过1ms,就可实现上电自动复位,即接通电源就完成了系统的复位操作。这种复位方式表2.1 一些寄存器的复位状态寄存器复位状态寄存器复位状态pc 0000htcon00hacc 00htl000hpsw00hth000hsp07htl100hdptr0000hth100hp0p3ffhscon00htmod00hsbuf不定虽然很简便,但是有它的缺点,即:当由于程序运行出错或者操作错误使系统处于死锁状态时,我们没有复位按键,所以就无法重新启动,而只有再次接通电源。按键手动复位又分为按键电平复位和按键脉冲复位两种。其中按键电平复位是通过使复位端经过电阻与vcc电源接通而实现的;而按键脉冲复位则是利用rc微分电路产生的正脉冲来实现的。设计这部分电路的时候,考虑课题的要求,我就选择了按键复位,复位电路如图2.4:图2.4 按键复位电路2.2.3 显示电路 我采用的是共阴的数码管,动态扫描显示的方式。如图2.5 图2.5 数码管电路2.2.4 cpld下载电路 本实验对cpld采用jtag下载方式,采用altera公司的byteblasretmv电路,将altera的byteblasretmv电缆的10pin端插入下载口即可,另一端连到电脑的并口。就可以在线编程了。注意电路一定要连接正确。pm7128s器件是通过4个引脚的jtag接口进行在线编程(isp)的。isp允许快速、有效地在设计开发过程中重复编程。jtag(joint test action group)是欧洲的jetag组织提出的边界扫描标准,即ieee1149. 1标准。该标准提供了板级和芯片级的测试,所有jtag测试功能仅需一条四线或五线的接口及相应的软件即能完成,利用jtag能测试电路板的连接情况以及电路板的正确性。其接口电路如图2.6:图2.6 cpld下载电路jtag的接口信号为:1. tck(test clock):用于控制状态机及传递数据。接epm7128slc84-15的62脚。2. tms (test mode select):选择边界扫描模式,控制状态机测试操作接epm7128slc84-15 的23脚。3. tdi (test data input):在tck的上升沿,接受串行数据接epm7128slc84-15的14脚4. tdo(test data output):在tck的下降沿,输出串行数据接epm7128slc84-15 的71脚2.3 cpld及max+plus 2 介绍2.2.数字集成电路(微处理器、存贮器以及标准逻辑电路等)在近几十年得到了广泛应用。数字集成电路的设计研究得到了迅猛的发展,不断地进行更新换代。随着微电子技术的发展,设计与制造集成电路的任务已不完全由半导体厂商来独立承担。系统设计师们更愿意自己设计专用集成电路(asic)芯片,而且希望asic的设计周期尽可能短,最好是在实验室里就能设计出合适的asic芯片,并且立即投入实际应用之中,因而出现了现场可编程逻辑器件(fpld),其中应用最广泛的当属现场可编程门阵列(fpga)和复杂可编程逻辑器件(cpld)。 fpga与cpld是在pal(可编程门阵列)、gal(通用门阵列)等逻辑器件的基础之上发展起来的。pal和gal一般都是基于prom、eprom或eeprom结构的,cpld也是基于eeprom结构的,但是fpga一般是基于ram结构的。同以往的pal和gal等相比较,fpgacpld的规模比较大,适合于时序、组合等逻辑电路应用场合,它可以替代几十甚至上百块通用ic芯片。这样的fpgacpld实际上就是一个子系统部件。这种芯片具有可编程性和实现方案容易改动的特点。对于fpga来说,由于芯片内部硬件连接关系的描述可以存放在磁盘、rom、prom或eprom中,因而在可编程门阵列芯片及外围电路保持不动的情况下,换一块eprom芯片,就能实现一种新的功能。大规模可编程逻辑芯片可以看作持殊的asic芯片,它们除了具有asic的特点之外,还具有以下几个优点:(1)随着vlsi (very large scale ic,超大规模集成电路)工艺的不断提高,单一芯片内部可以容纳上百万个晶体管,fpga/cpld的规模也越来越大,其单片逻辑门数已达到数十万门,它所能实现的功能也越来越强,同时也可以实现系统集成。(2)fpgacpld芯片在出厂之前都做过百分之百的测试,不需要设计人员承担风险和费用,设计人员只需在自己的实验室里就可以通过相关的软硬件环境来完成芯片的最终功能指定。所以,fpgacpld的资金投入少,不用对厂商做任何订单数量上的承诺,节省了许多潜在的花费,而且fpgacpld的研制开发费用相对较低。(3)用户可以反复地编程和擦除,而且外围电路不需要改变就可实现不同的功能。尤其是如果构造出该fpgacpld芯片的实验板,则可更加灵活地实现不同电路的功能。所以,用fpgacpld试制样片,能以最快的速度占领市场。当样品得到用户认可后再投入批量生产是电子产品研制和开发应用中的一种优选方法。(4)采用可编程逻辑芯片的电路设计周期很短。fpgacpld软件包中不但有各种输入工具和仿真工具,而且还有版图设计工具和编程器等全线产品,电路设计人员在很短的时间内就可完成电路的输入、编译、优化、仿真,直至最后芯片的制作(物理版图映射)。当电路有少量改动时,更能显示出可编程逻辑芯片的优势。它大大加快了新产品的试制速度,减少了库存风险与设计错误所带来的危险、从而提高了企业在市场上的竞争能力和应变能力。(5) 电路设计人员使用fpga/cpld进行电路设计时,不需要具备专门的ic(集成电路)深层次的知识,fpga/cpld软件易学易用,可以使设计人员更能集中精力进行电路设计。fpga/cpld适合于正向设计(从电路原理图到芯片级的设计),对知识产权的保护也非常有利。2.2.2 可编程逻辑芯片的设计方法 可编程逻辑芯片的设计一般可分为设计输人、设计实现和编程三个设计步骤及相应的功能仿真、时序仿真和器件测试三个设计验证过程。(1)设计输入。在传统设计中,设计人员是应用传统的原理图输入方法来开始设计的。自90年代初,verilog、vhdl、ahdl等硬件描述语言的输入方法得到了广大工程设计人员的认可。(2) 设计实现。设计输入之后就有一个从高层次系统行为设计向低层次门级逻辑电路的转化翻译过程,即把设计输入的某种或某几种数据格式(网表)转化为底层软件能够识别的某种数据格式(网表),以求达到与其工艺无关。在该过程中,编译软件自动地对设计文件进行综合、优化,并针对所选中的器件进行映射、布局、布线,产生相应的熔丝图或位流数据文件。(3) 器件编程:器件编程就是将熔丝图文件或位流数据文件配置到相应的cpld或fpga的器件中。(4) 设计校验:设计校验由对应于设计输人、设计实现和器件编程的功能仿真、时序仿真和器件测试三个部分组成。功能仿真验证设计的逻辑功能,以了解其实现的功能是否满足原设计的要求,仿真过程不涉及具体器件的硬件特性,如延迟特性,一般的设计,这一层次的仿真可略去。时序仿真是在设计实现后,针对所选中器件的布局、布线方案进行时延仿真,因在仿真过程考虑了器件的硬件特性,故仿真精度极高。器件测试是在器件编程后,通过实验或借助于测试工具,测试器件最终功能和性能指标。在布局布线和后仿真完成之后,当需要大批量生产该芯片时,就可以开始asic芯片的投产。2.2.3 max7000系列器件和max+plus介绍altera公司是最大的可编程逻辑器件提供商之一。max 7000系列器件是该公司的高密度、高性能的cmos工艺cpld器件,它是在第二代max结构基础上,采用先进的cmos eeprom技术制造的,可提供600到5000可用门和44到208个引脚的各种封装形式。引脚到引脚的延时为5ns,计数器工作频率可达到178.6mhz。max7000结构中包括逻辑阵列块、宏单元、共享和并联扩展乘积项、可编程连线阵列和i/o控制五部分,此外还包括4个专用输入,它们能用作通用输入,或作为每个宏单元和i/o引脚的高速的、全局的控制信号,即时钟(clock)、清除(clear)和输出使能(output enable)。max7000结构可100%模仿ttl,并可将ssi、msi、和lsi的逻辑功能高密度地集成,它也可以集成各种可变成逻辑器件,其范围从pal、gal到mach、plsi和fpga,在速度、密度和i/o资源方面可与通用的掩膜式门陈列相媲美,可实现各种组合逻辑和时序逻辑。在设计开发和调试阶段,max7000器件可以快速而有效地重新编程,并保证可编程擦除10000次。max7000结构可高度集成各种逻辑功能,在速度、密度和i/o资源方面有多种型号可选,并且有多种封装,包括plcc、pga、pqfp和tqfp封装,便于调试开发及成品生产。max7000s是高密度的max7000系列,具有以下特性:6个由引脚或逻辑驱动的输出使能;2个可选为反相工作的全局时钟信号;改善了布线性能,增加了连线资源;从i/o引脚到宏单元寄存器的专用路径可提供快速的建立时间;输出电压摆率可以编程控制;具有集电极开路选择、可编程保密位以及内置jtag bst电路,并可通过jtag接口实现在系统编程。下面是epm7128slc84-15的引脚图epm7128s芯片内部集成了2500门,可用的i/o引脚数随封装不同有68、84和100三种规格。它有128个宏单元,每个宏单元有一个可编程的“与”阵和固定的“或”阵,以及一个具有独立可编程时钟、时钟使能、清除和置位功能的可配置触发器。为了能构成复杂的逻辑函数,每个宏单元可使用共享扩展乘积项和高速并联扩展乘积项,向每个宏单元提供多达32个乘积项。这一特点使它更适合采用eda工具进行自动逻辑综合。其引脚图如图2.7所示。图27 epm7128的引脚图 可编程逻辑芯片实际上是包含了大量与门、或门、触发器、存储器等逻辑资源的半成品,若要使芯片在系统中正常工作必须对芯片进行编程。altera的max+plus开发系统支持max7000系列的编程开发和下载。该系统的全称是multiple array matrix and programmable logic user system。它具有原理图输入、文本输入、波形输入等多种输入方式,利用它所配备的编辑、编译、仿真、综合等功能,可以完成数字电路从设计、检查、模拟到下载的全过程,是eda设计中不可缺少的一种有用工具。 max+plus开发系统具有开放的界面、与结构无关、多平台、完全集成化、丰富的设计库、模块化工具、硬件描述语言、megacore功能opencore特性等几个特点。max+plus所提供的灵活性和高效性是无可比拟的。其丰富的图形界面,辅之以完整的、可即时访问的在线文档,则可使设计人员能够轻松地掌握和使用max+plus软件。2.4 单片机概述 at89c51是一种低功耗、高性能的片内含有4kb快闪可编程/擦除只读存储器的8位cmos微控制器,使用高密度、非易丢失存储技术制造,并且与80c51引脚和指令系统完全兼容。芯片上的flash存储器允许在线编程或采用通用的非易丢失存储编程器重复编程。at89c51将具有多种功能的8位cpu与flash存储器结合在一个芯片上,为很多嵌入式控制应用提供了非常灵活而又价格适宜的方案,其性能价格比远高于8751。2.3.1 89c51的性能及特点 89c51的主要性能包括: 与msc51微控制器产品系列兼容。 片内有4kb可在线重复编程的快闪擦写存储器。 存储器可循环写入/擦除1000次。 存储数据保存时间为10年。 宽工作电压范围:vcc可为2.7v6v。 全静态工作:可从0hz至16hz。 程序存储器具有3级加密保护。 128*8位内部ram。 32条可编程i/o线。 两个16位定时器/计数器。 中断结构具有5个中断源和2个优先级。 可编程双全工串行通道。 空闲状态维持低功耗和掉电状态保存存储内容。2.3.2 片内快闪存储器 由于eeprom具有在线改写,并在掉电后仍能保存数据的特点,可为用户的特殊应用提供便利。但是,擦除和写入对于要求数据高速吞吐的应用还显得时间过长,这是eeprom芯片的主要性能缺陷。表2.2给出了几种典型eeprom芯片的主要性能特点。表2.2 几种典型eeprom芯片主要性能型号28162816a28172817a去数时间/ms250200/250250200/250擦/写电压/v215215字节擦除时间/ms109151010写入时间/ms109151010由表2.1可见,所列各种芯片的字节擦除时间和写入时间基本上为10ms,这样长的时间对于许多实际应用是不能接受的。因此,为了将存储器集成到微控制器芯片内,设法缩短此类存储器的擦除和写入时间是一个首要问题。片内快闪存储器的概念就是在这种背景下提出来的。2.3.3 89c51的基本组成在89c51芯片上,集中了微型计算机的各个组成部分,它包括: 一个8位微处理器。 片内数据存储器ram,用于存放可以读/写的数据,如运算的中间结果、最终结果以及欲显示的数据等。 片内快闪存储器eeprom,用于存放程序、一些原始数据和表格。 四个8位并行i/o接口。 两个16位定时器/计数器。 五个中断源的中断控制系统。 一个全双工uart的串行i/o口,用于实现单片机与微机之间的串行通信。 片内震荡器和时钟产生电路,但石英晶体和微调电容需要外接。最高允许震荡器频率为24mhz。2.3.4 89c51的内部结构和一般微处理器相比,89c51增加了四个8位i/o口,一个串行口,4kb fperom,128b ram,很多工作寄存器及特殊功能寄存器。各部分的功能如下。(1) 中央处理单元cpu是89c51的核心,是计算机的控制和指挥中心,由运算器和控制器两个部分电路组成。运算器运算器包括一个可进行8位算术运算和逻辑运算的单元alu,8位的暂存器1、暂存器2,8位的累加器acc,寄存器b和程序状态寄存器psw等。alu:可对4位、8位和16位数据进行操作,能做如加、减、乘、除、bcd数十进制调整及比较等算术运算和与、或、异或、求补及循环移位等逻辑操作。acc:累加器acc经常作为一个运算数暂存器2进入alu的输入端,与另一个来自寄存器1的运算数进行运算,运算结果又送回acc。在指令中用助记符a来表示。psw:程序状态字寄存器,8位,用于指示指令执行后的状态信息,相当于一般微处理器的标志寄存器。psw中各位状态供程序查询和判别用。b:8位寄存器,在乘、除运算时它用来存放一个操作数和运算后的一部分结果;不做乘、 除运算时,作通用寄存器使用。控制器控制器包括程序计数器pc、指令寄存器ir、指令译码器id、震荡器及定时电路等。程序计数器pc:由两个8位的计数器pch及pcl组成,共16位。pc实际上是程序的字节地址计数器,pc中的内容是将要执行的下一条指令的地址。改变pc的内容就可以改变程序执行的方向。指令寄存器ir及指令译码器id:由pc中的内容指定rom地址,取出来的指令经指令寄存器ir送至指令译码器id,由id对指令译码并送pla产生一定序列的控制信号,以执行指令所规定的操作。震荡器及定时电路:89c51单片机片内震荡电路,只需外接石英晶体和频率微调电容,其频率范围为1.2mhz12mhz。该脉冲信号作为89c51工作的基本节拍及时间的最小单位。(2) 存储器89c51的存储器有片内外之分。片内存储器集成在芯片内部;片外存储器又称外部存储器。片内和片外存储器中,又有rom和ram之分。rom存储器89c51片内程序存储器容量为4kb,地址从0000h开始,用于存放程序和表格常数。ram存储器89c51的ram存储器有片内外之分:片内ram共128b,地址范围为00h7fh;片外ram共64kb,地址范围为0000hffffh。为了指示是到片内ram寻址还是到片外ram寻址,89c51的指令系统设计了不同的数据传送指令符。特殊功能寄存器sfrcpu访问片内rom指令用mov,访问片外ram指令用movx。片内ram共128b,分为工作寄存器区、位寻址和便签区。1工作寄存器区这32个ram单元共分四组,每组占8个ram单元,分别用代号r0r7表示。r0r7可以指向四组中任一组,由psw中rs1、rs2的状态决定。2位寻址区这16个ram单元具有双功能。它们既可以像普通ram单元一样按字节存取,也可以对每个ram单元中的任何一位单独存取,就是位寻址。3便签区便签区共有80个ram单元,用于存放用户数据或作堆栈区使用。89c51对便签区中每个ram单元是按字节存取的。在21个sfr寄存器中,用户可通过直接寻址指令对它们进行字节存取,也可以对acc、b、psw等11个寄存器进行位寻址。(3) i/o端口i/o端口又称为i/o接口,是89c51对外部实现控制和信息交换的必经之路,它们都是双向端口。每个端门各有8条io线,均可输入/输出。可以把io口当作一般特殊功能寄存器来寻址。2.3.5 89c51的引脚及其功能at89c51采用了40脚双列直插封装方式。其引脚分为电源引脚、输入/输出端口引脚、控制信号引脚和时钟电路引脚这四类。其引脚如图2.8所示: (1) 电源引脚 vcc:为+5v供电电压引脚。 gnd:为接地引脚。 (2) i/o端口引脚图2.8 单片机at89c51的引脚图 89c51共有四个并行i/o端口,每个端口有8个端口线,用于传送数据/地址。由于每个端口的结构不相同,因此它们在功能和用途上的差别很大。p0口:p0口共有8个引脚,其中p0.7为最高位,p0.0为最低位。这8条引脚有两种不同的功能,分别使用于两种不同情况。第一种情况是89c51不带片外存储器,p0口可以作为通用i/o口使用,p0.0p0.7用于传送cpu的输入/输出数据。这时,输出数据可以得到锁存,不需要外接专用锁存器,输入数据可以得到缓冲,增加了数据输入的可靠性;第二种情况是89c51带片外存储器,p0.0p0.7在cpu访问片外存储器时用于传送片外存储器的低8位地址,然后传送cpu对片外存储器的读写数据。p1口:p1口是一个内部提供上拉电阻的8位双向i/o口,其缓冲器可接收输出4ttl门电流。p1口管脚写入“1”后,被内部上拉为高,用作输入;被外部下拉为低电平时,将输出电流。p2口:p2口的第一功能和p0口的第一功能相同,即它可以作为通用i/o口使用。它的第二功能和p0口引脚的第二功能相配合,用于输出片外存储器的高8位地址,共同选中片外存储器单元,但并不能像p0口那样还可以传送存储器的读写数据。p3口:作输入/输出时同p1口。p3口也可作为89c51的一些特殊功能口。如表2.3所式:(3) 控制信号引脚rst:复位信号输入端,高电平有效。它可以使89c51处于复位工作状态。复位后,89c51的四个端口p0、p1、p2、p3为全高,即它们的值均为ffh。ale/prog:地址锁存允许/编程端。在flash编程期间,此引脚用于输入编程脉冲。平时,ale端以不变的频率周期输出正脉冲信号,此频率为震荡频率的1/6。因此,它可用作外部输出的脉冲。psen:外部程序存储器的选通信号端。在外部程序存储器取指期间,每个机器周期两次/psen有效。但在访问外部数据存储器时,这两次有效的/psen信号将不出现。表2.3 p3口第二功能p3口第二功能注 释p3.0rxd串行数据接收口p3.1txd串行数据发送口p3.2into外部中断0输入p3.3int1外部中断1输入p3.4t0计数器0计数输入p3.5t1计数器1计数输入p3.6wr外部ram写选通信号p3.7rd外部ram读选通信号 ea/vpp:外部程序存储器地址允许输入端/编程电压输入端。 (4) 时钟电路引脚xtal1:反向震荡放大器的输入及内部时钟工作电路的输入端。在采用外部时钟时,该引脚必须接地。xtal2:来自反向震荡器的输出。若采用外部时钟电路时,该引脚输入外部时钟脉冲。2.3.6 定时器/计数器89c51内部有两个16位可编程的定时器/计数器,命名为t0和t1。t0由两个8位寄存器tho和tlo拼装而成,其中tho为高8位,tlo为低8位。t1也和t0类同。tho、tlo、th1和tl1均为特殊功能寄存器中的一个,用户可以通过指令对它们存储数据。t0和t1的最大计数值为65535,即需要65535个脉冲才能把它们从全“0”变为全“1”。下面介绍定时器的控制。定时器共有两个控制字,由软件写入tmod和tcon两个8位寄存器,用来设置t0、t1的操作模式和控制功能。当89c51系统复位时,两个寄存器所有位都被清零。(1) 工作模式寄存器tmodtmod用于控制t0和t1的工作模式,其各位的定义格式如表2.4所示。表2.4 工作模式寄存器tmod的位定义tmod d7 d6 d5 d4 d3 d2 d1 d0gatec/tm1m0gatec/tm1m0其中低四位用于t0,高四位用于t1。以下介绍各位的功能。m1和m0操作模式控制位。两位可形成四种编码,对应于四种操作模式,见表2.5。c/t计数器/定时器方式选择位。c/t=0,设置为定时方式。定时器计数89c51片内脉冲,亦即对机器周期计数。c/t=1,设置为计数方式。表2.5 定时器/计数器的工作模式m1 m0工作模式功能描述0 0模式013位计数器0 1模式116位计数器1 0模式2自动再装入8位计数器1 1模式3定时器0:分成两个8位计数器gate门控位。gate=0时,只要用软件使tro置1就可以启动定时器,而不管into的电平是高还是低。gate=1时,只有into引脚为高电平且由软件使tro置1时,才能启动定时器工作。(2) 控制寄存器tcon定时器控制寄存器tcon除可用于字节寻址外,各位还可位寻址。各位的定义格式如表2.6所式:表2.6 控制寄存器tcon的位定义tcon8fh8eh8dh8ch8bh8ah89h88h(88h)tr1tf0tf0tr0ie1it1ie0it0tf1t1溢出标志位。当t1溢出时,由硬件自动使tf置“1”,并且申请中断。响应中断进入中断服务程序后,tf1又被硬件自动清0。tf1也可被软件清0。tf0t0溢出标志位。其功能和操作情况同tf1。tr1t1运行控制位。可通过软件置1或清0启动或关闭t1。在程序中用指令“setb tr1”使tr1位置1,定时器t1便开始计数。trot0运行控制位。其功能和操作情况同tr1。ie1、it1、ie0、it0外部中断请求及请求方式控制位。单片机的开发过程 这里所说的开发过程并不是一般书中所说的从任务分析开始,我们假设已设计并制作好硬件,下面就是编写软件的工作。在编写软件之前,首先要确定一些常数、地址,事实上这些常数、地址在设计阶段已被直接或间接地确定下来了。如当某器件的连线设计好后,其地址也就被确定了,当器件的功能被确定下来后,其控制字也就被确定了。然后用文本编缉器(如edit、cced等)编写软件,编写好后,用编译器对源程序文件编译,查错,直到没有语法错误,除了极简单的程序外,一般应用仿真机对软件进行调试,直到程序运行正确为止。运行正确后,就可以写片(将程序固化在eprom中)。在源程序被编译后,生成了扩展名为hex的目标文件,一般编程器能够识别这种格式的文件,只要将此文件调入即可写片。仿真、仿真机 仿真是单片机开发过程中非常重要的一个环节,除了一些极简单的任务,一般产品开发过程中都要进行仿真,仿真的主要目的是进行软件调试,当然借助仿真机,也能进行一些硬件排错。一块单片机应用电路板包括单片机部份及为达到使用目的而设计的应用电路,仿真就是利用仿真机来代替应用电路板(称目标机)的单片机部份,对应用电路部份进行测试、调试。仿真有cpu仿真和rom仿真两种,所谓cpu仿真是指用仿真机代替目标机的cpu,由仿真机向目标机的应用电路部份提供各种信号、数据,进行调试的方法。这种仿真可以通过单步运行、连续运行等多种方法来运行程序,并能观察到单片机内部的变化,便于改正程序中的错误。所谓rom仿真,就是用仿真机代替目标机的rom,目标机的cpu工作时,从仿真机中读取程序,并执行。这种仿真其实就是将仿真机当成一片eprom,只是省去了擦片、写片的麻烦,并没有多少调试手段可言。通常这是二种不同类型的仿真机,也就是说,一台仿真机不能既做cpu仿真,又做rom仿真。可能的情况下,当然以cpu仿真好。2.5 本章小结 本章介绍了系统硬件总体电路及各部分电路,还介绍了所用到的几个主要的器件at89c51 , epm7128slc84-15,max+plus 2的原理及其应用。第三章 系统软件设计3.1 vhdl语言介绍 3.1.1 概述 利用vhdl 进行硬件可编程器件编程设计同一般的通用算法语言编程有很大的区别的。硬件电路单元的执行是并发的,而且硬件设计要求的时序关系特别是高速系统的时序关系是设计中的重要考虑对象。程序的仿真和修改,特别是时序仿真是硬件开发过程中比较繁重的任务之一在引退锁里,面积约束和延时约束三者之间的冲突,对于一个经验丰富的设计员来说也难免发生错误。vhdl 编制程序时,语法规则和语义约定方面两者关系比普通的编程语言更隐涵一些。当进行语法检查时完全正确,当到了综合和实现阶段时,开发平台总会有不少的警告,提示出现。若忽视这些警告,到仿真阶段碰到的问题,会令人束手无策,反复查代码根本无错误可言,仔细阅读语法的语义约定,才搞清楚问题的所在。在不能使用锁存器(或使用锁存器不好)的器件中。这种错误更是必须避免,否则要向下一步进行可能走不通。总线冲突(竞争)也是设计中碰到的一个较大的难题,由于时序的错位,引起多个值同时赋给某总线,引起总线冲突。这个问题的解决需要对时序和所编写的程序代码进行同步的对照和人工综合才能解决。有关编码和程序调试及设计要求和实现的矛盾问题不胜枚举。对于有微处理器的系统,系统工作所要求的命令可以有软件代码来产生出来,而可编程器件系统是采用纯硬件的方法,所需要的命令必须自己进行设计,这些命令的产生就只能依靠各种信号的组合逻辑产生或是利用信号的边沿上升,下降沿来生成,同时还要考虑到时序要求,在设计就必须仔细考虑。 本部分介绍cpld 编程的标准语言vhdl(very high speed integrated circuit hdl),但由于硬件编程毕竟不同于其它的编程方式,它和器件在设计的最后要走到一起,因此有必要介绍一下cpld 的结构和设计中使用的芯片epm7128slc84-15。cpld 的开发可以用硬件描述语言(hdl)编程,然后在开发平台上进行验证,最后由eda 工具自动实现设计;也可以在开发平台中用原理图的设计方式,像pcb 设计方式一样的设计cpld 芯片中的硬件电路。在hdl 形成发展以前,已经有了众多的、标准化的程序设计语言,例如c、pascal、fortran 等,它们适合于描述过程的算法,但不适于描述硬件。各公司在发展自己的eda 工具的同时,必然要发展一种与之配套的hdl。由于发展eda 工具在前,标准化工作在后,这些hdl 必然不同, 用户一旦选用某种eda 工具,就被束缚在这个环境之中。为了解决这个问题,美国国防部为他们的超高速集成电路计划(veryhigh speed integrated circuit,vhsic),提出了硬件描述语言vhdl,并把这个任务交给了ti、ibm 和intermetrics 公司。1987 年12 月,ieee 把vhdl定为标准hdl,即ieee std10761987lrm87。此后,又作了若干修改,增加了一些功能,新的标准版本记为ieeestd10761993lrm93。 目前使用较多的hdl 有:从ada 语言演化来的vhdl,从c 语言演化来的verilog 语言,由于altera 的芯片在国内有广泛的使用历史,其描述语言ahdl 也被广泛使用。 硬件描述语言(hdl)是硬件设计者和eda(电子设计自动化)工具之间的界面,设计者使用hdl 来描述自己的设计方案,设计要求或设计意图,并把这个描述(称为设计输入)告诉给eda 工具,然后在eda 工具的帮助下进行详细的设计验证,最后可以通过简单的选择和设置就可以让eda 工具最终完成设计。vhdl 是目前最流行的, 标准化的hdl(hardware description language)。vhdl 与具体工艺、设计方法无关,也不局限于某一特定的仿真工具和工业部门。ic 设计者在语言范围内自由选择工艺和设计方法。为了适应集成电路工艺和不断变化和发展,vhdl 具有把新的工艺方便地插进现有的设计中的抽象能力。vhdl 是高度抽象的语言,这种对数字器件的抽象包括一个数字器件的行为,时间关系和结构。vhdl 的基础建立在三个相互独立的模型上: 行为模型 解释数字器件的功能 时间模型 表明数字器件的激励响应情况 结构模型 当一个数字器件包括多个操作时,可以把每个操作分成多个功能上相关的部分3.1.2 vhdl 程序的基本结构 一个完整的vhdl 程序含有五个部分:实体,结构体,配置,程序包及库。我们用下面的图示来表示五者在程序设计中的相对位置图3.1 vhdl 结构图 库:是经编译后的数据的集合,它存放包集合定义,实体定义,结构定义和配置定义;vhdl 的库有五类:ieee,std,asic 矢量库,work 库和用户定义库;库的声明总是在设计单元的最前端。 程序包:用来罗列vhdl 中要用到的信号定义,常数定义,数据类型,元件语句,函数定义,过程定义等。程序包的使用格式为:use 库名.包集合名.all。 实体:描述元件的外观或者是对外的接口信号,相当于元件或芯片的引脚定义。 构造体:描述系统、元件或电路的行为、功能或者结构的封装体,对外是不可见的。构造体内部的语句必须是是并行语句,这是由硬件的并发性特点决定的。结构体的描述是vhdl的核心部分。 配置:是层与层之间的连接关系,以及实体与结构体之间的连接关系;层与层之间的连接元件调用,模块的调用等,实体与结构体之间的连接是在多个实现的结构体中选择要进行模拟的结构体。 (1)vhdl语言结构体描述方式 结构体具体指明了该设计实体的行为,定义了该设计实体的功能,规定了该设计实体的数据流程 ,指派了实体中内部元件的连接关系。 用 vhdl语言描述结构体功能有 3 种方法: (2)行为描述法(behavioral description) 所谓结构体的行为描述, 即对设计实体按算法的路径进行描述。行为描述采用进程语句, 顺序描述被设计实体的行为 。实体的行为描述是一种抽象描述, 不是对某一个具体器件对电子设计而言,而是高层次的概括,是整体设计功能的定义; 从计算机领域而言,行为描述和高级编程语言相类似,因此行为描述在eda工程中被称为高层次描述或高级描述。当用顺序执行结构体的行为描述时,设计工程师可为实体定义一组状态时序机制,不需要互联表,无需关注实体的电路组织和门级实现, 这些完全eda工具综合生成;设计工程师只需注意正确的实体行为、准确的函数模型和精确的输出结果。 (3)数据流描述法(dataflow description)数据流描述是结构体描述方法之一 ,它描述了数据流程的运动路径、 运动方向和运动结果。数据流描述采用进程语句顺序描述数据流在控制流的作用下被加工、处理、存储的全过程。 常用的语句是条件信号赋值语句(case-when)和选择信号赋值语句(with-select-when) 数据流描述法采用并行信号赋值语句,而不是顺序语句; 一个结构体可以有多重信号赋值语句,且语句可以并行执行。 (4)结构化描述法(structural description) 结构化描述采用并行处理语句描述设计实体内的结构组织和元件的互连关系。 它通常用于层次式设计实体说明中仅说明了该实体的 i/o 关系, 而设计中采用标准元件。 输入关系用 use 从句的方式从库中调用,对于一个复杂的电子系统可以分解成许多子系统, 子系统再分解成模块, 多层次设计可以使设计多人协作、 同时进行; 多层次设计中, 每个层次都可以作为一个元件, 再构成一个模块,或构成一个系统。每个元件可以分别仿真。 然后再整体调试。结构化描述不仅是一个设计方法, 而且是一种设计思想, 除了一个常规的门电路标准化后作为一个元件放在库中调用, 用户自己定义的特殊功能的元件, 也可以放在库中, 方便调用, 这个过程称为标准化或例化;尤其声明的是元件标准化不仅仅是常规门电路,这和标准化元件的含义不一样,即任何一个用户设计的实体, 无论功能多么复杂 , 复杂到一个系统, 还是多么简单, 简单到一个门电路, 都可以标准化成一个更加复杂的文件系统。 设计者可以从不同层次的抽象来描述设计, 无论采用哪种编程方式其结果应该是一致的。 3.1.3 结构体的3种子结构设计方法 一个设计实体可以拥有几个结构体,对于一个结构体,如果功能丰富、结构复杂,采用一个描述模块是不方便的。因而产生了结构体中的子结构模块的设计方法, 子结构的形式有3种: 进程、模块和子程序。 这三种子结构形式分别采用3种描述语句:即process语句,block 语句和子程序调用语句(subprograms)。 采用多进程描述复杂结构体的方法proess语句是一种并行处理语句,进程的内部结构由一系列顺序语句构成 ;语句逐条执行。 顺序与语句的书写顺序相一致,需要注意的是在vhdl 中,所谓顺序仅仅是指语句按序执行上的顺序性,但这并不意味process 语句结构所对应的硬件逻辑行为也具有相同的顺序性。process 结构中既可以有时序逻辑的描述, 也可以有组合逻辑的描述,它们都可以用顺序语句来表达 。一个结构体中可以有多个并行运行的进程结构进程的设计需要注意以下几方面的问题: (1)虽然同一结构体中的进程之间是并行运行的,但同一进程中的逻辑描述语句则是顺序运行的, 因而在进程中只能设置顺序语句。 (2)进程的激活必须由敏感信号表中定义的任一敏感信号的变化或wait 语句来启动,但是如果进程中包含 wait 语句, 则不允许有敏感信号表存在, 所谓进程对信号敏感,就是指当这个信号发生变化时能触发进程中语句的执行,如果进程包含敏感表,进程执行完其最后一条语句时将被挂起,直到敏感表中的一个信号发生变化为止,如果进程有一个或多个 wait 语句(因此没有敏感表) 进程将在第一条等待条件为false 的wait 语句处被挂起。 一般,综合后的电路需要对所有进程中要读取的信号敏感。为了保证vhdl 仿真和综合后的电路具有相同的结果, 进程敏感表就得包括所有对进程产生作用的信号。 vhdl编译器将检查敏感表的完整性,对于任何一个进程内已经读取,但敏感表中并没列出的信号给出警告消息;如果进程中时钟信号被当作数据读取则会产生错误。 (3)一个结构体中多个进程的并行同步运行通过传递信号和共享变量值实现。相对于结构体来说,信号具有全局特性,它是进程间进行并行联系的重要途径,因此, 在任一进程的进程说明部分不允许定义信号和共享变量(共享变量是 vhdl93 增加的内容)。 (4)采用多模块描述复杂结构体的方法块语句(block)的并行工作方式更为明显 ,块语句本身是并行语句结构,而且它的内部也都是由并行语句构成(包括进程)。

温馨提示

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

评论

0/150

提交评论