划分与编码风格

合理的设计划分和好的HDL编码风格对成功的综合影响很大。

逻辑划分是成功综合(和布局布线,如果布图是层次化的)的关键。

综合划分


“分而治之”

把复杂的设计化简为更简单的和易处理的模块。

1.相关组合逻辑保持在同一个模块中。

2.为设计复用进行划分。

3.根据功能分割模块。

4.结构模块与随机模块分离。

5.合理限制模块的大小。

6.划分顶层(I/O压焊块、边界扫描和核心逻辑相分离)。

7.不要在顶层添加粘合逻辑。

8.将状态机从其他逻辑中分离出来。

9.避免一个模块有多个时钟。

10.分离用于同步多个时钟的模块。

11.划分时,考虑布图风格。

在设计层次已经由先前编写的HDL代码确定后,group和ungroup命令给设计者提供了在DC中划分的能力。

RTL


设计的RTL描述通过从一个寄存器到另一个寄存器的逻辑变换和传输来描述设计。逻辑值被存储在寄存器中,通过一些组合逻辑对其求值,随后将结果存储与下一个寄存器中。

编码原则


一、工艺无关

HDL代码应采用与工艺无关的方式编码。库中门的硬编码实例应当最小化。优先选择的是推断而不是例化。代码可重用。

二、时钟相关逻辑

1.包括门控时钟逻辑的时钟逻辑和复位生成应当保持在一个模块内--综合一次并且不再涉及了。

2.避免每个模块有多个时钟--尽量保持每个模块有一个时钟。

3.应该给时钟赋以有意义的名称。建议保持时钟名以反映其功能和频率。

4.对于DFT扫描插入,要求从原始输入控制时钟。

三、顶层没有粘合逻辑

四、模块名与文件名一致

不要在文件中描述多个模块或实体,一个文件应只包含一个面向综合的模块/实体定义。

五、压焊块同核心逻辑分离

将顶层划分为“压焊块”和“核心”两个单独的模块。

六、最小化不必要的层次

七、寄存所有输出

八、FSM综合

1.状态名应使用VHDL中的“枚举类型”或Verilog中的“参数”来描述。

2.计算一下状态的组合逻辑应在状态寄存器独立的process或always块中。

3.用case语句实现下一个状态组合逻辑电路。

逻辑推断


一、不完全敏感信号列表

不完全敏感信号列表会导致RTL和综合逻辑间的仿真不匹配。

二、存储元件推断

有两种类型的存储元件--锁存器和触发器。

锁存器为电平敏感存储元件,而触发器通常为边沿敏感。

锁存器推断

当条件语句没有完全指定时就会推断出锁存器。

缺少else部分的if语句

always@(weekend)
begin
if(weekend)
action = go_to_beach;
end

不完整的case语句

`define sunny 2'b00
`define snowy 2'b01
`define windy 2'b10 wire [1:0] weather; case(weather)
sunny : action = go_motorcycling;
snowy : action = go_skiing;
windy : action = go_paragliding;

上述语句只覆盖了weather中的3个值,应如下(包括default):

`define sunny 2'b00
`define snowy 2'b01
`define windy 2'b10 wire [1:0] weather; case(weather)
sunny : action = go_motorcycling;
snowy : action = go_skiing;
windy : action = go_paragliding;
default : action = go_paragliding;

寄存器推断

当在always块的敏感信号表中指定一个边沿,就会推断一个寄存器。

为在always块中赋值的每个变量都推断一个寄存器,所有不直接依赖时钟沿的变量赋值应该在单独的、其敏感信号表不含边沿指定的always块中进行。

异步复位

always@(posedge clk,negedge reset)
begin
if(reset)
reg_out <= 1'b0;
else
reg_out <= data;
end
always@(posedge clk)
begin
if(reset)
reg_out <= 1'b0;
else
reg_out <= data;
end

三、多路选择器推断

通常,if语句用于推断锁存器和优先编码器,而case语句用于实现多路选择器。推荐只使用case语句来推断多路选择器,if语句可用于推断锁存器和优先编码器。

四、三态推断

当高阻(Z)赋给输出时,推断出三态逻辑。

通常不提倡随意使用三态,原因如下:

1.三态逻辑降低可测性。

2.三态逻辑难以被优化,因为它不能被缓冲。

然而,三态逻辑也有其优势,就是能显著节省面积。

assign  tri_out = enable ? tri_in : 1'bz;

顺序相关


阻塞与非阻塞

当进行顺序赋值如几个互斥的数据传输的流水线操作和建模时,使用非阻塞赋值语句是重要的。因为最终结果依赖于赋值计算顺序,所以在顺序进程中使用阻塞赋值语句可引起竞争条件。非阻塞赋值是顺序无关的,因此它们同硬件的行为紧密相符。

参考资料


[1]. 高级ASIC芯片综合

DC综合:划分与编码风格的更多相关文章

  1. DC综合环境的一些概念

    DC综合环境的一些概念 启动文件 .synopsys_dc_setup 采用Tcl格式,包含工艺库的路径信息和其他环境变量 不同位置启动顺序 1.Synopsys安装目录 2.用户家目录 3.项目工作 ...

  2. 【翻译】Ext JS——高效的编码风格指南

    原文:ExtJS - Efficient coding style guide 作者:Raja 切勿使用"new"关键字:在Ext JS中,使用"new"关键字 ...

  3. DC综合及仿真验证和DFT测试

           综合技术是提高设计产能的一个很重要的技术,没有综合技术的发展就不可能用HDL实现电路的设计,因为HDL开始是用来供电路仿真建模使用的,到了后来才把其中一部分子集作为可综合的语言,也就是R ...

  4. Android 编码风格规范,很赞哦

    1. 前言 这份文档参考了 Google Java 编程风格规范和 Google 官方 Android 编码风格规范.该文档仅供参考,只要形成一个统一的风格,见量知其意就可. 1.1 术语说明 在本文 ...

  5. 学习Linux的编码风格

    对于编码,每个码农或许都会有自己的一套风格,很多人可能对编码风格压根就不关心,因为最终编译器编译出来的目标代码并不会受影响.但是在开发一个大型项目时,花费时间成本最多的永远是开发者们之间的沟通与交流. ...

  6. R 语言编码风格指南

    R 语言是一门主要用于统计计算和绘图的高级编程语言.这份 R 语言编码风格指南旨在让我们的 R代码更容易阅读.分享和检查.以下规则系与 Google 的 R 用户群体协同设计而成. 概要: R编码风格 ...

  7. Nim编码风格

    介绍 Nim语言不限制开发人员使用哪种具体的编码风格, 但为了社区的发展,在编写一些标准库的时候还是应该遵从统一的编码风格 这篇文章会列出一系列的编码风格准则,供大家参考. 但值得注意的是,有很多例外 ...

  8. 一步一步学Python(1) 基本逻辑控制举例和编码风格规范

    (1) 基本逻辑控制举例和编码风格规范 1.while死循环 2.for循环 3.if,elif,else分支判断 4.编码风格(官方建议) 版本:Python3.4 1.while死循环 #func ...

  9. 来自 Google 的 R 语言编码风格指南

    来自 Google 的 R 语言编码风格指南R 语言是一门主要用于统计计算和绘图的高级编程语言. 这份 R 语言编码风格指南旨在让我们的 R 代码更容易阅读.分享和检查. 以下规则系与 Google ...

随机推荐

  1. 洛谷——P1311 选择客栈

    https://www.luogu.org/problem/show?pid=1311 题目描述 丽江河边有n 家很有特色的客栈,客栈按照其位置顺序从 1 到n 编号.每家客栈都按照某一种色调进行装饰 ...

  2. hdu5308 I Wanna Become A 24-Point Master(构造)

    题目:pid=5308" target="_blank">http://acm.hdu.edu.cn/showproblem.php? pid=5308 题意:给定 ...

  3. php中类文件名的命名的规则是什么

    php中类文件名的命名的规则是什么 一.总结 一句话总结:类库文件(工具类)类文件都是以.class.php为后缀. 1.类的方法和属性的命名规则是怎样的? 都是小驼峰法 方法的命名使用驼峰法,并且首 ...

  4. scroolspy滚动监听插件

    <nav id="nav" class="navbar navbar-default"> <a href="#" clas ...

  5. 如何应对DDOS网络攻击

      650) this.width=650;" border="0" alt="" src="http://img1.51cto.com/a ...

  6. 关于EJB--实体Bean的BMP和CMP选择

    EJB有两种主要类型BMP(Bean managed persistence )和CMP(Container managed persistence ),这两种类型各有优缺点. BMP是在Bean中完 ...

  7. vuex-store模块化配置

    一.目录结构: src -> js -> modules 1. 在modules下新建文件夹,文件夹名称按模块功能命名 如: modules ---- home -> homeMod ...

  8. python 时间合集 一

    **以下内容均为我个人的理解,如果发现错误或者疑问可以联系我共同探讨**#### python中4种时间表示形式:1.格式化时间字符串 2.时间戳 3.时间元祖 4.时间对象- string_time ...

  9. 三、Docker镜像的相关操作

    原文:三.Docker镜像的相关操作 一.查看本地镜像: docker images 二.使用某个镜像来运行容器: docker run -t -i xxxx(镜像名):xx.xx(版本,不带即最新) ...

  10. 初识ThreadLocal

    近期公司在进行Java开发者的招聘活动,当中有一道面试题是这种:"请简单描写叙述一下ThreadLocal类的作用." 结果发现有非常多的面试者没有听说过ThreadLocal或者 ...