论文部分内容阅读
摘 要:近年来,嵌入式系统的软、硬件开发得到了快速的发展,已经广泛应用于工业、国防、航天、医疗、家用消费类电子等行业。随着应用的复杂性和质量要求的逐渐提高,嵌入式计算机的开发已向小型化、高集成度、低功耗、软硬件相结合、简洁灵活的设计方向发展,这样就给了诸如CPLD和FPGA这样的可编程逻辑器件极大的用武之地,PLD的设计灵活性和资源丰富性不仅使得整个嵌入式系统物理空间精简紧凑,而且提高了整个系统的可靠性,实现了系统的软硬件一体化。文章结合一个基于PowerPC7448的处理器模块,简单介绍CPLD在嵌入式系统中的设计和应用。
关键词:复杂可编程逻辑器件 嵌入式系统
近年来,嵌入式系统的软、硬件开发得到了快速的发展,已经广泛应用于工业、国防、航天、医疗、家用消费类电子等行业。随着应用的复杂性和质量要求的逐渐提高,嵌入式计算机的开发已向小型化、高集成度、低功耗、软硬件相结合、简洁灵活的设计方向发展,这样就给了诸如CPLD和FPGA这样的可编程逻辑器件极大的用武之地。
一、处理器模块硬件结构
处理器模块的硬件组成如图1所示,其架构的核心是MV64460系统控制器。其中系统控制器通过MPX总线与两个PowerPC7448处理器相连;通过DDR内存接口,连接DDR SDRAM;通过设备(DEVICE)总线,连接FLASH芯片;系统控制器提供两个RS232串口和两个10/100/1000M以太网网口;另外系统控制器还提供两条PCI总线。其中一条PCI总线上挂载ATI公司的MOBILITY9000 PCI图形显示控制器,另一条PCI总线上挂载两路设备:一路挂载PCI-USB控制器,另一路通过PCI6254 PCI-to-PCI桥片扩展出CPCI总线。而可编程逻辑器件CPLD则穿插其中,为系统提供逻辑控制并优化软硬件资源的配置。
二、可编程逻辑器件CPLD在模块中的应用
了解了模块硬件的基本构成后,下文对CPLD在模块的硬件设计中所起的作用展开论述。模块中的CPLD选用了ALTERA公司的EPM7256A。EPM7256A是MAX7000A系列中的一员,是基于EEPROM的高性能3.3V可编程逻辑器件,支持IEEE 1149.1 标准JTAG接口,支持3.3V ISP(In-system programmability)功能,pin-pin的最小延时可达4.5ns。对于封装是256-PIN的BGA芯片,它的资源情况如表1所示。
表1 CPLD参数
可用门数 宏单元数 逻辑阵列块数 最大可用I/O引脚数
5000 256 16 164
CPLD的使用是为了使系统配置具有很好的灵活性,方便更改系统的设置,如系统时钟频率、复位信号等,对这些信号的配置都是通过CPLD来实现,减少了相应的门电路。我们在EPM7256A中集成了复位逻辑、中断控制、设备总线的地址锁存、设备总线的读写、系统配置、DMA请求等功能。下文将重点介绍其中几个功能的实现思路。
(一)复位逻辑
由于模块的总复位信号不仅可以在上电时产生,还有实时时钟(RTCresetEn)、看门狗信号(WDE)、CPU的JTAG接口、电源供电故障(PGOOD)等都可以产生复位信号,所以为了便于灵活控制,为软件机制提供必要足够的硬件复位支持,我们把相关的复位信号都通过CPLD来控制。为了更好地实现各种复位信号之间的逻辑控制关系,把所有可以产生复位的信号和所有芯片的复位输入信号都接入CPLD,以方便控制,且可减少相应的门电路芯片。
在CPLD中实现的复位逻辑如图2所示,只要当几档电源的PGOOD信号、看门狗信号、手动复位信号、RTC复位信号的状态有一个为0,即产生一个全局复位信号,处理器模块再使用统一的全局复位信号来复位模块的各个部分,包括MV64460系统控制器、两个CPU、FLASH、两条PCI总线、两个以太网MAC控制器等等。其中MAX708是上电复位芯片,它在系统刚上电时自动使它的复位输出有效。MAX708TESA具有防抖动功能,能在输入为高后使输出继续保持200毫秒,保证系统能完全复位。
(二)中断控制
当模块复位时所有PCI中断信号(除CPCI总线的INTA外)都置为无效。INTA置为高阻态。
原因是当此处理器模块被作为CPCI总线上的从设备时,若此模块复位,不会将此中断误报给CPCI总线上的主设备。
工作状态中,当此模块作为CPCI总线上的主设备时(即SYSEN = '0'),PCI6254工作于透明桥状态,PCI总线上各个设备的中断通过和CPCI总线上的中断“相与”后,将结果输入MV64460系统控制器的PCI接口从而告知CPU。由于PCI6254从端的片选信号S_IDSEL选择的是CPCI数据/地址线AD31,根据PCI中断轮循的规则,CPCI总线上中断的顺序依次是INTD,INTA,INTB,INTC。此段代码如下:
IF SYSEN = '0' THEN
P1_INT_A <= P1_INTA AND INTD;
P1_INT_B <= P1_INTB AND INTA;
P1_INT_C <= P1_INTC AND INTB;
P1_INT_D <= P1_INTD AND INTC;
INTA <= 'Z';
工作状态中,当此模块作为CPCI总线上的从设备时(即SYSEN不为 '0'),PCI6254工作在非透明桥状态,桥片的主、从两端可视为互相隔离的两部分,主端的桥中端信号INTBRGP由于主端的片选信号P_IDSEL选择了PCI数据/地址线AD21,所以根据中断轮循应和P1_INTB“相与”后输入MV64460,从端的桥中断信号则将输出给CPCI总线上的主设备。此段代码如下:
P1_INT_A <= P1_INTA;
P1_INT_B <= P1_INTB AND INTBRGP;
P1_INT_C <= P1_INTC;
P1_INT_D <= P1_INTD;
IF INTBRGS = '1' THEN
INTA <= 'Z';
ELSE
INTA <= INTBRGS;
(三)设备总线的读写状态
根据设备总线上的读写状态,在CPLD中建立设备总线上读写状态的状态机,定义了“读写空闲”、“读操作”、“写操作”三种状态,其示意图如图3所示。
读写空闲状态代码如下:
CASE STATE IS
WHEN ReadWriteIdle =>
MVRD <= '1';
MVWRT <= '1';
IF CSTiming = '0' AND LDevRW = '1' THEN
STATE <= ReadTransaction;
ELSIF CSTiming = '0' AND LDevRW = '0' THEN
STATE <= WriteTransaction;
ELSE
STATE <= ReadWriteIdle;
END IF;
读写空闲状态时,MVRD和MVWRT信号均为'1',当满足CSTiming = '0' 及 LDevRW = '1'条件时,转换到读操作状态。当满足CSTiming = '0' 及 LDevRW = '0'条件时,转换到写操作状态。
读操作状态代码如下:
WHEN ReadTransaction =>
MVRD <= '0';
MVWRT <= '1';
IF CSTiming = '1' THEN
STATE <= ReadWriteIdle;
ELSE
STATE <= ReadTransaction;
END IF;
读操作状态只能和读写空闲状态相互转换。
写操作状态代码如下:
WHEN WriteTransaction =>
MVRD <= '1';
MVWRT <= WR;
IF CSTiming = '1' THEN
STATE <= ReadWriteIdle;
ELSE
STATE <= WriteTransaction;
END IF;
同样,写操作状态只能和读写空闲状态相互转换。
三、总结
根据上述硬件原理,我们将这些功能集成到一块基于PowerPC7448的处理器模块上,设计过程中,我们使用VHDL语言撰写了CPLD程序代码,并在软件quartus II中经编译生成pof文件,并通过该软件,用下载器烧写入模块上的CPLD芯片中,并验证了程序实现的复位逻辑、中断控制、设备总线的地址锁存、设备总线的读写、系统配置、DMA请求等功能。模块的硬件结构搭建了该模块的骨架,而CPLD的运用就像画龙点睛之笔,让模块的硬件设计变得轻便灵活。
(作者单位:张晓晨,上海交通大学微电子学院;秦娟,华东计算技术研究所;邹志强,华东计算技术研究所)
【参考文献】
1、Altera MAX7000A Programmable Logic Device Data Sheet[Z].
2、段桂平.基于PowerPC的抗恶劣环境服务器设计与实现[Z].华东计算技术研究所.
3、张凯,林伟.VHDL实例剖析[M].国防工业出版社,2004.
4、秦娟,王佳.PowerPC 755在嵌入式系统中的设计和实现[EB/OL].http://lunwen88.blog.bokee.net/bloggermodule/blog_viewblog.do?id=2234080,2008-10-27.
关键词:复杂可编程逻辑器件 嵌入式系统
近年来,嵌入式系统的软、硬件开发得到了快速的发展,已经广泛应用于工业、国防、航天、医疗、家用消费类电子等行业。随着应用的复杂性和质量要求的逐渐提高,嵌入式计算机的开发已向小型化、高集成度、低功耗、软硬件相结合、简洁灵活的设计方向发展,这样就给了诸如CPLD和FPGA这样的可编程逻辑器件极大的用武之地。
一、处理器模块硬件结构
处理器模块的硬件组成如图1所示,其架构的核心是MV64460系统控制器。其中系统控制器通过MPX总线与两个PowerPC7448处理器相连;通过DDR内存接口,连接DDR SDRAM;通过设备(DEVICE)总线,连接FLASH芯片;系统控制器提供两个RS232串口和两个10/100/1000M以太网网口;另外系统控制器还提供两条PCI总线。其中一条PCI总线上挂载ATI公司的MOBILITY9000 PCI图形显示控制器,另一条PCI总线上挂载两路设备:一路挂载PCI-USB控制器,另一路通过PCI6254 PCI-to-PCI桥片扩展出CPCI总线。而可编程逻辑器件CPLD则穿插其中,为系统提供逻辑控制并优化软硬件资源的配置。
二、可编程逻辑器件CPLD在模块中的应用
了解了模块硬件的基本构成后,下文对CPLD在模块的硬件设计中所起的作用展开论述。模块中的CPLD选用了ALTERA公司的EPM7256A。EPM7256A是MAX7000A系列中的一员,是基于EEPROM的高性能3.3V可编程逻辑器件,支持IEEE 1149.1 标准JTAG接口,支持3.3V ISP(In-system programmability)功能,pin-pin的最小延时可达4.5ns。对于封装是256-PIN的BGA芯片,它的资源情况如表1所示。
表1 CPLD参数
可用门数 宏单元数 逻辑阵列块数 最大可用I/O引脚数
5000 256 16 164
CPLD的使用是为了使系统配置具有很好的灵活性,方便更改系统的设置,如系统时钟频率、复位信号等,对这些信号的配置都是通过CPLD来实现,减少了相应的门电路。我们在EPM7256A中集成了复位逻辑、中断控制、设备总线的地址锁存、设备总线的读写、系统配置、DMA请求等功能。下文将重点介绍其中几个功能的实现思路。
(一)复位逻辑
由于模块的总复位信号不仅可以在上电时产生,还有实时时钟(RTCresetEn)、看门狗信号(WDE)、CPU的JTAG接口、电源供电故障(PGOOD)等都可以产生复位信号,所以为了便于灵活控制,为软件机制提供必要足够的硬件复位支持,我们把相关的复位信号都通过CPLD来控制。为了更好地实现各种复位信号之间的逻辑控制关系,把所有可以产生复位的信号和所有芯片的复位输入信号都接入CPLD,以方便控制,且可减少相应的门电路芯片。
在CPLD中实现的复位逻辑如图2所示,只要当几档电源的PGOOD信号、看门狗信号、手动复位信号、RTC复位信号的状态有一个为0,即产生一个全局复位信号,处理器模块再使用统一的全局复位信号来复位模块的各个部分,包括MV64460系统控制器、两个CPU、FLASH、两条PCI总线、两个以太网MAC控制器等等。其中MAX708是上电复位芯片,它在系统刚上电时自动使它的复位输出有效。MAX708TESA具有防抖动功能,能在输入为高后使输出继续保持200毫秒,保证系统能完全复位。
(二)中断控制
当模块复位时所有PCI中断信号(除CPCI总线的INTA外)都置为无效。INTA置为高阻态。
原因是当此处理器模块被作为CPCI总线上的从设备时,若此模块复位,不会将此中断误报给CPCI总线上的主设备。
工作状态中,当此模块作为CPCI总线上的主设备时(即SYSEN = '0'),PCI6254工作于透明桥状态,PCI总线上各个设备的中断通过和CPCI总线上的中断“相与”后,将结果输入MV64460系统控制器的PCI接口从而告知CPU。由于PCI6254从端的片选信号S_IDSEL选择的是CPCI数据/地址线AD31,根据PCI中断轮循的规则,CPCI总线上中断的顺序依次是INTD,INTA,INTB,INTC。此段代码如下:
IF SYSEN = '0' THEN
P1_INT_A <= P1_INTA AND INTD;
P1_INT_B <= P1_INTB AND INTA;
P1_INT_C <= P1_INTC AND INTB;
P1_INT_D <= P1_INTD AND INTC;
INTA <= 'Z';
工作状态中,当此模块作为CPCI总线上的从设备时(即SYSEN不为 '0'),PCI6254工作在非透明桥状态,桥片的主、从两端可视为互相隔离的两部分,主端的桥中端信号INTBRGP由于主端的片选信号P_IDSEL选择了PCI数据/地址线AD21,所以根据中断轮循应和P1_INTB“相与”后输入MV64460,从端的桥中断信号则将输出给CPCI总线上的主设备。此段代码如下:
P1_INT_A <= P1_INTA;
P1_INT_B <= P1_INTB AND INTBRGP;
P1_INT_C <= P1_INTC;
P1_INT_D <= P1_INTD;
IF INTBRGS = '1' THEN
INTA <= 'Z';
ELSE
INTA <= INTBRGS;
(三)设备总线的读写状态
根据设备总线上的读写状态,在CPLD中建立设备总线上读写状态的状态机,定义了“读写空闲”、“读操作”、“写操作”三种状态,其示意图如图3所示。
读写空闲状态代码如下:
CASE STATE IS
WHEN ReadWriteIdle =>
MVRD <= '1';
MVWRT <= '1';
IF CSTiming = '0' AND LDevRW = '1' THEN
STATE <= ReadTransaction;
ELSIF CSTiming = '0' AND LDevRW = '0' THEN
STATE <= WriteTransaction;
ELSE
STATE <= ReadWriteIdle;
END IF;
读写空闲状态时,MVRD和MVWRT信号均为'1',当满足CSTiming = '0' 及 LDevRW = '1'条件时,转换到读操作状态。当满足CSTiming = '0' 及 LDevRW = '0'条件时,转换到写操作状态。
读操作状态代码如下:
WHEN ReadTransaction =>
MVRD <= '0';
MVWRT <= '1';
IF CSTiming = '1' THEN
STATE <= ReadWriteIdle;
ELSE
STATE <= ReadTransaction;
END IF;
读操作状态只能和读写空闲状态相互转换。
写操作状态代码如下:
WHEN WriteTransaction =>
MVRD <= '1';
MVWRT <= WR;
IF CSTiming = '1' THEN
STATE <= ReadWriteIdle;
ELSE
STATE <= WriteTransaction;
END IF;
同样,写操作状态只能和读写空闲状态相互转换。
三、总结
根据上述硬件原理,我们将这些功能集成到一块基于PowerPC7448的处理器模块上,设计过程中,我们使用VHDL语言撰写了CPLD程序代码,并在软件quartus II中经编译生成pof文件,并通过该软件,用下载器烧写入模块上的CPLD芯片中,并验证了程序实现的复位逻辑、中断控制、设备总线的地址锁存、设备总线的读写、系统配置、DMA请求等功能。模块的硬件结构搭建了该模块的骨架,而CPLD的运用就像画龙点睛之笔,让模块的硬件设计变得轻便灵活。
(作者单位:张晓晨,上海交通大学微电子学院;秦娟,华东计算技术研究所;邹志强,华东计算技术研究所)
【参考文献】
1、Altera MAX7000A Programmable Logic Device Data Sheet[Z].
2、段桂平.基于PowerPC的抗恶劣环境服务器设计与实现[Z].华东计算技术研究所.
3、张凯,林伟.VHDL实例剖析[M].国防工业出版社,2004.
4、秦娟,王佳.PowerPC 755在嵌入式系统中的设计和实现[EB/OL].http://lunwen88.blog.bokee.net/bloggermodule/blog_viewblog.do?id=2234080,2008-10-27.