首页
学习
活动
专区
圈层
工具
发布
50 篇文章
1
资源利用率报告中的LUT和LUTRAM有什么区别
2
xilinx verilog语法技巧(三)--RAM的初始化
3
为什么推荐使用XPM?
4
Block RAM的基本结构
5
为什么要用XPM_MEMORY
6
Vivado中用于时钟操作的几个Tcl命令
7
影响FPGA时序的进位链(Carry Chain), 你用对了么??
8
动态时钟相位
9
动态时钟频率
10
如何缩短Vivado运行时间
11
你的FPGA设计有这些缺陷吗
12
report_utilization远比你想象的强大
13
vivado如何快速找到schematic中的object
14
FPGA中的CLOCK REGION和SLR是什么含义
15
FPGA中的BEL, SITE, TILE是什么含义
16
如何快速查找目标cell
17
都是pin,有什么区别
18
都是net,有什么区别
19
一张图看懂cell, pin, net, port
20
如何快速找到组合逻辑生成的时钟
21
【Vivado那些事】Vivado下头文件使用注意事项
22
Pblock可以这么画
23
关于Pblock的8个必知问题
24
常用的跟Pblock相关的Tcl命令
25
【Vivado】那些事儿-汇总篇
26
【Vivado那些事】Xilinx FPGA普通IO能不能直接接入PLL作为时钟输入
27
Storage Elements
28
D触发器都有哪几种类型?对应什么样的代码?
29
Xilinx 7系列FPGA逻辑单元理解
30
Vivado下查看芯片资源
31
对RAM初始化怎么做
32
干货:Vivado 直接修改RAM初始化文件,避免重新综合、实现的方法
33
借助Elaborated Design优化RTL代码
34
一张图理解什么是好的设计层次
35
9个关于SSI芯片的必知问题
36
Vivado 2018.3 report_qor_suggestions怎么用
37
Vivado 2019.1新特性(5):更新的report_qor_suggestions
38
Xilinx的高质量时钟输出ODDR原语【随路时钟】【全局时钟网络】【ZC706输出时钟】【ZYNQ】
39
FPGA中BEL Site Tile FSR SLR分别指什么?
40
跟I/O相关的几个命令
41
Vivado Non-Project模式
42
FPGA中降低时钟skew的几种方法
43
FPGA时序优化之Reduce MUXF Mapping
44
什么是Forwarded Clock?
45
几个常见问题
46
如何让同一层次的模块在布局时更紧凑一些
47
什么情况下要用OOC综合方式
48
Vivado 2019.1新特性(2):report_ram_utilization
49
URAM和BRAM有什么区别
50
write_first/read_first/no_change什么区别
清单首页FPGA文章详情

一张图理解什么是好的设计层次

创建设计的第一步是设计分割,设计分割的依据是数据流。设计分割的结果是将设计划分为特定的功能单元,从而使得不同的设计者并行工作,同时每个功能单元可封装为相对独立的IP,实现设计复用。

设计分割时需要考虑的一个重要因素是定义设计层次(Design Hierarchy)。定义设计层次则需要兼顾以下因素:

  • 功能
  • 时序收敛
  • 运行时间
  • 调试

从时序收敛的角度看,定义设计层次时尽可能从以下几个方面着手,可减少时序收敛的迭代次数。

尽可能将I/O单元放置在顶层

I/O单元分两类:

第一类:简单的单端口I/O(例如IBUF、OBUF、OBUFT和IOBUF)和单速率(SDR, single data-rate)寄存器。对于这类I/O单元,综合工具可根据RTL代码推断出来。

第二类:需要通过原语(primitive)实例化的I/O单元(例如双端口I/O:IBUFDS,OBUFDS)和双速率(DDR, double data-rate)寄存器(例如:IDDR, ODDR,ISERDES和OSERDES)

尽可能将时钟单元放在顶层

时钟单元是指时钟生成模块(例如MMCM,PLL)。将其放置在顶层可便于其他模块共享时钟,从而减少时钟资源(除MMCM和PLL之外还包括BUFG等)的利用率,这对于提高系统性能、降低系统功耗也是有益的。

尽可能使逻辑边界上的数据路径是寄存器输入/寄存器输出

对于包含关键路径的层次边界,要使其输出为寄存器输出,这样可将该路径封装于特定的模块或边界之内。同时,对位于层次边界上的路径的输入也尽可能做到寄存器输入。毕竟,相比于路径分散至多个模块而言,位于单一模块内的时序路径更易分析和修复。对于未寄存的数据路径所在的层次,综合时应将层次优化设置为rebuilt或full,以使优化可以穿越层次。这可通过综合属性KEEP_HIERARCHY实现。对位于边界的数据路径寄存还可获得一个好处:调试时易于跟踪。

下图是一个很好的例子,解释了什么是好的设计层次。可以看到模块的输入输出都做了寄存处理;时钟模块放置在设计的顶层。同时,对顶层的输入输出寄存器使用了综合属性SHREG_EXTRACT,并将其值设置为“no”。目的是保证这些寄存器不会被综合为基于LUT的移位寄存器。毕竟,设计顶层的寄存器可以使用SLICE里的Flip-flop实现,也可以使用IOB中的寄存器实现。这可根据时序需求进行选择。

====================

///回复“年+月”6位数字,可查看yyyy年mm月好文

例如:回复 201805 可查看2018年5月内容///

下一篇
举报
领券