博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
《步步惊“芯”——软核处理器内部设计分析》前两章读书笔记
阅读量:5013 次
发布时间:2019-06-12

本文共 1862 字,大约阅读时间需要 6 分钟。

第一章

1.软核处理器概念:

 

2.部分开源软核处理器:

①OR1200

 

......

第二章 实验环境搭建

本章做了两个实验:

1.Linux环境下编写一个汇编文件Example.S,程序功能是将两个寄存器的值相加并存到被加寄存器中。将该汇编程序编译、链接成可执行文件,在OR1200模拟器OR1KSim中运行该可执行代码,观察结果。

2.创建一个OR1200运行的最小系统,在该系统中执行1中的可执行文件,使用仿真软件ModelSim观察结果。

【笔者决定暂不纠结于工具,因为有些太老了已经下载不了了,重要的是搞清楚实验步骤和原理】

2.1实验一

Step1.搭建实验环境。安装虚拟机工具并挂载ubuntu镜像,在ubuntu下安装针对目标平台的GNU工具链。

 

安装软件:VitualBox虚拟机工具和OR1200 Ubuntu镜像

Step2.编写Example.S汇编程序

 

Step3.编译Example.S得到Example.o。我们编写的汇编程序放置在Example.oSection.text中。

 

Step4.建立链接描述脚本ram.ld,使得Section.text从地址0x100处开始放置,因为执行的第一条指令就是此地址的。执行下面的链接命令,得到可执行文件Example.or32

 

Step5.编写makefile文件,规范化对源程序的编译链接过程。[makefile文件的编写方法见前几篇博客]

Step6.使用OR1KSim模拟器运行程序。

 

跟踪程序的执行信息并对其进行剖析,如下图

可以发现,执行完这段程序后,r1寄存器和r2寄存器的值都是0xa

 

总结:该实验的目的是了解程序如何能在硬件上执行。过程是:将一段汇编代码在OR1200(的模拟器)中编译、链接并执行,跟踪执行过程和结果。实验环境是ubuntu,所需工具是gnu工具链。

2.2实验二

1.创建最小系统如下:

 

Step1.ModleSim中建立工程min_or1200。将OR1200的所有Verilog文件加入其中。

Step2.新建测试平台(test bench)文件or1200_tb.v。只令时钟、复位信号有效,其余接口输入信号置0

Step3.修改OR1200配置。通过注释和取消注释配置文件or1200_defines.v中的宏定义,保留需要的模块,去掉不需要的模块,以构建最小系统。

Step4.修改or1200_qmem.vOR1200将从QMEM中读取指令、加载存储数据。

2.运行仿真

Step1.初始化QMEM,将可执行代码存入其中。修改文件or1200_spram_2048x32.v,在611行添加如下代码initial $readmemh(“mem.data”,mem); 表示从mem.data中读取数据初始化memQMEM)。

注意:mem.data不能是Example.or32的内容,因为后者是一个ELF格式的文件,需要操作系统来解释该文件。而上述1过程构建的最小系统是一个硬件裸机,也就是说当加电复位的时候CPU只知道从0x100处读入指令开始执行,其余什么也不知道。所以我们要手动把Example.or32中的可执行代码放到0x100处。

mem.data内容如下:

 

Step2.mem.data复制到min_or1200工程的根目录,单击Simulate,选择or1200_tb作为测试平台,观察下面四个信号的波形(Add to wave)

 

选择菜单Simulate->Run->Run-All开始仿真。显示波形如下:

 

3.自动化生成mem.data

如上2中所述的mem.data是我们手工编写的。实际该过程可由makefile自动完成。步骤为将Example.or32中的内容转化为二进制,再写入memdata即可。

总结:该实验通过配置创建了一个OR1200的最小系统,然后将实验1可执行代码存入cpu启动后首先读取的地址处,观察仿真结果。

思考心得:一段汇编程序,先编译成.o文件,将汇编码变成十六进制代码,然后链接成.or32文件,安排程序在内存中的存放位置,就可以执行了(但需要操作系统或加载器,因为.or32是一个ELF文件)。如果想在裸机上执行,要先知道该cpu加电后最先取哪个存储体的哪个地址的指令开始执行,然后把程序的十六进制代码放到该地址处即可。

转载于:https://www.cnblogs.com/zhouliyan/p/9996750.html

你可能感兴趣的文章
织梦DEDE多选项筛选_联动筛选功能的实现_二次开发
查看>>
iOS关于RunLoop和Timer
查看>>
SQL处理层次型数据的策略对比:Adjacency list vs. nested sets: MySQL【转载】
查看>>
已存在同名的数据库,或指定的文件无法打开或位于 UNC 共享目录中。
查看>>
MySQL的随机数函数rand()的使用技巧
查看>>
thymeleaf+bootstrap,onclick传参实现模态框中遇到的错误
查看>>
python字符串实战
查看>>
wyh的物品(二分)
查看>>
12: xlrd 处理Excel文件
查看>>
综合练习:词频统计
查看>>
中文url编码乱码问题归纳整理一
查看>>
Cesium应用篇:3控件(3)SelectionIndicator& InfoBox
查看>>
58. Length of Last Word(js)
查看>>
前端面试题汇总(持续更新...)
查看>>
如何成为F1车手?
查看>>
QT自定义消息
查看>>
Save (Not Permitted) Dialog Box
查看>>
装饰模式(Decorator)
查看>>
任务13:在Core Mvc中使用Options
查看>>
利用Excel 2010数据透视图实现数字的可视化的图形直观展示
查看>>