- 博客(37)
- 收藏
- 关注
原创 VIM经典命令系列之数字递增、递减
Vim进阶技巧:数字递增递减操作指南 本文介绍了Vim中实现数字递增递减的高效方法。主要内容包括: 单列数字操作:通过列选中+I命令或qa寄存器记录实现自动递增 多列数字处理:结合f跳转和寄存器操作实现多列同步递增 实用技巧:演示了array[0]=5到array[3]=20等复杂格式的批量生成方法 这些技巧能显著提升重复性数字编辑的工作效率,特别适合处理有规律的批量数字修改场景。文章通过具体示例详细说明了各种方法的操作步骤和适用场景。
2025-12-10 09:45:25
413
原创 DW_AHB_FULL下接DW_AHB_LITE注意事项
摘要:在AHB_Lite与AHB_FULL接口设计中,由于AHB_Lite缺少hready_in和hsel信号,导致控制信号传递出现问题。仿真发现当AHB_FULL的QSPI Flash取指令访问AHB_Lite下的寄存器时,因hready未关联造成APB寄存器写入错误。解决方案包括:1)将AHB_FULL的hready与htrans信号相与后再传给AHB_Lite;2)对AHB_Lite的htrans信号增加hsel选通控制。此外,针对H2H桥接场景,建议将slave端hready短接以避免重复传输。这些
2025-12-10 09:42:11
611
原创 时钟模块AC scan插OCC scan 规则
摘要:本文提出两种时钟控制方案:1)对于高频电路(>200MHz),在RTL中自动插入clk_occ_buf_*单元(禁止级联),后端工具将据此完成OCC插入;2)低频电路仅需普通scan_mux。图中展示了高频方案的实现规则,其禁用机制类似CGC:scan_mode下将CGC enable强制置0,同时低频CGC的scan_mode接0。该方案实现了高频电路的时钟门控优化,同时确保扫描测试功能不受影响。
2025-12-10 09:36:59
199
原创 Verilog基本语法- for循环使用注意事项
本文总结了Verilog/SV中for循环的使用注意事项:1)时序逻辑中慎用for循环;2)Verilog中for循环需包含在generate/always块内,SV允许外露;3)循环体必须使用begin-end块,并添加大写块名;4)位选择语法中,常规for循环仅支持data[base_expr+:width]形式,不支持变量作为双下标(如data[3i+8:3i]);5)generate块支持更多语法形式。重点指出位选择时变量下标的使用限制:Verilog-2001允许base_expr为变量,但wid
2025-12-10 09:32:33
332
原创 Verilog基本语法-压缩数组和非压缩数据
本文介绍了Verilog中压缩数组和非压缩数组的定义与使用。压缩数组将位宽定义在变量名前(如reg[3:0][7:0] temp),而非压缩数组将位宽定义在变量名后(如reg temp[3:0])。实际应用中常采用压缩结合非压缩的方式定义数组(如reg[31:0] temp[7:0])。文章还说明了在模块端口声明时使用压缩类型(如wire[7:0][31:0] temp1)可简化端口连接,并给出了通过assign语句连接压缩数组元素的示例。
2025-12-10 09:30:00
215
原创 timescale定义可能会影响后仿真的原因
仿真时间精度问题会导致延迟值的四舍五入误差。在timescale为1ns/1ps时,1.2556ns会被显示为1.256ns,而1.2554ns则显示为1.255ns。这种精度误差在后仿中可能累积导致时序违例。解决方法包括修改网表timescale(不现实)或通过PT报告debug,逐个比对路径上的cell延迟。实际应用中应以PT报告为准,并重点检查未反标的cell。
2025-12-09 17:47:50
165
原创 用Verilog库函数实现正弦波(三角函数波)
摘要:本文介绍了正弦波生成的数学公式A*sin(2πft+φ),其中A为幅度,f为频率,φ为初始相位。以50Hz正弦波为例,在100MHz精度下,一个周期包含2×10^6个采样点。通过周期性累加计数器cnt,可计算出每个采样点的相位值。Verilog实现中,将公式转换为数字信号处理形式,并给出了仿真波形验证。该方案适用于数字信号发生器设计,能够精确控制正弦波的频率、幅度和相位参数。
2025-12-09 15:30:40
179
原创 DW_AHB配置解析
摘要:本文介绍了AHB总线配置选项,包括AHB lite和AHB full的选择、主从设备数量、地址/数据位宽设置、大小端控制方式、地址译码模式(内部/外部)、低功耗模式控制(pause mode)、仲裁机制(带权重优先级)、突发传输控制、存储器重映射功能等。重点说明了当master采样到hgrant信号有效时,会在同一时钟周期同时发出htrans和hbusreq信号,并以htrans作为传输开始的标志。文中还详细解释了各配置参数的具体含义和使用场景。
2025-12-09 15:09:40
740
原创 EDA后仿真之NOTIFIER
摘要:后仿真主要检查时序问题,当时序违例导致DFF输出不定态时可能引发系统故障。文章介绍了时序检查类型(setup、hold等)及notifier机制,当时序违例发生时notifier会翻转并导致寄存器输出x态。针对不需要时序检查的情况,提出了三种解决方法:1)force寄存器notifier为x;2)使用vcs选项全局禁用时序检查;3)使用vcs ucli接口选择性禁用特定检查类型。
2025-12-09 14:58:34
299
原创 QSPI Flash xip取指同时program过程中概率性出现usb播歌时断音
USB Audio芯片,代码放到qspi flash中,执行代码时,客户会偶尔保存一些参数,即FPGA验证过程中,每隔10ms向flash info区烧写4个byte(取指过程一直存在,且时隙软件不可控),同时芯片同时打开录音功能,以及DAC播放功能、以及打开系统中其他中断模块(程序会被频繁打断)。
2023-12-29 08:32:47
1666
原创 Mentor USB Controller EDA仿真系列之SetAddress传输
本文主要介绍Mentor USB Controller传输SetAddress枚举流程,包括前期phy上电、控制器上电以及内部相关状态机运作情况,以及host和device两种情况下的软件配置。并重点介绍了该包传输的整体flow。文章最后对仿真过程中遇到的问题做了介绍并给出了解决该问题的一种方法。提示:以下是本篇文章正文内容,下面案例可供参考1. 首先保证phy能正常输出xclk,该clk是接给controller使用的,要想phy能正确产生xclk,则phy的driver必须正确。
2023-12-26 15:42:46
1276
原创 Mentor USB Controller EDA仿真系列之Bulk In传输
本文主要介绍Mentor USB Controller传输Bulk In包的整个流程,包括前期phy上电、控制器上电以及内部相关状态机运作情况,以及host和device两种情况下的软件配置。并重点介绍了该包传输的整体flow。文章最后对仿真过程中遇到的问题做了介绍并给出了解决该问题的一种方法。提示:以下是本篇文章正文内容,下面案例可供参考1. 首先保证phy能正常输出xclk,该clk是接给controller使用的,要想phy能正确产生xclk,则phy的driver必须正确。
2023-12-26 10:54:28
1446
原创 Mentor USB Controller系列之寄存器解析
要想深入理解并灵活运行mentor提供的这套controller,需要我们对里面的每个寄存器都深入理解。本文详细解释了每个寄存器以及使用方法和注意事项。提示:以下是本篇文章正文内容,下面案例可供参考以上内容对寄存器做了详细的解析,并对一些关键的寄存器bit做了备注,在实际使用过程中需要软件特别的注意。寄存器的定义对应了每个功能,只有详细了解每个寄存器的物理含义以及使用说明,才能更好的实现相关的功能。
2023-12-25 09:57:28
1706
原创 SOC系统经典IP介绍以及使用方法说明之dw_i2c
本文详细介绍了i2c的相关协议、硬件的工作原理,以及软件的使用方法。并且根据实例讲解了相关的技术细节,供大家参考。当然,本文只针对i2c的某一种应用场景进行举例,实际工作过程中,大家还需要根据需求对此做简单调整。
2023-12-22 10:39:23
1888
原创 关于时钟模块完备性验证方法第八章-功能覆盖率
通过以上几个章节,我们介绍了关于时钟模块完备性验证的多个自动化checker,通过在testbench中添加以上自动化checker,可以自动检查出各种违例,假如说我们准备好了这些自动化checker,那么接下来就需要我们产生丰富的测试激励来对系统时钟进行验证。通常情况下代码覆盖率可以作为验证质量的一个衡量标准,但是很多时候,考虑到项目周期短,验证人员分配不足等各种先天因素的影响,我们很难把代码覆盖率收集到某个高度。
2023-12-22 09:17:02
1380
原创 关于时钟模块完备性验证方法第七章
仅仅是借用Verilog语法进行简单的设计,便能在实战中发挥不可想像的作用,通过实时检测系统时钟是否发生不定态问题,该方法同样适用于EDA后仿真验证。通过模块的层次化调用,便于继承和优化修改。大大提高了验证效率。
2023-12-22 09:00:10
1478
原创 SOC系统经典IP介绍以及使用方法说明之dw_wdt
WDT即我们常说的看门狗,一般带CPU的系统都会配上WDT,主要原因也是因为在实际软件运行过程中,无论是硬件存在缺陷还是软件存在bug,还是随着芯片运行环境变化导致timing问题、甚至说遇到了概率性的异步问题等原因,莫名导致CPU跑飞了,也就是说CPU无法正常取指执行,进而导致一些模块无法正常运行,而这些应用场景有时候无法人为干预,所以即使CPU跑飞了,我们也想通过某个技术手段,让CPU能够回归正常,也就是我们说的重启。
2023-12-21 09:33:27
982
2
原创 关于时钟模块完备性验证方法第六章
之所以要进行时钟glitch检查,是因为实际工程中我们遇到这样的问题,有些时钟设计,比如在频率切换过程中,有的时钟设计并非无毛刺切换设计,但是这又是设计允许的,也有些设计虽然是无毛刺切换,但是切换过程中频率并不规整,但是频率也是可以接受的,这就导致前面章节中我们介绍的频率自动化检查的checker无法cover所有的需求,只能waive掉这些特殊的时钟,但是又担心waive掉后,系统运行过程中有可能漏掉一些不满足最小脉冲要求的情况,即我们常说的glitch。
2023-12-21 09:13:01
1215
原创 SOC系统经典IP介绍以及使用方法说明之dw_timer
dw_timer即定时器,在SOC系统中属于常用的模块,目前synopsis工具可以根据需求自动生成RTL代码,具有很强的通用性和移植性。本文主要针对dw_timer进行简单的介绍,包括寄存器配置flow以及使用过程中的一些注意事项。
2023-12-20 09:17:51
997
1
原创 关于时钟模块完备性验证方法第五章
只所以要进行时钟strobe检查,是因为很多时候设计中有下图时序的要求,这种场景一般在两个频率不同的时钟域内进行数据交互的时候会用到,比如AHB到APB域的数据交互,都需要利用clk_strobe来指示数据的有效性。
2023-12-20 08:59:18
1853
1
原创 vim常用命令及使用技巧
vim编辑器是一种强大的代码coding编辑器,比如对Verilog,systemverilog,c++等,其中有很多使用技巧以及相关插件,如果能很好的掌握这些,可以极大的提高编程效率,本文首先对vim常用的命令做一些总结,后续再更新一些经典的插件,供大家参考。序号命令介绍1gg跳转到当前文件第一行2G跳转到当前文件最后一行3vG选择当前行及以下所有行4dG删除当前行及以下所有行5:vs左右分屏6:sp上下分屏7把全文所有m替换为n8把1到5行所有m替换为n。
2023-12-19 08:49:29
974
1
原创 关于时钟模块完备性验证方法第四章
之所以要进行时钟相位检查,是因为设计中经常会出现一些时钟具有固定相位关系的情况,比如说两个时钟同相位或者反相位,又或者两个时钟差一个高频时钟的相位等等。
2023-12-19 08:31:33
1687
1
原创 关于时钟模块完备性验证方法第三章
之所以要进行时钟占空比检查,因为中后端对时钟建模的时候会要求时钟的最小脉冲宽度,当我们RTL产生时钟的时候,大部分情况会按照要求进行建模,但是也有可能出现时间产生的时钟与spec中定义的不一致,导致与中端generate的时钟不一致,影响最终的timing,另外对于复杂的时钟方案中,比如在时钟切换时,可能会在时钟切换时刻引入占空比不符合要求的情况,类似glitch这种,因此在验证时钟完备性时一定要进行占空比的检查。提示:以下是本篇文章正文内容,下面案例可供参考。
2023-12-18 14:38:41
1098
1
原创 关于时钟模块完备性验证方法第二章
众所周知,时钟模块为整个SOC系统中各个模块提供相应的时钟,在大部分情况下,各个模块的时钟频率各不相同,这也是为了更好的管理芯片的功耗问题,当系统需要跑到高频阶段时,软件可以通过配置分频控制字将时钟切换到高频,同理当芯片需要进行相对低的功耗时,就需要把各个模块的频率切换到低频去工作。因此,在系统工作过程中,软件会频繁切换相关模块的时钟频率。关于时钟无毛刺切换设计,我已在其他篇文章中做了详细介绍,这里我们主要介绍如何验证时钟切换过程中频率是否符合要求的问题。
2023-12-18 13:56:11
1517
2
原创 关于时钟模块完备性验证方法第一章
随着集成电路的规模越来越大,系统中所需要的时钟系统也越来越复杂,如何保证时钟验证的完备性一直是众多验证工程师追求的目标,本文就系统中时钟模块的验证完备性进行探讨,包括时钟门控、时钟频率、时钟占空比、时钟glitch、时钟相位、以及参考模型等。
2023-12-16 18:44:17
2757
原创 RST_GEN设计规范系列之同步释放原则
在SOC系统中,rst_gen是专门为系统各个模块产生复位逻辑,用于接DFF的复位端口。为了保证系统复位正常,rst_gen模块设计有严格的要求,一般会跟clk_gen匹配产生,好的rst_gen设计不但可以保证系统复位的鲁棒性,还有利于中后端recovery/removal的timing收敛。提示:以下是本篇文章正文内容,下面案例可供参考beignif(!rst_n)elseend如上例子定义一个寄存器 example_name,该寄存器的CK端为clk,复位端为rst_n。
2023-12-15 13:52:37
740
原创 ECO for SOC
按照芯片研发flow,一旦需要做ECO,说明项目周期基本进行到了末尾阶段。通常情况下,一旦项目进行到了后仿阶段,再发现设计上的bug之后,首先需要进行评估,看是否能进行ECO,如果可以进行ECO,优先选择ECO方案,因为一旦重新走中后端流程,意味着项目周期要delay,除非后期发现的bug无法通过ECO解决。毕竟ECO也只能进行简单的改动,一旦需要进行复杂逻辑的改动,很可能无法进行ECO。本文我们介绍一下简单的ECO,比如修改寄存器默认值的改动,这是一个简单的ECO改动,也是经常会遇到的问题。
2023-12-15 10:20:53
760
原创 芯片中顶层金属(top metal)的选择及厚度
1.电阻率:铝的电阻率比铜大,但是由于铝比铜轻,所以铝线的比电阻(电阻率乘以线长)比铜低。1.导电性能:金属互联的厚度对电阻的影响非常明显,厚度越小,电阻就越大。另一方面,厚度越大,互联线的承载能力就越强。综上所述,芯片中选择铝组成顶层金属互联以及选择较厚的厚度,是考虑到多个方面的因素。2.机械性能:芯片加工过程中,会涉及到许多高温高压的操作,同时还需要进行晶圆切割等步骤,这就需要顶层金属互联具有足够的机械强度。2.价格:铝的价格比铜便宜,而顶层金属互联的材料需要大量使用,因此选择铝线可以降低生产成本。
2023-12-14 17:57:20
7698
1
原创 利用工具自动生成 IPs
当我们项目中需要使用一些经典的IP时,比如timer、wdt、uart、i2c、apb、ahb、arbitary、axi bus等等IPs时,可以利用工具自动生成,大大节省项目开发时间,而且工具自动生成的代码几乎没有什么bug,功能也很丰富。缺点是,相对人工写的RTL,这些自动生成的代码面积相关大一些,不同的项目可以根据项目需求进行取舍。提示:以下是本篇文章正文内容,下面案例可供参考例如:以上就是今天要讲的内容,本文详细介绍了生成DW相关IPs的使用。
2023-12-14 17:44:26
2969
2
原创 关于两个时钟进行无毛刺切换的一种实现方法
在时钟设计方案中,通常要求硬件支持多个时钟源之间进行切换,可分为有毛刺切换和无毛刺切换,有毛刺切换对硬件设计要求不高,但是需要软件配合,即软件需要按照指定的flow来保证最终实现的时钟电路不能出现毛刺,常用的方法比如关停时钟,配置切换信号,然后再打开时钟。这种方式在有些系统中要求切换过程中不能关停时钟时,就不太使用。所谓无毛刺切换是硬件上支持软件可以任意时刻进行时钟源之间的切换。output wire sel_clk_st, //当前时钟源指示信号。
2023-12-13 10:48:19
875
原创 关于时钟动态切换分频控制字设计的一种通用写法
else if(clk_div_cnt == (clk_div_num_smp - 1'b1)) //在即将归0的前一拍更新新的分频控制字。input wire[NUM_WD-1:0] clk_div_num, //时钟分频控制字,这里举例2bit,最多进行3分频。input wire clk_div_en, //时钟分频模块使能,主要用于低功耗设计。
2023-12-13 10:26:56
1105
原创 2.5分频电路及其扩展
该电路实现的技术难点是:如果用数字方式实现的话,每次综合都需要对模块中的异或逻辑进行timing修正,我们可以看到clk_src_tmp的窄脉冲其实是靠clk_div3_div2进行delay得到的,在中后端由于有max pulse以及min pulse的要求,所以这个窄脉冲的宽度不宜太大,也不宜太小,因此这种电路最好用模拟电路搭,将其做成hardmarco,这样方便后续项目继承。同时,该电路也可以扩展到其他的点5分频,只需要将前级的三分频修改为所需的整数分频即可。电路结构相对简单,易实现,可继承性强。
2023-09-12 21:14:10
2030
原创 USB2.0 基础知识点整理一
USB作为通用串行总线,目前支持低速、高速和超高速三种传输速率,其中LS为12M,HS为480M,SS可达5G,本篇文章主要针对USB物理层以及协议层相关USB知识点进行整理,所涉及内容包括具体的controller和phy设计以及EDA验证内容。以上就是今天要讲的内容,本文主要介绍了USB的基本传输常用的知识点,并结合实际仿真case,给出了host与device通讯的基本流程。
2023-08-27 11:42:19
1280
1
原创 Mentor USB Controller EDA仿真系列之Bulk Out传输
本文主要介绍Mentor USB Controller传输Bulk Out包的整个流程,包括前期phy上电、控制器上电以及内部相关状态机运作情况,以及host和device两种情况下的软件配置。并重点介绍了该包传输的整体flow。文章最后对仿真过程中遇到的问题做了介绍并给出了解决该问题的一种方法。
2023-08-25 14:11:43
389
2
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅