Rocket之环境搭建

准备工作

  • Ubuntu 16.04
  • vivado 16.02
  • zedboard
  • 路由器和网线
  • SD卡和读卡器
  • java 1.8
  • 了解scala和chisel,优势:
    • 面向对象
    • 函数式编程
    • 类型参数化
    • 类型推断

总体架构

在这里插入图片描述
在这里插入图片描述

生成verilog代码

执行命令

// 安装所需依赖
sudo apt-get install autoconf automake autotools-dev curl libmpc-dev libmpfr-dev libgmp-dev libusb-1.0-0-dev gawk build-essential bison flex texinfo gperf libtool patchutils bc zlib1g-dev device-tree-compiler pkg-config libexpat-dev
git clone https://github.com/ucb-bar/fpga-zynq
cd ./fpga-zynq/zedboard
make init-submodules
make rocket    # sbt的bug的解决办法如下

sbt bug

[warn] 	::::::::::::::::::::::::::::::::::::::::::::::
[warn] 	::          UNRESOLVED DEPENDENCIES         ::
[warn] 	::::::::::::::::::::::::::::::::::::::::::::::
[warn] 	:: edu.berkeley.cs#chisel3_2.11;3.2-SNAPSHOT: not found
[warn] 	::::::::::::::::::::::::::::::::::::::::::::::

download,之后解压,执行以下操作

cp -r cache/* ~/.ivy2/cache

生成bit流

安装vivado 2016.02

安装时要选择SDK,使用vivado建议用root账户

执行命令

make project
source /opt/Xilinx/Vivado/2016.2/settings64.sh
vivado zedboard_rocketchip_ZynqFPGAConfig.xpr
# 之后进入GUI,点击Generate Bitstream

准备SD卡文件

SD卡文件

SD文件内容

  • boot.bin
    • FSBL.elf . The FSBL will hand-off to u-boot once the processing system is setup
    • rocketchip_wrapper.bit
    • u-boot.elf.
  • uImage(ARM Linux).
  • uramdisk.image.gz(ARM RAMDisk).
  • devicetree.dtb.

格式化SD卡

  • 使用ubuntu的Disks工具(GUI)
  • 一个FAT32分区

创建文件并拷贝到SD卡上(读卡器)

创建文件参考here
执行make boot.bin之前需要source /opt/Xilinx/SDK/2016.2/settings64.sh

RISCV工具链

使用fpga-zynq/rocket-chip/下的工具链

执行命令

安装所需软件参考here

cd ./fpga-zynq/rocket-chip/riscv-tools
git submodule update --init --recursive
# 安装目录,会包含可执行文件,静态和动态链接库
# export RISCV=/path/to/install/riscv/toolchain
export RISCV=/home/qihao/Desktop/lab/riscv
export PATH=$PATH:$RISCV/bin
export MAKEFLAGS="$MAKEFLAGS -j8"
./build.sh
# 测试工具链
./regression.sh

连接zedboad

硬件

  • zedborad连接电源
  • 主机和zedboad使用网线连接在一个路由器上
  • 使用USB-microUSB线将zedboard与PC相连,连接zedboard的USB-UART接口
  • 将SD卡插入zedboard上

软件

使用minicom

  • 配置minicom,如下:
    在这里插入图片描述
  • 执行sudo minicom,输入reset,重置zedboard
  • 登录
    • minicom,用户名和密码都是root
    • ssh,ssh root@192.168.1.5,密码是root

测试

工具介绍

  • spike, the ISA simulator。
  • riscv-fesvr, 一种“前端”服务器,它在主机目标接口(HTIF)上为主机和目标处理器之间提供服务。
  • riscv-pk, 一个代理内核,一个支持RISC-V ELF二进制轻量级的执行环境。

riscv-fesvr和pk

cd zedboard 
make fesvr-zynq
scp ../common/build/fesvr-zynq root@192.168.1.5:/home/root/
scp ../common/build/libfesvr.so root@192.168.1.5:/usr/local/lib
scp $RISCV/riscv64-unknown-elf/bin/pk root@192.168.1.5:/home/root/

可执行文件

#include<stdio.h>

int main() {
    printf("Hello qihao\n");
    return 0;
}
riscv64-unknown-elf-gcc qihao.c -o qihao
scp ./qihao root@192.168.1.5:/home/root/

执行

spike测试
rocketchip 测试

参考

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
RocketMQ是一个分布式消息传递平台,它可以在高吞吐量、低延迟和高可靠性的条件下传递大量的消息。下面是搭建RocketMQ的步骤: 1. 安装JDK RocketMQ需要使用JDK 1.8或更高版本。如果未安装,请先下载并安装JDK。 2. 下载RocketMQ 从官方网站下载RocketMQ的源代码(https://rocketmq.apache.org/release_notes/release-notes-4.9.1/)或者预编译版本。 3. 安装NameServer NameServer是RocketMQ的核心组件之一,它用于管理所有的Broker,包括Broker的路由信息、Topic、Consumer等。 解压下载的RocketMQ文件,进入bin目录,执行以下命令: ``` sh mqnamesrv ``` 4. 安装Broker Broker是RocketMQ的另一个核心组件,它用于存储和分发消息。一个Broker可以管理多个Topic,每个Topic可以有多个Queue。 解压下载的RocketMQ文件,进入bin目录,执行以下命令: ``` sh mqbroker -n localhost:9876 ``` 其中,localhost:9876是NameServer的地址,默认端口为9876。 5. 发送和接收消息 使用RocketMQ的API可以发送和接收消息。以下是一个简单的例子: ``` public class Producer { public static void main(String[] args) throws Exception { DefaultMQProducer producer = new DefaultMQProducer("example_group"); producer.setNamesrvAddr("localhost:9876"); producer.start(); Message message = new Message("example_topic", "Hello RocketMQ".getBytes()); SendResult result = producer.send(message); System.out.println(result); producer.shutdown(); } } public class Consumer { public static void main(String[] args) throws Exception { DefaultMQPushConsumer consumer = new DefaultMQPushConsumer("example_group"); consumer.setNamesrvAddr("localhost:9876"); consumer.subscribe("example_topic", "*"); consumer.registerMessageListener((MessageListenerConcurrently) (messages, context) -> { System.out.println(messages); return ConsumeConcurrentlyStatus.CONSUME_SUCCESS; }); consumer.start(); } } ``` 这个例子中,Producer向example_topic发送一条消息,Consumer从example_topic接收并打印出来。在运行Producer和Consumer之前,确保NameServer和Broker已经启动。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值