在输入设计源文件和约束文件后,下一步进入 HDL2Bit 的设计实现流程。 HDL2Bit
流程包括设计读入(Read Design)、 RTL 级优化(Optimize RTL)、门级优化(Optimize
Gate)、布局优化(Optimize Placement)、布线优化(Optimize Routing) 和生成位流
(Generate Bitstream) 六个步骤。
在多数情况下,用户只要双击 HDL2Bit,软件自动运行全部流程。 用户也可以用
Process 下拉菜单中的 Run, Rerun, Stop 来控制。 Process 菜单中的 Run 和 Stop 在导航
栏中有相应的按钮(
和
),用户可以直接点击操作。 Process 菜单中还有 Properties
栏目, Properties 提供 HDL2Bit 流程中主要步骤的详细参数控制选项, 用户可对整个运
行流程进行微调控制, Global Option 的参数设置如下:
表 5-1 Global Option
Property | Comments | Default |
syn_ip_flow | 生成可综合的 IP 模块 | OFF |
message | 输出信息的冗余级别 | STANDARD |
thread | 运行 HDL2Bit 时的线程数 | AUTO |
读入文件
该步分析用户源文件的语法语义的正确性, 并产生原始行为级电路结构。
1. 在 FPGA Flow 面板中展开 HDL2Bit
2. 双击 Read Design, 或右键单击 Read Design,选择 run
3. 参数配置
在菜单栏中, 展开 Process→Properties
, 弹出 Properties Configuration 窗口, 选择
Read Design,用户可根据需要自定义想要的功能。
表 5-1 Read Design Properties
Property | Comments | Default |
infer_add | 自动识别行为级加法描述 | ON |
infer_mult | 自动识别行为级乘法描述 | ON |
infer_ram | 自动识别行为级 RAM 描述 | ON |
infer_rom | 自动识别行为级 ROM 描述 | ON |
infer_fsm | 自动识别行为级有限状态机描述 | OFF |
infer_mux | 自动识别行为级多路选择器描述 | OFF |
infer_reg | 自动识别行为级复杂寄存器描述 | O |
RTL 级优化
在读入设计文件后, TD 将对设计进行 RTL 级优化。本阶段将进行多路选择器优化、
数据通路优化、特殊功能模块自动识别等。 RTL 级优化将产生包含基本门(AND、 OR、
FF/Latch)和特殊功能模块的电路。
1. 在 FPGA Flow 面板中展开 HDL2Bit
2. 双击 Optimize RTL, 或右键单击 Optimize RTL, 选择 Run,此时将会产生面积
报告文件 rtl.area,该文件的内容将与 keep_hierachy 参数的设定有关。
3. 参数配置
在菜单栏中, 展开 Process→Properties
, 弹出 Properties Configuration 窗口, 选
择 Optimize RTL 进行设置。
*keep_hierarchy选项说明:选择 flatten 时, td 将把用户设计打平处理;当选择 manual 时,
td 将对用户通过 synthesis directive 选择的模块保留层次;当选择 auto 时, td 会自动选
择较大的模块保留层次,其余部分打平处理。
Synthesis Keep
使用 Synthesis keep 命令可以保证信号不会被后续流程优化掉,从而方便用户后期调
试。具体做法如下:
1. 在 verilog 文件中,为想要保留的信号,添加相应的注释,注释的写法为://synthesis keep = 1; /*synthesis keep=1*/;
//synthesis keep = true; /*synthesis keep=true*/
//synthesis keep; /*synthesis keep*/
如:
2. 保存文件并编译;
3. 在使用 debug 工具时,可查看到该内部信号。
4. 在 vhdl 中的写法如下:
其中, clkc_wire 为需要 keep 的 net / bus。
如果想要保留 design 中多个相同的模块不被优化掉, TD 提供了 keep instance 的方
法。
如下图中的模块 ef2_ram,在 top module 中被完全等价地例化了多次,如果此时不
使用 synthesis keep 的功能,则所有 instance 将会被合并成一个 BRAM。要想保留所有的
instance 不被优化, 需要在该 instance 的每一个层级都添加注释 “//synthesis keep”。
Synthesis Directive
1. Synthesis keep_hierarchy
在 keep hierarchy auto/manual 的模式下,可以在 HDL 中添加 synthesis directive 命令
来指定特定模块的层次是否要保留。 Flatten 模式下, synthesis directive 无效。
具体做法如下:
1) 为想要保留的模块,在源文件中添加相应的注释,注释的写法为:
a) 保留整个 module
Verilog:
Verilog:
module SomeModule(
...
…
); /* synthesis keep_hierarchy=true */
....
endmodule
VHDL:
architecture rtl of SomeModule is
attribute keep_hierarchy : string;
attribute keep_hierarchy of rtl : architecture is "true";
....
end rtl;
b) 保留例化的模块
Verilog:
SomeModule u1( /* synthesis keep_hierarchy=true */
...
… …
);
VHDL:
attribute keep_hierarchy : string;
attribute keep_hierarchy of u1 : label is "true";
c) 不保留例化的模块
Verilog:
SomeModule u2( /* synthesis keep_hierarchy=false */
...
… …
);
VHDL:
attribute keep_hierarchy : string;
attribute keep_hierarchy of u2 : label is "false";
2) 保存文件并编译;
3) 在 RTL/Gate Summary 可以看到被保留下来模块的资源使用情况,在
Schematic View 的 RTL Schematic/Gate Schematic 可以看到被保留下来模块的
连线情况。
2. Synthesis max_fanout
目前 TD 软件中对于 fanout 的设置是全局性的, 如果想要指定某些网络的 fanout, 通过综合的时候自动复制 instance 来降低 fanout 并对时序优化提供给帮助, 可以在 HDL
中添加 synthesis directive 命令。
具体做法如下:
1. 在 verilog 文件中,为想要设置 fanout 的信号,添加相应的注释,注释的写法为:
//synthesis max_fanout = value; /*synthesis max_fanout = value*/;
*注:该命令中 value 要求为正整数且大于 1。
如:
reg [7:0] data; | //synthesis max_fanout=10 | |
wire | data_en; | //synthesis max_fanout=20 |
2. 保存文件并编译;
3. run flow 时可以在 log 中看到 synthesis directive 命令的生效情况。
4. 在 vhdl 中的写法如下:
其中, SYNTHESIZED_WIRE_79 为想要设置 fanout 的信号。
门级优化
门级优化包括普通逻辑的优化和映射、特殊逻辑的优化和映射等综合优化。门级优
化将产生包含逻辑单元和专用功能单元的电路。
1. 在 FPGA Flow 面板中展开 HDL2Bit
2. 双击 Optimize Gate,或右键单击 Optimize Gate, 选择 Run,此时将产生文件:
gate.area,该文件的内容将与 keep_hierachy 参数的设定有关。
3. 参数配置
在菜单栏中, 展开 Process→Properties,
弹出 Properties Configuration 窗口, 选择
Optimize Gate 进行设置。
表 5-3 Optimize Gate Properties
Property | Comments | Default |
map_sim_model | 生成映射后电路仿真模型 | OFF |
gate_sim_model | 生成门级电路仿真模型 | OFF |
pack_seq_in_io | 吸收寄存器逻辑进 IO 模块 | ON |
pack_effort | 逻辑包装优化级别 | MEDIUM |
opt_area | 组合逻辑优化级别 | MEDIUM |
opt_timing | 时序优化级别 | AUTO |
auto_partition | 运行时可将网表进行分区 | FINE |
report | 报告信息级别 | STANDARD |
布局优化
在得到正确的物理单元网表以后,需要对设计进行物理布局优化、 IO 单元布局、
物理单元布局和物理级逻辑优化等。布局优化将产生并处理只含有物理功能块(IOPAD、
SLICE、 RAM、 DSP 等)的电路。
1. 在 FPGA Flow 面板中展开 HDL2Bit
2. 双击 Optimize Placement,或右键单击 Optimize Placement, 选择 Run
3. 参数配置
在菜单栏中, 展开 Process→Properties
, 弹出 Properties Configuration 窗口, 选择
Optimize Placement 进行设置。
表 5-4 Optimize Placement Properties
Property | Comments | Default |
effort | 布线优化级别 | MEDIUM |
timing | 时延优化级别 | MEDIUM |
relaxation | 放松程度控制范围 [0.00, 2.00] | 1.0 |
布线优化
布局优化后,进行布线优化。布线优化将完成所有模块互联信号的物理连接。这一
步也是用户设计实现的最后一步。 这一步完成后,所有的物理信息都被确定。布线优化
后可查看设计的详细信息,也可获得准确的电路时序信息。
1. 在 FPGA Flow 面板中展开 HDL2Bit
2. 双击 Optimize Routing,或右键单击 Optimize Routing 并选择 Run, 此时将产
生文件: phy.area。 若用户已为工程添加 SDC 约束,在布线结束后, TD 会默认
为用户生成时序分析报告。 在 FPGA Flow 面板中展开 Design Summary, 选择
Timing Summary 可查看最终时序报告。若用户没有为工程添加 SDC 文件,查
看 Timing Summary 时, TD 会提示用户没有时序约束。
3. 参数配置
在菜单栏中, 展开 Process→Properties
, 弹出 Properties Configuration 窗口, 选择
Optimize Routing 进行设置。
表 5-5 Optimize Routing Properties
Property | Comments | Default |
effort | 步通率优化级别 | MEDIUM |
opt_timing | 时延优化级别 | MEDIUM |
fix_hold | 修复 hold violation | OFF |
sdf | 生成标准时序反标文件 | OFF |
生成位流文件
Generate Bitstream 是将 FPGA 芯片中可编程开关的配置信息用二进制 0、 1 的格式
表示成位流(bitstream)数据供编程下载用。 位流生成器为器件编程产生位流文件,下载
工具将位流文件载入到外部的 SPI Flash 存储芯片或直接载入 FPGA 内部的配置存储器
中。
1. 在 FPGA Flow 面板中展开 HDL2Bit
2. 双击 Generate Bitstream,或右键单击 Generate Bitstream, 选择 Run, 此时将
产生文件: Your_Project_Name.bit, 该文件为用二进制 0、 1 的格式表示的可编程
开关的配置信息
3. 参数配置
在菜单栏中, 展开 Process→Properties
, 弹出 Properties Configuration 窗口, 选择
Generate Bitstream 进行设置。
表 5-6 General Option
Property | Comments | Default |
version | 定义位流文件的编号 | 00 |
bin | 生成纯二进制位流文件,即不包含常规 bit 文 件的文件头 |
OFF |
time_info | 在位流文件中显示日期/时间信息 | ON |
gen_mask | 生成一个用于 verify FPGA 的遮罩文件 | OFF |
unused_io_status | 将所有未使用的引脚保留在指定的状态 | PULLUP |
Control Option 为一个 32 位的控制寄存器, 分为若干个控制选项,改变各项的取值,
可实现不同的控制效果。 针对不同的 device, control option 选项有所不同。
表 5-7 Control Option
Property | Comments | Default |
mclk_freq_div | spi flash 的时钟分频系数 | 2.5MHz |
cascade_mode | 级联时使用, done pin 做为 input | |
( 2’b11: flowthrougth mode | None | |
2’b10: bypass mode) | ||
active_done | done pin 处于 active 状态,由 cfg 内部决定 | 1 |
security | 为 1 时,禁读 sram | 0 |
persist | spi 的 pin 是否继续作为 cfg pin 在用户模式使用 | 0 |
close_osc | 关闭振荡器 | 0 |
Startup Option 是跟启动项相关的 32 位控制寄存器,其控制原理同 Control Option.
表 5-8 Startup Option
Property | Comments | Default |
done_sync | 是否同步 done pin 的值 | 0 |
usr_gsrn_en | 是否使能用户的 gsrn 信号 | 0 |
gsrn_sync_sel | 是否同步 gsrn | 0 |
done_phase | 决定在哪个 phase 放出 done | 3’b100 |
goe_phase | 决定在哪个 phase 放出 goe | 3’b101 |
gsr_phase | 决定在哪个 phase 放出 gsr | 3’b110 |
gwd_phase | 决定在哪个 phase 放出 gwd | 3’b110 |
Design Summary
RTL Summary
当 HDL2Bit Flow 运行完 Optimize RTL,可展开 Design Summary,双击查看 RTL
Summary。
当 keep_hierarchy 选择为 manual 时, td 仅对用户通过 synthesis directive 选择的
模块保留层次,该文件会层次化地给出分模块的资源使用;当 keep_hierarchy 为 auto 时,
td 会自动选择较大的模块保留层次,该文件会层次化地给出分模块的资源使用。
Hierachy RTL Summary:
当 keep_hierarchy 为 flatten 时,该文件包含了源文件中的所有输入输出端口以及各
逻辑门的使用情况。
Flatten RTL Summary:
Gate Summary
当 HDL2Bit Flow 运行完 Optimize Gate,可展开 Design Summary, 双击查看 Gate
Summary。
当 keep_hierarchy 选择为 manual 时, td 仅对用户通过 synthesis directive 选择
的模块保留层次,该文件会层次化地给出分模块的资源使用;当 keep_hierarchy 为 auto
时, td 会自动选择较大的模块保留层次,该文件会层次化地给出分模块的资源使用。
Hierarchy Gate Summary:
当 keep_hierarchy 为 flatten 时,该文件包含了源文件中的所有输入输出端口以及
各逻辑门的使用情况。
Flatten Gate Summary:
Physical Summary
当 HDL2Bit Flow 运行完 Optimize Routing,可展开 Design Summary,双击查看
Physical Summary
该文件列出了 IO 端口和基本逻辑单元的使用情况和 IO 管脚分布情况。
Timing Summary
当 HDL2Bit Flow 运行完成后,双击 Design Summary -> Timing Summary 即可打开
时序分析报告(Timing Report),主界面如下:
Timing Report 的界面主要包括以下部分:
1. Report Navigation
此处为时序报告的目录树,将层次化的依次列出:时序约束类型,时序检查类型,
EndPoint 名称, timing path 名称等信息。
2. Timing Summary
此处将列出时序报告对应的芯片,封装,以及简略的时序统计信息。
3. Timing Group Statistics
Clock constraints:列出了 SDC 中定义的各个 clock 能到达的最小周期,最大频率,
时钟树的 skew,扇出数以及 TNS 数据;
Minimum input arrival time before clock: FPGA 芯片内部 input->reg path 的最大延时。
Maximum output required time after clock: FPGA 芯片内部 reg->output path 的最大延
时。
Maximum combinational path delay: input->output 直通的组合逻辑路径最大延时。
在 Timing constraints 中展开 clock 下的 Setup Check 或者 Hold Check,将根据
proerties 设置显示相应数目的 timing path,双击某一条 timing path,则会在 Timing
Report 右侧栏显示该时序路径的详细信息, 其中主要条目的含义如下:
Start Point | 指时序路径的起点,一般为寄存器的 clock 端或原始输入端 |
End Point | 指时序路径的终点,一般为时序单元的输入数据管脚或原始输出端 |
Point | 依次列出了该时序路径经过的结点名 |
Type | 指明该段时序路径经过的是单元(cell)还是线网(net) |
Incr | 该段时序路径的延时增量 |
Source File | 指明该 net 在 Source File 中定义的地方(需打开 net_info 选项) |
Arrival time | 表示该时序路径的到达时间: Arrival time = Tlaunch edge + Tlaunch clock delay + path delay 在 setup check 的情况下为最大可能延时,而 hold check 的情况下则是最小可能延 时,并且触发时钟的到达时间也已包含在内 |
Logic | 表示逻辑资源在整条时序路径中所占用的延时比例 |
Net | 表示互连资源在整条时序路径中所占用的延时比例 |
Required time | 表示该项时序约束的要求时间: 最大路径约束(setup check): Required time = Tcapture edge + Tcapture clock delay – Tsetup – Tclock uncertainty 最小路径约束(hold check): Required time = Tcapture edge + Thold + Tclock uncertainty |
Slack | 表示时序路径的松弛余量,小于 0 则代表有时序风险: 最大路径约束(setup check): Slack = Required time – Arrival time 最小路径约束(hold check): Slack = Arrival time – Required time |
Timing path 的命名规则为:
“/”表示层级关系; “|”表示并联关系; “.”表示从属关系。
下表介绍了时序路径经过的各节点含义:
Point | Type | Incr | Comment |
lcd/reg0_b1|lcd/reg0_b2.clk | clock | 1.677 | 表示 lcd 模块内的 reg0_b1 和 reg0_b2 被合并 到了同一个 slice,该路径起点为 slice 的 clk 端。 clock 代表时钟树的延时为 1.677ns |
lcd/reg0_b1|lcd/reg0_b2.q[0] | cell | 0.146 | 为 cell 内部的延时,即该 slice 的 clk 端到输出 q[0]的延时为 0.146ns。 |
_al_u349|lcd/reg0_b0.b[1] (lcd/state[2]) |
Net fanout=6 |
0.446 | 为 net 延时,即前一个 slice 的 q 端到下一个 slice 的 b 端之间的线网延时为 0.446ns; 括号里为 net 名称: net lcd/state[2]。 fanout=6,表示该信号一共驱动了 6 个管脚。 |
… | … | … |
对于给出了文件路径的 net 可以右键该 net,点击 Source 则可跳转到源文件相对应
的地方,点击ChipView则可在 ChipView中显示该路径的具体走线,蓝色线段则为该 net
在整个 path 中的部分。
4. 参数设置
在菜单栏中, 展开 Process→Properties
, 弹出 Properties Configuration 窗口, 选择
Timing Option,可以对 Timing Summary 进行参数设置。
表 5-9 Timing Option Properties
Property | Comments | Default |
net_info | 显示 timing report 中的 net 信息 | ON |
ep_num | 显示 endpoints 数量 | 3 |
path_num | 显示每个 endpoint 的 timing paths 数量 | 3 |
report_timing | STA 使用更乐观的数据 | OFF |
Clock Intersection Summary
当 HDL2Bit Flow 运行完成后,双击 Design Summary -> Clock Intersection Summary
即可打开查看 Clock Intersection,主界面如下:
Clock Intersection 的界面主要包括以下部分:
1. Clock Intersection 数据表
此处为时钟交互的数据表格, 表格每一行的数据均是时钟“单向”的, 即从一个时钟
到另一个时钟。 如果两个不同时钟(如 clk_vga_25m 和 sys_clk)之间互有信号发送和捕 获, 在此表格中需要分两行描述, 分别为 clk_vga_25m → sys_clk 和 sys_clk →
clk_vga_25m。
其中, source clock 和 destination clock 定义如下:
Source Clock | data path 起点 DFF 的控制时钟 |
Destination Clock | data path 终点 DFF 的控制时钟 |
表中显示了时序路径的详细信息,与 Timing Report 中的信息相对应,其中主要条
目的含义如下:
Edges(WNS/WHS) | 此单向时钟关系中最 critical 路径的 launch clock、 capture clock 的触发沿。 RISE_RISE 表示 launch/capture clock 均是 上升沿触发,类似的还有 RISE_FALL、 FALL_RISE、 FALL_FALL |
WNS/WHS(ns) | Worst Negative Slack,在此单向时钟关系的所有时序路径中, 最 critical 的那条路径的 slack,以 ns 为单位,不一定为负 |
TNS/THS(ns) | Total Negative Slack,此单向时钟关系的所有时序路径中 slack 为负的总和,以 ns 为单位,肯定不为正。如果不存在 时序违规路径,此值为 0 |
Failing Endpoints(TNS/THS) | 此单向时钟关系的所有时序路径中出现 slack 为负的 endpoint 的总数 |
Total Endpoints(TNS/THS) | design 中存在的此单向时钟关系的所有 endpoint 总数 |
Path req(WNS/WHS) | 在此单向时钟关系的所有时序路径中,最 critical 的那条路径 的 require time,以 ns 为单位 |
打开 Clock Intersection Summary 默认显示 Max Data,同时勾选 Show Min Data,则
会显示 Max 和 Min Data,即显示全部信息。
此处描述的分析类型为 setup 或者 recovery,以及 timing report 中的对应信息。
此处描述的分析类型为 hold 或者 removal,以及 timing report 中的对应信息。
Clock Pair classification:静态综合时序约束的信息对两个时钟进行分类。可能出现
的标签有:
IGNORED | 使用 set_clock_groups 或者 set_false_path 指定此单向时钟关 系中的所有路径不考虑 |
VIRTUAL | 表示 source 或者 destination clock 中至少有一个是 virtual clock,多体现于 input/output path 的时序路径中 |
DERIVED | 表示 source 或者 destination clock 中至少有一个是 derived clock, derived_clocks 生成的时钟 |
NO_COMMON_MASTER | 表示两个时钟来自于两个 primary clock,包括不同 primary clock 之间的比较 |
NO_EXPAND | 表示在 1000ns 范围内两个时钟周期找不到时钟沿重合的点, 完全是异步时钟 |
CLEAN | 表示两个时钟同属一个 primary clock 定义的时钟域且有限 时间跨度内同步 |
静态分析按上述顺序依次检查定性,当满足一个定义时检查终止。
Inter-clock Constraints:在时序分析过程中动态地给单向时钟关系记录并在分析结束
后完成总结定性。可能出现的标签有:
NOPATH | 不存在此单向时钟关系的时序路径 |
FALSE_PATH | 此单向时钟关系中的所有时序路径均为 false path |
EXCLUSIVE_GROUPS | 此单向时钟关系中的所有时序路径均被 set_clock_groups 约 束要求忽略 |
TIMED_SAFE | source 和 destination 时钟同属一个时钟域且周期简单同步 |
TIMED_UNSAFE | source 和 destination 时钟属不同时钟域或者同属一个时钟域 但周期不同步 |
PT_FP_SAFE | source 和 destination 时钟同属一个时钟域且周期简单同步, 有一部分时序路径为 false path |
PT_FP_UNSAFE | source 和 destination 时钟属不同时钟域或者同属一个时钟域 但周期不同步,有一部分时序路径为 false path |
2. N*N 方格图
此处是根据 Clock Intersection 数据表格中的内容画出的一个 N*N 方格图:图中纵
向为 Source clocks,横向为 Destination Clocks,不同的 Inter-clock Constraints 对应不同
的颜色,默认 default 颜色如下:
选择方格中的某一格会在数据表中显示对应的一行;选择数据表中的某一行会在对
应的方格中用白色边框标示。
3. Clock Intersection Options
点击图中按钮处即可打开 Clock Intersecton Options: Visibility 一栏可以通过对任一
clk 前的方框进行勾选或取消勾选来决定显示或隐藏该 clk; Colors 一栏可以对任一
Inter-clock Constraints 的颜色进行修改。
Clock Tree Summary
时钟树报告(Clock Tree Summary)主要用于时钟树的延时分析与辅助调试。报告
会给出详细的时钟网络拓扑结构以及整个时钟的最大时钟偏差。 其中, 时钟网络拓扑结
构包括任意引脚的连接关系和物理属性(位置,网络延时等)、终端引脚按前驱路径的
属性分类(走全局时钟资源和走普通互联资源)和时钟终端按cell属性分类(如slice, bram,
dsp 等); 最大时钟偏差则精确地展现偏差绝对值及对应的引脚集合, 其中偏差值的计算
过程祛除了 common path pessimism。
当 HDL2Bit Flow 运行完成后,双击 Design Summary -> Clock Tree Summary 即可打
开查看 Clock Tree,主界面如下:
Clock Tree Summary 的界面主要包含以下几个部分:
1. Clock Tree Summary
Clock Tree Summary 以时钟域报告为基本单元依次罗列, 时钟域报告以时钟报告为
基本单元依次罗列。时钟以及时钟域的数量与 sdc 中的时钟约束保持一致。
a) Clock Tree Summary
Clock Tree Summary 顶部显示整个时序约束中一共包含的时钟域和时钟数量。
图中 sdc 文件中定义了 3 个 master clock: T65MCP, pll_clk, T16MCP。 Clock Tree Summary 中分 3 组依次展示每一个时钟域及其内部的时钟信息。
b) Clock Group Summary
每个时钟域分为主时钟和多个派生时钟。主时钟在时钟域报告中被第一个罗列,后
续依次为派生时钟。每个时钟域顶部,显示当前时钟域内一共定义了多少时钟。
c) Clock Summary
单时钟报告主要分为 3 部分:
1) 时钟名、时钟频率、类型
其中,单时钟报告内的浅灰色字体为辅助信息,本身不属于时钟网络的内容,用于
解释并表达某类属性或者统计信息。
2) 时钟网络拓扑结构
时钟网络拓扑结构以引脚为基本单元进行描述。 引脚名称的表达方式为 top model
到当前引脚的 Hierarchy Name。
顶部综述本时钟树中的引脚总量。 引脚依据其在时钟树中的级数逐级展开,每个引
脚占用单独一行,两段描述:第一段:引脚的名称,第二段:引脚的简单属性,即所在
的 net、上级引脚到当前引脚的时序弧类型。如果两个引脚属于同一个 instance,那么时
序弧类型为‘cell’,反之为‘net’ ;锁定引脚,右击可以获取更加详细的属性信息。
时钟网络拓扑结构中的时钟终端引脚采用归类法折叠: 共有两级折叠,每一级折叠
的属性中包含引脚数量。
第一级属性包括:
GLOBAL_NETWORK,表示时钟路径走全局时钟互联;
LOCAL_NETWORK,表示时钟路径走普通互联,多见于 skew 较大的时钟;
NONCLOCK,表示终端引脚为非时钟功能。
第二级属性为逻辑单元的名称,如 MSLICE/LSLICE/IOL/DSP 等。
被当前引脚驱动的多个引脚可能包含时钟树躯干引脚和终端引脚:没有被灰色解释
字体折叠的引脚均为躯干引脚;被灰色解释字体折叠的引脚均为终端引脚。
3) 最大时钟偏差
时钟源到任意一个终端引脚的延时存在一个范围: 最好延时和最坏延时。 比较整个
时钟网络的最好延时引脚和最坏延时引脚,得到差值即为最大时钟偏差。
时钟偏差分为:上升沿时钟偏差和下降沿时钟偏差。时序库延时数据分为信号上升
沿和下降沿延时,因此分别计算时钟上升沿和下降沿的时钟偏差值及对应的引脚集合。
时钟偏差按组描述: 最大偏差一定发生在整个时钟树的某一子树内部。 如果时钟树
内存在两个子树的偏差相同,且均为最大偏差,那么需要分两组分别展示。然而, 最大
时钟偏差通常发生在以整个时钟树根结点的 ‘子树’ 内,因此多数时钟的最大偏差只
有一组。
一组偏差内的引脚按类进行描述,类别有:
FASTEST:从 common ancestor 开始的延时最短的引脚集合;
SLOWEST:从 common ancestor 开始的延时最长的引脚集合;
MUTUAL:从 common ancestor 开始到此子树所有叶子引脚的最长与最短延
时均相同。最大时钟偏差发生时部分终端引脚延时最长且部分终端引脚延时
最短,通常发生于非常平衡的时钟树。
FASTEST/SLOWEST:
分别展示最大和最小延时引脚集合。这里的引脚仅用 hier name 表示,相关属性可
在 TOPOLOGY 中查找。
MUTUAL:
最大偏差的计算是比较各个引脚 min delay 和 max delay 的差值,差值最大的引脚集
合即为最大偏差引脚集合。当差值最大的引脚集合为同一个集合时,表示最大偏差发生
在此集合内任意两个引脚之间(多见于完全平衡时钟树)。因此, FASTEST 和 SLOWEST
集合为同一个集合,只需描述一次,采用 MUTUAL 关键字。
没有回复内容