1.2 基于蜂鸟E203处理器的完整开发流程

发布于:2025-06-29 ⋅ 阅读:(28) ⋅ 点赞:(0)

蜂鸟E203处理器具有开源、低功耗、可扩展等优势,不仅可以用于研究和教学,还可以直接应用于物联网、AI加速、嵌入式开发等领域。本文将对基于蜂鸟E203处理器的开发流程进行介绍,方便读者快速上手使用。

一、蜂鸟E203处理器硬件特点

蜂鸟E203是一款基于RISC-V指令集的32位嵌入式处理器,采用两级流水线设计(取指+执行),支持RV32IMAC指令集(整数、乘除、原子操作和压缩指令)。其SoC结构采用哈佛架构,指令总线(IBUS)与数据总线(DBUS)分离,通过私有外设总线(PPB)连接调试模块,并通过系统总线(AXI4-Lite或ICB)与内存和外设交互。核心设计注重面积优化,通过静态分支预测和单周期乘法器降低功耗,适用于FPGA和ASIC实现。存储子系统包含紧耦合指令存储器(ITCM)和数据存储器(DTCM),并通过内存映射寄存器(MMIO)管理外设,如GPIO、UART和SPI。中断控制器(CLINT)支持机器模式(M-mode)和用户模式(U-mode)异常处理,符合RISC-V特权架构标准。

蜂鸟E203采用多层总线结构提升并发性:核心通过ICB(Internal Chip Bus)总线访问ITCM/DTCM,而外设通过系统总线连接。ITCM和DTCM的地址空间通常映射到0x8000_0000和0x9000_0000,支持低延迟访问。总线仲裁器(Arbiter)优先处理核心的数据请求,避免访存冲突。内存管理通过PMP(Physical Memory Protection)实现区域权限控制,例如将Flash设为只执行(X)、RAM设为读写(RW)。对于DDR200T开发板,需在FPGA工程中配置Xilinx MIG(Memory Interface Generator)以扩展外部DDR3内存,但默认设计更依赖片上Block RAM(BRAM)模拟TCM。

蜂鸟E203支持通过NICE(Nuclei Instruction Co-Unit Extension)接口扩展自定义指令,典型应用包括加密算法(AES/SHA)或DSP运算。开发者需在RTL中实现协处理器,并通过NICE接口与核心流水线交互。处理器核在译码阶段识别到自定义指令时,会通过NICE接口的指令请求通道将自定义指令派遣到协处理器单元,协处理器执行完毕后通过反馈通道将执行结果写回。此外,NICE接口中还提供了独立的内存访问通道,使得协处理器具有直接访问系统内存的能力。

二、生成比特流并烧写到开发板

进行硬件设计后,通常需要先进行仿真验证,该步骤可参考我们的上一篇文章:1.1 基于Icarus Verilog、ModelSim和Vivado对蜂鸟E203处理器进行仿真。经过仿真验证后,需要进行综合、实现、生成比特流和烧写。综合阶段将RTL代码转换为门级网表,实现阶段完成布局布线并生成比特流文件。比特流文件可直接通过JTAG烧写到FPGA中运行,但断电后配置会丢失。为了确保DDR200T开发板在每次上电时自动加载配置,需要将比特流转换为MCS文件,并烧写到板载的SPI Flash中。MCS文件包含了FPGA配置数据的非易失性存储版本,开发板启动时会从Flash读取配置并初始化FPGA。这一过程避免了每次上电都需要重新通过JTAG烧写比特流的麻烦,尤其适用于独立运行的嵌入式系统。

DDR200T开发板是基于Xilinx Artix-7 FPGA的实验平台,主要用于验证RISC-V处理器(如蜂鸟E203)的硬件设计。该开发板提供丰富的外设接口(如GPIO、UART、SPI Flash),并支持通过JTAG或QSPI Flash启动。烧写MCS文件时,需在Vivado中生成MCS格式文件,并通过“Program Flash”功能将其写入SPI Flash的指定地址。开发板上电后,FPGA会自动从Flash加载配置,使蜂鸟E203处理器进入工作状态,从而运行存储在Flash中的软件代码。这一流程确保了硬件系统的稳定性和可重复性,适用于产品原型开发和长期测试。

下面我们具体演示这一过程,Vivado工程创建已在上一篇文章中进行了介绍:1.1 基于Icarus Verilog、ModelSim和Vivado对蜂鸟E203处理器进行仿真,这里不再重复。创建好工程后,我们点击Vivado左下角的Generate Bitstream生成比特流文件(.bit)。然后基于比特流文件生成MCS文件,首先点击菜单栏的Tools,再点击下拉框中的Generate Memory Configuration File,在弹出的对话框中进入如下设置,Filename处注意用绝对路径,可以自行命名MCS文件。比特流文件的路径参考下图,data文件是可选的,我们这里并不需要data文件。最后点击OK按钮即可生成MCS文件。

之后我们连接开发板,点击下面的按钮打开Hardware Manager,之后右键点击xc7a200t,选择Add Confuguration Memory Device。

此时弹出一个对话框,在Search搜索框中输入mt25ql128,点击列表中的唯一选择,再点击OK按钮。

此时弹出新的对话框,在Configuration file中选择我们刚刚生成的MCS文件,再点击OK,Hardware Manager开始烧写MCS文件到DDR200T的Flash中。

三、Nuclei Studio中软件代码的编译与调试

Nuclei Studio软件的下载安装与工程创建这里不再详细介绍,可以参考Nuclei Studio教程,我们先新建一个Hello World模板工程。Nuclei Studio默认的字体比较小,可以通过下图的设置增大字体。

之后我们添加一个串口终端,用于显示printf函数打印的信息。依次点击Window➜Show View➜Terminal,此时会弹出一个空白的终端,我们点击上面的Open a Terminal图标,并进行如下图所示的配置,最后点击确定,串口终端便创建完成。

然后将DDR200T开发板与电脑主机正确连接,尝试编译并运行整个程序。将Launch Mode选为Run,点击左上角的Build和Run按钮,可以看到串口终端正确打印出预期的信息。

点击红色的Stop按钮结束运行,将Launch Mode选为Debug。我们在程序中添加一个断点用于调试,如下图所示,断点添加方式为双击代码左侧的蓝色区域。

之后点击左上角的Debug按钮,此时调试器会自动停在__get_rv_cycle函数中,我们点击上面的Resume按钮,程序便会执行到我们设置的断点位置。

此时我们可以对变量、寄存器和内存等进行查看。例如,我们可以看到栈指针(sp)的值为0x9000ffd0。如果我们想查看sp指向地址的具体值,可以添加一个内存浏览器窗口,依次点击Window➜Show View➜Memory Browser,在弹出的窗口中输入地址0x9000ffd0,再点击右侧的Go,即可显示对应地址的数据。

 四、总结

本文介绍了蜂鸟E203处理器的开发流程。蜂鸟E203是一款基于RISC-V的32位嵌入式处理器,采用两级流水线设计,支持RV32IMAC指令集,具有低功耗和可扩展特性。文章详细讲解了其硬件架构、存储系统和总线结构,并提供了完整开发流程,包括功能仿真、比特流生成、Flash烧写以及NucleiStudio中的软件调试方法。通过示例演示了如何通过串口终端和调试器进行程序验证,为开发者提供了实用的参考指南。


网站公告

今日签到

点亮在社区的每一天
去签到