一、前言(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

Wujian100 SOC FPGA原型验证,bootrom的实现相关推荐

  1. SOC芯片的FPGA原型验证

    SOC芯片的FPGA原型验证 FPGA验证在SOC设计非常重要,一般而言,做一些RAM和FIFO的替换以及相应代码转换.具体分下面几步: 1 替换RAM,FIFO和时钟 RAM和FIFO控制器需要RA ...

  2. FPGA原型验证系统VS硬件仿真器

    作者:杨一峰,芯华章科技技术市场经理 文章首发于<中国集成电路>,由国家工业和信息化部主管,中国半导体行业协会主办的官方专业期刊. 之前我们已经对"FPGA开发板"和& ...

  3. 验证中的FPGA原型验证

    reference: https://blog.csdn.net/zhajio/article/details/80612276 什么是FPGA原型? FPGA原型设计是一种成熟的技术,用于通过将RT ...

  4. FPGA原型验证中define/undefine编译顺序的问题

    Synopsys的IP喜欢在编译IP前先define然后再编译IP最后undefine.但是在ISE/Vivado中可能不是按这种顺序进行的,所以可能出现没有undefine,后面的define将前面 ...

  5. FPGA协同验证方法-资料整理

    https://www.cnblogs.com/limanjihe/p/9796998.html 用FPGA对ASIC进行原型验证的过程 https://max.book118.com/html/20 ...

  6. IC设计- 浅谈各种验证 - 功能验证,形式验证,原型验证

    浅谈逻辑仿真,形式验证及硬件仿真 随着硬件设计复杂性的不断增加,为了能够最大程度的使得验证收敛,验证方法也越来越多,今天我们针对常见的几种验证方法做一些简单的分析,指出它们的常用应用环境以及一些优缺点 ...

  7. 硬件仿真加速器与原型验证平台

    基于软件仿真工具对于动辄几百万门的ASIC验证而言,几乎显得力不从心.不管是从成本还是从性能的角度来看,使用硬件仿真器或者基于FPGA的原型验证平台,几乎是验证工程师的不二法门.因为基于硬件的环境能够 ...

  8. SoC设计与验证——概览索引

    一个完整的SoC通常就是我们所说的CPU,它包含了处理器内核等其他的设备或存储器 1. SOC设计 本节主要对SoC设计的整体架构进行概述,具体详情请参照标题下的链接. 1 处理器核心 Core在总线 ...

  9. 科普:原型验证系统VS硬件仿真器,哪一个更好?

    总有小伙伴问我:"原型验证系统和硬件仿真器​​​​​​​,哪一个更好?" 为什么会有这样的选择困难呢?实在是现在的芯片规模太大.太复杂了. 随着AI.5G等新技术的不断推进,&qu ...

最新文章

  1. 学习官方示例 - System.TClass
  2. 向Lucene增加中文分词功能
  3. ASP.NETmvc常用JQUERY插件【jquery.dataTables.js】
  4. 12本接收率高的医学SCI期刊
  5. POJ 2018 Best Cow Fences (二分答案构造新权值 or 斜率优化)
  6. c#equals方法源码_C#中的Int32.Equals()方法示例
  7. Zabbix 服务器性能指标参考(学习笔记十七)
  8. 【备忘录】sublime text的使用
  9. 嵌入式开发之DSP学习
  10. GEE开发之Landsat8计算NDWI和数据分析
  11. Kotlin技术 - 委托和代理
  12. css——background、border、margin、float、content、blur(图片模糊)、user-select:none(禁用用户选择复制),border-image
  13. 捷得(Joget DX)产品发展路线图
  14. 新一代iPhone后盖或将采用超级合金
  15. 2018,ANG发展峰会惊喜来袭
  16. 在c语言程序中使用数据库,数据库与C语言程序设计两者之间有什么联系?
  17. 正则表达式 新手的歧途
  18. 玩家离开游戏10个理由
  19. 省级面板数据(2000-2019)三:财政、外资、工业(stata或excel版)
  20. oracle 小项目实战总结

热门文章

  1. Redis 主从复制的原理及演化
  2. 【Linux + Makefile】Makefile中的.PHONY作用以及赋值运算(各种=符号)的区别
  3. Headless Chrome入门
  4. sql根据条件删除重复数据保留一条
  5. 谈谈网络编程(基于C++)
  6. Java面试题之IO流
  7. Linux 启动 jar 包的 sh 脚本
  8. 标准键盘码值表-十六进制
  9. LncACTdb 3.0:肿瘤ceRNA相作和个性化网络数据库
  10. fopen和fopen_s简介