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

原创 Verilog基础:层次化标识符的使用
一般情况下我们只会接触到简单标识符,但是有些时候(如验证设计时),层次化标识符也会被使用,本文目的是为需要使用层次化标识符的设计人员提供一定参考。
2024-10-22 00:13:36
1458
6

原创 静态时序分析:典型与非典型时序路径的约束详解(一)
时序路径是静态时序分析中的一个重要概念,了解时序路径能帮助设计者更好地编写SDC脚本,本文旨在详细介绍时序路径相关内容。首先给出时序路径的定义:时序路径是由时序弧构成的数据路径,静态时序分析会分别对每条有约束的时序路径进行时序检查(例如建立时间检查、保持时间检查、移除时间检查、恢复时间检查等)。时序路径可以是典型的,也可以是非典型的;时序路径可以是有约束的,也可以是未约束的。
2024-03-07 19:26:01
3033
1

原创 SDC命令详解:SDC命令大全(持续更新)
Tcl(Tool Command Language)最初是一种用于编写脚本的编程语言,广泛用于电子设计自动化(EDA)工具中,如Cadence的Virtuoso、Synopsys的Design Compiler等。SDC(Synopsys Design Constraints)是一种定义电路设计约束的格式,它用于确保电子设计在时序方面满足规定的要求,由Synopsys基于Tcl命令拓展而来。下面分类给出一些常用的SDC约束命令(以目前的最新版本2.2为例)。
2023-11-03 13:35:46
1357
1

原创 Verilog基础:表达式位宽的确定(位宽拓展)
我们可以首先找到被加入上下文环境的操作数,a和b作为+操作符的操作数,是上下文决定的,(a+b)作为整体位与移位操作符的左边也是上下文决定的,(a+b)>>1作为整体是=操作符的右操作数,也是上下文决定的,因此answer(因为=),a,b(因为三层上下文嵌套)都被加入上下文环境中,这三个变量的位宽都是一样的,所以他们三个在运算前不会有拓展。因此首先执行a+b,根据规则,结果为16位,进位被丢失,然后再右移一位,最高位补0,最后赋值给同为16位的answer。很多时候方法很简单。改成a+b+17'b0;
2023-01-27 22:03:25
13093
3
原创 SDC命令详解:使用get_lib_cells命令进行查询
get_lib_cells命令用于创建一个库单元对象集合,关于设计对象和集合的更详细介绍,可以参考下面的博客。需要注意的是,在有些工具中还存在get_lib_cell命令,它们没有任何差别。
2025-05-20 16:54:36
784
1
原创 Spyglass:跨时钟域同步(循环复用器)
循环复用器方案主要用于数据信号跨时钟域同步,该方案将一个控制信号同步至目标时钟域并用其作为驱动目标触发器的多路复用器的选择信号,如图1所示。
2025-05-20 11:16:49
299
1
原创 SDC命令详解:使用get_libs命令进行查询
get_libs命令用于创建一个库对象集合,关于设计对象和集合的更详细介绍,可以参考下面的博客。需要注意的是,在有些工具中还存在get_lib命令,它们没有任何差别。
2025-05-19 17:26:53
792
1
原创 Spyglass:projectwdir选项的使用
spyglass中的projectwdir选项用于设置项目目录保存的位置,与大多数选项不同的是它只能在项目文件而不能在sg_shell或GUI界面中进行设置。
2025-05-19 01:07:52
398
1
原创 Spyglass:参数(parameter)及其设置方式
Spyglass中的参数(parameter)用于控制目标(Goal)运行时的规则检查,通常一个参数会影响多个规则(Rule),图1展示了allow_combo_logic参数的相关信息。
2025-05-18 16:47:12
1020
1
原创 Spyglass:跨时钟域同步(同步使能)
同步使能方案主要用于数据信号跨时钟域同步,该方案将一个控制信号同步至目标时钟域并用其作为数据信号的捕获触发器的使能信号,如图1所示。
2025-05-16 21:29:12
637
1
原创 SDC命令详解:使用get_pins命令进行查询
get_pins命令用于创建一个引脚对象集合,关于设计对象和集合的更详细介绍,可以参考下面的博客。需要注意的是,在有些工具中还存在get_pin命令,它们没有任何差别。
2025-05-15 21:08:17
1028
1
原创 Spyglass:跨时钟域同步(同步单元)
同步单元方案可以用于控制/数据信号跨时钟域同步,该方案使用约束或参数将目标时钟域中单元指定为同步单元,如图1所示。
2025-05-14 23:40:23
350
1
原创 Spyglass:跨时钟域同步(常规多级触发器)
常规多级触发器方案主要用于控制信号跨时钟域同步,该方案将目标时钟域中的触发器按照链状方式排列,如图1所示。
2025-05-14 00:51:27
808
1
原创 SDC命令详解:使用all_registers命令进行查询
all_registers命令用于创建一个时序单元及其引脚对象集合,包含当前实例(注意该命令与其他all_*命令的区别)中的所有时序单元及其引脚
2025-05-13 13:19:48
936
1
原创 Spyglass:跨时钟域同步方案大全
Spyglass可以用于检测设计中的跨时钟域相关问题,确保电路中添加了适当的同步机制,以避免此类问题的发生
2025-05-12 14:34:54
1315
1
原创 Spyglass:在batch/shell模式下运行目标的顶层是什么?
Spyglass:在batch/shell模式下运行目标的顶层是什么?
2025-05-11 20:01:05
852
1
原创 Spyglass:默认配置文件
当启动Spyglass时,它会自动读取五个设置文件,这些文件具有相同的文件名.spyglass.setup,但位于不同的目录中,它们包含了一些变量设置,比如默认启动模式(DEFAULT_STARTUP_MODE=)。
2025-05-11 14:54:47
369
1
原创 SDC命令详解:使用all_outputs命令进行查询
all_outputs命令用于创建一个输出端口对象集合,关于设计对象和集合的更详细介绍,可以参考下面的博客。
2025-05-10 19:37:19
781
1
原创 数字IC前端学习笔记:锁存器的综合
锁存器是一种时序逻辑,与寄存器相比面积更小,但它的存在会使静态时序分析(STA)变得更加复杂,因此懂得什么样的设计会综合出锁存器是很重要的,本文就将对此进行详细介绍。
2025-05-09 22:33:29
899
1
原创 SDC命令详解:使用all_inputs命令进行查询
all_clocks命令用于创建一个输入端口对象集合,关于设计对象和集合的更详细介绍,可以参考下面的博客。
2025-05-09 16:19:58
769
1
原创 SDC命令详解:使用all_clocks命令进行查询
all_clocks命令用于创建一个时钟对象集合,关于设计对象和集合的更详细介绍,可以参考下面的博客。
2025-05-08 01:45:44
412
1
原创 SDC命令详解:使用get_ports命令进行查询
get_ports命令用于创建一个端口对象集合,关于设计对象和集合的更详细介绍,可以参考下面的博客。需要注意的是,在有些工具中还存在get_port命令,它们没有任何差别。
2025-05-07 20:01:12
714
1
原创 Spyglass:官方Hands-on Training(四)
实验四的目标是使用GUI模式对实验三中lint_rtl目标的违规(violations)进行调试,找到其在RTL文件中的根本原因并尝试进行修复。
2025-05-07 11:32:33
1299
1
原创 Spyglass:官方Hands-on Training(三)
实验三的目标是使用实验二中保存的项目文件wb_subsystem.prj在批处理模式下设置、运行和查看结果。
2025-05-06 17:51:02
1277
1
原创 Spyglass:官方Hands-on Training(二)
实验二的目标是进行完整的设计读取,与实验一不同的是,将在命令行使用-batch选项以批处理模式运行Spyglass(相同的操作也可以通过图形用户界面(GUI)完成)。
2025-05-06 00:57:47
1131
1
原创 Spyglass:官方Hands-on Training(一)
本教程提供了在多个设计阶段中运行Spyglass的操作指导,旨在通过实操获得对Spyglass设置及其结果调试/分析的深入理解,涵盖多个动手练习,每个练习之间是相互依赖的,需要按顺序完成。
2025-04-30 17:48:11
1339
1
原创 SDC命令详解:使用get_nets命令进行查询
get_nets命令用于创建一个线网对象集合,关于设计对象和集合的更详细介绍,可以参考下面的博客。需要注意的是,在有些工具中还存在get_net命令,它们没有任何差别。
2025-04-29 19:52:43
1011
1
原创 SDC命令详解:使用get_clocks命令进行查询
get_clocks命令用于创建一个时钟对象集合,关于设计对象和集合的更详细介绍,可以参考下面的博客。需要注意的是,在有些工具中还存在get_clock命令(其实它是get_clocks命令的别名),它们没有任何差别。
2025-04-28 21:02:04
856
1
原创 Verilog基础:生成块结构(Generate)
生成块结构(Generate)用于有条件地(称为条件生成块)或重复地(称为循环生成块)将生成块实例化到模块中,由Verilog Standard 2001借鉴VHDL引入。本文将对生成块的使用进行详细介绍。
2025-04-28 13:24:09
1297
1
原创 C语言:作用域、链接与存储期
作用域(Scope)描述程序中标识符的生效区域(可访问区域),一个C语言变量的作用域可以是块作用域、函数作用域、函数原型作用域、文件作用域。
2025-04-27 15:01:02
633
1
原创 SDC命令详解:使用reset_design命令重置设计
reset_design命令用于重置当前设计。本文针对Design Compiler,但该命令同样存在于PrimeTime、IC Compiler等工具中,它们大致相同,略有差别。重置当前设计会产生广泛的影响,包括移除当前设计设置的所有SDC约束(效果等同于remove_sdc命令)、移除绝大多数设置在对象上的属性、移除用户创建的对象(如时钟和时序组)。
2025-04-26 15:57:15
889
1
原创 SDC命令详解:使用get_cells命令进行查询
get_cells命令用于创建一个单元对象集合,关于设计对象和集合的更详细介绍,可以参考下面的博客。Synopsys:设计对象本文针对Design Compiler,但该命令同样存在于PrimeTime、IC Compiler等工具中,它们大致相同,略有差别。
2025-04-25 15:46:46
892
1
原创 SDC命令详解:使用remove_sdc命令移除约束
remove_sdc命令用于移除当前设计中设置的所有SDC约束,需要注意的是,UPF约束不会被移除,要想移除UPF约束,需要使用remove_upf命令。
2025-04-24 15:54:02
936
1
原创 Synopsys:printvar命令和puts/echo命令的区别
Synopsys的EDA工具中存在一类变量,它们能控制工具的行为,被称为应用变量(application variable),与之对应的是用户自定义变量(user-defined variable)。以Design Compiler为例,使用report_app_var命令可以显示所有应用变量的值,其中包括target_library、search_path等常用变量。使用标准Tcl命令puts或拓展Tcl命令echo即可显示变量的值,但更建议使用拓展Tcl命令printvar命令显示变量的值
2025-04-21 23:52:54
526
1
原创 Design Compiler:转换时间过渡调整
在静态时序分析:传播延迟与转换时间一文中,已经介绍了转换时间阈值和转换时间减免系数的概念,如果一个设计中两个单元的转换时间阈值和转换时间减免系数不一致会发生什么?本文将以Design Compiler对此进行说明。
2025-04-16 22:30:53
638
1
原创 低功耗设计:Level Shift的种类(以SAED EDK 32/28nm工艺库为例)
在多电压设计中,当信号从一个电压域跨越到另一个电压域时,需要使用电压转换器(Level Shift)。它的工作方式类似于缓冲器,但其输入和输出使用不同的电压,作用是将一个逻辑信号从一个电压转换为另一个电压,并在输入到输出之间实现尽可能小的延迟。本文将以Synopsys开源工艺库SAED(Synopsys Armenia Educational Department) EDK为例介绍电压转换器的种类。
2025-04-14 22:39:50
793
1
原创 SDC命令详解:使用相对路径访问设计对象(current_instance命令)
SDC命令详解在使用get_cells等命令访问设计对象时,需要指定设计对象的名字,这个名字是一个相对路径,本文就将对此进行讨论。
2025-04-12 13:23:32
622
1
原创 SDC命令详解:使用集合(Collection)而不是字符串(String)/列表(List)作为命令参数
在使用SDC命令时,有时直接使用字符串或列表(Tcl中的列表本质上也是用空格分隔的字符串)而不是集合作为命令参数也可以得到正确的结果。例如对于图1所示的电路,下面这些创建时钟的命令是等价的,它们都是以端口clk为源对象创建周期为5的时钟。
2025-04-11 18:11:33
724
1
Spyglass CDC Hands-on Training
2025-05-21
Design Compiler Topographical/Graphical Workshop Lab Guide
2024-11-13
Synopsys Design Compiler Topographical/Graphical Workshop Lab
2024-11-13
AMBA AHB规格文档(从AMBA 2到AMBA 5)
2024-10-03
AMBA APB规格文档(从AMBA 2到AMBA 5)
2024-10-03
Conformal 2023系列工具User Guide
2024-06-22
Verilog实现的RISC存储程序CPU
2023-03-12
Cortexm3是小端序,但为什么32位的指令看起来并不是如此?
2024-08-26
对于C语言,在使用大括号初始化数组时,括号内可以是变量吗?
2024-02-26
TA创建的收藏夹 TA关注的收藏夹
TA关注的人