- 博客(17)
- 资源 (1)
- 收藏
- 关注
原创 8-从零开始学RISC-V之指令集仿真
从零开始学RISC-V之指令集仿真文章目录从零开始学RISC-V之指令集仿真背景介绍安装Spike工具链安装riscv-fesvr安装Spike编译DhrystoneDhrystone的spike仿真总结背景介绍一个十分常见的情形是,我们需要确定CPU能正确执行我们的程序,例如对跳转之类的处理,这在应用程序中十分常见。或许可以在程序中增加自测试代码,但这无疑增加代码量并且属于无实际意义的代码量,并且由于不能实现指令级的检查,所以并不具备应用价值。因此需要一种标准的仿真器,这种仿真器独立于处理器微架构,
2021-06-25 00:28:55
2649
3
原创 从零开始学RISC-V之CSR访问
文章目录背景介绍开始Coding指令译码算术运算测试程序仿真结果及分析背景介绍CSR,即Control and Status Register,控制与状态寄存器,属于CPU自带的一类寄存器(注意这里需要跟前文所述的通用数据寄存器区别开来,后文对这种寄存器称之为数据寄存器,以示区分)。在机器模式(Machine Mode,本项目只支持该模式)下这些存储器主要包括以下六类:处理器信息相关:例如处理器的厂商信息,架构信息,核心数等等,是一个芯片自身的I固有信息。中断配置相关:例如中断开关以及中断入口等信
2021-06-10 23:15:54
3941
原创 从零开始学RISC-V之存储器访问
从零开始学RISC-V之存储器访问文章目录从零开始学RISC-V之存储器访问背景介绍开始Coding指令译码算术运算造一个自己的测试程序特别注意仿真结果及分析背景介绍存储器是一个计算机系统中最基本的组成部分之一,各种技术特性的存储介质共同组成复杂的存储器系统。(请参考"存储器山"百科词条)处理器执行的指令来自于指令RAM,所需要的数据则来自于数据RAM。另外,如果有运算结果需要保存,也需要数据RAM。但在实际应用中,我们并不会以实际的物理芯片来严格区分数据RAM和指令RAM,即这两者通常会公用同一块芯
2021-05-04 22:13:40
1712
原创 从零开始学RISC-V之分支跳转
从零开始学RISC-V之指令模板文章目录从零开始学RISC-V之指令模板背景介绍一个BJP来了根据定义解码分析指令行为修改具体代码算术运算一个又一个的顶层仿真结果及分析背景介绍在上一篇中,我们知道了第一条RISC-V指令的实现过程。其实可以从中提炼出一份RISC-V指令设计的常规模板。该模板可以针对绝大部分的RISC-V指令,以此为基础,XF100CPU的设计工作就只是模板的具体展开,即变成了纯粹的体力劳动。假如我们现在需要实现指令A,那么只需要按照如下步骤来实现:依据RISC-V-Spec文档对
2021-04-02 00:15:18
2850
3
原创 从零开始学RISC-V之EXU初探
从零开始学RISC-V之初探EXU文章目录从零开始学RISC-V之初探EXU背景介绍有请EXU登台指令译码寄存器文件算术运算指令写回一个又一个的顶层仿真结果及分析背景介绍EXU主要负责指令的具体执行,一条指令的生命周期,从IFU取指令开始,历经指令解码,执行,写回,访存五个步骤,这其中,除首尾两个步骤由其他模块负责之外,其余步骤均有EXU负责完成。以一个常见的加法指令ADD t5, ra, sp为例,EXU在完成该指令的执行需要完成如下任务:指令解码,即完成指令的识别,获取该指令的相关信息,例如:
2021-04-02 00:12:18
993
原创 从零开始学RISC-V之IFU初探
从零开始学RISC-V之初探IFU文章目录从零开始学RISC-V之初探IFU背景介绍让IFU开始读数据吧加载与仿真总结一下背景介绍CPU内核设计几大块,主要包含取指单元(IFU),执行单元(EXU),访存单元(LSU),异常与中断(INT)以及调试单元(DBG)。一条指令的从取指单元开始,经过执行单元完成具体运算,按指令类型确定是否会访问内部或外部存储器,异常和中断负责处理特殊的情况,调试则是软件与硬件的窗口。每个模块的设计原则和侧重点都不一样。本节将从取指单元开始,介绍一条最简单的指令的运行过程。由
2020-07-09 00:05:23
3557
原创 从零开始学RISC-V之邮箱和邮件的秘密
从零开始学RISC-V之邮箱和邮件的秘密文章目录从零开始学RISC-V之邮箱和邮件的秘密背景介绍可执行文件的生成设计一个简单的IRAM总结一下背景介绍当一个应用软件被编译成可执行代码后,这种二进制数据会保存在各种不同类型的存储器中。对于xf100项目来讲,这个存储器就是指令RAM(简称IRAM,下同)。注意由于RAM在掉电后会丢失内部保存的数据,因此在实际应用中真实的程序会保存在ROM中,器件在上电之初会将该代码搬运到RAM中并按照设定的起始地址开始工作。如果将指令比喻为邮件的话,那么指令RAM就是专
2020-06-20 16:09:47
3239
3
原创 从零开始学riscv之建房子,先打地基
建房子,先打地基文章目录建房子,先打地基材料准备环境准备第一行代码运行起来在开始动手写第一行代码之前,我想在此再详细介绍一下需要准备的一些材料。这些前期准备越充分,后面的工作就会相对越顺畅。当然这一部分也可以快速略过。如果你还不放心,可以跟着一起看。材料准备操作系统这个不限,Linux或者Windows都可以。此处选用的Ubuntu 16.04,配合VMWare 15 pro使用。编译仿真软件这个是开工的基础,随个人喜好选择,Windows下有Modelsim可选,或者FPGA开
2020-05-28 13:44:05
716
原创 从零开始学riscv之开篇
文章目录RISC-V是什么聊聊ARM需要些什么项目介绍RISC-V是什么RISC-V(音“risk-five”)是基于精简指令集计算(RISC)原理建立的开放指令集架构(ISA)。2010 年,加州大学伯克利分校的研究团队通过分析市场现存的MIPS,X86 等多种指令集后发现,这些指令集不仅极其复杂,还存在知识产权风险。尽管计算机体系架构和处理器指令集架构经过几十年的发展已经非常成熟,但是依旧没有一款合适的指令集能符合伯克利的需求。针对此问题,由Krste Asanovic教授、Andrew Water
2020-05-28 13:41:11
1634
原创 LeetCode -- Add Two Numbers
题目: 将两个单链表中的数字相加,若某元素和超过10,则右侧元素的值在原来基础上再增加1,以此类推。假设除元素为数字0的单节点链表外,不存在数值为0的多个连续节点开头的链表。
2017-04-05 20:56:28
237
原创 链表基本操作
由于单链表中无法获取当前节点的前一节点,因此在删除时必须要能获取其前驱节点。检查单链表是否存在环:设定一快一慢两个节点指针,快指针一次进两步,慢指针一次进一步。如果单链表存在环,那么快指针必定会追上慢指针。否则,快指针先到链表末尾。如果进一步需要判断环入口,则继续将慢指针重置到链表头,然后和慢指针一样,每次前进一步,再次重合的点即为环的入口。注意该方法的结果对快慢指针的起始位置相当敏感,必须统一设
2017-03-19 13:43:27
291
原创 Win10 Python 2.7.7 安装Scrapy
安装环境OS:Windows 10 x64 Python : 2.7.7 在遇到一堆诸如无法找到vsvarsall.bat文件,无法找到匹配的libxml2等错误之后,无心插柳,居然安装完成。记录一下。安装Python 2.7.7 官网上下载,一路next安装即可;记得将Python的安装路径添加到系统的环境变量Path中;安装pip/easy_install等工具 将网页https:
2017-01-19 10:52:29
533
原创 Python 基本语法
Python运行代码:直接在cmd中输入 【python 文件名】即可执行,注意文件名中的后缀【.py】不可省略。格式化输出变量使用与C类似的形式,只不过变量前要添加【 % 】。而如果只是单纯的想打印变量值,直接使用【print (变量名)】即可。语句【A **= N】的意思是求A的N次方幂。对于字符串(String)和列表(List)类型的变量,在使用[上标:下标]的方式引用其元素时,需要注
2017-01-14 16:24:07
419
原创 Python爬虫错误记录
本文注意是用于记录在用Python写爬虫的过程中所经历的一些问题及其解决方法,便于后续翻查。语法错误错误文件已存在时无法创建文件出错代码fp = open("filetest.txt","w")fp.write("Hello World \n")fp.close()import osos.rename("filetest.txt","newfiletest.txt")fp = open("
2017-01-14 16:12:53
4037
原创 EDK II初次编译记录
2015年12月22日EDK初次编译记录系统:Windows 7 EDK 版本:2014 来源http://yun.baidu.com/share/link?shareid=3782555777&uk=1076105201&adapt=pc&fr=ftw#path=%252FEFI 个人备份:http://pan.baidu.com/disk/home#list/path=%2Fuefi1、
2015-12-22 14:05:40
1629
原创 Linux 文件读写笔记
时间:2015年10月26日 主题:linux文件系统读写练习 参考资料:宋敬彬《Linux网络编程》 系统环境:ubuntu 13.10 + gcc 代码;#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>#include <stdio.h>/*安全打开文件int main(void){ char
2015-10-26 22:09:37
465
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人