PULPino环境建立及helloword仿真

一、前言

PULPino是ETH开发的一个开源32-bit RISC-V单核微控制器系统,可以认为是PULP的简化版。目前内核支持RISCY和zero-riscy两种配置,此外还有支持AXI总线和APB总线,并可配置多个外设ip如SPI,UART,I2C等,支持boot ROM和外部SPI flash启动等等。由于github上该项目已多年未更新且,里面的Issues也很少能得到官方回复,因此整理一份环境建立以及跑通helloworld的流程供参考。

二、系统环境

本人使用的是Ubuntu 22.04的Linux系统,以下两种方式都尝试并成功

  • 若使用虚拟机,可以选择VMware Workstation 17 Player,官方的个人免费版,下载安装即可用;
  • 若是Window11系统,可以使用WSL2,支持包括Ubuntu 22.04版本内的多种系统可选

 三、软件安装

PULPino仿真流程需要Python2及pip2,Modelsim以及riscv编译工具链

3-1 Python2及pip2安装

PULPino由于多年没有更新,不支持Python3只支持Python2和pip2。Python2的安装方式可以参考《在 Ubuntu20.04 上安装 python2 并设置为默认方式》,一定要将python2设置为默认python。目前不支持通过python2安装pip2,可以通过以下方式安装:

wget https://bootstrap.pypa.io/pip/2.7/get-pip.py
python get-pip.py

3-2 Modelsim安装

PULPino要求Modelsim的版本在10.2c以上,本人安装的版本为Modelsim SE 2020.4,软件下载及安装可以参考《Ubuntu 22.04 LTS安装Modelsim SE 2020.4》,非常详细。

3-3 riscv-gnu-toolchain安装

务必使用PULP自己的riscv工具链,即pulp-riscv-gnu-toolchain,原因在于存在一些自定义的指令集,官方标准的riscv-gnu-toolchain并不支持,会造成编译错误。prefix后面的安装路径可自由指定。

# Install serveral packages
sudo apt-get install autoconf automake autotools-dev curl libmpc-dev libmpfr-dev libgmp-dev gawk build-essential bison flex texinfo gperf libtool patchutils bc zlib1g-dev

# Get the sources
git clone https://github.com/pulp-platform/pulp-riscv-gnu-toolchain
cd pulp-riscv-gnu-toolchain
git submodule update --init --recursive

# Build cross-compiler
sudo ./configure --prefix=/opt/pulp_riscv --with-arch=rv32imc --with-cmodel=medlow --enable-multilib
sudo make

# Add to PATH
export PATH=$PATH:/opt/pulp_riscv/bin

按照上述步骤安装完成后,通过which riscv32-unknown-elf-objcopy检查是否安装成功。

四、Helloworld例程

4-1 下载并更新ip

PULPino复用了PULP平台下的多个ip,运行下面指令:

./update-ips.py

update-ips.py脚本会读取ip-lists.txt文件,从github下载并切换到pulpinov1分支。由于adv_dbg_if在最新更新后删掉了pulpinov1分支,所以会出现下列报错:

      

但是没关系,adv_dbg_if已经被下载下来并处于master分支,同样支持后续仿真。

4-2 编译

修改/path/to/pulpino/sw/CMakeLists.txt文件中#54行,最新版本CMake不再支持-m32选项。

set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -march=${GCC_MARCH} -Wa,-march=${GCC_MARCH}")

任意位置新建build目录,并将/path/to/pulpino/sw目录下的cmake_configure*.gcc.sh文件拷贝到build目录下。

mkdir build
cd build
cp /path/to/pulpino/sw/cmake_configure*.gcc.sh .

一共有四个cmake_configure文件,分别代表四种RISC-V核的配置,riscv以及riscvf使用的是RISCY核,其中riscvf增加了浮点运算指令集,zeroriscy使用的是标准zero-riscy核,而microriscy使用的是zero-riscy核的嵌入式架构,只支持16个通用整数寄存器。下面以zeroriscy配置为例,其它几种配置按照下面流程同样可以成功。

修改cmake_configure.zeroriscy.gcc.sh文件,修改#13行中的TARGET_C_FLAGS参数。

TARGET_C_FLAGS="-O3 -march=rv32g -g"

运行cmake_configure.zeroriscy.gcc.sh,

./cmake_configure.zeroriscy.gcc.sh

会出现riscv.ld文件不存在报错:

新建一个脚本fix_riscv_ld.sh,内容如下:

#!/usr/bin/bash
riscv32-unknown-elf-ld --verbose | head -n -1 | tail -n +7 | sed '168 a \ \ _fbss = .;' | sed '169 a \ \ . = .;' > /home/haoliu/Documents/Git/pulpino/sw/build/CMakeFiles/CMakeTmp/riscv.ld

若运行 cmake_configure.zeroriscy.gcc.sh脚本出现riscv.ld文件不存在报错就运行fix_riscv_ld.sh,循环两三次后就可以成功了,打印信息如下:

 最后进行编译

make vcompile

4-3 仿真运行

调用Modelsim console模式运行:

make helloworld.vsimc

务必确保Modelsim能启动,可使用vsim命令打开Modelsim检查是否能正常启动。仿真运行后会打印出以下信息:

调用Modelsim GUI模式运行:

make helloworld.vsim

 打开GUI后在Transcript会发现一些关于DPI的warning:

虽然不影响运行结果,但最好还是消除掉, 修改/path/to/pulpino/vsim/tcl_files/config/vsim.tcl文件#16行:

$VSIM_FLAGS -dpicpppath /usr/bin/gcc"

在Modelsim命令行中输入:

add wave /*
run -all

即可得到以下结果:

 

至此,helloworld仿真完成。在/path/to/build/apps目录下可以发现除了helloworld外,还有其他testcase可以运行,有兴趣的读者可以自行运行查看波形。

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: 您好,以下是Spring MVC环境搭建Hello World的步骤: 1. 首先,您需要在您的开发环境中安装好Java和Maven。 2. 创建一个Maven项目,选择Web应用程序类型。 3. 在pom.xml文件中添加Spring MVC依赖项: ``` <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>5.2..RELEASE</version> </dependency> ``` 4. 创建一个Spring MVC配置文件,例如springmvc-servlet.xml,其中包含以下内容: ``` <mvc:annotation-driven /> <context:component-scan base-package="com.example.controller" /> ``` 5. 创建一个控制器类,例如HelloController.java,其中包含以下内容: ``` @Controller public class HelloController { @RequestMapping("/hello") public ModelAndView hello() { ModelAndView mav = new ModelAndView("hello"); mav.addObject("message", "Hello World!"); return mav; } } ``` 6. 创建一个JSP视图,例如hello.jsp,其中包含以下内容: ``` <html> <head> <title>Hello World</title> </head> <body> <h1>${message}</h1> </body> </html> ``` 7. 部署您的应用程序并启动服务器。在浏览器中输入http://localhost:808/您的应用程序名称/hello,您应该能够看到“Hello World!”的消息。 希望这可以帮助您开始使用Spring MVC! ### 回答2: SpringMVC是一种基于Spring框架的Web框架,它提供了一种机制来管理Web请求的生命周期和处理过程。搭建SpringMVC环境可以快速构建一个基本的Web应用程序,下面我们来一步步搭建一个HelloWorld的SpringMVC应用。 1.准备工作 首先,我们需要准备一个开发环境,包括安装JDK、Eclipse或IntelliJ IDEA等开发工具,以及Maven或Gradle等构建工具。 2.创建项目 在Eclipse或IntelliJ IDEA中创建一个新的Maven项目,并添加SpringMVC相关依赖。例如在pom.xml中添加: ``` <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>5.0.0.RELEASE</version> </dependency> ``` 3.配置SpringMVC 创建一个Spring的配置文件,例如springmvc-servlet.xml,并在其中配置SpringMVC。例如配置一个基础的DispatcherServlet: ``` <!-- 配置DispatcherServlet --> <servlet> <servlet-name>dispatcher</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/springmvc-servlet.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <!-- 把所有请求都交给DispatcherServlet处理 --> <servlet-mapping> <servlet-name>dispatcher</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> ``` 在上述配置中,我们将所有请求都交给dispatcher这个Servlet处理,并指定了其配置文件的位置。 4.编写Controller 下一步就是编写一个Controller类来处理请求。例如: ``` @Controller public class HelloWorldController { @RequestMapping("/hello") public String hello(Model model) { model.addAttribute("message", "Hello, world!"); return "hello"; } } ``` 这个Controller提供了一个/hello的请求路径,并返回一个View名称为hello。在返回View的同时,还向View中添加了一个message属性,其值为Hello, world!。需要注意的是,在Controller类名上添加了@Controller注解,以标记其为SpringMVC的Controller。 5.编写View 下一步是编写View模板来展示数据。例如,我们可以使用JSP模板,来编写一个hello.jsp文件: ``` <!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8"> <title>Hello, world!</title> </head> <body> <h1>${message}</h1> </body> </html> ``` 这个模板使用了EL表达式来展示Controller传递过来的数据,具体来说,就是使用了message属性的值。 6.部署应用 最后一步就是部署应用,例如我们可以使用Maven来打包应用,然后将war包部署到Tomcat等Web容器中。 到这里,一个基本的SpringMVC应用就成功搭建并运行了!我们可以访问/hello路径来看到“Hello, world!”的输出。此外,可以根据实际需求来扩展应用功能,例如添加拦截器、异常处理器等。 ### 回答3: Spring MVC是一个开源的MVC框架,用于构建基于Java的Web应用程序。它是Spring框架的一部分,提供强大的Web开发特性和可扩展性。本文将介绍如何搭建Spring MVC开发环境,并创建一个简单的HelloWorld程序。 1. 环境搭建 首先,需要准备以下环境: Java JDK(Java Development Kit):需要安装Java JDK 8或以上版本。 Tomcat:需要安装Tomcat服务器,可以从官网上下载最新的Tomcat 9版本。 Maven:需要安装Maven,可以通过Maven官网下载最新版本。 Eclipse或IntelliJ IDEA:需要安装Eclipse或IntelliJ IDEA开发工具,选择其中一种即可。 2. 创建Web项目 在Eclipse中创建一个新的Dynamic Web Project。在创建过程中,需要选择Servlet版本和Java版本。可以选择Servlet 3.1版本和Java 8或以上版本。 在创建过程中,可以选择创建一个默认的Web.xml文件,也可以手动创建。确保在Web.xml中有以下配置: <servlet> <servlet-name>dispatcher</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/config/spring-servlet.xml</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>dispatcher</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> 3. 添加Spring MVC依赖 在POM文件中添加以下依赖: <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>5.2.0.RELEASE</version> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>4.0.1</version> <scope>provided</scope> </dependency> <dependency> <groupId>javax.servlet.jsp</groupId> <artifactId>javax.servlet.jsp-api</artifactId> <version>2.3.3</version> <scope>provided</scope> </dependency> 4. 创建Controller 在src/main/java目录下创建一个HelloController.java文件。在文件中添加以下代码: @Controller public class HelloController { @RequestMapping(value = "/hello", method = RequestMethod.GET) public String hello(ModelMap model) { model.addAttribute("message", "Hello Spring MVC Framework!"); return "hello"; } } 5. 创建JSP页面 在src/main/webapp/WEB-INF/views目录下创建一个hello.jsp文件。在文件中添加以下代码: <html> <head> <title>Hello Spring MVC</title> </head> <body> <h2>${message}</h2> </body> </html> 6. 创建Spring MVC配置文件 在src/main/webapp/WEB-INF/config目录下创建一个spring-servlet.xml文件。在文件中添加以下配置: <context:component-scan base-package="com.example" /> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/views/" /> <property name="suffix" value=".jsp" /> </bean> 7. 运行程序 将项目部署到Tomcat服务器上,并启动Tomcat服务器。在浏览器中输入以下网址:http://localhost:8080/hello。 应该会看到“Hello Spring MVC Framework!”这个消息显示在浏览器上。 以上就是在Spring MVC环境中创建和运行Hello World程序的步骤。通过这个例子可以了解Spring MVC的基本结构和组件,包括Controller、ViewResolver、DispatcherServlet等,并掌握创建并部署一个Spring MVC Web应用程序的过程。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值