- 博客(24)
- 资源 (1)
- 问答 (2)
- 收藏
- 关注
原创 <RTL设计的艺术> 从发快递来理解AXI协议
一、此文初衷AXI协议是AMBA协议中最为重要的一个,实际上理解了AXI协议后也就理解了AHB、APB协议。作为一个芯片设计工程师,深刻理解这些协议是必须的。实际上AXI协议是在我们生活中很常见(我认为计算机中的很多技术都是从生活中发现的),今天用我们平时发快递来对应到AXI协议。二、协议描述AXI协议将DDR读写分为5个通道:写通道共包括3个通道:写命令、写数据、写回应;读通道共包括2个通道:读命令、读数据;三、发快递流程对于发快递,我们也包括三个通道:1、“写
2022-01-22 12:33:40
418
原创 <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
1856
翻译 通过“microbenchmark”解谜GPU的微架构
摘要在处理某些非图形计算任务时,图形处理器(GPU)仍然比传统的处理器快了几个数量级。因为GPU通常提供了类似C语言的编程抽象模型(比如Nvidia的CUDA),外界对GPU的了解一般仅限于芯片供应商的数据手册。本文提出了一种称为“微基准”的套件,并且运用这个套件测量了CUDA编程模型中的Nvidia GT200(GTX280)的架构。众多未经官方披露的特性都进行了测试,包括元素处理、memory层级等等。这种分析揭露了一些可能会影响编程性能和正确性的特点,分析结果对提升编程性能、分析和...
2021-10-29 19:58:04
2496
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
5916
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
6913
3
原创 <RTL设计的艺术> 预读FIFO假空问题分析与整理
目录一、问题背景二、提前预知结论三、sram读写时序四、sfifo的结构与逻辑五、非预读fifo的写入与读出六、预读fifo的读出过程七、结论的推出八、改进方案九、主要代码十、最终效果一、问题背景我曾经设计过一个bug,经过一周的分析、总结、复盘,整理成这边文章同大家分享。二、提前预知结论1、sfifo(同步fifo)empty为1不一定空,水线大于0不一定可读;2、解决上述问题需要在fifo内增加1级或者2级寄存器存储数据;三、sram读
2021-07-19 19:58:23
1894
1
原创 <RTL设计的艺术>芯片设计方向分类讲解
一、问题背景曾经有朋友问我一个问题(我们都是芯片设计岗):你的设计方向是什么?我当时主要参与的项目是SLAM相关的模块硬化,显然很可能他并没听说过SLAM,因此也无法了解我做的是什么。目前主流的芯片设计方向划分方式是按照业务来划分:例如芯片设计(图像处理方向)针对开发图像应用的设计人员,芯片设计(SOC)针对系统集成,芯片设计(机器学历)可能针对专门的AI加速器。那么问题来了,一方面按业务来分类很难突出一个设计方向的重点(不可能所有芯片设计人员知识面完全一样);另一方面当处理业务比较冷门时,
2021-07-12 21:12:59
1392
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
2132
原创 <RTL coding的艺术> non-constant expression引出的思考
今天VCS编译下面这段代码时报错了:报错如下:上述代码中实际上参数d是一个固定值8,但是编译工具不认。经过分析,编译工具将取值范围有可能出现隐患时将会报错。例如上面定义int d=8,但是d的值可以由其余电路算出来实时变化,导致无法综合,因此VCS保险起见不允许上述用法。我平时用的比较多的取值范围是变量的场景,大概还有另外两种1、以循环变量来取值,每次循环电路只取1bit,因此不存在变范围取值:2、以变量取二维数组的某一个,其中每个数据的数据位宽都是固定的,因此也不是变化
2021-07-06 20:15:02
2672
原创 <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
3526
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
14876
3
原创 <RTL设计的艺术> 组合逻辑功耗优化
组合逻辑功耗往往被忽略,因为我们分析功耗时,“门控率”、“门控效率”、“连续两次时钟采样数据变化率”等等指标都与组合逻辑无关,以及memory功耗分析也不会看组合逻辑。试想一下,你是否有分析过“乘法器”、“加法器”的功耗?实际上组合逻辑功耗分析也是比较困难的,这是当前EDA工具较少分析的原因。例如下面的电路:共有N路组合逻辑计算,最终从中选出1路输出到寄存器。实际上每次只使用了1路组合逻辑的结果,但是其余组合逻辑的输入也会变化,同样的产生翻转功耗,在某些情况下,"例如大位宽乘法"时,功耗
2021-07-01 20:54:26
1694
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
596
原创 <RVV设计的艺术> vcompress指令实现电路
Vcompress是RVV最为复杂的一条指令,用于将数据中某些数据“剔除”,实现数据压缩。下图是一个例子:
2021-06-17 19:31:01
558
原创 <RVV设计的艺术> 加法相关指令讲解与硬件实现
RVV中加法指令共有23条(忽略操作数类型、来源不同),分别罗列如下:1、vadd a,b,c;#a=b+c2、vsub a,b,c;#a=b-cvrsub
2021-06-15 20:55:16
740
2
原创 <RTL设计的艺术> 同一次DDR访问“不跨256B”,“不跨4KB”讲解
理解“不跨256B”首先要理解DDR交织的概念,此处不赘述。DDR较为通用的做法是按照256B进行交织,即逻辑上相邻的两块256B大小空间划分到不同cha
2021-06-10 20:39:30
1888
原创 <RTL设计的艺术> DDR 小于burst 4写访问低效讲解
我们在规划一个SOC的DDR访问带宽时,对于小于burst4的写访问是非常厌恶的。原因如下:操作对象是一片32bit DQ的双通道LPDDR4,把双通道各自16bit的DQ数据线,当做yi
2021-06-10 20:17:30
749
原创 <RTL设计的艺术> verilog实现单链表遍历
假设存在这样的单链表,链表每个节点为16bit,其中bit14为1标明该节点是否为根节点,如果是根节点则bit 13-0用于存储根节点对应数据;如果bit14为0则标明该节点是中间节点,bit
2021-06-04 20:46:48
3062
2
原创 <RTL设计的艺术> verilog 设计一个64bit编码器
如果我们需要设计如下的编码器:输入64bit数据,其中最多只有1bit 1,其余为0,需要计算出该1的位置,例如输入'b ....0100,则返回2;输入
2021-06-04 20:14:52
1283
8
原创 <RTL设计的艺术> sram时序分析要点
电路设计时,sram与D触发器都能存储数据,但是由于工艺不同,使用起来有很多区别。其中很重要的一个区别是:sram在芯片上都是集中放置,而D触发器缺可以放在任意位置,相比D触发器e
2021-06-04 19:56:59
2493
3
原创 <RTL设计的艺术> 简单的数据段提取电路设计
MUX电路在芯片设计中十分常见,例如需要从压缩码流中选出待解码的一个字段,压缩码流为128bit,需要提出其中16bit,这16代码如下:
2021-06-03 21:27:29
384
3
原创 <RTL设计的艺术> DDR带宽计算公式
给出一个DDR访问latency,以及主频等信息,怎么计算用户可以拿到的带宽?计算公式如下:Bandwidth = Outstanding *
2021-06-03 21:04:58
3711
2
原创 <RTL设计的艺术> 寻找二进制数据第一个1电路
分享一个高效找出二进制数据中第一个1电路:verilog代码为:input [7:0] data_raw;output [7:0] data_first;
2021-06-03 20:33:39
1363
3
怎么使MFC窗口的按键按下弹出一个二维表格,并且表格上的空格可以进行点击
2015-08-27
关于MFC中弹出窗口的问题
2015-08-22
TA创建的收藏夹 TA关注的收藏夹
TA关注的人