基于PLB总线的SJA1000接口IP核及其控制方法
技术领域
本发明属于工业总线技术领域,尤其是一种基于PLB总线的SJA1000接口IP核及其控制方法。
背景技术
SJA1000是独立的CAN总线控制器,用于挂接CAN总线下的任何节点设备。SJA1000功能模块包括接口管理模块、发送数据缓冲器、接收数据缓冲器,验收滤波器、位流处理器等。SJA1000的接口管理模块用于解释来自外部主控制器的命令,向外部主控制器提供中断信息和状态信息,这就需要在外部主控制器和SJA1000之间建立一个接口用以实现主控制器和SJA1000独立的CAN总线控制器之间的数据交换,而采用什么样的接口方式取决于采用什么样的外部控制器。SJA1000的外部主控制器虽然可以使用ARM、单片机实现与独立的CAN控制器的通信联络功能,但是,由于基于FPGA的VHDL语言设计的IP核能够提供灵活性和性能更好的控制器,FPGA/SOPC技术将是实现嵌入式系统的发展趋势,因此,基于PLB总线MicroBlaze软核的FPGA_片上系统设计将作为首选。
现有技术中,实现PLB总线和CAN设备相互通讯的一般方法是:使用PLB+CAN的IP核组成一个完整的CAN节点。上述IP核是LogiCOREIPXPSControllerAreaNetwork(CAN)IP核,是美国XILINX公司专为CAN总线设备提供的一个通用接口IP核,其与XILINX公司的SJA1000独立CAN控制器在时序上相同,可以挂接任何CAN节点设备,并且可以通过PLB总线的Microblaze软核向节点设备发送命令和接受节点数据。但是这种IP核必须授权和付费后才能使用,并且要求按照设备的数量付费,一个设备交一份钱,如果是一个几百个车位的智能停车场按照每个车位上的CAN设备进行付费那将是一笔昂贵的费用;其次,就LogiCOREIPXPSControllerAreaNetwork(CAN)IP核本身的实现方法而言,该IP核将SJA1000独立CAN控制器的功能同时也设计在该IP核中,如SJA1000的验收滤波器、位流处理器等功能,体现在LogiCOREIPXPSControllerAreaNetwork(CAN)IP核中为传输层的所有功能,因此,该IP核实现方法非常复杂。
发明内容
本发明的目的在于克服现有技术的不足,提供一种设计合理、性价比高、实现方法简单的基于PLB总线的SJA1000接口IP核及其控制方法。
本发明解决其技术问题是采取以下技术方案实现的:
一种基于PLB总线的SJA1000接口IP核,包括PLB接口模块、用户逻辑模块和中断控制模块,所述的PLB接口模块通过地址/数据信号线和控制信号线与PLB总线相连接,该PLB接口模块通过IPIC接口与用户逻辑模块及中断控制模块相连接;所述的用户逻辑模块和中断控制模块之间通过中断控制信号线Intr2Bus_DevIntr相连接实现中断控制功能,用户逻辑模块还通过地址/数据信号线和控制信号线与SJA1000独立CAN控制器相连接;中断控制模块通过Intr2Bus_DevIntr信号连接CPU。
而且,所述的PLB接口模块、用户逻辑模块、中断控制模块内置于FPGA内。
而且,所述的CPU种类包括MicroBlaze软核CPU,并内置于FPGA内。
而且,所述的用户逻辑模块由读写状态机和地址数据选择模块连接构成,读写状态机通过IPIC控制信号(IPICControlSignals)同PLC接口模块之间进行双向数据传送;所述的地址/数据选择模块通过地址线(AddressBus)、数据线(DataBus)同PLB接口模块之间进行双向数据传送。
而且,所述的PLB接口模块为PLB总线自带的接口模块。
而且,所述的用户逻辑模块包括如下输入信号:来自PLB接口模块的时钟信号(Bus_2IP_Clk)、复位信号(Bus2IP_Reset)、地址信号(Bus2IP_Addr[4:0])、数据信号(Bus2IP_Data[24:31])以及来自SJA1000独立CAN控制器的中断信号(INT)、数据信号(DATA[7:0]);所述的用户逻辑模块包括如下输出信号:发送给PLB接口模块的中断信号(IP2Bus_IntrEvent)、应答信号(IP2Bus_Ack)、数据信号(Bus2IP_Data[24:31]),发送给SJA1000独立CAN控制器的地址/数据信号(DATA[7:0])、地址使能信号(ALE)、片选信号(CS)、读写信号(RD/WR)、复位信号(RST)以及向中断控制模块发送的中断事件信号(IntrEvent)。
一种基于PLB总线的SJA1000接口IP核的控制方法,包括以下步骤:
步骤1、用户状态机判断当前的读写状态,如果是写状态,则进入步骤2,如果是读状态,则进入步骤8;
步骤2、输出地址使能信号、地址信号;
步骤3、地址信号保持,禁止地址使能信号;
步骤4、输出片选信号、写信号、数据信号;
步骤5、数据信号保持、禁止写信号、片选信号;向PLB发出写应答信号;
步骤6、清除写应答信号;
步骤7、切换状态为空闲状态;
步骤8、输出地址使能信号、地址信号;
步骤9、地址信号保持、禁止地址使能信号;
步骤10、输出片选信号、读信号;
步骤11、等待2个时钟周期;
步骤12、从地址线读数据;向PLB发出读应答信号;
步骤13、消除读应答信号;
步骤14、切换状态为空闲态。
而且,所述的读写状态来源于PLB总线的CPU操作。
本发明的优点和积极效果是:
本发明利用已有的SJA1000控制器提供的服务功能,将SJA1000功能从IP核中分离出去,专注于实现对SJA1000的数据接口功能,IP核核心模块(用户逻辑模块)通过IPIC接口实现与PLB接口模块的数据传输功能,通过读写状态机实现对SJA1000独立CAN控制器数据的读写功能,通过提供IntrEvent中断触发信号触发中断控制模块实现PLB和CAN设备之间的双向中断控制功能;本发明采用PLB+SJA1000接口IP核+SAJ1000的方法实现了IP核的国产化和本地化,简化了IP核的开发,有效降低了产品的开发成本,增强了市场竞争力。
附图说明
图1为本发明的电路方框图;
图2为用户逻辑模块的结构示意图;
图3为本发明内部模块之间以及与SJA1000之间的信号连接示意图;
图4为本发明的应用系统连接示意图;
图5为读写状态机处理流程示意图;
图6为读写状态机的写时序图;
图7为读写状态机的读时序图。
具体实施方式
以下结合附图对本发明实施例做进一步详述:
一种基于PLB总线的SJA1000接口IP核,如图1所示,包括PLB接口模块、用户逻辑模块和中断控制模块,所述的PLB接口模块通过地址/数据信号线和控制信号线与PLB总线相连接,该PLB接口模块通过IPIC接口(IPICInterface)与用户逻辑模块及中断控制模块相连接,该IPIC接口用于提供用户逻辑模块和PLB接口模块之间以及PLB接口模块和中断控制模块之间的内部逻辑交换;所述的用户逻辑模块和中断控制模块之间通过中断控制信号线(IntrEvent)相连接,该中断控制模块用于实现对于外部和内部的中断控制,并清零中断控制位,中断控制模块通过Intr2Bus_DevIntr信号线与CPU相连接,所述的CPU种类包括MicroBlaze软核CPU,并内置于FPGA内。用户逻辑模块还通过地址/数据信号线和控制信号线与SJA1000独立CAN控制器相连接。PLB接口模块、用户逻辑模块、中断控制模块内置于FPGA内。
在本实施例中,PLB接口模块是PLB总线自带的接口模块,该PLB接口模块提供了用户逻辑模块和PLB之间的一个接口,PLB接口模块确保当对PLB接口进行操作时的基本功能,并完成PLB和IPIC接口之间必要的协议和时序沟通。
用户逻辑模块作为SJA1000接口IP核的核心功能模块,如图2所示,由读写状态机和地址数据选择模块连接构成。该读写状态机通过IPIC接口(IPICControlSignals)与PLB接口模块进行双向数据传送,该读写状态机通过IntrEvent信号线与中断控制模块相连接实现中断控制功能;该地址/数据选择模块通过地址线(AddressBus)、数据线(DataBus)与PLB接口模块进行双向数据传送。
如图3所示,用户逻辑模块包括与PLB接口模块、中断控制模块以及SJA1000独立CAN控制器之间的输入输出信号,其中用户逻辑模块的输入信号包括:来自PLB接口模块的时钟信号(Bus_2IP_Clk)、复位信号(Bus2IP_Reset)、地址信号(Bus2IP_Addr[4:0])、数据信号(Bus2IP_Data[24:31]),来自SJA1000独立CAN控制器的中断信号(INT)、数据信号(DATA[7:0]);用户逻辑模块的输出信号:向上发送给PLB接口模块的中断信号(IP2Bus_IntrEvent)、应答信号(IP2Bus_Ack)、数据信号(Bus2IP_Data[24:31]);向下发送给SJA1000独立CAN控制器的地址/数据信号(DATA[7:0])、地址使能信号(ALE)、片选信号(CS)、读写信号(RD/WR)、复位信号(RST);向中断控制模块发送的中断事件信号(IntrEvent)。
如图4所示,本发明的SJA1000接口IP核内置于FPGA内,在该FPGA上还包括CPU、SPI接口IP核、SSI接口IP核、GPIO模块和ISA接口模块。CPU通过SJA1000接口IP核以及GPIO接口与AGV接口板内的SJA1000独立CAN控制器相连、通过SPI接口同AGV接口板内的陀螺仪和加速度计相连、通过SSI接口同AGV接口板内的编码器相连;通过ISA接口模块与PC104相连接;该SJA1000独立CAN控制器可以连接任何CAN设备,例如电机1至电机8,从而构成一个完整的AGV控制系统。
一种基于PLB总线的SJA1000接口IP核的控制方法,用户逻辑模块中的用户状态机实现,如图5所示,具体包括以下步骤:
步骤1、用户状态机判断当前的读写状态,如果是写状态,则进入步骤2,如果是读状态,则进入步骤8;
在本步骤中,用户状态机的读写状态来源于PLB总线的CPU操作。
步骤2、输出地址使能信号、地址信号;
步骤3、地址信号保持,禁止地址使能信号;
步骤4、输出片选信号、写信号、数据信号;
步骤5、数据信号保持、禁止写信号、片选信号;向PLB发出写应答信号;
步骤6、清除写应答信号;
步骤7、切换状态为空闲状态;
步骤8、输出地址使能信号、地址信号;
步骤9、地址信号保持、禁止地址使能信号;
步骤10、输出片选信号、读信号;
步骤11、等待2个时钟周期;
步骤12、从地址线读数据;向PLB发出读应答信号;
步骤13、消除读应答信号;
步骤14、切换状态为空闲态。
下面结合读写时序图分别对读写状态机的读控制过程和写控制过程分别进行说明。读写状态机的写控制过程,如图6所示,包括以下过程:
1、读写状态机通过控制信号(IPICControlSignals)从PLB接口模块获得当前状态为写状态;
2、PLB接口模块向读写状态机发送时钟信号(Bus2IP_Clk);
3、1个时钟周期以后,用户逻辑模块的地址数据选择模块打开地址通路(AddressBus)从PLB接口模块获得了地址数据(Bus2IP_Addr[4:0])给读写状态机,读写状态机获得地址数据后,向SJA1000输出地址使能信号(ALE)和地址信号(AD),又1个时钟周期以后,读写状态机向SJA1000输出禁止地址使能信号(ALE),并且保持当前的地址信号(AD);又1个时钟周期以后,用户逻辑模块的地址数据选择模块打开数据通路(DataBus),从PLB接口模块获得8位数据(Bus2IP_Data[24:31])给读写状态机,读写状态机收到数据后,向SJA1000输出数据信号(DATA[7:0])、写信号(低电平有效)、片选信号,又1个时钟周期以后,读写状态机保持当前的数据信号,并且禁止写信号(高电平无效)、片选信号(高电平无效),同时读写状态机通过应答信号线(IP2Bus_Ack)向PLB接口模块发送写应答信号(WR_ACK),又1个时钟周期以后,清除写应答信号,读写状态机返回空闲状态。
读写状态机的读控制过程,如图7所示,包括以下过程:
1、读写状态机通过控制信号(IPICControlSignals)从PLB接口模块获得当前状态为读状态;
2、PLB总线向读写状态机发送时钟信号(Bus2IP_Clk);
3、1个时钟周期以后,用户逻辑模块的地址数据选择模块打开地址通路(AddressBus)从PLB接口模块获得了地址数据(Bus2IP_Addr[4:0])给读写状态机,读写状态机获得地址数据后,输出地址使能信号(ALE)和地址信号(AD),又1个时钟周期以后,读写状态机禁止地址使能信号(ALE),并且保持当前的地址信号(AD);又1个时钟周期以后,读写状态机禁止地址信号(AD),并且输出读信号(低电平有效)、片选信号(低电平有效),2.5个时钟周期以后,读写状态机通过数据线(DATA[7:0])从SJA1000获得数据,输出数据信号;0.5个时钟周期以后,读写状态机保持当前的数据信号,并且禁止信号(高电平无效)以及片选信号(高电平无效),同时,读写状态机通过应答信号线(IP2Bus_Ack)向PLB接口模块发送读应答信号(RD_ACK),又1个时钟周期以后,清除读应答信号,并且数据保持,0.5个时钟周期以后,读写状态机切换为空闲状态。
需要强调的是,本发明所述的实施例是说明性的,而不是限定性的,因此本发明并不限于具体实施方式中所述的实施例,凡是由本领域技术人员根据本发明的技术方案得出的其他实施方式,同样属于本发明保护的范围。