MCS-51单片机串行口IP核的实现
时间:08-06
来源:互联网
点击:
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的测试。
图2是串行口工作在方式0下发送数据的仿真图。输入信号trans_i是发送的启动信号(高电平有效)。它的出现使内部用于发送的状态机启动,同时使内部计数器复位,以便使每位的发送过程与计数器同步。计数器满刻度偏转一次,状态机的状态就会增加1。如图所示,在状态0向状态1转换时,将要发送的8位数据的最低为输出到rxd_o,这一数据的电平一直维持到状态1向状态2转换,这时开始输出第二位数据。依此类推,在状态8的末尾,8位数据完全输出完毕后,指示是否有数据输出的信号rxdwr_o变为低电平,表示数据已经发送完毕。同时,发送完成的指示信号(scon_o[0…2]中的相应位)也会置位。
![](../img/eec-mcu/mcu-172330l5akuhlztnv.jpg)
图2 工作于方式0的串行口发送数据的仿真图
图3是工作于方式0的串行口接收数据的仿真图。接收状态机的启动依靠的是输入信号ren、ri。当ren=1且ri=0时,就会启动一次接收过程。如图中所示,接收过程始于状态0的末尾scon_i的ren=1的时候(图中左边的竖线处),而在下一个状态(状态1)的末尾就会将外部输入引脚的值移入内部的移位寄存器,依此类推,直到状态8的末尾将第8位数据移入,同时使接收缓冲寄存器和sbuf_o的值都为刚才移位所得到数值,以送往控制器处理。同时,接收完成的指示信号(scon_o[0…2]中的相应位)也会置位。
![](../img/eec-mcu/mcu-17233110bnwm2ccr3.jpg)
图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”,上图中很清楚的表示了这一过程。
![](../img/eec-mcu/mcu-172332wikqd1mggzg.jpg)
图4 工作于方式1的串行口发送、接收数据的仿真图
图5是工作于方式2的串行口的接收和发送数据同时进行的仿真图。方式2和方式1的接收和发送的工程是一样的。不同的在接收时,它用来送入rb8的值不是停止位而是可编程控制位,同时也是根据对这一位的判断来决定接收是否有效。(图中接收的可编程控制位是“1”)在发送时,它在停止位之前还发送一位可编程控制位tb8(图中scon_i的最低位)。
![](../img/eec-mcu/mcu-172333udswh4pdeqf.jpg)
图5 工作于方式2的串行口发送、接收数据的仿真图
至于方式3下串口的工作情况,除波特率不同外,其他与方式2完全一样,图6是工作于方式3的串行口的接收和发送数据同时进行的仿真图。
![](../img/eec-mcu/mcu-172334xetrmuerfjb.jpg)
图6 工作于方式3的串行口发送、接收数据的仿真图
5 结束语
本文设计的兼容mcs-51单片机的串行口ip核采用完全同步的设计,系统在统一的时钟下工作。时钟周期只与所选用的FPGA/cpld芯片的延时有关,而与设计无关,因此,串行口的波特率可根据时钟周期任意调整。另外,此串行口ip核已经结合其它ip核做成了一个soc系统,并成功地通过了fpga的测试。
集成电路 嵌入式 单片机 电路 51单片机 仿真 FPGA 相关文章:
- 单芯片集成电路优化自适应转向大灯系统的设计 (07-12)
- 基于FPGA的液晶显示控制器设计(02-17)
- DJ1001-063一风扇单片微电脑集成电路图(04-09)
- 嵌入式系统是嵌入式软件与IC发展基础(11-03)
- 应用处理器连接汽车和消费电子两大领域(02-26)
- ARM、FPGA和DSP的特点和区别是什么?(05-08)