数字IC前端
文章平均质量分 88
数字IC前端相关笔记
日晨难再
杂学旁收
展开
-
数字IC前端学习笔记:数字乘法器的优化设计(带流水线的Wallace Tree乘法器)
由于Wallace Tree乘法器的特性(数字乘法器的优化设计(Wallace Tree乘法器),可以很轻松地将其设计成流水线的形式,下面简单介绍一下流水线设计。原创 2024-05-17 19:08:13 · 870 阅读 · 12 评论 -
数字IC前端学习笔记:时钟切换电路
该电路的输出为两个时钟门控输出的与,上半部分电路控制时钟clk_A,当门控信号a2i_2为1时门控关闭时钟clk_A,当门控信号a2i_2为0时门控打开时钟clk_A。a4i_2,a4i_2用于关闭clk_B,而!可以看到这种结构在时钟切换的过程中,首先关闭正在运行的时钟(此时没有时钟输出,输出恒为0),然后再开启另一个时钟,且这个关闭和开启的动作都是由本时钟所同步的行为,即clk_A负责关闭和开启clk_A,clk_B负责关闭和开启clk_B,这样就在一定程度上避免了毛刺的产生。原创 2023-11-20 12:24:58 · 602 阅读 · 14 评论 -
数字IC前端学习笔记:异步复位,同步释放
异步复位是一种常见的复位方式,可以使电路进入一个可知的状态。但是不正确地使用异步复位会导致出现意想不到的错误,复位释放便是其中的一个重要问题,这将在后面进行讨论。原创 2023-11-19 12:24:15 · 497 阅读 · 12 评论 -
数字IC前端学习笔记:仲裁轮询(四)
带权重的轮询(Weighted Round Robin, WRR)方案与常规的轮询方案类似,所不同的是不同的用户得到许可的机会存在差异,也就是说,不同的用户权重不同,权重高的用户得到许可的机会更多。当一个用户获得许可后,定时器开始计时,直到计满,此时如果被授权的用户没有完成操作,仲裁器停止对当前用户的许可并根据优先级轮询下一个用户。2、在所有存在许可机会的用户之间进行公平轮询,一个循环周期内,不同用户得到的总许可机会由预置的权重值决定。1、一个用户可以连续地获取许可,获得许可的次数由预置的权重值决定。原创 2023-06-25 15:54:15 · 1446 阅读 · 6 评论 -
数字IC前端学习笔记:仲裁轮询(一)
当多个源或用户需要共享同一资源时,需要某种仲裁形式,使得所有用户基于一定的规则或算法得到获取或访问共享资源的机会。例如,共享总线上,可以连接多个总线用户。另一个例子是交换机中的端口仲裁,当多个入口希望通过某一个出口输出数据时,需要使用一定的端口仲裁机制来选择某一时刻允许哪一个入口发送数据。最简单的仲裁方案是公平轮询(round-robin)方案,此时,仲裁器公平的对待所有用户的请求,不同用户具有均等的机会。原创 2023-06-12 16:20:27 · 1457 阅读 · 3 评论 -
数字IC前端学习笔记:仲裁轮询(二)
此外还有一种机制,每个用户获得授权后,可以占用资源的时间片长度是受约束的,每个用户可以占用资源的时间不能超过规定的长度。如果一个用户在所分配的时间结束之前完成了操作,仲裁器将轮询后续的用户。一开始,选择用户的顺序可以是任意的,但在一个轮询周期内,所有发出请求的用户都有公平得到授权的机会。仲裁器每次仲裁时,依次查看每个用户的请求信号是否有效,如果一个用户的请求无效,那么将按序查看下一个用户。仲裁器会记住上一次被授权的用户,当该用户的操作完成后,仲裁器会按序轮询其他用户是否有请求。下图为公平轮询的波形图。原创 2023-06-18 14:08:44 · 918 阅读 · 4 评论 -
数字IC前端学习笔记:仲裁轮询(三)
在前面公平轮询仲裁器的Verilog RTL代码中,每个用户有三个信号:request(请求)、grant(授权)、end_access(结束访问)。在总线使用时,我们能观察到总线上存在不能进行数据传输的死周期。当传输的数据包较长或每个突发较长时,其对传输效率影响不大。然而,当数据包很短时,死周期会影响到总线的使用效率。如下图所示为没有间隔的公平轮询仲裁波形。下面给出了一些方法,用于减少甚至消除死周期。没有死周期的公平轮询代码及仿真结果如下。原创 2023-06-22 16:31:38 · 1354 阅读 · 9 评论 -
数字IC前端学习笔记:仲裁轮询(五)
上一部分中我们对仲裁的第一种方法的第一种许可方式进行了Verilog设计,接下来将使用Verilog对第一种方法的第二种许可方式进行设计,即当所有用户发出请求时,授权序列为。以上内容来源于《Verilog高级数字系统设计技术和实例分析》以下是代码及仿真结果。原创 2023-06-26 17:01:02 · 497 阅读 · 1 评论 -
数字IC前端学习笔记:仲裁轮询(六)
在一些应用中,用户被分成两组:快组和慢组。如下图所示,快组内的用户具有相同的优先级,内部采用公平轮询方式。类似地,慢组内的用户也具有相同优先级,慢组内部也采用公平轮询方式。但快组慢组之间是嵌套的关系,即整个慢组被当做是快组的一个用户。例如,快组有两个用户(A,B),慢组也有两个用户(C,D)。两组轮询的代码及仿真结果如下。原创 2023-06-27 16:43:44 · 502 阅读 · 5 评论 -
数字IC前端学习笔记:数字乘法器的优化设计(基2布斯乘法器)
由此可以构建基2布斯编码模块,布斯编码模块对每三位乘数进行布斯编码,因此对于八位的数据宽度,设计需要八个编码模块(加上最低的辅助位),输出为三个信号,分别是表示为表示减操作的Neg信号,表示部分积为零和一倍的Zero和One信号。至此得到了基2布斯编码的规律,每一位基2布斯编码即为原来的二进制补码的低一位减本位,所以有三种取值,1、0和-1,这种方式使得可以跳过乘数中的某些连续的1,将多次的部分积累加,减少到较少次数的加减运算,表1总结了基2布斯编码的规则。将右式展开,结果如式1所示,最后的。原创 2023-10-10 14:44:00 · 496 阅读 · 15 评论 -
数字IC前端学习笔记:数字乘法器的优化设计(进位保留乘法器)
进位保留乘法器的结构图如图3所示,可以看到,与之前的阵列乘法器相比,进位保留乘法器对于输出的进位,并不将其传递给本级的高位加法器,而是传递给下一级的高位乘法器,在最后一级使用一个被称为向量合并加法器(图中用绿色框出)的模块来处理最后的两个多位二进制数。向量合并加法器可以选择普通的串行进位加法器或者超前进位加法器,还可以是其他高效的加法器。其实进位保留加法器和普通全加器的内部结构一模一样,但不同的是对于进位的处理,普通的全加器接受两位加数和一位进位,输出一位和以及一位进位。原创 2023-10-03 14:23:44 · 1040 阅读 · 3 评论 -
数字IC前端学习笔记:数字乘法器的优化设计(阵列乘法器)
为了简便起见,本文考虑两个四位二进制数A和B相乘,其中A为被乘数,B为乘数,先产生部分积,然后使用加法器累加这些部分积,总体规划如表1所示。从乘数B的最低位B0开始,依次与被乘数A的各位A0、A1、A2、A3相与(乘)形成4组16个部分积项目,分组是根据乘数B的位而言,如所有有B0项目的是第0组部分积。在Design Compiler中使用report_timing命令,可以得到关键路径的延迟,如图4所示,使用report_area命令,报告所设计电路的面积占用情况,如图5所示。原创 2023-10-02 16:52:01 · 1080 阅读 · 2 评论 -
数字IC前端学习笔记:数字乘法器的优化设计(基4布斯编码华莱士树乘法器)
基4布斯编码模块的接口方框图如图2所示,布斯编码模块对每三位乘数进行布斯编码,因此对于八位的数据宽度,设计需要四个编码模块,输出为四个信号,分别是表示减操作的Neg信号,表示部分积为零、部分积两倍和一倍的Zero、Two和One信号。可以看到对于八位数据,使用基4布斯编码只产生了四行部分积,是不使用编码部分积行数的一般,乘法器的速度很大情况下取决于部分积的深度而不是最后的向量合成。注意,这里的部分积只在从乘数的包括最低位在内的间隔一位产生,因此所有部分积的会错开两位,这与之前的部分积的规律不同。原创 2023-10-31 19:38:10 · 905 阅读 · 16 评论 -
数字IC前端学习笔记:数字乘法器的优化设计(Wallace Tree乘法器)
如果不考虑向量合并加法器的影响,阵列乘法器使用了八个全加器和四个半加器,进位保留乘法器使用了六个全加器和六个半加器,而华莱士树乘法器仅仅用了五个全加器和三个半加器,该实现减少了位宽较大乘法器的硬件开销,同时对传播延时的优化也很显著。图1所示为使用四位华莱士树乘法器的例子,图中总共有十六个部分积,分别通过被乘数和乘数的各位相与(通过与门)得到,图中的斜杠/代表一个全加器,连接的分别是右上角的本位和以及左下角给高位的进位,带反斜杠\的/表示是半加器。可以看到只需要两个阶段,十六个部分积就可被压缩至两行。原创 2023-10-06 15:40:27 · 1749 阅读 · 11 评论 -
数字IC前端学习笔记:优化的基4布斯编码华莱士树乘法器
在Design Compiler中使用report_area命令,报告所设计电路的面积占用情况,如图4所示,设计使用的面积也低于普通的基4布斯华莱士树编码乘法器器,从RTL代码中也可以看到这一点,上节的乘法器使用了22个全加器和5个半加器,而优化后只使用了14个全加器和8个半加器,使用的资源大大减少。前文提到的基4布斯编码华莱士树乘法器的一部分的电路面积是由补位逻辑所带来的——为了保证求和正确,所有的部分积都会需要被符号拓展至乘积结果的位宽以保证在最差情况下都不会溢出。原创 2023-11-01 00:03:45 · 592 阅读 · 7 评论 -
数字IC前端学习笔记:数字乘法器的优化设计(Dadda Tree乘法器)
在Design Compiler中使用report_area命令,报告所设计电路的面积占用情况,如图5所示,可以看到这个面积优于华莱士树乘法器,不考虑最后的向量合并器,达达树仅仅使用了三个全加器和三个半加器就完成了四位数据的部分积累加,相比之下,华莱士树使用了五个全加器和三个半加器,当数据位宽增加时,华莱士树乘法器对于加法器的需求增加也比达达树快,因此达达树是华莱士树的优化版,但达达树不具有华莱士树的规则的结构,设计起来会比较消耗时间和人力。根据这个算法,可以得到dadda的树的结构,如图1所示。原创 2023-10-08 22:36:54 · 1586 阅读 · 11 评论 -
数字IC前端学习笔记:门控时钟
在实际系统工作时,如图2所示,当源时钟CLK为高电平时,如果CLK_EN变为低电平,GCLK将立刻变为低电平,即出现了一个下降沿,这是一个毛刺信号,会影响一些使用下降沿的触发器。由于上述限制,工业界广泛采用的门控电路是一种在上述简单的门控电路结构上加入了高电平锁存的锁存器,如图3所示。因为以上的毛刺都是出现在CLK为高电平时,所以思路是使用CLK的高电平锁存CLK_EN信号,这样CLK_EN在CLK高电平期间就一定是一个稳定的值(CLK_EN在CLK低电平期间没有影响,因为是相与)。原创 2023-10-18 14:06:05 · 986 阅读 · 6 评论 -
数字IC前端学习笔记:近期最少使用(LRU)算法
LRU算法用于cache管理或任何其他需要对访问权进行周期更新的场合。基于时间和空间考虑,cache中存储着近期将会用到的数据项。当cache被用满后,如果有新的数据项到来,需要将某个现有的数据项从cache中清除,为新进入者提供空间。此时通常使用的算法被称为LRU(Least Recently Used,近期最少使用),通过LRU算法可以找到最久未被使用过的数据项,cache将该数据项清除,并将新的数据项写入此处。另一个会用到LRU算法的地方是网络设备中的路由表管理电路。原创 2023-06-30 16:32:14 · 483 阅读 · 6 评论 -
数字IC前端学习笔记:FIFO的Verilog实现(二)
对异步FIFO进行数据写入和读出操作的方式与同步FIFO极其相似,写入与读出操作也有自己的信号集,其复杂度主要体现于产生FIFO_full、FIFO_empty、room_avaliable、data_avaliable等标识。需要注意的是,当读指针被传送到写入时钟域时,相对于读时钟域的读指针来说,可能会存在3到4个周期的延时,也就是说,可能出现读指针已经增加,而在写时钟域看来并未增加,这会导致fifo在仍有空位时给出fifo_full信号,这是异步FIFO保守的一面,如此可以确保不产生数据上溢。原创 2023-06-11 21:46:39 · 718 阅读 · 6 评论 -
数字IC前端学习笔记:格雷码(含Verilog实现的二进制格雷码转换器)
在异步FIFO中,写地址和读地址指针分别保存在不同的时钟域中,而为了表示FIFO状态,我们需要分别在写时钟域中产生FIFO_full信号,在读时钟域中产生FIFO_rmpty信号,而判断FIFO状态时,需要对比读写指针的值,两个不同时钟域中的值不能直接比较。格雷编码在弗兰克·格雷在1953年公布的专利中出现,主要特点是相邻编码值只有一位比特发生改变,下表中给出了三比特和四比特二进制码和对应的格雷码,从图中可以清晰地看到这一特点,而这一特点也使格雷码有十分广泛的应用。虽然最终能得到正确值,即最终输出变为。原创 2023-04-11 16:48:15 · 1070 阅读 · 2 评论 -
数字IC前端学习笔记:FIFO的Verilog实现(一)
例如,当做设计的FIFO还剩余2到3个空余位置时,almost_full信号有效,此时负责外围写入的电路就要考虑停止写入了,因为从决定停止到write_en信号被置为无效可能还需要多个时钟周期。电路复位后,FIFO为空,写指针和读指针都指向同一个位置,该位置通常是0。由于同步FIFO只使用了一个时钟,其控制逻辑相对于异步FIFO来说简单得多前面讨论过一些输入和输出端口,现在需要增加一些有用的输出,如fifo_full、fifo_empty、room_available、data_available。原创 2023-04-03 22:38:24 · 989 阅读 · 7 评论 -
数字IC前端学习笔记:锁存器Latch的综合
)的连续赋值语句(注意这里是一个,和上面的反馈不一样),带反馈即赋值的变量(RHS)又出现在条件操作符表达式中,会被综合出一个带反馈的多路选择器构成的锁存器,一般情况下,这个多路选择器直接使用组合逻辑生成,不会调用Mux库单元。这是一种有意生成锁存器的方法,如在构建存储器时。现在再来分析一下下面这个模块or4_behav_latch的描述,它的事件控制对x_in[0]不敏感,这就会无意间综合出锁存输出,即电路仅在x_in[3:0]变化时才会激活周期性行为,并更新输出,当x_in变化时,输出处于锁存状态。原创 2023-03-15 22:52:03 · 847 阅读 · 2 评论 -
数字IC前端学习笔记:跨时钟域信号同步
在开始时,与门的两个输入是1和0,输出c为0,当a从0变1,同时b从1变0时,最终输出c仍然是0,但a和b可能在短暂的时间都处于1状态,造成了输出c在一段时间内错误的为1,如果恰好CLK_B上升沿出现在此时,那么毛刺信号1将传递到后级,使得d和e出现了一个有一定宽度的错误信号,这是我们不希望看到的。这句话的意思是,不能使用多个同步装置将一个信号同步到另一个时钟域的多个点,因为同步装置会导致信号延迟1到2个周期,如果有多个同步装置,那么结果可能会出现不一致(即使最终的结果是一致的),会导致下游系统出错。原创 2023-03-06 19:39:34 · 746 阅读 · 2 评论 -
数字IC前端学习笔记:LFSR(线性反馈移位寄存器)
由n个触发器构成的LFSR电路可以产生的伪随机序列长度为2^n-1(减一是因为对于异或门构成的LFSR,全0状态是不允许存在的,因为0无论怎么异或,结果都是0,这会进入死循环,对于同或门构成的LSFR,全1状态不允许存在,理由同上)。而且可以看到异或门的反馈是在外部的(即异或门的输入和输出连接的并不是相邻寄存器)。在该例中,最后一级触发器的输出和x3输出的结果异或运算并连接到x3的下一级x2的输入,而且可以看到异或门的反馈是在内部的(即异或门的一个输入和输出连接的是相邻寄存器)。原创 2023-01-17 22:48:31 · 3151 阅读 · 1 评论 -
数字IC前端学习笔记:信号同步和边沿检测
以下为宽脉冲异步信号上升沿检测,下降沿检测即为将输入信号取反后进行上升沿检测。同步信号表示信号只在时钟沿到来时改变,因此直接利用D触发器和与门即可构造一个边沿检测装置,即在输入信号上升沿到来时,输出一个周期的高电平信号。信号的同步化分为两种情况,取决于异步输入信号脉冲宽度和目标时钟域周期,如果异步输入信号宽度大些(如从慢时钟域到快时钟域的同步)此处的异步信号,指按键或跨时钟域等原因导致的输入信号与时钟不同步,如果不进行同步化,可能会出现亚稳态。原创 2023-01-14 23:07:17 · 737 阅读 · 0 评论