IC设计方法
文章平均质量分 68
主要一些IC设计中注意的点
enmouhuadou
这个作者很懒,什么都没留下…
展开
-
I2C读写时序简述
I2C读写命令时序如下:这里默认I2C每次传输均按8bit模式传输写时序:1)Master先发送Start bit,开始一笔传输;2)Master发送从机地址 s_addr[7:0],其中s_addr[6:0]包含从机地址。s_addr[7]读写标志位,1:写标志位,注意这里写标志位不表示立刻进入写数据还是读数据,而是表示Master写入写操作的写寄存器地址,或者说是写入读出操作的读寄存器地址。0:表示读标志位,直接进入,读数据状态,Slave会接管SDA的控制权,输出数据。Master发送S原创 2022-03-11 15:58:38 · 4811 阅读 · 1 评论 -
FIFO 最小深度计算 举例 总结
例子 - 1:f_wr > f_rd,连续读写写时钟80MHz。读时钟50MHz。Burst_Len = 120,也就是要求至少安全写入120个数据。连续写入和连续读取,无空闲时间,写入后立即开始读取 ,读写宽度相同。Sol:写速率 > 读速率,FIFO迟早会被写满,但它要求至少写入120个数据后FIFO不满。写入120个数据耗时 120 * 12.5 ns = 1500 ns 。写入开始后FIFO内数据以 30M/Date 速率增加。数据增加持续了 1500 ns ,FIFO原创 2022-03-08 09:39:25 · 731 阅读 · 0 评论 -
关于复位的一些总结
同步reset(synchronous reset)是说,当reset信号为active的时候,寄存器在下一个时钟沿到来之后被复位,时钟沿到来之前寄存器还是保持其之前的值。异步reset(asynchronous reset)是说,当reset信号为active的时候,寄存器立刻被复位,与时钟沿到来与否没有关系。注意这里老李没有说reset信号为1的时候,而是说active,因为有的时候是为1能够使寄存器复位,这个时候我们说high active,而有的时候是0能够使寄存器复位,这个时候我们说low a原创 2022-01-15 11:08:13 · 5932 阅读 · 3 评论 -
后仿出现X态原因
1、仿真pattern自身原因,比如程序使用了未初始化(写)的存储区,读出红X的数据并使用,导致红X传播;2、仿真环境或者平台原因,模型或者整chip顶层PIN脚的信号没有驱动,是高阻Z态,进入数字逻辑内部变成红X传播;3、DFF、gating cell等由于setup/hold不满足,或者rst信号的recovery/removal不满足,或者异步逻辑同步的第一拍DFF,产生红X引起传播;4、信号的电平宽度比这个cell的门延时还短的时候,信号经过这个cell后的输出是红X5、不带复位端的DFF引原创 2021-08-18 11:47:09 · 6458 阅读 · 0 评论 -
IC前端设计考率逻辑设计可能造成后端Congestion问题
方法:(1)前端RTL配合梳理数据流,以及做一些额外的代码层次化来给后端做bound,从而方便后端进行人为的物理位置摆放。(2)减少单一cell的扇入和扇出。比如使用多级2-1 mux来代替128-1 mux,复制多份相同逻辑来减少单一逻辑复用等。...原创 2021-04-14 11:44:05 · 481 阅读 · 0 评论 -
UART波特率:它需要多准确?
最常见的时序敏感任务之一是UART通信。接口缺少外部时钟,只有当内部波特率相等时,Tx和Rx器件才能可靠地共享数据。但当然“相等”并不是一个真正的工程词 - 我们总是要考虑噪声,误差和变化,而对于微控制器的内部振荡器,我们不是在谈论百万分之几。根据我的经验,微控制器很少提供内部振荡器,其精度优于±1.5%。具有±1.5%时钟源的两个微控制器的波特率相差3%。这够好吗?波特率,比特周期和采样(注意:对于剩下的分析,我们将使用Tx器件作为参考;换句话说,我们假设Tx器件始终处于标称波特率,并且Rx器件处于原创 2021-04-14 10:56:40 · 1298 阅读 · 0 评论 -
仲裁器设计(三)-- Weighted Round Robin 权重轮询调度
作者:李虹江原文:https://mp.weixin.qq.com/s/GY05HFLTYcjLQIly-y4gxg本文授权转自IC加油站微信号,未经作者授权,严禁二次转载。这一篇继续仲裁器的话题,来讲一个更加复杂的仲裁算法,并且给出设计的思路。我们前面一篇仲裁器设计(二)-- Round Robin Arbiter里的Round Robin仲裁算法是一种公平的仲裁算法,每个requestor在得到许可之后优先级自动掉到最后,每个requestor之间都是平等的,大家都request的时候被gran原创 2021-03-18 11:21:26 · 5058 阅读 · 0 评论 -
仲裁器设计(二)-- Round Robin Arbiter 轮询调度算法
作者:李虹江原文:https://mp.weixin.qq.com/s/r-nckE5nGz9mc5KqjPXKYg本文授权转自IC加油站微信号,未经作者授权,严禁二次转载。上一篇老李讲了固定优先级仲裁器Fixed Priority Arbiter 仲裁器设计(一) – Fixed Priority Arbiter里面提到了,固定优先级仲裁的一个问题就是公平性。以上篇文章里同学举手老师点名的例子来说,如果老师每次都叫学号小的,那学号大的同学会觉得不公平,因为被老师点到的机会小。单纯回答问题的话可能还原创 2021-03-18 10:41:18 · 18515 阅读 · 10 评论 -
Verilog设计遇到了Congestion问题怎么办?
Congestion意思为拥塞,一般是在后端PR阶段发现布局布线比较拥挤,可能会导致布线布不过去,出问题也无法做ECO。Congestion也分为几种情况,我遇到的是Logic Congestion(更多关于后端Congetsion问题,查看文末参考文章),主要原因是RTL设计问题导致,这种问题的现象从后端看上去就是Cell数没多少,就是线密。产生Congestion的主要原因有限的面积下,电路面积过大。从一开始预估的面积与最后实际的面积有一定差距,导致该模块面积被限定的情况下,逻辑较多,绕线严重。原创 2021-01-13 09:18:41 · 1632 阅读 · 0 评论 -
ARM的BUS Matrix的作用
ARM的BUSMatrix就是多主(Core,DMA等),多从(内部RAM,APB,外部总线等)的交联和仲裁。目的是为了提高不同主机访问不同外设情况下的带宽,另外一个就是简化BusMaster的协议设计。比如,DMA把片内RAM的数据搬运到APB的外设,如串行口。同时Core从外部总线,SDRAM取指令。如果单一总线,那么Core和DMA控制器就需要先仲裁总线控制权,然后才能访问对应的外设,此时单一总线的带宽不一定够。如果用交联矩阵,那么Core可以直接访问SDRAM,同时DMA访问APB外设。如果没有原创 2020-12-25 13:49:28 · 3965 阅读 · 0 评论 -
低功耗技术——低功耗中使用的特殊单元
这个是低功耗设计的范围,isolation cell 是在一个模块的电源可以关闭,那么这个模块的输出到另一个模块需要port需要加isolation cell, 确保电源关闭是输出不产生X态,level shift单元主要是两个模块的供电的电压不一样,需要模块port加level shift cell.在低功耗多电压技术包括MSV, DVFS, AVFS和电源门控Power Gating技术中,为了正确的实现多电压或者某个电压域关断,需要特殊的单元,主要包括:Isolation cellsL原创 2020-12-11 17:14:00 · 9714 阅读 · 0 评论 -
巧妙的mux“移动”
1从两块128x1024的SRAM中选择一个1024 bit的数据进行ECC校验,输出一个1bit的ECC错误指示信号。从上图中可以看到,这个data_sel信号需要驱动一个1024 bit的2选1多路复用器,因为驱动能力不足,或者说fanout太大,工具需要插入几级buffer来增加驱动能力。这时候如果data_sel的生成逻辑comb logic本身路径较长,加上后面的大位宽的ECC校验逻辑,这条路径很容易时序违例。这里简单提一下为什么驱动一个大数据位宽的多路复用器会需要插入几级buffer。原创 2020-12-10 20:58:03 · 909 阅读 · 0 评论 -
芯片设计小经验——如何抢一拍
前端设计中的一个设计小细节先来看一个简单的场景如上图所示,Master和Slave之间进行数据传递,有一个简单的握手。Master的输出口有一级缓存用来缓存数据。m_s_vld和s_m_rdy同时有效时,Master的DATA BUF数据被读走,同时VLD BUF更新为无效。我们重点关注缓存BUF的更新条件。当VLD BUF为无效的时候更新,此时DATA BUF为空。DATA BUF和VLD BUF的更新逻辑分别如下:如上图所示,在握手完成的时候清空缓存BUF,当缓存有空间并且m_vld有效的时原创 2020-12-10 15:25:13 · 411 阅读 · 0 评论 -
反压流水线设计
1流水线的时间并行在本公众号的另一篇文章《芯片性能小谈——时间并行》中提到,流水线设计是完美的时间并行。因为流水线上每一级的处理都是一个时钟周期的延时,并且一动则全动,每一级的延时可以完美的掩盖起来,最高实现与流水级数相同数量的请求并行度。如上图所示,在现代经典的cpu处理中,流水线级数被广泛应用,cpu的各个处理环节可以看作流水线上的一个stage。在单发射单处理单元的最简单处理器中,同一时间内最高同时可以支持5条指令的执行。如果没有指令冲突,资源冲突等可能导致断流的场景,基本可以认为每一个时钟周原创 2020-12-10 13:51:22 · 2311 阅读 · 0 评论 -
Memory Compiler
memory分为两类RAM和ROM。RAM根据读写端口个数又分为三类即单端口RAM(SP),伪双端口RAM(TP)和双端口RAM(DP)。SP只存在一个时钟和一套读写端口,读写复用地址总线,读写不能同时操作。TP存在两个时钟(读、写)和一套读写端口,但是有各自地址总线,读写可以同时操作。DP存在两个时钟和两套读写端口,每一套端口都支持读写操作,这两套操作互补影响。一般的memory compiler提供五个ram脚本(rf_sp,sram_sp,rf_tp,sram_dp,rom)。考虑面积和性能又划分为原创 2020-12-09 15:15:30 · 6496 阅读 · 2 评论 -
input delay和output delay讲解
我的理解是set_input_delay和set_output_delay都是描述你的外围设计的时序特性的,认为驱动这些信号的时钟与当前设计是同步的,其中set_input_delay是说外部电路驱动某输入信号到你的设计的端口需要多少时间,那对应的一个周期去掉这部分之后就是留给你的输入信号的margin了。对于输出信号, 你可同理推之,set_output_delay的意思就是从你的设计的输出端口到它的fanout逻辑使用的时间,那一个周期减少这部分时间,就是你的设计驱动这些输出信号的margin了。.原创 2020-12-03 17:46:52 · 3118 阅读 · 0 评论 -
IC设计中实用真流水设计方法
在一些高速设计中对于设计效率要求较高,比如图像处理等,需要处理大量的数据,此时,对于IC设计人员需要较高要求。很多流水设计是伪流水,带宽浪费较大,效率较低,特别是设计中流水级数较多时,更能体现两种流水设计的差距了,本文简略提出一种真流水设计方法。真流水采用后向驱动型设计方法,每一级流水之间采用握手方式,从后级向前级一级级反馈,当后级buffer满时,无法缓存数据,便会反馈至前级,直至数据输入模块,停止数据请求,后级buffer满时流水并不会立即停止数据读入,只会在每一级流水均充满待处理数据之后,才会停止数原创 2020-10-28 11:05:58 · 698 阅读 · 0 评论 -
大家一致避免使用的锁存器为什么依然存在于FPGA中?我们对锁存器有什么误解?
什么是锁存器?锁存器就是用来存储状态信息,就是将这个状态一直保持。锁存器对脉冲的电平敏感,也就是电平触发,在有效的电平下,锁存器处于使能状态,输出随着输入发生变化,此时它不锁存信号,就像一个缓冲器一样;在锁存器没有使能时,则数据被锁住,输入信号不起作用,此时输出一直为锁存的状态信息。我们常见的锁存器有SR锁存器、D锁存器、JK锁存器等。为什么锁存器不好?从上面的图中可以看出,锁存器对毛刺不敏感,很容易在信号上产生毛刺;而且也没有时钟信号,不容易进行静态时序分析。正是因为这两个原因,我们在FPGA设计.原创 2020-07-29 09:45:33 · 994 阅读 · 0 评论 -
AHB总线中slave的两个hready信号
一般作为AHB总线的Slave设备都有2根hready信号,一个为input类型(hready_in),另一个为output类型(hready_out)。在AHB总线协议中,如果Master设备发起读写操作的时候,Slave设备不能及时响应的话,由Slave设备把hready_out信号拉低来拖延DataPhase周期。但是在Pipeline操作的时候,本次操作data phase是下一次操作的address phase,所以作为Slave设备在响应Master设备的时候,必须先判断一下Master设备对原创 2020-07-29 08:43:39 · 8653 阅读 · 10 评论