OpenMIPS用verilog实现

一、前期准备

1. 编辑、编译、仿真工具

用vscode+iverilog+gtkwave组合实现verilog的编写、编译和波形查看,其配置过程见博主:Macbook M1使用vscode+iverilog+gtkwave实现Verilog代码的编译与运行-CSDN博客​​​​​​​​ ​ ​​​​ 文章浏览阅读1.6k次,点赞11次,收藏25次。最近在研究FPGA的开发,于是需要用到Verilog。但是手头上只有一台M1芯片的Macbook air,本文综合多篇教程,基于vscode+iverilog+GTKwave,带你从零开始在MacBook上搭建Verilog编写与仿真的平台。_gtkwavehttps://blog.csdn.net/qq_62561876/article/details/133901907

gtkwave工具的安装笔者费了一番功夫,最后是先安装MacPorts工具,然后用port命令行安装的方式得以安装成功。

MacPorts工具的安装可以参考:【macOS Sonoma】 MacPorts安装教程 - 哔哩哔哩

用port安装gtkwave

port install gtkwave

笔者在输入这条命令行遇到了error:Error: Failed to configure gtk-osx-application-common-gtk2: gtk2 +quartz not installed.

在网上找到教程,输入下面两条命令行,然后再重新安装gtkwave。

sudo port -f deactivate active
sudo port -v -N install gimp +quartz

查看verilog仿真模型的三条指令,其中openmips.vcd替换成实际生成的vcd名称

iverilog -o simulation.vvp *.v
vvp simulation.vvp
gtkwave openmips.vcd

2. MIPS编译环境的建立

如果希望使用GNU工具链进行编译,可以按此节进行配置。

2.1 linux环境搭建

若电脑没有linux环境,可以在电脑上安装docker,在docker中创建ubuntu镜像。

docker的安装参考链接:🎉 Docker 简介和安装 - Docker 快速入门

在docker中拉取ubuntu镜像

docker pull ubuntu

在docker中运行ubuntu

docker run -it --name myUbuntu -v /Users/lmx/Desktop/xcode:/home ubuntu /bin/bash

查看容器是否运行

docker ps

保存容器命令,其中这里最后一个参数是给这个容器命名

sudo docker commit -m="first commit" -a="fu" $id myubuntu:v1

运行上面保存好的容器,-v用来实现主机和容器之间的文件挂载

docker run -it -v /Users/lmx/Desktop/xcode:/home/xcode myubuntu:v1
2.1 GNU工具链

as:GNU汇编器。通常也称为GAS(GNU Assembler)。用来对汇编程序进行编译产生目标文件。

ld:GNU链接器。链接as产生的目标文件,以及重定位数据产生可运行文件。

objcopy:用于将一种格式的目标文件复制成第二种格式。

objdump:用于列出关于二进制文件的各种信息。

readelf:类似于objdump,仅用于处理elf格式的文件。

二、OpenMips处理器蓝图

原始OpenMips处理器模块示意图如下所示,图取自于《自己动手写CPU》。

其中各模块的功能主要如下。

取指:取出指令存储器中的指令,PC值递增,准备取下一条指令。

译码:对指令进行译码,判断指令类型。从通用寄存器中取出源操作数。这里有两个源操作数寄存器,这两个源操作数寄存器都可以根据各自的使能信号选择读取通用寄存器的值还是使用立即数。

执行阶段:依据译码阶段送入的源操作数、操作码进行运算。

访存阶段:访存mem。

写回阶段:将运算结果保存到目的寄存器。

图中所有的IF/ID、ID/EX等衔接模块都是实现打拍功能,隔离开各组合模块,经过这些模块时间周期为一个cycle。其它模块为组合模块。

仿真波形图如下,195ns时rst置为0,在下一个clk上升沿,rom_ce使能信号有效,此时读取到第一条inst。经过if/id模块打一拍送到id模块进行译码,再经过id/ex模块打一拍送到ex中执行运算,再经过ex/mem模块打一拍送到mem模块进行访存,最后经过mem/wb模块打一拍将结果写回到通用寄存器。从指令读取出来到mem/wb模块的 wb_wreg信号拉高一共经历了4个cycle,wb_wreg拉高后将结果写入到通用寄存器为一拍,故而整个过程一共耗时5个时钟周期。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/359711.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

深入理解TCP网络协议(2)

目录 1.TCP的状态转换 1.1 LISTEN状态和ETABLISHED状态 ​编辑2.TIME_WAIT 和 CLOSE_WAIT 2.滑动窗口 1.TCP的状态转换 我们通过上图可以看到TCP状态转换的详细过程.在实际开发的过程中,我们不需要了解的这么细致.为了方便大家的理解,我挑几个主要的状态来给大家聊一下 1.…

MySQL库表操作 作业

题目: 1. sql语句分为几类?2. 表的约束有哪些,分别是什么,设置的语法分别是什么?3. 做出班级表,学生表的E-R图,数据库模型图,以及核心的sql语句. 1. MySQL致力于支持全套ANSI/ISO SQL标准。在MySQL数据库中,SQL语句主要可以划分为以下几类: > DD…

CentOS gui 图形界面显示文字乱码

一、现象 CentOS(CentOS 7.5)控制台下显示中文乱码: 或者通过X11 Forwarding远程显示CentOS的图形化程序文字乱码: 二、解决方法 安装中文语言包: yum install kde-l10n-Chinese 注:网上有些文章会推荐安…

最小化安装BCLinux-for-Euler-21.10-dvd-x86_64-230731版

本文记录最小化安装BCLinux-for-Euler-21.10-dvd-x86_64-230731版。 一、镜像获取 1、下载镜像 移动云官方网站 最新镜像为2023-11-02 15:04:56更新的BCLinux-for-Euler-21.10-dvd-x86_64-230731版 直接下载地址:https://mirrors.cmecloud.cn/bclinux/oe21.10/I…

回归预测 | Matlab实现CPO-SVR冠豪猪优化支持向量机的数据多输入单输出回归预测

回归预测 | Matlab实现CPO-SVR冠豪猪优化支持向量机的数据多输入单输出回归预测 目录 回归预测 | Matlab实现CPO-SVR冠豪猪优化支持向量机的数据多输入单输出回归预测预测效果基本描述程序设计参考资料 预测效果 基本描述 1.Matlab实现CPO-SVR冠豪猪优化支持向量机的数据多输入…

excel中提取一串数字中的某几个数字

excel中提取一串数字中的某几个数字 提取一串数字中的某几个数字,使用公式函数截取数据 LEFT函数:用于截取单元格左边的字符,例如“LEFT(A1,5)”会返回A1单元格中的前5个字符。RIGHT函数:用于截取单元格右边的字符,例…

华为云codeArts使用操作流程

一、开启服务 什么是华为云CodeArts? 本实验将在华为云CodeArts平台上搭建一个凤凰商城开发项目,并完成需求管理、代码仓库、代码检查、编译构建、发布、部署、流水线等软件开发操作。 1)新建项目 进入华为云“控制台”,鼠标移动到页面左侧菜…

【鸿蒙】大模型对话应用(二):对话界面设计与实现

Demo介绍 本demo对接阿里云和百度的大模型API,实现一个简单的对话应用。 DecEco Studio版本:DevEco Studio 3.1.1 Release HarmonyOS SDK版本:API9 关键点:ArkTS、ArkUI、UIAbility、网络http请求、列表布局、层叠布局 对话页…

Mac下手动源码编译安装Swig

使用Homebrew安装 这个方式最简单,但是一般都是安装的最新版: brew install swig如果按照特定版本,需要看一个当前支持的列表: brew search swig brew install swig3源码编译安装 swig依赖pcre库,需要先安装pcre …

一文掌握SpringBoot注解之@Component 知识文集(8)

🏆作者简介,普修罗双战士,一直追求不断学习和成长,在技术的道路上持续探索和实践。 🏆多年互联网行业从业经验,历任核心研发工程师,项目技术负责人。 🎉欢迎 👍点赞✍评论…

Nginx 本地部署vue项目

1、 下载 Nginx 稳定版本 2、下载安装后,打开 nginx.conf配置文件 3、找到打包好的文件,并配置运行文件 文件的位置 root C:/server/build location /{root C:/server/build;index index.html index.htm;#解决刷新后nginx报404问题try_files $uri …

redis复习笔记05(小滴课堂)

案例实战之注册登录-图形验证码谷歌开源Kaptcha引入 验证码配置工具类。 验证码存储Redis逻辑编码实战 工具类用于获取本机ip和md5加密,直接使用就行,我们这里主要是学习redis不是学习这个。 获取验证码并存到redis中的接口: 运行测试&…

聚焦AI新动能,九州未来与燧弘华创签约!

1月24日,厦门市电子信息与人工智能产业高质量发展大会成功举办。来自电子信息产业、人工智能领域的企业家、专家等近300位嘉宾齐聚一堂,共谋智能基础,共话产业合作,共享发展商机。 会上,九州未来与燧弘华创签署算力租…

【Tomcat与网络4】Tomcat的连接器设计

目录 1 如何设计一个灵活可靠的连接器 2 主要组件介绍 在上一篇,我们介绍了Tomcat提供服务的整体结构,本文我们一起来看一下Tomcat的连接器的设计。 在前面我们提到Tomcat主要完成两个功能: 处理 Socket 连接,负责网络字节流与…

详解SpringCloud微服务技术栈:深入ElasticSearch(1)——数据聚合

👨‍🎓作者简介:一位大四、研0学生,正在努力准备大四暑假的实习 🌌上期文章:详解SpringCloud微服务技术栈:ElasticSearch实战(旅游类项目) 📚订阅专栏&#x…

Docker容器引擎镜像创建

目录 一、镜像的创建 (一)基于现有镜像创建 1.启动一个镜像,在容器里做修改 2.将修改后的容器提交为新的镜像 (二)基于本地模板创建 (三)基于Dockerfile 创建 1.联合文件系统&#xff08…

【DB2 流浪之旅】 第一讲 Linux 环境安装 db2 数据库

DB2数据库是IBM开发的一种大型关系型数据库平台。它支持多用户或应用程序在同一条SQL 语句中查询不同database甚至不同DBMS中的数据。一般DB2是搭配IBM Power系列小机使用的,兼容性好、性能高。当然DB2也有Linux版本的,相对性能会差一些,主要…

大创项目推荐 题目:基于深度学习卷积神经网络的花卉识别 - 深度学习 机器视觉

文章目录 0 前言1 项目背景2 花卉识别的基本原理3 算法实现3.1 预处理3.2 特征提取和选择3.3 分类器设计和决策3.4 卷积神经网络基本原理 4 算法实现4.1 花卉图像数据4.2 模块组成 5 项目执行结果6 最后 0 前言 🔥 优质竞赛项目系列,今天要分享的是 基…

前端基础-事件循环(消息循环)

这里写自定义目录标题 1. 浏览器进程主要的进程(了解) 2. 渲染主线程是如何工作的?3. 面试题:如何理解 JS 的异步?3. JS为何会阻碍渲染?4. 任务有优先级吗?5. 面试题:阐述一下 JS 的…

React-Native跟Android交互--简单示例记录

/** * 使用命令 npx react-nativelatest init DemoRN创建项目 * * "react": "18.2.0", * "react-native": "0.73.2" * * 官网有详细教程:https://reactnative.dev/docs/native-modules-android */ 一、RN invoke androi…