1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/lanzhoo-tang-primer20k_-tutorial

Клонировать/Скачать
C01_mcu_design.md 3.5 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
lanzhoo Отправлено 07.06.2024 16:46 0571bdf

[ 返回 ]

MCU硬件设计介绍

芯片整体架构

芯片内部主要包括:Core、JTAG、总线仲裁、指令ROM、数据RAM和外设等模块。

芯片方框图

Core出来两路总线,一路接双口RAM(指令ROM)的b口,用于取指令;另一路是用于LOAD/STORE指令的存储器访问总线,接总线仲裁MUX的h1口。

JTAG模块的存储器访问总线端口接总线仲裁MUX的h0口。

总线仲裁模块(mux_wmask_2x3)是专门定制的总线转接模块,其中主控口两个,h0口优先于h1口,JTAG访问受控总线时,core不能使用,一般这时候,openOCD应该先执行halt命令暂停Core,再进行操作。

受控口三个,d0口接双口RAM(指令ROM)的a口,d1口接外设,d2口接数据RAM(d2的总线带wmask信号线)。

在mux_wmask_2x3模块中,对地址空间进行了划分:

  • 指令RAM:0x0000_0000 - 0x0fff_ffff;
  • 外设:0x1000_0000 - 0x1fff_ffff;
  • 数据RAM:0x2000_0000 - 0x2fff_ffff;

在mux_wmask_2x3模块中,限制了Core对指令RAM只能读,不能写。

外设模块里面包含GPIO、Timer和UART模块,以及用于外设中断允许的intctrl模块,外设模块有一个中断请求端口接Core的外部中断输入端口。

主要的数据流关系为:

  • Core通过取指令总线直接从I_ROM中取指令;
  • JTAG通过mux读写I_ROM,进行代码下载和验证;
  • Core的LOAD/STORE指令通过LOAD/STORE总线经过mux对D_RAM和外设中的I/O寄存器进行读写;
  • Core可以通过LOAD/STORE指令从I_ROM读放在ROM区的静态数据;
  • JTAG可以通过mux直接读写D_RAM和外设中的I/O寄存器;

这个架构是本人的设计,感觉结构比较清晰,便于理解,也便于调试。

该设计下的资源占用情况为:

资源占用

主要是SRAM的资源比较紧张。

对Core的修改

Core的实现代码来源于“小麻雀处理器”(https://gitee.com/xiaowuzxc/SparrowRV )。

主要修改了core.v的总线端口和内部结构:

  • 删除了原来的ICB主端口和ICB从端口,改为简单的存储器访问总线;
  • 删除了原来包含的IRAM,将IRAM移动到Core之外;
  • 相应改动了一下取指令时序;
  • 注释了除法实现模块,以节省资源。

总线中的wmask信号

相对于之前在TangNano9k上的基于tinyriscv core的MCU实现(“https://gitee.com/lanzhoo/TangNano9k_Tutorial/blob/master/MCU_tinyriscv_01.md ”),有个变化是LOAD/STORE总线上增加了wmask信号,原因是SparrowRV core对SW/SH/SB指令的实现方式,采用wmask信号来向存储器指示仅写入哪几个字节。

由于高云的SRAM IP没有提供wmask信号,本设计中使用了“小麻雀处理器”仓中的sram.v代码。

指令ROM和外设没有实现对wmask信号的支持。指令ROM是不需要,本设计方案出于安全功能的考虑,不允许core修改I_RAM中的内容。外设是因为目前外设的实现没考虑这个。(因此要求软件代码中对外设中的变量均设为32位整数)

关于intctrl模块

在ARM的processor结构中,中断控制器(NVIC)的类别称为“core peripheral”,是在core之外,processor之内。本设计中,把它放在外设模块之中。保持芯片内部的“CPU/Core、Memory、Bus、Peripheral”四大块简单分类,便于理解。

[ 返回 ]

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/lanzhoo-tang-primer20k_-tutorial.git
git@api.gitlife.ru:oschina-mirror/lanzhoo-tang-primer20k_-tutorial.git
oschina-mirror
lanzhoo-tang-primer20k_-tutorial
lanzhoo-tang-primer20k_-tutorial
master