新闻中心

EEPW首页 > EDA/PCB > 设计应用 > 基于FPGA的CAN总线控制器设计

基于FPGA的CAN总线控制器设计

作者:时间:2011-06-15来源:网络收藏

1.2 主要模块介绍
1.2.1 寄存器组模块
本模块由位宽为8bit,深度为256的寄存器组实现其功能,其中已经使用的寄存器为23个,其余的供以后扩展。本设计采用将各个独立的控制及状态寄存器集成在一起的设计思想,任何对控制器的初始化以及数据的接收和发送都是从写寄存器组开始的。
1.2.2 CRC校验模块
CRC(循环冗余校验码)是一种能力非常强的检错、纠错码,常用于串行传送的辅助存储器与主机的数据通信和计算机网络中。它的基本原理是:在k位信息码后再拼接r位的校验码,整个编码长度为n位,因此,这种编码又叫(n,k)码。对于一个给定的(n,k)码,可以证明存在一个最高次幂位n-k=r的多项式g(x),根据g(x)可以生成七位信息的校验码,而g(x)叫做这个CRC码的生成多项式。
总线协议就是采用的CRC校验,并且是16位的C R C-1 6校验码, 生成多项式为,可转换为二进制码组1100010110011001。生成CRC码的具体过程是:由帧起始、仲裁场、控制场、数据场(数据帧有数据场,远程帧没有数据场)组成的被除数右移15位后与生成多项式的二进制码组进行模2除,生成的15位余数就是所需的CRC码。
本模块的主要作用有两个:1)在控制器处于发送状态时,计算出CRC码,同时将帧起始、仲裁场、控制场、(数据场)、CRO场按帧格式的要求进行打包;2)在控制器处于接收状态时,将接收到的由帧起始、仲裁场、控制场、(数据场)、CRC场组成的被除数与生成多项式的二进制码组进行模2除,结果为0,则接受数据,不为0,则丢弃数据,并产生CRC校验错误。
1.2.3 立填充模块
总线协议中,当控制器处于发送或接收状态时,若控制器检测到总线上出现连续6个相同极性的电平时(帧结尾除外),控制器将会检测到错误而停止发送或接收数据,此时控制器将会由发送或接收状态转换为错误状态。
本模块的主要作用是:在发送状态时,连续发送5个相同极性的位时,若第5位与将要发送的第6位极性不同时,在第5位和第6位之间插入1个极性与第6位相同的位,若第5位与将要发送的第6位极性相同,在第5位和第6位之间插入1个极性与第6位相反的位;在接收状态时,连续接收5个相同极性的位时,若第6位与之前5位的极性不同,则舍弃第6位,若第6位与之前5位的极性相同,则产生位填充错误,控制器将停止接收数据,此时控制器也将由接收状态转换为错误状态。同时,本模块也具有检测位错误,位填充错误,形式错误及应答错误的功能。另外,模块还具有生成错误帧、过载帧、间歇帧的功能。
1.2.4 状态机模块
状态机模块在整个控制器中扮演着“大脑”的作用,它控制着其它模块的操作。相比于文献中未采用状态机的设计,采用状态机会使得各个模块的功能作用更为明确,系统结构更为清晰合理,同时也更便于各个模块之间的协调控制。本状态机模块的设计采用和文献中相同的设计,将控制器分为了10种模式:总线脱离、总线启动、总线空闲、模式选择、发送模式、接收模式、错误模式、间歇模式、超载模式及挂起模式。状态机状态转移图如图2所示。

本文引用地址:http://www.amcfsurvey.com/article/191153.htm

c.JPG



关键词: FPGA CAN 线控 制器设计

评论


相关推荐

技术专区

关闭