PicoRV32 笔记 05

news2024/11/23 19:56:45

接口信号

PicoRV32 提供一个本地存储器接口,Native Memory Interface。

本地存储器接口采用 valid-ready握手信号。这种机制在axi总线中使用相同,能够实现流控,

和axi总线不同点,PicoRV32本地接口使用一组valid-ready信号,而axi总线使用多个通道,每个通道有一组valid-ready信号。

PicoRV本地接口有如下信号

output        mem_valid
output        mem_instr
input         mem_ready

output [31:0] mem_addr
output [31:0] mem_wdata
output [ 3:0] mem_wstrb
input  [31:0] mem_rdata

mem_valid :当PicoRV进行一次存储读写时候,mem_valid有效,直到mem_ready有效。当这次传输是读取cpu执行指令的时候,mem_instr有效。

mem_instr:为高表示此次传输是获取指令;为低表示此次传输是获取数据

mem_ready:当从设备准备接收和发送数据的时候,置为有效。从设备也可直接给高

mem_addr : 读取存储器的地址

mem_wdata: PicoRV32写向存储器的数据

mem_wstrb:写信号,每1bit对应的mem_wdata中的8bit,在字节写,字写中有用。只可选下列值:

                4'b1111 : 32bit写

                4'b1100:高16bit写

                4'b0011:低16bit写

                4'b1000:字节写

                4'b0100:字节写

                4'b0010:字节写

                4'b0001:字节写

                4'b0000:32bit读

mem_rdata : 读数据,外设发给PicoRV32数据

读数据传输

PicoRV32在读数据时候,mem_wstrb必须为4'b0000,此时PicoRV32未使用mem_wdata信号;

读地址在mem_addr上出现,当mem_ready为高的时候,必须把读数据放到mem_rdata数据线上。mem_ready可以做成异步信号.下图官方文档中仿真波形

 上图中红色框选部分是两次读操作。

怎么确定是读还是写?

看mem_wstrb信号,如果mem_wstrb信号为4'b0000,则为读,其它值为写。

怎么确定是读指令还是读数据?

看mem_instr信号,高为读指令,低为读数据,显然第一框选为读数据,第二框选为读指令。

怎么确定读地址?

看mem_valid为高时刻,mem_addr的数据,第一框选地址为0x0000ABD4,第二框选地址为0x000009A8。

怎么确定读数据?

看mem_ready信号为高时刻,mem_rdata的数据,第一框选为0x6c6c6568,第二框选为0x05058082

数据在哪里被锁存?

看mem_ready,mem_valid同时为高,并且时钟上升沿出现时刻。

写数据传输

PicoRV32在写数据时候,mem_wstrb不为4'b0000,此时PicoRV32未使用mem_rdata信号;

写地址在mem_addr上出现,当mem_ready为高的时候,PicoRV32写数据放到mem_wdata数据线上。mem_ready可以做成异步信号,也可以直接给高电平.下图官方文档中仿真波形

怎么确定是读还是写?

看mem_wstrb信号,如果mem_wstrb信号为4'b0000,则为读,其它值为写。图中mem_wstrb为4'hf,表示32bit写

怎么确定是指令还是数据?

看mem_instr信号,高为指令,低为数据,显然图中为数据。指令只存在读,不存在写,所以写只针对写数据。

怎么确定写地址?

看mem_valid为高时刻,mem_addr的数据,图中写地址为0x10000000

怎么确定写数据?

看mem_valid信号为高时刻,mem_wdata的数据,图中数据为0x00000062

数据在哪里被锁存?

看mem_ready,mem_valid同时为高,并且时钟上升沿出现时刻。图中红色箭头指向的沿

简单从设备实现

上述说了这么多,怎么实现一个从设备,代码如下:

	wire        iomem_valid;
	reg         iomem_ready;
	wire [3:0]  iomem_wstrb;
	wire [31:0] iomem_addr;
	wire [31:0] iomem_wdata;
	reg  [31:0] iomem_rdata;

	reg [31:0] gpio;
	assign leds = gpio;

	always @(posedge clk) begin
		if (!resetn) begin
			gpio <= 0;
		end else begin
			iomem_ready <= 0;
			if (iomem_valid && !iomem_ready && iomem_addr[31:24] == 8'h 03) begin
				iomem_ready <= 1;
				iomem_rdata <= gpio;
				if (iomem_wstrb[0]) gpio[ 7: 0] <= iomem_wdata[ 7: 0];
				if (iomem_wstrb[1]) gpio[15: 8] <= iomem_wdata[15: 8];
				if (iomem_wstrb[2]) gpio[23:16] <= iomem_wdata[23:16];
				if (iomem_wstrb[3]) gpio[31:24] <= iomem_wdata[31:24];
			end
		end
	end

图中iomem_xxx 对应PicoRV32 mem_xxx信号

上述代码中实现一个简单led。这个led有一个32bit的寄存器 (reg [31:0]  gpio),主要对这个寄存器进行读写。

地址选中 iomem_addr[31:24] == 8'h03,表示当地址为 32'h03xx_xxxx都是操作这个寄存器。

当iomem_valid有效,表示PicoRV32有读写操作发过来,如果iomem_ready为低把gpio值放到iomem_rdata上,如果iomem_wstrb有值则把对应的iomem_wdata写到gpio寄存器

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

什么是SWDM4和100G QSFP28 SWDM4光模块?

随着OM5多模光纤(MMF)的推广和40G或100G数据中心传输网络的大规模部署&#xff0c;SWDM技术逐渐进入人们的视野并开始得到应用。那么&#xff0c;什么是SWDM4呢&#xff1f;什么是100G SWDM4光模块&#xff1f;它们的优势是什么&#xff1f;跟着易天光通信ETU-LINK看下面的文字…

十、原型、原型链、闭包和立即执行函数、插件开发初始

十、原型、原型链、闭包和立即执行函数、插件开发初始 原型 什么是原型&#xff08;prototype&#xff09;&#xff1f; 无论何时&#xff0c;只要创建一个函数&#xff0c;就会按照特定的规则为这个函数创建一个prototype属性&#xff0c;指向原型对象。 function Car(){}…

Vue入门与指令

Vue入门 1.1、MVVM编程思想 MVVM&#xff1a;页面输入改变数据&#xff0c;数据改变影响页面数据展示与渲染。 M&#xff08;model&#xff09;&#xff1a;普通的javascript数据对象。 V&#xff08;view&#xff09;&#xff1a;前端展示页面。 VM&#xff08;ViewModel&…

Jmeter初了解-接口并发测试

Jmeter初了解-接口并发测试 介绍 我们在开发的时候&#xff0c;经常会需要进行接口压力测试&#xff0c;确定接口运行的稳定情况 这里我们就使用java开发的测试工具Jmeter来进行测试。 Jmeter 官网地址 Apache JMeter™应用程序是开源软件&#xff0c;是一个 100% 纯 Jav…

Pytorch安装详细过程及遇到的问题解决

一、Aanconda的安装 可以参考笔者的这篇博客&#xff1a;Anaconda安装详细教程 二、准备工作 1、查看本机的python的版本(本机python解释器版本为3.8.5) 2、单击启动Anaconda Prompt创建新虚拟环境 3、在Anaconda Prompt依次执行以下命令&#xff0c;创建名字为pytorch的虚拟…

nn.Embedding使用

nn.Embedding是一种词嵌入的方式&#xff0c;跟one-hot相似但又不同&#xff0c;会生成低维稠密向量&#xff0c;但是初始是随机化的&#xff0c;需要根据模型训练时进行调节&#xff0c;若使用预训练词向量模型会比较好。 1. one-hot one-hot是给定每个单词一个索引&#xf…

概论_第4章__方差D(X)的定义和性质

一 定义 通常以此公式来计算&#xff1a; 就是说&#xff1a; 方差 X的平方再求期望 —— X的期望的平方 即 括号里面的平方的期望减去期望的平方&#xff0c; 怎样求期望点击&#xff1a;概论_第4章__期望的定义和性质 注意&#xff1a; 方差不可能为负数。 2. …

如何快速拥有自己的虚拟形象?

元宇宙&#xff08;Metaverse&#xff09;&#xff0c;是人类运用数字技术构建的&#xff0c;由现实世界映射或超越现实世界&#xff0c;可与现实世界交互的虚拟世界&#xff0c;具备新型社会体系的数字生活空间。 可见元宇宙第一步是创建专属虚拟形象&#xff0c;但创建3D虚拟…

Android入门第45天-手工发送一个BroadCast

简介 上一篇我们讲了简单的动态BroadCast&#xff0c;今天我们通过手工来发送一条BroadCast进一步来了解BroadCast。 在上一篇里我们使用BroadCast监听网络状态&#xff0c;今天我们要完成的是自己发一条自自己的消息来触发BroadCast Receiver。 设计 为了让Receiver收听到…

蓝牙耳机无延迟哪款好?适合打游戏的无线蓝牙耳机

手机可以说是人手必备&#xff0c;随声得还有蓝牙耳机&#xff0c;随着3.5耳机孔得消失&#xff0c;蓝牙耳机可以说是现在得主流&#xff0c;无论哪个年龄段都可以佩戴蓝牙耳机&#xff0c;日常听歌、追剧&#xff0c;和朋友玩游戏佩戴蓝牙耳机&#xff0c;已经成为一种生活方式…

mybatis06:MyBatis的多表操作

目录 1.一对一关系 2.一对多查询 3.多对多查询 4例题演示 ​5.知识小结 1.一对一关系 2.一对多查询 3.多对多查询 4例题演示 前置准备 对应的依赖 <dependencies><!-- mysql驱动 --><dependency><groupId>mysql</groupId><artifactId&…

外汇交易:流行图表指标盘点

您所学到的关于交易的一切都像一种工具&#xff0c;已被添加到外汇交易者的工具箱中。当您在正确的时间使用正确的工具时&#xff0c;您的图表指标工具将为您提供更好的机会做出正确的交易决策。 布林带 布林带用来衡量市场的波动性。它们的作用类似于迷你支撑位和阻力位。 布…

MES系统为何与工厂数字化转型联系紧密

随着数字化技术的发展&#xff0c;MES系统的定义也是在不断的变化。但是&#xff0c;计划调度、质量管理、生产执行以及数据采集&#xff0c;一直都是MES的核心功能。 工厂数字化改造&#xff0c;对于制造业来说并不是一场革命。很多工厂在十年前就实现了车间设备的联网&#…

EXCEL基础:数据有效性设置与从身份证号码提取出生日期、性别操作

如下所示&#xff0c;为某公司的人员信息表&#xff0c;以下操作均是基于该表格&#xff0c;声明&#xff1a;该表格来自网络&#xff01; 下面进行【数据有效性】的设置&#xff1a; 先选中区域&#xff0c;弹出【数据有效性】对话框&#xff0c;在【设置】里的【允许】里输入…

win11设置java环境变量

python环境变量比java简单很多&#xff0c;而java比较麻烦&#xff0c;下面这些步骤应该是一步不能少&#xff0c;必须新建两个而且移动到最上面 一、找到设置环境变量 只要是windows系统&#xff0c;他就长这样&#xff0c;需要找到这个页面 很多之前的文章都会说&#xff1…

[附源码]Node.js计算机毕业设计电影院订票系统Express

项目运行 环境配置&#xff1a; Node.js最新版 Vscode Mysql5.7 HBuilderXNavicat11Vue。 项目技术&#xff1a; Express框架 Node.js Vue 等等组成&#xff0c;B/S模式 Vscode管理前后端分离等等。 环境需要 1.运行环境&#xff1a;最好是Nodejs最新版&#xff0c;我…

六、作用域,作用域链,预编译,闭包基础

六、作用域&#xff0c;作用域链&#xff0c;预编译&#xff0c;闭包基础 使用AO,GO说明作用域和作用域链 AO与函数有关&#xff0c;函数能创造出独立的空间&#xff0c;但是这句话不太对&#xff0c;接下来就是解释&#xff1a; 对象 每个对象都有属性和方法&#xff1a; …

MobileNetV2原理说明及实践落地

本文参考&#xff1a; 轻量级网络——MobileNetV2_Clichong的博客-CSDN博客_mobilenetv2 1、MobileNetV2介绍 MobileNetV1主要是提出了可分离卷积的概念&#xff0c;大大减少了模型的参数个数&#xff0c;从而缩小了计算量。但是在CenterNet算法中作为BackBone效果并不佳&…

【MATLAB教程案例59】使用matlab实现基于LSTM网络的数据分类预测功能与仿真分析

欢迎订阅《FPGA学习入门100例教程》、《MATLAB学习入门100例教程》 目录 1.软件版本 2.LSTM网络理论概述

荧光点击试剂ICG-N3, ICG-azide,根据具体的需求进行定制, 避免频繁的溶解和冻干,取用时注意干燥

【英文名称】 ICG-azide&#xff0c;ICG-N3 【结 构 式】 【CAS】N/A 【分子式】C48H56N6O4S 【分子量】813.07 【基团】叠氮基基团 【纯度】95% 【规格】1mg&#xff0c;5mg&#xff0c;10mg 【是否接受定制】根据具体的需求进行定制 【外观】 绿色固体&#xff08;具…