阅读芯片源码(RTL)

====part one====

主要的原则。

一个rtl可以是这样的:

经常大家习惯于算法和数据结构。对于设计的部分,落实不一定多。

另外一个rtl也可以是这样的:

所以从不同的层面来讲,一个Rtl有不同的表述。

首先大概把所有的部分浏览一遍,看看有些什么。

其次,找到重点的部分。

重点分两种,一种是熟悉的,一种是重要的。

如果重要的不懂,那就先看熟悉的。

再次,找到其中的逻辑。这是因为单点的记忆是不能得到很好的收获的。

重要的,对rtl来讲,存储,状态机,interface都是重点。interface中,要注意信号之间的紧密关系,比如握手。或者信号的处理要求:要求在何种状态响应,要响应什么。

逻辑行中,如果向下面说的,如果多个if 分支,或者非常多的if层次,那更有可能是重要的。反之,多个分开的if,则更不一定是重要的。

熟悉的,有时不是真熟悉,而只是熟悉其中一个字眼,基于这个字眼,能够联想,就是扫雷。

在逻辑寻找中,应该注意分支。比如一个if block中,平行的几个分支是按什么来切分的。逻辑中,还应该注意层次,还是if,如果if中还有if,那么两个if的逻辑层次是依据什么来的呢?

要知道模块关系。

interface的确很重要。双边关系。指的两个模块之间的关系。可以先明确起来。去掉一看就没有明确意义的。去掉普通意义,大的意义的。合并同类项。找出动词,状态词。

宁深入,不求全。一个interface串一串,串到底。就像开辟根据地,至少在每一个模块(地方)都能扎下根来。即使是个小树苗,也比走马观花好。

比如,

两个模块hndler和dp之间的interface。

选最亮的那些名字拿出来,就是,没有看过代码的人都觉得很厉害的拿出来。

然后再把这些信号归并同类项。--的是一类,**的是一类。 (这里首先分了数据和控制状态类两类)。

在每一类中,挑一个去熟悉,那么,就可以对脉络,甚至精要熟悉了。

interface: 如果归类之后,发现还是挺多的。那么结合一些基本背景,获知核心的一类。

在一类信号中,发现每个信号的不同点。

以及将信号,与特定的fifo, interface等联系在一起。

skill: look around。如果一个点位看得稀里糊涂,那么,就看看其他的。比如看时序,看得糊涂,那么就看一下逻辑。算法是灵魂,状态机设计,关键信号设计,counter设计是一些骨架。

在状态机设计中,有一些紧状态和松状态,前者依赖一些counter,后者则是依赖一些外部信号,往往时间不确定。紧是自身的时间要求,而松是外部的时间,两者是应该配合起来的。

阅读的最终目的,是得到可记忆,可以传达,值得传达的东西。比如一个算法,一个方法。而非得到事情本身。

得到算法,也是一种映射,将各种信号,数据之间的关系,映射到一些处理上去。

====part two====

怎么学习一个之前未学习过的领域。

这实际是一个升级的过程。

那么,其实很多面向市场,产品,项目的,人,都是有非常强的学习能力的。所以,要论实操,不一定,比得过技术人。但是见识和沟通因而不可忽视。

升级的学习。其实应该是利用现有的知识,扩展到新的领域。比如说RTL,从控制类的代码,到信号处理类的代码,到协议类的代码。这些代码的跨度也许很大。但是,看完之后,就知,比起其他代码,这些差异就不那么大了。

不大,在于,最后都会落实到状态机,FIFO, RAM,关键信号的设计上。而区别在于核心的逻辑。有些是控制器,有些事DSP,有些是协议加速器。因此,如这个图:

如此,上半部分就是灵魂了。下半部分是壳体。大部分的设计,在下半部分是有共通之处的。而要学习的也就是上半部分的逻辑。

====part three====

面向verilog

经常碰到的问题是,信号tracing一下又回去了。让人看不清。

好在,现在大部分的代码遵循一个规则,<= 和=之分。所以可以尝试在两次<=之间作为一个小段落,停一下。

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

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

相关文章

麒麟系统安装找不到安装源!!!!设置基础软件仓库时出错

记录--华为RH2288 V3服务器安装麒麟系统遇到的问题 1.遇到的问题--“设置基础软件仓库时出错”报错导致无法继续安装 没办法下一步 先说结论&#xff1a;系统bug 该问题在CentOS、Rocky Linux最新版中均存在 解决&#xff1a; &#xff08;一&#xff09;、如果是外网直接配…

Linux|僵死进程

1.僵死进程产生的原因或者条件: 什么是僵死进程? 当子进程先于父进程结束,父进程没有获取子进程的退出码,此时子进程变成僵死进程. 简而言之,就是子进程先结束,并且父进程没有获取它的退出码; 那么僵死进程产生的原因或者条件就是:子进程先于父进程结束,并且父进程没有获取…

场景交互与场景漫游-交运算与对象选取(8-1)

交运算与对象选取 在面对大规模的场景管理时&#xff0c;场景图形的交运算和图形对象的拾取变成了一项基本工作。OSG作为一个场景管理系统&#xff0c;自然也实现了场景图形的交运算&#xff0c;交运算主要封装在osgUtil 工具中在OSG中&#xff0c;osgUtil是一个非常强有力的工…

SDUT OJ《算法分析与设计》贪心算法

A - 汽车加油问题 Description 一辆汽车加满油后可行驶n公里。旅途中有若干个加油站。设计一个有效算法&#xff0c;指出应在哪些加油站停靠加油&#xff0c;使沿途加油次数最少。并证明算法能产生一个最优解。 对于给定的n和k个加油站位置&#xff0c;计算最少加油次数。 I…

Transformer中位置嵌入的几种形式对比

❤️觉得内容不错的话&#xff0c;欢迎点赞收藏加关注&#x1f60a;&#x1f60a;&#x1f60a;&#xff0c;后续会继续输入更多优质内容❤️ &#x1f449;有问题欢迎大家加关注私戳或者评论&#xff08;包括但不限于NLP算法相关&#xff0c;linux学习相关&#xff0c;读研读博…

JSP命令标签 静态包含/动态包含

好 下面我们聊聊JSP中的指令标签 这边 我们来说两个 分别是 静态包含 和 动态包含 我们可以将重用性代码包含起来 更好的使用 比如 我们界面上中下 分别有三个导航栏 那么 如果你写三份 就会出现很多重复代码 而且 改起来 也很不方便 要一次改三份 口说无凭 我们来做一个小案…

【机器学习基础】决策树(Decision Tree)

&#x1f680;个人主页&#xff1a;为梦而生~ 关注我一起学习吧&#xff01; &#x1f4a1;专栏&#xff1a;机器学习 欢迎订阅&#xff01;后面的内容会越来越有意思~ ⭐特别提醒&#xff1a;针对机器学习&#xff0c;特别开始专栏&#xff1a;机器学习python实战 欢迎订阅&am…

[AI]ChatGPT4 与 ChatGPT3.5 区别有多大

ChatGPT 3.5 注册已经不需要手机了&#xff0c;直接邮箱认证就可以&#xff0c;这可真算是好消息&#xff0c;坏消息是 ChatGPT 4 还是要收费。 那么 GPT-3.5 与 GPT-4 区别有多大呢&#xff0c;下面简单测试一下。 以从 TDengine 订阅数据为例&#xff0c;TDengine 算是不太小…

腾讯云轻量数据库是什么?性能如何?费用价格说明

腾讯云轻量数据库测评&#xff0c;轻量数据库100%兼容MySQL 5.7和8.0&#xff0c;腾讯云提供1C1G20GB、1C1G40GB、1C2G80GB、2C4G120GB、2C8G240GB五种规格轻量数据库&#xff0c;腾讯云百科txybk.com分享腾讯云轻量数据库测评、轻量数据库详细介绍、特性、配置价格和常见问题解…

网络运维与网络安全 学习笔记2023.11.17

网络运维与网络安全 学习笔记 第十八天 今日目标 TCP数据包格式、TCP通信流程分析、UDP协议介绍 Telnet之AAA认证、设备升级与备份 今日英语单词 TCP&#xff0c;Transmission Control Protocol 传输控制协议 UDP&#xff0c;User Datagram Protocol 用户数据报协议 Sync …

异常语法详解

异常语法详解 一&#xff1a;异常的分类&#xff1a;二&#xff1a;异常的处理1:异常的抛出:throw2&#xff1a;异常的声明:throws3&#xff1a;try-catch捕获并处理异常 三&#xff1a;finally关键字四&#xff1a;自定义异常类&#xff1a; 一&#xff1a;异常的分类&#xf…

用GPT 搭建一个占星术、解梦、塔罗牌占卜和命理学服务

今天来尝试我们的占星术、解梦、塔罗牌占卜和命理学服务&#xff0c;揭开宇宙的奥秘并获得自我认识 聊天 GPT API 集成的 HTML5 模板。我们的目标是提供易于使用且高度可定制的 API 代码&#xff0c;使您能够训练自己的人工智能解决方案并将其添加到提示中。 我们的产品是可定…

window上Clion配置C++版本的opencv

window上Clion配置opencv 注意版本一定要对的上&#xff0c;否则可能会出错&#xff0c;亲测 widnows 11mingw 8.1.0opencv 4.5.5 mingw8.1下载地址https://sourceforge.net/projects/mingw/ 配置环境变量 cmake下载 安装完添加环境变量 来到官网&#xff0c;下载 windows 对…

C/C++通过位操作实现2个uint32_t合并为uint64_t

#include <iostream> using namespace std;int main() {uint32_t a 10;uint32_t b 600;//先将uint32_t的a转为uint64_t&#xff0c;此时a前面32位都是0&#xff0c;然后左移32位&#xff0c;此时右32位为0&#xff0c;最后加上uint32_t类型的b&#xff0c;填充右32位的…

隐式转换导致索引失效的原因

Num1 int Num2 varchar Str1不能为null Str2可null 例子1&#xff1a; 结果&#xff1a;124非常快&#xff0c;0.001~0.005秒出结果。3最慢&#xff0c;4~5秒出结果。 查询执行计划&#xff1a;124索引扫描。3全表扫描。 解释&#xff1a;首先四个23都产生隐式转换&#x…

Spring cloud - Hystrix服务限流、熔断及降级

Hystrix的作用 Hystrix的主要作用是在微服务环境下防止服务雪崩&#xff0c;确保服务弹性及可用性。 具体来说&#xff0c;Hystrix可以实现&#xff1a; 服务降级&#xff1a;通过fallback实现服务不可达情况下的服务降级作用。熔断&#xff1a;服务不可达的情况下在设定时间…

linux中利用fork复制进程,printf隐藏的缓冲区,写时拷贝技术,进程的逻辑地址与物理地址

1.prinf隐藏的缓冲区 1.思考:为什么会有缓冲区的存在? 2.演示及思考? 1).演示缓存区没有存在感 那为什么我们感觉不到缓冲区的存在呢?我们要打印东西直接就打印了呢? 我们用代码演示一下: 比如打开一个main.c,输入内容如下: #include <stdio.h>int main(){printf…

Shell判断:流程控制—if(二)

一、多分支结构 1、语法&#xff1a; if 条件测试1 then 命令序列 elif 条件测试2 then 命令序列 elif 条件测试3 then 命令序列.... else 命令序列 fi 2、示例&am…

ERR:Navicat连接Sql Server报错

错误信息&#xff1a;报错&#xff1a;未发现数据源名称并且未指定默认驱动程序。 原因&#xff1a;Navicat没有安装Sqlserver驱动。 解决方案&#xff1a;在Navicat安装目录下找到sqlncli_x64.msi安装即可。 一键安装即可。 Navicat链接SQL Server配置 - MarchXD - 博客园 …

Spring Cloud学习(十)【Elasticsearch搜索功能 分布式搜索引擎02】

文章目录 DSL查询文档DSL查询分类全文检索查询精准查询地理坐标查询组合查询相关性算分Function Score Query复合查询 Boolean Query 搜索结果处理排序分页高亮 RestClient查询文档快速入门match查询精确查询复合查询排序、分页、高亮 黑马旅游案例 DSL查询文档 DSL查询分类 …