OpenRisc-OptiMSoC

2024-06-05 07:38
文章标签 openrisc optimsoc

本文主要是介绍OpenRisc-OptiMSoC,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

简介:OptiMSoC是基于OpenRisc的多核SOC

移植

开发环境的搭建:

or1k工具链编译及安装:

gcc后端移植

编译optimsoc linux镜像:

1、make失败

2、编译linux系统发现地址无法访问:

怎样使用OpenOCD

FPGA平台移植:

编译FPGA代码:

启动linux


简介:OptiMSoC是基于OpenRisc的多核SOC

1、https://openrisc.io/

https://github.com/openrisc/or1ksim

2、https://openrisc.io/soc.html#optimsoc

https://github.com/optimsoc/optimsoc

3、https://www.optimsoc.org/docs/master/refman/porting.html#porting-to-an-fpga-target

移植

第一步:https://www.glip.io/

https://opensocdebug.org/

http://www.lisnoc.org/

---------------------------------------------------------------------------------------------------------------

开发环境的搭建:

先下载源码生成help文件,下面的内容主要参考help文件

https://github.com/optimsoc/optimsoc

https://blog.csdn.net/u011329967/article/details/106998291

也可以直接看在线帮助文档:

https://www.optimsoc.org/docs/

----------------------------------------------------------------------------

  前期准备:

   python3/pip3的安装:

   这里主要是安装了pip3以及venv(python的虚拟环境),安装前最好先更新下依赖库

sudo apt-get update
sudo apt-get upgrade
pip3 install --upgrade pip -i https://pypi.tuna.tsinghua.edu.cn/simple/
pip3 -V
pip3 install virtualenv -i http://mirrors.aliyun.com/pypi/simple/

   fusesoc安装:

pip3 install --user --upgrade fusesoc
pip3 install --user --upgrade pytest
fusesoc --version || echo 'PATH=~/.local/bin:$PATH' >> ~/.bashrc

  gtkwave安装:

sudo apt-get -y install gtkwave

 vivado安装:(需要申请官网账号)

    WebPack版本即可

---------------------------------------------------------------------------------------------------------------------

or1k工具链编译及安装:

gcc工具面向于前端高级语言后端cpu rtl代码,or1k已经被gcc工具原生支持

美国当地时间2018 8月30日,GCC 发布公告称,GCC 指导委员会已接受 OpenRISC 作为包含在 GCC 编译器的最新架构端口,并指派 Stafford Horne 为维护者。这个 OpenRISC 端口应该会在不久的将来落地使用,以便明年发布的 GCC 9 稳定版提供该功能。与 RISC-V 指令集架构相比,虽然 OpenRISC 对 GCC 的支持时间比它更长,但 OpenRISC 端口遇到了复杂的问题 —— 关于代码版权方面的问题。负责 OpenRISC GCC 代码的原始开发者无法满足自由软件基金会代码所需的版权分配作为上游工作的要求。


因此,开发者最终为 GCC 重写了 OpenRISC 编译器代码。该代码已经发布,GCC 指导委员会也已确认其将会成为 GCC 最新的处理器目标。OpenRISC 是 OpenCores 组织提供的基于 GPL 协议的开源 RISC(精简指令集计算机)处理器。有人认为其性能介于 ARM7 和 ARM9 之间,适合一般的嵌入式系统使用。最重要的一点是 OpenCores 组织提供了大量的开源 IP 核供研究人员使用,因此对于一般的开发单位具有很大的吸引力。


OpenRISC 具有以下特点:

    采用免费开源的 32/64bit RISC/DSP 架构。
    用 Verilog HDL(硬件描述语言)实现了基于该 RISC/DSP 架构的 RTL(寄存器传输级)描述。
    具有完整的工具链,包括:开源的软件开发工具、C 语言实现的 CPU 仿真模型、操作系统,以及软件应
用所需的函数库。

下载安装or1k工具链(已经编译好的版本):

# if it does not exist yet: prepare the ~/optimsoc directory
mkdir -p ~/optimsoc
# download and install the prebuilt tools
curl -O https://raw.githubusercontent.com/optimsoc/prebuilts/master/optimsoc-prebuilt-deploy.py
python optimsoc-prebuilt-deploy.py -d $HOME/optimsoc verilator or1kelf

命令注解:

  mkdir -- 新建目录,加-p参数表示目录不存在就新建,而不报错

  curl -O -- wget命令,意思就是下载目标文件(这里才只是一个py脚本)

  python --就是执行py脚本,去下载所需的工具链,默认会先下载到“/tmp”目录,具体看脚本里怎么写的;

                -d参数指定安装目录

  此处现在了两个工具一个是verilator,是一个verilog转c的工具用于仿真验证;or1kelf就是我们需要的编译好的工具链了

  安装完所需的工具链后还需要将其添加到环境变量才可以正常使用:

source ~/optimsoc/setup_prebuilt.sh
echo 'source ~/optimsoc/setup_prebuilt.sh' >> ~/.bashrc
常用的添加环境变量的方法就是:

      1、 利用用户路径下的:~/.bashrc文件 ,只针对这个用户

      2、利用/etc/profile文件,针对所有用户

  两种操作方法一样在文件末尾追加命令:export从源码构建gcc的工具链:

https://github.com/openrisc/or1k-gcc/releases
https://github.com/openrisc/tutorials/blob/master/docs/Linux.md

https://www.archlinux.org/packages/community/x86_64/or1k-elf-gcc/

gcc后端移植

参照riscv的操作:

https://github.com/riscv/riscv-gnu-toolchain

这条语句默认装的是x86的gcc,因为没有指定target,

./configure是用来生成Makefile文件的,--prefix是指定安装目录,之后执行make/make install/make clean即可

./configure --prefix=/opt/optimsoc --disable-multilib

根据gcc手册:https://gcc.gnu.org/install/specific.html

设置target参数为or1k-elf 

host参数默认为自己的主机x86,不需要指定

./configure --prefix /opt/or1k --target or1k-elf

但编译工具链还是出错:

configure: error: cannot compute suffix of object files: cannot compile

Makefile:12208: recipe for target 'configure-target-libgcc' failed

解决办法是:

安装:gmp,mpfr,mpc

参考:

https://www.cnblogs.com/Hxinguan/p/5016305.html

https://my.oschina.net/mskk/blog/3117489

https://www.cnblogs.com/kerndev/p/5537390.html

-----------------------------------------------------------------------------

源码编译:

  有了工具链便可以进行源码编译了:

  下载:

mkdir -p ~/src
cd ~/src
git clone https://github.com/optimsoc/optimsoc.git
cd optimsoc
注意更新一下依赖包并source一下工具链:
source ~/optimsoc/setup_prebuilt.sh
./update_externals.sh
./tools/install-build-deps.sh

提示vivado没有找到:

在/etc/profile里面添加vivado路径:

make/make install

构建过程完成后,所有构建工件都位于中objdir/dist

最后:

source YOUR_INSTALLATION_DIR/objdir/dist/optimsoc-environment.sh

即可

由于一开始没有执行:./tools/install-build-deps.sh

报出来pkg-config问题,但输入pkg-config -V能看到是最新版本

Consider adjusting the PKG_CONFIG_PATH environment variable if you installed

编译optimsoc linux镜像:

操作步骤

# get the OpTiMSoC buildroot configuration (a "br2-external tree")
git clone https://github.com/optimsoc/optimsoc-buildroot.git
cd optimsoc-buildroot
OPTIMSOC_BUILDROOT_DIR=$PWD
OPTIMSOC_BUILDROOT_VERSION=$(cat $OPTIMSOC_BUILDROOT_DIR/buildroot_version)
cd .. # back to your source directory# get buildroot itself
git clone https://git.busybox.net/buildroot
cd buildroot
git checkout $OPTIMSOC_BUILDROOT_VERSION
make BR2_EXTERNAL=$OPTIMSOC_BUILDROOT_DIR optimsoc_computetile_singlecore_defconfig
make

1、make失败

报$LD_LIBRARY_PATH被定义,但无效

执行

  unset -v LD_LIBRARY_PATH

继续make即可

2、编译linux系统发现地址无法访问:

make menuconfig

定位到安装包所在的位置,也可以将这个包去除,这实际上是一个吃豆人游戏包:

继续定位:

这个谷歌地址目前只能用谷歌浏览器器的插件ASTAR下载:

其它vpn代理都不稳定。

试了下直接改到本地路径,wget无法获取,那就改到本地服务器吧:

两种方案一种ftp(用FileZilla配置后需要用户名,就放弃了);

另一种http,这里我用了XMAPP,安装之后就可以配置一个本地服务器:

https://www.apachefriends.org/download.html

XAMPP非常好用(而且工具很全,之前一直用来做个人Blog),一键就可以部署自己的服务器,比windows自带的方便多了,

下载来的文件放在:

------------------------------------------------------------------

说明:

   关于linux系统编译(mk文件说明),如何添加自己的应用程序详细规则可以参看buildroot:[上面的操作方法仅作规避使用,并不是好的解决方法]

https://blog.csdn.net/prike/article/details/79352704

https://buildroot.org/downloads/manual/manual.html#adding-packages
 -------------------------------------------------------------------

最终生成了linux镜像

     output/images/vmlinux

 

怎样使用OpenOCD

OpenOCD运行起来需要3种文件:interface,target和board。它们分别用于配置debug adapter,SOC和开发板,位于:"/usr/local/share/openocd/scripts/"目录(不同的机子可能会不同)。OpenOCD已经把常见的都写好了
 

FPGA平台移植:

 optimsoc所需的硬件资源为一个串口/一个DDR内存

 1、examples/fpga目录需改

    由于我们只需要compute_tile工程,所以另一个system_2x2_cccc文件夹可以删除,

修改sv文件和自己的硬件接口匹配,注意设置uart 波特率,受硬件影响这里只用了200KHz的速度

 

    修改.core文件:图片中第一个红框对应的具体地址:“src/soc/hw/board”

2、src/soc/hw/board目录修改

   同1,替换自己的xdc文件,修改core文件,替换自己的xci文件。

   所需的xdc/xci文件,可以先将源码拷贝一分到其它目录,用xilinx vivado导入,根据自己的板卡,手动修改ip核文件及xdc,并生成bit验证,将bit下载到板卡,尤其是DDR部分,用Xilinx Jtag 扫描查看下DDR ip是否pass,界面上有一个绿灯,一开始ddr配错了时钟引脚,必需使用中间bank的时钟,同时配错了一根引脚导致DDR failed,后来又发现uart rx和tx引脚配反了,同时此处的uart需要cts/rts流程,来提高传输效率,所以需要4根引脚,最好不要把流控引脚注掉,一开始我发现串口无法联通,可能就是这个问题。完成后再将需要的文件考到源码目录,这样就可以避免一些文件错误。

3、工程编译

    需要注意,由于使用的virtex untrascale器件,所以不能用web版本,主要遇到的问题是ip核综合失败,但也没有message错误,在log口看到具体错误的步骤,发现时系统内存不够,我在虚拟机上运行,内存分了2GB,后来改到10GB后基本可以正常执行了,生成了bit,不过虚拟机编译较慢,服务器只要25min左右,虚拟机至少要1h左右,而且虚拟机存在空间不够问题,还好这次我有16GB内存,否侧又要重新安装一套环境。。

fusesoc --cores-root $OPTIMSOC_SRC/examples/fpga/vcu440/compute_tile build optimsoc:examples:compute_tile_vcu440 --UART0_SOURCE=onboard --HOST_IF=uart

 

编译FPGA代码:

./tools/build.py --link-hw --without-docs --without-examples-fpga --without-examples-sim
fusesoc --verbose --cores-root $OPTIMSOC_SRC/examples/fpga/vcu440 build optimsoc:examples:vcu440
fusesoc --cores-root $OPTIMSOC_SRC/examples/fpga/vcu440/compute_tile build optimsoc:examples:compute_tile_vcu440 --UART0_SOURCE=onboard --HOST_IF=uart
root@will-VirtualBox:/home/will/src/synthesis# fusesoc --cores-root $OPTIMSOC_SRC/examples/fpga/vcu440/compute_tile build optimsoc:examples:compute_tile_vcu440 --UART0_SOURCE=onboard --HOST_IF=uart
osd-target-run -e hello.elf -b uart -o device=/dev/ttyUSB0,speed=1000000 --coretrace --systrace --verify -vvv
osd-target-run -e vmlinux -b uart -o device=/dev/ttyUSB0,speed=1000000 --systrace -vvv --terminal
osd-target-run -e hello.elf -b uart -o device=/dev/ttyUSB0,speed=1000000 --coretrace --systrace --verify -vvv

启动linux

打开另一个terminal,如果没有需要安装下screen,

screen /dev/pts/2

root账户登录进去,没有密码

可以玩一下吃豆人游戏:

# convince Linux that our console supports colors
stty cols 80 rows 80
export TERM=linux
# and run pacman
/usr/games/pacman4*

参考

https://www.optimsoc.org/docs/master/user_guide/tutorials.html#run-linux-on-optimsoc

 

这篇关于OpenRisc-OptiMSoC的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1032467

相关文章

OpenRisc-9-基于or1200最小sopc系统搭建(三)--串口

最近在弄openrisc,之前有人在弄,并且写了一篇master thesis,我已经上传了: http://download.csdn.net/detail/rill_zhen/5303401 下面的内容应该就是根据论文中的指导完成的,但是,不是我完成的,所以转载如下:         接上一篇(原创)基于or1200最小sopc系统搭建(二)--QuartuII工程及DE2平台下载现再为构

OpenRisc-8-基于or1200最小sopc系统搭建(二)--QuartuII工程及DE2平台下载

最近在弄openrisc,之前有人在弄,并且写了一篇master thesis,我已经上传了: http://download.csdn.net/detail/rill_zhen/5303401 下面的内容应该就是根据论文中的指导完成的,但是,不是我完成的,所以转载如下:     接上一篇(原创)基于or1200最小sopc系统搭建(一)--搭建及仿真(DE2,DE2-70) 现在

OpenRisc-7-基于or1200最小sopc系统搭建(一)--搭建及仿真(DE2,DE2-70)

最近在弄openrisc,之前有人在弄,并且写了一篇master thesis,我已经上传了: http://download.csdn.net/detail/rill_zhen/5303401 下面的内容应该就是根据论文中的指导完成的,但是,不是我完成的,所以转载如下:   做一个or1200的最小系统,or1200+wishbone+ram+gpio,在DE2平台上实现读取SW的值然后

OpenRisc-5-用quartus对ORSoC的RTL进行综合

引言 书上学来终觉浅,绝知此事要躬行。前面几小节的内容都是基于现成的东西展开的,用的是现成的综合好的svf文件,ormon也是事先编译好的,linux也是移植好的,这些都是opencores给咱们弄好的。当然,也不是说用现成的没有意义,意义是很大的,即有了一个直观的,直接的感受。如果想要进一步研究,就需要自己动手修改代码了,在修改之前,有一个环节需要做,就是先把现成的变成自己的,即要能把现有的源

OpenRisc-4-ORSoC跑linux实验

引言 光说不练假把式,本小节就用官方的FPGA开发板跑一下linux。   4.1,  实验准备 1》  orsoc的工具链环境(gcc,gdb,jtag),搭建过程见上一篇blog: http://blog.csdn.net/rill_zhen/article/details/8443882 2》  ep4ce22的FPGA开发板(€:149) 3》  micro-USB连

OpenRisc-3-SOC develop environment build and test

引言 openrisc是开源computer architecture中推广的比较好的。工具也比较齐全,比如,compiler,debugger,architecture simulator,rtl simulator。。。这些tool都有,并且都是opensource的,有极大的灵活性。 学习一种技术最好的方式就是使用它,修改它。(the best way to learn and unde

OpenRisc-2-C to Verilog

引言 如何将C语言代码转换成verilog HDL或者VHDL呢?   2.1 在线转换: http://c-to-verilog.com/online.html C-to-Verilog.com是海法(Haifa)大学高层次综合领域的一个学术研究而产生的一个网站。 这个网站所用的编译器是SystemRacer综合系统的一个修改版本。这个编译器的源码可用于研究目的,并且已经发给了很多编译