FPGA硅农
数字IC设计,FPGA开发
展开
-
【数字IC进阶】整数除3和模3的高效实现
x为16bit无符号整数,要求在尽可能低的延迟下求x除以3的商和余数。:如果想在尽可能快的时间内求出x/3和x%3,一种最容易想到的方法就是设置1个查找表,将每一种可能取值除3和模3的结果存储下来,然后以x为索引查表即可。然而,在本文的问题中,x共有16bit,可能的取值共有216,显然直接用查找表实现不太现实,而且从这么多可能的结果中获取x对应的商和余数,对时序也是一个巨大的挑战。本文在上述思路的基础上,做了一些优化,具体方法如下:假设ax158bx70,则xa∗。原创 2025-04-19 16:17:23 · 109 阅读 · 0 评论 -
AXI总线掩盖延迟的条件
文章介绍了AXI总线中,掩盖总线延迟需要满足的条件。这一结论对性能分析至关重要,有着广泛应用。原创 2024-06-22 22:15:51 · 558 阅读 · 0 评论 -
【数字IC设计】芯片设计中的RDC
在芯片设计中,RDC是的缩写,类似于CDC(clock domain crossing),由于现在SOC芯片是有很多ECUs组成,为了使整个系统能够快速从复位中恢复, 用户希望SOC里面每个ECU模块都可以有自己独立的异步复位信号,这样可以在出问题的时候只复位有错误逻辑的模块,而使其它模块保持正常工作。原创 2024-05-12 14:29:47 · 1136 阅读 · 0 评论 -
【数字IC设计】Verilog计算x/255的商和余数
已知x是16位无符号整数,求x除以255的余数和商。尽量降低实现方式的硬件开销(包括面积和时序)原创 2023-12-23 19:14:12 · 1047 阅读 · 0 评论 -
【数字IC设计】利用Design Compiler评估动态功耗
switching power中,clock_network在未开启门控时钟时为0,开启后为9.4489e-3,而register和combinational在未开启门控时钟时为7.0319e-04和2.7926e-03,开启后为4.8827e-04和3.3902e-04。这符合我们的预期,因为en为1的概率越高,counter计数器翻转次数越多,从而动态功耗越大。由于是动态功耗,因此其值与信号翻转的次数相关,因此,我们改变en信号为高的概率(后,可以得到saif文件。可以看到,此时动态功耗为。原创 2023-10-14 22:41:00 · 1012 阅读 · 0 评论 -
【数字IC/FPGA】基于握手的数据广播
本文介绍了一种基于握手协议的数据广播方式。事实上,该场景可以简化为模块的一对多握手,并且下游的各个模块可以独立的完成握手(与之相对的是下游模块一起完成握手,相比之下,下游各个模块可以独立完成握手显然更加普适、灵活)。原创 2023-09-23 11:11:37 · 422 阅读 · 0 评论 -
【数字IC/FPGA】Verilog中的递归调用
在Verilog2001中,模块的是可能的,引用下面的一段话(出自上面的参考文章)下面,我们将以和两个例子为例,说明模块递归调用在设计电路时的用法。原创 2023-09-09 11:44:09 · 889 阅读 · 0 评论 -
fwft fifo和standard fifo
排除上面两种情况,若此时rd_en信号有效,为了在下一个周期将下一个数据送到fifo的读端口,需要直接读取rd_addr+1处的数据。,即rd_en信号有效且fifo非空时,数据会在下一个周期出现在fifo的读数据端口。而后者,即fwft fifo的。然而,这种组合逻辑输出的方式对时序并不友好,因此,本文给出了更加时序友好的fwft fifo实现方式。,也就是说,rd_en信号有效的当拍,数据就会出现在读端口上。实现fwft模式同步fifo的一个简单方法就是将。fifo共有两种,分别是。原创 2023-07-29 21:26:50 · 2177 阅读 · 0 评论 -
握手信号的打拍
在数字电路的设计中,对关键路径的处理方法之一就是,然而,对握手信号插入寄存器则需要进行特殊的处理,否则可能导致数据传输的错乱,严重影响电路的功能。如图所示,为了阐述对握手信号打拍的处理方式,我们给出了下图所示的简化模型,其中,上游的握手信号包括和,而下游的握手信号则包括和,其数据流向如图中箭头所示。原创 2023-06-17 21:22:54 · 1789 阅读 · 0 评论 -
【数字IC/FPGA】百度昆仑芯手撕代码--累加器
已知一个加法器IP,其功能是计算两个数的和,但这个和延迟两个周期才会输出。现在有一串连续的数据输入,每个周期都不间断,试问最少需要例化几个上述的加法器IP,才可以实现累加的功能。原创 2023-02-11 13:45:00 · 1782 阅读 · 1 评论 -
锁存器和触发器
大多数数字系统中,除了需要具有逻辑运算和算术运算功能的组合逻辑电路外,还需要具有存储功能的电路。组合电路与存储电路结合构成时序逻辑电路,简称。本文将讨论实现存储功能的两种逻辑单元电路∶和,着重讨论其工作原理与电路结构,以及所实现的不同逻辑功能。原创 2022-12-11 16:25:35 · 1584 阅读 · 0 评论 -
AMBA总线相关知识记录
AMBA总线相关知识介绍原创 2022-09-30 14:57:54 · 1453 阅读 · 0 评论 -
数字IC手撕代码---找出最接近的数的位置
即输入一个数,找出矩阵中和这个数最接近的数的位置(若距离相等则取索引靠前的)。假设矩阵中的元素按照行主序的方式访问。原创 2022-08-10 13:30:02 · 1141 阅读 · 0 评论 -
Karatsuba大数乘法的Verilog实现
我们以一个例子为例,来介绍一下的基本原理。题目写一个乘法器,它可以计算两个32bit无符号数a,b的乘积。针对这个问题,我们当然可以直接通过out原创 2022-07-31 21:10:59 · 2215 阅读 · 0 评论 -
Verilog实现占空比为5/18的9分频
设置一个上升沿触发的计数器和下降沿触发的计数器,其占空比均为6/18,且为9分频,则这两个时钟,如果将它们相与,根据与的性质,得到的结果应该是一个占空比为。或者分别设置一个上升沿和下降沿触发的计数器,其占空比均为4/18,且为9分频,则若将这两个时钟,得到的结果应该是一个占空比为4/18+1/18=5/18的9分频时钟。...原创 2022-07-29 11:18:55 · 995 阅读 · 0 评论 -
【数字IC/FPGA】热独码检测
独热编码即One-Hot编码,又称一位有效编码,其方法是使用N位状态寄存器来对N个状态进行编码,每个状态都有它独立的寄存器位,并且在任意时候,其中只有一位有效,比如00100。原创 2022-07-24 16:17:19 · 2254 阅读 · 0 评论 -
基于移位寄存器的同步FIFO
如图所示,在赛灵思官方提供的FIFOIP里,同步FIFO(CommonClock)可以由构成,或者由内建的FIFO构成,异步FIFO(IndependentClocks)可以由构成。本文主要实现。设置一个计数器,记录目前FIFO内部的数据个数,外部每向FIFO写入一个数据,移位寄存器就进行一次移位,而读出数据的位置则根据FIFO内数据的个数来确定。...原创 2022-07-24 14:05:21 · 1846 阅读 · 0 评论 -
System Verilog实现优先级仲裁器
共有8个请求,每个请求对应一个优先级,现设计一个仲裁器,根据优先级输出grant向量(值越大优先级越高)。思路:我们设计一个模块,该模块具有2个数据输入端口(输入数据为添加了req的“{req,weight}”),以及两个索引输入端口,这两个索引与两个数据相对应,模块的输出为两个数据的较大值以及较大值对应的索引。基本模块:仲裁器代码测试平台架构图如图,电路架构类似于一个加法树:...原创 2022-07-01 21:07:45 · 1004 阅读 · 0 评论 -
单端口RAM实现FIFO
RAM按照端口数目,可以分为单端口RAM只有一组数据线和一组地址线,只有一个时钟,读写共用地址线。输出只有一个端口。所以单端口RAM的读写操作不能同时进行。当wea拉高时,会将数据写入对应的地址,同时douta输出的数据与此时写入的数据是一致的,因此在读的时候需要重新生成对应的读地址给addra,并且disable掉wea。输入有一组数据线,两组地址线,两个时钟。所以一个端口只读,另一个端口只写,但写入和读取的时钟可以不同,且位宽比可以不是1:1。即允许写A的同时读B,且速率可以不同。输入有两组地.原创 2022-06-28 14:19:41 · 1771 阅读 · 0 评论 -
【数字IC/FPGA】Booth乘法器
Booth算法的HDL实现原创 2022-06-22 14:02:00 · 763 阅读 · 0 评论 -
Verilog实现模5运算(低位先输入)
一个12bit的数,一个bit一个bit串行输入,并且低位优先,求它模5的余数。解:解决这一问题的关键就是注意到2n2^n2n模5的周期性,如下所示1,2,4,8,16,32这一系列数,模5的余数分别为1,2,4,3,1,2可以看到,模5的周期为4,因此,我们可以设置一个模4的计数器,当该计数器为0时,对应余数应该为1,为1时余数为2,…。TB结果...原创 2022-06-16 20:40:31 · 1240 阅读 · 0 评论 -
【数字IC/FPGA】Verilog求最大公约数和最小公倍数
输入a,b,求a,b的最大公约数和最小公倍数。解决方法:先根据辗转相除法求出a,b的最大公约数,最小公倍数即为ab乘积除以它们的最大公约数。TB结果原创 2022-06-15 21:24:57 · 991 阅读 · 0 评论 -
【数字IC/FPGA】Verilog实现排序算法
Verilog实现8输入排序算法原创 2022-06-13 19:27:33 · 5638 阅读 · 3 评论 -
【跨时钟域同步】停时钟法
如图所示,rd_en是我们要传递的信号,当它拉高时,我们拉低stall_b,这个信号门控了clk_fst_gt时钟(clk_fst的衍生同步时钟),这样门控时钟关闭后,我们的rd_en就会保持住,让clk_slow有足够时间去采;等到慢时钟域采完之后,即rd_en_f2s拉高,我们将这个信号在跨时钟域同步到快时钟域去,通知快时钟域那边已经采集完毕,可以开启时钟了。其电路图如下可以看到,rd_en和同步回来的反馈信号共同决定了stall_b信号(clk_fst_gt的门控信号),而rd_en由门控时钟c原创 2022-06-13 18:27:01 · 504 阅读 · 0 评论 -
【数字IC/FPGA】数据累加输出
题目描述:实现串行输入数据累加输出,输入端输入8bit数据,每当模块接收到4个输入数据后,输出端输出4个接收到数据的累加结果。输入端和输出端与上下游的交互采用valid-ready双向握手机制。要求上下游均能满速传输时,数据传输无气泡,不能由于本模块的设计原因产生额外的性能损失。电路的接口如下图所示。valid_a用来指示数据输入data_in的有效性,valid_b用来指示数据输出data_out的有效性;ready_a用来指示本模块是否准备好接收上游数据,ready_b表示下游是否准备好接收本模块的输原创 2022-06-12 16:32:10 · 697 阅读 · 0 评论 -
【数字IC/FPGA】仲裁器进阶--Round Robin Arbiter
Round Robin Arbiter固定优先级的缺点是:每个模块的优先级自始至终是固定不变的,这在某种程度上来说是不公平的,Round Robin就是考虑到公平性的一种仲裁算法。其基本思路是,当一个requestor 得到了grant许可之后,它的优先级在接下来的仲裁中就变成了最低,也就是说每个requestor的优先级不是固定的,而是会在最高(获得了grant)之后变为最低,并且根据其他requestor的许可情况进行相应的调整。这样当有多个requestor的时候,grant可以依次给每个reque原创 2022-04-08 17:59:21 · 4424 阅读 · 5 评论 -
【数字IC/FPGA】仲裁器进阶--固定优先级仲裁器
固定优先级仲裁器仲裁器Arbiter是数字设计中非常常见的模块,应用也非常广泛。定义就是当有两个或两个以上的模块需要占用同一个资源的时候,我们需要由仲裁器arbiter来决定哪一个模块来占有这个资源。最简单的仲裁器就是固定优先级仲裁器(Fixed Priority Arbiter),也叫SP(Strict Priority, 严格优先级)仲裁,该仲裁器会给各个输入队列分配优先级,当高优先级的队列非空时,优先调度高优先级队列。只有当高优先级队列为空时,才有可能调度低优先级的队列。在整个过程中,优先级是固定、原创 2022-04-08 14:49:33 · 2359 阅读 · 0 评论 -
【数字IC/FPGA】低功耗设计
低功耗设计方法功耗的类型低功耗设计方法静态低功耗技术多阈值工艺方法电源门控方法体偏置动态低功耗技术多电压域(Multi-Voltage Domain)预计算门控时钟门级优化技术毛刺的消除逻辑级优化物理级优化控制输入向量低功耗Soc系统的动态管理动态电压及频率调节技术低功耗操作系统存储器功耗控制总结功耗的类型CMOS电路中的功耗由两部分构成,第一部分为负载电容充放电时引起的功耗,称为动态功耗,另一部分为漏电流引起的功耗,称为静态功耗。其中动态功耗包括翻转功耗和短路功耗。翻转功耗是数字电路中信号翻转时电容充原创 2022-04-07 12:15:26 · 2801 阅读 · 0 评论 -
【数字IC/FPGA】任意深度异步FIFO的设计
在许多资料中,都会讲到异步FIFO的深度必须为2的幂,否则无法使用格雷码设计。那么究竟是不是这样呢?博主查阅了一些资料,发现任意深度的异步FIFO都可以通过格雷码实现,只需要施加一些额外的处理即可。本文以深度为5的异步FIFO为例,介绍了任意深度异步fifo的设计流程。格雷码的对称性如下图所示,格雷码不仅相邻两个数只有一个比特不同,它还有另外一个性质:首位去掉相同个数后,剩下的数仍然满足相邻数只有一个比特不同的性质,包括绕回。这个性质给了我们启发:我们现在要设计深度为5的异步FIFO,那么为了判断空原创 2022-03-24 11:24:10 · 2604 阅读 · 9 评论 -
【数字IC/FPGA】Wallace乘法器
Wallace乘法器原理为了简单起见,本文以4x4乘法器为例。如下图所示Wallace乘法器的基本思想就是对输入进行3-2压缩,它采用的是一个类似全加器的结构:输入为三个数,输出为两个数,并且在逻辑运算上和全加器完全一致(可以认为是全加器),输出的加法结果位置不变,而输出的进位送入下一级(高位)参与运算。我们将上图重写为下面的形式然后,在第一级,我们用半加器将x1y2和x0y3求和,得到结果a0和进位输出b0(写到下一级),同时也用半加器将x2y2和x1y3求和,得到结果a1和进位输出b1。原创 2022-03-23 21:07:56 · 1527 阅读 · 0 评论 -
【数字IC/FPGA】时钟无毛刺切换
本文参考自链接无毛刺时钟切换电路,又叫 Glitch free 电路、时钟无缝切换电路。随着越来越多的多时钟应用于当今的芯片中,在芯片运行时经常需要切换时钟源。通常的实现方式是:在硬件中复用两个不同频率的时钟源,并通过内部逻辑控制复用器 MUX。下面介绍几种时钟切换的方法。方法一:AND-OR 门组成复用器 MUX如上图所示,当SELECT信号为高时,CLK1被选中,OUT CLOCK=CLK1,当SELECT为0时,CLK0被选中,OUT CLOCK=CLK0,这就是上述时钟切换电路的工作原理。但原创 2022-03-07 22:16:48 · 1298 阅读 · 0 评论