蜂鸟FPGA开发板全知道篇3: 开源SoC简介(3)
本帖最后由 皋陶 于 2020-10-16 23:52 编辑蜂鸟FPGA开发板全知道篇1:开源内核简介蜂鸟FPGA开发板全知道篇2:快速上手介绍(上)蜂鸟FPGA开发板全知道篇2:快速上手介绍(中)蜂鸟FPGA开发板全知道篇2:快速上手介绍(下)蜂鸟FPGA开发板全知道篇3:开源SoC简介(1)蜂鸟FPGA开发板全知道篇3:开源SoC简介(2)蜂鸟FPGA开发板全知道篇3:开源SoC简介(3)蜂鸟FPGA开发板全知道篇3:开源SoC简介(4)蜂鸟FPGA开发板全知道篇4:移植RTOS
目录1总体介绍1.1 总体特性1.2 SoC整体框图1.3 总线地址分配2RISC-V核介绍2.1 处理器核简介2.2 处理器核中断2.2.1 CLINT2.2.2 PLIC2.3 JTAG调试模块3SoC总线介绍3.1 ICB总线协议信号3.2 ICB总线协议时序3.3 SoC总线结构4SoC外设介绍4.1 QSPIMaster4.2 GPIO4.3 UART4.4 PWM4.5 Always-On模块4.5.1 WatchDog4.5.2 RTC4.5.3 PMU4.5.4 LCLKGEN4.5.5 RESETGEN4.6 I2CMaster4.7 HCLKGEN5SoC片上存储器介绍5.1 ITCM5.2 DTCM5.3 ROM6SoC电源域管理6.1 电源域划分6.2 低功耗模式7SoC时钟管理7.1 时钟域划分8SoC复位管理8.1 芯片复位策略8.1.1 POR电路Reset8.1.2 WatchDogReset8.1.3 芯片引脚AON_ERST_N8.1.4 复位树关系9上电流程控制9.1 上电流程9.1.1 从外部Flash开始执行9.1.2 从内部ROM开始执行9.2 上电地址选择10SoC 顶层引脚10.1 SoC顶层引脚分配
4 SoC外设介绍
本章将对挂载在私有设备总线上的外设模块进行介绍。本文在此仅对每个模块功能进行极为简略的描述。
注意:
[*]本文档对SoC的各外设的介绍尚不够详细,由于本SoC中外设模块重用自Freedom E310 SoC且软件完全兼容,可以参阅Freedom E310 SoC的技术文档了解其细节。分别为SiFive-E300-platform-reference-manual-v1.0.1.pdf与SiFive-E310-G000-manual-v1.0.1.pdf,其中有对每个模块的详细功能描述与详细配置寄存器描述供参阅。
[*]或者,在中文书籍《RISC-V架构与嵌入式开发快速入门》中对英文SoC的材料进行了通俗化翻译,并进行深入浅出的系统讲解。感兴趣的用户可以自行搜索此书。
4.1 QSPI Master
有关QSPI的详细介绍请参见文档《SiFive-E300-platform-reference-manual-v1.0.1.pdf》或者中文书籍《RISC-V架构与嵌入式开发快速入门》。本文在此进行中文简述。
在本SoC中,有三个QSPI Master,分别是QSPI0,QSPI1和QSPI2,均是直接复用来自FreedomE310 SoC平台。其中QSPI0专用于外部的Flash,有专用的Pad接口,而QSPI1和QSPI2则通过GPIO复用管脚。
[*]Quad-SPI Flash:(1)专用于连接外部Flash的Quad-SPI(QSPI)接口。(2)并且该QSPI接口还可以被软件配置成为eXecute-In-Place模式,在此模式下,Flash可以被当作一段只读区间直接被当做存储器读取。在默认上电之后,QSPI即处于该模式之下,由于Flash掉电不丢失的特性,因此可以将系统的启动程序存放于外部的Flash中,然后处理器核通过eXecute-In-Place模式的QSPI接口直接访问外部Flash加载启动程序启动。
[*]QSPI:(1)除了上述专用于Flash的QSPI接口之外,SoC还有两个独立的QSPI接口控制器。一个QSPI使用四个片选信号(Chip Selects),一个QSPI使用一个片选信号。两个QSPI均使用GPIO的IOF功能与外界通信。
4.2 GPIO
有关GPIO的详细介绍请参见文档《SiFive-E300-platform-reference-manual-v1.0.1.pdf》或者中文书籍《RISC-V架构与嵌入式开发快速入门》。本文在此进行中文简述。
GPIO全称为General Purpose I/O,其要点如下:
[*]GPIO用于提供一组32 I/O的通用输入输出接口。每个I/O可用被软件配置为输入或者输出,如果是输出可以设置具体的输出值。
[*]每个I/O还可以被配置为IOF(Hardware I/O Functions),也就是将I/O供SoC内部的其他模块复用,譬如SPI,UART,PWM等等。
[*]另外,每个GPIO的I/O均作为一个中断源连接到PLIC的中断源上。
[*]GPIO的32个I/O被SoC内部模块的复用分配如下表所示,其中每个I/O均可以供两个内部模块复用,软件可以通过配置每个I/O使其选择IOF0或者IOF1来选择信号来源。注意:表中黄色高亮部分为本SoC新添加的IO映射,其他IO均与Freedom E310 I/O映射相同。
GPIO的接口分配表
4.3 UART
有关UART的详细介绍请参见文档《SiFive-E300-platform-reference-manual-v1.0.1.pdf》或者中文书籍《RISC-V架构与嵌入式开发快速入门》。本文在此进行中文简述。
UART全称为Universal AsynchronousReceiver-Transmitter(通用异步接收-发射器),本SoC有两个独立的UART,两个UART均使用GPIO的IOF功能与外界通信。
4.4 PWM
有关PWM的详细介绍请参见文档《SiFive-E300-platform-reference-manual-v1.0.1.pdf》或者中文书籍《RISC-V架构与嵌入式开发快速入门》。本文在此进行中文简述。
PWM全称为Pulse-Width Modulator(脉宽调节器)。本SoC有三个独立的PWM,其中两个是16比特的精度,另外一个是8比特的精度,均使用GPIO的IOF功能与外界通信。
4.5 Always-On模块
有关Always-On模块的详细介绍请参见文档《SiFive-E300-platform-reference-manual-v1.0.1.pdf》或者中文书籍《RISC-V架构与嵌入式开发快速入门》。本文在此进行中文简述。
Always-ON模块包含了三个主要子模块,分别是WatchDog,RTC和PMU。
4.5.1 WatchDog
有关WatchDog模块的详细介绍请参见文档《SiFive-E300-platform-reference-manual-v1.0.1.pdf》或者中文书籍《RISC-V架构与嵌入式开发快速入门》。本文在此进行中文简述。
WatchDog全称为WatchDog Timer(看门狗计数器),该计数器位于Always-on Domain中,因此使用低速时钟进行计数,并且可以通过配置其计数的目标值产生中断。
4.5.2 RTC
有关RTC模块的详细介绍请参见文档《SiFive-E300-platform-reference-manual-v1.0.1.pdf》或者中文书籍《RISC-V架构与嵌入式开发快速入门》。本文在此进行中文简述。
RTC全称为Real-TimeCounter(实时计数器),该计数器位于Always-on Domain中,因此使用低速时钟进行计数,并且还能产生中断。
4.5.3 PMU
有关PMU模块的详细介绍请参见文档《SiFive-E300-platform-reference-manual-v1.0.1.pdf》或者中文书籍《RISC-V架构与嵌入式开发快速入门》。本文在此进行中文简述。
PMU全称为Power Management Unit(电源管理单元),用于控制SoC的电源管理。整个SoC除了WatchDog、RTC、PMU等模块处于Always-on Domain之外,其他Main Domain可以在PMU的控制下被置于断电状态以节省功耗,或者重新唤醒等等。
4.5.4 LCLKGEN
LCLKGEN全称为Low-Speed Clock Generation。LCLKGEN主要为Always-On Domain生成时钟。Always-On Domain主要使用低速的实时时钟,频率应为32.768KHz,可以选择来自片上振荡器、外部晶振或者直接通过芯片引脚输入。
LCLKGEN模块的结构取决于具体芯片的工艺和IP,因此本文在此不做介绍。
注意:在FPGA开发板中,LCLKGEN模块为空模块,直接输出由FPGA产生的32.768KHz时钟。
4.5.5 RESETGEN
RESETGEN模块主要为整个SoC模块产生复位信号,请参见第9章了解SoC复位管理。
4.6 I2C Master
I2C Master模块是采用开源的并经过测试验证后的IP core;内部采用wishbone总线通信。寄存器列表如下,关于寄存器的详细介绍请参考《I2CMasterwithWISHBONEBusInterface-Documentation.pdf》或者中文书籍《RISC-V架构与嵌入式开发快速入门》。
注意,上表中地址为偏移地址,总线分配的基地址为0x1004_2000。
4.7 HCLKGEN
HCLKGEN全称为High-Speed Clock Generation。HCLKGEN其主要为Main Domain生成高速时钟(譬如频率为100MHz)。HCLKGEN可以使用片上振荡器、外部晶振和片上PLL产生高速时钟,PLL也可以通过软件配置将其旁路。HCLKGEN模块的结构取决于具体芯片的工艺和IP,因此本文在此不做介绍。
注意:在FPGA开发板中,HCLKGEN模块为空模块,直接输出由FPGA产生的16MHz时钟。
HCLKGEN模块有若干可编程寄存器(地址区间为0x1000_8000~0x1000_8FFF),其用于控制HCLKGEN相关功能。由于HCLKGEN模块的结构取决于具体芯片的工艺和IP,因此本文在此对相关寄存器不做介绍。
5 SoC片上存储器介绍
5.1 ITCM
ITCM为RISC-V Core私有的指令存储器,其特性如下:
[*]大小为64KB。
[*]ITCM数据宽度为64位。
[*]ITCM SRAM虽然主要用于存放指令,但是其地址区间也可以被Load、Store指令访问,从而用来存放数据。
5.2 DTCM
DTCM为RISC-V Core私有的数据存储器,其特性如下:
[*]大小为64KB。
[*]DTCM SRAM数据宽度为32位。
5.3 ROM
在本SoC中使用Verilog常数逻辑化的ROM,本质上就是常数逻辑。
6SoC电源域管理
6.1 电源域划分
为了保证芯片能够进入低功耗模式,将整个芯片划分为两个主要的电源域:
[*]Always-On Domain:(1)此Domain即第5章中介绍的Always-on模块,包括子模块WatchDog,RTC,和PMU,还有Always-On时钟生成电路。
[*]MOFF Domain:(1)MOFF是Most-Off的简称,即芯片中除了Always-On Domain之外的所有其他主体部分。
注意:在FPGA平台上没有真正的电源域。
6.2 低功耗模式
整个芯片分为三个工作模式:
[*]正常模式:Always-On和MOFF均处于正常供电状态。
[*]等待模式:Always-On和MOFF均处于正常供电状态。但是Core执行了一条WFI指令,因此处理器停止执行,时钟被关闭。直到下次被中断唤醒。
[*]休眠模式:Always-On正常供电,但是MOFF的外部电源切断。(1)进入休眠模式由Always-On的PMU模块控制,PMU模块会通过芯片的Pad输出一根控制信号AON_PMU_VDDPADEN,该信号会控制芯片外部的MOFF供电电路使其切断电源。注意:在FPGA平台上没有真正的电源域和切断电源。(2)退出休眠模式由PMU定义的若干唤醒条件唤醒,具体的唤醒条件请参见有关PMU模块的详细介绍请参见文档《SiFive-E300-platform-reference-manual-v1.0.1.pdf》或者中文书籍《RISC-V架构与嵌入式开发快速入门》。
后续文章
此篇为《蜂鸟FPGA开发板全知道篇3:开源SoC简介(3)》,请持续关注,后续即将发布:《蜂鸟FPGA开发板全知道篇3:开源SoC简介(4)》
文章回顾:《蜂鸟FPGA开发板全知道篇3:开源SoC简介(1)》《蜂鸟FPGA开发板全知道篇3:开源SoC简介(2)》完
页:
[1]