修订历史

版本号 修订日期 修订的章节 修订的内容
1.0 2019/9/11 N/A 初始版本
2.0 2020/1/11 N/A 修订了若干笔误,重塑了文档章节结构

1. N100系列内核概述

Nuclei N100系列处理器内核(简称N100系列内核)是由芯来科技开发的一款全国产自主可控的商用RISC-V处理器内核系列,主要面向极低功耗与极小面积的场景而设计,非常适合替代传统的8位内核或16位内核升级需求、或者ARM Cortex-M0/M0+内核,应用于数模混合、IoT或其他超低功耗场景。

1.1. N100系列内核特性列表

N100系列内核的特性列表如下:

  • CPU内核(CPU Core)

    • 2级变长流水线架构,采用一流的处理器架构设计,实现业界最小的面积与最低的成本。

    • 仅支持机器模式(Machine Mode Only)。

    • 指令和数据地址宽度为20位(总共可以寻址到1MB的内存空间)以节省面积。

  • 支持指令集架构(ISA,Instruction Set Architecture)

    • N100系列处理器核支持32位的RISC-V指令集架构,支持RV32EC指令子集的组合。不支持硬件的乘除法指令。
  • 总线接口

    • 支持可配置的系统总线接口(支持标准的AHB-Lite或ICB接口协议),用于访问外部指令和数据。
  • 调试功能

    • 支持标准的四线JTAG和两线JTAG接口。

    • 支持RISC-V调试标准。

    • 可配置2个硬件断点(Hardware Breakpoints)。

    • 支持可配置的调试器连接超时功能。

    • 支持成熟的交互式调试工具。

  • 低功耗管理

    • 支持WFI(Wait For Interrupt)与WFE(Wait For Event)进入休眠模式。

    • 支持两级休眠模式:浅度休眠与深度休眠。

  • 内核私有的计时器单元(Core Priviate Timer,简称TIMER)

    • 可配置32比特宽的实时计时器,产生计时器中断。
  • 内核私有的性能计数器单元(Core Priviate Performance Monitor)

    • 可配置64比特宽的周期计数器(mcycle)和指令计数器(minstret)。
  • 内核私有的中断控制器(Core Priviate Interrupt Controller,简称IRQC)

    • 支持上述的软件中断、计时器中断和存储器访问错误中断(内核自己产生)和以及中断(可配置数目)。

    • 不同的中断来源拥有不同的优先级。

    • 支持快速向量中断处理机制。

  • 软件开发工具:

    • N100系列处理器核支持RISC-V标准的编译工具链,以及图形化集成开发环境(Integrated Development Environment,IDE)。

1.2. N100系列内核指令集与架构

N100系列支持的指令集和架构详情请参见《Nuclei_N100系列指令架构手册》。

1.3. N100系列内核层次结构图

N100系列内核的顶层如图 1‑1所示。Nuclei N100系列处理器内核的组织结构主要包含如下要点:

  • Core Wrapper为整个处理器内核的顶层。除了Core以外,在Core Wrapper下面还包含了如下主要组件:

    • DEBUG:处理JTAG接口和相关的调试功能。

    • Reset Sync:对异步复位信号进行同步。

  • uCore位于Core层次结构之下,为处理器内核的主体部分。

  • 除了uCore之外,在Core层次结构之下还包含了如下主要组件:

    • IRQC:中断控制单元。

    • TIMER:计时器单元。

    • BIU:对外部PPI接口和MEM接口的控制。

    • Misc Ctrl:其他控制模块。

图 1‑1 N100系列内核顶层示意图

2. N100系列内核功能简介

2.1. N100系列内核时钟域介绍

N100系列内核的时钟域划分如图 2‑1中所示,整个处理器内核分为两个彼此异步的时钟域:

  • 工作时钟域,由输入的时钟core_clk和core_clk_aon驱动处理器内核的绝大部分功能逻辑。注意:

    • core_clk和core_clk_aon为来自于同一个时钟源的同频同相时钟。

    • core_clk为主工作时钟,驱动处理器内核内部的主要工作逻辑,并且可以在系统层面上被全局门控。

    • core_clk_aon为常开时钟,驱动内核中的常开(Always-On)逻辑,主要包括IRQC、TIMER以及DEBUG。有关IRQC和TIMER的详情请参见《Nuclei_N100系列指令架构手册》。

  • JTAG TCK时钟域,由输入的信号jtag_TCK驱动处理器内核的JTAG调试相关逻辑。

  • JTAG TMS时钟域,由输入信号jtag_TMS信号驱动处理器内核的两线JTAG调试相关逻辑。注意:由于N100系列处理器内核需要用到jtag_TMS作为时钟,来驱动两线/四线切换的逻辑,因此,即使用户不用两线模式,也需要将jtag_TMS设为异步时钟。

图 2‑1 N100内核时钟域示意图

上述三个时钟域之间完全异步(实际上jtag_TMS和jtag_TCK是相关的时钟,但为了时序约束简单,可以将两者当成异步时钟来约束),在处理器内核的内部实现中已经进行了异步跨时钟域的处理,用户需要在SoC层面将三者约束成异步时钟。

2.2. N100系列内核电源域介绍

N100系列内核的内部并没有划分电源域,SoC系统集成者可以根据N100系列内核的层次结构自行划分电源域和进行跨电源域处理。

2.3. N100系列内核接口简介

Nuclei N100系列处理器内核包含如下几类接口:

  • 时钟和复位接口

  • 调试接口

  • 外部中断接口

  • 总线接口

  • 其他功能接口

请参见第3.4节了解接口的详细信息。

2.4. N100系列内核地址空间分配

N100系列内核的地址空间分配如表 2‑1中所示。

表 2‑1 N100内核地址空间分配

模块或接口 基地址 偏移地址区间 描述
DEBUG 可配置 0x000\~ 0xFFF DEBUG单元的地址空间
注意:
1. DEBUG主要用于调试器使用,普通软件程序不应该使用此区间。
2. DEBUG单元位于Core内部,属于私有于Core的外设。
系统总线接口 N/A N/A 除了上述DEBUG单元的地址之外的地址区间,均会通过系统总线接口对外进行访问。
注:有关可配置参数的详细信息请参见本文档第4章。

2.5. N100系列内核的特权模式

N100系列内核只支持一个特权模式(Privilege Modes),即仅支持机器模式(Machine Mode Only)。有关Privilege Modes的详情请参见《Nuclei_N100系列指令架构手册》。

2.6. N100系列内核的私有设备

如图1‑1中所示,N100系列内核的Core层次结构之下,除了uCore之外,还包含了如下私有设备:

  • DEBUG:处理JTAG接口和相关的调试功能,使用存储器地址寻址方式进行访问,有关其具体的地址区间分配请参见第2.4节。

  • IRQC:内核中断控制单元,使用CSR指令寻址方式进行访问。

  • TIMER:内核私有计时器单元,使用CSR指令寻址方式进行访问。

N100系列内核的调试机制

N100系列内核支持JTAG调试接口,以及成熟的交互式调试工具(譬如:GDB、IAR,J-Link,Trace32等)。有关调试工具详情请参见《Nuclei_N100系列IDE使用说明》和《Nuclei_N100系列SDK使用说明》。注意:

  • N100系列内核可以配置是否支持硬件断点(Hardware Breakpoint)。硬件断点主要用于向只读区间(譬如Flash)设置断点。

N100系列内核定义了一根输入信号,i_dbg_stop可以通过其输入信号的值来进行控制:

  • 如果i_dbg_stop信号的值为1,则处理器内核的调试功能被关闭。

  • 如果i_dbg_stop信号的值为0,则处理器内核的调试功能正常工作。

2.8. N100系列内核的中断和异常机制

有关N100系列的中断和异常机制详细介绍,请参见《Nuclei_N100系列指令架构手册》。

2.9. N100系列内核的CSR寄存器

RISC-V的架构中定义了一些控制和状态寄存器(Control and Status Register,CSR),用于配置或记录一些运行的状态。CSR寄存器是处理器核内部的寄存器,使用其专有的12位地址编码空间。详情请参见《Nuclei_N100系列指令架构手册》了解其详情。

2.10. N100系列内核的性能计数器

N100系列内核定义了如下两种性能计数器:

  • 时钟计数器(Cycle Counter):

    • 一个64位宽的时钟周期计数器,用于反映处理器执行了多少个时钟周期。只要处理器处于执行状态时,此计数器便会不断自增计数。

    • CSR寄存器mcycle反映了该计数器低32位的值,CSR寄存器mcycleh寄存器反映了该计数器高32位的值。有关mcycle和mcycleh的详情请参见《Nuclei_N100系列指令架构手册》。

  • 指令完成计数器(Instruction Retirement Counter):

  • 一个64位宽的指令完成计数器,用于反映处理器成功执行了多少条指令。只要处理器每成功执行完成一条指令,此计数器便会自增计数。

  • CSR寄存器minstret反映了该计数器低32位的值,CSR寄存器minstreth反映了该计数器高32位的值。有关minstret和minstreth的详情请参见《Nuclei_N100系列指令架构手册》。

时钟计数器(Cycle Counter)和指令完成计数器(Instruction Retirement Counter)通常用于测量性能。

默认情况下,计数器在内核复位后的值为0,然后一直不断的自增计数。由于考虑到计数器计数会消耗某些动态功耗,因此在N100系列处理器内核的实现中,在自定义的CSR寄存器mcountinhibit中额外增加了若干位控制域,软件可以配置相应的控制域分别将不同的计数器关停,从而在不需要使用它们之时停止计数以达到省电的作用。

有关CSR寄存器mcountinhibit的详情请参见《Nuclei_N100系列指令架构手册》。

2.11. N100系列内核的计时器单元

N100系列内核定义了一个32位的计时器(Timer Counter),该计时器的值实时反映在寄存器mtime中。N100系列内核还定义了一个32位的寄存器mtimecmp,该寄存器作为计时器的比较值,假设计时器的值mtime大于或者等于mtimecmp的值,则产生计时器中断。

在N100系列处理器内核的实现中,mtime/mtimecmp均由TIMER单元实现,有关N100系列内核的TIMER单元详情请参见《Nuclei_N100系列指令架构手册》。

2.11.1. 调试模式时的计时器行为

当N100系列内核在处于调试模式时会偶尔执行一些调试器(Debugger)设定的代码(DEBUG单元中,对于用户透明不可见)以支持调试器的功能。如果在执行这些调试器设定的代码时计时器仍然计数,则无法真实反映被调试的程序的真实行为。因此N100系列内核在执行调试器设定的代码时,计时器会自动停止计数。

2.11.2. 正常模式时的计时器行为

默认情况下,计时器在内核复位后的值为0,然后一直不断的自增计时。由于考虑到计时器计数会消耗某些动态功耗,因此在N100系列处理器内核的实现中,在自定义的寄存器mstop中设置了一个位控制域,软件可以配置该控制域将计时器关停,从而在不需要使用它们之时停止计数以达到省电的作用。有关寄存器mstop的详情请参见《Nuclei_N100系列指令架构手册》。

2.12. N100系列内核的低功耗机制

N100内核的低功耗机制体现在如下几个方面:

  • N100系列内核内部的各个主要单元的时钟在空闲时都会自动地会被门控关闭以节省静态功耗。

  • N100系列内核能够通过常见的WFI(Wait for Interrupt)和WFE(Wait for Event)机制支持休眠(Sleep)模式以实现较低的动态和静态功耗,有关 “Wait for Interrupt”和“Wait for Event”的详情请参见《Nuclei_N100系列指令架构手册》。

2.12.1. 进入休眠状态的时钟控制

N100系列内核可以通过执行WFI指令进入休眠状态,有关“如何进入休眠状态”的具体详情请参见《Nuclei_N100系列指令架构手册》。

N100系列内核的输出信号core_sleep_value可以用于指示不同的休眠模式(0或者1),通常可以用休眠模式0作为浅度休眠,休眠模式1作为深度休眠。注意:当进入深度休眠模式之后,处理器内核将不能够再被调试接口进行调试。

处理器内核进入休眠状态时的时钟控制(参考方案)要点如下:

  • 如图 2‑1中,当成功的执行了WFI后,N100系列内核的输出信号core_wfi_mode会拉高,指示此处理器核处于执行WFI指令之后的休眠状态;SoC系统层面可以使用core_wfi_mode控制外部的总门控时钟将处理器内核的主工作时钟core_clk关闭。

  • 如果N100系列内核进入的是深度休眠模式(core_sleep_value为1),SoC系统可以根据其实际情况决定是否将处内核的常开时钟core_clk_aon也关闭。

2.12.2. 退出休眠状态的时钟控制

处理器内核可以被中断(Interrupt)、事件(Event)唤醒,有关“如何退出休眠状态”的具体详情请参见《Nuclei_N100系列指令架构手册》。

处理器内核退出休眠状态时的时钟控制要点如下:

  • 如果是等待中断(Interrupt)的唤醒,由于N100系列内核的中断需要经过IRQC单元的处理和分发,中断只有通过了使能和优先级阈值等条件的判断之后,才能够唤醒内核。除此之外,还需特别注意处理器内核的常开时钟(core_clk_aon)是否关闭:

    • 如第2.1节中所述,由于TIMER受core_clk_aon驱动,因此:

      • 假设SoC系统层面已经将处理器内核的常开时钟(core_clk_aon)关闭,则TIMER单元由于无时钟,因此其无法产生计时器中断和软件中断。
    • 如第2.1节中所述,由于IRQC受core_clk_aon驱动,因此:

      • 假设SoC系统层面已经将处理器内核的常开时钟(core_clk_aon)关闭,外部中断信号线拉高之后必须一直保持,直到SoC系统层面将处理器内核的的常开时钟(core_clk_aon)再次打开。否则处理器内核的IRQC单元由于没有时钟,无法采样到外部中断信号,从而导致处理器内核无法被唤醒。
  • 如果是等待事件(Event)的唤醒,则内核一旦(通过core_clk_aon时钟)采样到输入信号rx_evt(Event信号,高电平有效)­,便从休眠状态中被唤醒。除此之外,还需特别注意处理器内核的常开时钟(core_clk_aon)是否关闭:

    • 假设SoC系统层面已经将处理器内核的常开时钟(core_clk_aon)关闭,输入信号rx_evt拉高之后必须一直保持,直到SoC系统层面将处理器内核的的常开时钟(core_clk_aon)再次打开。否则处理器内核的Event采样逻辑由于没有时钟,无法采样到Event,从而无法被唤醒。
  • 处理器被唤醒后则会马上将输出信号core_wfi_mode拉低。假设SoC系统层面使用了core_wfi_mode控制内核的core_clk门控时钟,则随着core_wfi_mode信号的拉低,处理器内核的工作时钟core_clk将会重新被打开。

3. N100系列内核接口介绍

3.1. 时钟和复位接口

N100系列内核的时钟和复位接口信号如表 3‑1中所示。

表 3‑1 时钟和复位接口

信号名 方向 位宽 描述
core_clk_aon Input 1 此常开时钟用于驱动N100系列处理器内核内部的常开逻辑(Always-On Logics)。请参见第2.1节了解详情。
core_clk Input 1 此工作时钟用于驱动N100系列处理器内核内部的主要工作逻辑。请参见第2.1节了解详情。
por_reset_n Input 1 上电复位信号。该信号低电平有效,此复位信号将复位整个N100系列处理器内核,包括JTAG调试部分。
注意:此信号在内核内部会进行异步时钟同步处理,即将其处理成为“异步置位同步释放”的复位信号。
core_reset_n Input 1 系统复位信号。该信号低电平有效,此复位信号将复位除了JTAG调试部分之外的N100系列处理器内核主要功能部分。
注意:此信号在内核内部会进行异步时钟同步处理,即将其处理成为“异步置位同步释放”的复位信号。
reset_bypass Input 1 如上所述,异步复位信号需要在N100系列处理器内核内部进行“异步置位同步释放”的处理,需要使用到“几级寄存器同步(Synchronizer)”电路。
如果输入信号reset_bypass为高,则将此Synchronizer旁路(Bypass)掉,以便于测试目的(Design For Test)。
注意:如果输入信号reset_bypass为高,core_reset_n复位信号会被旁路,仅有por_reset_n复位信号有效。
clkgate_bypass Input 1 如上所述,N100系列处理器内核内部会使用到门控时钟。
如果输入信号clkgate_bypass为高,则将时钟门控(Bypass)掉,以便于测试(Design For Test)。

3.2. 四线JTAG与两线JTAG调试接口

N100系列内核支持标准四线JTAG与两线JTAG接口(两种模式同时支持),兼容IEEE 1149.7 T4 Wide标准。支持标准两线调试模式中的Oscan0和Oscan1扫描格式和标准4线JTAG调试模式。

N100系列内核的两线调试接口信号如表 3‑2中所示。

表 3‑2 调试接口

信号名 方向 位宽 描述 备注
jtag_TCK Input 1 标准JTAG/两线JTAG TCK信号。 需约束为异步时钟
jtag_TMS_in Input 1 标准JTAG/两线JTAG TMS输入信号。 支持两线JTAG模式,需约束为异步时钟
jtag_TMS_out Output 1 两线JTAG TMS输出信号。注意,如果选择不支持两线JTAG, jtag_TMS_out信号不需要连到TMS引脚。
jtag_BK_TMS Output 1 两线JTAG TMS总线保持信号,当该信号拉高时,会使能TMS引脚的总线保持功能。 注意:如果选择支持两线JTAG接口,TMS的引脚需要有总线保持功能,如果选择不支持两线JTAG, jtag_BK_TMS信号不需要连到TMS引脚。 该信号详细功能和实现方式将在下文描述
jtag_DRV_TMS Output 1 两线JTAG TMS的输出使能信号,当TMS进行有效的输出之时,此使能信号为高电平,否则为低电平。 注意,如果选择不支持两线JTAG,jtag_DRV_TMS信号不需要连到TMS引脚。
jtag_TDI Input 1 标准JTAG TDI信号。注意,如果选择支持两线JTAG接口,在jtag_BK_TMS信号拉高时,TDI引脚可以被复用成其它功能。 如果选择不支持标准四线JTAG调试接口时,该信号可以不引出到SoC顶层。
jtag_TDO Output 1 标准JTAG TDO信号。注意,如果选择支持两线JTAG接口,在jtag_BK_TMS信号拉高时,TDO引脚可以被复用成其它功能。 同上
jtag_DRV_TDO Output 1 JTAG TDO的输出使能信号,当TDO进行有效的输出之时,此使能信号为高电平,否则为低电平。 同上
jtag_dwen Output 1 N100系列内核调试模块中的两线调试功能指示信号,高电平有效。当调试模块进入到两线调试握手阶段或数据传输阶段时,该信号有效。 若SoC系统中含有其他JTAG TAP串联在整个JTAG链上,两线调试机制可能导致其他TAP误动作。因此,可使用该信号关闭其他TAP,防止误动作。

两线JTAG调试接口实例连接如下图所示。

图 3‑1实例JTAG连接方式

其中,标注为Optional的部分可以不实现。若不实现,则系统仅支持两线调试模式(即兼容IEEE 1149.7 T4 Narrow标准),而不支持两线/四线调试混合调试模式。

在IEEE 1149.7规范中规定,支持两线调试功能的TAP要求芯片的JTAG_TMS_PAD有总线保持(Bus Keep)功能用于满足要求的电气特性,否则会导致通讯失败。芯来科技定制的调试器(HBird Debugger Kit)在内部已经内置总线保持器,可以支持不规范设备(芯片的JTAG_TMS_PAD没有Bus Keep功能)的两线调试。但是第三方调试器一般不会内置总线保持器。因此,如果用户希望芯片产品完整兼容IEEE 1149.7规范的两线JTAG调试功能,则建议实现含有Bus Keep的JTAG_TMS_PAD。

若用户难以直接获得带有Bus Keep功能的IO PAD,可通过“可控上下拉IO PAD”实现总线保持器功能。

图 3‑2 可控上下拉的IO PAD

上图描述了典型的可控上下拉IO PAD的内部原理图,用户可以使用如下方式基于该PAD实现总线保持功能,以下列出实现总线保持功能的实例代码。


//默认上拉,当总线保持模式时,弱输出pad_in值,保持电平
assign rpuen = bk_en?  pad_in : 1’b1; 
assign rpden = bk_en? ~pad_in : 1’b0;

//注意:上述代码的bk_en信号可以直接来自于jtag_BK_TMS,或者结合芯片上的其他软件可配置的使能位,譬如bk_en = jtag_BK_TMS & ctrl_bk_enable。ctrl_bk_enable可以是来自芯片上的某个软件可配的使能寄存器,则软件可以通过编程该寄存器强制关闭该Bus Keep功能。

3.3. 外部中断接口

N100系列内核的外部中断接口信号如表 3‑3中所示。

表 3‑3 外部中断接口

信号名 方向 位宽 描述
clic_irq Input 可配置 来自外部系统的外部中断信号,每个比特对应一个外部中断信号。
  • 注意:

  • clic_irq信号在处理器内核内部并没有进行异步时钟同步处理,因此,如果外部中断源与处理器内核处于异步时钟域,则系统集成者需要在外部对其进行异步时钟同步处理。

  • 有关中断机制的详细介绍请参见《Nuclei_N100系列指令架构手册》。

3.4. 总线接口

N100系列内核只有一个系统总线接口(System Memory Interface,简称MEM)。

MEM接口用于N100系列处理器内核访问外部的系统总线,MEM接口可以配置为AHB-Lite接口或者ICB接口(芯来科技自定义的总线接口)。

  • 当配置为AHB-Lite时,MEM接口信号如表 3‑4中所示。

  • 当配置为ICB时,MEM接口信号如表 3‑5中所示。

表 3‑4 MEM AHB-Lite接口信号表

信号名 方向 位宽 描述
htrans Output 2 AHB-Lite协议的HTRANS信号。
注:在MEM接口,可以发出IDLE和NONSEQUENTIAL两种类型的Transaction。
hwrite Output 1 AHB-Lite协议的HWRITE信号
haddr Output 20 AHB-Lite协议的HADDR信号
hsize Output 3 AHB-Lite协议的HSIZE信号。
注:在MEM接口,可以发出8、16或者32比特的Transaction。
hburst Output 3 AHB-Lite协议的HBURST信号。
注:在N100系列内核的MEM接口,该信号的值固定是b000。
hprot Output 4 AHB-Lite协议的HPROT信号。
注:在N100系列内核的MEM接口:
HPROT[3]的值固定是0(表示Non-Cacheable)。
HPROT[2]的值固定是0(表示Non-Bufferable)。
HPROT[1]的值固定是1(表示这是Machine Mode下的访问)。
HPROT[0]的值可以是1(表示这是数据访问)或者是0(表示这是取指令访问)。
hmastlock output 1 AHB-Lite协议的HLOCK信号。
注:在N100系列内核的MEM接口,该信号的值固定是0。
master Output 2 该信号不是AHB-Lite的标准信号。
注:在MEM接口,此信号的值可以是b01(表示这是Debug-Mode下的访问),或者是b00(表示这是普通的数据访问),或者是b10(表示这是普通的取指令访问)。
hwdata Output 32 AHB-Lite协议的HWDATA信号。
hrdata Input 32 AHB-Lite协议的HRDATA信号。
hresp Input 2 AHB-Lite协议的HRESP信号。
注:在MEM接口,仅支持OKAY和ERROR类型的反馈。
hready Input 1 AHB-Lite协议的HREADY信号。

表 3‑5 MEM ICB接口信号表

信号名 方向 位宽 描述
mem_icb_cmd_valid Output 1 如果该信号为1,则表示是一个有效的访问。
mem_icb_cmd_ready Input 1 如果该信号为1,则表示当前的访问被接受。
mem_icb_cmd_addr Output 20 该访问的地址信号。
mem_icb_cmd_read Output 1 如果该信号为1,则表示该访问是读操作,否则表示写操作。
mem_icb_cmd_dmode Output 1 如果该信号为1,则表示该访问是Debug-Mode下的操作。
mem_icb_cmd_wdata Output 32 该访问的写数据。
mem_icb_cmd_wmask Output 4 该访问的写数据字节使能。
mem_icb_cmd_size Output 2 该访问的数据大小:
0:字节访问;
1:半字访问;
2:字访问。
mem_icb_cmd_hprot Output 4 该访问的附加信息:
mem_icb_cmd_hprot[3:2]:保留位;
mem_icb_cmd_hpro [1]的值固定是1(表示这是Machine Mode下的访问)。
mem_icb_cmd_hpro[0]的值可以是1(表示这是数据访问)或者是0(表示这是取指令访问)。
mem_icb_rsp_valid Input 1 该访问的反馈有效信号,为1表示当前是有效的反馈。
mem_icb_rsp_ready Output 1 该访问的反馈接受信号。
mem_icb_rsp_err Input 1 该访问的反馈错误标志。
mem_icb_rsp_rdata Input 32 该读访问的反馈数据。

3.5. 其他功能接口

表 3‑6 其他功能接口信号表

信号名 方向 位宽 描述
tx_evt Output 1 N100系列处理器内核可以通过此输出信号txevt产生一个单周期脉冲信号,作为对外发送的Event信号。
请参见《Nuclei_N100系列指令架构手册》了解CSR寄存器txevt的详细行为。
rx_evt Input 1 输入信号作为Wait For Event的唤醒信号,请参见第2.12.2节了解此输入信号的详情。
请参见《Nuclei_N100系列指令架构手册》了解Wait For Event机制的详情。
mtime_toggle_a Input 1 来自于SoC系统层面的脉冲信号,用于驱动Core内部TIMER单元的计时器。该信号通常用于System Tick功能。
注意:
该信号被当做异步输入信号。
在Core内部会对该信号进行异步信号同步处理(使用几级寄存器进行同步)。
在进行同步处理之后,会根据Core的主时钟对此信号进行上升沿和下降沿的检测,任何一个边沿检测到就会触发TIMER的计时器自增加一。
建议此信号使用慢速时钟驱动的寄存器作为输入信号,处理器内核内部进行上下边沿检测后产生的自增频率即等于慢速时钟的频率,如图3‑3中所示。慢速时钟的频率越低,则内部计时器的自增频率越低,可以降低动态功耗。
dbg_toggle_a Input 1 来自于SoC系统层面的Debug超时计数器的脉冲信号,用于防止调试器意外掉线后,Reset Halt置位导致系统在复位后挂起的问题。
注意:
该信号只有在配置了调试器连接超时功能才存在。
该信号被当做异步输入信号。
在Core内部会对该信号进行异步信号同步处理(使用几级寄存器进行同步)。
为了达到170-320ms的超时时间,建议使用25kHz\~50kHz的频率驱动该输入信号。
hart_id Input 1 该Core的HART ID指示信号,在SoC集成时,可以将此信号赋予某个常数值或者信号值。该ID号会体现在Core内部的CSR寄存器mhartid中。在单核情形下,可以将此信号直接接0。
reset_vector Input 32 该输入信号用于指定处理器被reset后的PC初始值。在SoC层面可以通过控制此信号达到控制处理器核上电PC初始值的效果。
hart_halted Output 1 该输出信号如果为高电平,则指示此Core处于调试模式状态。
i_dbg_stop input 1 该信号如果位高电平,可以将Core的调试功能关闭,从而让外界的JTAG Debugger没法对Core进行调试。
ndmreset output 1 该信号是JTAG 调试器发出的对整个System进行reset的请求。系统集成者可以用此信号reset整个SoC,并且通过连接到Core的core_reset_n(注意:不能够连接到por_reset_n)达到复位Core的工作域的效果。
core_wfi_mode Output 1 该输出信号如果为高电平,则指示此Core处于执行WFI指令之后的Sleep状态。
core_sleep_value Output 1 该输出信号指示Core的Sleep模式。请参见《Nuclei_N100系列指令架构手册》了解“进入休眠状态”的详情。

图 3‑3 mtime_toggle_a信号生成示意图

4. N100系列内核配置选项介绍

N100系列的每款处理器均具有一定的可配置性,具体配置选项如表 4‑1所示。如何对N100系列内核进行配置生成相应的RTL源代码,请参见《N100系列内核快速集成手册》。

表 4‑1 N100系列内核配置选项

类别 功能 描述
调试模块 是否有调试模块 N100_CFG_HAS_DEBUG 如果配置了此选项,则使用调试模块。
注意:调试模块会增加大约5K Gate的逻辑开销。
Debug模块的基地址 N100_CFG_DEBUG_BASE_ADDR 配置Debug模块的地址区间基地址。注意:Debug模块占据4K的地址空间。
是否有Hardware Trigger N100_CFG_DEBUG_TRIGM 配置是否支持Hardware Trigger(如果支持,则固定为2组)
注意:每一组Trigger需要消耗约128bits寄存器的开销。
是否支持调试器连接超时功能 N100_CFG_DEBUG_TIMEOUT 如果添加了此宏,则能够在调试器意外拔除后,自动退出调试状态,使处理器内核进入正常运行模式。
调试连接超时计数器位宽 N100_CFG_DEBUG_COUNTLEN 超时时间计算公式为为2\^N100_CFG_DEBUG_COUNTLEN/(2*fdbg_toggle_a)。
注意:用户需要合理配置此宏,使得超时时间控制在170-320ms的范围内。
TIMER相关 是否配置私有TIMER模块 N100_CFG_HAS_TMR_PRIVATE 如果配置了此选项,则使用私有TIMER模块。
注意:TIMER模块会增加大约1K Gate的逻辑开销。
IRQC相关 中断数量 N100_CFG_IRQ_NUM 配置外部中断个数(1\~29)
MEM接口相关 MEM接口类型 N100_CFG_MEM_TYPE_AHBL 定义MEM接口的类型,配置此宏,则支持AHB-Lite总线接口,否则支持ICB总线接口。
性能计数器相关 是否配置有性能计数器 N100_CFG_HAS_PMONITOR 如果配置了此选项,则具有性能计数器模块。
注意:性能计数器模块会增加大约2K Gate的逻辑开销。
MTVT相关 中断向量表基地址 N100_CFG_MTVT_BASE_ADDR 设置中断向量表的基地址
MTVEC相关 异常入口地址 N100_CFG_MTVEC_BASE_ADDR 设置异常入口地址