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
Wujian100 SOC FPGA原型验证,bootrom的实现相关推荐
- SOC芯片的FPGA原型验证
SOC芯片的FPGA原型验证 FPGA验证在SOC设计非常重要,一般而言,做一些RAM和FIFO的替换以及相应代码转换.具体分下面几步: 1 替换RAM,FIFO和时钟 RAM和FIFO控制器需要RA ...
- FPGA原型验证系统VS硬件仿真器
作者:杨一峰,芯华章科技技术市场经理 文章首发于<中国集成电路>,由国家工业和信息化部主管,中国半导体行业协会主办的官方专业期刊. 之前我们已经对"FPGA开发板"和& ...
- 验证中的FPGA原型验证
reference: https://blog.csdn.net/zhajio/article/details/80612276 什么是FPGA原型? FPGA原型设计是一种成熟的技术,用于通过将RT ...
- FPGA原型验证中define/undefine编译顺序的问题
Synopsys的IP喜欢在编译IP前先define然后再编译IP最后undefine.但是在ISE/Vivado中可能不是按这种顺序进行的,所以可能出现没有undefine,后面的define将前面 ...
- FPGA协同验证方法-资料整理
https://www.cnblogs.com/limanjihe/p/9796998.html 用FPGA对ASIC进行原型验证的过程 https://max.book118.com/html/20 ...
- IC设计- 浅谈各种验证 - 功能验证,形式验证,原型验证
浅谈逻辑仿真,形式验证及硬件仿真 随着硬件设计复杂性的不断增加,为了能够最大程度的使得验证收敛,验证方法也越来越多,今天我们针对常见的几种验证方法做一些简单的分析,指出它们的常用应用环境以及一些优缺点 ...
- 硬件仿真加速器与原型验证平台
基于软件仿真工具对于动辄几百万门的ASIC验证而言,几乎显得力不从心.不管是从成本还是从性能的角度来看,使用硬件仿真器或者基于FPGA的原型验证平台,几乎是验证工程师的不二法门.因为基于硬件的环境能够 ...
- SoC设计与验证——概览索引
一个完整的SoC通常就是我们所说的CPU,它包含了处理器内核等其他的设备或存储器 1. SOC设计 本节主要对SoC设计的整体架构进行概述,具体详情请参照标题下的链接. 1 处理器核心 Core在总线 ...
- 科普:原型验证系统VS硬件仿真器,哪一个更好?
总有小伙伴问我:"原型验证系统和硬件仿真器,哪一个更好?" 为什么会有这样的选择困难呢?实在是现在的芯片规模太大.太复杂了. 随着AI.5G等新技术的不断推进,&qu ...
最新文章
- 学习官方示例 - System.TClass
- 向Lucene增加中文分词功能
- ASP.NETmvc常用JQUERY插件【jquery.dataTables.js】
- 12本接收率高的医学SCI期刊
- POJ 2018 Best Cow Fences (二分答案构造新权值 or 斜率优化)
- c#equals方法源码_C#中的Int32.Equals()方法示例
- Zabbix 服务器性能指标参考(学习笔记十七)
- 【备忘录】sublime text的使用
- 嵌入式开发之DSP学习
- GEE开发之Landsat8计算NDWI和数据分析
- Kotlin技术 - 委托和代理
- css——background、border、margin、float、content、blur(图片模糊)、user-select:none(禁用用户选择复制),border-image
- 捷得(Joget DX)产品发展路线图
- 新一代iPhone后盖或将采用超级合金
- 2018,ANG发展峰会惊喜来袭
- 在c语言程序中使用数据库,数据库与C语言程序设计两者之间有什么联系?
- 正则表达式 新手的歧途
- 玩家离开游戏10个理由
- 省级面板数据(2000-2019)三:财政、外资、工业(stata或excel版)
- oracle 小项目实战总结