背景技术
半导体工艺的进步和集成电路设计技术的发展,使得在单一芯片上集成整个系统的功能部件成为可能,系统芯片(System-on-Chip,以下简称为SoC)设计具有低成本、高性能、低功耗等诸多优势,已经成为当今集成电路的主流。上市时间(Time-to-Market)的要求越来越苛刻,为缩短设计和验证周期,基于IP(Intellectual Property)复用的设计方法已经在系统芯片设计中得到广泛应用。片上总线(On Chip Bus)作为系统芯片集成系统的互联结构,解决了各个IP功能模块间的相互通信问题,包括数据格式、时序、协议等方面。SoC片上总线技术包括两类,一是国际上公开通用的总线结构,国际上比较成熟的总线结构有ARM公司的AMBA(Advanced Microcontroller Bus Architecture)总线、IBM公司的CoreConnect总线等二是根据特定领域自主开发的片上总线,必须通过总线的互联转换,从而实现与通用的总线结构的通信。
ARM公司在嵌入式微处理器领域内取得的巨大成功,使得AMBA总线结构成为嵌入式系统芯片领域最为广泛采用的总线架构,已成为业界的事实标准。集成到嵌入式系统芯片上的IP模块具有AMBA总线接口,丰富的IP库是基于AMBA总线结构的嵌入式系统芯片的优势。AMBA总线规定了三种总线标准:AHB(Advanced High-performance Bus)、ASB(Advanced System Bus)和APB(Advanced Peripheral Bus)。在实际应用中,一般采用AHB+APB或ASB+APB,本发明涉及的系统芯片以AHB+APB为例。高速系统总线AHB负责处理器与存储控制器、以及高性能外围设备的相连,低速外围总线APB提供低带宽的接口,连接低性能外围设备。AHB总线和APB总线之间通过AHB2APB桥接器进行连接和通信。
在目前嵌入式系统芯片设计中,比较常用的是嵌入式RISC (ReducedInstruction Set Computer)处理器,包括ARM处理器,MIPS处理器,PowerPC处理器等。然而,越来越多的高端嵌入式应用,例如网络终端、家庭消费电子产品、POS终端机、手持移动设备等,对系统性能的要求越来越高,同时也提出了桌面系统的用户体验需求,这就需要在嵌入式领域构建类似PC结构的平台。以x86处理器为典型代表的嵌入式CISC(Complex Instruction Set Computer)处理器可以提供比RISC处理器更高的计算能力,而且用户熟悉的MicrosoftWindows操作系统和丰富的x86兼容应用软件资源更是其他处理器不可比拟的优势,因此基于x86处理器的系统芯片必将扩展到嵌入式系统领域,例如Intel公司的Atom嵌入式处理器,Transmeta公司的Crusoe和Effceon嵌入式处理器威盛公司的C3和Eden等嵌入式处理器。AMD Geode GX2处理器是一款低功率、高性能的嵌入式x86处理器,基于GeodeLink片上通信结构的AMD Geode GX2处理器能够以较低的时钟频率提供极具竞争力的系统性能。
为了使嵌入式x86处理器得到更广泛的应用,充分利用x86兼容处理器支持运行丰富的x86应用程序的优势,充分利用基于AMBA和CoreConnect等通用片上总线的较为成熟的系统芯片平台,以及面向这些系统芯片平台的丰富IP资源,本发明以AMD公司的AMD Geode GX2处理器和ARM公司的AMBA总线架构为实施例,提出了将嵌入式x86处理器应用于基于通用片上总线的系统芯片的方法,具体包括AMD Geode GX2处理器和AMBA AHB总线的接口协议转换、四个传统设备以及传统功能部件等装置。
申请号200510095232.0的专利申请《一种C*Core微处理器应用于AMBA总线的设计方法》提出了一种C*Core微处理器应用于AMBA总线的设计方法,其目的是要将一种具有CLB总线接口的C*Core微处理器应用于具有AMBA总线架构的系统中,使C*Core微处理器得到更广泛的应用。该发明专利具体由两个桥接器构成,主要负责CLB与AMBA总线协议之间的转换,其中第一桥接器为CLB总线到AMBA的AHB总线的桥接器,将C*Core微处理器挂接到AMBA的AHB总线系统中,第二桥接器为CLB总线到AMBA的APB总线的桥接器,将C*Core微处理器挂接到AMBA的APB总线系统中。设计人员可根据芯片系统的性能要求来灵活的选择第一桥接器和第二桥接器,将C*Core微处理器方便地挂接到不同的总线系统中,实现芯片不同的性能要求。但是,该发明专利中的C*Core微处理器为RISC处理器,芯片能够提供的系统性能是有限的,而且仅仅设计了CLB和AMBA总线协议转换的桥接器,用于解决不同总线协议的功能部件的挂接问题,并没有解决与Microsoft Windows兼容性相关的很多传统问题,也不支持MicrosoftWindows及其x86兼容的应用软件。
申请号200510095447.2的专利申请《一种基于AMBA总线的8051系列微处理器应用系统》将低速的8051系列微处理器应用于高速的32位AMBA总线结构中构成一个应用系统。该发明专利由AHB总线到APB总线之间的第一桥接器、8051系列微处理器的总线到APB总线之间的第二桥接器、第一桥接器和第二桥接器之间的APB总线二选一访问的多路选择器,以及AHB总线设备的APB总线接口等组成,由APB总线负责AHB总线模块的配置和控制,和AHB总线中的高速数据传输相分离,使芯片支持高速的大流量数据传输,达到较高的性价比。在专利《8位嵌入式CPU的AMBATM外围接口电路》中,以8051系列微处理器为实施例,介绍了8位嵌入式CPU应用到AMBA AHB时所必须的外围接口电路设计,解决了8位CPU和32位AMBA总线在数据宽度、时序和总线协议等方面不一致的矛盾。以上两个专利均涉及到低性能的8位8051系列处理器在32位高速AMBA总线上的应用,8051系统微处理器主要用于控制和配置总线设备,应用于工业控制等低端嵌入式领域,而本专利面向网络终端、手持移动设备等高端嵌入式领域,介绍了高性能嵌入式x86处理器在高速的通用片上总线上的应用,以AMDGeode GX2处理器和AMBA总线为实施例进行说明;而且本发明解决了MicrosoftWindows兼容性问题,可以像在PC机上一样,运行Microsoft Windows操作系统和x86兼容应用软件,提供了类似桌面系统的用户体验。
专利《Bridge for coupling digital signal processor to on-chip busas master》将DSP处理器作为一个总线主设备集成到片上总线,以AMBA为实施例,提出了DSP处理器和AMBA总线接口协议转换,以及不同时钟频率处理的功能,它针对面向数字信号处理的特定应用处理器,而本发明针对通用的嵌入式x86处理器,不仅包括处理器作为主设备访问片上总线以及不同时钟频率处理的功能,而且提供了支持Microsoft Windows兼容的系统解决方案。
发明内容
本发明提出了一种将通用的嵌入式x86处理器应用于通用的片上总线的方法和系统芯片,其目的是充分利用嵌入式x86处理器的丰富软件资源和较高性能优势,尽可能复用日趋成熟的基于通用片上总线的系统芯片平台,以及丰富的基于这些平台的IP资源,在高端嵌入式领域提供类似桌面的用户体验,使嵌入式x86处理器得到更广泛的应用。
本发明的一种嵌入式x86处理器应用于通用片上总线的系统芯片,采用了AMBA总线结构,该系统芯片包括:
传统功能部件,与该嵌入式x86处理器连接,用于接收和过滤来自该嵌入式x86处理器的交易,识别并处理特殊周期和传统信号;
接口转换装置,接收该嵌入式x86处理器的信号并与AMBA AHB总线连接,该接口转换装置用于将嵌入式x86处理器的I/O交易转换成32位或64位AMBAAHB总线交易,以及I/O空间向存储空间的映射;
传统设备,连接于AMBA总线;
其中,通过该传统功能部件和该接口转换装置,使得该嵌入式x86处理器作为总线控制单元应用于基于AMBA总线结构的系统芯片上。
该传统信号包括:INTR信号;该INTR信号为来自可编程中断控制器的中断请求信号,该INTR信号被输入至嵌入式x86处理器,通过I/O读交易,嵌入式x86处理器发出该INTACK特殊周期。
该传统信号包括:A20M#信号,该传统功能部件利用一端口控制嵌入式x86处理器的A20M#信号的有效(1’b0)或无效(1’b1),以实现I/O端口92h的功能。
该I/O转换处理模块接收嵌入式x86处理器发出的I/O交易,根据该I/O交易的I/O端口号确定实现该I/O端口功能的设备号,根据该设备号查找一存储映射I/O表,确定为该设备所分配的存储空间基地址,拼接该存储空间基地址和I/O端口号以形成存储地址,使得嵌入式x86处理器发出的I/O交易转换成存储交易。
该传统设备包括DMA控制器、可编程中断控制器、可编程中断定时器和实时时钟,一该传统设备接收该存储交易,并通过存储映射寄存器实现嵌入式x86处理器的I/O端口功能,存储映射寄存器的偏移地址和该存储交易对应的I/O端口地址相同,该传统设备使用该存储地址的低位进行寄存器的寻址。
该出错处理模块在收到32位AHB总线或64位AHB总线返回的错误响应时,输出中断请求信号发给可编程中断控制器。
该AMBA AHB64主设备接口部件包括总线状态机和仲裁电路,仲裁电路采用轮转算法,在嵌入式x86处理器和设备同时访问位于64位AHB总线上的存储控制器时,轮流对嵌入式x86处理器和设备进行访问授权。
本发明还公开了一种嵌入式x86处理器应用于通用片上总线的方法,采用了AMBA总线结构,该方法包括如下步骤:
在嵌入式x86处理器和AMBA AHB总线之间设置接口转换装置和传统功能部件;
将传统设备连接于AMBA总线;
通过传统功能部件和接口转换装置将嵌入式x86处理器作为总线控制单元应用于AMBA总线上;
其中,该传统功能部件用于接收和过滤来自该嵌入式x86处理器的交易,识别并处理特殊周期和传统信号;
该接口转换装置用于接收该嵌入式x86处理器的信号,并与AMBA AHB总线连接,该接口转换装置用于将嵌入式x86处理器的I/O交易转换成32位或64位AMBA AHB总线交易,以及I/O空间向存储空间的映射。
该接口转换装置在收到32位AHB总线或64位AHB总线返回的错误响应时,输出中断请求信号发给可编程中断控制器。
在嵌入式x86处理器和设备同时访问位于64位AHB总线上的存储控制器时,该接口转换装置轮流对嵌入式x86处理器和设备进行访问授权。
传统功能部件(Glue)接收和过滤来自嵌入式x86处理器的交易,负责识别并处理嵌入式x86处理器所必须的、但基于通用片上总线的系统芯片不支持的传统交易,这些交易都是特殊的I/O请求。传统功能部件(Glue)负责五种特殊周期(Special Cycles)的处理,包括由于各种软硬件原因引起系统关闭时嵌入式x86处理器发出的I/O请求,嵌入式x86处理器因执行Halt停机指令而发出的I/O请求,嵌入式x86处理器接收到中断请求信号后,发出读取中断向量的I/O请求,嵌入式x86处理器执行INVD指令,无效Cache时发出的I/O请求,以及嵌入式x86处理器执行WBINVD指令回写并无效Cache时发出的I/O请求。当嵌入式x86处理器内部的浮点协处理器发生例外时,传统功能部件(Glue)负责接收并处理FERR#信号,并产生相应的IGNNE#信号。除此之外,传统功能部件(Glue)还实现了与A20M#信号相关的功能。该接口转换装置可为一总线桥接器(GAB),或其他实现相似功能的装置。
本发明设计并实现了四个传统设备,包括DMA控制器(Direct Memory AccessController)、可编程中断控制器(Programmable Interrupt Controller)、可编程中断定时器(Programmable Interrupt Timer)和实时时钟(Real TimeClock)。这些传统设备位于通用片上总线上,通过存储映射的寄存器实现了嵌入式x86处理器所必须的I/O端口功能。嵌入式x86处理器可以通过访问I/O端口的方式访问它们,I/O交易转换成片上总线上的存储交易,相应的传统设备接收并处理这些转换后的交易。
位于传统功能部件(Glue)和通用片上总线之间的总线桥接器(GAB),将嵌入式x86处理器访问设备或存储器的交易转换成片上总线交易。总线桥接器(GAB)负责嵌入式x86处理器的总线接口协议和片上总线协议之间的转换,以及嵌入式x86处理器可见的独立编址I/O空间向存储空间的映射。
本发明以AMD Geode GX2处理器和AMBA总线作为实施例,对总线桥接器进行说明。总线桥接器(GAB)包括:处理器接口部件(GeodeLink InterFace:简称Glif)、32位AMBA AHB总线主设备接口(32-bit AMBA AHB Master DeviceInterface:简称ahb32_m)、64位AMBA AHB总线主设备接口(64-bit AMBA AHBMaster Device Interface:简称ahb64_m)和32位AMBA AHB总线从设备接口(32-bit AMBA AHB Slave Device Interface:简称ahb32_s)。
处理器接口部件的状态机是总线桥接器的主要控制逻辑。它将嵌入式x86处理器的总线接口协议转换成总线桥接器内部定义的一组控制接口信号(GABInternal Interface:以下简称为GABInt_if),并实现了I/O转换功能和出错处理功能。嵌入式x86处理器发出的交易类型可以是存储交易,也可以是I/O交易,由于基于AMBA总线的系统芯片没有独立的I/O空间,系统为每个设备分配一段固定的存储空间,I/O转换处理模块将嵌入式x86处理器发出的I/O交易转换为对相应设备的存储空间的存储交易。出错处理模块负责处理32位AHB总线或64位AHB总线上的错误响应,设置总线桥接器内部的中断状态寄存器并向可编程中断控制器发出中断请求。AMBA AHB32主设备接口部件(ahb32_m)用于完成嵌入式x86处理器作为主设备访问位于32位AHB总线上设备的接口处理。嵌入式x86处理器发出的读写数据宽度是64位,AHB总线的数据宽度是32位,AMBA AHB32主设备接口部件(ahb32_m)实现了数据FIFO,以解决数据宽度不一致的问题。AMBA AHB64主设备接口部件(ahb64_m)用于完成嵌入式x86处理器和位于32位AHB总线上设备访问64位AHB总线的接口处理,在本发明实施例中,64位AHB总线上只有存储控制器,AMBA AHB64主设备接口部件(ahb64_m)采用轮转(Round Robin)算法对嵌入式x86处理器和设备同时访问存储器的交易进行仲裁。AMBA AHB32从设备接口部件(ahb32_s)用于完成位于32位AHB总线上设备通过GAB访问位于64位AHB总线上的存储控制器的接口处理,将32位AHB总线接口转换成GAB内部的一组64位控制接口信号。
由于上述技术方案运用,本发明与现有技术相比具有下列优点和效果:
1.本发明采用传统功能部件和接口转换装置的方法,设计了传统功能部件,四个传统设备,包括DMA控制器、可编程中断控制器、可编程中断定时器和实时时钟,以及总线桥接器,提供了一种将通用的嵌入式x86处理器应用于通用片上总线的方法。
2.总线桥接器提供了嵌入式x86处理器到片上总线的协议转换,并通过I/O转换机制,解决了嵌入式x86处理器的具有独立I/O空间,而片上总线没有独立I/O空间的矛盾。
通过传统功能部件和四个传统设备,解决了Microsoft Windows兼容性问题,使得基于嵌入式x86处理器和通用片上总线的系统芯片能够和传统PC机一样,运行Microsoft Windows操作系统和大量的x86兼容应用软件,提供了类似桌面的用户体验。充分利用嵌入式x86处理器的丰富软件资源和较高性能优势,尽可能复用日趋成熟的基于通用片上总线的系统芯片平台,以及丰富的基于这些平台的IP资源,使嵌入式x86处理器得到更广泛的应用。
具体实施方式
下面结合附图和具体实施例对本发明作进一步的详细描述。本发明提出了一种将通用的嵌入式x86处理器应用于通用的片上总线的方法和系统芯片,以充分利用嵌入式x86处理器的丰富软件资源和较高性能优势,尽可能复用日趋成熟的基于通用片上总线的系统芯片平台,以及丰富的基于这些平台的IP资源,在高端嵌入式领域提供类似桌面的用户体验,使嵌入式x86处理器得到更广泛的应用。嵌入式x86处理器例如采用的是AMD Geode GX2处理器。
图1是基于嵌入式x86处理器和AMBA总线的系统芯片100的整体结构示意图。通过传统功能部件(Legacy Glue Logic Module,简称Glue)102和接口转换装置103将嵌入式x86处理器101作为一个总线控制单元应用于基于AMBA总线架构的系统芯片(SoC)。该接口转换装置103可为一总线桥接器(GeodeLink-AHB Bridge,简称GAB)。
在本发明的实施例中,嵌入式x86处理器101是一款面向嵌入式应用领域的低功率、高性能x86处理器。
传统功能部件102与嵌入式x86处理器101连接,并对嵌入式x86处理器交易进行监测,对于嵌入式x86处理器所必须的、并且基于AMBA总线架构的系统芯片不支持的传统相关交易,传统功能部件102负责识别并且处理这些特殊的处理器交易。如图2所示为传统功能部件102的功能示意图。传统功能部件102中主要包括A20M#信号处理模块、浮点例外处理逻辑、特殊周期处理模块。
传统功能部件102(Glue)的A20M#信号处理模块实现了I/O端口92h的功能,根据I/O交易的具体内容将嵌入式x86处理器的输入信号A20M#置为有效(1’b0)或无效(1’b1)。
传统功能部件102(Glue)的浮点例外处理逻辑,用于实现嵌入式x86处理器所必须的外部浮点例外处理逻辑。
当嵌入式x86处理器通过一特殊周期获取中断向量时,由传统功能部件102的特殊周期处理模块向可编程中断控制器(PIC)发出中断响应信号,读取中断向量并返回给嵌入式x86处理器101;当嵌入式x86处理器通过一特殊周期关闭系统时,由传统功能部件102的特殊周期处理模块向系统控制部件105发出系统复位信号。对于其他的嵌入式x86处理器交易,传统功能部件102直接转发给接口转换装置103。接口转换装置103位于传统功能部件102、32位AHB总线以及64位AHB总线之间,主要负责嵌入式x86处理器的总线接口协议到AHB总线协议的转换、以及嵌入式x86处理器可见的I/O空间到存储空间的映射。
存储控制器104是位于64位AHB总线上的从设备,嵌入式x86处理器和其他设备访问存储控制器104的请求经过接口转换装置103的仲裁,由接口转换装置103作为主设备向64位AHB总线发起请求。
位于32位AHB总线上的是高速设备,该高速设备包括网络控制器、硬盘控制器、多媒体设备等,其中还包括传统设备106,该传统设备106包括DMA控制器(DMAC)。
位于32位APB总线上的是低速外围设备,包括音频控制器、串行接口、并行接口等,其中还包括传统设备106,传统设备106包括可编程中断控制器(PIC)、可编程中断定时器(PIT)和实时时钟(RTC)。AHB总线和APB总线之间通过AHB2APB桥接器进行连接和通讯。Host2PCI桥接器负责32位AHB总线和PCI总线之间的桥接和通讯。
其中,传统功能部件102是嵌入式x86处理器应用于基于AMBA总线系统芯片的关键部件,负责处理嵌入式x86处理器的传统信号、特殊周期等。传统信号包括:INTR、A20M#、FERR#和IGNNE#。
INTR信号来自可编程中断控制器(PIC)并作为嵌入式x86处理器的输入信号,为高有效。可编程中断控制器通过将该信号置为有效,向嵌入式x86处理器发出中断请求。
A20M#信号是来自传统功能部件102(Glue)的嵌入式x86处理器的输入信号,为低有效。在传统功能部件102的A20M#信号处理模块中,包括一8位寄存器R[7:0],其对应I/O端口92h的功能,用于实现A20M#信号功能。其中,R[1]与A20M#信号有关,该位作为传统功能部件102的输出信号经过一个反相器取反后连接到嵌入式x86处理器的A20M#输入信号。当R[1]=1’b1时,嵌入式x86处理器的输入信号A20M#为1b’0(有效),表明当前运行程序(多为早期的MS DOS下的应用程序)的地址空间最多为1MB(20位),即地址信号的位20-31无效,所有超过1MB的访存地址均被回卷至0。DOS操作系统下的某些应用程序可访问的最大地址空间为1MB,而其他应用程序则没有这个限制。当R[1]为1’b0时,A20M#为1’b1无效,当前运行程序的地址空间为4GB(32位),当地址超过1MB时,不回卷,正常处理。嵌入式x86处理器101根据当前运行的程序的需要(是否兼容MS DOS),通过设置与I/O端口92h对应的寄存器,来控制地址信号。传统功能部件102(Glue)实现了I/O端口92h的功能,通过对该端口的I/O交易将嵌入式x86处理器的输入信号A20M#置为有效(1’b0)或无效(1’b1)。
出于嵌入式x86处理器兼容性的考虑,传统功能部件102还设置有浮点例外处理逻辑,用于实现嵌入式x86处理器所必须的外部浮点例外处理,如图2A所示,为传统功能部件102的浮点例外处理逻辑的示意图。FERR#和IGNNE#信号是与浮点运算例外相关的两个信号,它们是嵌入式x86处理器的输出信号和输入信号,分别由传统功能部件102接收和产生。浮点例外处理的流程如图3所示,请同时参考图2,其具体步骤如下:
步骤1、嵌入式x86处理器判断内部的浮点部件运算是否发生例外,如果是,嵌入式x86处理器将FERR#信号置为有效(1’b0);FERR#信号为低有效;
步骤2、当传统功能部件102中的FERR#触发器监测到FERR#信号有效时,向可编程中断控制器发出IRQ 13中断请求;
步骤3、可编程中断控制器接收到该中断请求后,向嵌入式x86处理器发出INTR信号;
步骤4、嵌入式x86处理器响应该INTR信号,发出中断响应信号INTA,并进入中断处理程序;
步骤5、中断处理程序向I/O端口F0h写入数据00h;
步骤6、传统功能部件102实现了I/O端口F0h的功能,捕获对该端口F0h的访问,并通过IGNNE#触发器将输入给嵌入式x86处理器的IGNNE#信号置为有效(1’b0),允许中断处理程序执行后续的浮点指令;IGNNE#信号为低有效;
步骤7、中断处理程序清除嵌入式x86处理器内部的和FERR#信号有关的寄存器,相应地,嵌入式x86处理器的输出信号FERR#被置为无效(1’b1);
步骤8、当传统功能部件102中的FERR#触发器监测到FERR#信号无效时,通过IGNNE#触发器将IGNNE#信号置为无效(1’b1),允许处理执行后续的不可屏蔽浮点例外。
传统功能部件102的特殊周期处理模块还支持对特殊周期的处理。嵌入式x86处理器可发出五类特殊周期,它们都是对特定I/O端口的访问,如表1所示。
表1特殊周期
名称 |
描述 |
CPU Shutdown |
I/O写交易(I/O端口为00h,写数据为00h) |
Cache Invalidate(INVD) |
I/O写交易(I/O端口为01h,写数据为00h) |
CPU Halt |
I/O写交易(I/O端口为02h,写数据为00h) |
Cache Write Back andInvalidate(WBINVD) |
I/O写交易(I/O端口为03h,写数据为00h)I/O写交易(I/O端口为01h,写数据为00h) |
CPU Interrupt Acknowledge(INTACK) |
I/O读交易(I/O端口为00h) |
由于软硬件原因引发系统的关闭,嵌入式x86处理器通过向I/O端口00h写数据00h,发出Shutdown特殊周期,传统功能部件102的特殊周期处理模块识别并接受该I/O写请求,并向系统控制部件105发出系统复位信号,关闭系统。
当嵌入式x86处理器执行INVD指令时,使嵌入式x86处理器内部的Cache无效,并通过向I/O端口01h写数据00h发出INVD特殊周期,通知其他实现Cache的部件将被修改的Cache行的数据回写到存储器并无效其内部的Cache。由于在本发明的实施例中,除嵌入式x86处理器外,没有其他部件实现Cache,所以传统功能部件102的特殊周期处理模块在接收到该I/O写请求后,只是简单地忽略该I/O写请求。
当嵌入式x86处理器执行Halt停机指令时,通过向I/O端口02h写入数据00h,发出Halt特殊周期,传统功能部件102的特殊周期处理模块识别、接收并忽略该I/O请求,嵌入式x86处理器在执行完这条指令后,停止指令的执行,处于停机状态。
当嵌入式x86处理器执行WBINVD指令时,将嵌入式x86处理器内部Cache中被修改的Cache行的数据回写到存储器,并使嵌入式x86处理器内部Cache无效,通过向I/O端口03h写数据00h和向I/O端口01h写数据00h这两个I/O写请求,发出WBINVD特殊周期,通知其他实现Cache的部件将被修改的Cache行的数据回写到存储器并无效其内部的Cache。由于在本发明实施例中,除嵌入式x86处理器外,没有其他部件实现Cache,所以传统功能部件102的特殊周期处理模块只是简单地接收并忽略这两个I/O写请求。
当嵌入式x86处理器接到来自可编程中断控制器的中断请求信号INTR时,通过从I/O端口00h的读请求,发出INTACK特殊周期以获取中断向量,传统功能部件102的特殊周期处理模块在接收到此类I/O读请求时,向可编程中断控制器发出中断响应信号INTA,并从可编程中断控制器中读取1个字节的中断向量,作为I/O读请求的读数据返回给嵌入式x86处理器,根据中断向量,嵌入式x86处理器找到中断处理程序的入口地址,执行相应的中断处理程序进行中断处理。传统功能部件102的浮点例外处理逻辑在接收到来自嵌入式x86处理器的FERR#信号后向可编程中断控制器发出IRQ13中断请求,可编程中断控制器通过INTR向嵌入式x86处理器发出中断请求,其获取中断向量和找到中断处理程序入口地址的过程就是通过嵌入式x86处理器的INTACK特殊周期来实现的。
图4是接口转换装置103的内部结构示意图。该接口转换装置103可为一总线桥接器(GeodeLink-AHB Bridge,简称GAB)。总线桥接器包括四个子功能模块:处理器接口部件(Glif)、AMBA AHB32主设备接口部件(ahb32_m,即32位AMBA AHB总线主设备接口)、AMBA AHB64主设备接口部件(ahb64_m,即64位AMBA AHB总线主设备接口)和AMBA AHB32从设备接口部件(ahb32_s,即32位AMBA AHB总线从设备接口)。处理器接口部件(Glif)作为总线桥接器(GAB)的主控模块,将嵌入式x86处理器的总线接口转换成总线桥接器内部定义的GABInt_if接口,负责转发来自嵌入式x86处理器访问存储控制器和其他设备的交易。本发明所述的GABIht_if接口具有简单、统一和通用的特性。
在本发明的实施例中,AMBA AHB32主设备接口部件(ahb32_m)和AMBA AHB64主设备接口部件(abh64_m)将GABInt_if接口转换成32位或64位AHB总线接口。类似地,在面向其他总线协议的系统芯片中,也可以设计相应的功能模块完成该接口向某个特定总线的转换。GABInt_if接口信号的具体含义如表2所示。
表2GABInt_if接口信号说明
信号名 |
方向 |
宽度 |
含义 |
Cs |
out |
2 |
片选信号,01:ahb32_m,10:ahb64_m |
cs_ack |
in |
2 |
片选确认信号 |
Write |
out |
1 |
读写信号,0:读请求,1:写请求 |
Be |
out |
8 |
字节使能,每位对应一个字节,0:未使能,1:使能 |
Addr |
out |
32 |
地址 |
burst_len |
out |
2 |
传输长度,00:1拍64位数据,11:4拍64位数据 |
burst_type |
out |
1 |
Burst传输类型,0:递增,1:关键字优先 |
Wdata |
out |
64 |
写数据 |
Wvalid |
out |
1 |
写数据有效信号,0:写数据无效,1:写数据有效 |
wfinish |
in |
1 |
写完成信号,0:写请求未完成,1:写请求完成 |
Rdata |
in |
64 |
读数据 |
Rvalid |
in |
1 |
读数据有效信号,0:读数据无效,1:读数据有效 |
Rack |
out |
1 |
读完成信号,0:读请求未完成,1:读请求完成 |
处理器接口部件(Glif)包括I/O转换处理模块、状态机、出错处理模块。出错处理模块中包括一中断状态寄存器,I/O转换处理模块中包括一存储映射I/O表(MMIOT)。处理器接口部件(Glif)按照图5所示的状态机接收并处理来自嵌入式x86处理器的请求。在GABInt_if接口上产生相应的控制信号。
表3Glif内部状态机的状态说明
状态名 |
含义描述 |
IDEL |
空闲状态 |
IO_TRANS |
将I/O交易转换成存储交易 |
RD_START |
发出读请求 |
RD_RESP |
接收来自总线的读数据,并返回给嵌入式x86处理器 |
RD_WAIT |
等待读数据 |
WR_START |
发出写请求 |
WR_DATA |
接收来自嵌入式x86处理器的写数据,并发给总线 |
WR_WAIT |
等待写数据 |
WR_RESP |
向处理发出写响应交易,标志当前写请求已完成 |
ERROR |
总线返回错误响应 |
表3是各状态的含义描述。系统复位后,状态机的初始状态为IDLE。处理器接口部件(Glif)在IDEL状态接收嵌入式x86处理器的请求,并判断请求类型。如果为I/O交易,则进入IO_TRANS状态,将I/O交易转换成存储交易,如果是读请求,则进入RD_START状态,如果是写请求,则转入WR_START状态;如果为存储交易,则根据读写类型,直接转入RD_START或WR_START。当嵌入式x86处理器读数据时,在RD_START状态根据请求的地址,确定嵌入式x86处理器请求的路由方向(存储器位于ahb64_m、设备位于ahb32_m),并产生相应的片选信号;根据请求的控制信号,产生传输长度、传输类型、字节使能等控制信号,发给总线桥接器(GAB)内部相应的接口子功能模块。然后,转入RD_WAIT状态,等待读数据。当读数据有效时,转入RD_RESP状态,向嵌入式x86处理器返回读数据。当嵌入式x86处理器写数据时,在WR_START状态根据请求的地址,确定嵌入式x86处理器请求的路由方向(存储器位于ahb64_m、设备位于ahb32_m),并产生相应的片选信号;根据请求的控制信号,产生传输长度、传输类型、字节使能等控制信号,发给总线桥接器(GAB)内部相应的接口子功能模块。然后,转入WR_WAIT状态,等待嵌入式x86处理器发出的写数据,当写数据有效时,进入WR_DATA状态,将写数据发给片选信号选中的接口子功能模块。当写请求完成后,如果嵌入式x86处理器要求返回写完成交易,则转入WR_RESP状态,由处理器接口部件(Glif)向嵌入式x86处理器返回相应数目的写完成交易,通知嵌入式x86处理器当前写请求已经完成,然后转入IDEL状态;否则,直接转入IDEL,准备好接收嵌入式x86处理器的下一个请求。
若嵌入式x86处理器访问位于32位AHB或APB总线上的设备,或者位于64位AHB总线上的存储控制器,当总线接收到错误响应时,由AMBA AHB32主设备接口部件(ahb32_m)或AMBA AHB64主设备接口部件(ahb64_m)向处理器接口部件(Glif)发出ahb32_err或者ahb64_err信号,状态机进入ERROR状态。总线出错处理逻辑以及中断状态寄存器结构如图6所示。中断状态寄存器采用最低2位用于总线出错处理逻辑,其他位为系统保留。位0表明32位AHB总线是否返回错误响应,当ahb32_err信号有效时,位0在时钟上升沿被置为1’b1,位1表明64位AHB总线是否返回错误响应,当ahb64_err信号有效时,位1在时钟上升沿被置为1’b1。Ahb32_err和ahb64_err信号只维持一个周期。中断状态寄存器的位0和位1连接到一个或门的输入,或门的输出作为处理器接口部件(Glif)发向可编程中断控制器的中断请求信号。中断处理程序将处理器接口部件(Glif)内部的中断状态寄存器的相应位清零。
基于AMBA总线的系统芯片没有独立的I/O空间,AHB和APB设备用存储映射的寄存器(Memory Mapped Register)实现了I/O端口的功能,处理器接口部件(Glif)将嵌入式x86处理器发出的I/O交易转换成对这些寄存器的存储交易。系统为每个AHB和APB设备分配一段固定的存储空间,用于I/O交易的转换。I/O交易的转换过程如图7所示。首先根据I/O端口号,确定实现该I/O端口功能的设备号;然后根据设备号查找存储映射I/O表(Memory Mapped I/OTable:简称MMIOT),确定系统为该设备分配的存储空间基地址;将存储空间基地址作为高位,I/O端口号作为低位进行拼接,形成转换后的存储地址,I/O交易被转换成对该存储地址的存储交易,处理器接口部件(Glif)将转换得到的存储交易通过AMBA AHB32主设备接口部件(ahb32_m)发给32位AHB总线,AHB总线译码器和APB总线译码器负责选择相应的设备接收存储交易。出于简化硬件设计的考虑,设备内部的存储映射寄存器的偏移地址和其相应的I/O端口号相同。设备直接存储地址的若干低位进行设备内部寻址,访问实现该I/O端口功能的寄存器。在本发明的实施例中,系统为AHB和APB设备分配的存储空间大小为64KB,所以,转换得到的存储地址的位31-16是存储空间基地址寄存器的位31-16,位15-0是16位I/O端口号。
MEMADDR[31:0]={Memory space base address[31:16],IO port[15:0]}
其中,MEMADDR[31:0]是转换后发到AMBA总线上的地址信号,Memory spacebase address[31:16]是为实现IO port功能的设备分配的存储空间基地址,IOport[15:0]是嵌入式x86处理器要访问的IO端口地址。
AMBA AHB32主设备接口部件(ahb32_m)作为32位AHB总线上的主设备,其包括数据FIFO(先入先出)和总线状态机。AMBA AHB32主设备接口部件(ahb32_m)和总线交互的接口说明如表4所示。嵌入式x86处理器发出的请求具有字节使能控制信息,本发明对AMBA AHB总线协议进行扩展,使之支持字节使能,增加字节使能信号hbe。4位hbe信号指明32数据总线上的数据使能情况,每位对应一个字节,总线根据hbe信号的字节使能信息访问设备。
表4ahb32_m主设备接口信号说明
信号名 |
方向 |
宽度 |
含义 |
hbusreq |
out |
1 |
总线请求 |
Haddr |
out |
32 |
地址 |
hburst |
out |
3 |
Burst传输类型,000:单次传输,001:不定长burst传输,010:4拍wrapping传输,011:4拍incrementing传输,100:8拍wrapping传输,101:8拍incrementing传输 |
Hsize |
out |
2 |
数据传输大小,00:字节,01:半字,10:字,11:系统保留 |
htrans |
out |
2 |
传输状态,00:IDLE,01:BUSY,10:NONSEQ,11:SEQ |
hwdata |
out |
32 |
写数据 |
hwrite |
out |
1 |
读写控制,0:读请求,1:写请求 |
Hbe |
out |
4 |
字节使能,每位对应一个字节,0:字节未使能,1:字节使能 |
Hlock |
out |
1 |
锁总线,0:非原子操作,1:原子操作,不可被打断 |
Hprot |
out |
1 |
保护控制 |
hgrant |
in |
1 |
总线授权 |
hready |
in |
1 |
从设备准备好 |
Hresp |
in |
2 |
从设备响应,00:OKEY,01:ERROR,10:RETRY,11:SPLIT |
hrdata |
in |
32 |
读数据 |
表5ahb32_m内部状态机的状态说明
BUSREQ_PRE |
预申请总线状态,等待写数据 |
BUSREQ |
申请总线状态 |
RD_START |
读启动状态 |
RD_DATA |
读数据状态 |
WR_START |
写启动状态 |
WR_DATA |
写数据状态 |
ERROR |
总线错误状态 |
RETRY |
总线发生RETRY或SPLIT |
BUSREQ_RETRT |
总线发生RETRY或SPLIT后,申请总线状态 |
Abh32_m的状态机如图8所示。表5是各状态的含义描述。系统复位后,状态机的初始状态为IDEL。当处理器接口部件(Glif)发出请求时,状态发生转移,如果是写请求且写数据未准备好,则转到BUSREQ_PRE状态,直至接收到写数据,转入BUSREQ状态,如果是读请求,或者是写请求且写数据准备好,则转到BUSREQ状态。在BUSREQ状态,发出总线请求。在得到总线授权后,根据请求类型,转到RD_START或者WR_START状态,向总线发出地址和控制信息,当hready信号有效时,转入RD_DATA或者WR_DATA状态。如果为读请求,在RD_DATA状态,将总线上的32位读数据放入内部的数据FIFO,将两个32位读数据拼成一个64位数据,发给处理器接口部件(Glif);如果是写请求,AMBA AHB32主设备接口部件(ahb32_m)将来自处理器接口部件(Glif)的64位数据拆分成两个32位数据,放入数据FIFO,依次发给总线。若总线返回OKEY响应,表明总线交易正常完成,则转入IDLE状态;若总线返回ERROR响应,表明总线发生错误,则转入ERROR状态。在ERROR状态,对于读交易,AMBA AHB32主设备接口部件(ahb32_m)负责产生未完成交易部分的读数据,并放入数据FIFO中,返回相应数目的读数据,对于写交易,AMBA AHB32主设备接口部件(ahb32_m)接收写数据并放入数据FIFO,然后将数据FIFO的写数据清空;若总线返回RETRY或SPLIT响应,则转入RETRY状态,下个周期转入BUSREQ_RETRY状态,再次申请总线,得到总线授权后,根据请求类型,进入RD_START或WR_START状态,重新启动总线交易。
AMBA AHB64主设备接口部件(ahb64_m)实现了和AMBA AHB32主设备接口部件(ahb32_m)类似的总线状态机,作为64位AHB总线上的主设备访问从设备存储控制器。Abh64_m还包括仲裁电路以实现仲裁逻辑,根据嵌入式x86处理器和设备的请求情况产生仲裁结果信号,该信号作为仲裁电路中的多路选择器的控制信号,允许嵌入式x86处理器或者设备向64位AHB总线发出总线请求。如图9所示。当只有嵌入式x86处理器发出请求时,仲裁逻辑授权给嵌入式x86处理器,将内部的一位标志寄存器GNT_REG置为1’b0,允许嵌入式x86处理器向64位AHB总线发出总线请求,在嵌入式x86处理器的总线请求完成前,AMBAAHB64主设备接口部件(ahb64_m)对设备发出的请求不予授权,AMBA AHB32从设备接口部件(ahb32_s)将维持请求信号直至获得AMBA AHB64主设备接口部件(ahb64_m)的授权。当只有设备发出请求时,仲裁逻辑授权给设备,将内部的一位标志寄存器GNT_REG置为1’b0,允许设备向64位AHB总线发出总线请求,在设备的总线请求完成前,AMBA AHB64主设备接口部件(ahb64_m)对嵌入式x86处理器的请求不予授权,处理器接口部件(Glif)将维持请求信号直至获得访问总线的授权。当嵌入式x86处理器和设备同时发出请求时,仲裁逻辑根据轮转算法对请求进行仲裁,如果标志寄存器GNT_REG为1’b0,表明上次总线交易由嵌入式x86处理器发起,则授权给设备,将标志寄存器GNT_REG置为1’b1,允许设备向64位AHB总线发起总线请求;否则授权给嵌入式x86处理器,将标志寄存器GNT_REG置为1’b0,允许嵌入式x86处理器向64位AHB总线发起总线请求。即,轮流授权给嵌入式x86处理器和设备。
传统设备106包括DMA控制器、可编程中断控制器、可编程中断定时器和实时时钟。除DMA控制器位于32位AMBA AHB总线上,其他传统设备均位于32位AMBA APB总线上。传统设备通过存储映射的寄存器实现了嵌入式x86处理器所必须的I/O端口功能。嵌入式x86处理器可以通过访问I/O端口的I/O交易来访问它们,I/O交易被总线桥接器(GAB)转换成32位AMBA总线上的存储交易,并选择相应的传统设备接收并响应转换后的存储交易,其转换过程如图7所示。
设备内部存储映射寄存器的偏移地址和相应的I/O端口地址相同,当总线译码器选择相应传统设备接收转换后的存储交易时,被选中的传统设备只需要用转换后的存储地址的位16-0进行设备内部寄存器的寻址。本发明中总线桥接器(GAB)的I/O端口到存储地址的转换逻辑,以及设备内部存储映射寄存器,均大大简化了硬件的设计。
DMA控制器由两片8237级联实现,每个8237提供四个独立的8位DMA通道,本发明中的DMA控制器提供了七个独立的传输通道,支持32位地址空间,用于实现系统芯片内部数据的高速传输。如图10所示。第二级DMA控制器的HRQ和HLDA信号连到第一级DMA控制器的DREQ0和DACK0上,第二级DMA控制器的优先级与所连第一级的DMA通道的优先级对应。每个通道的DMA请求都可以分别允许和禁止,不同通道的DMA请求有不同的优先级,优先级可以是固定的,也可以是循环的(可编程设定),七个通道可以分时地为七个外部设备实现DMA传输。在本发明中,系统分配给DMA控制器的用于I/O端口重映射的64KB存储空间为0xC100_0000-0xC100_FFFF,但不限于该存储空间。
可编程中断控制器由两片8259A级联实现,如图11所示。一片8259A作为主片,一片8259A作为从片,从片的INT连接到主片的IRQ2上,主片的输出信号INT则与嵌入式x86处理器的中断请求输入信号INTR相连,当来自从片的8259A的中断请求处理结束时,嵌入式x86处理器发送两个中断结束命令,分别给主片和从片。可编程中断控制器提供15个中断输入请求,支持中断请求屏蔽和边沿触发,为不同的中断请求提供15个不同的中断优先级。在本发明中,系统分配给可编程中断定时器的用于I/O端口重映射的64KB存储空间为0xEE00_0000-0xEE00_FFFF,但不限于该存储空间。可编程中断定时器的存储映射寄存器如表6所示。I/O端口20h和21h的功能由主8259A实现,I/O端口A0h和A1h的功能由从8259A实现。根据编程顺序和读写请求的不同,实现这四个I/O端口的存储映射寄存器分别作为初始化命令字ICW、操作命令字OCW、中断请求寄存器IRR、中断服务寄存器ISR、中断屏蔽寄存器IMR。
表6可编程中断控制器的存储映射寄存器
I/O地址IRQ0-IRQ7(主) |
存储映射地址 |
I/O地址IRQ8-IRQ15(从) |
存储映射地址 |
读数据 |
写数据 |
20h |
0xEE00_0020 |
A0h |
0xEE00_00A0 |
IRRISR |
ICW1OCW2OCW3 |
21h |
0xEE00_0021 |
A1h |
0xEE00_00A1 |
IMR |
ICW2ICW3ICW4 |
可编程中断定时器由一片8254兼容的可编程计时/计数器实现,提供三个独立的16位计数通道。在本发明中,系统分配给可编程中断定时器的用于I/O端口重映射的64KB存储空间为0xEE01_0000-0xEE01_FFFF,但不限于该存储空间。可编程中断定时器的存储映射寄存器如表7所示。
表7可编程中断定时器的存储映射寄存器
I/O地址 |
寄存器 |
存储映射地址 |
类型 |
40h |
计数器0 |
0xEE01_0040 |
R/W |
41h |
计数器1 |
0xEE01_0041 |
R/W |
42h |
计数器2 |
0xEE01_0042 |
R/W |
43h |
控制字寄存器 |
0xEE01_0043 |
W |
实时时钟是一个通用的实时的时钟,具有精确的时间和日历管理功能,提供114字节的RAM和三个内部寄存器。系统RTC的内部寄存器和RAM的访问通过I/O端口70h和71h来实现。对I/O端口70h的写请求,其写数据指明RTC内部寄存器的地址并存入实现该I/O端口功能的存储映射寄存器中,对I/O端口71h的读请求,将读取RTC的相应寄存器的内容返回给嵌入式x86处理器,对I/O端口71h的写请求,将来自嵌入式x86处理器的数据写入RTC的相应寄存器中。在本发明中,系统分配给可编程中断定时器的用于I/O端口重映射的64KB存储空间为0xEE02_0000-0xEE02_FFFF,但不限于该存储空间。可编程中断定时器的存储映射寄存器如表8所示。
表8实时时钟的存储映射寄存器
I/O地址 |
寄存器 |
存储映射地址 |
类型 |
70h |
地址 |
0xEE02_0070 |
R/W |
71h |
数据 |
0xEE02_0071 |
R/W |
本发明提出的将通用的嵌入式x86处理器应用于通用的片上总线的方法和系统芯片,充分利用了嵌入式x86处理器的丰富的软件资源和较高性能优势,尽可能的复用日趋成熟的基于通用片上总线的系统芯片平台,以及丰富的基于这些平台的IP资源,在高端嵌入式领域提供类似桌面的用户体验,使嵌入式x86处理器得到更广泛的应用。