当前位置:首页 > 嵌入式 > 嵌入式硬件

1引言

  随着集成电路的深亚微米制造技术和eda技术的迅猛发展,芯片的密度和复杂度不断提高,复用以前的设计模块用于asic芯片和在一块芯片上实现嵌入式系统的功能形成所谓的片上可编程系统(systemonprogrammablechip,sopc)已成为一种发展的新趋势。ipcore(知识产权核)设计的重用性以及sopc技术的出现,以其设计的灵活性大大缩短了产品的设计周期,减少了设计成本,降低了设计风险,加快了产品的上市速度。本文中介绍的串行口控制器是一种功能和通信协议与MCS-51系列单片机的串行口相兼容,性能有大幅提高的数据通信部件,其往往于低速低成本的微机与下位机的通讯中,并允许在串行链路上进行全双工的通信。通过IP核重用技术,可广泛应用在各种soc、嵌入式微处理芯片的设计以及工业应用中。

2系统简介

  本课题采用altera公司的max+plusⅱ10.0设计平台,以超高速集成电路硬件描述语言vhdl为系统逻辑描述的唯一表达方式,采用自顶向下的设计原则,对mcs-51单片机的串行接口进行反相设计。同时选用altera公司的acex系列器件来实现最终的ip核。由于篇幅的关系,笔者不打算对开发平台、开发工具以及最终实现硬件电路的fpga芯片进行介绍,而是着重介绍整体的设计思想。根据对mcs-51单片机的串行接口块功能的剖析[1]和模块化的设计思想,在设计时进行模块划分,可划分为4个子模块,它们分别是:(1)串口时钟发生器模块;(2)数据检测器模块;(3)发送器模块;(4)接收器模块。由于同步电路较容易使用寄存器的异步复位/置位端,可以使整个电路有一个确定的初始状态;使用同步电路易于消除电路的毛刺,使设计更可靠;同步电路可以很好地利用先进的设计工具,如静态时序分析工具等,为设计者提供最大便利条件,便于电路错误分析,加快设计进度。所以我们采用严格的同步设计电路来设计串行口ip核,即本设计中只有一个clk上升沿,从而保证了每一个触发器同步动作,消除了时钟不同步带来的误动作。

3系统现实

  设计一个软核,首先要确定本核与外部的信息交换通路,即本模块与外部电路的接口,友好的接口模型可以大大提高ip核的使用范围。图1是串行口ip核的接口模型图,图中左边的引脚是输入引脚,右边是输出引脚,图中引脚的宽度均有标明(未写出宽度表明宽度为“1”)。由于本设计不支持i/o口的复用,所以为串行口工作于模式0下增加了rxd_o和rxdwr两个输出引脚,前者用于输出,后者为输出有效控制位(rxdwr为高电平时,指示输出)。串行口控制寄存器scon在设计中也被分成两部分,一部分接收来自控制器的输入(一共6位,sm0、sm1、sm2、ren、tb8和ri),一部分作为输出送往控制器(一共3位,rb8以及分别指示发送和接收完毕的两位,控制器会根据这两位来对中断标志置位)。至于发送中断标志位ti,由于其不会影响串行口的工作过程所以在此并未列出,它将在控制器中得到体现。


图1串行口输入输出引脚图

  串行口有四种工作方式,方式0的波特率固定的(为1/12倍的输入时钟频率);方式1和方式3的波特率是定时器/计数器1的溢出率的1/16或1/32倍;而方式2的波特率则是输入时钟频率的1/32或1/64倍。由此可见,首先必须要解决的问题就是设计分频器。由于在方式0下,串行口是作半双工的同步移位寄存器使用,其发送和接收的波特率是一样的,因此对于方式0,串行口内部的分频信号只需要一路即可。但是对于其他方式,串行口均是工作在全双工的状态下,因此,每种方式下均需要两路分频信号,一个用于发送,一个用于接收。

  对于方式0和方式2,其分频的对象是输入时钟,实现这种分频器的主要vhdl代码的如下:(信号s_count_enable的频率为输入时钟频率的1/12,其高电平维持时间与一个输入时钟的周期相等。)

  s_count_enable<=`1`whens_pre_count=conv_unsigned(11,4)else`0`;

  p_divide_clk:process(clk,reset)

  begin

  ifreset=`1`then

  s_pre_count<=conv_unsigned(0,4);

  else

  ifclk`eventandclk=`1`then

  ifs_pre_count=conv_unsigned(11,4)then

  s_pre_count<=conv_unsigned(0,4);

  else

  s_pre_count<=s_pre_count+conv_unsigned(1,1);

  endif;

  endif;

  endif;

  endprocessp_divide_clk;

  对于方式1和方式3,其分频的对象都是定时器/计数器1的溢出率,且分频的系数是一样的。由于串行口只有一个,它不可能调试工作在方式1和3,因此方式1和方式3可以共用分频信号。要对定时器/计数器1的溢出率进行分频,首先必须测出其频率,为此需要一个上升沿的检测器来监测外部输入的定时器/计数器1的溢出信号(图1中的tf_i引脚),这样的检测器可以双稳态触发器来实现,限于篇幅,双稳态触发器的vhdl实现请参考文献[2],这里就不加详述。检测器在监测到tf_i引脚的上升沿时就使其输出信号保持一个时钟周期的高电平,再另外设计计数器对此高电平进行计数,以达到对其分频的效果。

  除了作为同步移位寄存器的方式0外,其他作uart(通用异步接收和发送器)用的三种方式在接收外部输入的时候均需要对外部的输入信号采样监测以确定信号的值。因此一个位检测器是必需的。同时,串行口工作在方式1、方式2和方式3时,每一个接收的数据帧都有一个起始位,这个起始位被固定为0,也就是说在输入端rxd_i监测到1到0的跳变就会启动接收过程(注:负跳变检测器对外部输入引脚的采样频率为波特率的16倍)。负跳变检测器和上述上升沿检测器的设计思路是一样的。位检测器的设计原理是把一个接收位的时间分为16等分(以内部计数器的16个状态来表示),在计数器的7、8、9状态时,位检测器对外部输入端的值进行采样。采用3取2的表决方法来抑制噪声。如果位检测器检测到接收的第一位不是0,那么就说明它不是一帧数据的起始位,应该摈弃,接收电路复位。

  至于接收器和发送器,这里采用有限状态机的方式来实现。由于要工作在全双工模式下,所以接收和发送要采用两个有限状态机。有限状态机的每一个状态用来发送/接收移位数据。发送和接收的具体实现方式是移位。移位的时钟来自上面所述的分频器的,也就是根据各自的波特率进行。虽然此部分很繁琐,但是实现并不困难,请读者参阅文献[3]、[4]和[5]。

4模块功能仿真

  图2是串行口工作在方式0下发送数据的仿真图。输入信号trans_i是发送的启动信号(高电平有效)。它的出现使内部用于发送的状态机启动,同时使内部计数器复位,以便使每位的发送过程与计数器同步。计数器满刻度偏转一次,状态机的状态就会增加1。如图所示,在状态0向状态1转换时,将要发送的8位数据的最低为输出到rxd_o,这一数据的电平一直维持到状态1向状态2转换,这时开始输出第二位数据。依此类推,在状态8的末尾,8位数据完全输出完毕后,指示是否有数据输出的信号rxdwr_o变为低电平,表示数据已经发送完毕。同时,发送完成的指示信号(scon_o[0…2]中的相应位)也会置位。


图2工作于方式0的串行口发送数据的仿真图

  图3是工作于方式0的串行口接收数据的仿真图。接收状态机的启动依靠的是输入信号ren、ri。当ren=1且ri=0时,就会启动一次接收过程。如图中所示,接收过程始于状态0的末尾scon_i的ren=1的时候(图中左边的竖线处),而在下一个状态(状态1)的末尾就会将外部输入引脚的值移入内部的移位寄存器,依此类推,直到状态8的末尾将第8位数据移入,同时使接收缓冲寄存器和sbuf_o的值都为刚才移位所得到数值,以送往控制器处理。同时,接收完成的指示信号(scon_o[0…2]中的相应位)也会置位。


图3工作于方式0的串行口接收数据的仿真图

  图4是工作于方式1的串行口的接收和发送数据同时进行的仿真图。方式1中发送和接收数据的时钟源自tf_i。其发送的启动信号仍然是trans_i;接收的启动信号是检测到外部输入信号rxd_i有负跳沿出现。如图中所示,在接收状态机的状态0的末尾,负跳沿被检测到,状态机马上启动,转入下一个状态1。在状态1中,三次扫描检测rxd_i引脚的值,如果有两次或者三次值是“0”,则说明收到的起始位的值是“0”,状态机转入下一状态准备接收数据位,依此类推直到状态9的末尾将8位数据位最后一位收到并移如移位寄存器。再在下一个状态(状态10)接受停止位,如果停止位有效(停止位送至rb8,图中的scon_o(2)),则将接收到的数据送到接受缓冲区,并输出。至于发送,首先要发送的是起始位“0”,最后还要发送一位停止位“1”,上图中很清楚的表示了这一过程。


图4工作于方式1的串行口发送、接收数据的仿真图

  图5是工作于方式2的串行口的接收和发送数据同时进行的仿真图。方式2和方式1的接收和发送的工程是一样的。不同的在接收时,它用来送入rb8的值不是停止位而是可编程控制位,同时也是根据对这一位的判断来决定接收是否有效。(图中接收的可编程控制位是“1”)在发送时,它在停止位之前还发送一位可编程控制位tb8(图中scon_i的最低位)。


图5工作于方式2的串行口发送、接收数据的仿真图

  至于方式3下串口的工作情况,除波特率不同外,其他与方式2完全一样,图6是工作于方式3的串行口的接收和发送数据同时进行的仿真图。


图6工作于方式3的串行口发送、接收数据的仿真图

5结束语

  本文设计的兼容MCS-51单片机的串行口IP核采用完全同步的设计,系统在统一的时钟下工作。时钟周期只与所选用的fpga/cpld芯片的延时有关,而与设计无关,因此,串行口的波特率可根据时钟周期任意调整。另外,此串行口ip核已经结合其它ip核做成了一个soc系统,并成功地通过了fpga的测试。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

单片机是一种嵌入式系统,它是一块集成电路芯片,内部包含了处理器、存储器和输入输出接口等功能。

关键字: 单片机 编写程序 嵌入式

在现代电子技术的快速发展中,单片机以其高度的集成性、稳定性和可靠性,在工业自动化、智能家居、医疗设备、航空航天等诸多领域得到了广泛应用。S32单片机,作为其中的佼佼者,其引脚功能丰富多样,是实现与外部设备通信、控制、数据...

关键字: s32单片机引脚 单片机

在微控制器领域,MSP430与STM32无疑是两颗璀璨的明星。它们各自凭借其独特的技术特点和广泛的应用领域,在市场上占据了重要的位置。本文将深入解析MSP430与STM32之间的区别,探讨它们在不同应用场景下的优势和局限...

关键字: MSP430 STM32 单片机

该系列产品有助于嵌入式设计人员在更广泛的系统中轻松实现USB功能

关键字: 单片机 嵌入式设计 USB

单片机编程语言是程序员与微控制器进行交流的桥梁,它们构成了单片机系统的软件开发基石,决定着如何有效、高效地控制和管理单片机的各项资源。随着微控制器技术的不断发展,针对不同应用场景的需求,形成了丰富多样的编程语言体系。本文...

关键字: 单片机 微控制器

单片机,全称为“单片微型计算机”或“微控制器”(Microcontroller Unit,简称MCU),是一种高度集成化的电子器件,它是现代科技领域的关键组件,尤其在自动化控制、物联网、消费电子、汽车电子、工业控制等领域...

关键字: 单片机 MCU

STM32是由意法半导体公司(STMicroelectronics)推出的基于ARM Cortex-M内核的32位微控制器系列,以其高性能、低功耗、丰富的外设接口和强大的生态系统深受广大嵌入式开发者喜爱。本文将详细介绍S...

关键字: STM32 单片机

在当前的科技浪潮中,单片机作为嵌入式系统的重要组成部分,正以其强大的功能和广泛的应用领域受到越来越多行业的青睐。在众多单片机中,W79E2051以其卓越的性能和稳定的工作特性,成为市场上的明星产品。本文将深入探讨W79E...

关键字: 单片机 w79e2051单片机

单片机,又称为微控制器或微处理器,是现代电子设备中的核心部件之一。它集成了中央处理器、存储器、输入输出接口等电路,通过外部信号引脚与外部设备进行通信,实现对设备的控制和管理。本文将详细介绍单片机的外部信号引脚名称及其功能...

关键字: 单片机 微控制器 中央处理器

随着科技的飞速发展,单片机和嵌入式系统在现代电子设备中的应用越来越广泛。它们不仅提高了设备的智能化水平,还推动了各行各业的创新与发展。在单片机和嵌入式系统的开发中,编程语言的选择至关重要。本文将深入探讨单片机和嵌入式系统...

关键字: 单片机 嵌入式系统 电子设备
关闭
关闭