tag 标签: openrisc1200设计说明书

相关博文
  • 热度 20
    2014-3-18 19:40
    1363 次阅读|
    0 个评论
    第四章   寄存器( Register ) 本部分将会描述在 or1200 核中用到的所有寄存器,向左移位 GPR11 位加上 REG number 计算每个特殊目的寄存器的地址。从软件的角度看所有的寄存器都是 32bits 。 USER mode 和 supv mode 指定 USER mode 和 supv mode 中每个寄存器有效访问类型。 R/W 代表读写访问, R 仅代表读访问。 表 17 列出了所有 OR1000 特殊目的寄存器中在 OR1200 中已经实现了的。寄存器 VR 和 UPR 在下面描述。如果需要对其它寄存器有更多的认识,请参考 OR1000 系统架构手册。   Register VR description 特殊目的寄存器 VR 定义了 OR1200 处理器的版本( version )和版本标识( reversion ),也定义了实现时所采用标准模板。 Register UPR description 特殊目的寄存器 UPR 定义了出现在处理器中的单元,每个实现单元或功能都对应一个 bit 。低 16bits 代表在 OR1000 架构中定义的单元,高 16bits 定义代表当前的通用单元。 Register CPUCFGR description 特殊目的寄存器 CPUCFGR 定义了 cpu 的功能和配置。 Register DMMUCFGR description 特殊目的寄存器 DMMUCFGR 定义了 DMMU 的功能和配置。 Register IMMUCFGR description 特殊目的寄存器 IMMUCFGR 定义了 DMMU 的功能和配置。 Register DCCFGR description 特殊目的寄存器 DCCFGR 定义了 data cache 的功能和配置。 Register ICCFGR description 特殊目的寄存器 ICCFGR 定义了 instruction cache 的功能和配置。 Register DCCFGR description 特殊目的寄存器 DCFGR 定义了 debug unit 的功能和配置。                                                               第五章    IO ports OR1200IP 核中有一些接口,图 14 给出了所有的接口类型: Instruction wishbone master interface OR1200 有两种 master wishbone 版本兼容接口,指令接口用于连接 Or1200 和到存储器子系统用来取指令或者指令行( instructions or instruction cache lines )。 Data wishbone master interface OR1200 有两种 master wishbone 版本兼容接口,数据接口用于连接 Or1200 和到存储器子系统及外围设备用来读写数据及数据行( data or data cache lines )。 System interface 系统接口连接复,时钟及其它系统信号到 OR1200 处理器核。 Development interface 开发接口用于连接外部开发接口到 RISC 内部调试设备中,调试设备允许控制在 RISC 中执行编程调试,设置断点和观察点,数据流和指令流的跟踪调试。 Power management interface 功耗管理接口提供外部功耗管理单元电路的信号接口用于连接 RISC 核。外部功耗管理电路单元需要实现基于指定工艺的一些功能,在 OR1200 核中没有进行实现。 Interrupt interface 中断接口有中断输入用于连接外部设备的中断输出到 RISC 核。所有的中断输入都在主时钟上升沿进行有效采样。
  • 热度 16
    2014-3-10 10:33
    1612 次阅读|
    0 个评论
                            第三章  操作(operation) 本章将具体描述OR1200核的运算。对于运算,它隶属于架构定义,详情可参考OR1000系统架构手册。 复位(Reset) OR1200采用异步复位,可以在更高层次进行软件或硬件复位。 图4给出了OR1200核上电后的异步复位时序。复位信号连接于RISC核中的所有FF上。必须指出的是相比于RISC时钟,必须保证触发器(FF)的建立和保持时间。 如果系统实现了门控时钟,那么门控时钟可以用于确保合适的复位时序。 CPU/DSP CPU/DSP仅仅实现了OR1000架构的32位部分,只含OR1000架构的部分特点。 指令(Instructions)   完整的指令操作描述请参考OR1000系统架构手册。 指令单元(Instruction unit) 指令单元产生指令有效地址从指令缓存中取指令,每个周期可以取一条指令。取指令的EA(effective address)被IMMU翻译成物理地址。 通用目的寄存器(general purpose register) 通用目的寄存器文件支持每个周期2个读操作及存储一个结果到目的寄存器。GPRs通过开发接口也可以进行读和写操作。 存取单元(load/store unit) 假定load指令在data cache中被hit,那么LSU可以每两个周期执行一个load指令。假定store指令在data cache中被hit,那么每一个周期可以执行一条store指令。 LSU计算load/store有效地址(EA),EA被DMMU翻译成物理地址。 通过开发接口也可以访问load/store EA、load data及store data。 整数执行流水线(integer execution pipeline) 核实现了下面的各种32位的整数指令: 算术指令 比较指令 逻辑指令 翻转和移位指令 表8列出了每种指令采用整数执行流水线时所需要的时间。大部分的指令可以在一个周期内完成。 MAC unit MAC单元执行1.mac 指令,MAC单元实现了32*32全流水线乘法器和48-bit的累加器,MAC单元可以每个周期获取一条新的mac指令。 System unit 系统单元实现系统控制和状态目标寄存器,执行所有的1.mtspr/1.mfspr指令。 Exception 异常 核实现了精确的异常模式,这意味着当异常发生时会出现下面的一些状况: 后面出现在程序流程的指令将被忽略 之前的指令结束及写回它们的结果 默认指令的地址保存在EPCR寄存器中,状态机被保存在ESR寄存器中 OR1200异常支持的并不包含快速内容切换(fast context switching)。 Data cache operation Data cache load/store access Load/store 单元从data cache中请求数据,存数据到通用目的寄存器文件中,然后送到整数执行单元执行指令。因而LSU和data cache紧密耦合。 如果没有data cache line miss或者DTLB miss,load指令将花费2个周期执行,store操作花费1个周期执行。LSU处理所有的数据对齐操作。 数据可以以word,half-word或者字节的方式写入cache中,由于data cache仅执行write-through模式,所有的写都会立刻写回主存或者下级cache中。 图6给出了当存指令hits到data cache中时,write-through在总线wishbone上的时序。如果dwb_ERR_I or dwb_RTY_I被检测到,而不是dwb_ACK_I被检测到,总线错误(bus error)异常将会发出。 Data cache line fill operation 当执行load指令和cache miss发生时,4拍(第一拍是关键字)顺序读突发将会发生,关键字is forwarded to the load/store unit防止由于cache miss造成的性能损失。 图7给出了cache line在wishbone总线上读周期,它由4个读传输构成。如果dwb_ERR_I or dwb_RTY_I被检测到,而不是dwb_ACK_I被检测到,总线错误(bus error)异常将会发出。 当执行store instruction和cache miss发生时,带有关键字的4拍连续读突发将会发生。读突发之后,单字写会将store instruction的数据写回主存或者下级cache中。无论store instruction的宽度时多少,综合有一个word write 执行。 图8给出了cache line在wishbone总线上读周期,其后跟了写传输。如果dwb_ERR_I or dwb_RTY_I被检测到,而不是dwb_ACK_I被检测到,总线错误(bus error)异常将会发出。 Cache/Memory coherency(存储器和高速缓存一致性) 在OR1200中Data cache仅按照write-through模式运行。OR1200目标并不是多处理器环境。因而在本地data cache和另外处理器cache或者主存中并未考虑一致性问题。 Data cache enabling/Disabling Data cache在刚上电时是禁用的,可以通过设置SR 的bit位进行使能。在data cache使能前,它必须是无效的。 Data cache Invalidation 在OR1200中,并不支持所有的data cache 无效,正常的过程是通过循环访问cache lines单独无效每一行。 Data cache locking Data cache采用存储在data cache中的way locking bits的方式控制DCCR寄存器。Bits LWx lock individual ways when they are set to one。 Data cache line prefetch Data cache line prefetch 在OR1000架构中是可选择的,在OR1200中并未去实现。 Data cache line flush 由于data cache 操作仅仅是write-through 模式,data cache line flush表现为行无效(line invalidation),仅执行将EA(effective address)写回DCBFR寄存器中。事实上data cache line flush和data cache line invalidate没什么区别。 Data cache line invalidate Data cache line invalidate 无效单个数据cache line。执行写EA到DCBIR寄存器的操作。 Data cache line write-back Data cache line write-back 操作并不执行任何命令,这是由于data cache操作仅仅执行write-through mode。 Data cache line lock 锁住单个的data cache lines在OR1200中并未实现。(locking of individual data cache lines is not implemented in or1200) Instruction cache operation Instruction cache instruction fetch access Instruction 单元从instruction cache中请求指令,然后放入instruction单元的指令队列中,因而instruction 单元和instruction cache是紧密耦合的。 如果没有instruction cache line miss或者ITLB miss,取指令操作仅仅花费一个周期取执行。Instruction cache不能像data cache一样很明确的被修改,可以进行存指令。(can be with store instructions) Instruction cache line fill operation 当cache miss时,会执行带关键字的连续4拍的读操作,关键字先到指令单元用于减少cache miss原因造成的性能损失。 图9给出了cache line在wishbone 总线上的读周期,由4次读传输构成。如果dwb_ERR_I or dwb_RTY_I被检测到,而不是dwb_ACK_I被检测到,总线错误(bus error)异常将会发出。 Cache/Memory coherency(存储器和高速缓存一致性) OR1200目标并不是多处理器环境。因而在本地data cache和另外处理器cache或者主存中并未考虑一致性问题。 Instruction cache enabling/Disabling Instruction cache在刚上电时是禁用的,可以通过设置SR 的bit位进行使能。在Instruction cache使能前,它必须是无效的。 Instruction cache Invalidation 在OR1200中,并不支持所有的Instruction cache 无效,正常的过程是通过循环访问cache lines单独无效每一行。 Instruction cache locking Instruction cache采用存储在Instruction cache中的way locking bits的方式控制ICCR寄存器。Bits LWx lock individual ways when they are set to one。 Instruction cache line prefetch Instruction cache line prefetch 在OR1000架构中是可选择的,在OR1200中并未去实现。 Data cache line invalidate Instruction cache line invalidate 无效单个数据cache line。执行写EA到ICBIR寄存器的操作。 Instruction cache line lock 锁住单个的Instruction cache lines在OR1200中并未实现。(locking of individual Instruction cache lines is not implemented in or1200) Data MMU Translation disabled 设置SR 位可以屏蔽load/store地址翻译功能,如果屏蔽了翻译,采用物理地址访问data cache,可选择的提供dwb_addr_o信号,和load/store有效地址一样的功能。 Translation Enabled 设置SR 位可以使能load/store地址翻译功能,如果使能了翻译功能,它会提供load/store有效地址进行物理地址翻译及存储器访问页保护机制。 在OR1200中,page tables必须由虚拟内存管理单元管理(virtual memory),图10给出了采用两级page table进行地址翻译的示意。参考OR1000系统架构设计手册中一级page table地址翻译及地址翻译和page table的详细内容。 DMMUCR and Flush of Entire DTLB DMMUCR在OR1200系统架构中并未实现,因而基于pointer的page table必须存储在软件变量中,DTLB的flush操作必须采用软件实现,软件flush通过手动的将TLB entries写回PTEs中。 Page Protection After a virtual address is determined to be within a page covered by the valid PTE,则访问是被存储器保护机制确认的,如果保护机制限制了访问,data page fault exception会产生。 存储器保护机制分别允许supervision and user模式进行读写访问,而页保护机制提供了在所有页面级粒度的保护。 图10列出了DTLBWyTR寄存器中定义的页保护属性,For the individual page appropriate strategy out of seven possible strategies programmed with the PPI field of the PTE。由于OR1200没有实现DMMUPR,翻译PTE 到合适的protection位必须由软件写入DTLBWyTR。 DTLB entry reload OR1200并不支持硬件进行DTLB entry reload,采用软件为正确的PTE(page table entry)搜索page table及拷贝其到DTLB。软件负责管理在page table中的accessed和dirty bits。 当LSU计算load/store有效地址的时候,但其物理地址在DTLB还没有的时候,DTLB miss异常会发出。 DTLB reload过程必须load正确的PTE到正确的DTLBWyMR中。 DTLB entry invalidation 目的寄存器DTLBEIR必须写入有效地址,相应的DTLB entry在本地的DTLB中将会无效。 Locking DTLB Entries 由于所有的DTLB entry采用软件load,因而无硬件locking DTLB entry。采用软件的方式可以避免一些entry被替换掉。 Page attribute-dirty(D) Dirty attribute在OR1200DTLB中并未实现,It is up to the operating system to generate dirty attribute bit with page protection mechanism。 Page attribute-accessed(A) Accessed attribute在OR1200DTLB中并未实现,It is up to the operating system to generate dirty attribute bit with page protection mechanism。 Page attribute-weakly ordered memory(WOM) 由于存储器访问是顺序的,WOM在OR1200中也并未实现。 Page attribute-write back cache(WBC) 由于data cache仅仅进行write-through模式的操作,因而WBC在OR1200中并未实现。 Page attribute-Caching-Inhibited (CI) Cached和uncached边界是以30bits作为有效地址划分的,因而CI在OR1200中也并未实现。 当所有的I/O寄存器采用存储器映射时,必须采用uncached访问,必须采用直接读写外部接口的方式,而不是访问data cache。 由于不支持多处理器环境及data cache仅进行write-through模式,因而cache coherency attribute并未在OR1200中进行实现。 Instruction MMU Translation Disabled 可以通过设置SR 位屏蔽指令取地址翻译功能,如果翻译功能被屏蔽,采用物理地址访问指令缓存and optionally provided on iwb_ADDR_O,和取EA效果相同。 Translation Enabled 设置SR 位可以使能load/store地址翻译功能,如果使能了翻译功能,它会提供指令取有效地址进行物理地址翻译及存储器访问页保护机制。 在OR1200中,page tables必须由虚拟内存管理单元管理(virtual memory),图11给出了采用两级page table进行地址翻译的示意。参考OR1000系统架构设计手册中一级page table地址翻译及地址翻译和page table的详细内容。 IMMUCR and Flush of Entire DTLB IMMUCR在OR1200系统架构中并未实现,因而基于pointer的page table必须存储在软件变量中,ITLB的flush操作必须采用软件实现,软件flush通过手动的将TLB entries写回PTEs中。
  • 热度 18
    2014-3-6 10:51
    1678 次阅读|
    0 个评论
                                     第二章 架构   (由于字数限制,采用一键排版,所以效果不好,还请见谅)   图1给出了OpenRisc 1200IP核的架构,包括如下模块: CPC/DSP核心模块 直接映射数据cache 直接映射指令cache 基于Hash基于DTLB的数据MMU 基于Hash基于DTLB的指令MMU 功耗管理单元及功耗管理接口 定时器 用于开发和调试的接口 中断控制器及中断接口 基于Wishbone的指令和数据接口                                             图1 CPU/DSP CPU/DSP是OpenRisc1200处理器的核心单元,图2给出了CPU/DSP的基本结构图。                                                  图2 OpenRisc1200 CPU/DSP 仅仅实现了OpenRisc1000架构的32位部分,64位中的浮点运算和向量操作并未实现。 指令单元(Instruction unit) 指令单元实现了基本的指令流水线,从存储子系统中取指令,将它们送至可执行单元执行,维持历史状态确保之前的异常模块及其操作按照顺序完成,另外也执行条件分支和无条件跳转指令。 当执行单元可用时,Sequencer会在每个时钟把一系列指令送去执行,执行单元必须能够识别源数据是否可用及确保无其它指令会索取相同目标寄存器中的数据。 指令单元仅能实现ORBIS32指令集,当前的OpenRisc1200 不支持ORFPX32/64 and ORVDX64。 通用目的寄存器(GPRS) OpenRISC 1200实现32个通用32位寄存器。OpenRISC 1000架构还支持寄存器文件的shadow copies以便在工作环境中来实现快速切换,然而这个功能在当前OR1200并未实现。 OR1200采用两个同步双端口存储器(32words*32bits)实现了通用寄存器文件。 存取单元(Load/Store Unit,LSU) 存取单元在GPRs和CPU内部总线直接传输所有类型的数据,它采用单独的执行单元实现,因而,如果出现数据相关时,存储器子系统中的stalls仅仅会影响master流水线。 下面是LSU的主要特点: 所有的存取指令都采用硬件实现(也包括原子指令) 地址入口缓存(address entry buffer) 流水线操作 快速存储访问时采用对其访问方式 当存取指令发送时,LSU会确定是否所有的操作都是可执行的,包括: 地址寄存操作(address register operand) 源数据寄存操作(source data register operand for store instructions) 目的数据寄存操作(destination data register operand for load instructions) 整数执行流水线(Integer Execution Pipeline) 核采用32位整数指令实现下面的指令: 算术指令 比较指令 逻辑指令 翻转和移位指令 大部分的整数指令可以在一个周期内执行完毕,更多详细的关于时序的内容请参考表TBD。 MAC单元(MAC unit) MAC单元执行DSP MAC指令,MAC操作是32*32 with 48-bit的累加器,MAC单元全部采用流水线,在任意一个时钟都可以接受新的MAC操作。 系统单元(system unit) 系统单元连接其它没有连接到指令和数据接口的CPU/DSP信号,它也实现了所有的系统目标寄存器(如管理员寄存器)。 异常(exception) 在异常条件发生时会产生核异常,在OR1200核中的异常来源有以下: 外部中断请求 某些存储器访问情况 内部错误,如尝试执行不能执行的指令 系统调用 内部异常,如断点异常 异常操作对于软件用户而言是透明的,其它异常也采用同样的机制。当一个异常发生时,控制信号会发送到异常处理程序中,异常在管理模式中进行处理。 数据缓存(Data Cache) 默认的OR1200数据缓存大小配置是8-Kbyte,1-way direct-mapped,运行快速内核访问数据。另外,数据缓存可以进行如下从新配置。 特点: 数据缓存独立于指令缓存(哈弗结构) 数据缓存采用a least-recently used (LRU)替代算法实现 缓存目录采用物理寻址方式,物理地址的tag存储在缓存的目录中 支持连续写操作 靠写特殊的目的寄存器可实现无效和非使能 缓存采用16bytes突发长度进行组织,突发组织被描述为关键字先操作,关键字同时写入cache中,然后是请求单元(requesting 单元),因而由于cache fill延时的原因会使stalls最小化。Cache 为cache tags和cache line替换功能提供存储单元。 数据cache和外部接口是紧密耦合的,能够允许有效的访问系统存储控制器。 数据cache利用32bits的且连接至LSU单元的接口为GPRs单元提供数据,LSU单元同所有的逻辑用于计算有效地址,控制数据输入输出数据cache时的边界对齐,维持存取操作的秩序。数据缓存的写操作可以是整字节的,半字的或全字的。 数据缓存按照512 sets of one line进行组织的,每行包括16字节,状态位及地址标记。 每行包含4个来自存储器的连续字节,这些字节在存储器中是边界对齐的。这样cache line也与页边界对齐。 Data MMU OR1200实现了虚拟内存管理,能够提供内存访问保护和有效的物理地址转换,保护粒度(protection granularity)被OR1000架构-8KB和-16KB所定义。 特点: Data mmu独立于指令mmu 页大小为8KB 全面的页保护机制 默认情况下1-way direct mapped hash based translation lookaside buffer (DTLB) Miss和fault 异常 软件 tablewalk 由于基于hash方式因而提供高性能 可变数目的DTLB,默认情况下64个 指令MMU(Instruction MMU) OR1200实现了虚拟内存管理,能够提供内存访问保护和有效的物理地址转换,保护粒度(protection granularity)被OR1000架构-8KB和-16KB所定义。 特点: Data mmu独立于指令mmu 页大小为8KB 全面的页保护机制 默认情况下1-way direct mapped hash based translation lookaside buffer (DTLB) Miss和fault 异常 软件 tablewalk 由于基于hash方式因而提供高性能 可变数目的DTLB,默认情况下64个 可编程中断控制器(Programmable Interrupt Controller) 中断控制器接收外部中断源并且决定它们在CPU中执行优先权。 可编程中断控制器有三个特别的目标寄存器和32个中断输入,中断输入0和中断输入1一直使能,分别连接到最高和最低优先级中断输入上。另外30个中断输入可以通过可编程目的寄存器进行屏蔽和使能。 定时器(Tick Timer ) OR1200实现了定时器功能,该定时器基于RISC时钟,可用于操作系统中精确时间的测量和时间有关的系统任务。 OR1200中定时器做如下定义: 最大可计数到2^32个时钟 中断之间的最大时间为2^28个时钟 可屏蔽的定时器中断 单一的、可重启的和继续的定时器 定时器操作来自独立的时钟源以便休眠功耗管理模式可以实现。 功耗管理支持(Power Management Support) 为了优化功耗消耗,OR1200提供了低功耗模式以便能够动态激活或屏蔽一些内部模块的运行。 OR1200在优化功耗消耗方面有三个特点: 低速和空闲模式(slow and idle 控制时钟的降低) 休眠模式(doze and sleep mode,中断激活) 低速模式采用外部低功耗分频的优点来实现全部的功能,在低频模式下功耗也会跟着降低。 PMR 4bits在pm_clksd信号上进行广播,外部时钟产生用适用pm_clksd信号。 当软件初始化doze模式后,软件处理被挂起。RISC内部模块的时钟信号均被屏蔽,除了定时器单元。然而另外其它片上模块仍然可以正常工作。 当推迟中断(pending interrupt)产生时OR1200从doze模式进入正常的模式。 在sleep模式,所有OR1200的内部单元被屏蔽和采用门控时钟。任意实现可以采用OR1200核低电压进行操作。 当推迟中断(pending interrupt)产生时OR1200从sleep模式进入正常的模式。 动态的门控时钟(unit clock gating on clock by clock basis)在OR1200核中并不支持。 调试单元(Debug unit) 调试单元帮助软件开发者调试他们的系统,它能够提供基本的调试,但是不支持OR1000架构中的诸如watchpoint,breakpoint,program-flow control register等高级调试。 Watchpoint和breakpoint是事件触发,基于调试寄存器中可编程和或者数据流条件(by program- or data-flow matching the conditions)。Breakpoint不同于Watchpoint会暂停当前编程流的执行而开始断点异常处理。 时钟和复位(Clocks Reset) OR1200有一些时钟输入端,clk_cpu是cpu/dsp模块的时钟端,其它模块也有相应的时钟输入信号。Data cache的时钟信号是clk_dc,instruction cache的时钟信号是clk_ic,data mmu模块的时钟是clk_dmmu,指令mmu的时钟是clk_immu,定时器模块的时钟是clk_tt。所有的时钟要尽可能的都有相同的相位和时钟偏移。 OR1200采用异步复位信号,复位信号为rst,当检测到为高电平时,立刻复位所有的ff,当没检测到是,OR1200开始复位异常。 Wishbone 接口(Wishbone interface) 有两组wishbone接口连接到OR1200核,它们也连接到外部设备和存储器子系统中。它们符合Wishbone SOC连接规范,总线宽度是32bits,不支持其它总线宽度。