DIY编程器网

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 732|回复: 0
打印 上一主题 下一主题

[接口电路] 基于FPGA的CAN总线控制器设计

[复制链接]
跳转到指定楼层
楼主
发表于 2012-1-17 15:11:36 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
摘要:使用Verilog HDL硬件描述语言完成了对CAN总线控制器的设计,能够实现符合CAN2.0A协议的所有功能。本总线控制器的外部接口采用Altera公司开发的Avalon总线接口,增强了控制器的应用灵活性。本设计使用Modelsim软件完成了功能仿真和时序仿真。
关键词:CAN总线;控制器;现场可编程门阵列

0 引言
??? CAN(控制器局域网)是一种先进的串行通信协议,由德国BOSCH公司开发,并最终成为国际标准(ISO11898),是国际上使用最广泛的现场总线之一。目前世界上已有20多家CAN总线控制器生产商,110多种CAN总线控制器芯片和集成CAN总线控制器的微处理器芯片。
??? 由于定制的CAN总线控制器芯片不能嵌入到SoC(片上系统)中,而采用分立元器件实现CAN总线接口,使得系统中器件数量增加,同时也增大了系统面积,本文所介绍的CAN总线控制器正是由Verilog HDL语言描述,既可以作为一个独立的设备,也可以作为一个模块集成到FPGA中。
??? 虽然目前国内外已有很多人研究或设计了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校验码, 生成多项式为



                          
                       
                          
                               
??? 掉电、复位及总线上过多的错误都会使控制器进入总线脱离模式;系统上电、复位解除或过多错误而复位后的下个时钟会使控制器进入总线启动模式;在总线启动模式下,若之前因掉电、复位使控制器进入总线脱离模式,当控制器监测到总线上1次连续11个隐性位(逻辑电平1”)时,控制器进入总线空闲状态,若因过多错误使控制器进入总线脱离模式,则当控制器监测到总线上128次连续11个隐性位时,控制器进入总线空闲模式;当控制器没有数据发送但监测到总线上有显性位(逻辑电平“0”)时,控制器进入接收模式,而当控制器有数据发送同时监测到总线上有显性位时,控制器进入模式选择模式;模式选择其实就是一个总线仲裁,此时标识符将扮演仲裁位的角色,显性位的优先级更高,若总线仲裁失败则控制器进入接收模式,仲裁成功则进入发送模式;一帧数据成功发送完成后,控制器会进入间歇模式;若间歇帧发送成功,则控制器会再次进入总线空闲模式。状态机由空闲模式转换为模式选择模式的仿真图如图3所示。




1.2.5 位定时模块
??? 位定时模块控制着控制器报文发送或接收的节奏,这个节奏就是位时间,它由四部分组成:同步段、传播段、相位缓冲段1和相位缓冲段2,这四个段均由时间份额构成,时间份额是根据预先设置的分频值对输入时钟进行分频得到的。
??? 位定时模块还有一个重要的功能是将本节点与总线上的其它节点进行时钟同步。由于每个CAN节点使用的是独立的时钟,所以不同节点之间会有相位差,这些相位差严重时会影响报文发送和接收的准确性,所以有必要对不同节点进行时钟同步。
                          
                       
                          
                               

2 系统验证
??? 整个系统的功能仿真和时序仿真是借助Modelsim软件完成的。图4所示是对控制器发送数据的验证,测试用的发送数据为随意选择的:00101001,仲裁场和控制场也是任选的,分别为:110100101110、110001,设置好寄存器组后,控制器计算出对应的CRC码为:110111001111 011,之后控制器将数据按CAN协议的帧格式打包逐位发送出去。




??? 控制器最初处于总线脱离模式,复位结束后进入总线启动模式,当控制器检测到总线上的1次连续11个隐性位时,进入总线空闲模式,接着当控制器检测到总线出现第一个显性位时,进入模式选择模式,在此模式下,控制器进行的操作就是总线仲裁,确定本节点是否获得总线控制权,由于本测试采用的是控制器自测模式,即输出线与输入线连在一起,所以仲裁时间为12个位时间,仲裁成功后,控制器会进入发送模式,若无错误产生,数据发送完成后控制器进入间歇模式,最后进入总线空闲模式。
??? 经过一系列的测试验证后,表明本CAN总线控制器能够发送或接收所有符合CAN2.0A协议的报文帧。

3 结束语
??? 本设计实现了所有符合CAN2.0A协议的CAN总线控制器功能,最高工作频率为139.43MHz,这也达到了最初的设计目的。控制器的时序分析如图5所示。




??? 本文作者创新点为:首先控制器的外围接口采用Avalon总线接口,这使得本设计的通用性更强:其次是本设计的最高工作频率达到了139.43MHz,能够适应高速通信的要求。
                          
                       
                          
                               
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|文字版|手机版|DIY编程器网 ( 桂ICP备14005565号-1 )

GMT+8, 2024-4-28 01:13 , 耗时 0.089999 秒, 18 个查询请求 , Gzip 开启.

各位嘉宾言论仅代表个人观点,非属DIY编程器网立场。

桂公网安备 45031202000115号

DIY编程器群(超员):41210778 DIY编程器

DIY编程器群1(满员):3044634 DIY编程器1

diy编程器群2:551025008 diy编程器群2

QQ:28000622;Email:libyoufer@sina.com

本站由桂林市临桂区技兴电子商务经营部独家赞助。旨在技术交流,请自觉遵守国家法律法规,一旦发现将做封号删号处理。

快速回复 返回顶部 返回列表