运行环境
1、Litex的环境运行在Ubuntu 20.04 LTS
上
2、Vivado的版本为2019.2,运行在windows 10
上
注:
1、Litex也可以运行在WSL2
上,在此不做展开。
2、Vivado也可以运行在Linux环境里,在此不做展开。
Litex运行步骤
一、Litex环境安装(Linux)
1、首先把Litex克隆到本地
git https://github.com/enjoy-digital/litex.git
2、按照Litex库中README.md的步骤,将Litex的基本运行环境配置好。补充说明两点修改:
(1) 在README.md的步骤2时,把--update
参数合并到前一步,即执行:
$ ./litex_setup.py --init --install --update --user (--user to install to user directory) --config=(minimal, standard, full)
否则后续环境会出现一些问题。
(2) 在README.md的步骤3之后,需要手动把它下载的riscv-gcc工具路径导入到环境变量,即:
$ export PATH=$PATH:$PWD/riscv64-unknown-elf-gcc-8.1.0-2019.01.0-x86_64-linux-ubuntu14/bin/
建议将该语句写入到"~/.bashrc"
里,方便后续使用。
二、Perf V1的代码导入(Linux)
1、Litex中,关于SOC的逻辑代码
(Verilog HDL代码)和ROM固件
(Bootloader及一些驱动)的生成,在Litex-boards工程里。Litex环境安装时,会自动下载该库。Litex-boards的目录结构为:
litex_boards
├── platforms
├── prog
├── targets
__init__.py
其中:
platforms
目录定义了板卡相关的IO、时钟、约束,以及生成板卡bit流时的一些tcl脚本
targets
目录为创建SOC的代码,可在该目录下,配置SOC的组件(以太网,DRAM,GPIO之类的)
2、目前,Perf V1相关的platforms
和targets
代码,未提交给enjoy-digital作者, 所以需要手动将相关代码导入对应platforms
和targets
目录中。
当前Pefv V1代码,包含LED跑马灯、按键/拨码开关、UART串口,JTag调试口、SPI FLASH,DDR3 SDRAM等功能。
TODO: 当前Pefv V1代码,未配置XADC和PMOD相关的物理信息和SOC生成逻辑。
三、Perf V1的Litex SOC生成(Linux + Windows)
1、SOC的逻辑代码
(Verilog HDL代码)和ROM固件
(Bootloader及一些驱动)的生成:
在Linux
任一目录里,执行下面语句:
python3 -m litex_boards.targets.perf_v1 --cpu-type=naxriscv --no-compile-gateware --build
```
会在`当前目录`里生成如下目录:
```
build
├── gateware
├── software
其中:
gateware
目录生成了逻辑代码
(Verilog HDL代码)和XDC约束文件
software
目录生成了ROM固件
Bootloader及一些驱动
2、个人习惯在Windows
下使用Vivado
,将步骤1中gateware
目录下生成的perf_v1.v、perf_v1.init、perf_v1.xdc文件,拷贝到windows的目录里,然后文本编辑打开gateware
目录下perf_v1.tcl,把read_verilog
命令后提到的两个文件Ram_1w_1rs_Generic.v和NaxRiscvLitex_e387b4a19000a10fcd6fe95fbfcb8673.v一并拷入。选择好对应器件后,直接导入上述所有文件创建工程,生成bitstream文件。
注:如果在Linux环境下,已经装有Vivado环境,可以在gateware
目录里直接调用perf_v1.sh也可以直接生成bitstream。
四、Perf V1的Litex运行(Windows)
将生成的bitstream下载到Perf V1板卡中,打开串口工具,波特率设为115200,会看到如下打印:
Perf V1的Linux运行(Linux)
1、Image + rootfs.cpio
下载NaxSoftWare工程下的该脚本init.sh,执行该脚本,将生成以下目录:
``` images ├── rv32ima ├── rv32imac ├── rv64ima ├── rv64imac ├── rv64imafdc
将`rv32ima`目录里的**Image** + **rootfs.cpio**文件拷贝出来.
2、**opensbi**
下载**litex-hub**下**linux-on-litex-vexriscv**库提供的预编译linux镜像文件[linux_2022_03_23.zip](https://github.com/litex-hub/linux-on-litex-vexriscv/files/8331338/linux_2022_03_23.zip),解压后将其中**opensbi.bin**文件拷贝出来。
3、**DTB文件**
此处提供一个DTS的模板,文件名为**linux.dts**,也可以根据需要手动修改:
```sh
/dts-v1/;
/ {
#address-cells = <0x01>;
#size-cells = <0x01>;
compatible = "spinal,naxriscv";
model = "spinal,naxriscv_sim";
chosen {
bootargs = "rootwait console=hvc0 earlycon=sbi root=/dev/ram0 init=/sbin/init";
linux,initrd-start = <0x41000000>;
linux,initrd-end = <0x41800000>;
};
cpus {
#address-cells = <0x01>;
#size-cells = <0x00>;
timebase-frequency = <0x5f5e100>;
cpu@0 {
device_type = "cpu";
compatible = "riscv";
riscv,isa = "rv32ima";
mmu-type = "riscv,sv32";
reg = <0x00>;
status = "okay";
interrupt-controller {
#interrupt-cells = <0x01>;
interrupt-controller;
compatible = "riscv,cpu-intc";
};
};
};
memory@40000000 {
device_type = "memory";
reg = <0x40000000 0x4000000>;
};
};
使用dtc命令将其编译为dtb文件:
dtc -I dts -O dtb linux.dts -o linux.dtb
4、下载Linux到Perf V1
(1) 建立boot.json文件
{
"Image": "0x40000000",
"linux.dtb": "0x40ef0000",
"rootfs.cpio": "0x41000000",
"opensbi.bin": "0x40f00000"
}
注,如果上述4个文件不在同一目录,请手动修改相对路径
(2) 使用litex_term
工具,通过串口
下载镜像到Perf V1板卡里:
切换到boot.json同级目录,假设UART串口
在Linux中识别为ttyUSB0,
$ litex_term --images=boot.json /dev/ttyUSB0
在出现的litex
命令行交互提示符后,输入:
$ serialboot
等待镜像加载完成,受限于串口速率,预计20分钟左右,此期间不要在该命令行进行任何操作。 随后会看到OpenSbi的打印:
最后出现"buildroot:"
提示符,说明Linux加载完成:
链接:https://pan.baidu.com/s/1mQHqKaCxYuenaWMjSOADJg
提取码:perf