Wujian100 SOC FPGA原型验证,bootrom的实现

一、前言(Wujian100 SOC存储器的介绍)

  Wujian100 SoC内部包含1块64KB的指令ROM和3块64KB的数据RAM(如下图),通过AHB总线挂载到处理器 上,只支持小端模式存储数据指令。
在这里插入图片描述
在这里插入图片描述

  此指令ROM专门用来存放启动程序,SOC上电后,会将data段数据由ROM搬运至RAM,并且将BSS段数据在数据RAM 的相应位置进行初始化为0处理(一个程序的3个基本段:text段,data段,bss段)。
  Wujian100 SOC存储器在Wujian100开源代码中的体现如下图:
在这里插入图片描述

二、实现思路

  简单来说,就是将启动程序的bin文件数据放入Wujian100 SOC的指令ROM中即可,虽然称作为ROM,但实际上是通过FPGA BRAM资源实现的,故数据掉电丢失,所以需要将启动程序的bin文件数据作为该BRAM的初始数据,这样bootrom就完成了。

三、具体步骤

(一)、在剑池SDK中编写启动程序C代码,并编译生成bin文件

  编写C代码
在这里插入图片描述

#include <stdio.h>
#include "soc.h"
#include "drv_gpio.h"
#include "pin_name.h"
#include "pin.h"

static void gpio_interrupt_handler1(int32_t idx)
{
}
static void gpio_interrupt_handler2(int32_t idx)
{
}
volatile int yzp=0;
void delay(void)
{
	unsigned int i=0,j=0;
	
	for(i=0;i<1000;i++)
		for(j=0;j<1000;j++)
				yzp = 0;
}

int main(void)
{
	gpio_pin_handle_t pin1 = NULL;
	gpio_pin_handle_t pin2 = NULL;
	
	pin1 = csi_gpio_pin_initialize(PA0, gpio_interrupt_handler1);
	csi_gpio_pin_config_mode(pin1, GPIO_MODE_PUSH_PULL);
    csi_gpio_pin_config_direction(pin1, GPIO_DIRECTION_OUTPUT);
	
	pin2 = csi_gpio_pin_initialize(PA1, gpio_interrupt_handler2);
	csi_gpio_pin_config_mode(pin2, GPIO_MODE_PUSH_PULL);
    csi_gpio_pin_config_direction(pin2, GPIO_DIRECTION_OUTPUT);
		
	while(1)
	{
		printf("CODE START!\n");
		csi_gpio_pin_write(pin1, 0);
		csi_gpio_pin_write(pin2, 1);
		printf("CODE START!\n");
		csi_gpio_pin_write(pin1, 1);
		csi_gpio_pin_write(pin2, 0);
	}
	
	
    return 0;
}

  勾选生成bin文件选项
在这里插入图片描述
在这里插入图片描述
  编译,即可生成bin文件
在这里插入图片描述
在这里插入图片描述

(二)修改wujian100 SOC的verilog代码

  该指令ROM的代码结构如下图蓝框处,红框内的四个小RAM模块一起组成一个64KB的RAM,这个64KB的RAM就是指令ROM:
在这里插入图片描述
在这里插入图片描述

  我们将实现该ROM的verilog模块复制出一份,并更改模块名字,但不改模块内的代码,变成新的模块。经过对工程的修改,该指令ROM的代码结构变成如下图所示:
在这里插入图片描述
在这里插入图片描述
  将启动程序的bin文件数据放入该指令ROM中,即作为fpga_byte_spram_yzp1、fpga_byte_spram_yzp2、fpga_byte_spram_yzp3、fpga_byte_spram_yzp4这四个RAM的初始数据。将bin文件数据拆成4份,通过readmemh函数分别作为这四个RAM的初始数据,如下图:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
  为什么要将bin文件数据拆成4份呢?因为这个指令ROM由四个RAM构成,故需要四份数据分别对这四个RAM进行初始化。
  ROM按照如下图方式存储BIN数据,理解这个存储方式之后,你就知道怎么拆bin文件了。
在这里插入图片描述

四、参考文献

邸志雄老师wujian100课程:

  http://www.dizhixiong.cn/class5/
  2-玄铁E902处理器与无剑100_SoC体系架构.pdf

wujian100开源代码自带的文档说明:

  https://github.com/T-head-Semi/wujian100_open
  wujian100_open Userguide v1.0.docx

wujian100架构图:

  https://blog.csdn.net/weixin_44085642/article/details/105312548

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值