[ 返回 ]
芯片内部主要包括: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模块中,对地址空间进行了划分:
在mux_wmask_2x3模块中,限制了Core对指令RAM只能读,不能写。
外设模块里面包含GPIO、Timer和UART模块,以及用于外设中断允许的intctrl模块,外设模块有一个中断请求端口接Core的外部中断输入端口。
主要的数据流关系为:
这个架构是本人的设计,感觉结构比较清晰,便于理解,也便于调试。
该设计下的资源占用情况为:
主要是SRAM的资源比较紧张。
Core的实现代码来源于“小麻雀处理器”(https://gitee.com/xiaowuzxc/SparrowRV )。
主要修改了core.v的总线端口和内部结构:
相对于之前在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位整数)
在ARM的processor结构中,中断控制器(NVIC)的类别称为“core peripheral”,是在core之外,processor之内。本设计中,把它放在外设模块之中。保持芯片内部的“CPU/Core、Memory、Bus、Peripheral”四大块简单分类,便于理解。
[ 返回 ]
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )