芯片前端设计
文章平均质量分 71
芯片前端设计
尼德兰的喵
这个作者很懒,什么都没留下…
展开
-
【芯片设计】DC综合retiming策略的学习与实践
综合的Retiming策略通过重新分配组合逻辑路径中的时序,达到优化电路性能的目的。最后由这里延伸,最近学习到的另外一点经验就是,我们不是经常会在设计中调用DW ip吗,当DW的ip时序不满足时就可以在其后面插入寄存器(比如我们手动加2拍寄存器),然后通过set_optimize_registers命令来优化这个DW使其逻辑分散于这几拍中完成。对于DC综合中的retiming策略早有耳闻,但是一直没有比较系统的学习和实验过,正好借着这次交付过程的归纳总结机会,把一些零零散散的收获学习记录下。原创 2024-10-24 17:49:23 · 1693 阅读 · 2 评论 -
【前端设计】尝试一文搞懂verilog parameter的全部细节
P5和P6很好的说明了,显性定义的type是不会被后面的value所覆盖的,P5的属性:type = signed,range = [15:0],value = -7,P6的属性:type = unsigned,range = [15:0],value = 65529。parameter中是可以包含运算的,像这种就是运算得出结果后在遵循之前的规则,因此P4的属性为:type = unsigned,range = [31:0],value = 10。这是我们最常用的写法了,此时P0的属性由后面的5来决定。原创 2023-07-31 19:05:40 · 1259 阅读 · 0 评论 -
【前端设计】综合的harden block顶层为什么不能有参数呢?
那么上限大概是多少呢?因为RTL代码经过编译、综合和布局布线等诸多流程之后是要以网表和版图的形式向后交付的,而随着芯片的规模越来越大,如果把所有整个芯片放在一个网表里做,DC综合时间和布局布线时间将会极大(以月计),这根本不可能接受。应该是harden block作为一个单独综合和交付的网表,其本身应该是一个硬化的确定的网表结构,而顶层参数的存在与“确定的网表结构”相违背,因为大家都清楚,一个系统如果传参不同那么就等价于两个系统。然而,在综合后的硬化网表中,参数被替换为具体的值,且不再具有参数化的特性。原创 2023-07-24 23:59:38 · 689 阅读 · 0 评论 -
【芯片前端】延迟一拍出数的握手型ram结构的第二次探索
上一次尝试对握手型的ram控制器进行了一次尝试,最后尝试给出的结构如下图所示:之后呢我们会再拉出来这个结构来讨论他的优缺点,这篇文章呢是写一个更普遍更简单的结构,开始的起因是上一篇文章中的讨论:当时我暂时把第三种思路放在了一边而研究了下第二种思路因此搞了上面的结构,这次呢来根据第三种思路规划代码。原创 2023-07-20 00:56:05 · 283 阅读 · 0 评论 -
【芯片前端】It is illegal to leave the interface ports unconnected问题解决
此时是因为该模块的接口中有interface,而interface是不能作为顶层模块的接口的,必须有一个实例化的interface inst与之进行连接。当然,更可能的情况是因为VCS编译时并没有指定顶层,因此工具认为每一个module都是单独的顶层。综上,解决方式为在VCS编译选项中加入-top YYYY指定顶层即可。原创 2023-07-14 10:37:06 · 921 阅读 · 0 评论 -
【学习笔记】类AXI协议中的outstanding概念学习与计算
最近因为可能要写一个基于axi4协议的ddr模型(纯学习),正好也赶上我创作瓶颈了所以就把axi协议里的一些概念拿出来复习复习。原创 2023-06-22 23:02:15 · 8508 阅读 · 0 评论 -
【前端验证】通关寄存器与ral_model —— 25种常用寄存器类型全览
本文档对于寄存器的属性以synopsys相关文档以及ral_model生成模型时的识别方式为基准。通常讲可以归纳为以下三个方面:读写属性read-write access、写后值modified write value、读后操作read action。注意,这里指的都是软件的操作,对于硬件侧而言,寄存器无法感知到读行为,对于写行为一般允许通过hw_wen和hw_wdata进行操作。原创 2023-06-11 02:37:59 · 1600 阅读 · 0 评论 -
【芯片前端】verilog语法中的有符号数signed的本质是什么?
很多人(包括之前的我)都搞不清楚,verilog中signed和unsigned定义信号后,到低在电路中会有什么区别,本篇内容必须让大家豁然开朗!原创 2023-04-03 00:40:34 · 1013 阅读 · 0 评论 -
【前端设计】综合编译LOG中需要重点关注的三个warning
之前的笔记,今天整理一下。原创 2023-02-06 11:34:54 · 675 阅读 · 0 评论 -
【前端设计】复位保护模块的整体设计思路
复位保护模块,是在单系统进行动态复位的过程中,对接口进行硬性逻辑保护,避免异步复位过程中的毛刺对周围系统产生影响的模块。显然,复位保护所处的阶段是异步复位拉低之前和同步释放之后。原创 2023-01-31 15:01:35 · 868 阅读 · 0 评论 -
【前端设计】监控顺序返回型总线超时的计时器模块设计
总线超时检查机制是系统中必要的模块设计,用于在总线无法返回response时能够及时上报中断。从理论上分析,如果总线发生了诸如挂死或者物理损坏等超时行为,无论计时器上报timeout的时间偏大还是偏小,都是一定可以上报中断的。不过呢在一些敏感的系统中,及时发现问题还是很有必要的,因此这篇文章来聊一下如何设计一个相对平衡的超时计数器。适用场景为支持outstanding的顺序返回response的总线。原创 2023-01-30 15:21:11 · 847 阅读 · 0 评论 -
【前端设计】寄存器复位对综合面积的影响
之前在写代码的时候呢,就一直被要求尽量使用不带复位的寄存器,理由是节约面积和降低功耗。因此我一直有两个疑问:能省多少面积?能降低多少功耗?鉴于我一直没能掌握功耗测试的技能,因此这次先来看看面积的影响,等我学会使用测试功耗的工具我再测测功耗(其实我想先学formal,然后做一个快速formal比对的脚本,有没有合适的教程推荐呢各位大佬)。原创 2022-12-25 00:27:49 · 1734 阅读 · 1 评论 -
【前端设计】寄存器与主功能电路为异步时钟时的功能影响探索
今天想探究一个小问题,就是寄存器的时钟如果与主时钟是异步时钟,那么会不会对主功能有影响。当然,这样做肯定不是合理的,我知道的比较多的是寄存器使用降频到同源同相的时钟,或者使用主时钟再对寄存器读取时钟做跨异步。不过我想了几天总是感觉如果使用异步时钟,是否也可能对功能影响有限?原创 2022-12-09 13:31:11 · 2010 阅读 · 6 评论 -
【前端设计】SDC中生成时钟create_generated_clock语法解析
好久没有写前端设计系列的博客了,这次因为要在系统里加入时钟分频器因此复习一下sdc中关于生成时钟的约束语法,以下内容来自《综合与时序分析的设计约束》和一些自己的理解。在sdc约束中,由端口输入的时钟使用create_clock进行约束,其语法为:而在内部生成的时钟,则通过create_generated_clock进行约束,其语法为:约束项比较多,我们跟着书画个图写一写,如下图中是两个时钟分频器,实现的功能是将输入时钟半分频:假设输入的时钟为500MHz,则对应的波形为: 上图中实现的分频,而根原创 2022-12-03 20:47:11 · 3267 阅读 · 0 评论 -
【芯片前端】RTL一键编译/lint检查/verdi打开的快捷处理
一直以来我都有在rtl目录下快速编译代码、打开verdi查看互连结构以及进行lint检查的需求,因此这次所做的事就是将这三个操作集成在一个环境中。这个环境参考了许多之前的文章以及他人的经验,在行文过程中会列举。原创 2022-09-19 08:00:00 · 3094 阅读 · 0 评论 -
【芯片前端】3bit的信号与6bit的信号,如何打拍功耗更低?
这是一种常见的总线结构,即通过整体en信号控制整体总线有效,再通过分路en信号(比如strb)控制部分信息有效。原创 2022-09-14 22:08:51 · 707 阅读 · 0 评论 -
【芯片前端】根据数据有效选择输出的握手型FIFO结构探究
之前要做一个一读多写的fifo,也就是master写入数据到fifo中,多个slave读取数据,结构如下图所示:由于slave需要的数据一致,fifo内只需要例化一个ram以节约空间。这个fifo的具体结构下次博客中再来讨论。在这个fifo之后,又衍生出一个新的需求,就是master写入的数据并非每个slave都需要读取,而是需要甄选,比如trc0是slave0/1/2均需要读取,trc1只有slave1/2需要slave0将知丢弃即可。原创 2022-09-05 08:00:00 · 850 阅读 · 0 评论 -
【芯片前端】延迟一拍出数的握手型ram结构的一次探索
第一个思路呢,如果想获取到下一拍rready的状态,那么分类一想就会发现,只有当上一拍没有renc且当拍的rready==1才能保证下一拍的rready==1。然后赶紧查自己的博客有没有写错,发现博客写的跟添了一笔的代码一摸一样,gitee上的代码留错了/(ㄒoㄒ)/~~白花了2小时。这次根据实际场景,ram本身是双口的一拍读取RAM。第三个思路呢,我举得功能上应该是可以实现的,但是可能会导致rvalid有效但是没有握手过程中,rdata一直在变化,这不符合握手协议要求,因此暂时把这个思路放在了一边。原创 2022-09-02 20:10:12 · 924 阅读 · 5 评论 -
【芯片前端】保持代码手感——一对多的握手拆分模块
最近还是在写spec文档,一天不写代码保持手感的大业就不能停止。这篇是握手拆分的模块,一般来说握手拆分有两种情况,一种是所有下游ready同时拉起了才向上握手,另外一种是下游可以分先后接收数据,每一路都接收完成后向上握手。本篇文章实现的是第二种形式。...原创 2022-08-10 21:17:08 · 542 阅读 · 0 评论 -
【芯片前端】保持代码手感——握手型同步fifo的进一步拓展
前言最近也是沉迷于握手协议的研究,主要是用的太多了要是不自己写写用起来就很没底。握手FIFO在【芯片前端】保持代码手感——握手型同步FIFO设计里,在设计时候有一个feature就是“对外输出逻辑时序较优”,因此对外的输出(除了data)都是寄存器输出,这客观上就是断开了输入和输出握手。在之前的博客里讨论过这个问题,valid和ready同时握手的场景一定是有的,对于上游valid时序较查同时下游ready时序较差的场景,或者说harden层边界握手协议需要长途跋涉的场景,都是需要把..原创 2022-05-27 16:43:58 · 837 阅读 · 0 评论 -
【芯片前端】关于set_input_delay/set_output_delay慢信号约束到快时钟的思考
继续学习sdc的配置知识,这次思考的缘由是在写上一篇 【芯片前端】sdc学习日常——端口delay的正向设置与反向设置 中,写了这样一句话“还有一种方式,是把约束更恶劣的设置放在下面写,这样即使sigx被约束了两次,也会按更恶劣的配置进去。我理解更恶劣的应该是慢时钟的设置”。但事实上写这句话时,我是非常困惑的,因为这和我之前工作里项目里的经验不一样的。我记得很清楚,之前的要求是把快时钟port的约束放在后面,这样当一个信号误被约束在两个port中时,令其约束在快时钟域的set_input_delay/set原创 2022-06-20 00:56:01 · 1846 阅读 · 2 评论 -
进阶之路——二进制与格雷码的相互转换模块设计
最近在研究异步fifo的同步化设计,里面需要格雷码与二进制码的转换,因此研究了下实现的代码原创 2017-09-03 09:34:58 · 4015 阅读 · 4 评论 -
verilog时钟分频设计
1.偶分频模块设计偶分频意思是时钟模块设计最为简单。首先得到分频系数M和计数器值N。M = 时钟输入频率 / 时钟输出频率N = M / 2如输入时钟为50M,输出时钟为25M,则M=2,N=1。偶分频则意味着M为偶数。以M=4,N=2为例,我们希望得到的输出时钟时序如下:因此只需要将counter以clk_in为时钟驱动计数,当counter = (N-1)时原创 2017-07-12 15:42:48 · 67427 阅读 · 32 评论 -
每日工作记录——任意小数分频研究
最近由于准备面试,任意小数分频设计似乎是比较常问的问题。对于任意小数分频,常用的方法有双模前置小数分频和脉冲删除小数分频。前一种方法设计较为复杂,因此主要以第二种方式为主设计了一下。原创 2017-08-29 16:44:49 · 2503 阅读 · 4 评论 -
在ASIC中异步复位信号的处理——滤毛刺和异步复位/同步撤离
前言在毕业面试的时候遇到了这个问题,当时回答的不太好一直扎在心里,最近培训又讲了这块的知识因此在这里稍微记录总结一下。异步复位由于同步复位会被综合为触发器等元件的输入而增加功耗面积等,ASIC设计中异步复位使用越发广泛,当然这都不是重点,重点是在ASIC设计中应该对异步复位信号进行怎样的预处理以防止电路出现亚稳态等各种问题。简单来说,复位信号在使用前一般需要进行滤毛刺处理和异步复位/同...原创 2018-08-22 00:45:31 · 10729 阅读 · 0 评论 -
verilog时钟分频设计(整合模块)
这里对之前写的时钟分频模块做了整合,整合为完整的时钟分频模块,可以进行偶分频、奇分频和半分频原创 2017-07-12 21:19:36 · 5279 阅读 · 0 评论 -
VGA控制的verilog模块设计
VGA接口原创 2017-07-14 21:48:05 · 1746 阅读 · 2 评论 -
【芯片前端】握手接口FIFO型PIPE相较普通PIPE的优劣
FIFO型PIPE时序型PIPE原创 2022-05-28 21:00:34 · 620 阅读 · 0 评论 -
【芯片前端】Warning: Cannot find the design ‘xxx‘ in the library ‘WORK‘. (LBR-1)
前言又是跟DC较劲的一个小时,事情是这样的这不是一周的工作结束了嘛,于是我就想着又该整整我的小环境了,所以我就开心的打开了DC的report看看能不能写点什么。然后我就惊奇的发现,DC是可以输出power.rpt,但是我记得DC的power应该是非常的不准,所以我就想综合两个模块看看效果。报错于是我轻车熟路的操作,把文件导入然后开始综合,然后奇怪的事情就发生了,DC报了这个错:Warning: Cannot find the design 'xxxx' in the library 'WO原创 2022-05-27 19:30:24 · 4618 阅读 · 0 评论 -
【芯片前端】保持代码手感——握手型同步FIFO设计
前言工作中做了太久方案,还是要继续对代码手感的保持,这次完成握手型同步FIFO的RTL设计,设计规格如下:写入与读出均采用握手型接口; 支持2的整数次与非整数次深度; 对外输出逻辑时序较优;RTL设计对外接口握手型同步FIFO,接口如下:module sync_fifo #( parameter DEPTH = 8, parameter WIDTH = 32)( input clk, input rst_n, input in_va原创 2022-05-25 18:10:05 · 1620 阅读 · 9 评论 -
【芯片前端】sdc学习日常——端口delay的正向设置与反向设置
前言sdc的学习还在继续,这次的话题是设置input_max/min_delay / output_max/min_delay。正向设置设定一下模块的场景,假设一个模块有三个时钟域,对应的接口如下:set clka_ports{ \ clka_sig1 \ clka_sig2 \}set clkb_ports{ \ clkb_sig* \}set clk_sig{ \ clka \ clkb \ clkc \}set rs.原创 2022-05-23 15:16:56 · 1294 阅读 · 0 评论 -
【芯片前端】D触发器的功耗的直观分析图
前言【芯片前端】关于门控电路和逻辑做在D端还是EN端的思考触发器的充放电正好在http://scratch.trtos.com/circuitjs.html 里看到了动态图,所以我就把几种触发器的充放电动态图截了一下,以做参考。边沿触发型D触发器D端保持为低电平,6个门电路中4个在进行充放电:D端保持为高电平,同样的,6个门电路中4个在进行充放电:主从触发器D端保持为高电平,8个门电路中6个在进行充放电;D端保持为低电平,同样8个门电路中6个在进行充放电;..原创 2022-05-23 00:47:56 · 550 阅读 · 0 评论 -
【FPGA的小娱乐】在tft显示屏上画X型
前言我的最终目的还是想在FPGA上做一个小游戏,具体做啥还没想好但是我需要一些基本的素材,所以我先在屏幕上画一个X出来再说,就像下面这个图:制作有一个基础的tft模块已经在【FPGA的小娱乐】tft显示屏生成信号辅助测试阵列里说明过了,就是提供chan_in作为输入接口的tft_ctrl模块,基于这个模块的接口可以很简单的做出来画矩形的模块:module square_gen( input [10-1:0]x_point, input [10-1:0]y_point, inp..原创 2022-05-17 01:37:17 · 783 阅读 · 0 评论 -
【FPGA的小娱乐】tft显示屏生成信号辅助测试阵列
前言论疫情可以把一个人逼到什么地步呢!甚至可以让我无聊到把4年前的FPGA板子拿出来搞点事情。要搞个什么事呢,我想在一个tft屏做一个下图这样的阵列,能把内部的一些信号比如状态机的状态输出到屏幕上,辅助我定位后续的一些问题。这功能就有点类似与状态灯,只不过这个板子的状态灯只有4个,肯定是不够用的,所以我要做这么个东西出来。实际上看内部的一些状态是不用这种阵列的,用...原创 2022-05-14 02:50:54 · 994 阅读 · 0 评论 -
【芯片前端】“异步FIFO全解析”的BUG——格雷码连续性
前言在前几天写完【芯片前端】保持代码手感——异步FIFO全解析之后自我感觉非常良好,觉得异步fifo的问题我已经全部拿捏了,没想到今天突然想到一个我自己代码里的bug。代码中的BUG事情的源头在同步fifo里,深度任意可配的同步fifo里使用了两个非饱和的cnt计数器记录读写地址指针,waddr和raddr均比实际地址多一位,最高位用来指示套圈情况。当waddr和raddr的最高位相同时,fifo_cnt = waddr-raddr;当waddr和raddr的最高位相反时,fifo_cnt =原创 2022-04-27 01:04:05 · 1537 阅读 · 1 评论 -
【芯片前端】保持代码手感——握手协议ready打拍时序优化
在valid-ready双向握手机制下,对下游反馈的ready进行打拍,实现对上游接口的ready信号时序优化。当拍若ready有效则数据可以直接向下游握手,若ready无效则数据寄存一拍。要求数据输出不能丢弃或乱序,且上游的ready为寄存器输出接口如下:module backward_pipe #( parameter WIDTH = 8)( input clk, input rst_n, input [WIDTH -1:0]data_in, input data.原创 2022-04-10 18:45:33 · 1578 阅读 · 4 评论 -
【芯片前端】保持代码手感——握手协议valid打拍时序优化
在valid-ready双向握手机制下,对valid和data进行打拍实现对下游接口的valid信号时序优化。无论下游ready是否有效,数据均会在寄存器中寄存一拍。要求数据输出不能丢弃或乱序,且下游的valid和data为寄存器输出。接口如下:module forward_pipe #( parameter WIDTH = 8)( input clk, input rst_n, input [WIDTH -1:0]data_in, input data_in_val.原创 2022-04-10 16:36:56 · 2033 阅读 · 1 评论 -
【芯片前端】保持代码手感——异步FIFO全解析
前言关于FIFO和异步处理我已经写过很多东西了:进阶之路——二进制与格雷码的相互转换模块设计【异步FIFO的一些小事·0】异步FIFO同步化设计【异步FIFO的一些小事·1】空满判断与格雷码【异步FIFO的一些小事·2】异步FIFO中异步走线延时约束的一些思考【异步FIFO的一些小事·3】异步FIFO中指针走线延时的一些思考【异步电路碎碎念5】 —— 跨异步处理的几个注意事项【芯片前端】保持代码手感——同步FIFO这次因为保持代码手感的需要,重新写一次异步fifo。写的过原创 2022-04-07 21:12:32 · 2931 阅读 · 0 评论 -
【芯片前端】保持代码手感——数据累加输出
实现串行输入数据累加输出,输入端输入8bit数据,每当模块接收到4个输入数据后,输出端输出4个接收到数据的累加结果。输入端和输出端与上下游的交互采用valid-ready双向握手机制。要求上下游均能满速传输时,数据传输无气泡,不能由于本模块的设计原因产生额外的性能损失。电路的接口如下图所示。valid_a用来指示数据输入data_in的有效性,valid_b用来指示数据输出data_out的有效性;ready_a用来指示本模块是否准备好接收上游数据,ready_b表示下游是否准备好接收本模块的输出数据.原创 2022-04-03 01:21:26 · 674 阅读 · 0 评论 -
【芯片前端】保持代码手感——编写常值乘法器和一些拓展
题目没什么意思,给的参考波形也有问题,不过可以拓展一点东西。题目编写一个4bit乘法器模块,并例化该乘法器求解c=12*a+5*b,其中输入信号a,b为4bit无符号数,c为输出。注意请不要直接使用*符号实现乘法功能。module calculation( input clk, input rst_n, input [3:0] a, input [3:0] b, output [8:0] c );endmodule答案解析无非就是用移位加法实现常值乘法呀,题目没讲清楚.原创 2022-03-28 22:21:36 · 524 阅读 · 0 评论