RISC-V MCU中文社区

【分享】 通过DDR对蜂鸟E203处理器进行内存拓展(一)

发表于 全国大学生集成电路创新创业大赛 2023-05-25 23:24:11
0
1999
2

一、队伍信息:

团队编号:CICC1156

团队名称:兔飞猛进

开发板:DDR200T

二、DDR作用

我们团队计划设计一个与图像处理有关的Soc,这类Soc对硬件的数据容量和吞吐量具有较大要求,但开源蜂鸟E203的内存模块仅有itcm和dtcm, 链接器脚本中的内存分配代码如下图。

MEMORY
{
  ilm (rxai!w) : ORIGIN = 0x80000000, LENGTH = 64K
  ram (wxa!ri) : ORIGIN = 0x90000000, LENGTH = 64K
}

itcm和dtcm的默认大小为64KB,尽管它们的大小可以通过config,v文件中的E203_CFG_ITCM_ADDR_WIDTH和E203_CFG_DTCM_ADDR_WIDTH两个宏定义来调节,但两者都是片上的SRAM资源,不适合配置过大的空间,因此仅通过itcm和dtcm用作内存是远远不足以满足要求的。

三、蜂鸟处理器核内存拓展接口

好在蜂鸟在处理器核上预留了内存地址拓展的接口信号,在e203_subsys_mems.v源文件中实现了一主多从的总线系统

  // There are several slaves for Mem bus, including:
  //  * DM        : 0x0000 0000 -- 0x0000 0FFF
  //  * MROM      : 0x0000 1000 -- 0x0000 1FFF
  //  * QSPI0-RO  : 0x2000 0000 -- 0x3FFF FFFF
  //  * SysMem    : 0x8000 0000 -- 0xFFFF FFFF

通常会选择SysMem进行拓展,因为它的地址空间共有2G,能够满足大多数需求,并且接口清晰。

注意:sysmem地址空间(0x8000 0000—-0xFFFF FFFF)与itcm地址空间(0x8000 0000—-0x8001 0000)和dtcm地址空间(0x9000 0000—-0x9001 0000)有部分重叠,且处理器会优先访问itcm和dtcm。

下面是e203_subsys_mems.v文件中的icb总线接口和注释,可以清晰地看到icb总线协议的两个通道

  // 命令通道
  wire                         sysmem_icb_cmd_valid;   //core读写ddr的请求信号
  wire                         sysmem_icb_cmd_ready;   //ddr接受core的信号
  wire [E203_ADDR_SIZE-1:0]    sysmem_icb_cmd_addr;    //读写操作的地址
  wire                         sysmem_icb_cmd_read;    //读or写操作
  wire [E203_XLEN-1:0]         sysmem_icb_cmd_wdata;   //写操作的数据
  wire [E203_XLEN/8-1:0]       sysmem_icb_cmd_wmask;   //写操作的字节掩码
  // 返回通道
  wire                          sysmem_icb_rsp_valid;  //ddr给core反馈的请求信号
  wire                          sysmem_icb_rsp_ready;  //core接受ddr反馈的信号
  wire                          sysmem_icb_rsp_err;    //反馈的错误标志
  wire  [E203_XLEN-1:0]         sysmem_icb_rsp_rdata;  //读反馈的数据

本次分享就到这里,下一篇将分享控制ddr的IP——mig的接口

喜欢2
用户评论
锟斤拷

锟斤拷 实名认证

手持两把锟斤拷,口中疾呼烫烫烫。脚踏千朵屯屯屯,笑看万物锘锘锘

积分
问答
粉丝
关注
  • RV-STAR 开发板
  • RISC-V处理器设计系列课程
  • 培养RISC-V大学土壤 共建RISC-V教育生态
RV-STAR 开发板