自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(24)
  • 资源 (1)
  • 问答 (2)
  • 收藏
  • 关注

原创 <RTL设计的艺术> 从发快递来理解AXI协议

一、此文初衷AXI协议是AMBA协议中最为重要的一个,实际上理解了AXI协议后也就理解了AHB、APB协议。作为一个芯片设计工程师,深刻理解这些协议是必须的。实际上AXI协议是在我们生活中很常见(我认为计算机中的很多技术都是从生活中发现的),今天用我们平时发快递来对应到AXI协议。二、协议描述AXI协议将DDR读写分为5个通道:写通道共包括3个通道:写命令、写数据、写回应;读通道共包括2个通道:读命令、读数据;三、发快递流程对于发快递,我们也包括三个通道:1、“写

2022-01-22 12:33:40 327

原创 <RVV设计的艺术> RISC-V V扩展index load指令分析与实现

目录一、指令原理二、VLSU在系统中的位置三、优化方向四、index load实现电路五、总结一、指令原理index load、index store指令用于在较大范围内完成数据gather/scatter的操作,实现难度很大。图1、RVV0.9版本的index load指令格式图2、index load与index store指令功能示意图index load、index store指令在VLSU(vector load store unit)中实现。二

2022-01-16 11:55:46 1460

翻译 通过“microbenchmark”解谜GPU的微架构

摘要在处理某些非图形计算任务时,图形处理器(GPU)仍然比传统的处理器快了几个数量级。因为GPU通常提供了类似C语言的编程抽象模型(比如Nvidia的CUDA),外界对GPU的了解一般仅限于芯片供应商的数据手册。本文提出了一种称为“微基准”的套件,并且运用这个套件测量了CUDA编程模型中的Nvidia GT200(GTX280)的架构。众多未经官方披露的特性都进行了测试,包括元素处理、memory层级等等。这种分析揭露了一些可能会影响编程性能和正确性的特点,分析结果对提升编程性能、分析和...

2021-10-29 19:58:04 1801 2

原创 <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 5129 2

翻译 SIMD<SIMT<SMT: NVIDIA GPU的并行机制

原文出处:SIMD < SIMT < SMT: parallelism in NVIDIA GPUs一、概述 英伟达GPU称为它们的并行编程模型为SIMT(Single Instruction,Multiple Threads)。与我们熟知的SIMD(Single Instruction,Multiple Data)以及SMT(Simultaneous Multithreading)相比,SIMT带来了一些新的特性,在并行机制上总结如下:...

2021-09-17 17:38:43 3995 1

原创 <RTL设计的艺术> 预读FIFO假空问题分析与整理

目录一、问题背景二、提前预知结论三、sram读写时序四、sfifo的结构与逻辑五、非预读fifo的写入与读出六、预读fifo的读出过程七、结论的推出八、改进方案九、主要代码十、最终效果一、问题背景我曾经设计过一个bug,经过一周的分析、总结、复盘,整理成这边文章同大家分享。二、提前预知结论1、sfifo(同步fifo)empty为1不一定空,水线大于0不一定可读;2、解决上述问题需要在fifo内增加1级或者2级寄存器存储数据;三、sram读

2021-07-19 19:58:23 1646 1

原创 <RTL设计的艺术>芯片设计方向分类讲解

一、问题背景曾经有朋友问我一个问题(我们都是芯片设计岗):你的设计方向是什么?我当时主要参与的项目是SLAM相关的模块硬化,显然很可能他并没听说过SLAM,因此也无法了解我做的是什么。目前主流的芯片设计方向划分方式是按照业务来划分:例如芯片设计(图像处理方向)针对开发图像应用的设计人员,芯片设计(SOC)针对系统集成,芯片设计(机器学历)可能针对专门的AI加速器。那么问题来了,一方面按业务来分类很难突出一个设计方向的重点(不可能所有芯片设计人员知识面完全一样);另一方面当处理业务比较冷门时,

2021-07-12 21:12:59 1252 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 1761

原创 <RTL coding的艺术> non-constant expression引出的思考

今天VCS编译下面这段代码时报错了:报错如下:上述代码中实际上参数d是一个固定值8,但是编译工具不认。经过分析,编译工具将取值范围有可能出现隐患时将会报错。例如上面定义int d=8,但是d的值可以由其余电路算出来实时变化,导致无法综合,因此VCS保险起见不允许上述用法。我平时用的比较多的取值范围是变量的场景,大概还有另外两种1、以循环变量来取值,每次循环电路只取1bit,因此不存在变范围取值:2、以变量取二维数组的某一个,其中每个数据的数据位宽都是固定的,因此也不是变化

2021-07-06 20:15:02 2030

原创 <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 3232 1

原创 <RTL coding的艺术>verilog中for循环中循环变量int/genvar区别讲解

先看两种for循环使用情况:上面两个for循环中,一个以genvar为循环变量,另一个以int为循环变量,能不能交换呢?答案是不能,交换后VCS编译会报systemverilog语法错误。实际上两者区别如下:1、genvar循环用于产生多套电路,各套电路之间必须独立;int循环可以用于同一个逻辑的累积赋值,例如累加,但是也可以用于多套独立组合逻辑描述。2、genvar循环一定在过程块之外(always,initial),int循环一定在过程块内部。总结:两种for循环都使

2021-07-02 20:27:48 11790 3

原创 <RTL设计的艺术> 组合逻辑功耗优化

组合逻辑功耗往往被忽略,因为我们分析功耗时,“门控率”、“门控效率”、“连续两次时钟采样数据变化率”等等指标都与组合逻辑无关,以及memory功耗分析也不会看组合逻辑。试想一下,你是否有分析过“乘法器”、“加法器”的功耗?实际上组合逻辑功耗分析也是比较困难的,这是当前EDA工具较少分析的原因。例如下面的电路:共有N路组合逻辑计算,最终从中选出1路输出到寄存器。实际上每次只使用了1路组合逻辑的结果,但是其余组合逻辑的输入也会变化,同样的产生翻转功耗,在某些情况下,"例如大位宽乘法"时,功耗

2021-07-01 20:54:26 1308 3

原创 <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 469

原创 <RVV设计的艺术> vcompress指令实现电路

Vcompress是RVV最为复杂的一条指令,用于将数据中某些数据“剔除”,实现数据压缩。下图是一个例子:

2021-06-17 19:31:01 354

原创 <RVV设计的艺术> 加法相关指令讲解与硬件实现

RVV中加法指令共有23条(忽略操作数类型、来源不同),分别罗列如下:1、vadd a,b,c;#a=b+c2、vsub a,b,c;#a=b-cvrsub

2021-06-15 20:55:16 604 2

原创 <RTL设计的艺术> DDR基本结构以及访问效率讲解

Rand

2021-06-11 19:34:36 4695 3

原创 <RTL设计的艺术> 同一次DDR访问“不跨256B”,“不跨4KB”讲解

理解“不跨256B”首先要理解DDR交织的概念,此处不赘述。DDR较为通用的做法是按照256B进行交织,即逻辑上相邻的两块256B大小空间划分到不同cha

2021-06-10 20:39:30 1482

原创 <RTL设计的艺术> DDR 小于burst 4写访问低效讲解

我们在规划一个SOC的DDR访问带宽时,对于小于burst4的写访问是非常厌恶的。原因如下:操作对象是一片32bit DQ的双通道LPDDR4,把双通道各自16bit的DQ数据线,当做yi

2021-06-10 20:17:30 624

原创 <RTL设计的艺术> verilog实现单链表遍历

假设存在这样的单链表,链表每个节点为16bit,其中bit14为1标明该节点是否为根节点,如果是根节点则bit 13-0用于存储根节点对应数据;如果bit14为0则标明该节点是中间节点,bit

2021-06-04 20:46:48 2447 2

原创 <RTL设计的艺术> verilog 设计一个64bit编码器

如果我们需要设计如下的编码器:输入64bit数据,其中最多只有1bit 1,其余为0,需要计算出该1的位置,例如输入'b ....0100,则返回2;输入

2021-06-04 20:14:52 1161 8

原创 <RTL设计的艺术> sram时序分析要点

电路设计时,sram与D触发器都能存储数据,但是由于工艺不同,使用起来有很多区别。其中很重要的一个区别是:sram在芯片上都是集中放置,而D触发器缺可以放在任意位置,相比D触发器e

2021-06-04 19:56:59 2303 3

原创 <RTL设计的艺术> 简单的数据段提取电路设计

MUX电路在芯片设计中十分常见,例如需要从压缩码流中选出待解码的一个字段,压缩码流为128bit,需要提出其中16bit,这16代码如下:

2021-06-03 21:27:29 317 3

原创 <RTL设计的艺术> DDR带宽计算公式

给出一个DDR访问latency,以及主频等信息,怎么计算用户可以拿到的带宽?计算公式如下:Bandwidth = Outstanding *

2021-06-03 21:04:58 3202 1

原创 <RTL设计的艺术> 寻找二进制数据第一个1电路

分享一个高效找出二进制数据中第一个1电路:verilog代码为:input [7:0] data_raw;output [7:0] data_first;

2021-06-03 20:33:39 1191 3

xilinx的jesd1024b核datasheet

xilinx的jesd1024b核datasheet

2016-10-09

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除