没有合适的资源?快使用搜索试试~ 我知道了~
首页基于FPGA的CAN总线控制器设计
基于FPGA的CAN总线控制器设计
357 浏览量
更新于2023-05-26
评论 1
收藏 188KB PDF 举报
使用VerilogHDL硬件描述语言完成了对CAN总线控制器的设计,能够实现符合CAN2.0A协议的所有功能。本总线控制器的外部接口采用Altera公司开发的Avalon总线接口,增强了控制器的应用灵活性。本设计使用Modelsim
资源详情
资源评论
资源推荐

基于基于FPGA的的CAN总线控制器设计总线控制器设计
使用VerilogHDL硬件描述语言完成了对CAN总线控制器的设计,能够实现符合CAN2.0A协议的所有功能。本
总线控制器的外部接口采用Altera公司开发的Avalon总线接口,增强了控制器的应用灵活性。本设计使用
Modelsim
摘要:使用Verilog HDL硬件描述语言完成了对
关键词:CAN总线;控制器;现场可编程门阵列
0 引言
CAN(控制器局域网)是一种先进的串行通信协议,由德国BOSCH公司开发,并最终成为国际标准(ISO11898),是国际上使
用最广泛的现场总线之一。目前世界上已有20多家CAN总线控制器生产商,110多种CAN总线控制器芯片和集成CAN总线控
制器的微处理器芯片。
由于定制的CAN总线控制器芯片不能嵌入到SoC(片上系统)中,而采用分立元器件实现CAN总线接口,使得系统中器件数量
增加,同时也增大了系统面积,本文所介绍的CAN总线控制器正是由Verilog HDL语言描述,既可以作为一个独立的设备,也
可以作为一个模块集成到
虽然目前国内外已有很多人研究或设计了CAN总线控制器IP核,但其中大多数只是对控制器中的某一个模块进行了研究和
设计,并没有实现一个完整的CAN总线控制器的功能,例如文献只对CAN控制器的状态机进行研究,文献只对CAN控制器的
位定时模块进行研究。而完整实现了CAN总线控制器功能的作品中,最高工作频率又不是很理想,例如Mentor Graphics公司
提供的MCAN2D1 CAN2.0 Network Controller的最高工作频率只有32.46MHz,文献中介绍的CAN总线控制器的最高工作
频率也只有50MHz,这些IP核显然不能适应高速环境的要求,同时文献中介绍的控制器对外接口中出现了寄存器使能位等接
口,这种接口不符合Avalon总线规范,不利于集成到FPGA芯片中,其通用性肯定较差,所以研究并设计出一款高速且通用性
强的CAN总线控制器的IP核仍然是有其重要意义的。
1 系统实现
1.1 系统框图
本设计中将整个CAN控制器系统分为了11个模块,分别是Avalon总线接口模块、寄存器组模块、接收缓冲器模块、发送缓
冲器模块、接收滤波模块、CRC校验模块、状态机模块、标识符填充模块、错误计数器模块、位填充模块、位定时模块。其
结构框图如图1所示。
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
码的生成多项式。
CAN总线协议就是采用的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 立填充模块
在CAN总线协议中,当控制器处于发送或接收状态时,若控制器检测到总线上出现连续6个相同极性的电平时(帧结尾除
外),控制器将会检测到错误而停止发送或接收数据,此时控制器将会由发送或接收状态转换为错误状态。
本模块的主要作用是:在发送状态时,连续发送5个相同极性的位时,若第5位与将要发送的第6位极性不同时,在第5位和
第6位之间插入1个极性与第6位相同的位,若第5位与将要发送的第6位极性相同,在第5位和第6位之间插入1个极性与第6位
相反的位;在接收状态时,连续接收5个相同极性的位时,若第6位与之前5位的极性不同,则舍弃第6位,若第6位与之前5位
的极性相同,则产生位填充错误,控制器将停止接收数据,此时控制器也将由接收状态转换为错误状态。同时,本模块也具有















安全验证
文档复制为VIP权益,开通VIP直接复制

评论0