位置:51电子网 » 技术资料 » EDA/PLD

基于PC机与CPLD通信问题的研究

发布时间:2008/5/28 0:00:00 访问次数:555

引言

  用cpld(复杂可编程逻辑器件)设计乃至仿真、验证、利用isp(在系统可编程)对硬件调试都非常方便,所以开发周期很短,且i/o口随意设定,故用cpld设计专用芯片是大势所趋。vb是一种面向对象的高级语言,应用这的通信控件编写上位机的通信程序十分方便,过程简单。本文针对cpld和pc通信的特点,各编写了上位机和下位机的程序,进行相对高速的串行通信。

  1 上位机和下位机通信特点简介

  根据串行通信的协议,发送串行数据一般是:1个起始位、n个数据位,1个或多个停止位。这样,发送起始位以后表明传输开始。传送与接收的双方设定好同样的传输位数,直到n个数据位送完以后,送停止位。上位机和下位机的电平标准不同,它们通过rs-232电平标准转换,在两者之间接入rs-232电平转换芯片即可。上位机和下位机的传输是异步传输,这样就需要有一个参考脉冲代表传输速度即波特率。通信双方取得一样的通信速度bps,指的是每一秒钟所传送的位数。现在仪器和工业场合,一般9 600 bps是最常见的速度,而现在个人计算机pc所提供的串行速度可 115 200bps(甚至921 600 bps)。因为常用的单片机mcu的软件是过程语言,以其作为下位机,无法提供这么高的波特率,即使是较低的波特率也可能产生误差。所以在传输距离较近而设备也可提供时,使用最高的传输速度也可以。cpld的软件是非过程语言,也就是说其逻辑段定义的所有动作是同时进行的而不是串行的,所以完全可以提供这样的高速下位机uart(universal asynchronous receiver transmitter)。

  2 上位机vb程序

  上位机软件利用vb6编写。微软的visual basic语言有极其友好的界面,深受广大编程人员的好评。其可视化特点得到了很好的发挥,其中的mscomm控件非常方便编写软件,将最低层的部分隐蔽,只要了解自己需要的参数即可顺序编写上位机软件。现在简介该控件的各项参数:

  commport——指定串行口;

  portopen——串口是否打开;

  input——输入寄存器;

  output——输出寄存器;

  inbuffersize——输入缓冲区大小;

  outbuffersize——输出缓冲区大小;

  inputlen——一次由串行端口读入字符串长度或字节个数;

  settings——设备波特率、传输数据位、校验位、停止位;

  inputmode——输入的是数据类型(文字形式或是二进制形式)。

  上位机程序要和下位机配合起来。主要须考虑的问题是波特率、输入输出数据类型。对于从下位机到上位机输出数据的情况,可作以下处理(反之类似):

  settings 115200,n,8,1(波特率115 200bps,校验位默认,8位数据位,1个停止位)对于上位机,将输入的数据以二进制数形式获取要通过以下的转换:

  dim data() as byte

  private sub timer1_timer()

  data()=mscomm1.input

  for i="lbound"(data)to ubound(data)

  text2.text=data(i)

  next

  end sub

  在串口打开的情况下,利用定时器定时从下位机获取数据,显示在窗口中。通过设置vb定时器控件的interval参数来控制读取时间。可见,上位机利用vb编写程序,十分方便,这是一种成熟的模块化语言,只要把参数给定,很快可以实现编程。

  3 下位机通信程序编写

  maxplusii里有许多常用的宏单元,如计数器、四则运算、各类逻辑门乃至rom、ram等;而在这些宏单元里具体的参数都可以由用户来自行设定,这就是上面提到的ip核形式。由于cpld数字设计中结构化设计的趋势,不同层次的ip(intellectual property)核将出现。各个ip核可重复利用,大大提高了设计能力和效率,避免了重复劳动。以下设计的是下位机的ip核,它是一个波特率、起始位、停止位均可设定的宏单元。

  maxplusii的ahdl(altera hard ware description language)是altera公司开发的完全集成于maxplusii中的一种模块化高级语言,特别适合于描述复杂的组合逻辑、组运算、状态机和真值表。本文利用ahdl,直接生成ip核。

  设计的最终目标是生成如图1所示的symbol。其参数可以由用户设定(如图1的右上角),选择先送(收)串行数据最高位或最低位、数据宽度、停止位等。

  设计思想是利用状态机的3种状态send(receive)、wait、idle,系统时钟为输入的clk,在这3种状态间变换。而baud为clk分频后的波特率时间。发送时,当baud上升沿时,输出1位串行数据。输出全部结束时,busy端出现低电平信号,这时利用load信号可以从d端读取并入的数据。由于使用的是ahdl,这种状态机实现起来非常方便,程序简洁明了。图2所示为状态机图。

引言

  用cpld(复杂可编程逻辑器件)设计乃至仿真、验证、利用isp(在系统可编程)对硬件调试都非常方便,所以开发周期很短,且i/o口随意设定,故用cpld设计专用芯片是大势所趋。vb是一种面向对象的高级语言,应用这的通信控件编写上位机的通信程序十分方便,过程简单。本文针对cpld和pc通信的特点,各编写了上位机和下位机的程序,进行相对高速的串行通信。

  1 上位机和下位机通信特点简介

  根据串行通信的协议,发送串行数据一般是:1个起始位、n个数据位,1个或多个停止位。这样,发送起始位以后表明传输开始。传送与接收的双方设定好同样的传输位数,直到n个数据位送完以后,送停止位。上位机和下位机的电平标准不同,它们通过rs-232电平标准转换,在两者之间接入rs-232电平转换芯片即可。上位机和下位机的传输是异步传输,这样就需要有一个参考脉冲代表传输速度即波特率。通信双方取得一样的通信速度bps,指的是每一秒钟所传送的位数。现在仪器和工业场合,一般9 600 bps是最常见的速度,而现在个人计算机pc所提供的串行速度可 115 200bps(甚至921 600 bps)。因为常用的单片机mcu的软件是过程语言,以其作为下位机,无法提供这么高的波特率,即使是较低的波特率也可能产生误差。所以在传输距离较近而设备也可提供时,使用最高的传输速度也可以。cpld的软件是非过程语言,也就是说其逻辑段定义的所有动作是同时进行的而不是串行的,所以完全可以提供这样的高速下位机uart(universal asynchronous receiver transmitter)。

  2 上位机vb程序

  上位机软件利用vb6编写。微软的visual basic语言有极其友好的界面,深受广大编程人员的好评。其可视化特点得到了很好的发挥,其中的mscomm控件非常方便编写软件,将最低层的部分隐蔽,只要了解自己需要的参数即可顺序编写上位机软件。现在简介该控件的各项参数:

  commport——指定串行口;

  portopen——串口是否打开;

  input——输入寄存器;

  output——输出寄存器;

  inbuffersize——输入缓冲区大小;

  outbuffersize——输出缓冲区大小;

  inputlen——一次由串行端口读入字符串长度或字节个数;

  settings——设备波特率、传输数据位、校验位、停止位;

  inputmode——输入的是数据类型(文字形式或是二进制形式)。

  上位机程序要和下位机配合起来。主要须考虑的问题是波特率、输入输出数据类型。对于从下位机到上位机输出数据的情况,可作以下处理(反之类似):

  settings 115200,n,8,1(波特率115 200bps,校验位默认,8位数据位,1个停止位)对于上位机,将输入的数据以二进制数形式获取要通过以下的转换:

  dim data() as byte

  private sub timer1_timer()

  data()=mscomm1.input

  for i="lbound"(data)to ubound(data)

  text2.text=data(i)

  next

  end sub

  在串口打开的情况下,利用定时器定时从下位机获取数据,显示在窗口中。通过设置vb定时器控件的interval参数来控制读取时间。可见,上位机利用vb编写程序,十分方便,这是一种成熟的模块化语言,只要把参数给定,很快可以实现编程。

  3 下位机通信程序编写

  maxplusii里有许多常用的宏单元,如计数器、四则运算、各类逻辑门乃至rom、ram等;而在这些宏单元里具体的参数都可以由用户来自行设定,这就是上面提到的ip核形式。由于cpld数字设计中结构化设计的趋势,不同层次的ip(intellectual property)核将出现。各个ip核可重复利用,大大提高了设计能力和效率,避免了重复劳动。以下设计的是下位机的ip核,它是一个波特率、起始位、停止位均可设定的宏单元。

  maxplusii的ahdl(altera hard ware description language)是altera公司开发的完全集成于maxplusii中的一种模块化高级语言,特别适合于描述复杂的组合逻辑、组运算、状态机和真值表。本文利用ahdl,直接生成ip核。

  设计的最终目标是生成如图1所示的symbol。其参数可以由用户设定(如图1的右上角),选择先送(收)串行数据最高位或最低位、数据宽度、停止位等。

  设计思想是利用状态机的3种状态send(receive)、wait、idle,系统时钟为输入的clk,在这3种状态间变换。而baud为clk分频后的波特率时间。发送时,当baud上升沿时,输出1位串行数据。输出全部结束时,busy端出现低电平信号,这时利用load信号可以从d端读取并入的数据。由于使用的是ahdl,这种状态机实现起来非常方便,程序简洁明了。图2所示为状态机图。

相关IC型号
版权所有:51dzw.COM
深圳服务热线:13751165337  13692101218
粤ICP备09112631号-6(miitbeian.gov.cn)
公网安备44030402000607
深圳市碧威特网络技术有限公司
付款方式


 复制成功!