- 博客(89)
- 收藏
- 关注

原创 UVM实战(张强)--- UART实例代码详细注解
(1)DUT:待测平台,这里为uart串口功能(2)sequence:创建一个my_straction的实例m_trans,将其随机化,最终将其送给sequencer(3)sequencer:uvm_sequencer就如同一个管道,从这个管道中产生连续的激励事务,并最终通过TLM端口送至driver一侧(4)driver:该类会从uvm_sequencer中获取事务(transaction),经过转化进而在接口中对DUT进行时序激励(5)monitor:负责把transaction级别的数据转变为
2023-02-02 14:15:56
14780
1
原创 USB中CRC的计算
USB有两种生成多项式,即除数多项式:一种是针对令牌包(tokens)的x5+x2+1,另一种是针对数据包的x16+x15+x2+1,由于余数要永远比除数小一阶的缘故,所以令牌(tokens)CRC是5bit组合,数据CRC是16bit组合。(1)选择生成多项式:USB协议中CRC16的生成多项式为 (G(x) = x^{16} + x^{15} + x^2 + 1),对应的二进制为11000000000000101。(2)数据预处理:将待校验的数据左移5位(即在数据末尾添加5个零)。
2025-03-04 10:23:57
395
原创 综合与时序分析的设计约束(5)—— 约束管理
在设计开发过程中,芯片架构师确定划分、优化以及组装系统。自顶向下的层次化设计方法自底向上的设计方法自顶向下的自顶向上相结合的设计方法此外,时序收敛取决于模块或者芯片模式的数量,设计人员可以通过合并模式减少迭代,从而有效地有效地管理约束。
2025-02-14 10:38:57
4457
原创 综合与时序分析的设计约束(4)—— 异常
默认情况下,每条路径都被定时为单周期,即在时钟的任一边沿启动的数据都应该由下一个触发器在目的触发器的时钟的下一个上升沿捕获。下图给出了这种关系。然而,有时设计人员可能需要在数据被捕获之前提供一些额外的周期,下图提供了一种额外周期的方案,获得额外周期的路径称为多周期路径。组合电路路径可以使用set_input_delay和set_max_delay进行约束。如果路径从输入端口贯穿到输出端口,则最好使用set_input_delay和set_output_delay的组合来约束该路径。
2025-02-13 18:49:21
2792
原创 综合与时序分析的设计约束(3)—— 端口
当外部负载用标准的负载表示时,工具把扇出值转换成了等效电容负载。表示外部负载的一个更常用的方法是直接指定外部电容值而不是扇出。工具使用命令set_drive和set_driving_cell计算输入端口的过渡时间。指定驱动单元库为tech_lib,指定模块的驱动单元为driveing_cell,防止驱动你叫设计规则转移到所有输入。注意:它所驱动的值实际上是电阻值–它是驱动能力的倒数,电阻值越高,驱动能力越低(过渡时间越长),反之亦然。许多线路负载模型根据扇出引脚的数量估计有效的线路电容。
2025-02-13 18:43:20
605
原创 综合与时序分析的设计约束(2)—— 时钟
这些约束在预布局和后布局之间会改变他们的数值和形态。某些用于与布局阶段的约束在后布局阶段由一个约束替换掉,或者,有时候需要改变一些数值。
2025-02-07 17:57:11
2800
原创 综合与时序分析的设计约束(1)——静态时序分析简介
线下面的点代表所应用的约束比要求的更宽松,这意味着STA看起来可能是很干净的,但是它已经针对比实际要求更宽松的条件进行了处理,因此最终设备可能无法以所需的频率进行工作。STA工具需要的另一组输入与输入端各种信号的到达时间和其他特性以及各种输出的时间要求有关,这些输入通过时序约束来提供。一个明显的解决方案是约束的应用应该在始终位于线上或者线的上方,这将确保约束比真正的需要的更严格。时序在数字系统中占有至关重要的地位,时序约束对数字系统的设计起着显著的作用,定义时序约束是一个相当复杂的过程。
2025-01-23 15:56:17
819
原创 门控时钟的原理和verilog代码实现
随着如今芯片的规模和功耗越来越大,门控时钟被大量地用在芯片设计中,这是在RTL级的低功耗技术。门控时钟即用逻辑门电路控制模块时钟的停或开。当芯片上的某一模块的工能不需要工作时,如芯片上的USB模块或者SPI模块没有使用时,通常会将通往这些模块的时钟停下来。通过关断空闲电路的时钟,可以大量减少消耗在时钟树上的和不工作触发器上的功耗。
2024-12-24 18:43:38
1436
原创 PT中的report_timing的计算--实例
Total 0.0 ##假设参考时钟的有效沿在0.0,上升沿是有效沿。Total 0.0 ##假设参考时钟的有效沿在0.0,上升沿是有效沿。Total 0.0 ##假设参考时钟的有效沿在0.0,上升沿是有效沿。Total 0.0 ##假设参考时钟的有效沿在0.0,上升沿是有效沿。(3)因为要求数据在下一个边沿采样有效,所以建立时间使用时钟的下一个边沿,因为要求数据不能干扰当前的边沿采样,所以保持使用的是时钟的当前边沿。
2024-12-20 17:08:00
1309
原创 SOC中的典型存储
在 SoC 中,存储器是决定性能的另一个重要因素。不同的 SoC 设计中,根据实际需要采用不同类型和大小的存储器,但其基本存储体系大体一致,如图 4-9 所示。典型的 SoC 存储器体系包括处理器内部的寄存器和 Cache(SRAM)、片内 ROM、片外主存和非易失存储器 Flash。其中,寄存器通常由十几到几十个构成,用于缓存程序运行时的频繁使用的数据(如局部变量、函数参数等)。Cache 是提升处理器性能的关键部件,利用程序局部性原理,以块为单位,通过FIFO或LRU替换算法,对指令或数据进行缓存,降低
2024-12-20 10:13:40
843
原创 验证的分类及相关工具
它是一个稳定而简单易用的工具,为几百万门的片上系统设计提供了较高的仿真能力。静态验证是指采用分析电路的某些特性是否满足设计要求的方法,来验证电路的正确与否,形式验证是近几年来兴起的一种验证方法,它需要有一个正确的模型作为参考,把待验证的电路域正确的模型进行比较,并给出不同版本的电路是否在功能上等效的结局,它利用理论证明的方法来验证设计结果的正确性。由于静态验证是工具自动完成的,不需要人工过多的敢于,所以通常对设计的电路首先进行静态验证,以纠正一些比较明显的错误,然后再动态仿真,确定其具体的行为是否正确。
2024-12-19 17:13:04
962
原创 时钟约束在STA中的作用
STA工具从相应的设计描述中获取电路描述,HDL是最常用的形式。它还接受库输入–主要用来了解依赖技术的特性,如通过特定门的延迟值。STA工具需要的另一组输入与输入端各种信号的到达时间和其他特性以及各种输出的时间要求有关,这些输入通过时序约束来提供。时序约束在STA期间扮演了多个角色。
2024-12-03 18:44:51
571
原创 静态时序分析--时序约束
同时创建时钟还需要设置时钟相关的其他基本信息,比如时钟源,时钟延时,时钟不确定性等,而升成时钟的优点则是自动继承主时钟的设置,无需额外设置,如下图生成时钟继承主时钟延迟的情况。而伪路径是针对时序路径并移除对应时序路径上的默认时序约束,而所有时序弧是一直有效的,如果与单元统一时序相关的书序路径有多余,而伪路径设置只作用于其中部分时序路径,那么时序工具默认还是会机选所有时序路径延时,只是对存在时序约束的时序路径进行时序性能评估,如下图。如下图,由于时钟1并不直接在设计中起作用,时钟1即为虚拟时钟。
2024-11-20 22:09:33
1203
原创 UVM的callback机制
endtaskendclassA类一定要从uvm_callback派生,另外还需要定义一个pre_tran任务,此任务的类型一定要是virtual的,因为从A派生的类需要重载这个任务。(1)定义一个A类(2)声明一个A_pool类(3)在要预留callback函数/任务接口的类中调用uvm_register_cb宏(4)在要调用callback函数/任务接口的函数/任务重,使用uvm_do_callbacks宏(5)在A类派生一个类,在这个类中定义好pre_tran。
2024-11-07 17:33:49
2732
原创 systemverilog中clocking的用法
概念:接口中声明clocking(时序块)和采样的时钟信号,用来做信号的同步和采样。clcoking块基于时钟周期对信号进行驱动或采样的方式,使得待测平台不再苦恼于如何准确及时地对信号驱动或采样,消除了信号的竞争问题。
2024-11-04 16:42:06
3060
3
原创 断言实战 ---断言详解APB时序
在特定条件或事件序列的故障上生成警告或错误收集功能覆盖率的数据断言一般出现在那些位置:interface, module,clocking,program。
2024-11-01 16:18:47
3724
原创 UVM中sprint和print的区别
分析:sprint返回字符串类型层次结构等。print不返回数据,但是将数据和层侧结构打印到终端。以上两种写法是成等价关系的,在log中打印的信息是相同的。但是是不可以混用,比如下面两种写法就是错误的。sprint和print的正确写法。
2024-09-30 10:40:50
426
原创 spyglass中的sdc转变为sgdc
这里的sdc路径是对于prj的路径而言的。执行的结果会在 prj_name/current_design_name/cdc/cdc_current_goal(就是你在执行的目标)/sdc2sgdc目录下。举个例子,在spyglass下创建了uart.sgdc文件,里面写下内容,同时将uart.sdc放在spyglass文件夹里,在spyglass文件夹下创建一个xxx.sgdc的文件,里面写上内容。运行CDC的goal,那么就会实现sdc到sgdc的转换。同时在spyglass中勾选上。
2024-04-03 14:22:15
2047
原创 UART中的奇偶校验和粘性奇偶校验(stick parity)
如果数据帧中1的个数为奇数,校验位被设置为0,使得整个数据帧中1的个数仍然为奇数。在粘性奇偶校验模式下,每个数据帧的奇偶校验位都会自动设置为与前一个数据帧的奇偶校验位相同的值。如果数据传输中的某个数据帧的奇偶校验位与前一个数据帧的奇偶校验位不一致,那么就说明数据传输中出现了错误。因此,数据帧2的奇偶校验位也被设置为0。总的来说,粘性奇偶校验位可以确保连续传输的数据帧具有相同的奇偶校验位,从而提高数据传输的可靠性。在粘性奇偶校验模式下,每个数据帧的奇偶校验位自动设置为与前一个数据帧的奇偶校验位相同的值。
2023-10-11 11:03:16
2807
7
原创 IC验证工程师工作一周年的体会
(1)这一年自己大部分的时间都和UVM打交道,从最开始的绿皮书到张强的UVM实战这本书,从开始非常疑惑为什么需要寄存器模型,到后来发现寄存器模型简直是神来之笔,当然我还没有体会到前门访问和后门访问的精髓,但是对于寄存器模型有了一定的理解。(3)对于scoreboard的队列的思想要深刻体会,还是数组的使用,我暂时常用的是数组和队列,初看SV重的数组和队列,完全没当回事,后来发现读写过程中数组可以用来产生随机数,而队列可以用来存储数据。服从领导的想法是职场必修课。一.要养成良好的工作习惯。
2023-06-09 15:31:30
1277
2
原创 makefile出现报错commands commence before first target. stop
报错:commands commence before first target. stop。一般makefile出现此错误,一定要检查是否有。,特别是末尾的的位置。
2023-05-18 08:59:53
757
原创 UVM实战--带有寄存器的加法器
这里将DUT换成加法器,可以理解为之前UVM加法器加上寄存器,这里总线的功能不做修改,目的看代码的移植那些部分需要修改。
2023-03-02 17:17:37
1339
原创 UVM实战(张强)-- UVM中的寄存器模型
如对于一个16位的寄存器,其中可能只使用了8位,那么这里要填写的是16,而不是8。一个uvm_reg_block中一定要定义一个uvm_reg_map,系统已经有一个声明好的default_map,只需要在build中将其实例化,这个实例化的过程并不是直接调用uvm_reg_map的new函数,而是通过调用uvm_reg_block的create_map来实现,create_map有众多的参数,(1)uvm_reg,uvm_reg_field,uvm_reg_block,uvm_reg_map四者的关系。
2023-02-22 14:24:39
2760
原创 UVM实战--加法器
这里以UVM实战(张强)第二章为基础修改原有的DUT,将DUT修改为加法器,从而修改代码以使得更加深入的了解各个组件的类型和使用。
2023-02-20 19:11:59
1559
3
原创 UVM入门和进阶实验0
如何搭建验证框架验证组件之间的连接和通信如何编写测试用例,继而完成复用和覆盖率的收敛懂得如何编译UVM代码。理解SV和UVM之间的关系。了解UVM验证顶层盒子与SV验证顶层盒子之间的联系。掌握启动UVM验证的必要步骤。
2022-12-27 16:06:30
1044
原创 芯片漫游指南(5)-- UVM寄存器
对于硬件有了解的读者,都知道寄存器是模块之间互相交谈的窗口一方面可以通过读出寄存器的状态,获取硬件当前的状况,另外一方面也可以通过配置寄存器,使得寄存器工作在一定的模式下。在验证的过程中,寄存器的验证也排在了验证清单的前列,因为只有首先保证寄存器的功能正常,才会使得硬件与硬件之间的交谈是“语义一致”的。如果寄存器配置结果与寄存器配置内容不同,那么硬件无法工作在想要的模式下,同时寄存器也可能无法正确反映硬件的状态。
2022-12-27 11:08:33
1784
1
原创 芯片漫游指南(4) -- UVM序列
在UVM世界,利用其核心特性,在创建了组件和顶层环境,并且完成组件之间的TLM端口连接之后,接下来就可以使得整个环境开始运转了。在经过一番时间,掌握了组件之间的TLM通信方式,开辟了建筑之间的道路,桥梁和河道以后,就可以进入紧张繁忙的物流期了。运转的必要条件是组件之间需要有事务(transaction)传送,这就同管道连接好需要水流一样。如果城市没有交通,那么显然不会有多热闹。sequencesequencerdriver如果按照交通道路的车流来打比方,
2022-12-22 14:41:51
1413
1
原创 芯片漫游指南(3)-- UVM通信
在芯片开发流程中,有两个地方对项目的助推起到了关键作用:系统原型芯片验证系统原型一般是通过硬件功能描述文档来模拟硬件行为,而行为要求不同于RTL模型。系统原型可以提供一个准确的硬件比特级别、按照地址断访问、不依赖与时钟周期的模型,该模型通常基于System C语言,而系统原型中各个模块通过TLM可以实现宽松时间范围内的数据包传输。芯片验证是在RTL模型初步建立后,通过验证语言和方法学例如SV/UVM来构建验证平台。
2022-12-12 17:18:39
981
2
原创 芯片漫游指南(2)-- UVM结构
这一章我们将介绍UVM的各个组件,读者可以对照之前SV中的各个组件,来看UVM和SV的组件它们相同的部分和不同的部分。对比的重点可以从各个组件的功能实现以及组件的创建连接入手。为什么UVM需要有sequencer这样的角色存在呢?在SV中,产生机理的组件被称为generator,那么为什么需要sequence和sequencer来共同扮演generator的角色,产生激励并且将激励发送给driver(即stimulator)呢?
2022-12-09 18:54:50
2138
原创 upf低功耗的一个简单的例子
upf低功耗,power domain, supply port,power switch ,port state,isloation
2022-11-02 14:28:32
2428
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人