基于基于FPGA的的CAN总线控制器总线控制器SJA1000软核的设计软核的设计
分析了CAN控制器SJA1000的特点及CAN协议通信格式。设计了控制器SJA1000的IP软核,能为应用提供一个
性能优良的、易于移植的控制器SJA1000,实现了对步进电机的控制。
控制局域网(CAN)属于现场总线的范畴,它是一种有效支持分布式控制或实时控制的串行通信网络。与一般的通信总线相
比,CAN总线的数据通信可靠性、实时性和灵活性好,应用领域非常广泛,通常基于ARM或51单片机,实现与CAN控制器的
通信联络。FPGA/SOPC技术是实现嵌入式系统的最高形式,基于IP软核的设计与应用也必将成为替代硬核的一种发展趋势。
凭借QuartusII和NiosII工具,基于FPGA的VHDL(或Verilog)语言设计的IP核能够提供灵活性和性能更好的控制器。
图1基于FPGA控制器的模块图
图1为一个基于FPGA的控制器的CAN总线节点。其中PCA82C251是CAN总线接收器,SJA1000是CAN总线通信控制
器,PMM8713是驱动步进电机的脉冲分配器,FPGA模块在节点模型中对SJA1000进行控制,并将接收到的帧信息进行处
理,发送给脉冲分配器,以驱动步进电机。
在设计中采用自顶向下的设计方法。通过分析SJA1000常用的控制芯片51单片机的功能,将其分为主要的4个模块:初始化模
块、位查询模块、数据处理模块和缓冲区释放模块。
图2系统主状态转换图
对SJA1000完成控制功能的过程用状态图描述如图2所示,这也是系统的主状态机。4个状态对应上述的4个功能模块,首先在
initial_state完成对SJA1000的初始化,在由init_end信号给出初始化完成标志后,进入查询状态,即query_RBS状态,由位查
询模块完成此时对SJA1000的状态查询。如果查询到SJA1000缓冲区有帧信息,将qRBS_end置“1”,进入下一个状态
frame_cope,即帧处理状态,此时由数据处理模块完成对缓冲区的数据读取,并作处理。在读取完一帧数据后,需要释放缓
冲区,为下一帧信息的接收做准备。此时状态转入了release_buffer,对应功能模块中的缓冲区释放模块,此状态结束后又转入
位查询状态,为下一帧信息接收做准备。
初始化模块主要在系统上电或重启后,先对SJA1000进行初始化;位查询模块是在初始化完成后,对SJA1000状态寄存器的
接收缓冲区标志位不断进行查询,如果在缓冲区收到一帧信息后,则转入数据处理模块,否则继续进行查询;数据处理模块则
是在查询到接收缓冲区有数据后,读入帧数据,并对帧数据进行处理;缓冲区释放模块是在一帧信息处理完毕后,释放缓冲区
空间。
除了上述4个功能模块之外,还需要读写模块、双端口模块、模块接口控制逻辑等。
1读写模块
由SJA1000的数据手册可知,SJA1000提供的微处理器接口信号有地址数据复用总线AD0~AD7、地址锁存信号ALE、片选信
号CS、读写使能信号RD和WR、以及复位信号RST。
SJA1000的数据信号和地址信号是时分复用的,而FPGA中不存在地址的概念,对于FPGA来说,输出的只有数据。因此设计
的关键就是把SJA1000中的寄存器地址当成数据写入到SJA1000中,配合地址锁存信号ALE和写允许信号WR完成对SJA1000
特定寄存器的命令字写入。读写使能信号是RD、WR以及复位信号RST。设计的关键就是把SJA1000中的寄存器地址当成数
据写入到SJA1000中,配合地址锁存信号ALE和写允许信号WR完成对SJA1000特定寄存器的命令字写入。与写操作相似,只
需严格按照时序,将ALE、RD、WR、CS引脚的电平互相配合置高或置低,即可完成读操作。读写周期时序图如图3和图4所
示。
图3SJA1000读周期时序图
图4SJA1000写时序图
设计时采用状态机的形式,由读写时序图可以看到,与SJA1000读写相关的控制信号有ALE、RD、WR、CS。无论读写,都
必须先输出地址,由接口控制逻辑模块输入地址。AD[7..0]是数据双向流通的,由双端口模块组成,读写模块与之相接口,输
入、输出设计分开。读写模块在与接口控制逻辑接口模块相连接时,输出的数据与输入的数据也设计分开。同样读写模块的开
启信号与读/写选择信号也由接口控制逻辑给出。由QuartusII生成的读写模块如图5所示。
图5读写模块
在IDLE状态等待,当4个功能模块中需要使用读写功能时,由接口控制模块控制使该功能模块与读写模块连接,相应的功能模
块输出地址到读写模块,接口控制模块配合给出读写选择信号,然后进入address状态,输出地址到SJA1000,判断读写选择
信号后,进入读状态或者写状态。在读写子状态只需按照时序图输出ale、cs、wr、rd的值即可,标志信号w_ok表示一次读/写
完成。
在SJA1000的读写过程中,对各个信号的持续时间有着严格的要求。以读操作为例,RD信号的有效持续时间必须最大为50
评论0