RTL设计的艺术
文章平均质量分 57
积小流哥
数字芯片前端设计,专注图像处理加速器,risc-v处理器设计。
展开
-
<RTL设计的艺术> CSA(进位保留加法器)的应用实例讲解
目录1、问题背景2、存在问题的电路3、利用CSA改进的电路4、总结1、问题背景在某次电路设计时我需要实现这样的功能: assign out = (en ==0) ? c +d : a+ b +d; 因为上述的操作数a/b/c/d都是64bit位宽数据,电路设计时存在串行的两个64bit加法器,最终导致时序无法满足需求(1GHz时钟),经过分析后利用CSA解决了这个问题。 CSA(carry sa...原创 2021-09-28 14:44:09 · 5546 阅读 · 2 评论 -
<RTL设计的艺术> 预读FIFO假空问题分析与整理
目录一、问题背景二、提前预知结论三、sram读写时序四、sfifo的结构与逻辑五、非预读fifo的写入与读出六、预读fifo的读出过程七、结论的推出八、改进方案九、主要代码十、最终效果一、问题背景我曾经设计过一个bug,经过一周的分析、总结、复盘,整理成这边文章同大家分享。二、提前预知结论1、sfifo(同步fifo)empty为1不一定空,水线大于0不一定可读;2、解决上述问题需要在fifo内增加1级或者2级寄存器存储数据;三、sram读原创 2021-07-19 19:58:23 · 1776 阅读 · 1 评论 -
<RTL设计的艺术> 多精度加法器设计讲解
如果需要设计电路用以同时支持8/16/32/64 bit加法,假设SIMD宽度为128bit,即需要该电路支持2个64bit加法、或者4个32bit加法/8个16bit加法/16个8bit加法。为了实现上述电路,对每种计算精度都设计一套电路当然可以达到目的,但是面积存在浪费。因此“多精度加法”就是在使用同一套运算电路实现多种精度加法的设计思想。例如利用2个8bit加法器,将一个加法器的最高进位连到另一个加法器的输入进位,即可实现16bit加法器。上图的加法器设计就是采用这种思路,不过底层原创 2021-07-01 20:22:32 · 520 阅读 · 0 评论 -
<RTL设计的艺术> 同一次DDR访问“不跨256B”,“不跨4KB”讲解
理解“不跨256B”首先要理解DDR交织的概念,此处不赘述。DDR较为通用的做法是按照256B进行交织,即逻辑上相邻的两块256B大小空间划分到不同cha原创 2021-06-10 20:39:30 · 1667 阅读 · 0 评论 -
<RTL设计的艺术> verilog实现单链表遍历
假设存在这样的单链表,链表每个节点为16bit,其中bit14为1标明该节点是否为根节点,如果是根节点则bit 13-0用于存储根节点对应数据;如果bit14为0则标明该节点是中间节点,bit原创 2021-06-04 20:46:48 · 2733 阅读 · 2 评论 -
<RTL设计的艺术> 简单的数据段提取电路设计
MUX电路在芯片设计中十分常见,例如需要从压缩码流中选出待解码的一个字段,压缩码流为128bit,需要提出其中16bit,这16代码如下:原创 2021-06-03 21:27:29 · 340 阅读 · 3 评论 -
<RTL设计的艺术> DDR 小于burst 4写访问低效讲解
我们在规划一个SOC的DDR访问带宽时,对于小于burst4的写访问是非常厌恶的。原因如下:操作对象是一片32bit DQ的双通道LPDDR4,把双通道各自16bit的DQ数据线,当做yi原创 2021-06-10 20:17:30 · 696 阅读 · 0 评论 -
<RTL设计的艺术> DDR基本结构以及访问效率讲解
Rand原创 2021-06-11 19:34:36 · 5008 阅读 · 3 评论 -
<RTL设计的艺术> sram时序分析要点
电路设计时,sram与D触发器都能存储数据,但是由于工艺不同,使用起来有很多区别。其中很重要的一个区别是:sram在芯片上都是集中放置,而D触发器缺可以放在任意位置,相比D触发器e原创 2021-06-04 19:56:59 · 2395 阅读 · 3 评论 -
<RTL设计的艺术> DDR带宽计算公式
给出一个DDR访问latency,以及主频等信息,怎么计算用户可以拿到的带宽?计算公式如下:Bandwidth = Outstanding *原创 2021-06-03 21:04:58 · 3467 阅读 · 1 评论 -
<RTL设计的艺术> 组合逻辑功耗优化
组合逻辑功耗往往被忽略,因为我们分析功耗时,“门控率”、“门控效率”、“连续两次时钟采样数据变化率”等等指标都与组合逻辑无关,以及memory功耗分析也不会看组合逻辑。试想一下,你是否有分析过“乘法器”、“加法器”的功耗?实际上组合逻辑功耗分析也是比较困难的,这是当前EDA工具较少分析的原因。例如下面的电路:共有N路组合逻辑计算,最终从中选出1路输出到寄存器。实际上每次只使用了1路组合逻辑的结果,但是其余组合逻辑的输入也会变化,同样的产生翻转功耗,在某些情况下,"例如大位宽乘法"时,功耗原创 2021-07-01 20:54:26 · 1496 阅读 · 3 评论 -
<RTL设计的艺术>mux电路与merge电路讲解
首先看下面两段代码,用于描述同样的功能。第一种写法是根据是能标志,依次从a、b、c、d四个数据中选择一个输出,成为mux电路;第二种写法直接将a、b、c、d四个数据分别与使能位相“与”,再相“或”得到输出,称为merge电路;为了详细描述,画出电路图mux电路图如下:而merge电路图如下:可以看出两个电路均为3级逻辑,似乎差别不大,但是mux2电路资源消耗肯定是大于普通“与”“或”操作的;其次,在4输入情况下都是3级逻辑,那如果是5输入呢?mux电路级数将与输入原创 2021-07-02 20:57:01 · 3389 阅读 · 1 评论 -
<RTL设计的艺术> 寻找二进制数据第一个1电路
分享一个高效找出二进制数据中第一个1电路:verilog代码为:input [7:0] data_raw;output [7:0] data_first;原创 2021-06-03 20:33:39 · 1314 阅读 · 3 评论 -
<RTL设计的艺术> verilog 设计一个64bit编码器
如果我们需要设计如下的编码器:输入64bit数据,其中最多只有1bit 1,其余为0,需要计算出该1的位置,例如输入'b ....0100,则返回2;输入原创 2021-06-04 20:14:52 · 1240 阅读 · 8 评论 -
<RTL设计的艺术> FIFO的正确使用与错误使用讲解
FIFO(先入先出队列)是硬件设计时很常用功能单元,但是RTL bug也经常由它引起。由FIFO引起bug的原因有多种,主要原因还是没有搞懂为什么需要使用FIFO,本篇主要从根本出发讲解FIFO的作用。1、FIFO用于消除电路不确定性(推荐)一般而言,硬件设计出的电路都是确定的电路,但是一些特殊的情况下存在不确定性。例如下面的电路:电路包含从DDR中读取数据,经过N级pipeline处理后写回到DDR。很明显,其中N级pipeline是确定的电路,但是从DDR读写是不确定的(一般late原创 2021-07-06 21:03:22 · 1961 阅读 · 0 评论 -
<RTL设计的艺术>芯片设计方向分类讲解
一、问题背景曾经有朋友问我一个问题(我们都是芯片设计岗):你的设计方向是什么?我当时主要参与的项目是SLAM相关的模块硬化,显然很可能他并没听说过SLAM,因此也无法了解我做的是什么。目前主流的芯片设计方向划分方式是按照业务来划分:例如芯片设计(图像处理方向)针对开发图像应用的设计人员,芯片设计(SOC)针对系统集成,芯片设计(机器学历)可能针对专门的AI加速器。那么问题来了,一方面按业务来分类很难突出一个设计方向的重点(不可能所有芯片设计人员知识面完全一样);另一方面当处理业务比较冷门时,原创 2021-07-12 21:12:59 · 1327 阅读 · 8 评论