一种基于fpga的二进制同步通信协议控制器的制造方法_3

文档序号:9754393阅读:来源:国知局
在透明文本区域内的DLE字符之前添加一个附加 DLE字符。为定义透明文本 区域,在STX字符之前插入一个DLE链路转义字符,以通知接收端在文本段可能出现控制字 符,并要求忽略这些控制字符,并在ETX(或ETB)字符前也插入一个DLE链路转义字符,以通 知接收透明文本区域结束,后续出现的控制字符可视为有效控制字符。如果在透明文本区 域出现与DLE相同的字符,需要在该字符前附加一个DLE字符,以通知接收端文本中的出现 一个有效的DLE文本字符。经过字节填充的典型透明数据帧如图1所示。
[0053] 经字节填充的透明数据帧中SYN为同步字符,SYN字符数量可以是一个、两个或多 个,本发明在发送通道模块中支持两个SYN字符,在接收通道模块中支持一个、两个或多个 SYN字符。任何在S0H之后和DLE+STX之前的字符都是头部信息,头部信息根据实际应用情况 决定是否需要。DLE+STX之后和DLE+EXT(或DLE+ETB)之前的数据为正文数据。DLE+ETX(或 DLE+ETB)之后的两个字节的BCC为差错校验,本发明支持的差错校验多项式为CCITT-CRC: X16+X12+X5+l〇
[0054] 二进制同步通信协议的控制帧格式如图2所示,控制帧由同步字符SYN、一个或多 个控制字符以及两个字节的BCC差错校验组成,主要完成帧的肯定应答、否定应答等。
[0055] 二进制同步通信协议控制器总体结构如图3所示,主要包括处理器接口模块、数据 发送缓存模块、数据接收缓存模块、发送通道模块、接收通道模块和波特率生成模块。
[0056]处理器接口模块提供外部处理器对控制器进行访问控制的寄存器接口,包括寄存 器空间、地址总线、数据总线、控制总线等,实现外部处理器对寄存器读写的编程控制、收发 数据交互等。处理器接口模块提供了 8位宽的地址总线ADDR,16位宽的数据总线DATA,控制 总线包括读信号RD(READ)、写信号WR(WRITE)、片选信号CS(CHIP SELECT)和中断信号INT (INTERRUPT)等,外部处理器通过地址总线ADDR、数据总线DATA、片选信号CS和读信号RD可 以读取内部寄存器的值,相应的通过地址总线ADDR、数据总线DATA、片选信号CS和写信号WR 可以向内部寄存器写入相应的数值。INT中断信号用于通知外部处理器,二进制同步通信协 议控制器已发生某种类型的中断事件。
[0057] 二进制同步通信协议控制器内部寄存器描述如表2所示。
[0058] 表2二进制同步通信协议控制器内部寄存器
[0059]
[0060]
[0061」
[0062] 外部处理器通过向控制寄存器写入相应的控制命令数值,可以控制发送接收通道 是处于复位状态还是正常工作状态、控制发送和接收时钟是来自于外部时钟线路还是内部 波特率生成模块、控制中断事件的使能与禁止等。
[0063] 外部处理器通过向波特率选择寄存器写入相应的波特率选择数值,可以在所列举 的典型波特率中进行选择,并将选择结果通知波特率生成模块产生相应的波特率时钟。
[0064] 当控制寄存器中任意中断事件被使能后,一旦发生相应的中断事件,控制器触发 一个INT中断脉冲信号,通知外部处理器已发生了中断事件,并且中断状态寄存器对应的中 断事件状态位置1,外部处理器通过读取中断状态寄存器数值可以判断发生哪些中断事件, 然后决定采取相应读写操作。读取中断状态寄存器的操作将使中断状态寄存器清零。
[0065] 发送缓存区空满状态和使用量是外部处理器是否向发送缓存区写入数据的一个 依据。当外部处理器向数据缓存寄存器写入数据时,16位宽的数据总线上Bit7~BitO为有 效数据,Bitl5~Bit8为数据类型标记。当外部处理器需要发送一帧数据帧时,首先应获取 发送缓冲区状态信息,当发送缓冲区允许发送数据写入时,外部处理器按以下步骤写入数 据:
[0066] 步骤1-1,向数据发送缓存模块中的发送缓存数据寄存器写入数据OxFFFF,表示一 帧数据帧开始;
[0067] 步骤1-2,所发送数据存在头部信息时,向发送缓存数据寄存器写入头部信息数 据,头部信息数据格式为〇x〇9XX,其中XX为头部信息字符;
[0068]步骤1-3,向发送缓存数据寄存器写入正文数据信息OxOOXX,其中XX为正文字符; [0069]步骤1-4,向发送缓存数据寄存器写入数据OxOEEE,表示一帧数据帧结束。
[0070] 同样,外部处理器进行数据接收时,首先获取接收缓冲区状态信息,当接收缓冲区 允许数据读出时,外部处理器按照一下步骤读取一帧数据信息:
[0071] 步骤2-1,读取数据接收缓存模块中的接收缓存数据寄存器,如果读出数据为 OxFFFF,表示一帧数据帧开始,继续读取后续数据;
[0072]步骤2-2,读取接收缓存数据寄存器,如果读出数据为0x09XX,表示读取的是头部 信息数据,其中XX是头部信息字符;
[0073] 步骤2-3,读取接收缓存数据寄存器,如果读出数据为OxOOXX,表示读取的是正文 数据信息,其中XX为正文字符;
[0074] 步骤2-4,读取接收缓存数据寄存器,如果读出数据为OxOEEE,表示一帧数据帧结 束,且校验正确,该数据帧有效;如果读出数据为OxEEEE,表示一帧数据帧结束,但校验错 误,外部处理器应丢弃该数据帧。
[0075]数据发送缓存模块是通过FPGA内部存储逻辑单元构建的FIFO存储器,数据位宽为 16比特,存储深度可配置。外部处理器向发送缓冲数据寄存器和标记寄存器写入数据,发送 缓存数据寄存器和标记寄存器的数据同时写入发送缓存FIFO存储器进行顺序存储。发送缓 存FIFO存储器中的数据将被发送通道模块读取,并按规定帧格式进行发送。
[0076]同样,数据接收缓存模块也是通过FPGA内部存储逻辑单元构建的FIFO存储器,数 据位宽为16比特,存储深度可配置。接收通道模块接收到的数据按照帧起始、头部信息、正 文数据、控制信息、帧结束且校验正确、帧结束且校验错误等进行分类标记后,写入数据接 收缓存FIFO存储器。外部存储器读取接收数据寄存器时,实际读取的数值来自与数据接收 缓存FIFO存储器。
[0077]发送通道模块,用于读取数据发送缓存模块中的数据,按照二进制同步通信协议 数据帧格式进行组帧、转义、校验计算以及按时序发送数据,发出状态指示信号,并根据接 收通道模块的指示信号选择发送控制帧;发送通道模块脱离复位状态后,按照以下步骤进 行工作:
[0078]步骤3-1,根据接收通道模块的指示信号标记判断是否已接收到未确认的一帧数 据帧,如果已接收到未确认的一帧数据帧,进入步骤3-2;如果未接收到数据帧,但是数据发 送缓存FIFO存储器中有数据需要发送,进入步骤3-3;否则继续停留在步骤3-1进行检测判 断;
[0079] 步骤3-2,根据接收到数据帧正确性的指示信号和奇帧计数或者偶帧计数,选择发 送控制字符组{SYN、SYN、ACK0}、控制字符组{SYN、SYN、ACK1}或控制字符组{SYN、SYN、NAK}, 返回步骤3-1;控制字符组{SYN、SYN、ACK0}包括SYN、SYN和ACK0三个控制字符,控制字符组 {SYN、SYN、ACK1}包括SYN、SYN和ACK1三个控制字符,控制字符组{SYN、SYN、NAK}包括SYN、 SYN和NAK三个控制字符;
[0080] 步骤3-3,读取发送缓存模块FIFO存储器数据,判断是否为帧起始数据OxFFFF,如 果不是帧起始数据,则将该数据丢弃;如果是帧起始数据,继续读取下一个数据,如果下一 个数据标记为头部信息数据,则发送输出控制字符组{SYN、SYN、S0H},控制字符组{SYN、 SYN、S0H}包括SYN、SYN和S0H三个控制字符,接着开始发送头部数据信息,并继续读出头部 信息数据在发送时钟驱动下发送,直到读到标记正文的数据,将读出的头部信息数据进行 CRC差错校验计算,然后进入步骤3_4;
[0081] 步骤3-4,如果从数据发送缓存模块FIFO存储器中读出的数据为标记为正文的数 据,则在发送完头部信息后紧接着发送
当前第3页1 2 3 4 5 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1