【IC前端虚拟项目】MVU模块方案与背景熟悉

【IC前端虚拟项目】数据搬运指令处理模块前端实现虚拟项目说明-CSDN博客

mvu这个模块是干嘛用的呢?从这个名字就可以看出来move_unit,应该是做数据搬运的。很多指令级中都会有数据搬运的指令,这类指令的作用一般是在片内片外缓存以及通用专用寄存器之间搬运数据,比如典型的riscv里的load/store指令。

而mvu这个模块处理的指令就是move指令,指令的作用是在ram和ddr之间搬运数据。比如需要做三维卷积,那么可能需要把特征和权重先从ddr读到ram里进行计算,计算完成后再把卷积结果从ram读回到ddr上,这种场景就是mvu要做的事情了。

mvu上游的模块是idu,顾名思义就是inst_decode_unit,指令解码模块。众所周知,处理器的处理流程包括取指、译码、执行、写回、提交等,idu负责的就是译码。 idu接收到指令后对指令进行分析,发现这是一条move指令之后,将指令发送给mvu有mvu负责处理。mvu根据指令进行数据的搬运,将所有的数据搬运完成后向idu进行指令提交。

简单点来说mvu就实现5个功能:

1.接收idu下发的move指令;

2.根据指令读ddr/ram;

3.将读回的数据摆放在合理的位置;

4.根据指令把摆好的数据写回ddr/ram;

5.提交指令;

功能并不复杂,不过corner的点其实不算少。因为axi读写地址是根据数据位宽对齐的,而指令中的读写地址是按Byte对齐的,因此把读回来的数据偏移、拼接形成写数据的过程,时序上还是比较复杂的,尤其当总线位宽比较大时。

对于这个项目,基本的设计要求有如下几个:

1.缓存指令最多为数量8个,避免资源浪费;

2.单指令内通路没有反压场景下,ar/aw/w通路不应该有空拍;

3.指令间ar/aw/w允许有空拍,也可以尝试设计指令间无空拍的结构;

4.inst对应的aw/w除第一笔和最后一笔外,其他strb不允许出现0;

在此基础上,可以进一步的优化面积时序以及功能:

1.AXI相关为参数化设计,尝试对128/256/512/1024四种不同位宽在400M/800M两种时钟频率下收时序;

2.降低复位寄存器比例,提高clk_gating比例;

我自己完成的代码在90nm工艺下跑1G时钟,最大时序违规是-260ps,这个数字还是挺大的,应该说优化空间很大。在实际的项目中我们一般要求时序违规在-100ps以下即可满足要求,不过虚拟项目里,还是尽量把违规时序收到0吧。

此外,mvu模块中还引入了寄存器单元,通过寄存器进行相关的配置和模块状态的反馈。通过这部分练习,能够系统的掌握寄存器单元的设计、实现与仿真。

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

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

相关文章

Skywalking告警规则示例

skywalking告警规则文件配置示例【包含自定义规则】: # Licensed to the Apache Software Foundation (ASF) under one # or more contributor license agreements. See the NOTICE file # distributed with this work for additional information # regarding copyright ow…

【C++多线程编程】(二)之详解锁(lock)和解锁(unlock)

在C多线程编程中,锁(lock)和解锁(unlock)通常用于管理共享资源的访问,以防止多个线程同时对资源进行修改,从而避免竞态条件(Race Condition)和数据不一致性问题。C标准库…

Java基础语法之抽象类和接口

抽象类 什么是抽象类 并不是所有的类都是用来描述对象的,这样的类就是抽象类 例如,矩形,三角形都是图形,但图形类无法去描述具体图形,所以它的draw方法无法具体实现,这个方法就可以没设计成抽象方法&…

常用模块之(time/datetime)

【 一 】时间模块(time/datetime) 【 二 】 表示时间的三种方式 *时间戳(Timestamp)是指1970年1月1日00:00:00开始计算的偏移量。可以使用time模块中的time()函数获取当前时间的时间戳,也可以使用datetime模块中的tim…

大创项目推荐 深度学习 python opencv 实现人脸年龄性别识别

文章目录 0 前言1 项目课题介绍2 关键技术2.1 卷积神经网络2.2 卷积层2.3 池化层2.4 激活函数:2.5 全连接层 3 使用tensorflow中keras模块实现卷积神经网络4 Keras介绍4.1 Keras深度学习模型4.2 Keras中重要的预定义对象4.3 Keras的网络层构造 5 数据集处理训练5.1 …

ElasticSearch学习篇8_Lucene之数据存储(Stored Field、DocValue、BKD Tree)

前言 Lucene全文检索主要分为索引、搜索两个过程,对于索引过程就是将文档磁盘存储然后按照指定格式构建索引文件,其中涉及数据存储一些压缩、数据结构设计还是很巧妙的,下面主要记录学习过程中的StoredField、DocValue以及磁盘BKD Tree的一些…

PyQt6 QScrollBar滚动条控件

锋哥原创的PyQt6视频教程: 2024版 PyQt6 Python桌面开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili2024版 PyQt6 Python桌面开发 视频教程(无废话版) 玩命更新中~共计48条视频,包括:2024版 PyQt6 Python桌面开发 视频教程(无废话版…

录制第一个jmeter性能测试脚本2(http协议)_图书管理系统

我们手工编写了一个测试计划,现在我们通过录制的方式来实现那个测试计划。也就是说‘’测试计划目标和上一节类似:让5个用户在2s内登录图书管理系统,然后进入 页面进行查看。 目录 欢迎访问我的免费课程 PPT、安装包、视频应有尽有&#xff…

什么是幂等操作?

在数学和计算机科学中,幂等操作是指无论应用操作一次还是多次,结果都相同的操作。 换句话说,重复多次相同的操作不会产生不同的效果。这个概念通常用于描述函数、操作或系统的性质。 在具体应用中,幂等性具有以下两个重要的特性&…

【微服务】Spring Aop原理深入解析

目录 一、前言 二、aop概述 2.1 什么是AOP 2.2 AOP中的一些概念 2.2.1 aop通知类型 2.3 AOP实现原理 2.3.1 aop中的代理实现 2.4 静态代理与动态代理 2.4.1 静态代理实现 三、 jdk动态代理与cglib代理 3.1 jdk动态代理 3.1.1 jdk代理示例 3.1.2 jdk动态代理模拟实现…

【OpenCV】 OpenCV 源码编译并实现 CUDA 加速 (Windows)

OpenCV 源码编译并实现 CUDA 加速 Windows 1. 环境准备1.1 软件环境1. 2 源码下载 2. CMake编译项目2.1 创建cmake项目2.2 设置编译配置2.3 解决异常2.3.1 文件下载异常2.3.2 解决CUDA版本异常 2.4 编译项目 3. Visual Studio 编译项目4. 项目测试5. 总结 OpenCV是一个基于Apac…

Ubuntu 常用命令之 ln 命令用法介绍

ln命令在Ubuntu系统中用于创建硬链接或符号链接。硬链接是指向文件的物理地址,而符号链接(也称为软链接)是指向文件路径的引用。 命令格式:ln [选项]... [-T] 目标(源文件) 链接(目标文件&…

管理类联考——逻辑——真题篇——按知识分类——形式逻辑

文章目录 2023真题(2023-26)-形式逻辑-假言-假言串联模型-题干假言有重复,通过重复做串联;题干假言无重复,选项直接做排除。;-形式逻辑-双A串联公式-已知:①A是B(A→B);②A是C(A→C)。① 可推出:有的A是B,等价于:有的B是A,可与②串联得:有的B→A→C。②可推出…

【FPGA】Verilog:编码器 | 实现 4 到 2 编码器

0x00 编码器(Encoder) 编码器与解码器相反。当多台设备向计算机提供输入时,编码器会为每一个输入生成一个与设备相对应的信号,因此有多少比特就有多少输出,以数字形式表示输入的数量。 例如,如果有四个输…

NAS搭建WebDAV服务同步Zotero科研文献

文章目录 一、Zotero安装教程二、群晖NAS WebDAV设置三、Zotero设置四、使用公网地址同步Zotero文献库五、使用永久固定公网地址同步Zotero文献库 Zotero 是一款全能型 文献管理器,可以 存储、管理和引用文献,不但免费,功能还很强大实用。 ​ Zotero 支…

重新认识Word——尾注

重新认识Word——尾注 参考文献格式文献自动生成器插入尾注将数字带上方括号将参考文献中的标号改为非上标 多处引用一篇文献多篇文献被一处引用插入尾注有横线怎么删除?删除尾注 前面我们学习了如何给图片,公式自动添加编号,今天我们来看看毕…

LSTM ——作业

习题6-4 推导LSTM网络中参数的梯度, 并分析其避免梯度消失的效果 习题6-3P 编程实现下图LSTM运行过程 1. 使用Numpy实现LSTM算子 import numpy as np # 创建一个numpy数组x,它是一个4x4的矩阵,包含9个元素 x np.array([[1, 0, 0, 1],[3, …

Unity中URP下的菲涅尔效果实现(URP下的法线和视线向量怎么获取)

文章目录 前言一、实现思路二、实现原理我们可以由下图直观的感受到 N 与 L夹角越小,点积越接近(白色)1。越趋近90,点积越接近0(黑色) 三、实现URP下的菲涅尔效果1、我们新建一个Shader,修改为最…

【shell脚本实战案例】awk将科学计数法数字转为实数数字

问题背景: 科学计数法:1.75699e03 有的时候处理数据需要将科学计数法转换为实数,我们可以使用awk打印出来,将会自动进行数据转换,具体方法如下: 解决方法: #awk科学计数法转实数 echo 1.775…

安全密码(字符串)

#include <stdio.h> #include <stdbool.h> #include <string.h> bool is_secure_password(const char* password); int main() {int M;char password[51];// 读取输入中的密码数量 Mscanf("%d", &M);// 处理每个密码for (int i 0; i < M; …