划分与编码风格

合理的设计划分和好的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. 洛谷 P3371 【模板】单源最短路径

    P3371 [模板]单源最短路径 题目描述 如题,给出一个有向图,请输出从某一点出发到所有点的最短路径长度. 输入输出格式 输入格式: 第一行包含三个整数N.M.S,分别表示点的个数.有向边的个数.出 ...

  2. 信号 signal sigaction补充

    目前linux中的signal()是通过sigation()函数实现的. 由signal()安装的实时信号支持排队,同样不会丢失. 先看signal 和 sigaction 的区别: 关键是 stru ...

  3. Fedora 10下应用网络模拟器NS心得

    650) this.width=650;" onclick='window.open("http://blog.51cto.com/viewpic.php?refimg=" ...

  4. IIS发布asp.net mvc项目(asp.net core也是一样)

    因为之前都是利用其他的工具在linux上面进行发布,导致现在忘记了在IIS上面怎么发布,现在就记录下来,以防不时之需吧 第一步: 在vs里面进行项目发布:指定好发布的位置,点击发布就好了 第二步:右击 ...

  5. BZOJ1014[JSOI2008]火星人prefix(splay维护hash)

    Description 火星人最近研究了一种操作:求一个字串两个后缀的公共前缀.比方说,有这样一个字符串:madamimadam,我们将这个字符串的各个字符予以标号:序号: 1 2 3 4 5 6 7 ...

  6. 用电脑从Google Play下载apk

    用电脑从Google Play下载apk 方法一:给Chrome浏览器安装apk-downloader插件,需禁止 SSL 错误警告,即在Chrome的快捷方式上加入"--ignore-ce ...

  7. string-format样式使用

    首先我们看如下代码 protected String calcu1() { StringBuffer resultB = new StringBuffer(); String str = null; ...

  8. 15.lambda表达式

    #include <iostream> #include <array> using namespace std; //解决函数怀孕现象 //[](){} //[] =引用,只 ...

  9. JS/CSS 全屏幕导航 – 从上到下动画

    <!DOCTYPE HTML> <html> <head> <meta charset="utf-8"> <title> ...

  10. android开发设计辅助工具整理

    1.Button设计工具button设计