草庐IT

Tinyriscv FPGA移植

lwwaixuexi 2023-12-22 原文

Tinyriscv介绍

Tinyriscv: 本项目实现的是一个单核32位的小型RISC-V处理器核(tinyriscv),采用verilog语言编写。

tinyriscv有以下特点:

  1. 支持RV32IM指令集,通过RISC-V指令兼容性测试;
  2. 采用三级流水线,即取指,译码,执行;
  3. 可以运行C语言程序;
  4. 支持JTAG,可以通过openocd读写内存(在线更新程序);
  5. 支持中断;
  6. 支持总线;
  7. 支持FreeRTOS;
  8. 支持通过串口更新程序;
  9. 容易移植到任何FPGA平台(如果资源足够的话);

tinyriscv的整体框架如下:

项目中的各目录说明:

rtl:该目录包含tinyriscv的所有verilog源码;

sim:该目录包含仿真批处理bat文件和脚本;

tests:该目录包含测试程序源码,其中example目录为C语言程序例程源码,isa目录为RV32指令测试源码;

tools:该目录包含编译汇编和C语言程序所需GNU工具链和将二进制文件转成仿真所需的mem格式文件的脚本,还有通过串口下载程序的脚本。

pic:存放图片;

tb:该目录包含仿真的testbench文件;

fpga:存放FPGA相关文件,比如约束文件;

在linux(ubuntu)平台上已经运行过指令测试程序通过

移植到FPGA ZYNQ7020

1.软件:xilinx vivado开发环境。

2.FPGA:xilinx ZYNQ7020。

3.调试上位机openOCD。

4.调试器:CMSIS-DAP。

图1 RISCV调试系统框架

为与板子适配,修改源代码,修改管脚约束文件后,编译成功后,将比特流文件下载到板子中。

在用Jtag方式通过openocd调试tinyriscv时出现问题

 

一开始是调试器识别到两个jtag,后与同学讨论认为,ZYNQ7020是一块有arm硬核(PS)和可编程逻辑(PL可认为是FPGA)组成,不能直接调用jtag接口,所有的调用需要通过arm硬核来实现,上网查了很多资料未能解决。

移植到FPGA ARTY A7 100T

1.软件:xilinx vivado开发环境

2.FPGA:xilinx ARTY A7 100T

3.调试上位机openocd

4.调试器:CMSIS-DAP

参考ARTY A7 100T技术手册

https://digilent.com/reference/programmable-logic/arty-a7/reference-manual

管脚约束

digilent-xdc/Arty-A7-100-Master.xdc at master · Digilent/digilent-xdc · GitHub

原理图

https://digilent.com/reference/_media/programmable-logic/arty-a7/arty-a7-e2-sch.pdf

JTAG连接

和开发板上的pmod连接在一起

SPI

时钟约束50MHz

A7时钟源 是100MHz 直接接上去tinyriscv跑不了这么快 做一个时钟分频

添加IP核 PLL

 

系统提供的例化模板

将例化添加到顶层文件tinyriscv_soc_top中

要注意 必须要在第一次使用时钟之前例化出来

例化模块中输入是sys_clk 输出是clk

Clk是没有声明的状态 需要声明 复位也要保持一致 rst

Openocd作为上位机

通过JTAG方式下载程序并让程序跑起来

例: GPIO程序

两个GPIO 一个输入模式 一个输出模式 关联起来

下载GPIO程序并运行 拨动拨码开关SW0 可以看到LED随之亮灭

参考

深入浅出RISC-V调试 | liangkangnan的博客

从零开始写RISC-V处理器 | liangkangnan的博客

有关Tinyriscv FPGA移植的更多相关文章

  1. ruby-on-rails - 可移植 Ruby on Rails 环境 - 2

    我给自己买了一个新的8gigUSBkey,我正在寻找一个合适的解决方案来拥有一个可移植RoR环境来学习。我在谷歌上搜索了一下,发现了一些可能性,但我很想听听一些现实生活中的经历和意见。谢谢! 最佳答案 我喜欢InstantRails,非常容易使用,无需安装程序,也不会修改您的系统环境。 关于ruby-on-rails-可移植RubyonRails环境,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/q

  2. ruby - 如何在 Ruby 中构建可移植的绝对路径? - 2

    让我们假设一个脚本需要访问一个目录,比如在“任意”操作系统上的/some/where/abc。在Ruby中构建路径有几个选项:File.join('','some','where','abc')File.absolute_path("some#{File::SEPARATOR}where#{File::SEPARATOR}abc",File::SEPARATOR)标准API中的路径名我相信第一个解决方案足够清晰,但符合惯用语。根据我的经验,一些代码审查会要求评论来解释它的作用......问题有没有更好的方法来构建绝对路径是Ruby,其中更好的意思是“完成工作并为自己说话”?

  3. ruby - 将 Ruby 打包成可移植的可执行文件 - 2

    长期以来,我一直在努力寻找一个好的解决方案:是否有可靠的方法将ruby​​安装到可在该平台上移植的文件夹中?我想要一个文件夹,我可以轻松地将其复制到我正在制作的发行版中,这样我就可以“随时随地”拥有一个ruby​​环境。如果我需要编译源代码和其他东西,那很好,只要我最终安装了可移植的ruby​​安装即可。我找到了一些试图解决这个问题的资源,但没有一个让我满意。PortableRubyonRailsenvironmenthttp://hcettech.blogspot.pt/2012/05/windows-portable-rails-development.html对我来说,这是Rub

  4. SE5_基于YOLO3D的目标检测算法移植与测试 - 2

    本文档适用于SOPHGO(算能)BM1684-SE5及对应通用云开发空间,主要内容:注意:由于SOPHGOSE5微服务器的CPU是基于ARM架构,部分步骤将在基于x86架构CPU的开发环境中完成初始化开发环境(基于x86架构CPU的开发环境中完成)YOLO3D目标检测算法模型转换(基于x86架构CPU的开发环境中完成)YOLO3D模型推理测试(处理后的YOLO3D项目文件将被拷贝至SOPHGOSE5微服务器上推理测试)1.初始化开发环境(基于x86架构CPU的开发环境中完成)1.1初始化开发环境(若wget后的地址不可用,请前往算能官网下载Docker镜像及SDK)#切换成root权限sudo

  5. Linux驱动之系统移植----uboot移植(有设备树版本),完整移植. - 2

    uboot版本:uboot2020.04开发板:100ask_imx6ull_pro拿到官方uboot后第一步先编译烧写测试,查看哪些驱动可用,哪些不可用.根据开发板厂商提供的资料:使用mx6ull_14x14_evk_defconfig配置进行修改编译完成后将uboot设备树以及uboot.imx烧写到开发板中运行CPU:i.MX6ULLrev1.1792MHz(runningat396MHz)CPU:Industrialtemperaturegrade(-40Cto105C)at40CResetcause:PORModel:i.MX6ULL14x14EVKBoardBoard:MX6ULL

  6. RK3588移植-ffmpeg交叉编译 - 2

    文章目录1.下载ffmpeg2.交叉编译3.修改cmakelist.txt4.将lib文件复制到install目录下的lib目录5.测试文件6.运行测试样例7.错误n.测试文件源码1.下载ffmpeggitclonehttps://git.ffmpeg.org/ffmpeg.gitffmpeg2.交叉编译进入下载目录,将ffmpeg编译成arm64平台的版本,编译后的文件存放于./instal_arm64中。sudo./configure--prefix=./instal_arm64--enable-shared--disable-static--enable-cross-compile--a

  7. javascript - 将 Chrome 扩展移植到 Firefox : equivalent to chrome. 存储 - 2

    我正在尝试将Chrome扩展移植到Firefox,我想知道什么等同于chrome.storage.local.set和chrome.storage.local.get在Firefox中添加sdk。我想,它是simple-storage.这是我的代码:chrome.storage.local.set({'tokenFU':token});[...]chrome.storage.local.get('tokenFU',function(result){token=result.tokenFU;if(token&&token!='undefined'){hideLog();}elseshow

  8. javascript - 如何将 Google Chrome 扩展移植到 Firefox? - 2

    我的一个扩展程序在GoogleChrome上很受欢迎,我想与Firefox用户分享。如何将javascript从使用chrome的API转换为Firefox可以处理的东西? 最佳答案 Extensionfactory会给你关于extension的问题,试试吧,但它不会在100%工作条件下转换它。 关于javascript-如何将GoogleChrome扩展移植到Firefox?,我们在StackOverflow上找到一个类似的问题: https://stack

  9. javascript - 将 C# 3D 数组移植到 JS 3D 数组 - 2

    我开发了一个c#库,它在3个项目中使用,该库在该特定代码段中中继,但是,我仍然需要在javascript中使用该代码,所以我将其移植出去,问题是,我不认为我可以复制相同的逻辑,例如,我一直在想这几天我无法得到答案。在C#库中,我有一个3D数组,它有点像应用程序中的核心属性,但我似乎无法弄清楚如何在JS环境中实现它。例如我有这段代码:publicObj[,,]objs=newObj[18,14,8];我会在每个位置分配对象,并尝试将其移植到javascript,这似乎会导致:var3dArr=newArray();3dArr[0]=newArray();3dArr[0][0]=newAr

  10. javascript - 从 node.js 移植 MD5 去 - 2

    关闭。这个问题需要debuggingdetails。它目前不接受答案。编辑问题以包含desiredbehavior,aspecificproblemorerror,andtheshortestcodenecessarytoreproducetheproblem。这将有助于其他人回答问题。关闭4年前。Improvethisquestion我在node.js中有一个认证逻辑varcrypto=require('crypto');varSaltLength=9;functioncreateHash(password){varsalt=generateSalt(SaltLength);varh

随机推荐