蜂鸟E203学习笔记(二)--蜂鸟E203总体框架

news2025/2/25 16:39:52

蜂鸟E203总体框架

蜂鸟E203处理器系统如下图所示
在这里插入图片描述

一、蜂鸟E203处理器核设计总览和顶层

1.1 蜂鸟E203处理器核的设计理念

  1. 模块化和可重用性:将处理器分成几个主体模块,每个单元之间的接口简单清晰。
  2. 面积最小化:追求低功耗和小面积,尽可能地服用数据通路以节省面积开销
  3. 结构简单化
  4. 性能不追求极端

1.2 蜂鸟E203处理器核的RTL代码风格

  • 使用标准的DFF模块例化、生成寄存器
  • 推荐使用Verilog中的assign语法替代if-else 和case语法

1.2.1 使用标准的DFF模块例化生成寄存器

wire flg_r
wire flg_nxt = ~flp_r;
wire flg_ena

sirv_gnrl_dfflr #(1) flg_dfflrs(flg_ena, flg_r, flg_nxt ,clk, rst_n);

实际上sirv_gnrl_dfflr 是一个使用Verilog语法的always块编写的DFF模块。
if else无法捕捉不定态,使用这个DFF模块还可以捕捉不定态,一旦输入是不定态就会退出仿真并且报错。

1.2.2 推荐使用assign 语法替代if else 和case语法

verilog的if else和case语法存在两大缺点:

  • 不能传播不定态
  • 会产生优先级的选择电路而非并行选择电路,从而不利于优化时序和面积

对于if-else不能传播不定态,以如下代码为例。假设a的值为X(不定态),按照Verilog语法它会将等效于 a==0 ,从而让out等于 in2 ,最终没有将X传播出去。这种情况可能会在仿真阶段掩盖某些致命的bug,造成芯片功能错误。

if (a)
	out = in1;
else 
	out = in2;

使用assign语法的话,则会将X传播出去,从而让out也等于X。
aassign out = a ? in1:in2;
Veriog的case语句同样不会传播不定态,同时if-else和case也会形成优先级选择电路如

if(sel1)
	out = in1[3:0];
else if (sel2)
	out = in2[3:0];
else if (sel3)
	out = in3[3:0];
else 
	out = in4[3:0];

使用assign的话,假如确实是生成一处有优先级的选择电路则

assign out = sel1 ? in1[3:0]:
			 sel2 ? in2[3:0]:
			 sel3 ? in3[3:0]:
			 		in4[3:0];

而如果要生成并行的选择逻辑,则利用assign语法明确地写成"于或"的逻辑

assign out = ({4{sel1}} & in1[3:0])
			|({4{sel2}} & in2[3:0])
			|({4{sel3}} & in3[3:0])

{ }表示拼接,{第一位,第二位…};
{{ }}表示复制,{4{a}}等同于{a,a,a,a};
&是按位与 |是按位或

1.2.3 注意事项

  • 带reset信号的寄存器面积略大,时序稍微差一些,因此在数据通路上可以使用补带reset的寄存器,而只在控制通路商使用带reset信号的寄存器

1.3 蜂鸟E203模块层次划分

在这里插入图片描述
在这里插入图片描述

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

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

相关文章

DS18B20

一、DS18B20初始化时序图 (1) 先将数据线置高电平“1”。 (2) 延时(该时间要求的不是很严格,但是尽可能的短一点)。 (3) 数据线拉到低电平“0”。 (4&#xf…

【配送路径规划】基于matlab遗传算法求解静态外卖骑手路径规划问题【含Matlab源码 2248期】

⛄一、遗传算法求解静态外卖骑手路径规划问题 1 模型假设 外卖配送的实际运行是一个复杂的过程, 受诸多因素影响, 为了建立调度模型, 本文做如下假设。 (1) 外卖配送更多的是服务特殊群体, 所以本文认为外卖配送是一种预约型配送, 即在进行调度安排前, 己经获取了所有顾客的地…

Java并发-生产者消费者实现

生产者与消费者模型介绍 定义: 生产者消费者模式是一个十分经典的多线程并发协作的模式。 意义:弄懂生产者消费者问题能够让我们对并发编程的理解加深。 介绍:所谓生产者 - 消费者问题,实际上主要是包含了两类线程,…

Python面向对象编程之对象行为与特殊方法

面向对象编程之对象行为与特殊方法 python中的对象通常根据它们的行为和实现的功能进行分类。例如,所有序列类型都分在一组,如字符串,列表和元组,就是因为它们都支持一组相同的序列操作,如s[n], len[s]等。 所有基本…

【学习总结】LSD-SLAM配置与运行记录

今天安装测试了LSD-SLAM,记录配置中遇到的问题。 LSD-SLAM论文 LSD-SLAM: Large-Scale Direct Monocular SLAM, J. Engel, T. Schps, D. Cremers, ECCV 14 Semi-Dense Visual Odometry for a Monocular Camera, J. Engel, J. Sturm, D. Cremers, ICCV 13 配置环境…

SpringBoot实现多数据源(四)【集成多个 Mybatis 框架】

上一篇文章《SpringBoot实现多数据源&#xff08;三&#xff09;【AOP 自定义注解】》 四、集成多个 Mybatis 框架 实现步骤 创建一个 dynamic_mybatis 的springboot项目&#xff0c;导入依赖 pom.xml <dependencies><!--jdbc--><dependency><groupId…

Fiddler抓取手机app包

文章目录1. 配置fiddler1.1 下载fiddler1.2 配置fiddler2. 安装证书2.1 查询主机ip2.2下载证书2.3 手机安装证书2.4 查询安装的证书3. 手机设置代理4. 测试是否抓包成功大前提&#xff1a;手机和Fiddler所在的主机在同一网段&#xff0c;且能够互相访问 1. 配置fiddler 1.1 下…

第三十八篇 Vue中封装Swiper组件 2.0

上一篇内容讲到封装Swiper组件的一个过程&#xff0c;如果是静态的数据封装组件初始化在mounted当中并无多大影响&#xff0c;但是这样封装的组件复用性较低或者可能只使用一次&#xff0c;那么在动态使用通过ajax请求数据需要面临的是swiper初始化过早的问题&#xff0c;在mou…

【车间调度】基于matlab混合蛙跳算法 (SFLA) 求解简单调度问题【含Matlab源码 2247期】

⛄一、车间调度简介 在传统的SFLA中&#xff0c;每一个青蛙的位置代表一个解&#xff0c;若干个青蛙组成的种群代表一个解的集合&#xff0c;种群被划分为不同的组&#xff0c;即模因组&#xff0c;对每个模因组执行搜索过程&#xff0c;当达到终止条件后&#xff0c;重新将模…

编译原理13:SLR(1)分析表、LR(1)分析表

更强的LR分析 可以根据当前单词&#xff0c;来选择是移进还是归约。只要所有移进项目中的点后面的那些终结符&#xff0c;与归约项目生成的非终结符的Follow集合的元素没有重叠。若当前单词属于上述Follow集合里则规约 SLR(1)冲突解决办法 SLR(1)分析表的构造 SLR(1)分析表的构…

001. 组合

1.题目链接&#xff1a; 77. 组合 2.大概思路&#xff1a; 2.1题目要求&#xff1a; 给两个值 n 和 k &#xff0c;要求从[1&#xff0c;n]的区间中&#xff0c;输出所有元素数量为k的组合。&#xff08;不能有[1,1]&#xff0c;值只能取一次&#xff09; 2.2思路&#xff…

(十七)Spring6整合JUnit

文章目录环境Spring对JUnit4的支持Spring对JUnit5的支持上一篇&#xff1a;&#xff08;十六&#xff09;Spring对事务的支持 环境 spring6里程碑版本的仓库 依赖&#xff1a;spring context依赖、spring对junit的支持相关依赖、junit4依赖、junit5依赖 <!--配置多个仓库-…

Spring【Spring的创建与使用】

Spring【Spring的创建项目与使用】&#x1f34e;一.Spring创建项目&#x1f352;1.1 创建⼀个 Maven 项⽬&#x1f352;1.2 添加 Spring 框架⽀持&#x1f352;1.3 添加启动类&#x1f34e;二.Bean对象的存储与获取&#x1f352;2.1 存储 Bean 对象&#x1f349; 2.1.1 创建 Be…

C语言【微项目19】—大整数字符串乘法器[纯字符串乘法][乘法表与加法表]【2022-11-27】

C语言【微项目19】—大整数字符串乘法器[纯字符串乘法][乘法表与加法表]【2022-11-27】1.函数功能2 简要测试结果3.BigInterNoLimitMutiString.c3.大整数字符串乘法器实现思路4. 大整数字符串乘法器典型使用流程main.c【TDTX】 【C99】 【编译与运行环境】64位Windows操作系统&…

Unity嵌入Android项目开发

目录前言1 搭建开发环境2 创建Unity项目2.1 新建项目2.2 Unity构建配置2.3 Android环境相关配置2.4 导出Unity库文件3 创建Android项目3.1 新建Android项目3.2 Android环境相关配置3.2 导入Unity相关的库3.3 Android中跳转到Unity视图4 进阶扩展4.1 包体积优化4.1.1 mono和IL2C…

ILRuntime1.安装

目录 1&#xff1a;官网地址&#xff1a;介绍 — ILRuntime 2&#xff1a;注意事项&#xff1a; 3&#xff1a;安装 此文章是参照官方文档&#xff0c;自己的开发笔记。 1&#xff1a;官网地址&#xff1a;介绍 — ILRuntime 官方Unity示例代码&#xff1a;GitHub - Ourpa…

CUDA-矩阵乘2

这里从一个 cuda 初学者的角度来阐述如何优化一个形状较大的正方形乘正方形的 FP32 矩阵乘。 矩阵乘作为目前神经网络计算中占比最大的一个部分&#xff0c;其快慢会显著影响神经网络的训练与推断所消耗的时间。虽然现在市面上已经有非常多的矩阵乘的高效实现——如基于 cpu 的…

基于Pytorch框架的轻量级卷积神经网络垃圾分类识别系统

在我之前的博文中也写过一篇关于垃圾识别的文章&#xff0c;主要是基于tensorflow和keras实现的&#xff0c;数据集是一个比赛提供的&#xff0c;有40个细分的子类别&#xff0c;最近是在学习PyTorch框架&#xff0c;实践做项目的过程中就想拿垃圾识别的数据集再开发垃圾识别模…

物联网-常见的服务架构演变

常见的服务架构演变 背景 在互联网的发展中&#xff0c;后端的web服务也经历了很多的演变&#xff1b;在公司业务稍微简单的时候&#xff0c;采用简单的服务&#xff0c;可以提高开发效率&#xff0c;可以帮忙节省更多的成本。但随着用户数量的剧增&#xff0c;流量突增&…

keras-yolo3-master 项目实战cookbook

1、.h5文件转化 1.1 Error: FileNotFoundError: [Errno 2] No such file or directory: ‘yolov3.weights’ 解决办法&#xff1a;通过在.py文件中添加print()命令发现文件的打开路径有问题&#xff0c;因此在代码中手动添加.weights的绝对路径&#xff0c;使程序能够找到该文…